Ankündigung

Einklappen
Keine Ankündigung bisher.

Modbus

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #31
    Servus !

    Das sieht doch schon mal gut aus, soweit bin ich nicht gekommen...war aber auch nicht sehr geduldig :-)

    Könntest du deinen aktuellen Stand mal Posten, oder mir zu Schicken ? Morgen Abend hätte ich mal wieder nen bisschen Zeit.

    Gruß
    Jörg

    Kommentar


      #32
      Hi
      Klar bekommst du die Daten.
      Alle Daten von pluggit_01.zip entpacken nach "/data/callidomus/local/plugins/pluggit"
      Callidomus Core neustarten
      Unter "https://callidomus.local:445/#plugins" das Plugin aktivieren und die IP Adresse der Pluggitanlage Eintragen
      Unter "https://callidomus.local:445/#items" das Item pluggit.fanSpeed erstellen, Typ=Nummer, Generische Attribute pluggit_listen=prmRomIdxSpeedLevel
      Unter "https://callidomus.local:445/#visu" eine Seite erstellen mit dem Widget Wert und dem Item pluggit.fanSpeed
      Visu neustarten
      Und dann sollte man es testen können (hoffe ich)
      MFG Simon
      Angehängte Dateien

      Kommentar


        #33
        Also
        Scheinbar gibt es Probleme die Verbindung zur KWL aufrecht zu halten.
        Ich habe die Zeit zum abrufen stark runtergesetzt auf 30sec und bekomme keine fehler mehr.
        Aber es kann ja nicht sinn und zweck sein alle 30sec die Daten von der KWL abzurufen.
        Hat jemand eine Idee?
        MFG Simon

        Kommentar


          #34
          Hi Simon,
          solange du nur die Fehlermeldungen ohne die Passenden codestellen postets kann dir nicht geholfen werde...
          Viele Grüsse
          Jürgen

          Kommentar


            #35
            Leider verstehe ich davon zu wenig
            Aber ich kann es ja mal versuchen.
            Wenn ich das Richtig verstehe bezieht sich
            Code:
            2017-01-12 16:41:21,044 ERROR Pluggit Pluggit: something went wrong in the refresh function: 'NoneType' object has no attribute 'getRegister' -- __init__.py:_refresh:292
            auf das scipt __init__.py Zeile 292 Richtig?
            Code:
                    except Exception as e:
                        logger.error("Pluggit: something went wrong in the refresh function: {0}".format(e))
                        return
                    end_time = time.time()
                    cycletime = end_time - start_time
                    logger.debug("Pluggit: cycle took {0} seconds".format(cycletime))
            und die Nachfolgende meldung
            Code:
            2017-01-12 17:26:23,130 DEBUG Pluggit Transaction failed. ([Errno 32] Broken pipe) -- transaction.py:execute:70
            auf das scipt transaction.py Zeile 70 Richtig?

            Code:
                def execute(self, request):
                    ''' Starts the producer to send the next request to
                    consumer.write(Frame(request))
                    '''
                    retries = Defaults.Retries
                    request.transaction_id = self.getNextTID()
                    _logger.debug("Running transaction %d" % request.transaction_id)
            
                    while retries > 0:
                        try:
                            self.client.connect()
                            self.client._send(self.client.framer.buildPacket(request))
                            # I need to fix this to read the header and the result size,
                            # as this may not read the full result set, but right now
                            # it should be fine...
                            result = self.client._recv(1024)
                            self.client.framer.processIncomingPacket(result, self.addTransaction)
                            break;
                        except socket.error as msg:
                            self.client.close()
                            _logger.debug("Transaction failed. (%s) " % msg)
                            retries -= 1
                    return self.getTransaction(request.transaction_id)
            Hilft das weiter?
            MFG Simon
            Zuletzt geändert von SimonK; 12.01.2017, 20:12.

            Kommentar


              #36
              Nein...Da man so nicht zuordnen kann wo welch Zeile ist...

              okay durch deine oben angehängten code sieht man das der Fehler hier im try block passieren muss weil nur da ein getRegister aufruf ist.

              Code:
               try:
                      # myCounter = 1
                          for pluggit_key in self._myTempReadDict:
                              # logger.debug("Pluggit: ---------------------------------> Wir sind in der Refresh Schleife")
                              values = self._modbusRegisterDic[pluggit_key]
              [COLOR=#FF0000] # [/COLOR]logger.debug("Pluggit: Refresh Schleife: Inhalt von values ist {0}".format(values))
                              # 2015-01-07 23:53:08,296 DEBUG    Pluggit      Pluggit: Refresh Schleife: Inhalt von values ist 168 -- __init__.py:_refresh:158
                              item = self._myTempReadDict[pluggit_key]
                              # logger.debug("Pluggit: Refresh Schleife: Inhalt von item ist {0}".format(item))
                              # 2015-01-07 23:53:08,316 DEBUG    Pluggit      Pluggit: Refresh Schleife: Inhalt von item ist pluggit.unitMode -- __init__.py:_refresh:160
              
                              #=======================================================#
                              # read values from pluggit via modbus client registers
                              #=======================================================#
              
                              # logger.debug("Pluggit: ------------------------------------------> Wir sind vor dem Auslesen der Werte")
                              registerValue = None
              [COLOR=#FF0000]  registerValue = self._Pluggit.read_holding_registers(values, read_qty = 1).getRegister(0)[/COLOR]
              jetzt must du rausfinden welcher der Register aufrufe fehlschläft...am besten nimmst du deine Doku zur Hand und schaust nach welch der Register es bei dir wirklich gibt. Oder du kommentierst die Loggermeldungen wieder ein...z.b. mit dem roten # würde ich anfangen.

              Code:
                _modbusRegisterDic = {
                      # 'prmDateTime': 108,                   # 40109: Current Date/time in Unix time (amount of seconds from 1.1.1970)
                      'prmRamIdxT1': 133,                     # 40133: T1, °C
                      'prmRamIdxT2': 135,                     # 40135: T2, °C
                      'prmRamIdxT3': 137,                     # 40137: T3, °C
                      'prmRamIdxT4': 139,                     # 40139: T4, °C
                      # 'prmRamIdxT5': 140,                   # 40141: T5, °C
                      'prmRamIdxUnitMode': 168,               # 40169: Active Unit mode> 0x0004 Manual Mode; 0x0008 WeekProgram
                      'prmRamIdxBypassActualState': 198,      # 40199: Bypass state> Closed 0x0000; In process 0x0001; Closing 0x0020; Opening 0x0040; Opened 0x00FF
                      'prmRomIdxSpeedLevel': 324,             # 40325: Speed level of Fans in Manual mode; shows a current speed level [4-0]; used for changing of the fan speed level
                      # 'prmVOC': 430,                        # 40431: VOC sensor value (read from VOC); ppm. If VOC is not installed, then 0.
                      # 'prmBypassTmin': 444,                 # 40445: Minimum temperature of Bypass openning (°C), if T1 < Tmin then bypass should be closed
                      # 'prmBypassTmax': 446,                 # 40447: Maximum temperature of Bypass openning (°C), if T1 > Tmax or Tmax is 0 then bypass should be closed
                      # 'prmWorkTime': 624                    # 40625: Work time of system, in hour (UNIX)
                      'prmNumOfWeekProgram': 466,             # 40467: Number of the Active Week Program (for Week Program mode)
                      'prmFilterRemainingTime': 554           # 40555: Remaining time of the Filter Lifetime (Days)
                  }

              p.s. Die Frage aus Post #28 ist auch wichtig...das du die Beantwortest.

              Vg
              Jürgen
              Zuletzt geändert von heckmannju; 12.01.2017, 22:02.

              Kommentar


                #37
                Guten Abend
                Ich verwende habe pymodbus-python3.
                Die Register sind alle verfügbar, da ich das Plugin unter SmartHome.py ohne Probleme am laufen hatte und ich mir da auch alles anzeigen lassen konnte.
                Momentan hole ich mir nur das Register "'prmRomIdxSpeedLevel': 324"
                Wenn ich Loggermeldungen aktiviere die du vorgeschlagen hast kommt folgendes

                Code:
                2017-01-12 22:45:19,504 DEBUG    Pluggit      Pluggit: Refresh Schleife: Inhalt von values ist 324 -- __init__.py:_refresh:197
                2017-01-12 22:45:19,505 DEBUG    Pluggit      Running transaction 2 -- transaction.py:execute:56
                2017-01-12 22:45:19,507 DEBUG    Pluggit       -- transaction.py:processIncomingPacket:338
                2017-01-12 22:45:19,508 DEBUG    Pluggit      getting transaction 2 -- transaction.py:getTransaction:158
                2017-01-12 22:45:19,509 ERROR    Pluggit      Pluggit: something went wrong in the refresh function: 'NoneType' object has no attribute 'getRegister' -- __init__.py:_refresh:292
                2017-01-12 22:45:20,036 DEBUG    Scheduler    Pluggit next time: 2017-01-12 22:50:20+01:00 -- scheduler.py:_update_next_time:403
                MFG Simon

                Kommentar


                  #38
                  Hi Simon,
                  dann weiss ich auch nicht weiter.
                  Was für eine pymodbus lib und phyton verwendest du den unter smarthome.py?

                  Noch eine Frage da ich mir die Lib auch nochmal ansehen werde...gibt es da so einen Debug modus wo man sich die gesendeten und empfangenen Bytes ansehen kann?

                  Viele Grüsse
                  Jürgen
                  Zuletzt geändert von heckmannju; 13.01.2017, 17:34.

                  Kommentar


                    #39
                    Hi Simon,

                    ich habe mich jetzt mal ein wenig intensiver mit dem Plugin beschäftigt und bei mir läuft es jetzt so weit. Ich bin zwar noch dran das man auch die Lüfter stufe einstellen kann, aber sonst haut alles hin. Ich habe auch mal die config.md und die item.md erweitert und mit den commands gefüttert.

                    Den Error den du bekommst habe ich auch ab und an mal, allerdings scheint das nix neues zu sein siehe den Post hier vom 15.06.2015 :-) Wenn ich die refresh time bei ca 10s halte kommt der Fehler gar nicht.

                    Gruß
                    Jörg

                    P.S.: Hier noch die Version mit der es bei mir läuft.. Pluggit.zip

                    Kommentar


                      #40
                      Nochmal die Frage an euch beide pymodbus Experte. Wie kann man das Tracing einschalten?

                      Kommentar


                        #41
                        Was genau meinst du den mit Tracing ? Im Bezug zu Modbus oder allgemein ?

                        Kommentar


                          #42
                          Das man sieht welch Daten (Bytes) geschickt wurden was empfangen wurde...Connection auf abbauen Wartezeiten usw. Bei der minimalmodbus muss man nur einen Schalter umlegen dann sieht man alles wichtige was abgeht.

                          Kommentar


                            #43
                            Huhu

                            @ Jürgen: Sowas kenne ich von pymodbus nicht, bin aber auch keine "experte"

                            Was die Fehlermeldung angeht, so tritt die immer auf wenn die refresh time über 60s ist, da nach 60 Sekunden die Pluggit Anlage die Verbindung trennt und es beim Wiederaufbau manchmal zu Problemen kommt.

                            Ich schreibe das Plugin aber gerade ein wenig um und werde versuchen mich dem Fehler abzunehmen.

                            Gruß
                            Jörg

                            Kommentar


                              #44
                              Guten Abend
                              Also Experte bin ich absolut überhaupt nicht :-D
                              Zu dem refresh Fehler gibt's die Möglichkeit vor dem Aktualisieren zu trennen dann wird zwar die Verbindung immer wieder neu aufgebaut aber man hat keine Ärger mehr mit dem Fehler.

                              MFG Simon
                              Angehängte Dateien

                              Kommentar


                                #45
                                Ich muss das Thema nochmal ausgraben
                                Seit dem Update am 25.02 kann ich auf meine KWL nicht mehr zugreifen.
                                Was hat sich geändert?
                                Bei callidomus.debug kommt folgendes
                                Code:
                                2017-03-04 12:14:52,268 INFO     Core         Pluggit: connecting to {'cycle': 60, 'host': '192.168.178.4', 'plugin': 'pluggit', 'port': 502, 'type': 'plugin', '_nid': 409, '_path': 'KWL', '_parent': '', '_node': 'KWL'}:502 -- __init__.py:connect:94
                                2017-03-04 12:14:52,271 INFO     Core         Pluggit: connected to {'cycle': 60, 'host': '192.168.178.4', 'plugin': 'pluggit', 'port': 502, 'type': 'plugin', '_nid': 409, '_path': 'KWL', '_parent': '', '_node': 'KWL'}:502 -- __init__.py:connect:101
                                2017-03-04 12:14:52,273 INFO     Core         Pluggit: connection took 0.004687786102294922 seconds -- __init__.py:connect:104
                                2017-03-04 12:14:52,274 INFO     Core         Pluggit: disconnect took 1.5974044799804688e-05 seconds -- __init__.py:disconnect:115
                                Code:
                                2017-03-04 12:23:29,285 DEBUG    KNX          KNX: sending connect request -- base.py:_send_connect_request:298
                                Exception in thread Pluggit:
                                Traceback (most recent call last):
                                  File "/usr/local/lib/python3.6/threading.py", line 916, in _bootstrap_inner
                                    self.run()
                                  File "/mfs/core/lib/plugin.py", line 185, in run
                                    self.plugin.start()
                                AttributeError: 'Pluggit' object has no attribute 'start'
                                Hat einer von euch eine Idee?
                                MFG Simon

                                Kommentar

                                Lädt...
                                X