Ältere Waterkotte Wärmepumpen mit der WPCU.C Steuerung können über Modbus perfekt in Home Assistant eingebunden werden. Mit Zeit, Pioniergeist und dieser Anleitung kannst du deine WPCU gesteuerte Wärmepumpe in den Home Assistant aufnehmen.
Ich selbst bin Besitzer einer Waterkotte der Reihe DS 5023, die Anleitung sollte aber für jede Wärmepumpe mit der WPCU Regelung passen.
Wie Wärmepumpe hat oben, rechts an der Rückseite des dunklen Anschlusskastens eine RS232 Schnittstelle. Darüber kommuniziert die Wärmepumpe über Modbus.
Modbus zu TCP
Räumlich sind Home Assistant und Wärmepumpe bei mir weit getrennt. Daher der Entschluss einen Modbus RS232 zu RJ45 Wandler zu verwenden um die Steuerung über das heimische WLAN durchzuführen. Das RS232/RS485/RS422 to RJ45 Ethernet Converter Module von Waveshare ist günstig und erfüllt perfekt den Zweck.
Man benötigt ein klassiches Nullmodemkabel, um die Wärmepumpe mit dem Waveshare zu verbinden. Stromversorgung des Waveshare ist auf mehrere Arten möglich. Neben Power over Ethernet kann man über die Kontaktleiste eine Stromversorgung anschließen. Ich habe die Variante mit dem Standard 12V Netzteil gewählt. Ein normales Netzwerk Patchkabel verbindet das Waveshare mit dem Heimnetz. Alle genauen technischen Spezifikationen findet man auf der Herstellerseite.
Man muss noch das Waveshare noch konfigurieren. Es gibt dafür eine Windows Software zum Download. Als Mac User habe ich das aber über Weboberfläche gemacht. Das Gerät ist auf die IP Adresse http://192.168.1.200 vorkonfiguriert. Sollte man also (wie ich) andere lokale IP Adressen verwenden (also nicht das 192.168.1.xxx Muster), so muss man zuerst eine Verbidnung über einen alten Router etc. herstellen, der auf diesen IP Adressen läuft. Man gibt die obige IP im Browser ein und man wird von einem Login Screen empfangen. Das Passwort ist in den Werkseinstellungen leer.
Im Configbildschirm stellt man in den „Network Settings“ neben der für das Heimnetz gewünschten IP den Modbus Stnddard Port 502 ein. IP Mode unbedingt auf static und eine fixe IP Adresse wählen, die man am besten auch im Heimrouter fix reserviert.
In den Serial Settings werden die seriellen Kommunikationsparameter eingestellt, mit denen die Waterkotte kommuniziert. Hier hat die recht häufig genütze Einstellung. Baud Rate: 9600, 8 Databits, kein Paritybit (none) und 1 Stopbit zum Erfolg geführt.
In den Multihost Settings muss man „Modbus TCP to RTU“ wählen. Die restlichen Werte bleiben unverändert.
Erste Kommunikationsversuche
Man kann diesen Schritt auslassen, würde ich aber nicht tun.
Die ersten Kommunikationsversuche habe ich in Python durchgeführt. Dort habe ich auch erarbeitet wie die Daten zusammengesetzt und interpretiert werden.
Es gibt folgende Möglichkeiten: (von der Besten zur „Schlechtesten“)
- das Jupyter Notebook öffnen und rumspielen (Voraussetungen: Jupyter Notebook installiert, Python Basiskenntnisse)
- das py Skript starten. (python MobusHeizung.py) (Voraussetzungen: Python am System installiert)
- für den Mac ist ein ausführbares File mitgepackt. Einfach Doppelklicken. (Voraussetzungen: Mac)
- Sich eine Modbus Freeware suchen und damit rumspielen ob man eine Verbinung schafft
- das Kapitel auslassen
Hat man Kontakt zur Waterkotte und kann Werte lesen, stellt sich die Frage nach den Registern. Durch Recherche im Netz, Bedienungsanleitung und viel Probieren, habe ich eine vollständige Modbus Regiisterliste erstellen können. Einsehbar ist sie über dieses Google Sheet.
Ein Register hat 16Bit, die meisten Daten werden als Float übermittelt. Die beiden Register muss man umdrehen und Little Endian dekodieren. Keine Angst, das muss man auch nicht verstehen.
Aufnahme in den Home Assistant
Weiter gehts im Home Assistant. Ich lese über Node Red ein. Man kann natürlich auch die Modbus Integration verwenden. Wenn man Node Red nicht verwendet und nur wenige Werte braucht ist das möglicherweise sogar einfacher. Will man aber viel Werte verwenden ist Node Red einfach viiiiel komfortabler. Man muss das Node Red Add On installieren und die Node Red Companion Integration (über HACS), die einen Zugriff auf Home Assistant Entitäten ermöglicht.
In Node Red muss die Modbus Palette (node-red-contrib-modbus), sowie die Buffer Parser Palette (node-red-contrib-buffer-parser) installiert sein.
Für das Auslesen von mehreren Werten sollte man den „Flex Getter“ verwenden. (Laut Beschreibung ab 10 Werten). Ich habe die Abfragen in 4 Blöcke unterteilt, deren Abfragehäufigkeit sich unterscheidet.
Der Aufbau ist für jeden Block gleich:
Ein Inject Node triggert die Abfrage in regelmäßigen Abständen
Ein Function Node setzt die Modbus Anfrage zusammen und gibt sie an den
Flex Getter weiter.
Du kannst dir diese 3 Knoten importieren, in dem du rechts oben auf das Menü klickst, auf Import und die Datei importierst.
Im FlexGetter musst du einmalig dein Modbus Gerät definieren. Hier die IP vom Modbus Gateway einfügen.
Zurückgegeben wird nun ein Buffer mit Daten. Daraus müssen an den richtigen Stellen die Daten richtig interpretiert werden. Am einfachsten macht man das mit einem Buffer Read Knoten, in dem man die Werte, die man extrahieren möchte definiert. (Wenn du keinen Buffer Knoten findest, musst du die Palette node-red-contrib-buffer-parser installieren) Wichtig ist die generelle Einstellung Swap 16.
Für Float Werte verwendet man Float (le), Länge 1. Für Boolean Werte nimmt man den Typ int8 und Länge 1. usw. Der anzugebende Offset ist in Bytes. Ich beginne z.b. einen Block bei Adresse 433. Das ist die Außentemperatur. Ein Float Wert hat 4 Bytes, somit liegt der nächste Wert bei einem Offset von 4. (Outdoor Temp 1h) Aus der Liste erkennt man die Länge der jeweiligen Werte.
Die aus dem Buffer Reader ausgegebenen Werte kann man noch etwas bearbeiten. (Ich hab z.b. einen Filterknoten, der den Ablauf stoppt, wenn es zu keiner Wertänderung gekommen ist. Sowie einen kleinen Function Node, der die Werte auf 2 Stellen rundet.) Bei manchen Dateitypen ist etwas mehr Arbeit gefragt.
Man legt für die Werte (am besten direkt in Node Red) Home Assistant Entities an. (Für Zahlen die man nur lesen will einen sensor, für schreibbae zahlen einen number_input, für Schalter einen switch, für Type_TIME eine Zeit. In diese Knoten schreibt man dann die Werte. Damit ist in Home Assistant eine Entity verfügbar, die bei jedem Modbus Read automatisch aktualisiert wird. Diese Entities kann man beliebig in Karten verwenden.
Hier zum Download zuerst der oben gezeichnet kleine Block der Operating Hours. Damit man mal einen Überblick bekommt wie das Lesen der Werte funktioniert.
Werte die auch über die Home Assistant Oberfläche geändert werden, müssen in Node Red auf Änderungen überwacht werden und bei Änderung über Modbus geschrieben werden. Dabei müssen wieder zum Teil die Typen ein wenig bearbeitet werden. Hier mein gesamter Flow, der die meisten Werte ausliest und schreibt. Ich verwende keine Pool, Solar und Mixer Werte, weil ich diese Funktionen nicht nütze. Man kann diese aber analog implementieren. Man erhält wertvollen Zugriff auf Funktionen, die sonst nur über die Admin Ebene erreichbar sind. In der Betriebsanleitung findet man gute Hinweise zu den einzelnen Werten.
Link zum Google Sheet mit den Modbus Registern
Viel Erfolg bei deinem Projekt. Hier noch ein Screenshot meines Waterkotte Dashboards.