(gelöst) Wie bekomme ich das Device aus dem JSON

Begonnen von Medel, 22 September 2023, 22:12:37

Vorheriges Thema - Nächstes Thema

CoolTux

Wird denn Dein Hash überhaupt gefüllt?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Medel

Habe gerade die Lösung entdeckt.
die ersten zwei Keys müssen in "" eingeschlossen werden.
print 'DeviceId: ' . $decode->{"ZbReceived"}->{"0xFF41"}->{Device} . "\n";
print 'CurrentPositionLiftPercentage: ' . $decode->{"ZbReceived"}->{"0xFF41"}->{CurrentPositionLiftPercentage} . "\n";

betateilchen

Zitat von: rudolfkoenig am 23 September 2023, 13:46:34Man koennte vmtl. zielgerichteter helfen, wenn man wuesste, was die _eigentliche_ Aufgabe ist.

Auf dem großen Sofa hier ist noch Platz, setz Dich gerne dazu.
Popcorn ist genug da...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Medel

Nur falls es jemand braucht wenn man auch das Device aus dem Event übernehmen will ging es bei mir so

Event:
{"ZbReceived":{"0xFF41":{"Device":"0xFF41","CurrentPositionLiftPercentage":0,"Endpoint":1,"LinkQuality":139}}}
Auswertung:
print 'CurrentPositionLiftPercentage: ' . $decode->{"ZbReceived"}->{(keys%{$decode->{ZbReceived}})[0]}->{CurrentPositionLiftPercentage} . "\n";

Medel

Zitattele/tasmota2zigbee/FF41/SENSOR:.* { $EVENT =~ m{Device...(0x[0-9a-fA-F]{4})\"} ? { bla=>$1 } : return }
tele/tasmota2zigbee/FF41/SENSOR:.* { $EVENT =~ m{CurrentPositionLiftPercentage..(\d+)} ? { CurrentPositionLiftPercentage=>$1 } : return }
tele/tasmota2zigbee/FF41/SENSOR:.* { $EVENT =~ m{Endpoint..(\d+)} ? { Endpoint=>$1 } : return }
tele/tasmota2zigbee/FF41/SENSOR:.* { $EVENT =~ m{LinkQuality..(\d+)} ? { LinkQuality=>$1 } : return }

Danke wäre die kürzere Lösung als Alternative zu json2nameValue siehe: https://forum.fhem.de/index.php?topic=135067.0

TomLee

In #8 sah es für mich so aus das du das gleiche auch hier vor hattest.
Was machst du denn jetzt mit dem zurückgegebenen Wert ?

Medel

Wollte nach dem das mit der jsonmap, Link weiter oben, nicht funktioniert hat, eine Perl Funktion schreiben der ich dann nur den Event übergeben hätte und die dann die ensprechenden Readings in das Device eingetragen hätte. Aber die Variante von dir gefiel mir jetzt doch besser so dass ich in einem meiner zwei Test Devices diese eingetragen habe. Habe aber die andere Lösung noch nicht ganz verworfen. Wären weniger Einträge pro Device. Werde sie auf jeden Fall abspeichern falls ich das noch mal brauche, habe schließlich einige Stunden danach gesucht.

Nochmals Danke für die Lösung.