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
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
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
Nö, musst nichts beachten. Ich passe noch doku und modul-test an und, falls sich keine Nebeneffekte zeigen, checke ich das ein.
Zitathttps://forum.fhem.de/index.php?msg=1236192
Könnte man diesen patch bitte auch noch übernehmen?
Gruß
Hubert
Zitat von: carlos am 16 Mai 2023, 13:10:41Zitathttps://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