[JsonMod] Variable Pfade möglich?

Begonnen von Gernott, 17 August 2022, 00:16:46

Vorheriges Thema - Nächstes Thema

Gernott

Nachdem alphavantage Realtime-Abfragen nur noch per Premium-Abo zuläßt, muß ich notgedrungen auf die Abfrage von Zeitreihen ausweichen.
Die Daten sehen so aus:

{
    "Meta Data": {
        "1. Information": "Forex Daily Prices (open, high, low, close)",
        "2. From Symbol": "EUR",
        "3. To Symbol": "CHF",
        "4. Output Size": "Compact",
        "5. Last Refreshed": "2022-08-16 20:30:00",
        "6. Time Zone": "UTC"
    },
    "Time Series FX (Daily)": {
        "2022-08-16": {
            "1. open": "0.96131",
            "2. high": "0.96795",
            "3. low": "0.96000",
            "4. close": "0.96581"
        },
        "2022-08-15": {
            "1. open": "0.96559",
            "2. high": "0.96640",
            "3. low": "0.96018",
            "4. close": "0.96103"
        },
        "2022-08-12": {
            "1. open": "0.97150",
            "2. high": "0.97220",
            "3. low": "0.96500",
            "4. close": "0.96549"
        },
        "2022-08-11": {
            "1. open": "0.97080",
            "2. high": "0.97317",
            "3. low": "0.96920",
            "4. close": "0.97128"
        },
...(Rest gekürzt)


Ich benötige nur den Wert "4. close" mit dem aktuellen Datum, also heute "2022-08-16".

Die Abfrage mit ReadingsList single funktioniert dann so:

single(jsonPathf("\$['Time Series FX (Daily)'].2022-08-16['4. close']", '%0.5f'), 'EURCHF', 0);


Nun müßte sich jeden Tag die Abfrage ändern. Leider habe ich bisher keine Möglichlkeit gefunden, dynamisch im Pfad das aktuelle Datum einzusetzen, wie z.B. mit
POSIX::strftime('%Y-%m-%d', localtime())
Das scheint in-line nicht zu gehen, zumindest habe ich nichts finden können.
Kann man einen vorher erzeugten Pfad-String per Variable einbinden oder ist noch ein anderer Ansatz notwendig?

Gruß
G.


betateilchen

Zitat von: Gernott am 17 August 2022, 00:16:46
oder ist noch ein anderer Ansatz notwendig?

Vielleicht hilft schon der Ansatz, einfach mal die Forumsuche zu benutzen. Das Thema "variable URL in JsonMod" wurde bereits in mehreren Threads diskutiert, der letzte Thread war vor wenigen Tagen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

yersinia

Zitat von: betateilchen am 17 August 2022, 09:31:53Vielleicht hilft schon der Ansatz, einfach mal die Forumsuche zu benutzen. Das Thema "variable URL in JsonMod" wurde bereits in mehreren Threads diskutiert, der letzte Thread war vor wenigen Tagen.
sigh, ja, vor allem weil eine ähnliche Fragestellung in diesem Board ein paar Zeilen weiter unten besteht. Dazu auch die Antwort bezgl des secrets als potentieller Lösungsvorschlag.

Wenn ich allerdings das readingList:
Zitat von: Gernott am 17 August 2022, 00:16:46Die Abfrage mit ReadingsList single funktioniert dann so:single(jsonPathf("\$['Time Series FX (Daily)'].2022-08-16['4. close']", '%0.5f'), 'EURCHF', 0);
sehe, könnte man noch, anstatt die url zu manipulieren, auch gezielt nach dem Datum suchen.

Dafür bräuchte man eine kleine Perl-Funktion in der myUtils, die einem das aktuelle Datum zusammenstellt und setzt dies in readingList ein. Ich nutze das zB für die Intensivbettenbelegung (oder als Vorschlag für myMüll Termine).

Ungetestet müsste das dann irgendwie so gehen:
single(jsonPathf("\$['Time Series FX (Daily)'].['".mydividate()."'].['4. close']", '%0.5f'), 'EURCHF', 0);
ggf auch mit multi anstelle mit single.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl