FHEM Forum

FHEM => Automatisierung => Thema gestartet von: carlos am 30 März 2020, 15:41:51

Titel: Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: carlos am 30 März 2020, 15:41:51
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
Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: herrmannj am 30 März 2020, 16:26:00
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);



Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: carlos am 30 März 2020, 23:38:58
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
Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: herrmannj am 30 März 2020, 23:47:52
Na das ist ja mal spannend ;)

fhem aktuell?
welches os?
welches perl?
Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: carlos am 30 März 2020, 23:57:37
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
Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: herrmannj am 31 März 2020, 00:08:17
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 ..

Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: carlos am 31 März 2020, 00:20:57
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
Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: herrmannj am 31 März 2020, 00:38:34
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.
Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: carlos am 31 März 2020, 00:47:15
Perfekt, funktioniert jetzt.
Danke für deine Hilfe.
Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: herrmannj am 31 März 2020, 00:47:47
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
Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: andies am 15 Juni 2020, 10:02:21
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?
Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: jkriegl am 15 Juni 2020, 14:21:49
Versuch mal:
https://de.finance.yahoo.com/quote/GNAE.HM?p=GNAE.HM&.tsrc=fin-srch
GNAE.HM (nicht HAM)
Titel: Antw:Anwendungsbeispiel JsonMod #3: Stock quotes
Beitrag von: andies am 18 Juni 2020, 11:33:31
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...