FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Wettermodule => Thema gestartet von: Guenni1404 am 20 März 2023, 20:22:34

Titel: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: Guenni1404 am 20 März 2023, 20:22:34
Hi,

ich habe gesehen, dass https://open-meteo.com (https://open-meteo.com) kostenlose Wetterdaten über eine API anbietet. Es ist kein Key notwendig.
Hat zufällig schon jemand was damit gemacht?
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: Aurel_B am 24 März 2023, 13:00:19
Ich kannte diese Seite noch nicht, sieht super interessant aus! Wenn ich dazu komme, werde ich in den nächsten Wochen mich mal damit beschäftigen und meine Erkentnisse hier posten.
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: holle75 am 04 April 2023, 14:21:44
kann sich geändert haben, aber "damals" (vor ca 1,5 Jahren) waren die Daten recht eingeschränkt und die API nervig. Aber vielleicht sieht es jetzt besser aus? Zur Info ...
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: satprofi am 04 Dezember 2023, 10:30:39
Hallo.
Danke für den Tip! Schaut gut aus, sehr gute Daten abzufragen.
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: holle75 am 16 Dezember 2023, 09:33:18
wo ich gerade hier bin.

Ja, da hat sich richtig was getan (zu meinem Post weiter oben).
Doppelt so viele Werte wie "damals" und eine Api die man sich zusammenklicken kann. Und free.
Respekt.

... jetzt müssen die Daten nur noch "gut" und nicht nur "hübsch" sein.

Muss mal versuchen, ob ich das in einen LogProxy Plot bekomme.
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: Gisbert am 16 Dezember 2023, 13:23:29
Hallo zusammen,

ich konnte eine URL erzeugen; das war ziemlich leicht.

Wie sieht denn eine Definition in Fhem aus? Ich hab's mit HTTPMOD versucht, aber es kommen keine Readings rein. Muss ich dafür alle Attribute händisch definieren? Wenn ja, wie müssten die aussehen?

Viele Grüße Gisbert
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: holle75 am 16 Dezember 2023, 13:36:33
Hallo Gisbert, zB so

define WetterOpenMeteo HTTPMOD https://api.open-meteo.com/v1/forecast?latitude=xx.xx&longitude=11.yyyyyy&hourly=temperature_2m,precipitation_probability,precipitation,cloud_cover,wind_speed_10m,wind_direction_10m,wind_gusts_10m,soil_temperature_0cm,uv_index,sunshine_duration&daily=weather_code,temperature_2m_max,temperature_2m_min,sunshine_duration,uv_index_max,precipitation_sum,precipitation_probability_max,wind_speed_10m_max,wind_gusts_10m_max,wind_direction_10m_dominant&timezone=Europe%2FBerlin 3600
attr WetterOpenMeteo enforceGoodReadingNames 1
attr WetterOpenMeteo event-on-change-reading .*
attr WetterOpenMeteo extractAllJSON 1

da musst du jetzt nur noch xx und yy (lon/lat) auf deinen Ort packen. Oder klicks dir hier https://open-meteo.com/en/docs zusammen.

dann vielleicht ein set reread und danach das Device aktualisieren.
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: Gisbert am 17 Dezember 2023, 10:01:22
Hallo holle75,

hier ein list meiner Definition:
define OpenMeteo HTTPMOD https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,precipitation_probability,precipitation,weather_code,cloud_cover,wind_speed_10m,wind_gusts_10m&timezone=Europe%2FBerlin&models=best_match 3600
attr OpenMeteo enforceGoodReadingNames 1
attr OpenMeteo extractAllJSONFilter 1
attr OpenMeteo group Wetter
attr OpenMeteo room Weather
#  BUSY      0
#  CFGFN     
#  DEF        https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,precipitation_probability,precipitation,weather_code,cloud_cover,wind_speed_10m,wind_gusts_10m&timezone=Europe%2FBerlin&models=best_match 3600
#  FUUID      657d94fc-f33f-e986-4ad5-654b27e24d72b88d
#  Interval  3600
#  MainURL    https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,precipitation_probability,precipitation,weather_code,cloud_cover,wind_speed_10m,wind_gusts_10m&timezone=Europe%2FBerlin&models=best_match
#  ModuleVersion 4.1.16 - 4.4.2023
#  NAME      OpenMeteo
#  NOTIFYDEV  global
#  NR        1367
#  NTFY_ORDER 50-OpenMeteo
#  STATE      ???
#  TYPE      HTTPMOD
#  eventCount 22
#  value     
#  HttpUtils:
#    NAME     
#    addr      https://api.open-meteo.com:443
#    auth      0
#    code      200
#    compress  1
#    conn     
#    data     
#    displayurl https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,precipitation_probability,precipitation,weather_code,cloud_cover,wind_speed_10m,wind_gusts_10m&timezone=Europe%2FBerlin&models=best_match
#    header   
#    host      api.open-meteo.com
#    httpheader HTTP/1.1 200 OK
#Date: Sun, 17 Dec 2023 08:14:53 GMT
#Content-Type: application/json; charset=utf-8
#Connection: close
#Content-Encoding: deflate
#    httpversion 1.0
#    hu_blocking 0
#    hu_filecount 1
#    hu_port    443
#    hu_portSfx
#    ignoreredirects 1
#    loglevel  4
#    path      /v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,precipitation_probability,precipitation,weather_code,cloud_cover,wind_speed_10m,wind_gusts_10m&timezone=Europe%2FBerlin&models=best_match
#    protocol  https
#    redirects  0
#    timeout    2
#    url        https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,precipitation_probability,precipitation,weather_code,cloud_cover,wind_speed_10m,wind_gusts_10m&timezone=Europe%2FBerlin&models=best_match
#    sslargs:
#  QUEUE:
#  READINGS:
#  REQUEST:
#    context    reading
#    data     
#    header   
#    ignoreredirects 0
#    num        unknown
#    retryCount 0
#    type      update
#    url        https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,precipitation_probability,precipitation,weather_code,cloud_cover,wind_speed_10m,wind_gusts_10m&timezone=Europe%2FBerlin&models=best_match
#  helper:
#    bm:
#      CODE(0x55d1f707b088):
#        cnt        210
#        dmx        -1000
#        dtot      0
#        dtotcnt    0
#        mTS        16.12. 13:15:56
#        max        0.00858592987060547
#        tot        0.134667873382568
#        mAr:
#          HASH(0x55d1fc4c5ef0)
#          OpenMeteo
#          ?
#      CODE(0x55d1f717be68):
#        cnt        6
#        dmx        -1000
#        dtot      0
#        dtotcnt    0
#        mTS        16.12. 13:17:58
#        max        0.00245499610900879
#        tot        0.00669097900390625
#        mAr:
#          set
#          OpenMeteo
#          room
#          Weather
#      CODE(0x55d1f71f38f0):
#        cnt        6
#        dmx        -1000
#        dtot      0
#        dtotcnt    0
#        mTS        17.12. 04:01:29
#        max        0.00220417976379395
#        tot        0.012343168258667
#        mAr:
#          HASH(0x55d1fc4c5ef0)
#          OpenMeteo HTTPMOD https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,precipitation_probability,precipitation,weather_code,cloud_cover,wind_speed_10m,wind_gusts_10m&timezone=Europe%2FBerlin&models=best_match
#      CODE(0x55d1f71f3aa0):
#        cnt        28
#        dmx        -1000
#        dtot      0
#        dtotcnt    0
#        mTS        17.12. 04:01:29
#        max        3.29017639160156e-05
#        tot        0.000479221343994141
#        mAr:
#          HASH(0x55d1fc4c5ef0)
#          HASH(0x55d1f17e0000)
#      CODE(0x55d1f71f5bf0):
#        cnt        61
#        dmx        -1000
#        dtot      0
#        dtotcnt    0
#        mTS        17.12. 09:45:52
#        max        0.000332832336425781
#        tot        0.00466823577880859
#        mAr:
#          HASH(0x55d1fc4c5ef0)
#          OpenMeteo
#          ?
#
Finde den Fehler ;D - ich bekomme keinerlei Readings, egal was ich mit reread und neu laden anstelle.

Viele Grüße Gisbert
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: MadMax-FHEM am 17 Dezember 2023, 10:08:20
attr OpenMeteo extractAllJSONFilter 1 vs. attr OpenMeteo extractAllJSON 1

Wäre mein Tipp...

Gruß, Joachim
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: holle75 am 17 Dezember 2023, 10:12:12
Probier mal was MadMax geschrieben hat (wobei es bei mir mit dem attr so funktioniert)

Sonst würde ich mal "meine Def" (mit deinen Koordinaten) probieren. Dann drehen wir nämlich "Finde den Fehler" um ;)
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: Nobbynews am 17 Dezember 2023, 10:18:55
Zitat von: Gisbert am 17 Dezember 2023, 10:01:22attr OpenMeteo extractAllJSONFilter 1

Probier mal statt dessen
attr OpenMeteo extractAllJSON 1
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: MadMax-FHEM am 17 Dezember 2023, 10:20:39
Zitat von: holle75 am 17 Dezember 2023, 10:12:12Probier mal was MadMax geschrieben hat (wobei es bei mir mit dem attr so funktioniert)
Aber du hast doch eben extractAllJSON und nicht extractAllJSONFilter ;)

Oder hab ich mich verkuckt? 8)

@Gisbert: ich habe eben deine DEF mit (wie von mir geschrieben) extractAllJSON ausprobiert und bekomme 1Mio Readings ;)

Gruß, Joachim
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: betateilchen am 17 Dezember 2023, 10:20:49
Warum denn die Krämpfe mit HTTPMOD wenn die API doch json liefert?
Dann nimmt man doch besser JsonMod...

defmod openmeteo JsonMod https://api.open-meteo.com/v1/forecast?latitude=53.53&longitude=9.71&current=temperature_2m,relative_humidity_2m,apparent_temperature,pressure_msl,surface_pressure,wind_speed_10m,wind_direction_10m&timezone=auto&forecast_days=3
attr openmeteo interval 1 * * * *
attr openmeteo readingList complete()
attr openmeteo stateFormat T: current.temperature_2m H: current.relative_humidity_2m P: current.pressure_msl
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: holle75 am 17 Dezember 2023, 10:56:46
Zitat von: MadMax-FHEM am 17 Dezember 2023, 10:20:39Aber du hast doch eben extractAllJSON und nicht extractAllJSONFilter ;)

Jo, deswegen meinte ich ja, er soll mal dein extractAllJSONFilter probieren. Mit dem Hinweis, dass es bei mir auch mit extractAllJSON funktioniert. Will sagen, es kann, muss aber nicht daran liegen.

Zitat von: betateilchen am 17 Dezember 2023, 10:20:49Warum denn die Krämpfe mit HTTPMOD wenn die API doch json liefert?
Dann nimmt man doch besser JsonMod...

Kannte ich noch nicht. Wenn die anderen Baustellen durch sind schau ich mir das an.

@Alle: Jemand Lust auf eine Perl Sub Routine Fingerübung? ;)
Für VisualCrossing Wetter habe ich (resp. Frank vor hundert Jahren für Proplanta und ich habs abgewandelt. Cooltux mir noch zwischendurch mit irgendwelchen timestamps geholfen) einen wunderschönen Plot (primär in FTUI genutzt. Anbei die fhem Variante).

Bei OpenMeteo liegt die Stunde an einer anderen Stelle in den Readings und ich bekomme seit 2 Tagen das RegEx nicht angepasst. Grrrrrr

visualcrossingPlot.jpg
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: Gisbert am 17 Dezember 2023, 13:51:11
Zitat von: betateilchen am 17 Dezember 2023, 10:20:49Warum denn die Krämpfe mit HTTPMOD wenn die API doch json liefert?
Dann nimmt man doch besser JsonMod...

defmod openmeteo JsonMod https://api.open-meteo.com/v1/forecast?latitude=53.53&longitude=9.71&current=temperature_2m,relative_humidity_2m,apparent_temperature,pressure_msl,surface_pressure,wind_speed_10m,wind_direction_10m&timezone=auto&forecast_days=3
attr openmeteo interval 1 * * * *
attr openmeteo readingList complete()
attr openmeteo stateFormat T: current.temperature_2m H: current.relative_humidity_2m P: current.pressure_msl


Hallo betateilchen,

danke für diesen Tipp. Damit funktioniert es.
Ich wundere mich nur, dass die Geodaten in den Readings nicht denen in der Definition übereinstimmen. Das war bei der HPPTMOD-Definition auch so.
latitude 51.02 2023-12-17 13:42:41
longitude 6.9999995 2023-12-17 13:42:4

list:
define OpenMeteo JsonMod https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,weather_code,cloud_cover,surface_pressure,wind_speed_10m,wind_gusts_10m&forecast_days=3
attr OpenMeteo interval 1 * * * *
attr OpenMeteo readingList complete ()
#  API_LAST_MSG 200
#  API_LAST_RES 1702816961.79868
#  CFGFN     
#  DEF        https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,weather_code,cloud_cover,surface_pressure,wind_speed_10m,wind_gusts_10m&forecast_days=3
#  FUUID      657ee8de-f33f-e986-d6e2-7095335697556d2c
#  NAME      OpenMeteo
#  NEXT      2023-12-17 14:01:00
#  NR        1368
#  SOURCE    https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,weather_code,cloud_cover,surface_pressure,wind_speed_10m,wind_gusts_10m&forecast_days=3 (200)
#  STATE      ???
#  SVN        27933 2023-09-04 13:29:42 UTC
#  TYPE      JsonMod
#  eventCount 738
#  CONFIG:
#    IN_REQUEST 0
#    SOURCE    https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,weather_code,cloud_cover,surface_pressure,wind_speed_10m,wind_gusts_10m&forecast_days=3
#    SECRET:
#  OLDREADINGS:
#  READINGS:
#    2023-12-17 13:42:41  current.cloud_cover 43
#    2023-12-17 13:42:41  current.interval 900
#    2023-12-17 13:42:41  current.precipitation 0
#    2023-12-17 13:42:41  current.relative_humidity_2m 83
#    2023-12-17 13:42:41  current.surface_pressure 1031.4
#    2023-12-17 13:42:41  current.temperature_2m 7.9
#    2023-12-17 13:42:41  current.time    2023-12-17T12:30
#    2023-12-17 13:42:41  current.weather_code 2
#    2023-12-17 13:42:41  current.wind_gusts_10m 17.3
#    2023-12-17 13:42:41  current.wind_speed_10m 6.8
#    2023-12-17 13:42:41  current_units.cloud_cover %
#    2023-12-17 13:42:41  current_units.interval seconds
#    2023-12-17 13:42:41  current_units.precipitation mm
#    2023-12-17 13:42:41  current_units.relative_humidity_2m %
#    2023-12-17 13:42:41  current_units.surface_pressure hPa
#    2023-12-17 13:42:41  current_units.temperature_2m °C
#    2023-12-17 13:42:41  current_units.time iso8601
#    2023-12-17 13:42:41  current_units.weather_code wmo code
#    2023-12-17 13:42:41  current_units.wind_gusts_10m km/h
#    2023-12-17 13:42:41  current_units.wind_speed_10m km/h
#    2023-12-17 13:42:41  elevation      47
#    2023-12-17 13:42:41  generationtime_ms 0.219941139221191
#    2023-12-17 13:42:41  latitude        51.02
#    2023-12-17 13:42:41  longitude      6.9999995
#    2023-12-17 13:42:41  timezone        GMT
#    2023-12-17 13:42:41  timezone_abbreviation GMT
#    2023-12-17 13:42:41  utc_offset_seconds 0
#  helper:
#    bm:
#      JsonMod_Attr:
#        cnt        2
#        dmx        -1000
#        dtot      0
#        dtotcnt    0
#        mTS        17.12. 13:27:49
#        max        0.00379395484924316
#        tot        0.00384187698364258
#        mAr:
#          set
#          OpenMeteo
#          interval
#          1 * * * *
#      JsonMod_Define:
#        cnt        3
#        dmx        -1000
#        dtot      0
#        dtotcnt    0
#        mTS        17.12. 13:26:06
#        max        0.000526905059814453
#        tot        0.00117087364196777
#        mAr:
#          HASH(0x55d2022cec50)
#          OpenMeteo JsonMod https://api.open-meteo.com/v1/forecast?latitude=51.0163&longitude=7.0045&current=temperature_2m,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,precipitation_probability,precipitation,weather_code,cloud_cover,wind_speed_10m,wind_gusts_10m&timezone=Europe%2FBerlin&forecast_days=3&models=best_match
#      JsonMod_Set:
#        cnt        775
#        dmx        -1000
#        dtot      0
#        dtotcnt    0
#        mTS        17.12. 13:41:36
#        max        0.00222420692443848
#        tot        0.041733980178833
#        mAr:
#          HASH(0x55d2022cec50)
#          OpenMeteo
#          reread
#
setstate OpenMeteo 2023-12-17 13:42:41 .computedReadings current.interval,current_units.time,current.wind_speed_10m,current.temperature_2m,elevation,current_units.precipitation,current.surface_pressure,utc_offset_seconds,current.relative_humidity_2m,current.cloud_cover,current.weather_code,current_units.temperature_2m,current_units.wind_speed_10m,longitude,current_units.wind_gusts_10m,current_units.relative_humidity_2m,current_units.cloud_cover,latitude,current.time,current_units.interval,timezone,generationtime_ms,current.wind_gusts_10m,current_units.surface_pressure,current_units.weather_code,current.precipitation,timezone_abbreviation
setstate OpenMeteo 2023-12-17 13:42:41 current.cloud_cover 43
setstate OpenMeteo 2023-12-17 13:42:41 current.interval 900
setstate OpenMeteo 2023-12-17 13:42:41 current.precipitation 0
setstate OpenMeteo 2023-12-17 13:42:41 current.relative_humidity_2m 83
setstate OpenMeteo 2023-12-17 13:42:41 current.surface_pressure 1031.4
setstate OpenMeteo 2023-12-17 13:42:41 current.temperature_2m 7.9
setstate OpenMeteo 2023-12-17 13:42:41 current.time 2023-12-17T12:30
setstate OpenMeteo 2023-12-17 13:42:41 current.weather_code 2
setstate OpenMeteo 2023-12-17 13:42:41 current.wind_gusts_10m 17.3
setstate OpenMeteo 2023-12-17 13:42:41 current.wind_speed_10m 6.8
setstate OpenMeteo 2023-12-17 13:42:41 current_units.cloud_cover %
setstate OpenMeteo 2023-12-17 13:42:41 current_units.interval seconds
setstate OpenMeteo 2023-12-17 13:42:41 current_units.precipitation mm
setstate OpenMeteo 2023-12-17 13:42:41 current_units.relative_humidity_2m %
setstate OpenMeteo 2023-12-17 13:42:41 current_units.surface_pressure hPa
setstate OpenMeteo 2023-12-17 13:42:41 current_units.temperature_2m °C
setstate OpenMeteo 2023-12-17 13:42:41 current_units.time iso8601
setstate OpenMeteo 2023-12-17 13:42:41 current_units.weather_code wmo code
setstate OpenMeteo 2023-12-17 13:42:41 current_units.wind_gusts_10m km/h
setstate OpenMeteo 2023-12-17 13:42:41 current_units.wind_speed_10m km/h
setstate OpenMeteo 2023-12-17 13:42:41 elevation 47
setstate OpenMeteo 2023-12-17 13:42:41 generationtime_ms 0.219941139221191
setstate OpenMeteo 2023-12-17 13:42:41 latitude 51.02
setstate OpenMeteo 2023-12-17 13:42:41 longitude 6.9999995
setstate OpenMeteo 2023-12-17 13:42:41 timezone GMT
setstate OpenMeteo 2023-12-17 13:42:41 timezone_abbreviation GMT
setstate OpenMeteo 2023-12-17 13:42:41 utc_offset_seconds 0

