Ankündigung

Einklappen
Keine Ankündigung bisher.

Systemair Modbus-Plugin (Zentrale Lüftungsanlage)

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

    Systemair Modbus-Plugin (Zentrale Lüftungsanlage)

    Hallöchen,

    für meine Systemair Lüftungsanlage habe ich ein neues Plugin geschrieben. Das universelle Modbus-Plugin hat nicht funktioniert. Alle Infos und das Plugin selber sind im neuem SmarthomeNG-Fork im Developer-Zweig eingecheckt.

    https://github.com/smarthomeNG/smart...gins/systemair

    Bitte beachtet die Readme. Zwei Python-Pakete (minimalmodbus und Pyserial) müssen nachinstalliert werden.

    Gruss,

    Stefan
    Sonos

    #2
    Kann es zwar nicht verwenden, begrüße die Mitarbeit aber sehr

    Kommentar


      #3
      Gerne. Das Sonos-Plugin werde ich auch, soweit de Zeit es zulässt, weiterhin pflegen. Ein "Harmony-Hub"-Plugin ist auch in Arbeit.

      Grüsse,

      Stefan
      Sonos

      Kommentar


        #4
        Hi, das ist ja super, ich hatte das vor 2 Jahren mal angefangen aber dann kapituliert, bin gerade dabei mir die neuste py zu installieren und werde dann sofort testen (-:

        B

        Kommentar


          #5
          Hi, kleine Korrektur:
          [Systemair] class_name = systemair class_path = plugins.systemair serialport = /dev/ttyUSB0 # serial port of modbus device # slave_address = 1 # default: 1 # update_cycle = 30 # default: 30sec Die Klasse mus in der Doku groß Geschrieben werden : class_name = Systemair


          Kommentar


            #6
            So, erster Test wie erwartet misslungen... (-:
            ich bekomme folgende Meldungen:
            2016-09-25 17:31:59 ERROR __init__ Modbus systemair Wrong given number of bytes in the response: 0, but counted is 3 as data payload length is 4. The data payload is: '\x00d\x00&' -- __init__.py:_read_modbus:242
            2016-09-25 17:32:26 DEBUG scheduler Scheduler Modbus systemair next time: 2016-09-25 17:32:56+02:00 -- scheduler.py:_next_time:316
            2016-09-25 17:32:29 ERROR __init__ Modbus systemair Wrong given number of bytes in the response: 0, but counted is 3 as data payload length is 4. The data payload is: '\x00d\x00&' -- __init__.py:_read_modbus:242


            Sieht mir nach grundlegenden Kommunikationsproblemen aus, daher erst mal die Fragen:
            Ich habe eine USB nach RS485 Stick,
            [ 2.490579] usb 1-1.2: Product: USB485 Iso stick
            [ 2.492558] usb 1-1.2: Manufacturer: Hjelmslund Electronics

            der auch noch die FTDI Treiber braucht (glaube ich zumindest, vor 3 Jahren war es so...)
            Wie stelle ich denn das Serielle Protokoll einß 9600,8,n,1 hatte ich unter Windows mal zum laufen gebracht...
            Damals hatter ich auch noch Modbus Paramter Delay 5ms und Timeout 100 ms eingestellt - das hast du sicher auch irgendwo abgelegt?


            und auf was bezieht sich die Fehlermeldung? auf das erste Register das schief geht?

            Meine Conf:
            [Systemair]
            class_name = Systemair
            class_path = plugins.systemair
            serialport = /dev/ttyUSB0
            slave_address = 138 # default: 1
            # update_cycle = 30 # default: 30sec




            [kwl]

            [[Luefterdrehzahl_Zuluft]]
            # in Umdrehung pro Minute
            # read
            type = num
            systemair_regaddr = 111

            [[Luefterdrehzahl_Abluft]]
            # in Umdrehung pro Minute
            # read
            type = num
            systemair_regaddr = 112

            [[Isttemperatur_Heizregister]]
            # read
            type = num
            systemair_regaddr = 208
            eval = value / 10 #to get Celsius

            Uwe

            Kommentar


              #7
              Ich verlinke dir heute Abend mal den Stick den ich bei Amazon gekauft habe. Dieser hat drei Jumper, die man einstellen kann.
              Desweiteren muss du sicher gehen, das dein Adapter die gleichen Einstellungen hat wie die KWL. Im Menü der Sytemair kannst du die Modbus-Paramter anschauen und ggf. anpassen.

              Gruss, Stefan
              Sonos

              Kommentar


                #8
                Danke, bin bis Mitwoch offline...

                Aber ich habe zum eine entdeckt das mein Phython 3.5 ist und das es eien Debug Mode gibt... ich spiel mal bischen in der minimalmodbus datei rum...

                Nachdem ich die Adresse nun korrekt habe ein Konvertierungsproblem?

                2016-09-26 08:49:44 ERROR __init__ Modbus systemair 'ascii' codec can't encode character '\xcf' in position 99: ordinal not in range(128) -- __init__.py:_read_modbus:242

                wie geht man da beim Fehlersuchen vor? Läuft das sicher mit RTU? in der Klasse steht was von "muss mitgegeben werden?"

                so ich muß los - bis Mittwoch

                Uwe
                Zuletzt geändert von boardman; 26.09.2016, 07:52.

                Kommentar


                  #9
                  Hallo Stefan,
                  so bin wieder da und habe noch mal ein bischen geforscht - wenn ich das richtig sehe liest du immer alle Register und gibst dann nur die relevanten weiter? Wie kann ich am besten testen ob die Kommunikation generell klappt? die 242 ist die Zeile mit dem Fehler? im init.py ist das dann
                  logger.error(err) ???

                  Weitere Möglichkeiten zum Testen (debug?)

                  Uwe

                  Kommentar


                    #10
                    Nach deaktivieren des Debug Modes in der Minimodbus.py bekomme ich nun sowas... sieht mir doch so aus als würde die Kommunikation zumindest stattfinden...
                    Code:
                    Traceback (most recent call last):
                      File "/usr/smarthome/plugins/systemair/__init__.py", line 68, in _read_modbus
                        heater_registers = self.instrument.read_registers(start_register_heater-1, 21, functioncode=3)
                      File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 498, in read_registers
                        numberOfRegisters=numberOfRegisters, payloadformat='registers')
                      File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 697, in _genericCommand
                        payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
                      File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 798, in _performCommand
                        payloadFromSlave = _extractPayload(response, self.address, self.mode, functioncode)
                      File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 1075, in _extractPayload
                        raise ValueError(text)
                    ValueError: Checksum error in rtu mode: '\x00\xe9' instead of '\xb1R' . The response is: '\x01\x03\x00\xc8\x00\x15\x05\xfb\x01\x03*\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x00\x01\x00x\x00x\x00\x91\x00\xaa\x00\xc3\x00\xdc\x00\xdc\x00\xd5\x00\xd1\x00\xde\x00\xe9' (plain response: '\x01\x03\x00\xc8\x00\x15\x05\xfb\x01\x03*\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x00\x01\x00x\x00x\x00\x91\x00\xaa\x00\xc3\x00\xdc\x00\xdc\x00\xd5\x00\xd1\x00\xde\x00\xe9')

                    Kommentar


                      #11
                      Sooo.... noch was für die Nachwelt (-: mein Stick macht wohl eien Echo Mode . nach deaktivieren diese Echos im Minimodbus bekomme ich nun Daten:
                      Code:
                      2016-09-28 18:23:41 DEBUG    scheduler    Scheduler    Modbus systemair next time: 2016-09-28 18:24:10+02:00 -- scheduler.py:_next_time:316
                      2016-09-28 18:23:41 DEBUG    item         Modbus systemair Item kwl.Lueftergeschwindigkeit = 2 via systemair_value_from_bus Reg 101 None -- item.py:__update:470
                      2016-09-28 18:23:41 DEBUG    item         Modbus systemair Item kwl.Luefterdrehzahl_Zuluft = 1380 via systemair_value_from_bus Reg 111 None -- item.py:__update:470
                      2016-09-28 18:23:41 DEBUG    item         Modbus systemair Item kwl.Luefterdrehzahl_Abluft = 1920 via systemair_value_from_bus Reg 112 None -- item.py:__update:470
                      2016-09-28 18:23:41 DEBUG    item         Modbus systemair Item kwl.Frostschutzlevel = 70 via systemair_value_from_bus Reg 206 None -- item.py:__update:470
                      Aber der Logging error ist noch da wenn auch etwas anderst...
                      Code:
                      --- Logging error ---
                      Traceback (most recent call last):
                        File "/usr/smarthome/plugins/systemair/__init__.py", line 212, in _read_modbus
                          dem_registers = self.instrument.read_registers(start_register_dem-1, 9, functioncode=3)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 498, in read_registers
                          numberOfRegisters=numberOfRegisters, payloadformat='registers')
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 697, in _genericCommand
                          payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 798, in _performCommand
                          payloadFromSlave = _extractPayload(response, self.address, self.mode, functioncode)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 1088, in _extractPayload
                          raise ValueError('The slave is indicating an error. The response is: {!r}'.format(response))
                      ValueError: The slave is indicating an error. The response is: '\x01\x83\x02\xc0\xf1'
                      
                      During handling of the above exception, another exception occurred:
                      
                      Traceback (most recent call last):
                        File "/usr/local/lib/python3.5/logging/__init__.py", line 982, in emit
                          stream.write(msg)
                      UnicodeEncodeError: 'ascii' codec can't encode characters in position 111-112: ordinal not in range(128)
                      Call stack:
                        File "/usr/local/lib/python3.5/threading.py", line 882, in _bootstrap
                          self._bootstrap_inner()
                        File "/usr/local/lib/python3.5/threading.py", line 914, in _bootstrap_inner
                          self.run()
                        File "/usr/local/lib/python3.5/threading.py", line 862, in run
                          self._target(*self._args, **self._kwargs)
                        File "/usr/smarthome/lib/scheduler.py", line 344, in _worker
                          self._task(name, obj, by, source, dest, value)
                        File "/usr/smarthome/lib/scheduler.py", line 377, in _task
                          obj()
                        File "/usr/smarthome/plugins/systemair/__init__.py", line 242, in _read_modbus
                          logger.error(err)
                      Message: ValueError("The slave is indicating an error. The response is: '\\x01\\x83\\x02\xc0\xf1'",)
                      Arguments: ()
                      --- Logging error ---
                      Traceback (most recent call last):
                        File "/usr/smarthome/plugins/systemair/__init__.py", line 212, in _read_modbus
                          dem_registers = self.instrument.read_registers(start_register_dem-1, 9, functioncode=3)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 498, in read_registers
                          numberOfRegisters=numberOfRegisters, payloadformat='registers')
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 697, in _genericCommand
                          payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 798, in _performCommand
                          payloadFromSlave = _extractPayload(response, self.address, self.mode, functioncode)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 1088, in _extractPayload
                          raise ValueError('The slave is indicating an error. The response is: {!r}'.format(response))
                      ValueError: The slave is indicating an error. The response is: '\x01\x83\x02\xc0\xf1'
                      
                      During handling of the above exception, another exception occurred:
                      
                      Traceback (most recent call last):
                        File "/usr/local/lib/python3.5/logging/__init__.py", line 982, in emit
                          stream.write(msg)
                      UnicodeEncodeError: 'ascii' codec can't encode characters in position 123-124: ordinal not in range(128)
                      Call stack:
                        File "/usr/local/lib/python3.5/threading.py", line 882, in _bootstrap
                          self._bootstrap_inner()
                        File "/usr/local/lib/python3.5/threading.py", line 914, in _bootstrap_inner
                          self.run()
                        File "/usr/local/lib/python3.5/threading.py", line 862, in run
                          self._target(*self._args, **self._kwargs)
                        File "/usr/smarthome/lib/scheduler.py", line 344, in _worker
                          self._task(name, obj, by, source, dest, value)
                        File "/usr/smarthome/lib/scheduler.py", line 377, in _task
                          obj()
                        File "/usr/smarthome/plugins/systemair/__init__.py", line 242, in _read_modbus
                          logger.error(err)
                      Message: ValueError("The slave is indicating an error. The response is: '\\x01\\x83\\x02\xc0\xf1'",)
                      Arguments: ()
                      2016-09-28 18:24:10 DEBUG    scheduler    Scheduler    Modbus systemair next time: 2016-09-28 18:24:40+02:00 -- scheduler.py:_next_time:316
                      --- Logging error ---
                      Traceback (most recent call last):
                        File "/usr/smarthome/plugins/systemair/__init__.py", line 212, in _read_modbus
                          dem_registers = self.instrument.read_registers(start_register_dem-1, 9, functioncode=3)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 498, in read_registers
                          numberOfRegisters=numberOfRegisters, payloadformat='registers')
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 697, in _genericCommand
                          payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 798, in _performCommand
                          payloadFromSlave = _extractPayload(response, self.address, self.mode, functioncode)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 1088, in _extractPayload
                          raise ValueError('The slave is indicating an error. The response is: {!r}'.format(response))
                      ValueError: The slave is indicating an error. The response is: '\x01\x83\x02\xc0\xf1'
                      
                      During handling of the above exception, another exception occurred:
                      
                      Traceback (most recent call last):
                        File "/usr/local/lib/python3.5/logging/__init__.py", line 982, in emit
                          stream.write(msg)
                      UnicodeEncodeError: 'ascii' codec can't encode characters in position 111-112: ordinal not in range(128)
                      Call stack:
                        File "/usr/local/lib/python3.5/threading.py", line 882, in _bootstrap
                          self._bootstrap_inner()
                        File "/usr/local/lib/python3.5/threading.py", line 914, in _bootstrap_inner
                          self.run()
                        File "/usr/local/lib/python3.5/threading.py", line 862, in run
                          self._target(*self._args, **self._kwargs)
                        File "/usr/smarthome/lib/scheduler.py", line 344, in _worker
                          self._task(name, obj, by, source, dest, value)
                        File "/usr/smarthome/lib/scheduler.py", line 377, in _task
                          obj()
                        File "/usr/smarthome/plugins/systemair/__init__.py", line 242, in _read_modbus
                          logger.error(err)
                      Message: ValueError("The slave is indicating an error. The response is: '\\x01\\x83\\x02\xc0\xf1'",)
                      Arguments: ()
                      --- Logging error ---
                      Traceback (most recent call last):
                        File "/usr/smarthome/plugins/systemair/__init__.py", line 212, in _read_modbus
                          dem_registers = self.instrument.read_registers(start_register_dem-1, 9, functioncode=3)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 498, in read_registers
                          numberOfRegisters=numberOfRegisters, payloadformat='registers')
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 697, in _genericCommand
                          payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 798, in _performCommand
                          payloadFromSlave = _extractPayload(response, self.address, self.mode, functioncode)
                        File "/usr/local/lib/python3.5/site-packages/minimalmodbus.py", line 1088, in _extractPayload
                          raise ValueError('The slave is indicating an error. The response is: {!r}'.format(response))
                      ValueError: The slave is indicating an error. The response is: '\x01\x83\x02\xc0\xf1'

                      Kommentar


                        #12
                        Wie perfekt !!!
                        nachdem ich nun in der init_py alle Register entfernt habe die meien Steuerung nicht kennt, scheint alles fehlerfrei zu laufen... dann mach ich mich mal an die Übergabe an KNX...

                        vielen Dank Stefan!!!

                        Ich hoffe ich habe hier nicht zu viel zugemüllt, aber vielleicht hilft es dem Nächsten beim installierten.

                        Uwe

                        Kommentar


                          #13
                          Klasse das du da soviel Zeit investiert hast. Würde es dir etwas ausmachen mir deine Änderung zu geben ( auch dein Systemair-Modell + Stick). Ich würde dann gerne die entsprechende Readme ändern.

                          Gruss,

                          Stefan
                          Sonos

                          Kommentar


                            #14
                            klar mach ich.. ich mach erst noch die Anbindung und dann meine Doku fertig...

                            Kommentar


                              #15
                              Mist, nun hab ich mich ausgesperrt... hab schön die systemair.conf editiert und im SH Debug modus ausprobiert, dann ein reboot nun verliert der Pi nach kurzer Zeit die Netzwerkverbindung.... die Zeit reicht nicht um die Conf auszutauschen... hat jemand nen Trick wie ich vom Windows aus die conf auf der SD Karte ändern kann?
                              was ist in der Conf falsch???

                              Angehängte Dateien

                              Kommentar

                              Lädt...
                              X