roe-dl / weewx-DWD

Darstellung von Wettersymbolen in WeeWX sowie Vorhersage- und Warndaten herunterladen und für WeeWX und Web-Darstellung aufbereiten
GNU General Public License v3.0
19 stars 4 forks source link

Nach reboot funktioniert cheetahgenerator bei bio Wetter nicht mehr #78

Open olwaldi opened 2 days ago

olwaldi commented 2 days ago

Mysteriöses Verhalten: Mußte heute für Arbeiten am Stromnetz meinen Raspberry frisch booten. Nach dem Neustart lief weewx zwar, konnt aber index.html.tmpl nicht mehr verarbeiten:

Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: Evaluation of template /etc/weewx/skins/Seasons_DWD/index.html.tmpl failed with exception '<class 'TypeError'>'
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: **** Ignoring template /etc/weewx/skins/Seasons_DWD/index.html.tmpl
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: **** Reason: 'UnknownObsType' object is not subscriptable
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****  Traceback (most recent call last):
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****    File "/usr/share/weewx/weewx/cheetahgenerator.py", line 334, in generate
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****      unicode_string = compiled_template.respond()
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****    File "_etc_weewx_skins_Seasons_DWD_index_html_tmpl.py", line 223, in respond
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****    File "/usr/lib/python3/dist-packages/Cheetah/Template.py", line 1708, in _handleCheetahInclude
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****      self._CHEETAH__cheetahIncludes[_includeID].respond(trans)
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****    File "_etc_weewx_skins_Seasons_DWD_dwd_bio_inc.py", line 116, in respond
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****    File "/usr/share/weewx/weewx/units.py", line 1096, in raw
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****      return self.value_t[0]
Okt 16 11:40:25 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****  TypeError: 'UnknownObsType' object is not subscriptable
Okt 16 11:40:33 imurr9 ntpd[667]: 131.188.3.220 local addr 192.168.178.49 -> <null>
Okt 16 11:41:09 imurr9 weewxd[813]: ERROR weewx.restx: StationRegistry: Failed to publish record 2024-10-16 11:40:00 CEST (1729071600): HTTP Error 429: TOO MANY REQUESTS
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: Evaluation of template /etc/weewx/skins/Seasons_DWD/index.html.tmpl failed with exception '<class 'TypeError'>'
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: **** Ignoring template /etc/weewx/skins/Seasons_DWD/index.html.tmpl
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: **** Reason: 'UnknownObsType' object is not subscriptable
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****  Traceback (most recent call last):
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****    File "/usr/share/weewx/weewx/cheetahgenerator.py", line 334, in generate
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****      unicode_string = compiled_template.respond()
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****    File "_etc_weewx_skins_Seasons_DWD_index_html_tmpl.py", line 223, in respond
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****    File "/usr/lib/python3/dist-packages/Cheetah/Template.py", line 1708, in _handleCheetahInclude
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****      self._CHEETAH__cheetahIncludes[_includeID].respond(trans)
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****    File "_etc_weewx_skins_Seasons_DWD_dwd_bio_inc.py", line 116, in respond
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****    File "/usr/share/weewx/weewx/units.py", line 1096, in raw
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****      return self.value_t[0]
Okt 16 11:45:26 imurr9 weewxd[813]: ERROR weewx.cheetahgenerator: ****  TypeError: 'UnknownObsType' object is not subscriptable
Okt 16 1

Nach mehreren Versuchen hat's wieder geklappt, ohne daß ich irgendeine Skin-Datei geändert hätte.

ABER: Während der "Problemzeit" hat cron ein neues health-biowetter-I.inc runtergeladen. Daher könnte ich mir vorstellen, daß irgendein Sonderzeichen im alten health-biowetter-I.inc gestört haben mag. Leider ist das alte File mittlerweile überschrieben.

Die DWD-Skripte sind Stand von Anfang August 2024 (leider ohne Versionsinfo, da als zip downgeladen).

roe-dl commented 2 days ago

Das ist ein sehr schwer zu findender Fehler, der nichts mit der Erweiterung sondern etwas mit dem Template zu tun hat. Irgendwo innerhalb von index.html.tmpl gibt es einen Zugriff auf eine Meßgröße (observation type), die zu dieser Zeit nicht definiert war. Das kann zum Beispiel im Zusammenhang mit .raw sein. Alle diese Zugriffe muß man überall sauber mit #if auf Gültigkeit prüfen oder in #try - #except - #end try einschließen. Das ist eine nervige Fleißarbeit, wenn die Datei lang ist.

