Hallo zusammen,
ich kämpfe damit, mit dem JsonMod und multi() ein Array in einem Json auszulesen und Readings dafür anzulegen.
Hier das Json Dokument:
{
"dal":{
"sub1":{
"sub2":{
"loading":false,
"loaded":true,
"data":{
"precipChance":[
0,
0,
0,
0,
0,
0,
1,
1,
3,
4,
5,
5,
5,
6,
6,
7,
6,
7,
5,
3,
2,
1,
1,
1
],
"responseHeaders":{
"date":"Fri, 30 May 2025 10:58:57 GMT"
}
},
"status":200,
"statusText":"OK"
}
}
}
}
Hier meine readingList
multi(jsonPath('$.dal.sub1.sub2.data.precipChance[*]'), concat('precipChance_',count(),'_hour'), property('$'));
Es werden 24 Readings angelegt, aber ich bekomme einfach keine Werte darin angezeigt.
Könnt ihr mir bitte auf die Sprünge helfen? Ich weiß einfach nicht, wie ich mit der Property-Funktion umgehen muss.
Alternativ könnte ich mich auch damit anfreunden, die ganzen Elemente des Arrays in einem einzelnen Reading kommagetrennt unterzubringen, wäre auch ok, aber auch da keine Ahnung, wie ich das hinbekomme.
Danke
Das ist ein bekannter Mangel von JsonMod. multi() kann (noch) nicht direkt auf einen Wert im array zugreifen, wenn es keinen key dazu gibt.
Du kannst die 24 readings mit ihren Werten aber über complete() erzeugen, allerdings hast Du dann keinen direkten Einfluss auf die Namensgebung der readings und es werden eben auch readings erzeugt, die Du vielleicht gar nicht brauchst. In Deinem Beispiel sind das nur 5 zusätzliche readings, das sollte also kein Problem sein.
defmod jt JsonMod file:///tmp/test.json
attr jt readingList complete()
setstate jt 2025-05-31 12:18:28 .computedReadings dal.sub1.sub2.data.precipChance.17,dal.sub1.sub2.data.precipChance.14,dal.sub1.sub2.data.precipChance.3,dal.sub1.sub2.data.precipChance.11,dal.sub1.sub2.loading,dal.sub1.sub2.data.precipChance.22,dal.sub1.sub2.data.precipChance.2,dal.sub1.sub2.data.precipChance.21,dal.sub1.sub2.data.precipChance.0,dal.sub1.sub2.status,dal.sub1.sub2.data.precipChance.19,dal.sub1.sub2.data.precipChance.5,dal.sub1.sub2.loaded,dal.sub1.sub2.data.precipChance.4,dal.sub1.sub2.data.precipChance.1,dal.sub1.sub2.data.responseHeaders.date,dal.sub1.sub2.data.precipChance.16,dal.sub1.sub2.data.precipChance.12,dal.sub1.sub2.data.precipChance.13,dal.sub1.sub2.data.precipChance.10,dal.sub1.sub2.data.precipChance.18,dal.sub1.sub2.data.precipChance.9,dal.sub1.sub2.data.precipChance.15,dal.sub1.sub2.data.precipChance.20,dal.sub1.sub2.data.precipChance.8,dal.sub1.sub2.statusText,dal.sub1.sub2.data.precipChance.7,dal.sub1.sub2.data.precipChance.23,dal.sub1.sub2.data.precipChance.6
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.0 0
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.1 0
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.10 5
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.11 5
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.12 5
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.13 6
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.14 6
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.15 7
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.16 6
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.17 7
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.18 5
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.19 3
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.2 0
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.20 2
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.21 1
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.22 1
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.23 1
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.3 0
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.4 0
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.5 0
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.6 1
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.7 1
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.8 3
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.precipChance.9 4
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.data.responseHeaders.date Fri, 30 May 2025 10:58:57 GMT
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.loaded 1
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.loading 0
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.status 200
setstate jt 2025-05-31 12:18:28 dal.sub1.sub2.statusText OK
Alternativ kannst Du mit 24 single() statements arbeiten, dann kannst Du auch den readingName angeben:
single(jsonPath('$.dal.sub1.sub2.data.precipChance.8'),'r8',-1)
liefert das reading:
setstate jt 2025-05-31 12:26:07 r8 3