Anwendungsbeispiel JsonMod #3: Stock quotes

Begonnen von carlos, 30 März 2020, 15:41:51

Vorheriges Thema - Nächstes Thema

carlos

Hallo,
Hier geht es um die Umsetzung die Aktien kurse bei alphavantage per JsonMod zu holen:

Hier ein Beispiel für die SAP Aktie :

https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=SAP.DE&apikey=xxxxxxxxxxxx

mit folgendem Json Ergebnis:

{
    "Global Quote": {
        "01. symbol": "SAP.DE",
        "02. open": "101.0200",
        "03. high": "102.0600",
        "04. low": "99.2000",
        "05. price": "101.8600",
        "06. volume": "1322292",
        "07. latest trading day": "2020-03-30",
        "08. previous close": "99.8700",
        "09. change": "1.9900",
        "10. change percent": "1.9926%"
    }
}


Wie könnte man das umsetzen.

Gruß

Carlos
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

Moin,

das ist ein sehr simpler Anwendungsfall. Spannender (für JsonMod) würde es wenn die API ein einem result mehrere Titel zurückgeben würde und man auch mehrere beobachten möchte.

Im gegeben Fall:
define SAP JsonMod https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=SAP.DE&apikey=[KEY]
Zur Beachtung: anstelle des echten API Key steht in der def der Platzhalter [KEY]. Diesen im zeiten Schritt dem Modul mitteilen
set SAP secret KEY XXXXXXXXXXXXXXXXXXX
Beim Attribut readingList mit folgenden Befehlen den Preis sowie die Veränderung % zur Anzeige auswählen und formatieren.
single(jsonPathf("\$['Global Quote']['05. price']", '%0.2f €'), 'Preis', 0);
single(jsonPathf("\$['Global Quote']['10. change percent']", '%0.4f %%'), 'Veränderung', 0);

Weitere Readings (wenn von Interesse) können analog dazu generiert werden.

Handelszeiten sind von 9:00 - 17:30. nehmen wir mal eine Abfrage alle 5 Minuten von 9:00 - 18:00. (Abhängig von dem was die API t&c fordern mögen das mehr oder weniger sein)
set SAP interval */5 9-18 * * *

Dies ist das komplette resultierende list:
Internals:
   API_LAST_RES 1585578301.15111
   API__LAST_MSG 200
   CFGFN     
   DEF        https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=SAP.DE&apikey=[KEY]
   FUUID      5e81fcca-f33f-a6e8-babd-e2ce4cd76e381dc1
   NAME       SAP
   NEXT       2020-03-30 16:30:00
   NOTIFYDEV  global
   NR         37
   NTFY_ORDER 50-SAP
   SECRETS    KEY
   SOURCE     https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=SAP.DE&apikey=XXXXXXXXXXXXXXXX (200)
   STATE      ???
   SVN        21544 2020-03-30 14:01:55 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=SAP.DE&apikey=[KEY]
     SECRET:
   READINGS:
     2020-03-30 16:25:01   Preis           100.86 €
     2020-03-30 16:25:01   Veranderung     0.9913 %
Attributes:
   interval   */5 9-18 * * *
   readingList single(jsonPathf("\$['Global Quote']['05. price']", '%0.2f €'), 'Preis', 0);
single(jsonPathf("\$['Global Quote']['10. change percent']", '%0.4f %%'), 'Veränderung', 0);




carlos

Sieht eigentlich gut aus so, ab funktioniert leider bei mir nicht.
Sobald ich das define absetze starte FHEM neu.
Im log kann ich leider nichts erkennen.
Gruß

Carlos
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

Na das ist ja mal spannend ;)

fhem aktuell?
welches os?
welches perl?

carlos

FHEM SVN: fhem.pl                     21524 2020-03-27 10:22:34Z rudolfkoenig
OS: debian 10.3
Perl: This is perl 5, version 28, subversion 1 (v5.28.1) built for x86_64-linux-gnu-thread-multi
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

Also hättest Du jetzt nen Exoten gebracht, dann hätte ich was wonach ich suchen könnte. Aber das was Du hast ist so ziemlich exakt ganz genau das womit ich teste ... ich habe keine Idee. Nicht mal den Hauch einer ..


carlos

#6
Im log habe ich gefunden:
2020.03.31 00:18:59 1: PERL WARNING: The lexical_subs feature is experimental at ./FHEM/98_JsonMod.pm line 1680.
2020.03.31 00:18:59 1: stacktrace:
2020.03.31 00:18:59 1:     main::__ANON__                      called by ./FHEM/98_JsonMod.pm (1680)
2020.03.31 00:18:59 1:     (eval)                              called by fhem.pl (2609)
2020.03.31 00:18:59 1:     (eval)                              called by fhem.pl (2608)
2020.03.31 00:18:59 1:     main::CommandReload                 called by fhem.pl (2000)
2020.03.31 00:18:59 1:     main::LoadModule                    called by fhem.pl (2057)
2020.03.31 00:18:59 1:     main::CommandDefine                 called by fhem.pl (1247)
2020.03.31 00:18:59 1:     main::AnalyzeCommand                called by fhem.pl (1100)
2020.03.31 00:18:59 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2710)
2020.03.31 00:18:59 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (981)
2020.03.31 00:18:59 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (590)
2020.03.31 00:18:59 1:     main::FW_Read                       called by fhem.pl (3772)
2020.03.31 00:18:59 1:     main::CallFn                        called by fhem.pl (757)
2020.03.31 00:18:59 3: writeDevices2JS return value: 1
2020.03.31 00:18:59 3: IP: www.alphavantage.co -> 34.233.35.85
2020.03.31 00:19:00 3: <hidden>: HTTP response code 200
2020.03.31 00:19:00 1: PERL WARNING: Use of uninitialized value $name in substitution (s///) at /usr/lib/x86_64-linux-gnu/perl/5.24/Encode.pm line 105.
2020.03.31 00:19:00 1: stacktrace:
2020.03.31 00:19:00 1:     main::__ANON__                      called by /usr/lib/x86_64-linux-gnu/perl/5.24/Encode.pm (105)
2020.03.31 00:19:00 1:     Encode::getEncoding                 called by /usr/lib/x86_64-linux-gnu/perl/5.24/Encode.pm (130)
2020.03.31 00:19:00 1:     Encode::find_encoding               called by ./FHEM/98_JsonMod.pm (634)
2020.03.31 00:19:00 1:     main::JsonMod_ApiResponse           called by FHEM/HttpUtils.pm (634)
2020.03.31 00:19:00 1:     main::__ANON__                      called by fhem.pl (754)
2020.03.31 00:19:00 1: PERL WARNING: Use of uninitialized value $name in exists at /usr/lib/x86_64-linux-gnu/perl/5.24/Encode.pm line


Ist allerdings mein 2. FHEM stretch und perl 5.24, FHEM SVN aktuell
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

ok, dann habe ich evtl eine Idee.

a) die Warnung kannst Du ignorieren.
b) ich habe heute einen fix ins svn geladen für den seltenen Fall dass der Server kein encoding mitliefert. Das könnte hier der Fall sein. Der ist erst morgen früh im update. Wenn Du fhem nicht via svn sondern normal per update holst könntest Du morgen (nach update) nochmal testen.

carlos

Perfekt, funktioniert jetzt.
Danke für deine Hilfe.
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

ja, das scheint es zu sein, ich habe den fix nochmal ausgebaut und kann es nachvollziehen.

Deine Fehlermeldung ist allerdings strange. Den fix habe ich gegen 14:00 hochgeladen, dein Beispiel ist nach 16:00. Erklärt warum mir das hier nicht mit deinem use case aufgefallen ist.

Unglaublich, dass da was passieren könnte (in der Praxis aber noch nie ist) war mir heute durch Zufall ins Auge gesprungen. Und 2h später bringst Du das real world Beispiel dazu. Da bin ich ja mal gespannt ob sich das bestätigt.

edit: überschnitten. Unglaublich. Der Teufel ist'n Eichhörnchen. Die warnung nehme ich noch raus, die kannste aber getrost ignorieren.

Viel spass

andies

Ich versuche, Kurse von ETFs zu laden. Das geht mit
https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=GNAE.HAM&apikey=meinKey]
nicht (wobei ich gar nicht weiß, ob das überhaupt der richtige ETF ist - nur der stand zur Auswahl). Stockquotes geht mW auch nicht, jedenfalls nicht über yahoo finance.

Hat jemand noch eine andere Option, bei der ich mal schauen könnte?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

jkriegl

Versuch mal:
https://de.finance.yahoo.com/quote/GNAE.HM?p=GNAE.HM&.tsrc=fin-srch
GNAE.HM (nicht HAM)
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

andies

Danke, das war also ein Schreibfehler. Leider passt das nicht, denn das Papier, das ich eigentlich suche, ist ein anderes (und ich weiß nicht, wo ich das finden kann): LU1882473264 oder https://www.fondsweb.com/de/LU1882473264. Man könnte natürlich die Sachen jetzt mit der Hand stricken, und danach sieht es eigentlich aus...
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann