Fragen zu json2reading

Begonnen von TomLee, 03 Dezember 2021, 12:52:44

Vorheriges Thema - Nächstes Thema

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

{"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"}

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:

{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'}

schreibt mir diese Readings:

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


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 ?

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

"rssi": "{WEB_MSG_STRONG} 6",

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

#2
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
{WEB_MSG_TS_DEGREE} 21.36 {WEB_MSG_RH_HUMIDITY} 37
(spar dir den Kommentar dazu)

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

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.

TomLee

#5
Hallo Rudolf oder jeder andere der weiter helfen kann,

mit hashKeyRename hab ich mich ehrlich gesagt bisher nicht beschäftigt, deine Antworten dazu bisher einfach nur so hingenommen.

Hier der Fall hat mich jetzt gepackt und ich will jetzt wissen wie es geht.

Was mach ich hier jetzt nicht richtig, was hab noch nicht verstanden:

defmod Demo at +*01:00 {HttpUtils_NonblockingGet({ url=>"https://mymuell.jumomind.com/webservice.php?idx=termins&city_id=66005&area_id=2734&ws=3",callback=>sub($$$){json2reading($defs{Demo},$_[2],undef,undef,'hashKeyRename($ret, "^([0-9]+)__...._([0-9]+)_cal_garbage_type:(.*)","^([0-9]+)__...._([0-9]+)_cal_date_normal")','cal_garbage_type|cal_date_normal')}})}

edit:

Wer das nachvollziehen möchte der macht erstmal einfach ein:

defmod Demo_at_j2r_nonjsnmap_sum at +*01:00 {HttpUtils_NonblockingGet({ url=>"https://mymuell.jumomind.com/webservice.php?idx=termins&city_id=66005&area_id=2734&ws=3",callback=>sub($$$){json2reading($defs{Demo_at_j2r_nonjsnmap_sum},$_[2],undef,undef,undef,undef)}})}

damit mein ich ist es erstmal einfacher zu verstehen auf welche Readings ich aus bin, ob die jetzt sinnvoll sind darum gehts nicht, es geht mir darum hashKeyRename zu verstehen.

edit2:

Denke hab da einen Denkfehler und es hat sich erübrigt