FHEM > Perl für FHEM-User

Fragen zu json2reading

(1/1)

TomLee:
Hallo,

keine Ahnung welcher Forumbereich der richtige ist, ich kann auch verschieben wenn gewollt.

Beim mitlesen hier beschäftigt mich die Frage ob es mit json2reading möglich ist aus diesem JSON


--- Code: ---{"area": 1, "zone": 51, "type": 54, "type_f": "{D_TYPE_54}", "name": "Innen", "tag": "", "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", "tamper": "", "tamper_ok": "1", "bypass": 0, "rssi": "{WEB_MSG_STRONG} 6", "resp_mode": [0,0,0,0,0,0], "ammeter": "0", "ver": "", "bypass_tamper": 0, "sid": "ZS:a47a01", "su": 1, "alarm_status": "", "status_ex": "0", "hue": "-1", "sat": "-1", "ctemp": "-1", "hue_cmode": "-1", "hue_cie_x": "-1", "hue_cie_y": "-1", "hue_color_cap": "0", "nuki": "-1", "shutter_turn": 0,"status": "{WEB_MSG_TS_DEGREE} 21.36 {WEB_MSG_RH_HUMIDITY} 37"}
--- Ende Code ---

den rssi Wert ohne dem String in geschweiften Klammern oder noch verzweigter die Temperatur.-/Feuchtigkeitswerte aus status ohne den Stings in Klammern in einzelnen/separaten Readings zu erhalten ?

Das was ich bisher verstanden habe:


--- Code: ---{my $json= '{"area": 1, "zone": 51, "type": 54, "type_f": "{D_TYPE_54}", "name": "Innen", "tag": "", "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", "tamper": "", "tamper_ok": "1", "bypass": 0, "rssi": "{WEB_MSG_STRONG} 6", "resp_mode": [0,0,0,0,0,0], "ammeter": "0", "ver": "", "bypass_tamper": 0, "sid": "ZS:a47a01", "su": 1, "alarm_status": "", "status_ex": "0", "hue": "-1", "sat": "-1", "ctemp": "-1", "hue_cmode": "-1", "hue_cie_x": "-1", "hue_cie_y": "-1", "hue_color_cap": "0", "nuki": "-1", "shutter_turn": 0,"status": "{WEB_MSG_TS_DEGREE} 21.36 {WEB_MSG_RH_HUMIDITY} 37"}';; json2reading($defs{Device1},$json,"",undef,"","battery_ok|area|rssi|^status\$");;'done'}
--- Ende Code ---

schreibt mir diese Readings:


--- Code: ---setstate Device1 2021-12-03 12:42:33 area 1
setstate Device1 2021-12-03 12:42:33 battery_ok 1
setstate Device1 2021-12-03 12:42:33 rssi {WEB_MSG_STRONG} 6
setstate Device1 2021-12-03 12:42:33 status {WEB_MSG_TS_DEGREE} 21.36 {WEB_MSG_RH_HUMIDITY} 37
--- Ende Code ---

Oder ist j2r schlicht für solche Fälle nicht gedacht ?

Gruß

Thomas

betateilchen:

--- Zitat von: TomLee am 03 Dezember 2021, 12:52:44 ---Oder ist j2r schlicht für solche Fälle nicht gedacht ?

--- Ende Zitat ---

Dazu muss man verstehen, wie JSON aufgebaut ist.
Einfach erklärt: Jedes einzelne JSON-Element besteht aus seinem Wertenamen und dem zugehörigen Wert, getrennt durch einen Doppelpunkt


--- Code: ---"rssi": "{WEB_MSG_STRONG} 6",
--- Ende Code ---

json2reading zerlegt dieses Element also in seine zwei Bestandteile

Name: rssi
Wert: {WEB_MSG_STRONG} 6

und arbeitet somit 100% korrekt.

Jeder andere JSON Parser würde exakt das gleiche Ergebnis liefern.

TomLee:
Soweit ist mir das bisher auch klar, mittlerweile, trotzdem Danke.

Ich hab ja nur mitgelesen und kurz gegrübelt, vlt. wollt ich im Hinterkopf (zu der Zeit noch unbewusst) nur ausschliessen das es durch welchen Parameter auch immer und wie, doch vlt. möglich ist nur numerische Werte zu "parsen".

edit:
trotzdem bleibt dann das Problem hiermit

--- Code: ---{WEB_MSG_TS_DEGREE} 21.36 {WEB_MSG_RH_HUMIDITY} 37
--- Ende Code ---
(spar dir den Kommentar dazu)

betateilchen:

--- Zitat von: TomLee am 03 Dezember 2021, 20:00:31 ---(spar dir den Kommentar dazu)

--- Ende Zitat ---

gehts noch?  :o

TomLee:
Das war in keinsterweise böswillig gemeint, für mich nur Spass am Rande.

Mir war es wichtig hervorzuheben das ich verstanden habe das dieses Problem weiterhin besteht, auch wenn ein "filtern" von numerischen Werten möglich wäre, du das auch so siehst und mir dann vorwerfen könntest das ich diesen Fall übersehen hätte.

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln