Ankündigung

Einklappen
Keine Ankündigung bisher.

Node-RED Flow für Helios KWL mit Modbus TCP

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

    Node-RED Flow für Helios KWL mit Modbus TCP

    Hallo zusammen,

    nachdem meine Lüftungsanlage (Helios KWL EC 270 ET, gekauft 2020) jetzt ein paar Wochen in Betrieb ist und ich keine Bedienelemente dazu gekauft habe, musste ich mich mal mit der Steuerung auseinandersetzen. Da das Gerät eine Ethernet-Schnittstelle hat, ließ sich die anfängliche Konfiguration bequem über das Webinterface durchführen. Für den gelegentlichen Eingriff zur Überstimmung der Regelung war mir das aber nicht komfortabel genug. Zeit sich mit der Modbus TCP Schnittstelle zu befassen! Dazu gibt es zum Glück eine sehr gute Anleitung vom Hersteller [1], mit der die Kommunikation über das im Beispiele verwendete und freie Programm modpoll [2] auch sofort funktionierte. Auf meiner Suche nach einer bereits fertigen Lösung bin ich leider nicht fündig geworden. Es gibt da was für EDOMI aber die Entscheidung gegen EDOMI fiel schon vorher und ich bin bei OpenHAB + Node-RED gelandet.

    Der nächste Schritt war dann, das Ganze in Node-RED umzusetzen. Hier habe ich auf den Node node-red-contrib-modbus [3] zurückgegriffen. Dieser kann sowohl mit einer seriellen Schnittstelle als auch mit Ethernet und TCP/IP umgehen. Ich habe nur Letzteres ausprobiert. Den Node habe ich anfangs nicht korrekt konfiguriert bekommen weil die Begriffe gänzlich anders waren als in der Dokumentation von Helios. Da ich kein Modbus-Experte bin, habe ich daher die TCP-Modbus-Kommunikation aus der Helios-Anleitung mit Wireshark aufgezeichnet. Anzeigefilter in Wireshark auf "modbus" und dann mit modpoll das Kommando abgesetzt... Damit konnte ich genug über die Kommunikation lernen und hatte quasi eine Referenz. In Node-RED habe ich dann die Parameter der entsprechenden Nodes aus dem node-red-contrib-modbus Paket so weit angepasst, bis die Daten in Wireshark genauso aussahen wie mit modpoll:

    wireshark.png
    Mit dem Ergebnis bin ich erst mal zufrieden, auch wenn ich noch keinerlei Fehlerbehandlung eingebaut habe. Das wäre meiner Meinung nach aber nur für den Fall relevant, dass das Gerät sich falsch verhält oder eine Störung der Kommunikation auftritt. Fehler, die das Gerät selbst erkennen kann (z.B. Sensor ausgefallen), lassen sich ja über Modbus auslesen und in Node-RED verarbeiten.

    Ich möchte meine Lösung hier teilen. Den Flow findet ihr im Anhang. Während die Modbus-Nodes Modbus Flex Write und Modbus Flex Getter ja aus dem o.g. Paket stammen, habe ich die Verarbeitung der Kommunikation, also quasi den Kleber zwischen den Modbus-Nodes, gebaut. Somit lassen sich Schreib- und Lesebefehle an die Helios-Anlage relativ bequem absetzen und das Ergebnis bei Lesebefehlen kommt "hinten raus":

    flow.png
    Wer das auch mal ausprobieren möchte, kann den Flow in Node-RED importieren (node-red-contrib-modbus [3] installieren nicht vergessen). Vor dem Deployen muss nur der Modbus Server auf die IP-Adresse der KWL umgestellt werden. Dazu einfach in den Eigenschaften eines der Modbus Nodes unter Server die IP-Adresse ändern und Speichern. Eine Authentifizierung mit Kennwort wie beim Webinterface findet übe Modbus nicht statt!

    config-modbus1.png config-modbus2.png

    Der Flow soll die Kommunikation einfach verständlich aufzeigen. Natürlich würde man den jeweiligen Ablauf noch mal als Subflow kapseln um KWL Lesen/Schreiben platzsparender in andere Flows einzubauen.
    Die Inject-Nodes können sofort verwendet werden. Beim Lesen sollte im Debug-Fenster von Node-RED der entsprechende Wert angezeigt werden:

    get.png

    Hinweis: Im Beispiel "Variable schreiben" wird am Ende zwar eine Debug-Ausgabe getätigt, die liefert allerdings nicht den Status der Variable (im Beispiel "Partymodus Aktiv") zurück. Den Status müsste man separat auslesen, wie im Beispiel "Variable lesen".

    Fragen oder Hinweise nehme ich gern entgegen!

    Grüße,
    Alex

    Nachtrag: Was alles "geht", steht in [1]. Die Liste sieht auf den ersten Blick vollständig aus aber ich habe z.B. den Messwert des internen Feuchtefühlers und den Status der Bypassklappe nicht gefunden. Im Webinterface gibt es diese Werte allerdings...

    [1] https://www.easycontrols.net/de/serv...ls-ger%C3%A4te
    [2] https://www.modbusdriver.com/modpoll.html
    [3] https://flows.nodered.org/node/node-red-contrib-modbus
    Angehängte Dateien
    Zuletzt geändert von atbs; 17.12.2020, 15:06.

    #2
    Moin Alex,

    hatte genau das gleiche vor... Gut das ich noch einmal gegoogelt habe . Den Flow läuft auf anhieb. Vielen Dank!

    Grüße

    Henning

    Kommentar


      #3
      1000 Dank, genau das hatte ich gesucht!

      Zitat von atbs Beitrag anzeigen
      Nachtrag: Was alles "geht", steht in [1]. Die Liste sieht auf den ersten Blick vollständig aus aber ich habe z.B. den Messwert des internen Feuchtefühlers und den Status der Bypassklappe nicht gefunden. Im Webinterface gibt es diese Werte allerdings...
      Im Webinterface haben die Objekte Namen die vermutlich den Adressen entsprechen, Bypassklappe ist somit v02119. Länge muss man raten, denke ich. In diesem Fall bekomme ich mit einer 5 als Länge aber eine 0 heraus, denke das passt.
      Feuchtefühler Abluft ist somit v02136, Länge 6.

      Kommentar


        #4
        Zitat von EinBjoern Beitrag anzeigen
        1000 Dank, genau das hatte ich gesucht!
        Im Webinterface haben die Objekte Namen die vermutlich den Adressen entsprechen, Bypassklappe ist somit v02119. Länge muss man raten, denke ich. In diesem Fall bekomme ich mit einer 5 als Länge aber eine 0 heraus, denke das passt.
        Feuchtefühler Abluft ist somit v02136, Länge 6.
        Danke für den Hinweis, das Webinterface hatte ich noch nicht genauer untersucht. Die Länge sollte ja der maximalen Länge der Zahl als String (also inkl. Komma und Nachkommastellen) entsprechen. Ich verarbeite die Antworten in node-red inzwischen mit parseInt() bzw. parseFloat(). Eine Auswertung bei true/false Antworten mache ich mit:
        Code:
        if(msg.payload.charCodeAt()=="49") {
        msg.payload = true;
        }
        else
        {
        msg.payload = false;
        }
        return msg;
        Ich habe aufgrund der letzten kalten Tage auch eine Vorheizung für den Außenluftkanal eingebaut, da die Anlage sonst in den Frostschutz geht.
        Die Heizung steuere ich mit Node-RED und KNX-Schaltaktor anhand verschiedener Messgrößen. Die Original Helios-Ansteuereinheit war mir zu teuer (~200€). Die 170 € für die Heizspirale von Helios waren schon frech... das ist nur ne Heizwendel mit Lüsterklemme und 2 Temperaturschalter die man noch separat anschließen muss...

        Nachtrag:
        Zitat von EinBjoern Beitrag anzeigen
        Bypassklappe ist somit v02119
        Hast du es geschafft, die Bypassklappe zu steuern?
        Zuletzt geändert von atbs; 18.02.2021, 09:27.

        Kommentar


          #5
          Moin,

          hätte mal eine Frage. Liest jemand von euch die Leistung der Elekt. Vorheizung aus (wenn vorhanden) bei mir bekomme ich keine brauchbaren Werte.

          Gruß Timo

          Kommentar


            #6
            Zitat von Inventor Beitrag anzeigen
            Moin,

            hätte mal eine Frage. Liest jemand von euch die Leistung der Elekt. Vorheizung aus (wenn vorhanden) bei mir bekomme ich keine brauchbaren Werte.

            Gruß Timo
            Ich habe die Vorheizung zwar eingebaut, aber sie wird nicht von der Anlage gesteuert. Daher sehe ich auch keine Werte im Webinterface. Hast du denn die Original-Steuereinheit für die Vorheizung und hast du sie nach Anleitung per Bus verbunden?

            Kommentar


              #7
              Zitat von atbs Beitrag anzeigen
              ch habe aufgrund der letzten kalten Tage auch eine Vorheizung für den Außenluftkanal eingebaut, da die Anlage sonst in den Frostschutz geht.
              Die Heizung steuere ich mit Node-RED und KNX-Schaltaktor anhand verschiedener Messgrößen. Die Original Helios-Ansteuereinheit war mir zu teuer (~200€). Die 170 € für die Heizspirale von Helios waren schon frech... das ist nur ne Heizwendel mit Lüsterklemme und 2 Temperaturschalter die man noch separat anschließen muss...
              Hast du ein Bild davon? Ich habe bei mir leider kaum Platz, gerade mit der Metallrohrstrecke danach wird es schwierig.

              Zitat von atbs Beitrag anzeigen
              Hast du es geschafft, die Bypassklappe zu steuern?
              Nein, aber da es auf den weiteren Wegen auch nicht möglich ist diese manuell zu steuern denke ich das es auch auf diesem Weg nicht geht.

              Kommentar


                #8
                Nein ich meine die Heizung welche in die Anlage (bei mir KWL CE 350 W) eingebaut werden kann, in der Weboberfläche sehe ich ja die Leistung in Prozent.

                Kommentar


                  #9
                  Zitat von EinBjoern Beitrag anzeigen
                  Hast du ein Bild davon? Ich habe bei mir leider kaum Platz, gerade mit der Metallrohrstrecke danach wird es schwierig.
                  Ich habe Fotos von der Einheit selbst, die Maße findest du im Helios Katalog. Ich habe 1m Wickelfalzrohr gekauft und davon jeweils die Hälfte vor und nach der Heizung verbaut. Und davor noch den empfohlenen G4 Filter.

                  Wenn du da keinen Platz hast, könntest du die Heizung auch in den Abluftkanal einbauen, die Wirkung ist wahrscheinlich auch ausreichend.

                  Zitat von Inventor Beitrag anzeigen
                  Nein ich meine die Heizung welche in die Anlage (bei mir KWL CE 350 W) eingebaut werden kann, in der Weboberfläche sehe ich ja die Leistung in Prozent.
                  Da kann ich leider nicht helfen, das trifft für meine Anlage nicht zu.
                  You do not have permission to view this gallery.
                  This gallery has 2 photos.
                  Zuletzt geändert von atbs; 18.02.2021, 10:15.

                  Kommentar


                    #10
                    Zitat von atbs Beitrag anzeigen
                    ch verarbeite die Antworten in node-red inzwischen mit parseInt() bzw. parseFloat().
                    Machst du das abhängig vom abgefragten Wert oder vom Rückgabewert?

                    Kommentar


                      #11
                      Zitat von EinBjoern Beitrag anzeigen
                      Machst du das abhängig vom abgefragten Wert oder vom Rückgabewert?
                      Abhängig vom abgefragten Wert. Temperaturen als Float, Drehzahl oder Zeit als Integer.

                      Kommentar


                        #12
                        Hallo zusammen,

                        ich habe mich auch einmal dem Flow bedient und auch bei mir funktioniert die Datenabfrage bzw. das Schreiben zwischen NodeRed und Helios auf anhieb. Ich stecke allerdings eine Stufe weiter fest. Ich möchte die gelesenen Werte nun auf eine KNX GA schreiben. Die KNX GA habe ich mit den Datentypen 9007 Feuchtigkeit % bzw 9001 Temperatur °C angelegt. Wenn ich nun direkt vom Knoten "display Helios" auf den KNX Knoten (ich verwende node-red-contrib-knx-ultimate) schreibe, kommt auf dem Bus nichts an. Ich vermute, dass der Datentyp nicht korrekt ist und ich ihn so vor dem Schreiben auf den KNX Knoten noch umwandeln muss. Um das besser zu verstehen habe ich den Knoten "display Heilos" mit einem MQTT Knoten (Mosquitto) verbunden. Wenn ich dann mit einem MQTT Explorer schaue, was dort ankommt, sehe ich den korrekten Wert aber auch eine Menge "Leerzeichen". Ich vermute, dass das der Grund ist, warum ich in der KNX GA keinen Wert bekomme. Hat jemand ein ähnliches Problem und vieleicht eine Lösung dafür (mit Umwandeln in Number habe ich es schon versucht, das brachte aber keinen Erfolg.

                        Vielen Dank und Grüße

                        Marko

                        Kommentar


                          #13
                          Zitat von mape71 Beitrag anzeigen
                          Hallo zusammen,

                          ich habe mich auch einmal dem Flow bedient und auch bei mir funktioniert die Datenabfrage bzw. das Schreiben zwischen NodeRed und Helios auf anhieb. Ich stecke allerdings eine Stufe weiter fest. Ich möchte die gelesenen Werte nun auf eine KNX GA schreiben. Die KNX GA habe ich mit den Datentypen 9007 Feuchtigkeit % bzw 9001 Temperatur °C angelegt. Wenn ich nun direkt vom Knoten "display Helios" auf den KNX Knoten (ich verwende node-red-contrib-knx-ultimate) schreibe, kommt auf dem Bus nichts an. Ich vermute, dass der Datentyp nicht korrekt ist und ich ihn so vor dem Schreiben auf den KNX Knoten noch umwandeln muss. Um das besser zu verstehen habe ich den Knoten "display Heilos" mit einem MQTT Knoten (Mosquitto) verbunden. Wenn ich dann mit einem MQTT Explorer schaue, was dort ankommt, sehe ich den korrekten Wert aber auch eine Menge "Leerzeichen". Ich vermute, dass das der Grund ist, warum ich in der KNX GA keinen Wert bekomme. Hat jemand ein ähnliches Problem und vieleicht eine Lösung dafür (mit Umwandeln in Number habe ich es schon versucht, das brachte aber keinen Erfolg.

                          Vielen Dank und Grüße

                          Marko
                          Ja, die Helios-Schnittstelle sendet ja immer ASCII. Ich benutze dann parseFloat() oder parseInt() oder ähnliches zur weiteren Verarbeitung. Bedenke dass MQTT auch nur Text liefert falls du aus irgendeinem Grund den Umweg über MQTT nutzen möchtest. Also vor dem KNX-Ultimate-Node habe ich einen function-Node mit:
                          Code:
                          msg.payload = parseFloat(msg.payload);
                          return msg;
                          Oder um aus einer "1" ein TRUE zu machen:
                          Code:
                          if(msg.payload.charCodeAt()=="49") {
                          msg.payload = true;
                          }
                          else
                          {
                          msg.payload = false;
                          }
                          return msg;

                          Kommentar


                            #14
                            ...perfekt, 1000Dank - funktioniert nun so wie gewünscht.

                            VG

                            Marko

                            Kommentar


                              #15
                              und noch eine Anschlussfrage- diesesmal aber mehr Helios betreffend. Lässt sich die oben bereits erwähnte Bypassklappe von extern steuern? Den aktuellen Status bekomme ich ausgelesen, wenn ich aber auf das Register schreibe sehe ich keine Reaktion (Status der Klappe ist aktuell "0", geschrieben habe ich eine "1") Allerdings - um den Link zur Frage nach den Datentypen zu schließen - muss ich da evtl. auch etwas "Anderes" schreiben um der Helios klarzumachen, dass die Bypassklappe bewegt werden soll?

                              Vielen Dank und Grüße

                              Marko

                              Kommentar

                              Lädt...
                              X