Ankündigung

Einklappen

ETS5 Sammelbestellung Vollversion

Infos unter: Link
Mehr anzeigen
Weniger anzeigen

Neues Plugin: THZ/LWZ 30x/40x

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

    Neues Plugin: THZ/LWZ 30x/40x

    Hallo zusammen,

    ich habe mal 'quick-n-dirty' den FHEM-Code für THZ/LWZ-Wärmepumpen in ein smarthome-Plugin portiert. Es scheint ganz gut mit meiner WP zu funktionieren. Da die Release-Version (Stabilität, Bereinigung, Doku, etc.) noch einige Zeit in Anspruch nehmen wird, möchte ich euch eine Alpha-Version zur Verfügung stellen. Es sind momentan nur Statusabfragen implementiert. Daher dürfte nichts in der WP verstellt werden. Nichtsdestotrotz - Benutzung auf eigene Gefahr!

    Hardware-Voraussetzungen:
    • Der Originalcode funktioniert mit den Wärmepumpen Stiebel Eltron LWZ 30x/40x bzw. Tecalor THZ 30x/40x.
    • Die Kommunikation läuft über den RS232-Wartungsport der WP. Die notwendige Verkabelung ist auf der Homepage von Robert Penz dokumentiert.
    • Keine Unterstützung vom CAN-Bus.

    Weitere Infos:
    • Das Thema THZ/LWZ-Anbindung und -Konfiguration wird im FHEM-Forum diskutiert.

    Der portierte Code samt Konfigurationsdateien befindet sich im Anhang.

    Installation und Konfiguration:
    • Die *.py Dateien gehören ins Verzeichnis <smarthome>/plugins/thz/ (<smarthome> ist üblicherweise /usr/smarthome).
    • Die Erweiterungen aus plugin.conf sind in <smarthome>/etc/plugin.conf einzupflegen. Der Port ist den Hardwaregegebenheiten des Hosts anzupassen. Falls keine Kommunikation mit der WP zustande kommt, könnte man niedrigere Übertragungsgeschwindigkeiten ausprobieren.
    • Die Erweiterungen aus smartvisu.conf sind in <smarthome>/items/smartvisu.conf einzupflegen. Es sind jede Menge Parameter dabei, die zwar abgefragt/dekodiert werden können, aber möglicherweise keinen Mehrwert bringen. Daher sollte man sich genau überlegen, welche Werte man wirklich haben will und welche auch noch in Datenbank geschrieben werden sollen.
    • Im Debug-Modus (smarthome.py -d) sieht man schnell, ob das Plugin etwas tut.

    Ich hoffe, ihr könnt was mit dieser Kurzfassung anfangen.

    Viele Grüße
    toggle
    Angehängte Dateien

    #2
    Hi,

    mich interessiert das Plugin sehr. Ich habe eine Stiebel Eltron 303 Integral und habe auch schon nach dem von dir beschriebenen Anschluss geschaut. Er ist vorhanden und ich gehe davon aus, dass ich das LWZ wie von dir beschrieben anzapfen kann.

    Ich werde nur in diesem Jahr nicht mehr dazu kommen, mich um die Bastelei zu kümmern. Ich werde es im nächste Jahr probieren und melde mich dann zurück.

    Wenn Du irgendwelche Updates hast, stelle sie bitte weiterhin ein.

    Vielen Dank für die Arbeit, viele Grüße

    Arne

    Kommentar


      #3
      Hallo zusammen,

      ich habe das Plugin um die Schreibfunktionalität erweitert. Nun können ein paar Parameter via Plugin in der Wärmepumpe eingestellt werden. Anbei die neue Version und ein paar Screenshots.

      Viele Grüße
      toggle

      PS: Meine Experimente mit der Wärmepumpe hatten keine Nebenwirkungen. Sollte etwas verstellt werden, kann das immer noch manuell über das Bedienpanel der Wärmepumpe kontrolliert und ggf. korrigiert werden.
      Angehängte Dateien

      Kommentar


        #4
        Hi toggle,

        ich habe alles so installiert, wie von dir beschrieben. Beim Start im Debug liefert das Protokoll folgenden Fehler

        Code:
        2014-12-28 13:39:00,397 DEBUG    Main         Plugin: imap -- plugin.py:__init__:43
        2014-12-28 13:39:00,401 DEBUG    Main         IMAP next time: 2014-12-28 13:39:12+01:00 -- scheduler.py:_next_time:289
        2014-12-28 13:39:00,402 DEBUG    Main         Plugin: smarttv -- plugin.py:__init__:43
        2014-12-28 13:39:00,484 DEBUG    Main         Plugin: thz -- plugin.py:__init__:43
        2014-12-28 13:39:00,517 ERROR    Main         Plugin thz exception: [Errno 13] Permission denied: '/dev/ttyUSB0' -- plugin.py:__init__:57
        Traceback (most recent call last):
          File "/usr/local/smarthome/lib/plugin.py", line 53, in __init__
            plugin_thread = Plugin(smarthome, plugin, classname, classpath, args)
          File "/usr/local/smarthome/lib/plugin.py", line 80, in __init__
            exec("self.plugin = {0}.{1}(smarthome{2})".format(classpath, classname, args))
          File "<string>", line 1, in <module>
          File "/usr/local/smarthome/plugins/thz/__init__.py", line 39, in __init__
            self._thzProtocol = ThzProtocol.ThzProtocol(serial_port, int(baudrate))
          File "/usr/local/smarthome/plugins/thz/ThzProtocol.py", line 676, in __init__
            self._portHandler = PortHandler.PortHandler(serial_port, baudrate)
          File "/usr/local/smarthome/plugins/thz/PortHandler.py", line 56, in __init__
            self._serPort = serial.Serial(serial_port, baudrate, timeout=5)
          File "/usr/local/lib/python3.2/dist-packages/serial/serialutil.py", line 282, in __init__
            self.open()
          File "/usr/local/lib/python3.2/dist-packages/serial/serialposix.py", line 289, in open
            self.fd = os.open(self.portstr, os.O_RDWR|os.O_NOCTTY|os.O_NONBLOCK)
        OSError: [Errno 13] Permission denied: '/dev/ttyUSB0'
        Exception AttributeError: "'ThzProtocol' object has no attribute '_portHandler'" in <bound method ThzProtocol.__del__ of <plugins.thz.ThzProtocol.ThzProtocol object at 0x10492b0>> ignored
        2014-12-28 13:39:00,532 INFO     Main         Init Items -- smarthome.py:start:280
        2014-12-28 13:39:00,796 DEBUG    Main         Item env.core.memory = 19873792.0 via SQLite None None -- item.py:set:457
        2014-12-28 13:39:00,886 DEBUG    Main         Item env.core.threads = 8.0 via SQLite None None -- item.py:set:457
        Mir sagt das leider nicht allzu viel. Ich hatte aufgrund vorhergehender Fehlermeldungen (die lautete in etwas "SERIAL unknown") erkannt, dass ich SERIAL installieren muss, das war in meiner Python-Installation wohl nicht vorhanden. Ich habe es einmal für Python 2.7 und einmal für Python 3.2 installiert, da beide Versionen bei mir vorhanden sind. Nun erhalte ich eben oben genannte Fehlermeldung und komme nicht weiter.
        Ich habe schon versucht, die baudrate - wie im Readme beschrieben - herabzusetzen, aber das brachte keine Veränderung. Ich habe übrigens eine LWZ 303i von 2013, in 2014 wurde noch eine Update gemacht.

        Die Verkabelung ist bei meinem System genau wie in deiner Vorgabe über USB auf

        /dev/ttyUSB0

        daran kann es also wohl auch nicht liegen.

        Hast Du einen Tipp?

        Vielen Dank und viele Grüße

        Arne

        Kommentar


          #5
          Zitat von arnix Beitrag anzeigen
          Die Verkabelung ist bei meinem System genau wie in deiner Vorgabe über USB auf

          /dev/ttyUSB0

          daran kann es also wohl auch nicht liegen.
          Doch, denn siehe Log:

          OSError: [Errno 13] Permission denied: '/dev/ttyUSB0'
          Geht in diesem Fred zwar um eine andere Anlage, aber überprüfe mal die 4 Punkte, die unten aufgeführt sind: https://knx-user-forum.de/445504-post9.html. Sonst ist die Schnittstelle evtl. nicht nutzbar.

          hth, /tom

          Kommentar


            #6
            Wie Tom schon geschrieben hat, liegt es an der Nichtverfügbarkeit des seriellen Ports.

            Ziehe den USB-Adapter ab und stecke ihn wieder dran. Danach führe ls -l /dev/ttyUSB* aus. Das Datum des Device-Files sollte aktuell sein.

            Hast du einen RasPi? Falls ja, manche RS232-USB-Adapter verhalten sich etwas unschön. D.h. wenn sie im laufenden Betrieb eingesteckt werden, führt RasPi einen Reset aus.

            Kommentar


              #7
              Danke für eure Hinweise. Gestern hatte ich nach dem Einstecken des Kabels mittels WinSCP geschaut, hinter welcher Datei das aktuelle Datum/Uhrzeit steht. Ich könnte schwören, es war /dev/ttyusb0, daher hatte ich auch geschrieben, dass es der richtige Anschluss ist.
              Heute hatte ich dann den Server neu gestartet und - was soll ich sagen - dort steht nur noch ein altes Datum. Vielleicht habe ich mich gestern auch vertan.
              Das aktuelle Datum/Uhrzeit steht nach dem Rausziehen und Einstecken des Kabels nun hinter zwei Dateien im Ordner /dev

              ptmx
              tty

              Beide habe ich ausprobiert. Wenn ich tty in die Config nehme, kommt zwar kein Fehler, aber das Protokoll (smarthome.py -d) sieht dann vom Aufbau irgendwie gestört aus. Es wird nicht mehr alles untereinander geschrieben, sondern wie durch TAB getrennt, wirr über den Bildschirm.

              Bei ptmx sieht alles normal aus und im Protokoll steht
              Code:
              2014-12-28 16:53:48,319 INFO     THZ PortHandler PortHandler started -- PortHandler.py:run:65
              und dann regelmäßig
              Code:
              2014-12-28 16:53:50,550 DEBUG    thz          THZ next time: 2014-12-28 16:54:00+01:00 -- scheduler.py:_next_time:289
              aber auch einmal
              Code:
              2014-12-28 16:53:51,594 ERROR    thz          thz: plugin start failed - (<class 'AttributeError'>, AttributeError("'ThzProtocol' object has no attribute '_rxFailures'",), <traceback object at 0x1522ee0>) -- __init__.py:run:91
              Kann es dennoch so richtig sein? Ich werde mal später versuchen, die Items auszulesen.

              Vielen Dank,

              Arne

              Kommentar


                #8
                tty und ptmx sind definitiv nicht die richtigen Devices. Hast du es nach dem Restart mit /dev/ttyUSB0 trotzdem probiert?

                In der Datei __init__.py fehlt eine Zeile:
                Code:
                class ThzProtocol:
                
                  def __init__(self, serial_port, baudrate):
                    self._portHandler = PortHandler.PortHandler(serial_port, baudrate)
                    # lookup table for command names from code
                    self._msgNameFromCode = {}
                    self._msgNameFromParam = {}
                    self._txCounter = 0
                    self._rxCounter = 0
                    self._rxFailures = 0
                    self._lock = threading.Lock()
                Die Meldung im Log ist nur ein Folgefehler der nicht funktionierenden Kommunikation mit der WP.

                PS: Wenn ein Device (z.B. /dev/ttyUSB0) durch einen Prozess belegt ist, kann passieren, dass beim Einstecken nicht mehr /dev/ttyUSB0 sondern /dev/ttyUSB1 angelegt wird. Deshalb sollte man den Prozess, der eine Schnittstelle geöffnet hat, vorher beenden.

                Kommentar


                  #9
                  Sofern Du einen USB-Seriell-Adaper auf einem Raspi verwendest, sollte dieser auch auf ttyUSB0 bzw. ttyAMA0 verfügbar sein. Ggf. Adapter nochmal ziehen und neu einstecken, wie bereits von Toggle geschrieben.

                  Auch beachten, dass das keinesfalls USB-Plug-n-Play ist - daher der von mir weiter oben aufgeführten Link mit den 4 Punkten.

                  Manche USB-RS232-Adapter kommen auch mit der Geschwindigkeit der USB-Schnittstelle nicht klar - in diesem Falle sollte diese gedrosselt werden (einfach mal danach googlen).

                  Am Rande: Leider wissen wir nichts über die von Dir verwendete Hardware - Raspi oder Fritzbox oder QNAP oder was-weiss-ich, welcher USB-Adapter (sofern genutzt - oder gehst Du direkt über RS232 auf Deine Platine?) usw usw ...

                  /tom

                  Kommentar


                    #10
                    Zitat von toggle Beitrag anzeigen
                    In der Datei __init__.py fehlt eine Zeile:
                    Code:
                    class ThzProtocol:
                    
                      def __init__(self, serial_port, baudrate):
                        self._portHandler = PortHandler.PortHandler(serial_port, baudrate)
                        # lookup table for command names from code
                        self._msgNameFromCode = {}
                        self._msgNameFromParam = {}
                        self._txCounter = 0
                        self._rxCounter = 0
                        self._rxFailures = 0
                        self._lock = threading.Lock()
                    Den o.g. Codeschnipsel kann ich nirgends finden. Ich habe die Dateien eingesetzt, die Du in weiter oben zuletzt gepostet hattest. Weder in der __init__.py noch in einer anderen Datei finde ich die class ThzProtocol!

                    Ich benutze an Hardware den Cubitruck und habe dort Cubian (Debian) installiert. Ich habe einen Andapter Seriell auf USB eingesetzt. Vorher war der USB-Port mal durch ein Bluetooth-USB-Adapter benutzt worden und das entsprechende Plugin (SMA) läuft auch noch. Nur den Adapter habe ich ausgestöpselt.

                    Ich habe nach dem Reboot das USB0 nochmal getestet, ohne Erfolg.

                    Falls ihr noch Ideen habt, wäre ich dankbar.

                    Arne

                    Kommentar


                      #11
                      Verstehe ich das richtig - das SMA-Plugin benutzt denselben ttyUSB-Port?! Falls ja, sollte man sicherstellen, dass ein Port nur von einem Prozess/Plugin benutzt wird.

                      Der Code-Schnipsel sollte in der Datei ThzProtocol.py drin sein (in der Version alpha.2). Die rote Zeile müßte eingefügt werden (ich aktualisiere den Code in der nächsten Version).

                      Kannst du den ttyUSB-Port mit "cat /dev/ttyUSB0" oder mit "echo asdasd > /dev/ttyUSB0" benutzen, ohne dass es Fehler gibt?

                      Kommentar


                        #12
                        Zitat von toggle Beitrag anzeigen
                        Kannst du den ttyUSB-Port mit "cat /dev/ttyUSB0" oder mit "echo asdasd > /dev/ttyUSB0" benutzen, ohne dass es Fehler gibt?
                        Soweit ich das verstanden habe, ist der Port gar nicht aktiv --> kein Port = nix zum Lesen/Schreiben.

                        Interessant wäre noch, ob es /dev/ttyUSB1 o.ä. gibt, oder ob der Adapter sich vielleicht noch irgendwo ganz anders eingenistet hat (von welchem Adapter sprechen wir - hatte ich vorhin schon mal gefragt)?

                        Vielleicht gibt es ja auch noch irgendwelche Überbleibsel der alten "Port-Device", die die Benutzung blockieren (Treiber o.ä.).

                        Evtl. ist auch einfach in der Verkabelung was vertauscht - hatte ich bei meinem Adapter auch mal (allerdings RS485, nicht 232). Der hat sich anfangs auch einfach totgestellt und später die verrücktesten Werte ausgegeben ...

                        /tom

                        Kommentar


                          #13
                          Hi,

                          ich benutze einen Seriell-to-USB-Adapter. Eine genauere Bezeichnung habe ich leider nicht. Was genau soll ich beschreiben?

                          Die 4 Schritte hatte ich gemacht, ohne Erfolg!

                          Zitat von toggle Beitrag anzeigen
                          Kannst du den ttyUSB-Port mit "cat /dev/ttyUSB0" oder mit "echo asdasd > /dev/ttyUSB0" benutzen, ohne dass es Fehler gibt?
                          Wenn ich als root eingeloggt bin, funktioniert es, wenn ich mit dem Benutzer Smarthome eingeloggt bin, kommt wieder "Permission denied".

                          Ist es also ein Rechteproblem und wenn ja, wo kann ich es verändern?

                          Kommentar


                            #14
                            smarthome.py startest du immer als root (sudo), oder? Denn sonst wird der Zugriff verweigert.

                            Ich hoffe, dass du mit dem Befehl "echo asdasd > /dev/ttyUSB0" keine reguläre Datei als root angelegt hast, falls /dev/ttyUSB0 vorher nicht existiert hat.
                            Typischerweise sieht ein Device-File so aus (zwei Zahlen statt Dateigröße):
                            Code:
                            admin@smarthome:/usr/smarthome$ ls -l /dev/ttyUSB0
                            crw-rw---T 1 root dialout 188, 0 Dec 28 21:08 /dev/ttyUSB0
                            Falls "cat /dev/ttyUSB0" den String zurückgibt, der mit echo benutzt wurde, einfach die Datei löschen und den Adapter erneut anschließen.

                            Kommentar


                              #15
                              Zitat von arnix Beitrag anzeigen
                              ich benutze einen Seriell-to-USB-Adapter. Eine genauere Bezeichnung habe ich leider nicht. Was genau soll ich beschreiben?
                              Seriell ist ein mittelprächtig dehnbarer Begriff, schau mal z.B. hier unter Standards. Wenn Du z.B. mit einem 485-Adapter auf den RS232 gehst, dann wirst Du nicht so richtig Spaß haben. Insofern wäre z.B. ein Link zum Hersteller / Verkäufer interessant gewesen, da unsere chinesischen Hersteller-Kollegen manches oft erst auf den 2. Blick verraten.

                              Wenn ich als root eingeloggt bin, funktioniert es, wenn ich mit dem Benutzer Smarthome eingeloggt bin, kommt wieder "Permission denied".
                              Ok, dann evtl. Zugriffsproblem aufgrund von Rechten. Als root:

                              chmod 777 /dev/ttyUSB0

                              (Für alle jetzt aufschreienden Gurus: Yup, ernstgemeint. Die eigene Heizungsanlage ist normalerweise nicht der klassische Punkt für den externen Angreifer. Wasser/Öl/Gas überträgt die mit dem Löffel gemorsten Binärsignale in der Regel nicht verlustfrei ;-)).

                              /tom

                              Edit: Übrigens hab ich das Plugin vorhin dann doch mal geöffnet - steht da nicht irgendwo in der plugin.conf eine Baudrate von 119.200?

                              Kommentar

                              Lädt...
                              X