hier der verkürzte Thread aus dem alten Loxone Forum zu dem Thema. Es geht um die Einbindung der Helios KWL Lüftungsgeräte mit integrierter "easycontrols" Webschnittstelle in Loxone. Mein erster Ansatz direkt die Webschnittstelle anzusprechen funktioniert leider nicht, da die virtuellen HTTP Eingangsverbinder der Loxone nur ein HTTP GET unterstützen, aber die Helios Schnittstelle ein HTTP POST auch für das Auslesen verlangt. Diese in der HTTP Programmierung eher unübliche Variante wird leider von Loxone nicht unterstützt und wird es wohl in absehbarer Zeit auch nicht werden. Ich hatte bei Loxone ein Ticket zu einem Feature Request für HTTP POST für den virtuellen HTTP Eingangsverbinder gestellt, aber dies wurde leider abgelehnt (Ticket 861929) - sehr Schade. Zwei weitere Nachteile kommen noch hinzu: zum Einen erfordert "easycontrols" immer eine Anmeldung und diese muss regelmäßig aufgefrischt werden. Der zweite Nachteil ist der, dass die Variablen nicht einzeln gelesen bzw. geschrieben werden können, sondern nur als "Paket" über XML Dateien zurückgeliefert werden, die dann aufwändig durchsucht werden müssen. Das Webinterface der Helios finde ich zwar ordentlich strukturiert, aber etwas nervend, weil nach einer kurzen Zeit die Anmeldung gelöscht wird und bei mir dann ein Fehler kommt, dass die XML Daten nicht gelesen werden können. Eine zwangsweise Anmeldung im eigenen Haus finde ich auch umständlich. Da schaue ich lieber auf die Loxone App bzw. das Webinterface von Loxone.
Ein anderer User aus dem alten Loxone Forum (nochmals Danke Axel!) hat mich aber auf die Idee gebracht, die Modbus TCP Schnittstelle zu verwenden, die ebenfalls von Helios mit unterstützt wird. Hinweise zu dieser Schnittstelle gibt es von Helios hier.
Mittlerweile unterstützt Loxone ja Modbus TCP, allerdings nur "einfache" Abfragen bzw. Setzen einzelner Register. Helios macht es aber durch die Verwendung von Variablennamen und Werten, die als Strings kodiert werden sehr kompliziert. Für das Auslesen eines Wertes ist zunächst die entsprechende Variable zu schreiben - so etwas wird derzeit nicht auf der Loxone mit der Modbus TCP Funktion unterstützt. Da Helios hier eine aus meiner Sicht sehr unübliche und komplizierte Einbindung gewählt hat, ist die Wahrscheinlichkeit der Unterstützung von Loxone für diese Einbindung sehr gering.
Zum Glück gibt es aber mit Pico C die Möglichkeit die modbus TCP Schnittstelle über die TCP "Streams" Funktionen auf der Loxone selbst zu programmieren. Hier die 2. Version des Pico-C Programmes. Das Auslesen bzw. Setzen von Werten funktioniert problemlos, die CPU Belastung der Loxone ist auch nur minimal gestiegen und es läuft sehr stabil.
Die Reihenfolge der Parameter (alphabetisch) in der Visu ist nicht unbedingt so, wie man es gerne hätte. Dieser Wunsch ist ja schon mehrfach an Loxone herangetragen worden.
Was im Code noch verbessert werden könnte, ist das Error-Handling: Falls die IP-Adresse der Helios Anlage nicht erreichbar ist, gibt die Funktion "stream_create" sauber einen NULL-Pointer zurück. Damit werden keine Werte mehr gelesen oder geschrieben. Ein Ausfalls während der Schleife hat allerdings zur Folge, dass die Werte auf -999 bzw. Error gesetzt werden. Der Zustand bleibt dann bis zur Behebung des Problems bestehen.
Der Code hat etliche Kommentare und es sollte problemlos möglich sein, andere Variablen zu lesen oder zu schreiben. Eine Intelligenz, d.h. welche Lüfterstufe unter welchen Bedingungen eingestellt wird, sollte sinnvollerweise über Loxone Config realisiert und nicht in Pico C fest verdrahtet werden. Ich habe als Beispiel ein Screenshot meiner Loxone Config angehängt, um Neueinsteigern in diesen Bereich zu zeigen, wie ein Pico C Programm in die Loxone Config eingebunden wird. Eine Intelligenz ist noch nicht vorhanden - lediglich die manuelle Auswahl der Lüfterstufe über den Baustein "Radiotasten" und die Anzeige einiger Werte. Da ich die Stufe 0 z.B. für den manuellen Wechsel des Vorfilters praktisch finde, musste ich noch den Baustein "Subtrahierer" einfügen. Wer nur Stufe 1-4 steuern möchte, kann die Logik daher noch etwas vereinfachen. Die IP-Adresse im Pico-C muss natürlich noch an die IP-Adresse der eigenen Helios KWL Lüftungsanlage angepasst werden. Der Modbusserver in der Loxone wird nicht verwendet.
Hintergrund: Die Implementierung des Modbus-Servers in der Loxone ist leider nicht kompatibel mit Helios, da der Baustein in der Loxone nur einfache Werte auslesen oder schreiben kann. Helios macht es aber sehr kompliziert und man muss z.B. eine auszulesende Variable zuerst als String schreiben, um den Wert anschließend als String wieder auslesen zu können. Dieser String muss dann noch in einen analogen Wert z.B. die Temperatur umgerechnet werden.
Andere Hersteller verwenden einfach ein "Read Register X", um Variable X als 16- oder 32-Bit Integer Wert mit oder ohne Vorzeichen oder als 32-Bit Float auszulesen. Mit 65535 Registern gibt es sicherlich genügend Register, um alle Variablen eines Gerätes zu definieren. Dann würde ein Pico-C Skript nicht notwendig sein und man könnte mit den modbusTCP Sensoren bzw. Aktoren alle Variablen auslesen bzw. diese ändern. Einen Vorteil durch die Verwendung von Strings bei Helios sehe ich nicht, nur Nachteile.
Warum Helios die modbus TCP Kommunikation so kompliziert gemacht hat, dass wissen wahrscheinlich nur deren Entwickler. Nach meiner Ansicht ist hier das Problem eindeutig von Helios verursacht worden und man kann nicht von Loxone erwarten, dass so eine umständliche Kommunikation in einem modbusTCP Baustein unterstützt wird. Falls irgendjemand mitliest, der einen direkten Draht zu Helios hat, kann ja mal nachfragen.
Anhand der Anleitung von Helios zum modbus TCP Interface hatte ich mit dem Tool "modpoll" einen Parameter ausgelesen und geschrieben und die Kommunikation per Wireshark mitgeschnitten. So konnte ich den den genauen modbusTCP Header mitlesen. Zwei Punkte fehlen allerdings in der Doku von Helios: auf Seite 17 in der PDF wird auf eine Tabelle "Codierung" (Beschreibung der Fehler mit Nummern) verwiesen, die es gar nicht gibt. Der Parameter für die Abfrage des Bypass (offen oder zu) mit der Variablen "v02119" fehlt auch. Den habe ich beim Mitlesen der Kommunikation des Webinterfaces per Wireshark gefunden.
Hinweis: Die aktuelle Version (derzeit 5.6) ist in der Loxwiki zu finden http://www.loxwiki.eu/pages/viewpage...pageId=1639038
Hier noch die damals erstellten Screenshots zur früheren Version:
Kommentar