FHEM Forum

FHEM => Automatisierung => Thema gestartet von: loetmeister am 17 November 2021, 20:50:26

Titel: [98_JsonMod.pm] readingList multi & Elementnamen referenzieren
Beitrag von: loetmeister am 17 November 2021, 20:50:26
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
Titel: Antw:[98_JsonMod.pm] readingList multi & Elementnamen referenzieren
Beitrag von: yersinia am 18 November 2021, 09:07:17
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
Titel: Antw:[98_JsonMod.pm] readingList multi & Elementnamen referenzieren
Beitrag von: loetmeister am 19 November 2021, 23:34:03
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
Titel: Antw:[98_JsonMod.pm] readingList multi & Elementnamen referenzieren
Beitrag von: herrmannj am 19 November 2021, 23:52:20
Zumindest spontan wüsste ich kein jsonpath welcher das abbilden kann. Ist es aber nicht sowieso besser nur "Trinkwasser: ein" zu nehmen?
Titel: Antw:[98_JsonMod.pm] readingList multi & Elementnamen referenzieren
Beitrag von: loetmeister am 22 November 2021, 23:34:12
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
Titel: Antw:[98_JsonMod.pm] readingList multi & Elementnamen referenzieren
Beitrag von: herrmannj am 23 November 2021, 08:42:17
Dann geht das nur per complete (). Da wird der readingname aus dem kompletten path gebildet. Aber das hattest Du ja auch gesehen.