Modul für DWD Open Data

Begonnen von jensb, 21 Januar 2018, 14:38:48

Vorheriges Thema - Nächstes Thema

jensb

@Baeda

Danke für die Rückmeldung, freut mich, dass du die Ursache finden und beheben konntest.

Zitat... schade ist hier nur (nach meinem Kenntnisstand..) dass man für die y-Achse "nur" 2 label/ranges angeben kann.
Mit mehr als 2 Y-Achsen tun sich die meisten Plotter schwer und es wird dann auch schnell unübersichtlich - ob es doch geht weiß ich auch nicht. Habe mich hier für 0-100 % und °C entschieden, damit kommt man relativ weit.

Grüße,
Jens

FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

Christoph Morrison

Thema $warncellId:
Ich hatte gerade wieder die beiden Warnings zur $warncellId im Log:

2020.06.04 21:03:37.809 1: PERL WARNING: Use of uninitialized value $warncellId in division (/) at ./FHEM/55_DWD_OpenData.pm line 1371.
2020.06.04 21:03:37.809 1: PERL WARNING: Use of uninitialized value $warncellId in numeric eq (==) at ./FHEM/55_DWD_OpenData.pm line 1371.


Ich denke es sollte reichen wenn man davor $warncellId prüft und wenn es nicht definiert ist, einfach return 0 macht, ungefähr so (ungetestet):

sub IsCommuneUnionWarncellId($) {
  my ($warncellId) = @_;

  if (!$warncellId) {
    return 0;
  }

  return int($warncellId/100000000) == 5 || int($warncellId/100000000) == 7 || int($warncellId/100000000) == 8
         || $warncellId == UPDATE_COMMUNEUNIONS || $warncellId == UPDATE_ALL? 1 : 0;
}


(Das zweite return statement sieht auch nicht so toll aus finde ich :-( )

jensb

@Christoph Morrison

Danke für den Hinweis. Das würde sicher so funktionieren wie du vorschlägst, aber es wäre nur Symptombekämpfung, denn auch der Code nach dem Aufruf von isCommuneUnionWarncellId() ist auf eine definierte $warncellId angewiesen. In Zeile 986 wird das z.B. auch noch mal geprüft.

Was mich hier interessiert: Warum ist $warncellId bei dir undefiniert? Habe das selbst noch nicht gehabt, werde mir das aber noch genauer ansehen.

Schade, dass du keinen Stacktrace im Log hast. Wenn man FHEM so startet, wird Perl gesprächiger:
/usr/bin/perl -MCarp::Always fhem.pl fhem.cfg

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

Christoph Morrison

Zitat von: jensb am 05 Juni 2020, 19:04:20
@Christoph Morrison

Danke für den Hinweis. Das würde sicher so funktionieren wie du vorschlägst, aber es wäre nur Symptombekämpfung, denn auch der Code nach dem Aufruf von isCommuneUnionWarncellId() ist auf eine definierte $warncellId angewiesen. In Zeile 986 wird das z.B. auch noch mal geprüft.


Was mich hier interessiert: Warum ist $warncellId bei dir undefiniert? Habe das selbst noch nicht gehabt, werde mir das aber noch genauer ansehen.

Die Meldung kam beim Start von FHEM auf meiner Produktionsmaschine, d.h. es gibt dort kein Stacktrace. Ich schaue mal, ob ich auf der Integrationsmaschine den Fehler reproduzieren kann, dann poste ich dir auch einen Stacktrace. Im laufenden Betrieb nach dem Start kommt die Fehlermeldung auch nicht mehr.

jensb

Habe mir den Code noch mal angesehen. Die Sub isCommuneUnionWarncellId() wird aus mehreren Abläufen aufgerufen, die meisten prüfen bzw. initialisieren $warncellId explizit vorher. Mir ist kein Ablauf aufgefallen, der offensichtlich problematisch ist. Wenn ich mein FHEM neu starte, tritt das Problem (leider) nicht auf.

Falls das mit dem Stacktrace nichts wird, könnte ich für Testzwecke eine Debug-Version des Moduls erstellen, dass auf Loglevel 4 zusätzliche Ausgaben macht ohne wie bei Loglevel 5 das Logfile mit den XML-Rohdaten zu fluten.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

Christoph Morrison

#695
Tatsächlich kommt die Meldung gar nicht beim Boot, sondern beim Shutdown. Edit: Und zwar dann, wenn DWD noch keine Chance hatte, irgendwelche Daten abzurufen:

Ohne Daten:

Internals:
   .TZ       
   .fetchAlerts
   FHEM_TZ   
   FUUID      5ee78b69-f33f-a8a4-e8b8-59d22f56554222a8
   NAME       general.weather.forecast.dwd
   NR         98
   STATE      defined
   TYPE       DWD_OpenData
   .attraggr:
   .attrminint:
   READINGS:
     2020-06-15 16:53:29   state           defined
Attributes:
   alertArea  105754000
   alertLanguage DE
   forecastDays 5
   forecastStation 10320
   forecastWW2Text 1


→ Stacktrace

Mit zwischenzeitlichem Datenabruf:



Internals:
   .TZ       
   .fetchAlerts
   .warncellId -3
   ALERTS_IN_CACHE 8
   FHEM_TZ   
   FUUID      5ee78b8f-f33f-a8a4-b186-4469943192a6783d
   NAME       general.weather.forecast.dwd
   NR         98
   STATE      updating alerts cache
   TYPE       DWD_OpenData
   .attraggr:
   .attrminint:
   READINGS:
     2020-06-15 16:54:16   state           updating alerts cache
Attributes:
   alertArea  105754000
   alertLanguage DE
   forecastDays 5
   forecastStation 10320
   forecastWW2Text 1


→ kein Stacktrace.

Ich denke es liegt daran, dass bei der Version ohne Stacktrace das Internal .warncellId noch nicht gesetzt ist - du müsstest das im Prinzip sofort beim Define mit einem Wert belegen.



####
####    Global
####
attr global userattr ASC:0,1,2 ASC_AutoAstroModeEvening ASC_AutoAstroModeMorning ASC_LockOut ASC_Mode_Down ASC_Pos_Reading ASC_Roommate_Device ASC_Roommate_Reading ASC_WindowRec DbLogExclude DbLogInclude DbLogValueFn:textField-long HmIp3D HmIpKey HmIpSGTIN alarm_system_interior alarm_system_outer_shell alarm_system_perimeter cmdIcon devStateIcon devStateIcon:textField-long devStateStyle icon installationRoom msgContactAudio msgContactLight msgContactMail msgContactPush msgContactScreen msgParams msgPriority msgRecipient msgRecipientAudio msgRecipientLight msgRecipientMail msgRecipientPush msgRecipientScreen msgRecipientText msgTitle msgTitleShrt msgType:text,push,mail,screen,light,audio,queue sortby webCmd webCmdLabel:textField-long widgetOverride ASC_BlockingTime_afterManual ASC_Down ASC_Mode_Up ASC_Shading_Direction ASC_Shading_Mode ASC_Shading_Pos ASC_ShuttersPlace ASC_Up ASC_Ventilate_Pos ASC_Ventilate_Window_Open ASC_WindowRec_subType
attr global altitude 80
attr global autoload_undefined_devices 1
attr global autosave 0
attr global backup_before_update 0
attr global commandref modular
attr global dnsServer 192.168.0.16
attr global holiday2we general.holidays.nrw
attr global language DE
attr global latitude 51.9293504
attr global logfile ./log/fhem/fhem.log
attr global longitude 8.377413199999978
attr global modpath .
attr global motd
attr global mseclog 1
attr global pidfilename /var/run/fhem/fhem.pid
attr global room hidden
attr global showInternalValues 1
attr global statefile ./fhem.save
attr global updateInBackground 1
attr global verbose 5
attr global stacktrace 1

# strange log entries for this fella
# define ActionDetector CUL_HM 000000
# setuuid ActionDetector 5e1128c7-f33f-15c9-cd37-40ff6adbe1a43eff
# attr ActionDetector .mId no
# attr ActionDetector event-on-change-reading .*
# attr ActionDetector model ACTIONDETECTOR
# attr ActionDetector subType virtual

####
####    Includes
####

include ./cfg.d/general/frontends.cfg

defmod general.weather.forecast.dwd DWD_OpenData
    attr general.weather.forecast.dwd alertArea 105754000
    attr general.weather.forecast.dwd alertLanguage DE
    attr general.weather.forecast.dwd forecastDays 5
    attr general.weather.forecast.dwd forecastStation 10320
    attr general.weather.forecast.dwd forecastWW2Text 1

################################################
################################################

# FHEM will add new new devices below this comment section

################################################
################################################





2020.06.15 16:49:27.159 5: Starting notify loop for global, 1 event(s), first is SHUTDOWN
2020.06.15 16:49:27.159 5: createNotifyHash
2020.06.15 16:49:27.160 5: End notify loop for global
2020.06.15 16:49:27.160 0: Server shutdown
2020.06.15 16:49:27.160 1: PERL WARNING: Use of uninitialized value $warncellId in division (/) at ./FHEM/55_DWD_OpenData.pm line 1371.
2020.06.15 16:49:27.160 1: stacktrace:
2020.06.15 16:49:27.160 1:     main::__ANON__                      called by ./FHEM/55_DWD_OpenData.pm (1371)
2020.06.15 16:49:27.160 1:     DWD_OpenData::IsCommuneUnionWarncellId called by ./FHEM/55_DWD_OpenData.pm (839)
2020.06.15 16:49:27.160 1:     DWD_OpenData::Shutdown              called by fhem.pl (3792)
2020.06.15 16:49:27.160 1:     main::CallFn                        called by fhem.pl (1816)
2020.06.15 16:49:27.160 1:     main::CommandShutdown               called by fhem.pl (710)
2020.06.15 16:49:27.160 1: PERL WARNING: Use of uninitialized value $warncellId in division (/) at ./FHEM/55_DWD_OpenData.pm line 1371.
2020.06.15 16:49:27.160 1: stacktrace:
2020.06.15 16:49:27.160 1:     main::__ANON__                      called by ./FHEM/55_DWD_OpenData.pm (1371)
2020.06.15 16:49:27.160 1:     DWD_OpenData::IsCommuneUnionWarncellId called by ./FHEM/55_DWD_OpenData.pm (839)
2020.06.15 16:49:27.160 1:     DWD_OpenData::Shutdown              called by fhem.pl (3792)
2020.06.15 16:49:27.160 1:     main::CallFn                        called by fhem.pl (1816)
2020.06.15 16:49:27.160 1:     main::CommandShutdown               called by fhem.pl (710)
2020.06.15 16:49:27.160 1: PERL WARNING: Use of uninitialized value $warncellId in division (/) at ./FHEM/55_DWD_OpenData.pm line 1371.
2020.06.15 16:49:27.160 1: stacktrace:
2020.06.15 16:49:27.160 1:     main::__ANON__                      called by ./FHEM/55_DWD_OpenData.pm (1371)
2020.06.15 16:49:27.160 1:     DWD_OpenData::IsCommuneUnionWarncellId called by ./FHEM/55_DWD_OpenData.pm (839)
2020.06.15 16:49:27.160 1:     DWD_OpenData::Shutdown              called by fhem.pl (3792)
2020.06.15 16:49:27.160 1:     main::CallFn                        called by fhem.pl (1816)
2020.06.15 16:49:27.160 1:     main::CommandShutdown               called by fhem.pl (710)
2020.06.15 16:49:27.160 1: PERL WARNING: Use of uninitialized value $warncellId in numeric eq (==) at ./FHEM/55_DWD_OpenData.pm line 1371.
2020.06.15 16:49:27.160 1: stacktrace:
2020.06.15 16:49:27.160 1:     main::__ANON__                      called by ./FHEM/55_DWD_OpenData.pm (1371)
2020.06.15 16:49:27.160 1:     DWD_OpenData::IsCommuneUnionWarncellId called by ./FHEM/55_DWD_OpenData.pm (839)
2020.06.15 16:49:27.160 1:     DWD_OpenData::Shutdown              called by fhem.pl (3792)
2020.06.15 16:49:27.160 1:     main::CallFn                        called by fhem.pl (1816)
2020.06.15 16:49:27.160 1:     main::CommandShutdown               called by fhem.pl (710)
2020.06.15 16:49:27.160 1: PERL WARNING: Use of uninitialized value $warncellId in numeric eq (==) at ./FHEM/55_DWD_OpenData.pm line 1371.
2020.06.15 16:49:27.160 1: stacktrace:
2020.06.15 16:49:27.160 1:     main::__ANON__                      called by ./FHEM/55_DWD_OpenData.pm (1371)
2020.06.15 16:49:27.160 1:     DWD_OpenData::IsCommuneUnionWarncellId called by ./FHEM/55_DWD_OpenData.pm (839)
2020.06.15 16:49:27.160 1:     DWD_OpenData::Shutdown              called by fhem.pl (3792)
2020.06.15 16:49:27.160 1:     main::CallFn                        called by fhem.pl (1816)
2020.06.15 16:49:27.160 1:     main::CommandShutdown               called by fhem.pl (710)

jensb

Danke für die super Analyse.

Da der Fehler beim Shutdown auftritt, ist die Lösung sogar noch einfacher, denn der Shutdown-Ablauf ist zum Abbrechen und Aufräumen vorgesehen. Im konkreten Fall gibt es aber bei der Vorhersage nichts aufzuräumen, sonst wäre die warncellId initialisiert - also kann man dann die Anweisungen überspringen.

Neue Version folgt ...
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

jensb

Es gibt eine neue Testversion des DWD OpenData Moduls (1.014006):

https://raw.githubusercontent.com/jnsbyr/fhem/develop/FHEM/55_DWD_OpenData.pm

Sie behebt folgende Fehler:

  • $warncellId nicht initialisiert bei FHEM Shutdown vor der 1. Vorhersageabfrage, @Christoph Morrison
  • Rotation der Vorhersagedaten wird nicht ausgeführt, wenn der Download vom DWD fehlschlägt
  • vorhandene Warnungen werden gelöscht, wenn der Download vom DWD fehlschlägt

Rückmeldungen sind erwünscht.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

rcmcronny

Hi Jens,

ich habs mal mit eingespielt, nach einem shutdown restart läuft erstmal alles wie bisher. Sieht also gut aus.
So als kurze Rückmeldung schonmal :)

