DWD Unwetterwarnung (WFE, Mail und html)

Hi an alle (Un-)Wetterfreunde,

am WE ist spontan ein kleines Projektchen entstanden. Eigentlich wäre es gestern (24.06.2012) fertig gewesen, wenn Werner (wgreipl) nicht ständig was zu nörgeln gehabt hätte und immer wieder mit Änderungs- und Ergänzungswünschen gekommen wäre
Werner: herzlichen Dank für Deine Unterstützung an dieser Stelle :D:D:D.
Ausgangspunkt dieses „Projekts“ war das DWD- Warnscript von Ralf.

Intention:
Wird es heute Hagel geben? => stelle ich mein Auto besser in die Tiefgarage?
Ich hab keine Lust mehr, Morgens alle möglichen Wetterseiten durchzuwühlen, um einen Überlick über die heutige Wetterentwicklung zu bekommen. Viel lieber wäre mir -abhängig von Warnstatus des DWD für meine Region - Infomails mit gezielt aufbereiteten Informationen Morgens zum Wecken in der Mailbox haben. Und dann noch den aktuellen Warnlagebericht auf dem Android-Tablet direkt neben meinem Bett. Und dies möglichst nicht alle 5 Minuten. Mir reicht es, bei leichten Warnungen eine Ankündigungs-. und Abkündigungsmail zu bekommen. Bei schweren Unwettern hätte ich dies gern in kürzeren Intervallen. Ebenso will ich wissen, wenn sich die Dauer einer Warnung ändert.
Und top wäre, wenn noch weitere Infos in der Mail mitgeliefert werden (wie z.B. ein aktuelles Regenradar), ein Forecast für die kommenden 24h. Und optional das Ganze im WFE (aber nur, wenn ich zu Hause bin) … und wenn wir schon dabei sind: IPS könnte daraus auch einige Infos zur Haussteuerung übernehmen….und …und… ja, das wär’ was…

Features im Detail
Unwetterwarnungen (Mail)
• Bei Erreichen von DEFCON5 aus jedem anderen Status wird eine Mail verschickt
• Bei Warnstufe DEFCON3-4 wird nur bei Erreichen der Warnstufe eine Mail versandt
• Bei Warnstufe DEFCON 0-2 werden Mails im Intervall von 15-60 Minuten versandt
• Bei Veränderung der Warnphasendauer wird in jedem Fall eine Mail verschickt
• der Mailversand kann via Variable „Mailversand“ von anderen Scripts ein- und ausgeschaltet werden (z.B. Anwesenheitskontrolle, Wecker-Script etc.)
• Sowohl Mail als auch WFE können (abhängig vom DEFCON-Status) zusätzlich mit einem animierten Radarbild, DWD Warnkarte DE und SAT24-Foto DE kombiniert werden
• User kann angeben, ob das SAT-Foto bei Gewitterwarnmeldungen gegen eine Blitzkarte ausgetauscht wird (Variable „$Blitzkarte“ im Konfig-Bereich)
• Theoretisch beliebig viele Mailempfänger adressierbar

