Transformation von MQTT Strings in Number

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Transformation von MQTT Strings in Number

Beitrag von udo1toni »

Das ist ja noch nicht mal auf meinem Mist gewachsen. Ich habe lediglich verifiziert, dass die gewünschte Konfiguration (bei korrekter Semantik) sehr wohl wie gewünscht funktioniert.
Bis auf das Intersection Symbol steht eigentlich alles schon im ersten Posting, und Harka hatte bereits auf das falsche Symbol hingewiesen...
Alles nicht meins :)
openHAB5.1.2 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.5 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte

Boris
Beiträge: 20
Registriert: 19. Okt 2024 11:07
Answers: 0

Re: Transformation von MQTT Strings in Number

Beitrag von Boris »

Habe Udos Variante mal 1:1 kopiert (Topic natürlich angepasst) und es kommt immer noch eine NULL zurück. Ich verzweifel langsam.
Habe folgendes gecheckt:
  • jsonpath und/oder map Transformation nicht installiert
JSONPATH transformation 5.0.0
MAP transformation 5.0.0
  • Datei zigbeeBattery.map in falschem Ordner oder unter falschem Namen angelegt ($OPENHAB_CONF/transform/, Groß/Kleinschreibung beachten!)
Ist korrekt. Wird auch in OH UI angezeigt.
  • Falscher Aufbau der map-Datei (z.B. Leerzeichen zu Beginn der Zeile - links vom Gleichheitszeichen muss der exakte String angegeben sein)
low=20
medium=60
high=100
-=0
  • Falsches Verknüpfungszeichen. Das ∩ gibt es in der Windows Zeichentabelle unter dem Namen "Durchschnitt" (Übersetzungsfehler in Windows, im englischen heißt es korrekt "Intersection", also "Schnittmenge"). Am einfachsten kopiert man das Symbol aus dem Hilfstext in der WebUI (Channel -> show advanced -> incoming value transformations -> Hilfetext, letztes Zeichen
Hatte das ja jetzt aus dem Text hier raus kopiert.
  • Leerzeichen um das Intersection Symbol sind meines Wissens nicht gestattet
OK, ist aber jetzt auch keins mehr... auch wenn schlecht lesbar.

Kann es an der älteren Version liegen? Habe Udos Tipp umgesetzt, und die Signatur angepasst.
openHAB4.2.2 stable in einem Debian-Container 4 Kerne, 4 GByte RAM
Hostsystem Proxmox VE 8.1.3

Harka
Beiträge: 585
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Transformation von MQTT Strings in Number

Beitrag von Harka »

Moin,
OH 4.2 und Transformationen auf 5.0 kommt mir zumindest seltsam vor :?:
Wenn es nur um die Anzeige geht, habe ich noch einen anderen Lösungsansatz - die stateDescription. Hier als Beispiel im DSL-Format wie ich das bei meinem Präsenzmelder getestet habe.

Code: Alles auswählen

stateDescription=" " [options="none=0,small=1,large=2,static=4"] }

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

Re: Transformation von MQTT Strings in Number

Beitrag von udo1toni »

Gerade wenn die Major Version nicht übereinstimmt, sollte man stutzig werden.

Mein Tipp wäre ein Update, aber: openHAB5 -> 64 Bit only, falls Dein System noch auf 32 Bit läuft, kannst Du nur neu installieren. Die Konfiguration kannst Du natürlich vorher sichern und anschließend wieder einspielen. stable ist die 5.1.2.
Man sollte grundsätzlich vermeiden, Addons mit einer von openHAB Core abweichenden Major Version zu installieren.
Gewöhnlich sollte openHAB die "richtige" Version installieren, Ich könnte mir vorstellen, dass Du mittels apt openhab-addons upgedatet hast, openhab selbst aber nicht.

Wie oben erwähnt, funktioniert die Konfiguration bei mir einwandfrei, auch unter openHAB4.2.2. Es spricht also viel dafür, dass tatsächlich die Versionsdifferenz ursächlich ist.

Ach so...
Du könntest auch zunächst mittels

Code: Alles auswählen

sudo systemctl stop openhab.service
sudo openhab-cli clean-cache
sudo systemctl start openhab.service
versuchen, ob nach dem Restart die richtige Version installiert wird.
openHAB5.1.2 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.5 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte

Harka
Beiträge: 585
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Transformation von MQTT Strings in Number

Beitrag von Harka »

Falls Du die "Reperatur" so auf die Schnelle nicht machen willst/kannst bietet Dir openHAB noch andere Lösungswege. Die Transformation kann auch per Script erfolgen. Mit Javascript (Add-on Store/Automation/JavaScript Scripting) ginge das hiermit:

Code: Alles auswählen

(function(data) {
  var iFinder = ['low', 'medium', 'high'].indexOf(data) + 1;
  return ([0, 20, 60, 100][(iFinder)]);
})(input)
Das ganze könnte dann so aussehen

Code: Alles auswählen

transformationPattern="JSONPATH:$.battery_state∩JS(zigbeeBattery.js)"

Boris
Beiträge: 20
Registriert: 19. Okt 2024 11:07
Answers: 0

Re: Transformation von MQTT Strings in Number

Beitrag von Boris »

So, nach einigen Tagen Pause habe ich nochmal ein bisschen rumgespielt. Ich habe jetzt keine Ahnung woran es wirklich gelegen hat, aber die Version von Udo funktioniert jetzt einwandfrei. Ich glaube ich habe anfangs um das intersection Zeichen Leerzeichen gemacht, um den Quelltext lesbarer zu gestalten. Nach dieser Korrektur hat es möglicherweise noch an Paralleländerungen gelegen, dass es nicht gleich funktioniert hat.
Wie auch immer, das Thema ist gelöst.
BTW.: Ich verstehe auch nicht wirklich, warum ich auf einmal die 5.0.0 AddOns habe. Selbst nach expliziter Installation der Version 4.2.2 in der Konsole, wird mir im UI immer noch 5.0.0 angezeigt.
Welche Konfigurationsdateien muss ich denn retten, wenn ich auf OH5 gehen will und nichts neu machen möchte?
Vielen Dank für die konstruktive Hilfe euch allen.
openHAB4.2.2 stable in einem Debian-Container 4 Kerne, 4 GByte RAM
Hostsystem Proxmox VE 8.1.3

Antworten