Modbusregister schreiben

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Modbusregister schreiben

Beitrag von udo1toni »

Ich denke, "momentan" wäre die richtige Formulierung, weil es schon mal funktioniert hat. Sprich, da muss der Entwickler ran und reparieren.

Ach so... Und man könnte die eigentliche Funktion (Division um 10 und ergänzen der Einheit in der einen Richtung, Multiplikation um 10 nach Strippen der Einheit in der anderen Richtung) auch mittels Script Transformation über das Profile erledigen, auch inline oder mit Parameterübergabe, z.B. um auch noch ein Offset angeben zu können. Ist halt nicht so elegant...
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 »

udo1toni hat geschrieben: 21. Nov 2024 09:40 Ich denke, "momentan" wäre die richtige Formulierung, weil es schon mal funktioniert hat. Sprich, da muss der Entwickler ran und reparieren.
Der Entwickler warte wohl noch auf Rückmeldung der Core Maintainer, daher tut sich da nichts. :(
https://community.openhab.org/t/modbus- ... 3?u=tomw80
Ich weiß nicht wie man das antriggern könnte.
udo1toni hat geschrieben: 21. Nov 2024 09:40 Ach so... Und man könnte die eigentliche Funktion (Division um 10 und ergänzen der Einheit in der einen Richtung, Multiplikation um 10 nach Strippen der Einheit in der anderen Richtung) auch mittels Script Transformation über das Profile erledigen, auch inline oder mit Parameterübergabe, z.B. um auch noch ein Offset angeben zu können. Ist halt nicht so elegant...
Wenn das so einfach wäre. :roll:
Hast du eine Idee dazu?

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

Re: Modbusregister schreiben

Beitrag von udo1toni »

Das sollte wie bei anderen Addons auch gehen. Z.B. so:

Code: Alles auswählen

Number:Temperature tempTest "Temperatur" {channel="mqtt:topic:mosquitto:test:temp"[profile="transform:DSL",toItemScript="| (Float::parseFloat(input)/10).toString + \" °C\"",commandFromItemScript="| (Float::parseFloat(input)*10).intValue"],unit="°C",stateDescription=""[pattern="%.1f %unit%"]} 
Streng genommen braucht es dabei das Anhängsel über den String gar nicht (....toString + \" °C\"), aber Du könntest an dieser Stelle z.B. auch einen Temperaturwert in °F annehmen und openHAB würde das direkt in °C umrechnen. Die einfache Variante wäre

Code: Alles auswählen

toItemScript="| Float::parseFloat(input)/10"
input ist der übergebene Wert in Form eines Strings. Deshalb muss dieser Wert zunächst geparsed werden. Da der ins Item geschriebene Wert vom Typ Float sein muss, ist hier Float::parseFloat() die richtige Funktion. Der Ausgangswert des Scripts ist - ebenso wie der Eingangswert - immer vom Typ String. openHAB parsed den Ausgangswert automatisch mit einer passenden Funktion unter Berücksichtigung von QuantityType.
In der Gegenrichtung gibt es zwei unterschiedliche Aufrufe, commandFromItemScript sollte der richtige sein. Wieder muss geparsed werden, .intValue schneidet anschließend nach der Multiplikation alle Nachkommastellen ab - schließlich wollen wir nur Ganzzahlen ans Addon weitergeben.

Ich habe die Scripte mit mqtt getestet (dort kann man allerdings direkt mit QuantityType arbeiten, der Umweg wäre also unnötig)

Es gibt für die Empfangsrichtung noch eine "fiese" Abkürzung:

Code: Alles auswählen

toItemScript="| input  + \" d°C\""
input ist per Definition bereits ein String, es wird lediglich die korrekte Einheit (Dezigrad Celsius) angehängt und den Rest erledigt die UoM Implementation. In Senderichtung funktioniert das hier leider nicht.

Die DSL ist bis zum heutigen Tag immer mit an Bord, weshalb das Beispiel auf jeden Fall funktioniert. Wahlweise kannst Du aber auch jede andere installierte Scripting Engine verwenden, z.B. auch JavaScript, Ruby oder Groovy.
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 »

udo1toni hat geschrieben: 21. Nov 2024 14:40 Das sollte wie bei anderen Addons auch gehen. Z.B. so:

Code: Alles auswählen

Number:Temperature tempTest "Temperatur" {channel="mqtt:topic:mosquitto:test:temp"[profile="transform:DSL",toItemScript="| (Float::parseFloat(input)/10).toString + \" °C\"",commandFromItemScript="| (Float::parseFloat(input)*10).intValue"],unit="°C",stateDescription=""[pattern="%.1f %unit%"]} 
...
Die einfache Variante wäre

Code: Alles auswählen

toItemScript="| Float::parseFloat(input)/10"
Danke für Deine Erkläung.
Es funktioniert. :D
Allerdings muss ich bei pattern die Unit angeben, sonst erscheint nichts.

Code: Alles auswählen

[pattern="%.1f °C"]}

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

Re: Modbusregister schreiben

Beitrag von udo1toni »

Du hast den unit-Parameter gesetzt? Und pattern="%.1f %unit%" funktioniert nicht? Strange...
Andererseits ist °C an der Stelle ja auch ok...
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 »

Ja, so siehts aktuell aus:

Code: Alles auswählen

Number input1481Int16 "Heizung Normal Raumtemperatur Istwert [%.2f °C]"    {channel="modbus:data:HovalGWTCP:inputRegisters3:holding1481:number" [profile="transform:DSL",toItemScript="| Float::parseFloat(input)/10",commandFromItemScript="| (Float::parseFloat(input)*10).intValue"],unit="°C",stateDescription=""[pattern="%.1f °C"]} 

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

Re: Modbusregister schreiben

Beitrag von udo1toni »

Welche Version von openHAB nutzt Du?
Es ist zwar eher unwahrscheinlich, dass es an der exakten Version liegt, aber mein Testsystem läuft mit OH4.3-M4, und da funktioniert %unit% im Pattern - und das sollte es auch... openHAB ersetzt %unit% automatisch mit der gewählten default Einheit für den gelieferten QuantityType, hier also °C, weil das die Si Einheit für Number:Temperature ist (und openHAB sollte auf Si eingestellt sein - Einstellungen-Regionale Einstellungen-Einheitensystem-Metrisch).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Modbusregister schreiben

Beitrag von peter-pan »

Nur am Rande:
pattern ist: [pattern="%.1f °C"]
Formatter ist: [%.2f °C]
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Modbusregister schreiben

Beitrag von TomW80 »

udo1toni hat geschrieben: 22. Nov 2024 09:41 Welche Version von openHAB nutzt Du?
Es ist zwar eher unwahrscheinlich, dass es an der exakten Version liegt, aber mein Testsystem läuft mit OH4.3-M4, und da funktioniert %unit% im Pattern - und das sollte es auch... openHAB ersetzt %unit% automatisch mit der gewählten default Einheit für den gelieferten QuantityType, hier also °C, weil das die Si Einheit für Number:Temperature ist (und openHAB sollte auf Si eingestellt sein - Einstellungen-Regionale Einstellungen-Einheitensystem-Metrisch).
Ich nutze openhab 4.2.2
Das Einheitensystem war nicht gesetzt, hab es nun auf Metrisch gesetzt, funktioniert aber trotzdem nicht.

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Modbusregister schreiben

Beitrag von peter-pan »

peter-pan hat geschrieben: 22. Nov 2024 12:03 Das Einheitensystem war nicht gesetzt, hab es nun auf Metrisch gesetzt, funktioniert aber trotzdem nicht.
Hast du OH neu gestartet ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Antworten