Modbusregister schreiben
- udo1toni
- Beiträge: 15241
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Modbusregister schreiben
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...
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
-
- Beiträge: 110
- Registriert: 7. Mai 2021 19:11
Re: Modbusregister schreiben
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.
Wenn das so einfach wäre.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...

Hast du eine Idee dazu?
- udo1toni
- Beiträge: 15241
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Modbusregister schreiben
Das sollte wie bei anderen Addons auch gehen. Z.B. so:
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
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:
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.
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%"]}
Code: Alles auswählen
toItemScript="| Float::parseFloat(input)/10"
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\""
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
-
- Beiträge: 110
- Registriert: 7. Mai 2021 19:11
Re: Modbusregister schreiben
Danke für Deine Erkläung.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äreCode: Alles auswählen
toItemScript="| Float::parseFloat(input)/10"
Es funktioniert.

Allerdings muss ich bei pattern die Unit angeben, sonst erscheint nichts.
Code: Alles auswählen
[pattern="%.1f °C"]}
- udo1toni
- Beiträge: 15241
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Modbusregister schreiben
Du hast den unit-Parameter gesetzt? Und pattern="%.1f %unit%" funktioniert nicht? Strange...
Andererseits ist °C an der Stelle ja auch ok...
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
-
- Beiträge: 110
- Registriert: 7. Mai 2021 19:11
Re: Modbusregister schreiben
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"]}
- udo1toni
- Beiträge: 15241
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Modbusregister schreiben
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).
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
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Modbusregister schreiben
Nur am Rande:
pattern ist: [pattern="%.1f °C"]
Formatter ist: [%.2f °C]
pattern ist: [pattern="%.1f °C"]
Formatter ist: [%.2f °C]
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 110
- Registriert: 7. Mai 2021 19:11
Re: Modbusregister schreiben
Ich nutze openhab 4.2.2udo1toni 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).
Das Einheitensystem war nicht gesetzt, hab es nun auf Metrisch gesetzt, funktioniert aber trotzdem nicht.
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Modbusregister schreiben
Hast du OH neu gestartet ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian