Hallo,
ich hoffe die Frage ist nicht zu Banal, aber leider konnte ich anhand der Bestehenden Threads und Beispielen leider keine Lösung finden....
Es geht um die JSON "Datei" weiter unten, welche ich gerne in readings ausgegeben hätte "<Objekt>_<Objekt.name> <Objekt.desc>", z.B.
1600_Trinkwasserbetrieb Ein
2200_Betriebsart Automatik
Ähnlich wie es bei complete() aussieht.
Mit multi() klappt das soweit, leider konnte ich nicht herausfinden, ob und wie man den Objekt-/Elementnamen referenzieren kann. Gibt es eine generische "property"?
multi(jsonPath('$.*'), concat(property(???) , '_', property('name')), property('desc'))
Mit einem weiteren jsonPath() in concat() hatte ich auch keinen Erfolg. :-[
JSON
{
"1600": {
"name": "Trinkwasserbetrieb",
"error": 0,
"value": "1",
"desc": "Ein",
"dataType": 1,
"readonly": 1,
"unit": ""
},
"2200": {
"name": "Betriebsart",
"error": 0,
"value": "1",
"desc": "Automatik",
"dataType": 1,
"readonly": 1,
"unit": ""
},
"2206": {
"name": "Betrieb/Standby",
"error": 0,
"value": "0",
"desc": "Betrieb",
"dataType": 1,
"readonly": 1,
"unit": ""
}
}
Gruß,
Thomas
Ich glaube nicht, dass JsonMod das kann - bzw. das überhaupt unterstützt wird. Aber das müsste @herrmannj beantworten.
Du kannst aber alternativ zB count() verwenden.
multi(jsonPath('$.*'), concat(count() , '_', property('name')), property('desc'))
müsste sowas ergeben
0_Trinkwasserbetrieb Ein
1_Betriebsart Automatik
Hi yersinia,
Danke. count() hilft nicht so viel, da die Zahlen sich verschieben wenn ich die abgefragten Parameter (also die Einträge im JSON file) ändere und dann werden die readings nicht mehr gefunden.
Vermutlich belasse ich dann multi() ohne concat()
Oder lege die readings einzeln mit single() an
single(jsonPath('$.8700.value'), '8700_Außentemperatur', 'unknown')
Denke wen ich die relevanten Werte gefunden habe, werde ich da auch nicht mehr dran gehen... :D
Gruß,
Thomas
Zumindest spontan wüsste ich kein jsonpath welcher das abbilden kann. Ist es aber nicht sowieso besser nur "Trinkwasser: ein" zu nehmen?
Hallo,
ja, die Lesbarkeit "Trinkwasser: ein" ist absolut ok. Die Anzeige der Programmnummer zusätzlich im Namen würde es bloß vereinfachen zu sehen welcher Parameter genau abgefragt worden ist und ob er auch beschreibbar ist.
Die Programmnummern werden im HTTP Aufruf mitgegeben (z.b. http://192.168.1.66/JQ=1600,8730,8760) und stehen dann in dieser Reihenfolge im JSON File. In FHEM werden die readings alphabetisch sortiert, da ist dann nicht mehr offensichtlich was zusammen gehört. :)
Gruß,
Thomas
Dann geht das nur per complete (). Da wird der readingname aus dem kompletten path gebildet. Aber das hattest Du ja auch gesehen.