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

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

Vorheriges Thema - Nächstes Thema

Medel

Hallo

hier mein JSON String:
{"ZbReceived":{"0xFF41":{"Device":"0xFF41","CurrentPositionLiftPercentage":0,"Endpoint":1,"LinkQuality":139}}}
Wie bekomme ich die 0xFF41 als Rückgabewert?
Mich würden die Lösungen für beide Einträge interessieren also den Key und den Device Value

frober

Doppelte Post werden nicht gerne gesehen.
Verlinke sie wenigstens gegenseitig.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Medel

Das eine ist das Thema mit der Jsonmap hier geht es um die grundsätzliche Frage wie das geht, habe gestern 2 Stunden versucht es hinzubekommen und nicht geschafft, weiß noch nicht wo das Problem liegt

frober

Du hast aber bei JSONMAP schon nach einer Alternative gefragt.

Wenn dir hier jemand JSONMAP vorschlägt...

Normalerweise ein Problem ein Thread, außer jemand bittet dich das separat zu behandeln, dann ist aber der "Verweis" im alten Thema vorhanden.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Medel

#4
In Jsonmap wollte ich keine Alternative sondern wissen was ich falsch mache, sollte doch so gehen wie ich es gemacht habe. Oder?

Hier der Post um den es geht:
https://forum.fhem.de/index.php?topic=135067.0

frober

Mit JSONMAP sollte es funktionieren. Bei mir funktioniert es mir mehreren Zeilen, wie geschrieben.

...du merkst, dass wir gerade parallel schreiben...

https://forum.fhem.de/index.php?topic=135067
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Medel

Wir schreiben parallel weil wir gerade um die jsonmap diskutieren, hier sollte es aber darum gehen wie ich die Device ID heraus bekomme. Also anderes Thema.

rudolfkoenig

ZitatWie bekomme ich die 0xFF41 als Rückgabewert?
Wie ist das zu verstehen?

Medel

#8
Wollte ggf das json2nameValue ersetzen durch ein Perl Programm, scheitere aber schon den Readinglist Eintrag dafür hinzubekommen.

so geht es nicht:
  tele/tasmota2zigbee/FF41/SENSOR:.* {my $decode=decode_json($EVENT); $decode->{ZbReceived}{$decode->{ZbReceived}->{Device} }

CoolTux

Wenn Du die Key Values als Reading setzen willst musst Du auch die Funktion dafür nehmen.

https://wiki.fhem.de/wiki/DevelopmentModuleAPI#Readings_/_Events
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

Klingt ja recht kompliziert.

Da ist es wahrscheinlich einfacher den Event an ein Perl Utility Programm zu übergeben und dort dann über setreading die Werte zu setzen. Aber auch bei Perl habe ich das Problem habe dann wie ich die einzelnen key - value Paare bekommen. Habe schon einige Stunden mit Google verbracht aber noch kein Ergebnis. Auch meine Versuche ein externes Perl Programm zu schreiben um aus einem vorgegeben Event die Werte herauszubekommen hatten bisher kein Erfolg, außer der Erste Key Eintrag "ZbReceived". Den brauche ich aber nicht. Ich bräuchte mal eine Hilfe wie ich gezielt einzelnen Werte bekomme. Alle Werte gehen mit einer Schleife dafür gibt es viele Beispiele, aber die Verschachtelten scheinen einzeln ein bisschen trickreich oder zu einfach.

rudolfkoenig

ZitatKlingt ja recht kompliziert.
Man koennte vmtl. zielgerichteter helfen, wenn man wuesste, was die _eigentliche_ Aufgabe ist.

CoolTux

Zitat von: Medel am 23 September 2023, 13:27:39Klingt ja recht kompliziert.

Da ist es wahrscheinlich einfacher den Event an ein Perl Utility Programm zu übergeben und dort dann über setreading die Werte zu setzen. Aber auch bei Perl habe ich das Problem habe dann wie ich die einzelnen key - value Paare bekommen. Habe schon einige Stunden mit Google verbracht aber noch kein Ergebnis. Auch meine Versuche ein externes Perl Programm zu schreiben um aus einem vorgegeben Event die Werte herauszubekommen hatten bisher kein Erfolg, außer der Erste Key Eintrag "ZbReceived". Den brauche ich aber nicht. Ich bräuchte mal eine Hilfe wie ich gezielt einzelnen Werte bekomme. Alle Werte gehen mit einer Schleife dafür gibt es viele Beispiele, aber die Verschachtelten scheinen einzeln ein bisschen trickreich oder zu einfach.


Du musst den Hash ausgeben. Machst Du das. Am einfachsten mit print.
print 'DeviceId: ' . $decode->{ZbReceived}->{0xFF41}->{Device} . "\n";
print 'CurrentPositionLiftPercentage: ' . $decode->{ZbReceived}->{0xFF41}->{CurrentPositionLiftPercentage} . "\n";
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

TomLee

#13
ZitatIch bräuchte mal eine Hilfe wie ich gezielt einzelnen Werte bekomme.

tele/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 }

Medel

Zitatprint 'DeviceId: ' . $decode->{ZbReceived}->{0xFF41}->{Device} . "\n";
print 'CurrentPositionLiftPercentage: ' . $decode->{ZbReceived}->{0xFF41}->{CurrentPositionLiftPercentage} . "\n";

Das hatte ich auch schon so ähnlich - geht nicht:

Use of uninitialized value in concatenation (.) or string at ./Perltest.pl line 10.
DeviceId:
Use of uninitialized value in concatenation (.) or string at ./Perltest.pl line 11.
CurrentPositionLiftPercentage: