[patch] Tägliche Daten für OpenWeatherMap

Begonnen von nobody, 30 Dezember 2021, 15:32:28

Vorheriges Thema - Nächstes Thema

nobody

Hi.

Im angehängten Patch wird die Abfrage auf OpenWeatherMap.org von "forecast" auf "onecall" umgestellt. Dies hat den Vorteil dass auch Daten für eine tägliche Wettervorhersage mitgeliefert werden. Diese können nun einfach mittels WeatherAsHtmlX(<name>,"d",<count>) im Webinterface eingebunden werden (bisher wurde hier nur das derzeitige Wetter geliefert).

Bei meiner Implementierung habe ich die Abfrage mittels "forecast" (Wetterdaten alle 3 Stunden für 4 Tage) entfernt. Mir ist bewusst, dass dies ein gewisses Konfliktpotential bietet. Falls es dem User möglich sein soll die Art der Abfrage steuern zu können bin ich natürlich gerne bereit meinen Patch entsprechend anzupassen. Allerdings bräuchte ich dafür 1-2 Tips wie das am Sinnvollsten implementiert werden kann (z.B, über ein Attribut?)

Da die Abfrage über die API "onecall" nicht alle Daten liefert (z.B. Ort Name und Land) muss auch weiterhin ein call auf die API "weather" erfolgen. Damit ich garantieren kann, dass immer beide calls ausgeführt werden, musste ich den Ablauf etwas ändern. Im Detail werden beide request in non-blocking Art und Weise abgesetzt und die internen Strukturen beim Empfang von jedem der beiden aktualisiert. Funktioniert bei mir recht gut.

Übrigens: Ich habe auch einen Fix für die Probleme mit Warnings im Modul OpenWeatherMap (siehe [1] und [2]) einfließen lassen. Im Detail werden die Warnigns mittels no warnings 'uninitialized'; lokal deaktiviert.

[1] https://forum.fhem.de/index.php/topic,95730.msg1196525.html#msg1196525
[2] https://forum.fhem.de/index.php/topic,95823.msg1191054.html#msg1191054

CoolTux

Schaue ich mir gerne an. Wird aber etwas dauern. Kann Dir aber jetzt schon sagen das
no warnings 'uninitialized';
nur eine Verschleierung ist und die eigentliche Ursache nicht behebt.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

nobody

Das auf jeden Fall. Die saubere Variante wäre vor jeder Berechnung abzuprüfen ob der Wert im Hash definiert ist oder nicht. Das würde allerding den Code extrem aufblähen.

Hm, jetzt wo ich so drüber nachdenke könnte man das vielleicht mit einem Makro sauber lösen. Das könnte man dann auch gleich aufs Modul 59_Weather.pm auch anwenden, denn dort treten solche Warnings bei mir auch auf.

CoolTux

Eigentlich sollten im Modul keine Warnings auftreten. Und auch bei Elektrolurch ist was nicht ganz korrekt. Eine Multiplikation gibt es an der Stelle wo das Warning kommt gar nicht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Hinata

Wäre echt toll wenn bei OpenWeatherMap.org das neu "onecall" API unterstützt würde.

CoolTux

#5
Könnt Ihr bitte einmal diese Version testen

Readonly ist nun Voraussetzung
apt install libreadonly-perl


https://git.cooltux.net/FHEM/mod-Weather/raw/branch/patch-addOnecallMode/OpenWeatherMapAPI.pm

Aber mit Vorsicht. Und wenn es Probleme gibt brauche ich immer die entsprechende FHEM Logausgabe.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Hinata

Ich probiere das gerne mal aus.

  • Werden beide APIs unterstützt oder nur noch ,,onecall"?
  • Muss man bei den Einstellungen/Attributen was beachten?

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Hinata

#8
Habe die verlinkte Datei ersetzt

-rw-r--r-- 1 fhem dialout  35043 Feb 13 10:52 OpenWeatherMapAPI.pm
-rw-r--r-- 1 root root     23294 Feb 13 10:45 OpenWeatherMapAPI.pm.old

und meine Installation neu gestartet

2022.02.13 11:03:10 0: Server shutdown
2022.02.13 11:03:11 1: Including fhem.cfg
2022.02.13 11:03:11 3: WEB: port 8083 opened
2022.02.13 11:03:11 2: eventTypes: loaded 874 lines from ./log/eventTypes.txt
2022.02.13 11:03:11 3: FHZ opening FHZ device /dev/serial/by-id/usb-ELV_AG_ELV_FHZ_1300_PC_EL65DJ1H-if00-port0
2022.02.13 11:03:11 3: FHZ opened FHZ device /dev/serial/by-id/usb-ELV_AG_ELV_FHZ_1300_PC_EL65DJ1H-if00-port0
2022.02.13 11:03:14 1: define OpenWeather Weather API=OpenWeatherMapAPI,cachemaxage:600 apikey=xxx interval=3600 lang=en: OpenWeather: cannot load API OpenWeatherMapAPI: Can't locate Readonly.pm in @INC (you may need to install the Readonly module) (@INC contains: ./lib ./FHEM . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/arm-linux-gnueabihf/perl5/5.32 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl-base /usr/lib/arm-linux-gnueabihf/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl ./FHEM/lib) at FHEM/OpenWeatherMapAPI.pm line 115.
BEGIN failed--compilation aborted at FHEM/OpenWeatherMapAPI.pm line 115.
Compilation failed in require at ./FHEM/59_Weather.pm line 677.

2022.02.13 11:03:14 1: Including ./log/fhem.save
2022.02.13 11:03:14 1: Messages collected while initializing FHEM:configfile: OpenWeather: cannot load API OpenWeatherMapAPI: Can't locate Readonly.pm in @INC (you may need to install the Readonly module) (@INC contains: ./lib ./FHEM . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/arm-linux-gnueabihf/perl5/5.32 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl-base /usr/lib/arm-linux-gnueabihf/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl ./FHEM/lib) at FHEM/OpenWeatherMapAPI.pm line 115.
BEGIN failed--compilation aborted at FHEM/OpenWeatherMapAPI.pm line 115.
Compilation failed in require at ./FHEM/59_Weather.pm line 677.

setuuid: Please define OpenWeather first

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Frank_Huber

Zitat von: Hinata am 13 Februar 2022, 11:14:13
Habe die verlinkte Datei ersetzt
Lösche doch bitte mal noch deinen API key aus dem Post..

Hinata


  • apiKey hab ich ausgetauscht, der Alte ist gelöscht.
  • Ich verwende Raspberry Pi OS Lite, da ist libreadonly-perl nicht vorinstalliert.
  • Die Warnung(en) die ich bisher beim Start von FHEM bekommen habe sind weg.
  • Wetterdaten können abgerufen werden, Forecast geht auch.
  • Ich benutzen OpenWeather/Free https://openweathermap.org/price#weather, bekomme bei stündlichem Forecast aber nur Werte im 3h Abstand. Erwartet hätte ich eigentlich für jede Stunde.
  • OpenWeather bietet auch Historical und Minute, was bei Forecast nicht ausgewählt werden kann.

Bei der Tagesansicht finde ich die Uhrzeit irritierend.
{ WeatherAsHtmlV("OpenWeather","d", 3) }

clear sky
12°C 45%
Wind: S 19 km/h

Sun, 11:00: few clouds
min 1°C max 12°C
Wind: S 11 km/h

Mon, 11:00: few clouds
min 2°C max 10°C
Wind: S 11 km/h


Stündlicher Forecast, Abstand 3h (anstatt 1h).
{ WeatherAsHtmlV("OpenWeather","h", 3) }

12°C 45%
Wind: S 19 km/h

Sun, 18:00: clear sky
min 5°C max 9°C
-

Sun, 21:00: few clouds
min 3°C max 6°C
-


CoolTux

Die Daten kommen genau so 1 z 1 über die API rein. Kann nur das nehmen was ich da angeboten bekomme.

Ansonsten funktioniert es aber bei Dir?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

xenos1984

Zitat von: Hinata am 13 Februar 2022, 16:47:30
OpenWeather bietet auch Historical und Minute, was bei Forecast nicht ausgewählt werden kann.

So weit ich das sehe, geht eine Stunde Abstand nur ab Developer, Free hat nur drei Stunden:

http://openweathermap.org/api
http://openweathermap.org/api/hourly-forecast
http://openweathermap.org/forecast5

OpenWeatherMapAPI benutzt endpoint="forecast" (drei Stunden). Stündlich wäre endpoint="forecast/hourly".

Hinata

So richtig werde ich aus der Beschreibung auch nicht schlau, unter ,,Hourly forecast for 48 hours" verstehe ich aber stündlich?

Hourly Forecast 4 days
API doc Subscribe
Hourly forecast is available for 4 days
Forecast weather data for 96 timestamps

JSON and XML formats
Included in the Developer, Professional and Enterprise subscription plans

One Call API
API doc Subscribe
Make one API call and get current, forecast and historical weather data
Minute forecast for 1 hour
Hourly forecast for 48 hours
Daily forecast for 7 days
Historical data for 5 previous days
National weather alerts
JSON format
Included in both free and paid subscriptions