Mit Sonderzeichen innerhalb der *.inc hat es auf jeden Fall nichts zu tun. Das sieht man an der Fehleremldung return self.value_t[0]. Dort wird versucht, auf den Zahlenwert einer Meßgröße zuzugreifen. Bei einer unbekannten Meßgröße (UnknownObsType) geht das natürlich nicht.

olwaldi commented 1 day ago

Danke für die schnelle Rückmeldung. Von der Fehlermeldung her hängt's wohl tatsächlich mit irgendwas Undefiniertem zusammen. Aber warum verschwindet der Fehler nach einiger Zeit? Ca. 20min nach dem Reboot funktionierte ja wieder Alles ohne Änderung (habe nur 2..3x weewx neu gestartet).Andererseits greife ich auch auf den ein oder anderen Wert .raw "ungeschützt" zu. Womöglich gabs noch gar keine health-Daten?Von meinem Huawei-Tablet gesendet-------- Originalnachricht --------Betreff: Re: [roe-dl/weewx-DWD] Nach reboot funktioniert cheetahgenerator bei bio Wetter nicht mehr (Issue #78)Von: roe-dl An: roe-dl/weewx-DWD Cc: olwaldi ,Author Das ist ein sehr schwer zu findender Fehler, der nichts mit der Erweiterung sondern etwas mit dem Template zu tun hat. Irgendwo innerhalb von index.html.tmpl gibt es einen Zugriff auf eine Meßgröße (observation type), die zu dieser Zeit nicht definiert war. Das kann zum Beispiel im Zusammenhang mit .raw sein. Alle diese Zugriffe muß man überall sauber mit #if auf Gültigkeit prüfen oder in #try - #except - #end try einschließen. Das ist eine nervige Fleißarbeit, wenn die Datei lang ist. Mit Sonderzeichen innerhalb der *.inc hat es auf jeden Fall nichts zu tun. Das sieht man an der Fehleremldung return self.value_t[0]. Dort wird versucht, auf den Zahlenwert einer Meßgröße zuzugreifen. Bei einer unbekannten Meßgröße (UnknownObsType) geht das natürlich nicht.

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.> [ { @.": "http://schema.org", @.": "EmailMessage", "potentialAction": { @.": "ViewAction", "target": "https://github.com/roe-dl/weewx-DWD/issues/78#issuecomment-2416451437", "url": "https://github.com/roe-dl/weewx-DWD/issues/78#issuecomment-2416451437", "name": "View Issue" }, "description": "View this Issue on GitHub", "publisher": { @.***": "Organization", "name": "GitHub", "url": "https://github.com" } } ]

roe-dl commented 1 day ago

Aber warum verschwindet der Fehler nach einiger Zeit? Ca. 20min nach dem Reboot funktionierte ja wieder Alles ohne Änderung (habe nur 2..3x weewx neu gestartet).Andererseits greife ich auch auf den ein oder anderen Wert .raw "ungeschützt" zu. Womöglich gabs noch gar keine health-Daten?

Das ist durchaus möglich. Die Daten werden nicht bei jedem Archivierungszyklus abgefragt, weil sie vom DWD nur einmal am Tag bereitgestellt werden, nämlich um 11:00 Uhr. Die Gültigkeit der Vorhersagen beginnt um 0:00 Uhr und 12:00 Uhr. Deswegen werden die *.inc-Dateien nur dreimal am Tag berechnet, jeweils im Archivierungszyklus nach diesen drei Uhrzeiten.

BTW: Ist diese Seasons_DWD-Skin irgendwo öffentlich erhältlich?

olwaldi commented 1 day ago

Wäre das ein möglicher Weg in meinem Skin (nicht ausprobiert, da Fehler ja nicht reproduzierbar):

  <div class="widget_contents">
    #set $thermalstress = $getVar("current.biowetterExpectedThermalStress.raw", 5)

Habe das $getVar eingefügt.

Ich nutze den Skin Seasons_DWD rein privat auf meinem Raspberry, d.h. weder die generierten HTMLs werden ins Internet exportiert, noch liegt der Skin Seasons_DWD irgendwo auf GIT. Bei Interesse kann ich aber gern ein zip vom Skin hier anhängen (~2MB groß). Seasons_DWD ist aber stark auf meine Bedürfnisse zugeschnitten (z.B. direkte Links auf den Wasserpegel des nahen Bachs).

roe-dl commented 1 day ago

Wäre das ein möglicher Weg in meinem Skin (nicht ausprobiert, da Fehler ja nicht reproduzierbar):

Ich glaube, $getVar genügt nicht. Und wenn ich mich recht erinnere, kann man das .raw dort auch nicht in den String hineinnehmen sondern muß es hinten dranschreiben.

Die Varianten wären an Hand des genannten Beispiels wie folgt:

#try
#set $thermalstress = $current.biowetterExpectedThermalStress.raw
#except Exception
#set $thermalstress = None
#end try

oder

#if $current.biowetterExpectedThermalStress.has_data
#set $thermalstress = $current.biowetterExpectedThermalStress.raw
#else
#set $thermalstress = None
#end if

Wobei ich mir bei dem has_data nicht sicher bin.

Ich nutze den Skin Seasons_DWD rein privat auf meinem Raspberry, d.h. weder die generierten HTMLs werden ins Internet exportiert, noch liegt der Skin Seasons_DWD irgendwo auf GIT.

Wäre das nicht einmal ein Projekt, das von den ganz persönlichen Anteilen zu entschlacken und dann zu veröffentlichen? Gern auch als Beispiel unter weewx-DWD.

Übrigens war auch weewx-DWD zunächst ein ganz privates Projekt, und erst auf wiederholte Bitten habe ich es überhaupt veröffentlicht. Inzwischen ist es eine richtige WeeWX-Erweiterung geworden.

olwaldi commented 1 day ago

Danke für den Tip - nutze jetzt das #try.

Bzgl. Veröffentlichen: Da stellt sich mir die Henne-Ei-Frage, ob überhaupt jemand das modifizierte Seasons nutzen würde. Schließlich muß auch weewx selber gepatchet werden (meinen Erweiterungswunsch an weewx hat der Autor leider abgelehnt).

roe-dl commented 1 day ago

Bzgl. Veröffentlichen: Da stellt sich mir die Henne-Ei-Frage, ob überhaupt jemand das modifizierte Seasons nutzen würde.

Das weiß man nie vorher. Es sind schon Bücher zu Bestsellern geworden, die kein Verlag haben wollte. Oder umgekehrt zu Flops, die in renommierten Verlagen erschienen sind.

Schließlich muß auch weewx selber gepatchet werden (meinen Erweiterungswunsch an weewx hat der Autor leider abgelehnt).

Das ist in der Tat eine Hürde. Und Tom Keffer von etwas zu überzeugen, ist wirklich keine leichte Aufgabe. Worin bestand denn der Erweiterungswunsch, wenn ich fragen darf?

olwaldi commented 1 day ago

Das weiß man nie vorher. Es sind schon Bücher zu Bestsellern geworden, die kein Verlag haben wollte. Oder umgekehrt zu Flops, die in renommierten Verlagen erschienen sind.

Stimt natürlich.

Schließlich muß auch weewx selber gepatchet werden (meinen Erweiterungswunsch an weewx hat der Autor leider abgelehnt).

Das ist in der Tat eine Hürde. Und Tom Keffer von etwas zu überzeugen, ist wirklich keine leichte Aufgabe. Worin bestand denn der Erweiterungswunsch, wenn ich fragen darf?

Klar - siehe https://github.com/weewx/weewx/pull/905 Ist rückwärtskompatibel und sind nur 2..3 Zeilen Code.

roe-dl commented 21 hours ago

Tom Keffer schreibt dort

Don't get discouraged!

Das klingt nicht direkt nach Ablehnung. Aber auch mich hat er damals gezwungen, eine zweite WeeWX-Installation aufzusetzen, damals mit Python 2.7, und zu testen, daß die Änderungen funktionieren. Das obliegt ganz offensichtlich demjenigen, der einen PR einreicht.

olwaldi commented 4 hours ago

Ursprünglich hatte ich nur vorgeschlagen, meine 2..3 Zeilen Code direkt zu übernehmen, um mir den Aufwand mit git/clonen u.Ä. zu ersparen. Stattdessen sollte ich seinen Entwicklungprozeß einhalten (was ich schon verstehe). Letzendlich hat er aber meine Änderung abgelehnt, obwohl (nachdem) ich alle seine Forderungen umgesetzt habe.

"Schlimm" ist das auch wieder nicht - so muß ich eben jede neue weewx-Version für meine Nutzung patchen.

Zurück zu meinem Skin Seasons_DWD: Kann ich gern irgendwohin (wohin?) uploaden und eine Anleitung zur Nutzung schreiben (crontab, weewx.conf, skins/Seasons_DWD/{.,dwd}). Aber ich möchte schon erneuten Aufwand mit git vermeiden.