Modbus + Wärmepumpe mit Schaltpanel

Hallo zusammen,
ich möchte gerne Daten aus einer Wärmepumpe abfragen. Die Hauptplatine und das Schaltpanel sprechen über Modbus miteinander.
Ich habe jetzt zum Testen ein Modbus-RTU zu Modbus TCP-Gateway dazu geklemmt um die Daten zu lesen.
Der Plan war eigentlich das Schaltpanel komplett durch IPS zu ersetzen. Leider scheint das nicht zu funktionieren, da die Hauptplatine scheinbar der Master ist.
So ganz bin ich mir aber nicht sicher…

Wenn ich nur die Hauptplatine angeschlossen habe bekomme ich folgende Werte:

11.04.2022, 15:03:50 |             RECEIVED | 00 10 07 D1 00 5A B4 57 46 32 31 30 36 31 30 30 36 36 30 00 00 00 00 01 01 07 D1 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 0B 00 F2 00 4B 00 37 01 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F 00 8C 00 9A FF FD 00 81 01 FE 00 47 00 00 00 00 00 42 00 10 5A A5 00 0D 00 00 00 00 00 1B 02 58 00 23 00 E2 00 00 00 AE 00 00 02 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1B 02 39 00 00 00 00 00 00 00 00 00 00 00 00 C6 C9 

11.04.2022, 15:03:51 |             RECEIVED | 01 03 0B B9 00 5A 16 03

11.04.2022, 15:03:51 |             RECEIVED | 02 03 0B B9 00 5A 16 03 

Wenn ich jetzt das Schalterpanel dazu anschließe bekomme ich:

11.04.2022, 15:03:57 |             RECEIVED | 00 10 07 D1 00 5A B4 57 46 32 31 30 36 31 30 30 36 36 30 00 00 00 00 01 01 07 D1 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 0B 00 F2 00 4B 00 37 01 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F 00 8C 00 9A FF FD 00 81 01 FF 00 47 00 00 00 00 00 42 00 10 5A A5 00 0D 00 00 00 00 00 1C 02 58 00 23 00 E2 00 00 00 AE 00 00 02 5D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1B 02 39 00 00 00 00 00 00 00 00 00 00 00 00 A9 7E 

11.04.2022, 15:03:58 |             RECEIVED | 01 03 0B B9 00 5A 16 30 01 03 B4 57 46 32 31 30 36 31 30 30 36 36 30 00 00 00 00 01 01 07 D1 00 00 00 00 00 00 00 00 00 14 00 04 00 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 A2 70 

11.04.2022, 15:03:58 |             RECEIVED | 02 03 0B B9 00 5A 16 03 

Daher gehe ich davon aus, dass das Schalterpanel die ID 1 hat und die Hauptplatine einen Broadcast sendet (ID0)
Kennst sich da jemand aus und kann mir helfen?

Hallo Isi,
darf ich fragen was das für eine Wärmepumpe ist?

Danke Gruss Marcus

klar

Hallo Isi,
interessantes Projekt. Ich stehe vor der gleichen Herausforderung mit einer HKR HKS Classic-Line I (ohne „vs“) und besorge gerade die nötige Hardware um die Schnittstelle zwischen Hauptplatine und Display anzuzapfen. Ich setze dabei auf ein Raspi mit einem entsprechenden Hat für RS485. Bist du seit deinem Eingangsbeitrag schon weitergekommen?
Mit welchen technischen Spezifikationen läuft denn die RS485 Schnittstelle? Sprich, Baudrate, Parity, Stop bit. Das würde mir schonmal den Anfang erleichtern. Gut ist schonmal, dass die Wärmepumpe bei mir auch ohne angeschlossenes Display über den potentialfreien Kontakt geschaltet werden kann und prinzipiell läuft. Ziel ist es also bei mir ebenfalls, das Display so gut es geht mit einer Steuerung über den Raspberry PI zu ersetzen, um diverse Parameter (Eingangstemperatur, Ausgangstemperatur, etc.) auszulesen/mitzuloggen und idealerweise den Leiselauf zu aktivieren/deaktivieren.

Viele Grüße!

Wollte mich hier nochmal rückmelden, falls noch jemand Interesse an der Thematik hat.
Das Monitoring über das Raspberry hat nach einigem Python-Gebastel mit der seriellen Schnittstelle soweit funktioniert. Mit der aktiven remote-Steuerung von Parametern (Temperatur, Leiselauf) als Alternative zum Display habe ich mich allerdings mangels Zeit und begrenztem Nutzen für mich nicht mehr weiter beschäftigt. Wenn man den Traffic zwischen Hauptplatine und Display mitschneidet käme man aber ziemlich sicher auf einen grünen Zweig. Vom Hersteller gibt’s aber keine Hilfe. Meine Anfrage blieb bis heute ohne Antwort.

Der Einfachheit halber habe ich das Raspberry allerdings mittlerweile durch ein Elfin EW11 ersetzt (Baud Rate 9600, Data Bit 8, Stop Bit 1, Parity None), welches als Modbus RTU/TCP Gateway arbeitet. Es schickt die ankommenden Modbus Daten als simpler TCP-Client zu einer eigenen Python-Applikation, die die relevanten Register dann in eine Influx Datenbank loggt.

Alle 2 Sekunden schickt die Wärmepumpe (in meinem Fall eine HKR Technik HKS 180i) ein 189 Bytes Modbus Paket (Beispiel siehe erstes Paket im Eingangspost. Zum dekodieren hilfreich: Online Modbus RTU Parser & Modbus TCP Parser) mit Daten der Register 2001 bis 2090. Mit allen anderen periodisch eintreffenden Paketen konnte ich nichts anfangen. Mithilfe des originalen Displays zur Wärmepumpe, das nach wie vor zusätzlich zum EW11 auf dem RS485-Bus hängt und einwandfrei funktioniert, wurden folgende Registerzuordnungen klar:

2046: Wasser Eingangstemperatur
2047: Wasser Ausgangstemperatur
2048: Verdampfungstemperatur
2049: Außentemperatur
2050: Kompressorheißgastemperatur
Alle Werte kommen in °C und müssen mit einem Faktor von 0,1 multipliziert werden. D.h. ein Registerwert von 123 bedeutet z.B. 12,3°C.
Viele andere Register sind immer 0. Einige weitere Register (2011, 2012, 2019-2023, 2034, 2045, 2057, 2060, 2061, 2063, 2067) geben vermutlich Betriebszustände wieder, die ich allerdings nicht weiter untersucht habe. 2022 hat ziemlich sicher mit der Leistungsaufnahme zu tun. 2057 dürfte eine Art Betriebsdauerzähler seit dem letzten Stromausfall sein.