Ankündigung

Einklappen
Keine Ankündigung bisher.

Systemair Modbus-Plugin (Zentrale Lüftungsanlage)

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

    #16
    so bin wieder drin... Glück gehabt...

    noch ne Frage: Das auslesen der Coil Adressen klappt nicht... warum?

    [[Status_Temperatursensor_Input1]]
    # read
    # 0: kein Fehler, 1: Fehler
    type = num
    systemair_coiladdr = 3489
    knx_dpt = 5
    knx_send = 4/0/25



    und wie bekomme ich es hin , dass alle Werte ab und an wiederholt werden, nicht nur die veränderten?
    Zuletzt geändert von boardman; 30.09.2016, 18:25.

    Kommentar


      #17
      Zitat von pfischi Beitrag anzeigen
      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
      So... dann mal der Update für dich:

      ich habe letzlich in der minimalmodpus.py das Echo aktiviert:
      New in version 0.5.
      """

      self.handle_local_echo = True
      """Set to to :const:`True` if your RS-485 adaptor has local echo enabled.

      Ich habe eine Systemair VR700 DC/DE mir der Steurplatine Version 2 (die erste mit Modbus)

      und endsprechend auch nicht alle Parameter verfügbar...

      Der Stick ist von Helmslund Electronics das Modell USB485-STISO 2 wire USB dapter , isolated, gekauft Anfang 2013.

      Brauchst du noch was?

      Uwe

      Kommentar


        #18
        Zitat von boardman Beitrag anzeigen
        so bin wieder drin... Glück gehabt...

        noch ne Frage: Das auslesen der Coil Adressen klappt nicht... warum?
        Ich hab nun die Coil Daten bekommen, aber nur wenn ich diese Aktiv vom Bus lese - deas initiale senden erfolgt nicht - ist das ein bug? ode rmache ich was falsch?


        Nachedm ich immer schlechter auf Den RASPI kam habe ich die SD karten och mal neu von der Sicherung beschrieben - nun ist wieder alles stabil - warum auch immer...

        Kommentar


          #19
          Am Montag bin ich wieder daheim, dann schaue ich mir das an. Danke für dein Feedback.
          Zuletzt geändert von pfischi; 01.10.2016, 17:27.
          Sonos

          Kommentar


            #20
            Zitat von boardman Beitrag anzeigen

            Ich hab nun die Coil Daten bekommen, aber nur wenn ich diese Aktiv vom Bus lese - deas initiale senden erfolgt nicht - ist das ein bug? ode rmache ich was falsch?


            Nachedm ich immer schlechter auf Den RASPI kam habe ich die SD karten och mal neu von der Sicherung beschrieben - nun ist wieder alles stabil - warum auch immer...
            Ich habe deine Hinweise (echo_mode, typo in Klassenname) eingepfelgt. Warum die coils nicht beim init gelesen werden, kann ich nicht sagen. Bei meiner VTR 200 klappts.

            Gruss,

            Stefan
            Sonos

            Kommentar


              #21
              Hi, Danke, meien Hardware ist schon bischen älter vielleicht deswegen - ich hab auch wegen diverse Fragen mal Systemair angeschrieben...

              kannst du mir zu einer Coil mal den Abschnitt aus der Ini Datei reinkopieren?

              Danke

              Uwe

              Kommentar


                #22
                Hallo,

                nachdem nun die Außentemperaturen gefallen sind ist mir aufgefallen das Negative Werte nicht korrekt umgesetzt werden...
                Bei def read_register(self,... wird das wohl unterstützt,

                Some manufacturers allow negative values for some registers. Instead of
                an allowed integer range 0 to 65535, a range -32768 to 32767 is allowed. This is
                implemented as any received value in the upper range (32768 to 65535) is
                interpreted as negative value (in the range -32768 to -1).

                Use the parameter ``signed=True`` if reading from a register that can hold
                negative values. Then upper range data will be automatically converted into
                negative return values (two's complement).

                ============== ================== ================ ===============
                ``signed`` Data type in slave Alternative name Range
                ============== ================== ================ ===============
                :const:`False` Unsigned INT16 Unsigned short 0 to 65535
                :const:`True` INT16 Short -32768 to 32767
                ============== ================== ================ ===============

                Bei dem von dir verweendeten def read_registers(self,...
                nicht:
                Any scaling of the register data, or converting it to negative number (two's complement)
                must be done manually.


                Frage: hast du das schon für SH umgesetzt? ist wahrscheinlich einfacher den Rückgabe wert zu konvertieren als das im Plugin noch einzubauen...?

                Uwe



                Kommentar


                  #23
                  So in der Art müsste es gehen...??? (muss erst wieder auf Minustemperaturen warten...)
                  [[Temperatursensor_5]]
                  # read
                  type = num
                  systemair_regaddr = 218
                  #eval=value if value>0 else 0
                  eval = value - 65535 if value > 32768

                  eval = value / 10 #to get Celsius
                  knx_dpt = 9
                  knx_send = 4/0/24
                  knx_reply = 4/0/24

                  Kommentar


                    #24
                    Hast du die neuste Version des Plugins? Der Bug müsste bereits gepatcht sein. Mach mal ein Update des SmarthomeNG-Dev-Zweigs. Das eval ist jetzt auch nicht mehr notwendig (siehe geupdatete Readme). Ingesamt ist das Plugin jetzt deutlich übersichtlicher und schneller.

                    Gruss,

                    Stefan
                    Sonos

                    Kommentar


                      #25
                      Hi, ich habe zwar gesehen das du die Dateien aktualisiert hast, aber das es ne komplett neue Version gibt ging unter )-: sieht gut aus...

                      wie mach man den Update am einfachsten? apt-get update?

                      Es reicht doch wenn ich die 2 Dateien reinkopiere? init.py und systemair.Conf...
                      Ich muss einiges anpassen da mein Modbus Interface einige Adressen nicht unterstützt...

                      Danke

                      Uwe

                      Kommentar


                        #26
                        Würde gehen. In der systemair.conf musst du dann noch die ganzen evals rausnehmen.

                        Gruss,

                        Stefan
                        Sonos

                        Kommentar


                          #27
                          so, angepasst, aber irgendwas ist schief.. fehlt da noch in eienr weiteren Datei eine Änderung oder hab ich was kaputt gemacht?


                          2016-12-04 12:40:14 ERROR plugin Main Plugin Systemair exception: unindent does not match any outer indentation level (__init__.py, line 66) -- plugin.py:__init__:68
                          Traceback (most recent call last):
                          File "/usr/smarthome/lib/plugin.py", line 64, in __init__
                          plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance)
                          File "/usr/smarthome/lib/plugin.py", line 101, in __init__
                          exec("import {0}".format(classpath))
                          File "<string>", line 1, in <module>
                          File "/usr/smarthome/plugins/systemair/__init__.py", line 66
                          self._reg_sets = [{'name':'fan', 'range':range(101, 114+1)},
                          ^
                          IndentationError: unindent does not match any outer indentation level



                          so sieht die init bei mir nun aus:
                          self.mod_write_repeat = 20 # if port is already open, e.g on auto-update,
                          # repeat mod_write attempt x times a 1 seconds
                          self._lockmb = threading.Lock() # modbus serial port lock
                          self.init_serial_connection(self.serialport, self.slave_address)
                          # self._reg_sets = [{'name':'fan', 'range':range(101, 138+1)},
                          # {'name':'heater', 'range':range(201, 221+1), 'scaled_signed':range(208, 218+1)},
                          # {'name':'damper', 'range':range(301, 301+1)},
                          # {'name':'rotor', 'range':range(351, 352+1)},
                          # {'name':'week', 'range':range(401, 459+1)},
                          # {'name':'system', 'range':range(501, 507+1)},
                          # {'name':'clock', 'range':range(551, 557+1)},
                          # {'name':'filter', 'range':range(601, 602+1)},
                          # {'name':'VTC_defr', 'range':range(651, 654+1)},
                          # {'name':'VTR_defr', 'range':range(671, 672+1)},
                          # {'name':'dig_in', 'range':range(701, 709+1)},
                          # {'name':'PCU_PB', 'range':range(751, 751+1)},
                          # {'name':'alarms', 'range':range(801, 802+1)},
                          # {'name':'demand', 'range':range(851, 859+1)},
                          # {'name':'wireless', 'range':range(901, 1020+1)},]

                          self._reg_sets = [{'name':'fan', 'range':range(101, 114+1)},
                          {'name':'heater', 'range':range(201, 219+1), 'scaled_signed':range(208, 218+1)},
                          {'name':'damper', 'range':range(301, 301+1)},
                          {'name':'rotor', 'range':range(351, 352+1)},
                          {'name':'week', 'range':range(401, 459+1)},
                          {'name':'system', 'range':range(501, 507+1)},
                          {'name':'clock', 'range':range(551, 557+1)},
                          {'name':'filter', 'range':range(601, 602+1)},
                          {'name':'VTC_defr', 'range':range(651, 654+1)},]
                          # {'name':'VTR_defr', 'range':range(671, 672+1)},
                          # {'name':'dig_in', 'range':range(701, 709+1)},
                          # {'name':'PCU_PB', 'range':range(751, 751+1)},
                          # {'name':'alarms', 'range':range(801, 802+1)},
                          # {'name':'demand', 'range':range(851, 859+1)},
                          # {'name':'wireless', 'range':range(901, 1020+1)},


                          def init_serial_connection(self, serialport, slave_address):

                          und sorry für die vielen Fragen...



                          Kommentar


                            #28
                            Dein Error ist ein Formatierungsfehler ("IndentationError: unindent does not match any outer indentation level."). Hast du nur den Inhalt in die __init__.py rein kopiert oder die ganze Datei nach SH.py geschoben. Wenn du nur den Inhalt kopiert hast, kann es zu solchen Fehlern je nach Editor kommen. Kopiere mal die gesamte Datei nach sh.py.


                            Edit: Achja, du musstest ja Dinge anpassen. Hänge mal deine __init__.py als Anhang bei, dann schaue ich es mir an.

                            Edit Edit: Ich sehe einen Fehler:

                            Code:
                            {'name':'VTC_defr', 'range':range(651, 654+1)},]
                            Das letzte Komma muss da weg.


                            Gruss,

                            Stefan
                            Zuletzt geändert von pfischi; 04.12.2016, 13:02.
                            Sonos

                            Kommentar


                              #29
                              So hat geklappt, das Phython da so empfinflich ist war mir neu, bin ich bisher noch nie drüber gestolpert... Plugin läuft! Und dei Temperaturen Teste ich heute Nacht

                              trotz des Kommas, muss das wirklich weg? dann auch bei dir (-:

                              {'name':'wireless', 'range':range(901, 1020+1)},]

                              Kommentar


                                #30
                                Zitat von boardman Beitrag anzeigen
                                So hat geklappt, das Phython da so empfinflich ist war mir neu, bin ich bisher noch nie drüber gestolpert... Plugin läuft! Und dei Temperaturen Teste ich heute Nacht

                                trotz des Kommas, muss das wirklich weg? dann auch bei dir (-:
                                Ne, eigentlich kann es da bleiben. Bei Listen macht das eigentlich nichts. Danke für den Hinweis.
                                Sonos

                                Kommentar

                                Lädt...
                                X