hilfe beim erstellen von Readings für JsonMod

Begonnen von macfly, 15 Mai 2023, 21:13:37

Vorheriges Thema - Nächstes Thema

macfly

Hallo zusammen,

ich würde gerne die PV-Prognosen von solcast denen von solarprognose gegenüberstellen. Für solcast habe ich ein funktionierendes jsonmod device, aber für solarprognose will der Balken nicht aus meinem Kopf.

Ausgangsdaten (nur Beispiele, um die api zu schonen):

{
    "status":0,
    "iLastPredictionGenerationEpochTime":1576681137,
    "datalinename":"Süd",
    "data":{
        "1576735200":[0,0],
        "1576738800":[0.064,0.064],
        "1576742400":[0.606,0.67],
        "1576746000":[1.148,1.818],
        "1576749600":[1.647,3.465],
        "1576753200":[0.295,3.76],
        "1576756800":[0.273,4.033],
        "1576760400":[1.3,5.333],
        "1576764000":[0.305,5.638],
        "1576767600":[0.014,5.652],
        "1576771200":[0,5.652]
    }
}

der Identifier in data ist epoch, das würde ich irgendwie mit strftime und gmtime in ein lesbares format wandeln, notfalls später mit einem userreading weiter verarbeiten, das wäre auf jedenfall mein reading-name

und aus dem folgenden array der erste Wert ist der Wert des Readings.

also:
reading 1576735200=0
reading 1576738800=0.064
reading 1576742400=0.606

kann mir jemand auf die Sprünge helfen, wie der passende Parameter readingList lauten müsste?

liebe Grüße,
Friedhelm

herrmannj

Moin Friedhelm,

nicht ganz trivial ;) Der Json ist extrem "ungünstig": die (gesuchten) Reading Namen sind hier als keys in einem Object. JsonPath kann zwar auf Keys mit fixem Namen zugreifen. Über das Object so wie über ein Array loopen geht mit JsonMod auch, dann sind die keys aber verloren. ($.data.*). Das kann JsonPath einfach nicht.

Ich habe die angehängte Version daher um "node"/"node()" (analog zu count) erweitert. Innnerhalb "multi()" kann man damit auf die sogenannten "normalisierten path expressions" zugreifen, welche in dem Fall dann auch den Key enthalten. In der readingslist unten wird per regex die (gesuchte) Zahl aus dem node (zb $[data][1576749600]) extrahiert und dann in eine Zeit gewandelt und damit dann zum reading namen:

define solarprognose JsonMod file://log/solarprognose.json
attr solarprognose readingList multi(jsonPath('$.data.*'), strftime('%Y-%m-%d %H:%M:%S', localtime( (node =~ m/^\$\[data\]\[(\d*)\]$/)[0]) ), property('$[0]'));;
#   API_LAST_MSG
#   API_LAST_RES 1684191600.00993
#   DEF        file://log/solarprognose.json
#   FUUID      64628e70-f33f-a34f-91b1-08cf9207e33d1dcf
#   NAME       solarprognose
#   NEXT       2023-05-16 02:00:00
#   NR         46
#   SOURCE     file://log/solarprognose.json ()
#   STATE      ???
#   SVN        27457 2023-04-17 23:35:57 UTC
#   TYPE       JsonMod
#   eventCount 2
#   CONFIG:
#     IN_REQUEST 0
#     SOURCE     file://log/solarprognose.json
#     SECRET:
#   READINGS:
#     2023-05-16 01:00:00   2019-12-19_070000 0
#     2023-05-16 01:00:00   2019-12-19_080000 0.064
#     2023-05-16 01:00:00   2019-12-19_090000 0.606
#     2023-05-16 01:00:00   2019-12-19_100000 1.148
#     2023-05-16 01:00:00   2019-12-19_110000 1.647
#     2023-05-16 01:00:00   2019-12-19_120000 0.295
#     2023-05-16 01:00:00   2019-12-19_130000 0.273
#     2023-05-16 01:00:00   2019-12-19_140000 1.3
#     2023-05-16 01:00:00   2019-12-19_150000 0.305
#     2023-05-16 01:00:00   2019-12-19_160000 0.014
#     2023-05-16 01:00:00   2019-12-19_170000 0
#
setstate solarprognose 2023-05-16 01:00:00 .computedReadings 2019-12-19_080000,2019-12-19_160000,2019-12-19_170000,2019-12-19_090000,2019-12-19_140000,2019-12-19_130000,2019-12-19_120000,2019-12-19_100000,2019-12-19_150000,2019-12-19_110000,2019-12-19_070000
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_070000 0
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_080000 0.064
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_090000 0.606
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_100000 1.148
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_110000 1.647
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_120000 0.295
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_130000 0.273
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_140000 1.3
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_150000 0.305
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_160000 0.014
setstate solarprognose 2023-05-16 01:00:00 2019-12-19_170000 0


macfly

jau. funktioniert 1a

muss ich 98_JsonMod.pm besonders behandeln, dass beim nächsten Update deine Änderung nicht wieder gelöscht wird?

vielen Dank,
Friedhelm

herrmannj

Nö, musst nichts beachten. Ich passe noch doku und modul-test an und, falls sich keine Nebeneffekte zeigen, checke ich das ein.

carlos

Zitathttps://forum.fhem.de/index.php?msg=1236192
Könnte man diesen patch bitte auch noch übernehmen?

Gruß

Hubert
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

herrmannj

Zitat von: carlos am 16 Mai 2023, 13:10:41
Zitathttps://forum.fhem.de/index.php?msg=1236192
Könnte man diesen patch bitte auch noch übernehmen?

Gruß

Hubert
falscher thread. aber ja, ich schau mir das an