Die Geodaten in der Definition habe ich über das Suchfeld für meine Umgebung gesetzt, also nicht mein genauer Standort.

Viele Grüße Gisbert
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: betateilchen am 17 Dezember 2023, 18:41:16
Zitat von: Gisbert am 17 Dezember 2023, 13:51:11Ich wundere mich nur, dass die Geodaten in den Readings nicht denen in der Definition übereinstimmen. Das war bei der HPPTMOD-Definition auch so.

Darüber würde ich mir keine allzu großen Gedanken machen, das ist bei fast alle Wetterdiensten so. Entweder das sind Rundungsdifferenzen bei der internen Berechnung oder es sind schlicht die Positionsdaten der nächstgelegenen Wetterstation von der die Daten stammen.

Aber allzu weit liegen die Werte ja nicht auseinander.
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: mumpitzstuff am 18 Dezember 2023, 14:55:39
Bei mir sieht der Plot jetzt so aus. Positionsdaten sind die von holle75.

Machen diese Daten irgendwie Sinn?
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: holle75 am 18 Dezember 2023, 15:03:32
die machen aufgrund der leicht uneterschiedlichen lat/lon wahrscheinlich Sinn. Habe auf schnell hier ->

https://forum.fhem.de/index.php?topic=83097.msg1297219#msg1297219

