Modbusregister schreiben

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

TomW80
Beiträge: 110
Registriert: 7. Mai 2021 19:11
Answers: 0

Modbusregister schreiben

Beitrag von TomW80 »

Hallo,

ich möchte bestimmte Modbusregister beschreiben, doch schon beim ersten Register habe ich Probleme.
Der Wert des Items ändert sich wieder auf den alten Wert zurück, d.h. es wird nichts in das Register geschrieben.

So siehts aus:

things

Code: Alles auswählen

ridge modbus:tcp:HovalGWTCP [ host="192.168.x.xx", port=502, id=1 ] {

  
...

    Bridge poller inputRegisters3 [ start=1478, length=5, refresh=1000, type="holding" ] {

        Thing data holding1478 [ readStart="1478", readValueType="float32", writeStart="1478", writeValueType="float32", writeType="holding" ]    
        Thing data input1479 [ readStart="1479", readValueType="int16" ]  
        Thing data input1480 [ readStart="1480", readValueType="int16" ]  
        Thing data holding1481 [ readStart="1481", readValueType="int16", writeStart="1481", writeValueType="int16", writeMultipleEvenWithSingleRegisterOrCoil="false", writeType="holding" ]
        Thing data input1482 [ readStart="1482", readValueType="int16" ]  
    }
...

}

items

Code: Alles auswählen

Number:Temperature input1481Int16 "Heizung Normal Raumtemperatur Istwert [%.2f °C]"    {channel="modbus:data:HovalGWTCP:inputRegisters3:holding1481:number" [ profile="modbus:gainOffset", gain="0.1 °C", pre-gain-offset="0" ], unit="°C", stateDescription=""[pattern="%.1f °C"] }
sitemap

Code: Alles auswählen

Setpoint item=input1481Int16 icon="heating" minValue=10 maxValue=30 step=0.5
Über modpoll.exe kann ich so einen Wert schreiben. (Bei modpoll muss ich die Registeradresse um +1 erhöhen.)

Code: Alles auswählen

modpoll.exe -r 1482 -c 1 192.168.2.53 235
modpoll 3.15 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2024 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: MODBUS/TCP, FC6
Slave configuration...: address = 1, start reference = 1482, count = 1
Communication.........: 192.168.x.xx, port 502, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, holding register table

Written 1 reference.
Wo liegt nun mein Problem?

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Modbusregister schreiben

Beitrag von Tokamak »

An deiner Konfiguration kann ich nichts falsches erkennen.

Daher ein paar dumme Fragen: Du schickst ein Command und machst nicht nur ein Update?
Und: Ist das Register überhaupt schreibbar? Vielleicht ist dein Beispiel unglücklich gewählt, aber die Raum-Ist-Temperatur zu schreiben ergibt keinen Sinn.
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

TomW80
Beiträge: 110
Registriert: 7. Mai 2021 19:11
Answers: 0

Re: Modbusregister schreiben

Beitrag von TomW80 »

Tokamak hat geschrieben: 20. Nov 2024 09:19 Daher ein paar dumme Fragen: Du schickst ein Command und machst nicht nur ein Update?
Die Frage versteh ich leider nicht.
Tokamak hat geschrieben: 20. Nov 2024 09:19 Und: Ist das Register überhaupt schreibbar? Vielleicht ist dein Beispiel unglücklich gewählt, aber die Raum-Ist-Temperatur zu schreiben ergibt keinen Sinn.
Ja.
Screenshot 2024-11-20 092727.jpg
Gruß Tom
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Modbusregister schreiben

Beitrag von Tokamak »

Das mit dem Command und dem Update hat sich erledigt. Du willst den Wert über Setpoint ändern, das sendet Commands.

Das Item ist eigentlich die normale Soll-Raumtemperatur. Ein Ist-Wert, wie das von dir gewählte Label suggeriert, wird hingegen gemessen. Das hatte mich verwirrt.

Der Rest sieht in Ordnung aus.

Ich habe "gain" beim Modbus-Binding bisher nicht zum Schreiben genutzt. Lt. Doku soll es auch beim Schreiben funktionieren.
Im Logging siehst du keine Meldungen, wenn du Werte schreiben willst?

Zunächst würde ich es ohne gain testweise mit

Code: Alles auswählen

Number:Temperature input1481Int16_dezi "Heizung Normal Raumtemperatur [%d °dC]"   { channel="modbus:data:HovalGWTCP:inputRegisters3:holding1481:number" }
und

Code: Alles auswählen

Setpoint item=input1481Int16_dezi icon="heating" minValue=100 maxValue=300 step=5
probieren, ob das Setzen grundsätzlich funktioniert.

Wenn ja, könntest du das Item mal mit UoM-Boardmitteln so definieren:

Code: Alles auswählen

Number:Temperature input1481Int16 "Heizung Normal Raumtemperatur [%.1f °C]"   { unit="°dC", channel="modbus:data:HovalGWTCP:inputRegisters3:holding1481:number" }
da es Dezi-Celsius sind. Das mit dem d funktioniert im Prinzip. Ggf. muss es aber auch davor, also unit="d°C".
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Benutzeravatar
udo1toni
Beiträge: 15241
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Modbusregister schreiben

Beitrag von udo1toni »

Ich selbst nutze kein Modbus, deshalb frage ich mich, ob das Profile auch zur Verfügung steht. Da Du per Text konfiguriert hast, ist das nicht sicher der Fall.
Schau bitte mal, ob beim Verlinken über die Main UI das Profile zur Auswahl steht (suche in der Main UI in den Things den betreffenden Channel aus, klicke auf link Item, dann auf Create new Item, setze die Dimension auf temperature, dann sollte weiter unten in den Profiles auch modbus:gainOffset gelistet werden. Ist das nicht der Fall, müsste das Profile erst noch installiert werden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Modbusregister schreiben

Beitrag von Tokamak »

Wenn aus den 235 (aus dem modpoll-Beispiel) 23.5°C im Item wurden, wovon ich ausgehe, funktioniert das Profile.

Wie gesagt, ich nutze es auch, ohne es installiert zu haben, allerdings nur lesend
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Benutzeravatar
udo1toni
Beiträge: 15241
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Modbusregister schreiben

Beitrag von udo1toni »

Gut, dann wird es vermutlich integraler Bestandteil des Modbus Addons sein.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

TomW80
Beiträge: 110
Registriert: 7. Mai 2021 19:11
Answers: 0

Re: Modbusregister schreiben

Beitrag von TomW80 »

Tokamak hat geschrieben: 20. Nov 2024 13:01 Ich habe "gain" beim Modbus-Binding bisher nicht zum Schreiben genutzt. Lt. Doku soll es auch beim Schreiben funktionieren.
Im Logging siehst du keine Meldungen, wenn du Werte schreiben willst?

Zunächst würde ich es ohne gain testweise mit
ohne das Profile funktioniert das schreiben, allerdings muss die unit und stateDescription mit angegeben sein.

Code: Alles auswählen

Number:Temperature input1481Int16_dezi "Heizung Normal Raumtemperatur [%.1f °C]"   { channel="modbus:data:HovalGWTCP:inputRegisters3:holding1481:number" , unit="d°C", stateDescription=""[pattern="%.1f °C"]}
ABER, wenn ich den Setpoint so verwende:

Code: Alles auswählen

Setpoint item=input1481Int16_dezi icon="heating" minValue=100 maxValue=300 step=5
wird statt +0.5 °C der Wert auf 10,0°C gesetzt.
2024-11-20 23:41:34.074 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'input1481Int16_dezi' received command 100 °C
2024-11-20 23:41:34.076 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'input1481Int16_dezi' predicted to become 100 °C
2024-11-20 23:41:34.077 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 1000 d℃
2024-11-20 23:41:34.079 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'input1481Int16_dezi' changed from 230 d℃ to 1000 d℃
2024-11-20 23:41:36.336 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 230 d℃
2024-11-20 23:41:36.337 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'input1481Int16_dezi' changed from 1000 d℃ to 230 d℃
2024-11-20 23:41:40.787 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 100 d℃
2024-11-20 23:41:40.788 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'input1481Int16_dezi' changed from 230 d℃ to 100 d℃
2024-11-20 23:41:44.390 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 100 d℃
2024-11-20 23:41:47.824 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 100 d℃
2024-11-20 23:41:51.408 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 100 d℃
wenn ich den Setpoint so verwende:

Code: Alles auswählen

Setpoint item=input1481Int16_dezi icon="heating" minValue=10 maxValue=30 step=0.5
wird statt +0.5 °C der Wert auf 2,3°C gesetzt.
2024-11-20 23:24:57.892 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 230 d℃
2024-11-20 23:25:01.406 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 230 d℃
2024-11-20 23:25:05.001 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 230 d℃
2024-11-20 23:25:08.266 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'input1481Int16_dezi' received command 23.5 °C
2024-11-20 23:25:08.268 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'input1481Int16_dezi' predicted to become 23.5 °C
2024-11-20 23:25:08.271 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 235 d℃
2024-11-20 23:25:08.271 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'input1481Int16_dezi' changed from 230 d℃ to 235 d℃
2024-11-20 23:25:08.454 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 230 d℃
2024-11-20 23:25:08.455 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'input1481Int16_dezi' changed from 235 d℃ to 230 d℃
2024-11-20 23:25:12.988 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 23 d℃
2024-11-20 23:25:12.989 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'input1481Int16_dezi' changed from 230 d℃ to 23 d℃
2024-11-20 23:25:16.522 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 23 d℃
2024-11-20 23:25:20.027 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'input1481Int16_dezi' updated to 23 d℃
Noch eine andere Idee?
udo1toni hat geschrieben: 20. Nov 2024 13:09 Ich selbst nutze kein Modbus, deshalb frage ich mich, ob das Profile auch zur Verfügung steht. Da Du per Text konfiguriert hast, ist das nicht sicher der Fall.
Schau bitte mal, ob beim Verlinken über die Main UI das Profile zur Auswahl steht (suche in der Main UI in den Things den betreffenden Channel aus, klicke auf link Item, dann auf Create new Item, setze die Dimension auf temperature, dann sollte weiter unten in den Profiles auch modbus:gainOffset gelistet werden. Ist das nicht der Fall, müsste das Profile erst noch installiert werden.
Das Profil steht in der MainUI zur Verfügung. Ich hab das so aus der Modbus-Doku

Dort steht eigentlich auch, dass es in die umgekehrte Richtung, also das schreiben auch funktionieren soll.
The profile also works the other way round, scaling the commands sent to the item to bare-numbers suitable for Modbus.
Ist das evtl ein Fehler vom Modbus-Binding?

TomW80
Beiträge: 110
Registriert: 7. Mai 2021 19:11
Answers: 0

Re: Modbusregister schreiben

Beitrag von TomW80 »

Wie ich gerade gelesen habe funktioniert das seit einer Änderung am openhab core nicht mehr. :(

https://community.openhab.org/t/modbus- ... /110814/41

https://community.openhab.org/t/modbus- ... /149836/23

Wenn man es ohne QuantityType und ohne °C bei gain schreibt funktioniert es in beide Richtungen.

Code: Alles auswählen

Number input1481Int16 "Heizung Normal Raumtemperatur Istwert [%.2f °C]"    {channel="modbus:data:HovalGWTCP:inputRegisters3:holding1481:number" [ profile="modbus:gainOffset", gain="0.1", pre-gain-offset="0" ], unit="°C", stateDescription=""[pattern="%.1f °C"] }

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Modbusregister schreiben

Beitrag von Tokamak »

Gut, dass du es gefunden hast.

Verstehe ich es richtig, dass man mit gainOffset QuantityTypes doch nicht schreiben kann? Das Lesen von QuantityTypes funktioniert bei mir ganz prächtig.
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Antworten