In unserem Haus steht eine Wärmepumpe des Typs CTA Optiheat 1-11es.

Da wir in der letzten Zeit mit der Temperatur des heissen Trinkwassers nicht zufrieden waren, habe ich mich der Herausforderung gestellt, an Metrikdaten zu kommen.

Leider können auf der Wärmepumpe nur die aktuellen Werte abgelesen werden. Bei einer Internetverbindung steht optional eine App zur Steuerung zur Verfügung. Trotz intensiver Recherche konnte ich leider keine Informationen zu verfügbaren Schnittstellen finden.

Analyse LPB Gateway

Da ich wusste, dass eine App bei verfügbarem Internetzugang nutzbar ist, habe ich geprüft, ob und wie ich die Wärmepumpe mit dem Netzwerk verbinden kann.

Auf der Rückseite habe ich eine RJ45-Buchse für ein Netzwerkkabel gefunden. Daher habe ich ein Kabel zum Router eingesteckt.

Kurz darauf konnte ich im Management-Interface des Routers ein neues Gerät erkennen. Neugierig habe ich die vergebene IP-Adresse in den Webbrowser eingetippt.

Und siehe da, ich erhielt die Login-Seite eines Geräts mit der Bezeichnung OCI670/109.

Nach einer kurzen Recherche fand ich heraus, dass es sich dabei um ein Gateway für LPB-/BSB-Geräte von Siemens handelt.

Um weiterzukommen, habe ich unzählige Anleitungen zum OCI670/109 durchsucht, bis ich gültige Standardzugangsdaten fand. Knackpunkt war, dass diese je nach Firmware-Version unterschiedlich sind.

Nach dem Login habe ich mich umgesehen. Dabei habe ich gesehen, dass die Steuerung der Wärmepumpe (Siemens RVS61.843/169, Serie F) auf dem LPB-Bus erkannt und angezeigt wird. Leider konnte ich aber keine Daten der Steuerung finden.

Da ich ohne ein tieferes Verständnis des Systems weder eine Fehlkonfiguration noch einen Ausfall der Wärmepumpe riskieren wollte, habe ich auf das Ändern von Einstellungen verzichtet.

Exkurs ACS790

In den Dokumentationen zu OCI670/109 und RVS61.843/169 habe ich gesehen, dass das Management mit einer Anwendung namens ACS790 möglich ist.

Zum Download der Software habe ich bei Siemens einen Account erstellt und sie in einem Windows-Image in Winboat installiert.

Aufgrund des NATs von Docker konnte der ACS790 das Gateway nicht selbstständig erkennen. Als Lösung habe ich ein Offline-Projekt erstellt und dort ein OCI670/109 hinzugefügt. Anschliessend konnte ich die Verbindungseinstellungen des Gateways bearbeiten und die IP-Adresse hinterlegen.

Anschliessend konnte ich das System erkennen lassen (Parameter auslesen). Dazu waren keine Zugangsdaten notwendig.

Mit dem ACS790 konnte ich anschliessend alle gewünschten Parameter anzeigen lassen.

Um auch ohne ACS790 auf die Daten zuzugreifen, habe ich mit Wireshark überprüft, wie die Anwendung mit dem Gateway kommuniziert. Leider sah das für mich nach einem unbekannten Binärprotokoll über Port 50005 aus. Da ich keine Informationen zu dem Protokoll finden konnte, habe ich nach einer anderen Lösung gesucht.

Analyse via Climatix IC

Auch wenn ich einen lokalen Zugriff ohne Cloud wollte, habe ich mir Climatix IC einmal angesehen. Dieses wird in den Anleitungen zu OCI670/109 erwähnt.

Daher habe ich mich mit meinen Siemens-Zugangsdaten (vom ACS790-Download) bei https://www.climatixic.com/ eingeloggt.

Zum Hinzufügen der Anlage musste ich einen Activation Key eingeben. Den habe ich lokal auf dem OCI670/109 unter „Home” > „0.5 OCI670/109” > „Device information” gefunden. Nach der Eingabe wurde ein Code erwartet. Da ich diesen nirgends finden konnte, habe ich die Seite neu geladen und die Anlage war auf Climatix IC verfügbar.

Unter „Operating” > „Web Access” konnte ich die Oberfläche des OCI670/109 wiedererkennen. Diese habe ich in einem neuen Tab geöffnet. Im Unterschied zum lokalen Zugriff war dort unter „Home” dann auch die Steuerung unter „0.1 RVS61.843F/169” verfügbar. Yeah!

Da die Parameter der URLs denen des lokalen Zugriffs entsprechen, habe ich die IDs der gefundenen Informationsseiten auch lokal ausprobiert. So konnte ich lokal auf die gewünschten Daten zugreifen. Einzig die notwendigen Menüpunkte von RVS61.843F/169 wurden mir nicht angezeigt. Entsprechend habe ich mir die interessanten IDs herausgeschrieben.

Implementation Datenzugriff

Die bisherigen Funktionalitäten für unsere „Hausautomation” habe ich in einer Spring-Boot-Anwendung implementiert. Diese kommuniziert u. a. mit unserem Raumfeld Multiroom-Audio-System, EVCC zur Steuerung der eAuto-Ladestation, dem Solaredge-Inverter der Photovoltaikanlage, diversen Shellys zur Auswertung von Verbrauchsdaten oder zur Steuerung von Lasten (z. B. Wäschetrockner) und diversen Raspberry Pis zur Analyse von Temperatur- und Feuchtigkeitsdaten. Für die vorhandenen Daten gibt es bereits einen Metrik-Export zu Prometheus und Grafana.

Da ich nach wie vor keine API finden konnte, habe ich ganz klassisch geschaut, was der Webbrowser macht, wenn ich mich einlogge und auf die Daten zugreife.

Zur Sicherheit habe lokal beim OCI670/109 einen nicht privilegierten Benutzer erstellt um ungewollte Änderungen zu verhindern.

Diese Aufrufe des Webbrowsers habe ich dann in Java nachgebaut. Mittels Spring Boot WebClient konnte ich die HTML-Seiten aufrufen und die Inhalte mit JSoup extrahieren.

Zur direkten Ansicht in meiner Anwendung lade ich die Daten aus einer oder mehreren main.app-Seiten vom OCI670/109. Dort lese ich sie aus den Tabellen mit JSoup aus und lade sie in eigene Datenstrukturen.

Für die Prometheus-Metriken (via Actuator) lade ich beim Initialisieren die Daten aus den entsprechenden main.app-Seiten, um dort die internen IDs zu extrahieren. Diese ermöglichen später den Zugriff via ajax.app mit der ID als plantItemId.

Als Resultat sind die Daten nun in Grafana visualisierbar (die Energiedaten sind noch nicht korrekt).