Unwetterwarnungen (WFE)
• Die Warnungen können durch manuell zu erstellenden Link im WFE dargestellt werden
• Die Konfiguration der Inhalte der HTML-Box kann unabhängig von der Mail-Konfiguration gemacht werden (RADAR-Pics ein/ausschalten)
• Die Aktualisierung erfolgt mit jedem Scriptlauf (also alle 5 Min)[/

optionale Komponenten

[INDENT]RADAR-Pics (optionaler Bestandteil der Unwetterwarnung)
• Für Mailversand und WFE-Ausgabe kann unabhängig voneinander definiert werden, ob die RADAR-Pics ausgegeben werden
• RADAR-Pics sind derzeit: Niederschlagsradar-Bild DE (Niederschlag und Blitz kombiniert), DWD Warnkarte DE und SAT-Foto (vis) SAT24.com (Standard, optional alternativ Wetteronline-Blitzkarte DE)
• Das SAT-Foto kann optional gegen die Wetteronline-Blitzkarte DE getauscht werden, wenn in den Warnmeldungen Gewitter angekündigt werden

WFE-PopUp
• Unabhängig von Mailversand und WFE-Darstellung kann der WFE-PopUp-Versand zugeschaltet werden (durch Angabe mindestens einer WFC-ID)
• Optional können mehrere WFC-IDs angegeben werden, an die PopUps (nach gleichen Regeln und Intervallen wie Mailversand) geschickt werden (ausgegeben wird der Inhalt der HTML-Box)
• Die WFC-ID’s werden (durch ein „;“ getrennt, Platzhalter sind möglich: „12345;;;23456“) in einer String-Variable („WFC IDs (PopUp)“) im Objektbaum hinterlegt, eine externe Steuerung (zu- und Abschalten einzelner WFEs) durch andere Scripte ist dadurch möglich

Warnlagebericht
Der Warnlagebericht des DWD ist ein Art Forecast für den aktuellen Tag /für die kommenden 24h und gibt einen Ausblick über in diesem Zeitraum zu erwartende (Un-)Wetterereignisse. Man kann sich hiermit also lange vor Eintreten der Ereignisse und tats. Unwetterwarnungen auf die kommende Wetterlage einstellen. Daher wird der Warnlagebericht per default 1x morgens per Mail verschickt (wenn entsprechend konfiguriert)
• Warnlagebericht des DWD kann für die jeweilige Region zugeschaltet werden (durch eintragen des Region-Codes im Konfig-Bereich des Scripts)
• Ist die Option „Warnlagebericht“ vom Anwender aktiviert worden (Region-Code gesetzt), ersetzt der Warnlagebericht die Unwetterwarnung im WFE und Mail bei Status DEFCON6 (=keine amtlichen Warnungen)
• Über eine Variable („Warnlagebericht“) im Objektbaum kann der Zeitpunkt definiert werden, bis zu dem der Versand erfolgen soll (Syntax „HH:ii“, leere Variable deaktiviert den Versand), dadurch ist auch hier eine Fremdsteuerung durch andere Scripte möglich (Anwesenheit, Urlaub, Wecker-Scripte etc.)

Grundfunktionen (Betrieb, Maintenance)
• Alle notwendigen Objekte werden automatisch vom Script angelegt (nur bei manueller Script-Ausführung!)
• Sind alle Objekte angelegt, läuft das Script alle 5Minuten im Operational-Mode (Warnmeldungen werden verarbeitet)
• Schnittstellen: Mailversand, WFE-PopUps und Warnlagebericht lassen sich durch Änderung der Variablenwerte durch Fremd- Scripte extern steuern, ebenso lassen sich Warnstatus (DEFCON) und Warntyp innerhalb von IPS durch Scripte Dritter auswerten, da definierte Integer-Werte in Variablen hinterlegt werden
• Das Script prüft bei jedem (manuellen) Lauf die Vollständigkeit aller Objekte. Fehlt ein Objekt, geht das Script in den Install-Modus und legt das Objekt an (Auto-Update).
• Keine Beschränkung auf Anzahl der zu überwachenden Standorte: pro Standort kann eine eigenständige Warnmodul-Instanz erstellt werden[/
[/INDENT]

Die Warn-Status im Einzelnen (Bild6):
DEFCON 6 = DWD keine Warnungen (blau), Mail 1x bei Erreichen von DEFCON6 (Warnmeldung aufgehoben)
DEFCON 5 = DWD UV-Warnung (magenta), Mail 1x bei Erreichen von DEFCON5
DEFCON 4 = DWD Hitzewarnung (schweinchenrosa), Mail 1x bei Erreichen von DEFCON4
DEFCON 3 = DWD Wetterwarnungen (gelb), Mail 1x bei Erreichen von DEFCON3
DEFCON 2 = DWD Warnungen vor markantem Wetter (orange), Mail 1x alle 60 Min
DEFCON 1 = DWD Unwetterwarnungen (rot), Mail 1x alle 15 Min
DEFCON 0 = DWD Warnungen vor extremem Unwetter (violett), Mail 1x alle 15 Min

Voraussetzungen

[ul]
[li]Lauffähig ab IPS v2.5
[/li][li]Es muss der [PHP-Mailer 5.1](http://sourceforge.net/projects/phpmailer/files/phpmailer for php5_6/PHPMailer v5.1/PHPMailer_v5.1.zip/download) installiert sein, hierzu sind lediglich 2 Files aus dem Download in den IPS-Scriptordner zu legen: class.smtp.php, class.phpmailer.php
[/li][/ul]

Scriptfunktionen (Architektur)
18596 php_mailer_connector.ips.php
• Dient als Kommunikationsschnittstelle zwischen Unwetter-Script und php-Mailer
• Enthält zentrale Konfig-Daten (Mailserver, Mailaccount etc)
• Kann von beliebig vielen Unwetter-Scripts (und auch durch Scripte Dritter) angesteuert werden

13687 DWD Unwetterwarnung.ips.php
• Enthält alle Konfig-Daten und Verarbeitungslogiken für einen (Unwetter-)Standort
• Kann für beliebig viele Standorte verwendet werden (bei mehreren Standorten jeweils einen eigenen IPS-Ordner pro Standort anlegen)

Installation
• Das Script „18596 php_mailer_connector.ips.php“ aus dem .zip-File an eine beliebige Stelle im Objektbaum einbauen und mit den eigenen Zugangsdaten für einen Mailserver versehen
• Im IPS einen Ordner (=„Kategorie“) freier (Namens-)Wahl anlegen (keine Namenskonvention)
• In diesem Ordner ein Script anlegen und den Inhalt des Scripts „13687 DWD Unwetterwarnung.ips.php“ reinkopieren
• Im Script die Konfiguration durchführen (die Kommentare im Script sollten die Bedeutung ausreichend erläutern)
• Das Script einmalig manuell ausführen. Es werden die Objekte lt. Bild7 angelegt und konfiguriert
• fertig

Vom Script werden automatisch alle Variablen angelegt, profiliert und mit Default-Werten versehen. Erst bei einem erneuten Script-Lauf (manuell oder automatisch) werden auch die aktuellen DWD-Meldungen verarbeitet.
wer will, kann sich einen Link (z.B. von der Dummy-Instanz) an eine beliebige Stelle ins WFE legen (Bild2)

Mailversand testen

[ul]
[li]entweder den DEFCON-Status oder den „gültig bis“-Timestamp (mind. 3600sec!) manuell ändern
[/li][li]dann das Unwetter-Script starten
[/li][li]ein mailversand wird vom Unwetterscript initialisiert
[/li][li]bitte im Meldungsfenster (oder im IPS-Logger - wenn installiert) die Meldungen vom Unwetterscript beobachten. Fehler im Mailversand liegen zunächst in der falschen Konfiguration des PHP-Mailer -Connectors
[/li][/ul]

Updates
siehe Changelog

AddOns

[ul][li]Prowl-Modul für das Unwetterscript von Grisu
[/li][/ul]

DWD Unwetterwarnung 2012-07-04 II.zip (1.25 MB)

Changelog.txt (4.2 KB)

DWD Unwetterwarnung 2012-07-14.zip (1.55 MB)

Gratuliere :smiley: :smiley:

Eigentlich wäre es gestern fertig gewesen, wenn Werner (wgreipl) nicht ständig was zu nörgeln gehabt hätte und immer wieder mit Änderungs- und Ergänzungswünschen gekommen wäre.
Werner: herzlichen Dank für Deine Unterstützung an dieser Stelle :D:D:D.

In beiden Punkten, immer wieder gerne :smiley:

War eine interessante Zusammenarbeit.

Muss sagen bin echt begeistert von dem Projektchen.

Funktioniert 1A. Sehr schick :slight_smile:

Für alle IPSLibrary User:

include 	IPS_GetKernelDir()."scripts/IPSLibrary/app/core/IPSLogger/IPSLogger.inc.php";

So, habe es mal installiert. Bekomme aber einen Fehler im php_mailer_connector siehe Anhang. Zeile 30 wäre dann,

$mail->AltBody = $_IPS[„plaintext“];

DWD Unwetterwarnung sollte bestimmt als Profil „~HTMLBox“ bekommen, müsste vlt. mal im Skript geändert werden. Oder nachträglich ändern.:slight_smile:

Hi Uwe, da ist mir wohl was beim Testen durchgerutscht. kommentier mal die Zeile 30 aus, dann sollte es funktionieren (bei mir tut es)

korrekt, wird in der kommenden Version angepasst

Ich habs mir jetzt noch nicht näher angesehen, aber an Stelle des Mailers dürfte auch Prowl zu verwenden sein, oder? :loveips:

wenn du es einbinden kannst, sicher;)

Gucke ich mir die Tage genauer an :wink:

Hi Leute,

Super Projekt, funktioniert 1A!

Zwei Anmerkungen von mit, quasi meine 2 Cents :smiley:

A) da der DWD bei extremen Wettersituationen die Website ändert, wäre es nicht sinnvoll die Unwetterwarnungen vom FTP Server zu holen? Für die Grundversorgung beim DWD anmelden ist ja kein Problem …

B) wäre es möglich, dass man den Warngrund in eine Varibale schreibt - ich würde bei Sturm dann doch gerne anders als bei Hitzewarnung reagieren.

Grüße

Andreas

guter Punkt, das lass ich mir mal durch den Kopf gehen

auch ein Punkt, den man sicherlich umsetzen kann;)

kleines Update im ersten Posting :wink:

Bitte den Punkt „Updates“ besonders beachten!

Hallo Raketenschnecke,

tolles Script, soweit läuft es bei mir auch aber das php-mailer script wird bei mir als Fehlerhaft makiert.
Gibt es eine Möglichkeit festzustellen was nicht i.O. ist ?

ohne weitere Infos wird es schwierig. kannst du Infos aus dem Meldungsfenster, besser noch aus dem Log schicken? ggf. per PM?

Du hast aber schon die Zugangsdaten zum Mailserver (Im PHPMailer-Script) konfiguriert, oder?

Aus welchem LOG ?

dem IPS-log

Ich habe mal reingeschaut, kann sich nicht mit dem Mailserver verbinden.

Und email kann ich auch nicht versenden, scheint also ein Problem bei mir zu sein.
Ich melde mich nochmal falls ich den Fehler nicht finde.

Trotzdem danke.

Hallo Raketenschnecke,

ich hatte ja schon 2 Anmerkungen und habe diese weiter verfolgt - mit Deinem Update hast Du das ja schon zum Teil umgesetzt :wink:

Auf dem DWD-FTP-Server gibt es schöne XML-Files der Warnungen.

Für meinen Standort sieht eine Warnung z.B. so aus:


<alert xmlns="urn:oasis:names:tc:emergency:cap:1.2">
  <identifier>2.49.0.1.276.DWD.OMEDES.1340583313070.12</identifier>
  <sender>CAP@dwd.de</sender>
  <sent>2012-06-25T00:14:00+00:00</sent> 
  <status>Actual</status>
  <msgType>Cancel</msgType>
  <source>OMEDES</source>
  <scope>Public</scope>
  <info>
    <language>de-DE</language>
    <category>Met</category>
    <event>WINDBÖEN</event>
    <responseType>None</responseType>
    <urgency>Immediate</urgency>
    <severity>Severe</severity>
    <certainty>Observed</certainty>
    <eventCode>
      <valueName>II</valueName>
      <value>51</value>
    </eventCode>
    <effective>2012-06-25T00:14:00+00:00</effective>
    <onset>2012-06-24T17:52:00+00:00</onset>
    <expires>2012-06-25T02:00:00+00:00</expires>
    <senderName>DWD / RZ München</senderName>
    <headline>AUFHEBUNG der WARNUNG vor WINDBÖEN</headline>
    <description>
Die Wetterwarnung vor Windböen, ausgegeben vom Deutschen Wetterdienst am Sonntag, 24.06.12, 19:52 Uhr, wird am Montag, 25.06.12, 02:14 Uhr aufgehoben.
    </description>
    <instruction/>
    <web>http://www.wettergefahren.de</web>
    <contact>Deutscher Wetterdienst</contact>
    <area>
      <areaDesc>Rhein-Neckar-Kreis und Stadt Heidelberg</areaDesc>
      <geocode>
        <valueName>CELLIDS</valueName>
        <value>08221,08226</value>
      </geocode>
      <geocode>
        <valueName>LEVELTEXT</valueName>
        <value/>
      </geocode>
    </area>
  </info>
