[Modul] MeteoSchweizHagelwarnung / MeteoSchweizHagelradar – Hagelwarnungen für die Schweiz

Hallo zusammen

Ich habe zwei Module gebaut, um Hagel-/Gewitterwarnungen für die Schweiz in IP-Symcon abzubilden, und möchte sie hier vorstellen – über Feedback, Tests an anderen Standorten und Verbesserungsvorschläge würde ich mich sehr freuen.

Repo: https://github.com/mschmidi/meteoswiss-symcon (MIT-Lizenz)

Warum zwei Module?

Es gibt zwei unterschiedliche Ansätze mit unterschiedlichen Trade-offs, deshalb habe ich sie bewusst getrennt statt in ein Modul zu zwingen:

1. MeteoSchweizHagelwarnung – einfach, reines PHP

Fragt periodisch die Warnungs-API der offiziellen MeteoSwiss-App für eine konfigurierbare PLZ ab. MeteoSchweiz kennt keinen eigenen Warntyp für Hagel – das Risiko wird im Text der Gewitterwarnung mitgeteilt, das Modul wertet das entsprechend aus (mit Option, nur bei explizit erwähntem „Hagel“ zu reagieren).

  • Keine externen Abhängigkeiten, in einem Schritt installierbar

  • Nutzt allerdings eine inoffizielle, nicht dokumentierte Schnittstelle (reverse-engineered, Endpunkt/Struktur anhand bestehender Home-Assistant-/ioBroker-Integrationen verifiziert)

  • Variablen: Warnstufe, HagelAktiv, WarnText, Gültigkeitszeitraum

2. MeteoSchweizHagelradar – offizielle Radardaten, braucht einen Helper

Nutzt die offiziellen MeteoSchweiz-Radarprodukte POH (Hagelwahrscheinlichkeit) und MESHS (erwartete Hagelkorngrösse), bezogen über die FSDI-STAC-API von MeteoSchweiz Open Data. Da PHP kein HDF5 lesen kann, übernimmt ein separates Python-Skript (systemd-Timer, z. B. auf einem Raspberry Pi) Abruf und Auswertung und schreibt das Ergebnis in eine lokale JSON-Datei, die das Modul liest.

  • Präzisere, kontinuierliche Werte statt nur Ja/Nein, Standard-Schwellenwert 5 % POH

  • Standort wird komplett aus IP-Symcon gepflegt (automatisch aus dem Systemstandort übernommen), keine manuelle Datei-Konfiguration auf dem Host nötig

  • Bewusst kein Kandidat für den kuratierten Stable-Module-Store, da es einen extern zu installierenden Python-Helper braucht (systemd, Systembenutzer) – widerspricht einer „in einem Schritt installierbaren“ Store-Erfahrung. Über die eigene Modul-URL aber problemlos nutzbar.

Ausfallsicherheit – beide Module nach demselben Muster

Mir war wichtig, dass ich mich innerhalb von IP-Symcon zuverlässig darauf verlassen kann, ob der Schutz gerade funktioniert – ganz ohne Push/E-Mail-Mechanismen im Modul selbst, weil ich das lieber selbst mit eigenen Symcon-Ereignissen löse. Beide Module liefern dafür dieselben zwei Signale:

  • SchutzNichtGewaehrleistet wird bei jedem Durchlauf aktiv neu gesetzt (auch im Fehlerfall) – Abruf-/Parse-Fehler, veraltete Daten, kein Standort. HagelAktiv/HagelGefahr kann nur noch true werden, wenn dieses Signal false ist. Damit kann ein gestörtes System nie mehr fälschlich „keine Gefahr“ anzeigen, weil eine Variable einfach beim letzten guten Wert eingefroren wäre.

  • LetztePruefung ist ein reiner Herzschlag des jeweiligen Moduls, unabhängig vom Ergebnis. Grundlage für ein zweites, unabhängiges Watchdog-Ereignis, falls mal die Instanz/der Timer selbst aussteigen sollte – das kann ein Modul naturgemäss nicht selbst erkennen, wohl aber ein separates, davon unabhängiges Ereignis in Symcon.

Konkrete Beispiel-Ereignisse dafür stehen im README.

Installation

ModuleModule StoreMeine eigenen Module → URL hinzufügen:
https://github.com/mschmidi/meteoswiss-symcon

Details, Konfiguration, Beispiel-Ereignisse für die Überwachung und die vollständige Installationsanleitung für den Radar-Helper stehen im README bzw. in MeteoSchweizHagelradar/INSTALLATION.md.

Feedback gesucht

  • Wie überwacht ihr sonst bei euren Modulen, ob eine externe Schnittstelle noch funktioniert – gibt’s da etablierte Symcon-Patterns, die ich übersehen habe?

  • Ideen für weitere Warntypen (Wind, Regen, Schnee, Glatteis) sind ebenfalls willkommen

Danke fürs Anschauen!