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
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);
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
Na das ist ja mal spannend ;)
fhem aktuell?
welches os?
welches perl?
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
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 ..
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
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.
Perfekt, funktioniert jetzt.
Danke für deine Hilfe.
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
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?
Versuch mal:
https://de.finance.yahoo.com/quote/GNAE.HM?p=GNAE.HM&.tsrc=fin-srch
GNAE.HM (nicht HAM)
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 (https://www.fondsweb.com/de/LU1882473264). Man könnte natürlich die Sachen jetzt mit der Hand stricken, und danach sieht es eigentlich aus...