Ronny

jensb

Danke für die Rückmeldung, das Update ist eingecheckt und wird ab Montag dem 22.06.2020 über FHEM zur Verfügung stehen.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

Joesky

Gibt es eine Möglichkeit, die Ausgabe des DWD_OpenData_Weblink (Generator) über Telegram zu verschicken?
_______________
FREI STATT BAYERN

jensb

@Joesky

Die Möglichkeiten des TelegramBots kenne ich selbst nicht, aber in der FHEM Wiki finden sich viele Hinweise. Je nach Wunsch könntest du z.B. mit notify oder at arbeiten. Ein Problem wird aber sein, dass das Modul DWD_OpenData_Weblink keine Readings hat, die man auslesen und dann versenden könnte. Die Daten selbst aus dem DWD_OpenData Modul zu gewinnen ist aber vergleichsweise aufwendig.

Falls es auch bunt sein darf, besteht noch die Möglichkeit, den Weblink von einem Browser rendern zu lassen, davon einen Screenshot zu ziehen und den dann zu versenden. Das geht wahrscheinlich auch ohne Display am Raspi, indem man ein Framebuffer-Device verwendet. Mal eben ist das aber sicher auch nicht gemacht.

Falls doch die Werte allein genügen würden, bleibt das Problem mit den fehlenden Readings beim DWD_OpenData_Weblink. Der Wunsch kam schon einmal vor einiger Zeit. Ich könnte mir das noch mal ansehen, um herausfinden, wie viel Aufwand es wäre, die Readings zu generieren.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

ch.eick

Hallo zusammen,

könnte mir jemand das Zauberwort für die Regenvorhersage nennen?
Für die Bewölkung habe ich Neff gewählt.

Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

mumpitzstuff

RR3c = regen
R600 = regenwahrscheinlichkeit

Im Wiki gibt es eine Anleitung für einen Plot, in dem sowas bereits enthalten ist.

ch.eick

Zitat von: mumpitzstuff am 14 September 2020, 10:57:25
RR3c = regen
R600 = regenwahrscheinlichkeit

Im Wiki gibt es eine Anleitung für einen Plot, in dem sowas bereits enthalten ist.
Okay, vielen Dank.
Für den Plot habe ich mich nicht interessiert und es deshalb wohl übersehen, da ich die Werte für die PV-Leistungsprognose benötige.

Viele Grüße
      Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick