NEWS
Remko Wärmepumpe ModBus-Anbindung
-
Verzeihung. So:
modbus.8 2026-03-14 22:09:55.122 debug [DevID_1] Poll start --------------------- modbus.8 2026-03-14 22:09:55.121 info Connected to slave modbus.8 2026-03-14 22:09:50.002 debug connect to serial /dev/ttyUSB0 with 9600 modbus.8 2026-03-14 22:09:49.917 info Can not execute task add for ID undefined: Parameter "id" needs to be of type "string" but type "undefined" has been passed modbus.8 2026-03-14 22:09:49.864 debug Add undefined: {"type":"state","common":{"name":"","role":"level","type":"number","read":false,"write":true,"def":0,"unit":""},"native":{"regType":"holdingRegs","address":-29991,"deviceId":1,"type":"","len":"","offset":0,"factor":1,"poll":""}} modbus.8 2026-03-14 22:09:49.864 error Invalid object: {"type":"state","common":{"name":"","role":"level","type":"number","read":false,"write":true,"def":0,"unit":""},"native":{"regType":"holdingRegs","address":-29991,"deviceId":1,"type":"","len":"","offset":0,"factor":1,"poll":""}} modbus.8 2026-03-14 22:09:49.863 error Invalid data holdingRegisters/0: {"_address":-29991,"name":"temp_set","description":"","unit":"","type":"","len":"","factor":1,"offset":0,"formula":"","role":"level","room":"","poll":"","wp":"","cw":"","isScale":"","address":-29991,"deviceId":1,"fullId":"modbus.8.0"} modbus.8 2026-03-14 22:09:49.863 debug Initialize Objects for holdingRegs: [{"_address":-29991,"name":"temp_set","description":"","unit":"","type":"","len":"","factor":1,"offset":0,"formula":"","role":"level","room":"","poll":"","wp":"","cw":"","isScale":"","address":-29991,"deviceId":1}] modbus.8 2026-03-14 22:09:49.863 debug Initialize Objects for inputRegs: [] modbus.8 2026-03-14 22:09:49.863 debug Initialize Objects for coils: [] modbus.8 2026-03-14 22:09:49.863 debug Initialize Objects for disInputs: [] modbus.8 2026-03-14 22:09:49.741 info starting. Version 7.0.6 in /opt/iobroker/node_modules/iobroker.modbus, node: v22.22.0, js-controller: 7.0.7 modbus.8 2026-03-14 22:09:49.582 debug Plugin sentry Initialize Plugin (enabled=true) -
Verzeihung. So:
modbus.8 2026-03-14 22:09:55.122 debug [DevID_1] Poll start --------------------- modbus.8 2026-03-14 22:09:55.121 info Connected to slave modbus.8 2026-03-14 22:09:50.002 debug connect to serial /dev/ttyUSB0 with 9600 modbus.8 2026-03-14 22:09:49.917 info Can not execute task add for ID undefined: Parameter "id" needs to be of type "string" but type "undefined" has been passed modbus.8 2026-03-14 22:09:49.864 debug Add undefined: {"type":"state","common":{"name":"","role":"level","type":"number","read":false,"write":true,"def":0,"unit":""},"native":{"regType":"holdingRegs","address":-29991,"deviceId":1,"type":"","len":"","offset":0,"factor":1,"poll":""}} modbus.8 2026-03-14 22:09:49.864 error Invalid object: {"type":"state","common":{"name":"","role":"level","type":"number","read":false,"write":true,"def":0,"unit":""},"native":{"regType":"holdingRegs","address":-29991,"deviceId":1,"type":"","len":"","offset":0,"factor":1,"poll":""}} modbus.8 2026-03-14 22:09:49.863 error Invalid data holdingRegisters/0: {"_address":-29991,"name":"temp_set","description":"","unit":"","type":"","len":"","factor":1,"offset":0,"formula":"","role":"level","room":"","poll":"","wp":"","cw":"","isScale":"","address":-29991,"deviceId":1,"fullId":"modbus.8.0"} modbus.8 2026-03-14 22:09:49.863 debug Initialize Objects for holdingRegs: [{"_address":-29991,"name":"temp_set","description":"","unit":"","type":"","len":"","factor":1,"offset":0,"formula":"","role":"level","room":"","poll":"","wp":"","cw":"","isScale":"","address":-29991,"deviceId":1}] modbus.8 2026-03-14 22:09:49.863 debug Initialize Objects for inputRegs: [] modbus.8 2026-03-14 22:09:49.863 debug Initialize Objects for coils: [] modbus.8 2026-03-14 22:09:49.863 debug Initialize Objects for disInputs: [] modbus.8 2026-03-14 22:09:49.741 info starting. Version 7.0.6 in /opt/iobroker/node_modules/iobroker.modbus, node: v22.22.0, js-controller: 7.0.7 modbus.8 2026-03-14 22:09:49.582 debug Plugin sentry Initialize Plugin (enabled=true)@luas sagte in Remko Wärmepumpe ModBus-Anbindung:
Invalid data holdingRegisters/0: {"_address":-29991,
welcher Register steht denn jetzt in der Registerkonfiguration???
-
Oh, da stand plötzlich -29991. Ich habe erneut 10100 eingetragen, jetzt ist der Eintrag im Objektbaum erschienen. Juhu!
Allerdings noch mit Wert "0" - "substitute initial value"
Im Log jetzt keine Störungsmeldungen mehr. Vielleicht nur noch eine Frage des Datentyps? -
Oh, da stand plötzlich -29991. Ich habe erneut 10100 eingetragen, jetzt ist der Eintrag im Objektbaum erschienen. Juhu!
Allerdings noch mit Wert "0" - "substitute initial value"
Im Log jetzt keine Störungsmeldungen mehr. Vielleicht nur noch eine Frage des Datentyps?@luas sagte in Remko Wärmepumpe ModBus-Anbindung:
Vielleicht
- Haken bei Abfrage fehlt!
- falscher offset
- nimm mal einen niedriger oder einen höher
- falsches Register
- warum jetzt 10100? bisher 10010!
- falscher USB-Port
- sinnvoll immer den /dev/serial/by-id zu nehmen
- falscher Faktor
- oder anderer Fehler
und ja!
Den Typ musst du angeben. -
@luas sagte in Remko Wärmepumpe ModBus-Anbindung:
Vielleicht
- Haken bei Abfrage fehlt!
- falscher offset
- nimm mal einen niedriger oder einen höher
- falsches Register
- warum jetzt 10100? bisher 10010!
- falscher USB-Port
- sinnvoll immer den /dev/serial/by-id zu nehmen
- falscher Faktor
- oder anderer Fehler
und ja!
Den Typ musst du angeben.falsches Register
Mist, ja.
sinnvoll immer den /dev/serial/by-id zu nehmen
Ich sehe /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_BG02Q6FL-if00-port0
Aber wie würde ich das eintragen? Auf der Verbindungsseite ist es nur ein Drop-Down-FeldUnd für die übrigen Fragen scheint mir das ein guter Moment, um noch mal beim Support nachzuhaken. Danke soweit, ich melde mich, wenn es etwas Neues gibt!
-
falsches Register
Mist, ja.
sinnvoll immer den /dev/serial/by-id zu nehmen
Ich sehe /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_BG02Q6FL-if00-port0
Aber wie würde ich das eintragen? Auf der Verbindungsseite ist es nur ein Drop-Down-FeldUnd für die übrigen Fragen scheint mir das ein guter Moment, um noch mal beim Support nachzuhaken. Danke soweit, ich melde mich, wenn es etwas Neues gibt!
@luas sagte in Remko Wärmepumpe ModBus-Anbindung:
Auf der Verbindungsseite ist es nur ein Drop-Down-Feld
ohne benutzerdefiniert?
@luas sagte in Remko Wärmepumpe ModBus-Anbindung:
Und für die übrigen Fragen scheint mir das ein guter Moment, um noch mal beim Support nachzuhaken
nöö!
was kommt jetzt mit dem richtigen Register und angehakter Checkbox Abfrage? -
ohne benutzerdefiniert?
Ja. Aber passt. Funktioniert erst mal.
nöö! was kommt jetzt mit dem richtigen Register und angehakter Checkbox Abfrage?
Die Mischung macht's. Der Support schreibt:
"unsere Geräte verwenden standardmäßig 16-Bit-Modbus-Register mit Big-Endian-Byte-Reihenfolge (MSB first).
Daher sollte der Wert als Unsigned 16-Bit Integer (Big-Endian) interpretiert werden. Da laut Registertabelle keine negativen Werte vorkommen, ist dies der passende Datentyp. Alternativ kann auch Signed 16-Bit (Big-Endian) funktionieren."Mit Unsigned 16-Bit (Big-Endian) (und "Abfrage"-Checkbox?) haut es tatsächlich hin, Juhu!
Es geht aber gleich wieder schief, wenn ich versuche, Register 10000 abzufragen:
modbus.8 2026-03-17 19:01:15.315 info Disconnected from slave modbus.8 2026-03-17 19:01:14.315 warn [DevID_1/holdingRegs] Block 10000-10010: {} modbus.8 2026-03-17 19:01:14.315 error Request timed out. modbus.8 2026-03-17 19:01:14.314 warn Error: undefined modbus.8 2026-03-17 19:01:09.524 error Error response: Data address of some or all the required entities are not allowed or do not exist in slave modbus.8 2026-03-17 19:01:09.524 error Error response for FCx3: Illegal Data Address modbus.8 2026-03-17 19:01:09.313 debug [DevID_1/holdingRegs] Poll address 10000 - 11 registersWie kommt IOBroker auf die Idee, einen ganzen Registerblock 1000-10010 abzufragen?
Immerhin kann ich Register 10000 auf "1" setzen und das Gerät schaltet sich daraufhin ein! Ganz auf dem Holzweg sind wir also nicht. -
ohne benutzerdefiniert?
Ja. Aber passt. Funktioniert erst mal.
nöö! was kommt jetzt mit dem richtigen Register und angehakter Checkbox Abfrage?
Die Mischung macht's. Der Support schreibt:
"unsere Geräte verwenden standardmäßig 16-Bit-Modbus-Register mit Big-Endian-Byte-Reihenfolge (MSB first).
Daher sollte der Wert als Unsigned 16-Bit Integer (Big-Endian) interpretiert werden. Da laut Registertabelle keine negativen Werte vorkommen, ist dies der passende Datentyp. Alternativ kann auch Signed 16-Bit (Big-Endian) funktionieren."Mit Unsigned 16-Bit (Big-Endian) (und "Abfrage"-Checkbox?) haut es tatsächlich hin, Juhu!
Es geht aber gleich wieder schief, wenn ich versuche, Register 10000 abzufragen:
modbus.8 2026-03-17 19:01:15.315 info Disconnected from slave modbus.8 2026-03-17 19:01:14.315 warn [DevID_1/holdingRegs] Block 10000-10010: {} modbus.8 2026-03-17 19:01:14.315 error Request timed out. modbus.8 2026-03-17 19:01:14.314 warn Error: undefined modbus.8 2026-03-17 19:01:09.524 error Error response: Data address of some or all the required entities are not allowed or do not exist in slave modbus.8 2026-03-17 19:01:09.524 error Error response for FCx3: Illegal Data Address modbus.8 2026-03-17 19:01:09.313 debug [DevID_1/holdingRegs] Poll address 10000 - 11 registersWie kommt IOBroker auf die Idee, einen ganzen Registerblock 1000-10010 abzufragen?
Immerhin kann ich Register 10000 auf "1" setzen und das Gerät schaltet sich daraufhin ein! Ganz auf dem Holzweg sind wir also nicht.@luas sagte in Remko Wärmepumpe ModBus-Anbindung:
Mit Unsigned 16-Bit (Big-Endian
das hätte ich jetzt auch empfohlen.
was passiert denn mit signed?
gibt es keine Register mit negativen Werten? -
ohne benutzerdefiniert?
Ja. Aber passt. Funktioniert erst mal.
nöö! was kommt jetzt mit dem richtigen Register und angehakter Checkbox Abfrage?
Die Mischung macht's. Der Support schreibt:
"unsere Geräte verwenden standardmäßig 16-Bit-Modbus-Register mit Big-Endian-Byte-Reihenfolge (MSB first).
Daher sollte der Wert als Unsigned 16-Bit Integer (Big-Endian) interpretiert werden. Da laut Registertabelle keine negativen Werte vorkommen, ist dies der passende Datentyp. Alternativ kann auch Signed 16-Bit (Big-Endian) funktionieren."Mit Unsigned 16-Bit (Big-Endian) (und "Abfrage"-Checkbox?) haut es tatsächlich hin, Juhu!
Es geht aber gleich wieder schief, wenn ich versuche, Register 10000 abzufragen:
modbus.8 2026-03-17 19:01:15.315 info Disconnected from slave modbus.8 2026-03-17 19:01:14.315 warn [DevID_1/holdingRegs] Block 10000-10010: {} modbus.8 2026-03-17 19:01:14.315 error Request timed out. modbus.8 2026-03-17 19:01:14.314 warn Error: undefined modbus.8 2026-03-17 19:01:09.524 error Error response: Data address of some or all the required entities are not allowed or do not exist in slave modbus.8 2026-03-17 19:01:09.524 error Error response for FCx3: Illegal Data Address modbus.8 2026-03-17 19:01:09.313 debug [DevID_1/holdingRegs] Poll address 10000 - 11 registersWie kommt IOBroker auf die Idee, einen ganzen Registerblock 1000-10010 abzufragen?
Immerhin kann ich Register 10000 auf "1" setzen und das Gerät schaltet sich daraufhin ein! Ganz auf dem Holzweg sind wir also nicht.@luas sagte in Remko Wärmepumpe ModBus-Anbindung:
DevID_1/holdingRegs] Poll address 10000 - 11 registers
gibt es diese 11 Register?
Möglicherweise kann dein Gerät nicht mit nicht vergebenen Adressen umgehen.
Stell mal die Anzahl gleichzeitig abgerufener Register runter (oder direkt auf 1)

-
gibt es keine Register mit negativen Werten?
Genau, so steht es in der Antwort vom Support.
gibt es diese 11 Register?
Eben nicht, der Support schrieb ja auch, dass das ungewöhnlich sei, aber so sei es nun mal.
Stell mal die Anzahl gleichzeitig abgerufener Register runter (oder direkt auf 1)
Wo finde ich das? Die maximale Leseanforderungslänge?
-
gibt es keine Register mit negativen Werten?
Genau, so steht es in der Antwort vom Support.
gibt es diese 11 Register?
Eben nicht, der Support schrieb ja auch, dass das ungewöhnlich sei, aber so sei es nun mal.
Stell mal die Anzahl gleichzeitig abgerufener Register runter (oder direkt auf 1)
Wo finde ich das? Die maximale Leseanforderungslänge?
-
Es klappt, es klappt!

Eine (vielleicht vorerst letzte) Frage: wenn ich richtig verstehe, sind die Register 11000, 11001, 11004 und 13000 binärkodiert.
General_status=3 würde also bedeuten: binär 00000011, also "thermo_on" und "alarm". "thermo_on" ist plausibel, "alarm" nicht, dann müsste ja 11001 oder 11004 ungleich null sein.Unabhängig davon: was ist der eleganteste Weg, diese einzelnen Bits herauszuführen? Ich glaube, ich habe das an anderer Stelle per JavaScript gemacht...