mal einen Vergleich gepostet. Heute Abend mach ich nochmal ordentlich.

vielen Dank!
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: mumpitzstuff am 18 Dezember 2023, 18:22:59
Hier mal meine aktuellen Definitionen:

defmod OpenMeteo HTTPMOD https://api.open-meteo.com/v1/forecast?latitude=<REPLACE>&longitude=<REPLACE>&current=temperature_2m,relative_humidity_2m,precipitation,rain,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,relative_humidity_2m,dew_point_2m,precipitation_probability,precipitation,weather_code,rain,cloud_cover,wind_speed_10m,wind_gusts_10m,direct_radiation&timezone=Europe%2FBerlin&models=best_match 3600
attr OpenMeteo enableControlSet 1
attr OpenMeteo enforceGoodReadingNames 1
attr OpenMeteo event-on-change-reading .*
attr OpenMeteo extractAllJSON 1

defmod FileLog_OpenMeteo FileLog ./log/OpenMeteo-%Y-%m.log OpenMeteo
defmod SVG_FileLog_OpenMeteo_1 SVG FileLog_OpenMeteo:SVG_FileLog_OpenMeteo_1:CURRENT
attr SVG_FileLog_OpenMeteo_1 fixedoffset 6
attr SVG_FileLog_OpenMeteo_1 fixedrange 7days
attr SVG_FileLog_OpenMeteo_1 nrAxis 2,2

Logproxy Device (es kann auch ein bereits bestehendes verwendet werden):

define LOG_PROXY logProxy
99_myUtils.pm Funktion:

sub logProxy_WetterOpenMeteo2Plot($$$$;$$) {
    my ($device, $fcValue, $from, $to, $fcHour, $expMode) = @_;
    my $regex;
    my @rl;
    my $hdmreading;
    my $hdmtime;

    return undef if(!$device);

    if ($fcValue =~ s/_$//)
    {
        $regex = "^hourly_".$fcValue."_[\\d]+\$";
    }

    $fcHour = 12 if(!defined $fcHour);
    $expMode = "point" if(!defined $expMode);

#Log3 undef,2, "regex: ".$regex;
#Log3 undef,2, "FCvalue: ".$fcValue;

    if( defined($defs{$device}) ) {
        if( $defs{$device}{TYPE} eq "HTTPMOD" ) {
            @rl = sort{
                my ($an) = ($a =~ m/hourly.*_(\d+).*/);
#Log3 undef,2, "an: ".$an;
#Log3 undef,2, "a: ".$a;
                my ($bn) = ($b =~ m/hourly.*_(\d+).*/);
                $an <=> $bn or $a cmp $b;
                }( grep /${regex}/,keys %{$defs{$device}{READINGS}} );
            return undef if( !@rl );
        } else {
            Log3 undef, 2, "logProxy_WetterOpenMeteo2Plot: $device is not a HTTPMOD device";
            return undef;
        }
    }
#Log3 undef,2, Dumper(@rl);

    my $fromsec = SVG_time_to_sec($from);
    my $tosec   = SVG_time_to_sec($to);
    my $sec = $fromsec;
    my ($h,$hdmsec,$hdmmin,$hdmhour,$hdmmday,$hdmmon,$hdmyear,$hdmwday,$hdmyday,$hdmisdst);
    my $timestamp;

    my $reading;
    my $value;
    my $prev_value;
    my $min = 999999;
    my $max = -999999;
    my $ret = "";

    # while not end of plot range reached
    while(($sec < $tosec) && @rl) {
        #remember previous value for start of plot range
        $prev_value = $value;

        $reading = shift @rl;

        ($h) = $reading =~ m/^hourly.*_(\d+).*/;

        $value = ReadingsVal($device,$reading,undef);

#Log3 undef,2, "reading: ".$reading;
#Log3 undef,2, "h: ".$h;
        use Date::Parse;
        $hdmreading = ReadingsVal($device, "hourly_time_".$h ,undef);

#Log3 undef,2, "hdmvorCONV: ".$hdmreading;
        $hdmtime = str2time($hdmreading);

#Log3 undef,2, "hdmreading: ".$hdmreading;
#Log3 undef,2, "hdmtime: ".$hdmtime;


        ($hdmsec, $hdmmin, $hdmhour, $hdmmday, $hdmmon, $hdmyear, $hdmwday, $hdmyday, $hdmisdst) = localtime($hdmtime);

        # necessary conversion of $mon and $year
        $hdmmon += 1;
        $hdmyear += 1900;

        $timestamp = sprintf("%04d-%02d-%02d_%02d:%02d:%02d", $hdmyear, $hdmmon, $hdmmday, $hdmhour, $hdmmin, $hdmsec);
#Log3 undef,2, "timestamp: ".$timestamp;
        $sec = SVG_time_to_sec($timestamp);

        # skip all values before start of plot range
        next if( SVG_time_to_sec($timestamp) < $fromsec );

        # add first value at start of plot range
        if( !$ret && $prev_value ) {
            $min = $prev_value if( $prev_value < $min );
            $max = $prev_value if( $prev_value > $max );
            $ret .= "$from $prev_value\n";
        }

        # done if after end of plot range
        last if($sec > $tosec);

        $min = $value if( $value < $min );
        $max = $value if( $value > $max );

        # add actual controll point
        $ret .= "$timestamp $value\n";

#Log 3, "$timestamp $value -0- $reading";
    }
   
    if(($sec < $tosec) && !@rl && ($expMode eq "day")) {
        $timestamp = sprintf("%04d-%02d-%02d_%02d:%02d:%02d", $hdmyear, $hdmmon, $hdmmday, 23, 59, 59);
        if(SVG_time_to_sec($timestamp) < $tosec) {
            $ret .= "$timestamp $value\n";
        }
        else {
            $ret .= "$to $value\n";
        }
    }
    elsif(($sec > $tosec) && ($expMode eq "day")) {
           $value = $prev_value + ($value - $prev_value)*(86400 + ($tosec - $sec))/86400;
           $ret .= "$to $value\n";
    }
   
    return ($ret,$min,$max,$prev_value);
}

Gplot File (LOG_PROXY eventuell durch das eigene Device ersetzen):
# Created by FHEM/98_SVG.pm, 2023-12-18 17:34:40
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<TL>'
set ytics
set y2tics
set grid ytics
set ylabel "Regenmenge (mm)"
set y2label "Sonneneinstrahlung (W/m²)"
set y3label "Temperatur/Taupunkt (°C)"
set y4label "Bewölkung / Regenwahrscheinlichkeit (%)"
set y4range [0:100]

#LOG_PROXY Func:logProxy_WetterOpenMeteo2Plot("OpenMeteo","temperature_2m_",$from,$to,0,"day")
#LOG_PROXY Func:logProxy_WetterOpenMeteo2Plot("OpenMeteo","dew_point_2m_",$from,$to,0,"day")
#LOG_PROXY Func:logProxy_WetterOpenMeteo2Plot("OpenMeteo","direct_radiation_",$from,$to,0,"day")
#LOG_PROXY Func:logProxy_WetterOpenMeteo2Plot("OpenMeteo","rain_",$from,$to,0,"day")
#LOG_PROXY Func:logProxy_WetterOpenMeteo2Plot("OpenMeteo","precipitation_probability_",$from,$to,0,"day")
#LOG_PROXY Func:logProxy_WetterOpenMeteo2Plot("OpenMeteo","cloud_cover_",$from,$to,0,"day")
#LOG_PROXY ConstX:TimeNow(),0,100
#LOG_PROXY ConstY:0

plot "<IN>" using 1:2 axes x1y3 title 'Temperatur (°C)' ls l0 lw 2 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y3 title 'Taupunkt' ls l1 lw 2 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y2 title 'Sonneneinstrahlung (W/m²)' ls l4fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Regen (mm)' ls l2fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y4 title 'Regenwahrscheinlichkeit (%)' ls l5fill lw 1 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y4 title 'Wolken (%)' ls l6fill lw 1 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y4 notitle ls l5 lw 4 with lines,\
     "<IN>" using 1:2 axes x1y3 notitle ls l2 lw 2 with lines

Den Wind habe ich mal weg gelassen, da dafür noch eine weitere Achse notwendig gewesen wäre. Das Ergebnis knn man hier vergleichen (Ort muss man oben noch eintragen und kann sich dann das Diagramm ansehen):

https://open-meteo.com/en/docs#current=temperature_2m,relative_humidity_2m,precipitation,rain,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,dew_point_2m,precipitation_probability,precipitation,rain,cloud_cover,wind_speed_10m,wind_gusts_10m,direct_radiation&models= (https://open-meteo.com/en/docs#current=temperature_2m,relative_humidity_2m,precipitation,rain,cloud_cover,wind_speed_10m,wind_gusts_10m&hourly=temperature_2m,dew_point_2m,precipitation_probability,precipitation,rain,cloud_cover,wind_speed_10m,wind_gusts_10m,direct_radiation&models=)
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: holle75 am 18 Dezember 2023, 22:04:36
Grossartig, das Selbe wollte ich auch gerade machen.

Nochmals vielen Dank für deine Hilfe.

Edit: Für Nachbauer, ich glaube es braucht auch noch ein Logproxy Device

defmod LogproxyWetter logProxy
name it as you like.

Im Plot könnt ihr mannigfaltig auch andere Werte verwursten und darstellen. Diese könnt ihr euch hier "zusammenklicken" -> https://open-meteo.com/en/docs

und entsprechend Mumpitzstuff´s Anleitung im Gplot file einbauen.
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: LutzG am 21 Dezember 2023, 00:27:02
Hallo,
Zitat von: mumpitzstuff am 18 Dezember 2023, 18:22:59Hier mal meine aktuellen Definitionen:
Vielen Dank, sieht echt cool aus!

Zitat von: holle75 am 18 Dezember 2023, 22:04:36Edit: Für Nachbauer, ich glaube es braucht auch noch ein Logproxy Device

defmod LogproxyWetter logProxy
name it as you like.
ich habe jetzt eine ganze Weile rumprobiert, aber hier müßte der Name: LOG_PROXY sein, also:
defmod LOG_PROXY logProxyDie Profis wissen natürlich, das man das auch im "Gplot File" ändern kann: #LOG_PROXY Func:logProxy[...]  --->  #DEIN_NAME_VOM_LOG_PROXY Func:logProxy[...]... ich hab aber noch nie einen Plot so erstellt und habe ziemlich lange gesucht um das raus zu finden. Ich hoffe, die Info hilft auch Anderen beim nachbauen!

Viele Grüße, Lutz
Titel: Aw: Kostenlose Wetterdaten von open-meteo.com
Beitrag von: mumpitzstuff am 21 Dezember 2023, 01:13:30
Habe beides auch oben ergänzt. Danke.