</alert>

Die sollte sich besser parsen lassen, als die Text-Files.

hier auch schon ein kleiner Code-Schnipsel, wie Du an die Dateien kommst:


$FTPServer   = "ftp-outgoing2.dwd.de";
$FTPUser     = "gdsxxxxx";
$FTPPasswort = "abcdefgh";

// diese 2 Variablen anpassen

$OrtCode = "HDX";
$DWDStandort = "SU";

// EM = Nordrhein-Westfalen
// HA = Hamburg, Bremen, Niedersachsen
// LZ = Sachsen-Anhalt, Sachsen, Thüringen
// MS = Bayern
// OF = Hessen, Rheinland-Pfalz, Sarland
// PD = Mecklenburg-Vorpommern, Berlin, Brandenburg
// SU = Baden-Württemberg


$Verzeichnis = "gds/specials/warnings/xml/".$DWD-Standort."/";

$VerbindungsID = ftp_connect($FTPServer);
$LoginErgebnis = ftp_login($VerbindungsID, $FTPUser, $FTPPasswort);

ftp_pasv($VerbindungsID, true);

if($VerbindungsID && $LoginErgebnis)
{
    $Dateiliste = ftp_nlist($VerbindungsID, $Verzeichnis);
	foreach($Dateiliste AS $Datei)
	{
		$meineRegion = strpos($Datei,"_".$OrtCode);
		if (! $meineRegion === FALSE )
		{
			$meineWarnings[] = $Datei;
		}
	}
}
else
{
    echo"Es konnte keine Verbindung mit dem FTP-Server hergestellt werden.";
}

print_r($meineWarnings);


im Array ist dann der komplette Download-Pfad, wie z.B.


Array
(
    [0] => gds/specials/warnings/xml/SU/Z_CAP_C_EDZW_20120625001513_OMEDES_WWSU51_HDXX.xml
)

Was ist noch nicht herausgefunden habe ist, ob der Standort des zuständigen DWD immer gleich ist - ich meine ich hätte auch schon Warnmails vom DWD München erhalten und ob ich diese Meldungen dann im Ordner MS finden würde - aber das finde ich noch raus :wink:

Grüße

Andreas

Total vergessen :wink:

auf de, FTP-Server gibs für jeden DWD-Standort eine schöne Karte unter

gds/specials/warnings/maps/SchilderSU.jpg

Bsp. im Anhang

Grüße

Andreas

Hi Andreas,

denke für den Input. Ich hab mal meine Grübel-Instanz auf das Thema angesetzt: ich bin noch nicht so richtig überzeugt von der FTP-Lösung. M.E. ist diese potenziell noch fehleranfälliger als die Webseite: während der FTP-Server irgend ein Limit hat (welches recht häufig erreicht wird), ist der Webserver eher nur bei extremen Wetterlagen platt (und zwar dann, wenn die privaten Wetterfrösche feststellen, dass es draussen dunkel wird, obwohl die Uhr 12 sacht - und dann alle wie auf Kommando den Webserver überfallen). Mit etwas Glück ist der Download mit den Daten schon längst erfolgt und die Daten liegen bereits lokal.
Ich grübel aber weiter, Pro- und Kontra-Meinungen können hier gern ausgebreitet werden :wink:

PS: zu den Warnmeldungen (ich habe meinen Zugang für den DWD FTP-Server grad nicht auf dem lokalen Rechner und kann nicht nachschauen): liegen dort alle Warnmeldungen als Templates oder wie muss man sich das vorstellen?