Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin für KWL Pluggit AP310

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

    Neues Plugin für KWL Pluggit AP310

    Hallo zusammen,

    ich habe mir vor ein paar Monaten das Ziel gesetzt meine KWL von der Firma Pluggit über Modbus (TCP) in mein KNX-System einzubinden. Primär war mein Ziel, wenn ich morgens duschen gehe, soll ausgelöst durch das Einschalten der Deckenspots in der Dusche, automatisch eine Stoßlüftungs-Funktion aktiviert werden. Bei der Pluggit AP310 heißt das, man muss diese in den manuellen Modus schalten und die Geschwindigkeit der Lüfter auf die höchste Stufe (4) schalten.

    Da es für Modbus bereits Bibliotheken für python gab, war der Rest dann in erster Linie viel probieren. Auf welcher Bibliothek mein Plugin basiert beschreibe ich weiter unten.

    Zu Beginn habe ich zum Testen erstmal nur ein standalone Python Skript geschrieben. Nachdem dies dann soweit funktionierte, dass ich Werte von der Anlage lesen und auch in die Anlage schreiben konnte, habe ich im nächsten Schritt ein Smarthome.py Plugin daraus gemacht. Dabei haben mir vorhandene Plugins sehr geholfen um zu verstehen wie man grundsätzlich ein Plugin schreibt und wie das ganze zusammenspielt. An dieser Stelle ein großes Dankeschön an alle Plugin Programmierer und vor allem an Marcus (mknx) für sein geniales Framework Smarthome.py
    An die erfahrenen Plugin Programmierer, bitte schaut mal drüber ob ihr grobe Fehler seht, ich bin eigentlich kein Programmierer.

    Ich habe schon Vorbereitungen getroffen um das ganze auch auf github in den Plugin Bereich einchecken zu können, deswegen werde ich an dieser Stelle abkürzen und ein copy&paste aus meiner README.md einfügen, ich denke die sollte alles wichtige erklären:

    Requirements

    This plugin is based on the lib pymodbus (branch python3):
    Supported Hardware

    It is currently working and tested with:
    • Pluggit AP310

    Configuration

    plugin.conf

    The plugin can be configured like this:

    Code:
    [pluggit]
       class_name = Pluggit
       class_path = plugins.pluggit
       host = 192.168.0.222
       #cycle = 300
    This plugin retrieves data from the KWL Pluggit AP310 based on the modbus register description from the official pluggit homepage ( http://www.pluggit.com/portal/de/faq...nt-system-9737 )

    The data retrieval is done by establishing a modbus tcp network connection via modbus port 502.
    You need to configure the host (or IP) address of your pluggit KWL.

    The cycle parameter defines the update interval and defaults to 300 seconds.

    items.conf

    This attribute references the information to retrieve by the plugin.
    The following list of information can be specified:
    • prmRamIdxUnitMode: Active Unit mode> 0x0004 Manual Mode; 0x0008 WeekProgram
    • prmNumOfWeekProgram: Number of the Active Week Program (for Week Program mode)
    • prmRomIdxSpeedLevel: Speed level of Fans in Manual mode; shows a current speed level [4-0]; used for changing of the fan speed level
    • prmFilterRemainingTime: Remaining time of the Filter Lifetime (Days)
    • prmRamIdxBypassActualState: Bypass state> Closed 0x0000; In process 0x0001; Closing 0x0020; Opening 0x0040; Opened 0x00FF
    • activatePowerBoost: bool variable that changes the Unit Mode to manual mode and sets the fan speed level to the highest level (4).

    Example

    Example configuration which shows the current unit mode, the actual week program, the fan speed, the remaining filter lifetime and the bypass state.

    Code:
    # items/pluggit.conf
    [pluggit]
        type = foo
        [[unitMode]]
            type = str
            visu_acl = ro
            enforce_updates = true
            pluggit_listen = prmRamIdxUnitMode
        [[weekProgram]]
            type = num
            visu_acl = ro
            enforce_updates = true
            pluggit_listen = prmNumOfWeekProgram
        [[fanSpeed]]
            type = num
            visu_acl = ro
            enforce_updates = true
            pluggit_listen = prmRomIdxSpeedLevel
        [[remainingFilterLifetime]]
            type = num
            visu_acl = ro
            enforce_updates = true
            pluggit_listen = prmFilterRemainingTime
        [[bypassState]]
            type = str
            visu_acl = ro
            enforce_updates = true
            pluggit_listen = prmRamIdxBypassActualState
        [[activatePowerBoost]]
            type = bool
            visu_acl = rw
            enforce_updates = true
            pluggit_send = activatePowerBoost
    Ich hoffe es kann jemand gebrauchen.

    Gruß,
    Henning
    Angehängte Dateien
    Zuletzt geändert von ratzi82; 08.06.2015, 16:49.

    #2
    Irgendetwas scheint beim Hochladen meines Anhangs schief gelaufen zu sein.
    Ich lade das Plugin heute Abend noch mal hoch.

    Kommentar


      #3
      Tolle Arbeit :-)
      Aber fehlt da nicht noch was?
      Ich würde das ganze gerne bei mir mal test.
      Gruß Simon K.

      Kommentar


        #4
        Nächster Versuch
        Angehängte Dateien
        Zuletzt geändert von AScherff; 09.06.2015, 22:50.

        Kommentar


          #5
          Irgendwie scheint es nach wie vor ein Problem mit dem Anhang zu geben, deswegen habe ich jetzt einen Pull Request an Marcus gestellt, siehe https://github.com/mknx/smarthome/pull/173/commits

          Gruß,
          Henning

          [Edit] Nachtrag: Okay jetzt sehe ich den Anhang auf einmal doch, wirklich merkwürdig, aber hauptsache er ist jetzt da
          Zuletzt geändert von ratzi82; 09.06.2015, 23:48.

          Kommentar


            #6
            Schöne Arbeit.
            Ich habe gerdae mal versucht es in meine SmartVisu mit ein zu binden leider ohne Erfolg :-(
            Also 2 von meinen Problemen habe ich behoben.
            In der __init__.py in Zeile 87 steht nochmal die IP Adresse dort habe ich jetzt meine eingetragen. Aber kann man da nicht eine Variable für nehmen?
            Und in Zeile 264 mochte meine smarthome.py das ö nicht.
            Mein Problem sobald ich diese beiden Dinge ändere startet smarthome.py nicht mehr.
            Ich bekomme immer die Meldung "Could not connect to smarthome.py server!
            Websocket error undefined."
            So als ob smarthome.py durch das plugin gestoppt wird.
            Hast du vielleicht eine Idee woran es liegt?
            MFG Simon.K

            Kommentar


              #7
              Hallo Simon,

              also wenn du ein Problem mit dem "ö" hast, dann liegt das in der Regel daran, dass die Datei nicht mit der Kodierung "UTF 8 ohne BOM" gespeichert ist.
              Am besten die __init__.py mal mit Notepad++ öffnen und die Kodierung überprüfen.

              Wie hast du die Datei runtergeladen? Wenn du die Datei von der github Seite runterlädst, dann im raw Format runterladen, anbei der Link https://raw.githubusercontent.com/ra...it/__init__.py

              Das mit dem Host in Zeile 87 habe ich gerade gefixt, das stammt noch vom Testen und hatte ich tatsächlich vergessen zu ersetzen, danke für den Hinweis.

              Zum Testen startest du smarthome.py am besten im Debug Modus, sprich erst stoppen, z.B. mit:

              Code:
              /etc/init.d/smarthome.py stop
              und dann mit

              Code:
              smarthome.py -d
              starten, dann siehst du auch den debug output den ich im Code eingebaut habe.

              Gruß,
              Henning

              Kommentar


                #8
                Hi
                So ich habe die Datei nochmal neu runtergeladen und den Debug ausgeführt.
                Das Problem mit smarthome.py scheint sich damit erledigt zu haben. Aber so ganz funktioniert es leider noch nicht.

                Hier das Ergebnis

                2015-06-13 13:37:26,500 DEBUG Main Plugin: pluggit -- plugin.py:__init__:43
                2015-06-13 13:37:26,513 ERROR Main Plugin pluggit exception: No module named pymodbus.client.sync -- plugin.py:__init__:57
                Traceback (most recent call last):
                File "/usr/smarthome/lib/plugin.py", line 53, in __init__
                plugin_thread = Plugin(smarthome, plugin, classname, classpath, args)
                File "/usr/smarthome/lib/plugin.py", line 79, in __init__
                exec("import {0}".format(classpath))
                File "<string>", line 1, in <module>
                File "/usr/smarthome/plugins/pluggit/__init__.py", line 28, in <module>
                from pymodbus.client.sync import ModbusTcpClient
                ImportError: No module named pymodbus.client.sync
                die lib pymodbus habe ich nochmal neu installiert leider ohne Erfolg
                Gruß Simon

                Kommentar


                  #9
                  Hi Simon,

                  Und pymodbus für Python3 installiert?

                  Bis bald

                  Marcus
                  Zuletzt geändert von callidomus; 14.06.2015, 07:55. Grund: Edit: da hat wohl der Caching-Bug des neuen Forensystems zugeschlagen....

                  Kommentar


                    #10
                    Zitat von SimonK Beitrag anzeigen
                    die lib pymodbus habe ich nochmal neu installiert leider ohne Erfolg
                    Auch die richtige? smarthome.py verwendet python3, deswegen muss auch die pymodbus lib für python3 verwendet werden, die Version befindet sich in einem eigenen Branch, siehe auch meine Readme.

                    Anbei noch mal der Link: https://github.com/bashwork/pymodbus/tree/python3

                    Kommentar


                      #11
                      Jaja die groß und klein Schreibung.
                      Habe nochmal alles nachgeguckt und in der Plugin.conf habe ich pluggit klein geschrieben anstatt groß.
                      und pymodbus habe ich jetzt mit "python3 setup.py install" installiert. Es scheint zu funktionieren.
                      Ich werd es jetzt noch in meine Visu schön einbauen und dann mal testen.
                      Vielen dank für die Hilfe :-)

                      Kommentar


                        #12
                        So da bin ich wieder.
                        Ich habe jetzt mal den Fan Speed in meiner Visu anzeigen lassen.
                        Aber leider schmeißt er mir nach kurzer Zeit einen Error raus.
                        2015-06-14 10:37:31,252 ERROR Pluggit Pluggit: something went wrong in the refresh function: 'NoneType' object has no attribute 'getRegister' -- __init__.py:_refresh:274

                        Kommentar


                          #13
                          Den Fehler kannst du erstmal ignorieren, den bekomme ich auch öfter mal.
                          Ich wollte den Entwickler von pymodbus mal dazu anschreiben.

                          Gruß

                          Kommentar


                            #14
                            Okay.
                            Wie siehts aus hast du dir die Temperatur Werte schonmal ausgeben lassen?
                            Da müssen die Werte ja noch umgerechnet werden.
                            Ich habe das zum Testen so umgesetzt.
                            t1 = client.read_holding_registers(133, 2, unit=22)
                            decodert1 = BinaryPayloadDecoder.fromRegisters(t1.registers, endian=Endian.Big)
                            t1 = decodert1.decode_32bit_float()
                            print ("Zuluft aussen: %.2f") %t1
                            Leider habe ich noch zu wenige kenntnisse um es im Plugin umzusetzte.

                            Gruß Simon
                            Zuletzt geändert von SimonK; 15.06.2015, 21:50.

                            Kommentar


                              #15
                              Hallo Simon,

                              das ergänzt sich doch gut, mir hat noch gefehlt wie man die Temperatur einlesen kann.
                              Werde deinen Code mal zum Testen in das Plugin einbauen.

                              Wenn du noch mehr Sachen in deinem Testscript umgesetzt hast, immer her damit, dann kann ich versuchen das in das Plugin zu integrieren.

                              Gruß,
                              Henning

                              Kommentar

                              Lädt...
                              X