DWD Wetterdaten (FTP)

Wie an anderer Stellegewünscht, dann mal ein erstes Bastelscript und die notwendigen Infos zur Basis.

==> Registrierung beim DWD

Es gibt folgende Bilder zur Auswahl, die jeweils ca. 280-320 kB groß sind:
Deutschland
Mitte
Nordost
Nordwest
Ost
Suedost
Suedwest
West

und die jeweils als
*_heute_frueh.jpg
*_heute_mittag.jpg
*_heute_nacht.jpg
*_heute_spaet.jpg
*_morgen_frueh.jpg
*_morgen_spaet.jpg
*_tag4_frueh.jpg
*_tag4_spaet.jpg
*_ueberm_frueh.jpg
*_ueberm_spaet.jpg

Die Bilder werden üblicherweise um 04:33, 10:33, 16:33 und 18:33 bereitgestellt, deshalb zwei verschiedene Timer im Script.

Da ich die Bilder im Dashboard verwende und nicht ausreichend Platz habe müssen sie etwas kleiner werden. Die Größenanpassung im IPS ist leider nicht so schön, deshalb nutze ich eine PHP Funktion smart_resize_image.

Den Timerteil habe ich gerade noch zurecht gebogen, Ich hoffe, dass läuft auch so.


<?php
// reine Vorsichtsmassnahme, falls es mal länger dauert
ini_set( 'max_execution_time', 60);

// FTP Zugangsdaten vom DWD eintragen
define ('dwd_kennung', 'xxx');
define ('dwd_passwort', 'yyy');

$Ereignisse = Array('');
	
// Beim manuellen Ausführen werden die Timer angelegt
if ($_IPS['SENDER'] == "Execute") {
	$Ereignisse = IPS_GetScriptEventList($_IPS['SELF']);
	// Wenn es noch keine Ereignisse gibt, dann anlegen
	if (!sizeof($Ereignisse)) {
		// Alle 6 Stunden zwischen 04:40 und 16:45
		// Bilder werden üblicherweise um 04:33, 10:33, 16:33 aktualisiert
		$EreignisID = IPS_CreateEvent(1);
		IPS_SetParent($EreignisID, $_IPS['SELF']);
		IPS_SetEventCyclic($EreignisID, 0 /* Keine Datumsüberprüfung */, 0, 0, 2, 3 /* stündlich */ , 6 /* Alle 6 Stunden */);
		//Als Startzeit 04:40 dem Ereignis zuordnen
		IPS_SetEventCyclicTimeFrom($EreignisID, 4, 40, 0);
		//Als Endzeit 18:45 dem Ereignis zuordnen
		IPS_SetEventCyclicTimeTo($EreignisID, 16, 45, 0);
		IPS_SetEventActive($EreignisID, true);
		
		// Täglich um 18:40
		// Und eine letzte Aktualisierung üblicherweise um 18:33
		$EreignisID = IPS_CreateEvent(1);
		IPS_SetParent($EreignisID, $_IPS['SELF']);
		IPS_SetEventCyclicTimeFrom($EreignisID, 18, 40, 0);
		IPS_SetEventActive($EreignisID, true);
			}
}

$quelle = 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/forecasts/maps/germany/';
// Folgendes Muster entsprechend anpassen, die Auswahl beim DWD stellt folgende Bilder bereit
// Deutschland, Mitte, Nordost, Nordwest, Ost, Suedost, Suedwest, West
$pattern = 'Nordwest_*';
$ziel = IPS_GetKernelDir().'/Media/Wetter/DWD/';

// Dateinamen im Quellpfad gemäss Pattern in ein Array laden
$array = @scandir($quelle.$pattern);
if ($_IPS['SENDER'] == "Execute") {
	print_r($array);
	echo "
-----
";
}

if ($array){
	for ( $i = 0; $i < sizeof ( $array ); $i++ ) {
	   // holen der Bilder und speichern als "org_*"
		copy( $quelle.$array[$i], $ziel."org_".$array[$i]);
		// kurz warten, damit das Bild auch wirklich gespeichert ist
		// Ohne sleep waren die Bilder manchmal noch gelockt
		IPS_Sleep(500);
		// Bildgröße anpassen
		smart_resize_image($ziel."org_".$array[$i], null, 324, 300, false, $ziel.$array[$i], false, false, 100 );
		if ($_IPS['SENDER'] == "Execute") {
   		echo $array[$i]." bearbeitet
-----
";
		}
	}
}

?>

Update
Im PHP noch zwei


IPS_SetEventActive($EreignisID, true);

eingefügt.

In der Doku steht das leider nur im ersten Beispiel dabei.

Ein weiteres Beispiel zum DWD Warnlageberichte.

Die Doku zu den bereitgestellten Daten findet man unter
ftp://dwd_kennung:dwd_passwort@ftp-outgoing2.dwd.de/gds/gds/specials/legend_basic_service_level.pdf

Ich bereite einen kompletten HTML String für meine Darstellung im Browser Element des Dashboard auf.

Die ganzen String Operationen sind eigentlich nicht notwendig, wenn man einfach den Originaltext nehmen würden ;-).
Das ist auch noch nicht zuverlässig, je nach Bearbeiter beim DWD sieht der Text unterschiedlich aus :(.

<?
define ('dwd_kennung', 'xxx');
define ('dwd_passwort', 'yyy');

$id_html = 54521 /*[Wetter\Unwetterzentrale\UnwetterWarnungNiedersachsen\UnwetterWarnungNiedersachsen]*/; 
$id_simple = 26884 /*[Wetter\Unwetterzentrale\UnwetterWarnungNiedersachsen\UnwetterWarnungNiedersachsen Simple]*/;
$warnung = "";

// Doku zu den bereitgestellten Daten unter
// ftp://dwd_kennung:dwd_passwort@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/legend_warnings.pdf
// Die ausgebende Stelle (hier "HA") entsprechend anpassen
$quelle = 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/HA/';
// Folgendes Muster entsprechend anpassen
$pattern = 'VHDL30_DWHG*';

// Beim manuellen Ausführen werden die Timer angelegt, wenn es KEINE Timer gibt
if ($_IPS['SENDER'] == "Execute") {
	$Ereignisse = IPS_GetScriptEventList($_IPS['SELF']);
	if (!sizeof($Ereignisse)) {
		// Aktualisierungen üblicherweise um 04:30, 06:30, 14:30 und 20:30
		// Timer Täglich jeweils 5 Minuten später
		$EreignisID = IPS_CreateEvent(1);
		IPS_SetParent($EreignisID, $_IPS['SELF']);
		IPS_SetEventCyclicTimeFrom($EreignisID, 4, 35, 0);
		IPS_SetEventActive($EreignisID, true);
		$EreignisID = IPS_CreateEvent(1);
		IPS_SetParent($EreignisID, $_IPS['SELF']);
		IPS_SetEventCyclicTimeFrom($EreignisID, 6, 35, 0);
		IPS_SetEventActive($EreignisID, true);
		$EreignisID = IPS_CreateEvent(1);
		IPS_SetParent($EreignisID, $_IPS['SELF']);
		IPS_SetEventCyclicTimeFrom($EreignisID, 14, 35, 0);
		IPS_SetEventActive($EreignisID, true);
		$EreignisID = IPS_CreateEvent(1);
		IPS_SetParent($EreignisID, $_IPS['SELF']);
		IPS_SetEventCyclicTimeFrom($EreignisID, 20, 35, 0);
		IPS_SetEventActive($EreignisID, true);
	}
}

// Dateinamen im Quellpfad gemäss Pattern in ein Array laden, (, 1) = Sortierung rückwärts
$array = @scandir($quelle.$pattern, 1);

// arry[0] = nur die letzte Datei laden
$s = file_get_contents( 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/HA/'.$array[0] );
if( empty($s) )
   {  IPS_LogMessage( IPS_GetName($_IPS['SELF']), "can't get url content");   return;  }

// Alle Leerzeilen löschen
$s = preg_replace("/(^[
]*|[
]+)[\s	]*[
]+/", "
", $s);

$a = explode( "
", $s);   // Array aus der Meldung erstellen
$delete = array_shift($a); // erste Zeile mit Sonderzeichen löschen
$delete = array_pop($a); 	// letzte Zeile mit Sonderzeichen löschen

if ($_IPS['SENDER'] == "Execute")
	print_r($a);

// div. Anpassungen/Formatierungen bzw. unterdrücken von Texten
while ( list ( $key, $current ) = each ( $a ) ) {
	if ( substr_count( $current, "VHDL30 DWHG" )) {
	   $current = '';
	}
	if ( substr_count( $current, "WARNLAGEBERICHT für" )) {
	   $current = '';
	}
	if ( substr_count( $current, "Niedersachsen und Bremen" )) {
	   $current = '';
	}
	if ( substr_count( $current, "Wetterdienst" )) {
	   $current = '';
	}
	// manchmal ist ein Doppelpunkt zuviel
	$current = str_replace( 'Uhr:', 'Uhr', $current);
	// Darstellung Ausgabedatum anpassen und Dateinamen anhängen
	// (Zeile fängt mit "am" an und hört mit "Uhr" auf
	if ( preg_match( '(^am.*Uhr$)', $current )) {
		$current = '<span style="font-size:11px;">'.$current.' '.$array[0].'<br /><br /></span>';
	}
	// Zeilenumbruch einfügen nach dem Entwicklungsdatum
	// (Zeile fängt mit "bis" an und hört mit "Uhr" auf
	if ( preg_match( '(^bis.*Uhr$)', $current )) {
		$current = $current.'</b><br />';
	}
	// Darstellung Zwischenüberschrift anpassen (Zeile endet mit ":" oder ": "
	if ( preg_match( '(:$|: $)', $current )) {
		$current = '<br /><b>'.$current;
		$current = preg_replace( '(:$|: $)', '</b><br />', $current);
	}
	if ( substr_count( $current, "Uhr" )) {
		$current = str_replace( 'Uhr', '', $current);
	}
	if ( substr_count( $current, "Nächste Aktualisierung" )) {
		$current = '<br /><br />'.$current.'<br />';
	}
	if ( substr_count( $current, "Entwicklung der " )) {
	   $current = '<br /><span style="font-size:11px;"><br /><b>Entwicklung ';
	   $warnung .= $current.' ';
	} elseif ( substr_count( $current, "Weitere Aussichten " )) {
	   $current = '<br /><span style="font-size:11px;"><br /><b>'.$current;
	   $warnung .= $current.' ';
	} else {
		$warnung .= $current.' ';
	}
}

// Doppelte Leerzeichen entfernen
$warnung = preg_replace('/[ ]{2,}/sm', ' ', $warnung);

if ($_IPS['SENDER'] == "Execute")
	echo "-----
".$warnung;

// Text für eine HTML Box aufbereiten
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  {  background-color:#D4D0C8;
			font-family: Arial;
			font-size:14px;
         margin:0;
         padding:5px 5px 0px 5px;
         }

div {    margin:0;
         padding:0px 0px 0px 0px;
         }
</style>
</head>
<body scroll="yes"><div>'
.$warnung.
'</span></div>
</body>
</html>';
// HTML Box für Dashboard füllen
SetValueString($id_html, $browser);

// Schriftgrößen Anpassung wieder raus um Inhalt im Webfront anzuzeigen
$simple = '<span style="font-size:1em;">'.str_replace('<span style="font-size:11px;">', '', $warnung);
SetValueString($id_simple, $simple);
?>

Und hier noch die DWD Warnungen und das Warn-Bild.

Ich benutze hier die SMS Meldungen, da sie kurz sind und nicht „umfangreich“ bearbeitet werden müssen.

Auch hier wird das „smart_resize_image“ aus dem ersten Beitrag verwendet. Ich habe die Funktion und die Defines in einer Datei, die jedes Script bei mir lädt ;).

<?
// reine Vorsichtsmassnahme, falls es mal länger dauert
ini_set( 'max_execution_time', 60);

define ('dwd_kennung', 'xxx');
define ('dwd_passwort', 'yyy');

IPS_SetScriptTimer($_IPS['SELF'], 15*60); // alle 15 Minuten

$id_warn = 41368 /*[Wetter\Unwetterzentrale\UnwetterWarnungHannover\UnwetterWarnungAktiv]*/; // BoolVar
$id_text = 30646 /*[Wetter\Unwetterzentrale\UnwetterWarnungHannover\UnwetterWarnungHannover]*/; // StringVar
$id_simple = 15369 /*[Wetter\Unwetterzentrale\UnwetterWarnungHannover\UnwetterWarnungHannover Simple]*/;

$warnung = "";

// ##### Warnungen Bild holen
// Die ausgebende Stelle (hier "HA") entsprechend anpassen
$remoteImageDWD = 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/alerts/maps/SchilderHA.jpg';
$localImageDWD = IPS_GetKernelDir()."/Media/Wetter/unwetter.jpg";
//Bild herunterladen
if (!copy( $remoteImageDWD, $localImageDWD))
   IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Fehler beim Speichern des Wetterwarnbildes!" );
// Ohne sleep waren das Bild manchmal noch gelockt
IPS_Sleep(500);
// Bildgröße anpassen
if (!smart_resize_image($localImageDWD, null, 956, 538, false, $localImageDWD, false, false, 100 ))
   IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Fehler bei Größenanpassung des Wetterwarnbildes!" );


// ##### Warnungen und Unwetterwarnungen holen
// Doku zu den bereitgestellten Daten unter
// ftp://dwd_kennung:dwd_passwort@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/legend_warnings.pdf
// Die ausgebende Stelle (hier "HA") entsprechend anpassen
$url = 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/alerts/sms/HA/';
// Folgendes Muster entsprechend anpassen
$pattern = "H*HA*_HAN*";

$array = @scandir($url.$pattern);
if ($_IPS['SENDER'] == "Execute") {
	print_r($array);
	echo "
-----
";
}

if ($array){
	for ( $i = 0; $i < sizeof ( $array ); $i++ ) {
		$current = file_get_contents( $url."/".$array[$i]);
		if( empty($current) )
		   {  IPS_LogMessage( IPS_GetName($_IPS['SELF']), "can't get url content");   return;  }

		$warnung .= '<span style="font-size:10px;">'.$array[$i].'</span><br />'.$current;
		$warnung = $warnung.'<br /><br />';
		if ($_IPS['SENDER'] == 'Execute')
			echo $i.' - '.$array[$i].': '.$warnung."

";
	}
	// Bearbeitung um Platz zu sparen bzw. Umbrüche einzufügen
	$warnung = str_replace('DWD ', '', $warnung);
	$warnung = str_replace('- siehe www.dwd.de', '', $warnung);
	$warnung = str_replace(' gültig', '<br />gültig', $warnung);
	$warnung = str_replace(' vom', '<br />vom', $warnung);
}

// Bool Variable setzen und wenn es keine Warnung gab, einen Text ausgeben
if (empty($warnung)) {
   $warnung = date("d.m.y H:i").'<br /><br />Es sind keine Warnungen für Hannover vorhanden.';
	SetValueBoolean($id_warn, false);
} else {
	SetValueBoolean($id_warn, true);
}

$browser='
<html>
<head>
<style type="text/css" media="screen">
body  {  background-color:#D4D0C8;
			font-family: Arial;
			font-size:14px;
         margin:0;
         padding:10px 5px 0px 5px;
         }

div {    margin:0;
         padding:0px 0px 0px 0px;
         }
</style>
</head>
<body><div>'
.$warnung.
'</div>
</body>
</html>';
// HTML Box für Dashboard füllen
SetValueString($id_text, $browser);

// Schriftgrößen Anpassung wieder raus um Inhalt im Webfront anzuzeigen
$simple =  '<span style="font-size:1em;">'.str_replace('<span style="font-size:10px;">', '', $warnung).'</span>';
SetValueString($id_simple,$simple);
?>

Danke für Deine Arbeit und das posten der Scripte.
Ich hoffe ich komme im laufe der Woche zum ausprobieren !

Gruß
Jens

Da gab es gestern „endlich mal“ eine Warnung für Hannover, leider bleibt die „ewig lange“ im FTP verfügbar.

DWD WETTERWARNUNG: NEBEL gültig in HAN vom 26.10.15 21:27 - 27.10.15 10:00 Uhr

Damit müsste dann wohl auch die Gültigkeit mit ausgewertet werden, das wird dann aber noch aufwändiger, da es auch „AUFHEBUNG der DWD WETTERWARNUNG …“ ohne sinnvolle Referenz und Zeitangaben gibt und somit alle Einzelmeldung verglichen werden müssten :(.

Oder doch die Deutscher Wetterdienst - Warntabelle parsen und darauf hoffen, dass die Warnmeldung rausgenommen wird, wenn sie nicht mehr aktuell ist und sich das Layout/Design nicht auch bald verändert.

Ich habe gerade mal nachgesehen, für Nienburg ebenfalls. Im Grunde sind die Infos doch im Dateinamen enthalten, also Datum und Uhrzeit. Datum lässt sich ja mit dem aktuellen Tag vergleichen. Einfach nur eine Abfrage ob aktueller Tag = Tag aus dem Dateinamen bzw. ob der Tag nicht in de Vergangenheit liegt. Wenn Datum < Heute, dann nicht abrufen bzw. Meldung ignorieren .

WWHA59_NIXX_270443
WWHA59_NIXX_280244

27 = 27. (Datumstag) , 0443 = Ausgabeuhrzeit <- ignorieren weil alt
28 = 28. (Datumstag) , 0244 = Ausgabuhrzeit <- darstellen weil für heute

Im Notfall dann auch noch die Uhrzeit vergleichen und alles was älter als 12 Std ist auch ignorieren. Die Gültigkeitentabelle ist irgendwie Banane … Nebel Gültigkeit: mind. 30min, max. 168 Std. Da kann doch niemand etwas mit anfangen :frowning:

Laut Legende lässt sich ja auch schon an Hand der Kennziffer (hier im Beispiel die 59) feststellen um welche Warnung es geht. Aber da es eh im Text steht, braucht man das nicht zwingend.

Im Dateinamen ist TagStundeMinute der Meldung in UTC enthalten, also bei der noch aktuellen Meldung 262027. Die enstpricht meistens, aber nicht immer, der „von“ Uhrzeit, hier 26.10.15 21:27.

Aber die Meldungen gehen auch über mehr als einen Tag, hier also … - 27.10.15 10:00.

Ich werde mich wohl doch mal mit dem Parsen beschäftigen, dort sind nur aktuell gültige Meldungen online.

Dann muss ich auch noch schnell ergänzen ;).

ignorieren weil alt

So einfach ist es nicht, das würde bei gleicher Meldung WWHA59… eventuell gehen, aber es kann ja viele verschiedene Meldungen geben.

Na dann eben doch den Warntext selbst parsen wenn die Gültigkeit eh drin steht :wink:

Halo Ralf,

erstmal vielen Dank für die Beispiele. Damit konnte ich endlich die Zugriffe auf die DWD-Daten realisieren.

Zum Warnlagenbericht: Wenn du die Dateiliste rückwärts sortierst, um die letzte Datei zu lesen, denke daran, dass nach dem 30./31. der 01. kommt und der steht dann ganz unten.

Zur Warnmeldung: Ich lese die Warnmeldung aus dem gleichen Verzeichnis, wenn vorhanden, mit dem neuesten Datum. Dort steht auch das Datum "Gültig bis…
Das formatiere ich in JJMMTTSSMM du vergleiche es mit dem aktuellen Wert aus date(„ymdHi“,time()).

Gruß, Peter

Ich habe gestern Abend mal einiges zu den Warnmeldungen geändert. Das Hauptproblem ist, dass es ja jederzeit mehrere verschiedene Meldungen geben kann und zu einem Teil der Meldungen eventuell sogar eine Aufhebung.

Die Sortierung der Dateiliste macht die PHP Funktion, da würde ich jetzt erstmal erwarten, dass sie damit umgehen kann. Dort ist ja auch nur die letzte Datei relevant.

Hi Ralf,

ich nutze für mein PHP Modul die XML Dateien vom DWD, die lassen sich weit aus besser parsen, und enthalten viel mehr informationen… :wink:

hast du dir die XML mal angesehen ?

Grüsse
Dave

Hi Dave,

mich würde die XML-Sache auch interessieren.

Poste doch bitte mal, wie du das gemacht hast (bin noch Newbie)

Danke!
Gruß
koenjoe

Bin zwar nicht der Profi, aber ich habe mal aus zwei eins gemacht.
Aus Ralf’s Skript (siehe) und Raketenschecke’s Unwetterwarung (siehe) habe ich mal was zusammengebastelt. Ist garantiert noch Verbesserungswürdig, doch für mich passt es erstmal so. Vielleicht kann der ein oder andere es noch verbessern und hier zur Verfügung stellen.

<?
########################################################################################################
/*
 basierend auf Quellscript von RALF und Raketenschnecke 04.07.2012 zusammengeschustert von jnicke 14.11.2015
 IPS-Forum (Doku): [DWD Unwetterwarnung (WFE, Mail und html)](http://www.ip-symcon.de/forum/f53/dwd-unwetterwarnung-wfe-mail-html-18782/#post166583)
 Quelle: [DWD Wetterdaten (FTP)](https://www.symcon.de/forum/threads/29129-DWD-Wetterdaten-(FTP)) (DWD Wetterdaten (FTP)  Ralf)

	Scipt läuft anschließend eigenständig alle 5 Minuten.
	Falls eine Anzeige der DWD-Informationen gewünscht wird, kann ein Link vom Modul "DWD Unwetterwarnungen"
	an eine beliebige Stelle in WFE erstellt werden.


	DEFCON-Status Übersicht
   	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

*/
########################################################################################################
define ('dwd_kennung', 'xyz');
define ('dwd_passwort', 'xyz');
// +++++++++++++++++++++++ Konfig +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	// Location für Warnmeldungen
   // den LocationCode ($ort) bitte aus dem Link zur regionale Wetterwarnung entnehmen (Beispiel: [Deutscher Wetterdienst - Error 404 - Not Found](http://www.wettergefahren.de/dyn/app/ws/html/reports/HHX_warning_de.html) => HHX für Hamburg)
	$ort 											= 'DDX';          // DWD-Key für Ort DDX
	$ort_desc 									= 'Dresden';      // Freitext für Ortsname
   $lokal 										= "Dresden";
	// Warnlagebericht (Regionen)
	// den Regional-Code bitte aus dem Link zum regionalen Warnlagebericht entnehmen
	// (Beispiel: [Deutscher Wetterdienst - Error 404 - Not Found](http://www.wettergefahren.de/dyn/app/ws/html/reports/MS_report_de.html) => "MS" für Bayern)
	$region                             = 'LZ';           // Regional-Code für Warnlageberichte eintragen (leer [''] => Deaktivierung der Warnlageberichte)
	$region1 									= 'sachsen';
	// eigene Variablen deklarieren
	$wan_status_ID 							= -1 ; //Status-ID der I-Net-Verbindung, -1 wenn keine Variable verfügbar ist
//	$php_mailer_scriptID                = 17714 /*[Scripte\Wetter_Klima_Umwelt\Unwetterwarnungen DWD inaktiv\php_mailer_connector]*/;
// RADAR-Pics: Auswahl mit oder ohne Radarbild und bis zu welchem Warnstatus
	$WFE_Radar                          = 6;    				// DEFCON-Status, bis zu dem RADAR-Pics ins WFE/WFE-Popup ausgeliefert werden ('-1' => Auslieferung abschalten)
	$Mail_Radar                         = 6;     			// DEFCON-Status, bis zu dem RADAR-Pics per Mail ausgeliefert werden ('-1' => Auslieferung abschalten)
	$Blitzkarte                         = true;           // true: tauscht bei Gewitter-Warnmeldungen das SAT24-PIC gegen die Wetteronline-Blitzkarte DE
//$DEFCON_Status = '';
$DEFCON_Value = '';

$warnung = "";

// Doku zu den bereitgestellten Daten unter
// ########  ftp://gds15894:cQKbSJNR@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/legend_warnings.pdf
// Die ausgebende Stelle (hier "LZ") entsprechend anpassen
$quelle = 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/LZ/';
$url = 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/LZ';
// Folgendes Muster entsprechend anpassen
$pattern = 'WWLZ*_DDX*'; // HZH

// IPS-Library einbinden
	if(file_exists(IPS_GetKernelDir().'scripts/IPSLibrary/app/core/IPSLogger/IPSLogger.inc.php'))
	{
	   include 									IPS_GetKernelDir().'scripts/IPSLibrary/app/core/IPSLogger/IPSLogger.inc.php';
	   define 									("c_LogId", "IPS_UnwetterDWD");
	}
	elseif(file_exists(IPS_GetKernelDir().'scripts/IPSLogger.ips.php'))
	{
	   include 									IPS_GetKernelDir()."scripts/IPSLogger.ips.php";
	   define 									("c_LogId", "IPS_UnwetterDWD");
	}

// DWD Warnstatus (Farbcodierung)
	$DEFCON[6]['color']     				= '#66B5FF';    // blau:    keine Warnungen vorher 64B4FF
	$DEFCON[6]['status']    				= 'keine Warnungen';
	$DEFCON[5]['color']     				= '#FF00FF';    // magenta:    UV-Warnung
	$DEFCON[5]['status']    				= 'UV-Warnung';
	$DEFCON[4]['color']     				= '#CC99FF';    // schweinchenrosa:    Hitzewarnungen
	$DEFCON[4]['status']    				= 'Hitzewarnung';
	$DEFCON[3]['color']     				= '#FFFF00';    // gelb:    Wetterwarnungen
	$DEFCON[3]['status']    				= 'Wetterwarnungen';
	$DEFCON[2]['color']     				= '#FA9600';    // orange:  Warnungen vor markantem Wetter
	$DEFCON[2]['status']    				= 'Warnungen vor markantem Wetter';
	$DEFCON[1]['color']     				= '#FF0000';    // rot:     Unwetterwarnungen
	$DEFCON[1]['status']    				= 'Unwetterwarnungen';
	$DEFCON[0]['color']     				= '#AF0064';    // violett: Warnungen vor extremen Unwetter
	$DEFCON[0]['status']    				= 'Warnungen vor extremen Unwetter';

// DWD Warntypen, "Amtliche Warnung vor...:"
	$Warntyp                         	= array();
	$Warntyp[]                       	= 'keine amtliche Warnung';
	// "Amtliche Warnung vor...:"
	$Warntyp[]                       	= 'Windböen';
	$Warntyp[]                       	= 'Starkwind';
	$Warntyp[]                       	= 'Starkwindwarnung';
	$Warntyp[]                       	= 'Sturmwarnung';
	$Warntyp[]                       	= 'Sturmböen';
	$Warntyp[]                       	= 'schweren Sturmböen';
	$Warntyp[]                       	= 'Orkanartigen Böen';
	$Warntyp[]                       	= 'extremen Orkanböen';
	$Warntyp[]                       	= 'Orkanböen';
	$Warntyp[]                       	= 'heftigem Starkregen';
	$Warntyp[]                       	= 'Starkregen';
	$Warntyp[]                       	= 'Hagel';
	$Warntyp[]                       	= 'extrem ergiebigem Dauerregen';
	$Warntyp[]                       	= 'ergiebigem Dauerregen';
	$Warntyp[]                       	= 'Dauerregen';
	$Warntyp[]                       	= 'Extrem starkem Schneefall';
	$Warntyp[]                       	= 'starkem Schneefall';
	$Warntyp[]                       	= 'leichtem Schneefall';
	$Warntyp[]                       	= 'Schneefall';
	$Warntyp[]                       	= 'extrem starken Schneeverwehung';
	$Warntyp[]                       	= 'starken Schneeverwehung';
	$Warntyp[]                       	= 'Schneeverwehung';
	$Warntyp[]                       	= 'Glätte';
	$Warntyp[]                       	= 'Glatteis';
	$Warntyp[]                       	= 'starkem Tauwetter';
	$Warntyp[]                       	= 'Tauwetter';
	$Warntyp[]                       	= 'Nebel';
	$Warntyp[]                       	= 'strengem Frost ';
	$Warntyp[]                       	= 'Frost';
	$Warntyp[]                       	= 'schwerem Gewitter mit extremen Orkanböen';
	$Warntyp[]                       	= 'Schwerem Gewitter';
	$Warntyp[]                       	= 'starkem Gewitter';
	$Warntyp[]                       	= 'Gewitter';
	$Warntyp[]                       	= 'hoher UV-Index';
	$Warntyp[]                       	= 'Hitze';
	$Warntyp[]                       	= 'Hitzewarnung';
	$Warntyp[]                       	= 'Testwarnung';                             // muuuuaaahhhh!
	// +++ !!! letzter Eintrag im Array !!! +++
	$Warntyp[]                       	= 'keinen Warnstatus identifiziert';

// Variablen-Definitionen
	$VarNames[0]         					= array('name'=>'DWD DEFCON Status', 'type'=>1, 'hidden'=>true, 'profil'=>'DWD.Unwetter.Warnstatus', 'position'=> -100, 'default_value'=>6,);
   $VarNames[1]         					= array('name'=>'DWD Unwetterwarnung WFE', 'type'=>3, 'hidden'=>false, 'profil'=>'~HTMLBox', 'position'=> -50, 'default_value'=>'',);
   $VarNames[2]         					= array('name'=>'gültig ab (UNIX-Timestamp)', 'type'=>1, 'hidden'=>true, 'profil'=>'~UnixTimestamp', 'position'=> 0, 'default_value'=>0,);
   $VarNames[3]         					= array('name'=>'gültig bis (UNIX-Timestamp)', 'type'=>1, 'hidden'=>true, 'profil'=>'~UnixTimestamp', 'position'=> 0, 'default_value'=>0,);
   $VarNames[4]         					= array('name'=>'last Infomail (UNIX-Timestamp)', 'type'=>1, 'hidden'=>true, 'profil'=>'~UnixTimestamp', 'position'=> 0, 'default_value'=>time(),);
   $VarNames[5]         					= array('name'=>'UnwetterWarnungAktiv', 'type'=>0, 'hidden'=>true, 'profil'=>'', 'position'=>0, 'default_value'=>true,);
   $VarNames[6]         					= array('name'=>'DWD Warntyp', 'type'=>1, 'hidden'=>true, 'profil'=>'', 'position'=> 0, 'default_value'=>count($Warntyp),);
   $VarNames[7]         					= array('name'=>'DWD Warntyp WFE', 'type'=>3, 'hidden'=>false, 'profil'=>'~TextBox', 'position'=> -90, 'default_value'=>'keinen Warnstatus identifiziert',);
   $VarNames[8]         					= array('name'=>'Mailversand', 'type'=>0, 'hidden'=>true, 'profil'=>'~Switch', 'position'=> 0, 'default_value'=>false,);
   $VarNames[9]         					= array('name'=>'Warnlagebericht', 'type'=>3, 'hidden'=>true, 'profil'=>'', 'position'=> 0, 'default_value'=>'07:00',);
   $VarNames[10]         					= array('name'=>'WFC IDs (PopUp)', 'type'=>3, 'hidden'=>true, 'profil'=>'', 'position'=> 0, 'default_value'=>'',);
   $VarNames[11]         					= array('name'=>'DWD Meldung WFE', 'type'=>3, 'hidden'=>false, 'profil'=>'~TextBox', 'position'=> -90, 'default_value'=>'',);

// übergeordnete Instanz identifizieren
	$Parent           						= IPS_GetParent($_IPS['SELF']);
	$ParentModul								= IPS_GetObject($Parent);

// UNIX-Timestamp
	$unix                               = time();

// Auto-Update (überprüft, ob alle Objekte im Baum vorhanden sind
	for($i=0;$i<count($VarNames);$i++)
	{
	   if(@IPS_GetObjectIDByName($VarNames[$i]['name'], IPS_GetParent($_IPS['SELF'])) == false)
		{
			$Update 								= true;     // Update-Status auf true setzen
			$i 									= 9999;     // Abbruch der Schleife bei fehlendem Objekt

		}
		else
		{
			$Update 								= false;     // alle Objekte vorhanden -> Update-Status auf false setzen
		}

	}

// DWD Warnmeldungen Auswertelogik
if(($ParentModul['ObjectType'] == 1) && ($ParentModul['ObjectName'] == 'DWD Unwetterwarnungen') && ($Update == false))
{

	// Variablen identifizieren
	   $DEFCON_Status_ID 					= IPS_GetObjectIDByName($VarNames[0]['name'], IPS_GetParent($_IPS['SELF']));
	   $id_text             				= IPS_GetObjectIDByName($VarNames[1]['name'], IPS_GetParent($_IPS['SELF']));
	   $gueltig_ab_ID       				= IPS_GetObjectIDByName($VarNames[2]['name'], IPS_GetParent($_IPS['SELF']));
	   $gueltig_bis_ID      				= IPS_GetObjectIDByName($VarNames[3]['name'], IPS_GetParent($_IPS['SELF']));
	   $last_Infomail_ID    				= IPS_GetObjectIDByName($VarNames[4]['name'], IPS_GetParent($_IPS['SELF']));
	   $id_warn             				= IPS_GetObjectIDByName($VarNames[5]['name'], IPS_GetParent($_IPS['SELF']));
	   $WarnType_ID             			= IPS_GetObjectIDByName($VarNames[6]['name'], IPS_GetParent($_IPS['SELF']));
    	$WarnType_WFE_ID          			= IPS_GetObjectIDByName($VarNames[7]['name'], IPS_GetParent($_IPS['SELF']));
    	$Mailversand_ID          			= IPS_GetObjectIDByName($VarNames[8]['name'], IPS_GetParent($_IPS['SELF']));
    	$wl_timeslot_ID                  = IPS_GetObjectIDByName($VarNames[9]['name'], IPS_GetParent($_IPS['SELF']));
    	$WFC_IDs_ID                  		= IPS_GetObjectIDByName($VarNames[10]['name'], IPS_GetParent($_IPS['SELF']));
    	$DWD_WarnText_ID_ID              = IPS_GetObjectIDByName($VarNames[11]['name'], IPS_GetParent($_IPS['SELF']));

	// IPS Werte auslesen
		$DEFCON_LastValue       			= getValueInteger($DEFCON_Status_ID);
		$last_Infomail_val      			= getValueInteger($last_Infomail_ID);
		$gueltig_ab_lastval     			= getValueInteger($gueltig_ab_ID);
		$gueltig_bis_lastval     			= getValueInteger($gueltig_bis_ID);
		$wl_timeslot	                  = getValueString($wl_timeslot_ID);

	// WAN-Status checken
		if($wan_status_ID <0)
		{
			$wan_status_val = true;
		}
		else
		{
	   	$wan_status_val 					= getValueBoolean($wan_status_ID);
	   }

// Dateinamen im Quellpfad gemäss Pattern in ein Array laden, (, 1) = Sortierung rückwärts
$array = @scandir($quelle.$pattern, 1);

// arry[0] = nur die letzte Datei laden

//$s = file_get_contents( 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/LZ/'.$array[0] );
//#################
//if(file_exists( 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/LZ/WWLZ*_HZH*_*' )===false)
if(@scandir($quelle.$pattern)===false)
			{	 $warnung = '';
     			 $s = '
				  WWxxxx xxxx 000000
						keine Warnung
						.
						gueltig von:          Freitag, 01.01.1970 00:04 Uhr
						voraussichtlich bis: Samstag, 01.01.1970 00:05 Uhr
						.
						am:                  Freitag, 01.01.1970 00:04 Uhr
						.
						.
						'
						;
			}
			else
			{
				$s = file_get_contents( 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/LZ/'.$array[0] );
			}
//###############

//if( empty($s) )
 //  {  IPS_LogMessage( IPS_GetName($_IPS['SELF']), "can't get url content");   return;  }

// Alle Leerzeilen löschen
$s = preg_replace("/(^[
]*|[
]+)[\s	]*[
]+/", "
", $s);
//echo $s;
$a = explode( "
", $s);   // Array aus der Meldung erstellen
$delete = array_shift($a); // erste Zeile mit Sonderzeichen löschen
$delete = array_pop($a);     // letzte Zeile mit Sonderzeichen löschen

// Gewittererkennung (Schlagwortsuche im Warnungs-String)
			if(strpos($s,"GEWITTER") != false)
			{
				$Gewitter = true;
			}
			else
			{
				$Gewitter = false;
			}

//			$Gewitter = true;
if ($_IPS['SENDER'] == "Execute")
	echo "Gewitter ist "."$Gewitter"."
";




if ($_IPS['SENDER'] == "Execute")
    print_r($a);



// div. Anpassungen/Formatierungen bzw. unterdrücken von Texten
while ( list ( $key, $current ) = each ( $a ) ) {
    if ( substr_count( $current, "Amtlichexx" )) {
       $current = '';
    }
    if ( substr_count( $current, "WARNLAGEBERICHT für" )) {
       $current = '';
    }
    if ( substr_count( $current, "Sachsen" )) {
       $current = '';
    }
    if ( substr_count( $current, "Wetterdienst" )) {
       $current = '';
    }
}

$a = str_replace('Amtliche ', "", $a);
$a = str_replace(utf8_decode('gültig von: '), "", $a);
$a = str_replace('gueltig von: ', "", $a);
$a = str_replace('voraussichtlich bis:', "", $a);
$a = str_replace(' Uhr', "", $a);
$a = str_replace('am:', "", $a);
$a = str_replace('Montag, ', "", $a);
$a = str_replace('Dienstag, ', "", $a);
$a = str_replace('Mittwoch, ', "", $a);
$a = str_replace('Donnerstag, ', "", $a);
$a = str_replace('Freitag, ', "", $a);
$a = str_replace('Samstag, ', "", $a);
$a = str_replace('Sonntag, ', "", $a);
//    print_r($a);
########################################################################


########################################################################
$ttyp = trim($a[0]);
$tmeldung = trim($a[1]);
$tort = trim($a[2]);
$tvon = trim($a[3]);
$tbis = trim($a[4]);
$tausgabe = trim($a[6]);
$tbeschreibung1 = $a[7];
$tbeschreibung2 = $a[8];
    if ( substr_count( $tmeldung, "AUFHEBUNG" )) {
      $tbis = '01.01.1970';
      $tvon = '01.01.1970';
       //$current = '';
       //return;
    }
$warnung = $tmeldung;
//echo $tvon;
if ($_IPS['SENDER'] == "Execute")
	echo date("jS F, Y", strtotime($tvon)). "
";
	echo $tvon. "
";

//if (($tvon != '') and ($tbis)){
	$gueltig_ab_val = strtotime($tvon). "
";
	$gueltig_bis_val = strtotime($tbis). "
";

	setValueInteger($gueltig_ab_ID, $gueltig_ab_val);
	setValueInteger($gueltig_bis_ID, $gueltig_bis_val);
//}
// auskommetieren für Test/*
if ($gueltig_bis_val >= $unix){
		echo "Warnung noch aktiv"."
";

	} else {
      echo "keine Warnungen"."
";
      $warnung = "";
	}
// auskommetieren für Test*/
// Warnstatus (ja/nein) setzen
			if (empty($warnung)) {
			   $warnung = "Es sind keine Warnungen für ".$ort_desc." vorhanden.";
			    SetValueBoolean($id_warn, false);
			    $Warnstatus      = false;
			    $WarnColor 							= '#66B5FF';    // blau:    keine Warnungen vorher 64B4FF
			    SetValueString($DWD_WarnText_ID_ID, 'keine aktuellen Warnungen');
			    SetValueInteger($DEFCON_Status_ID, 6);
			    
			} else {
			    SetValueBoolean($id_warn, true);
			    $Warnstatus      = true;
			    $WarnColor 							= '#FF0000';    // rot:     Unwetterwarnungen
			    SetValueString($DWD_WarnText_ID_ID, $s);
			    SetValueInteger($DEFCON_Status_ID, 3);
			    
			}

/*
echo "Warntyp: "."$ttyp"."
";
echo "Meldung: "."$tmeldung"."
";
echo "Ort: "."$tort"."
";
echo "gueltig von: "."$tvon"."
";
echo "gueltig bis: "."$tbis"."
";
echo "von: "."$tausgabe"."
";
echo "T1: "."$tbeschreibung1"."
";
echo "T2: "."$tbeschreibung2"."
";
*/

setValueString($WarnType_WFE_ID , $warnung);
setValueString($wl_timeslot_ID, $tausgabe);
// Doppelte Leerzeichen entfernen
$warnung = preg_replace('/[ ]{2,}/sm', ' ', $warnung);

if ($_IPS['SENDER'] == "Execute")
    echo "-----
"."$warnung"."
";



// Definition HTML-Content
$HTML_Header ='
<html>
<head>
	<style type="text/css" media="screen"> body { background-color:#efefef;}
  </style>
</head>';
$HTML_Table ='
<body scroll="yes">
<table
 style="text-align: left; margin-left: auto; margin-right: auto; background-color: rgb(220, 220, 220); width: 880px; font-family: Arial;"
 border="0" cellpadding="2" cellspacing="2">
  <tbody>
    <tr>
      <td style="width: 20px; color: #333333; background-color: '.$WarnColor.';" colspan="1" rowspan="6"></td>
      <td style="width: 716px; color: #333333; background-color: #E2E9FD; text-align: left; font-weight: bold;" colspan="3"></td>
    </tr>
    <tr>
      <td style="width: 716px; color: #333333; background-color: #E2E9FD; text-align: center;" colspan="3"></td>
    </tr>';

// Definition 3. RADAR-Pic: Blitzkarte DE (Alternative)
$wo_Blitzkarte ='
				<a
				 href="http://www.wetteronline.de/blitze/" target="_blank">
				 <img  style="width: 222px; height: 225px; alt="Blitzkarte DE"
						src="http://www.wetteronline.de/?ireq=true&pid=p_blitze_map&src=blitze/vermarktung/p_blitze_map/www/Track/SAC/green_flat/SAC_Track.gif&LANG=de?'.$unix.'" width="222" height="225"></a></img></td>';

// Definition 1. RADAR-Pic: Regenradar DE
$nr_Regenradar ='
				<a
				 href="http://www.niederschlagsradar.de" target="_blank">
				 <img  style="width: 222px; height: 225px; alt="Niederschlagsradar DE"
						src="http://www.niederschlagsradar.de/image.ashx?type=blitz&lightning?'.$unix.'" width="222" height="225"></a></img></td>';

// HTML-Fragment "Radar" zusammenbauen (abhängig vom Gewitterstatus)http://www.wettergefahren.de/DWD/wetter/radar/Radarfilm_WEB_DL.gif
if(($Blitzkarte) && ($Gewitter))
{
$HTML_Radar ='
   	<tr>
      	<td style="width: 298px; color: #333333; background-color: #E2E9FD; text-align: right;">
			'.$nr_Regenradar.'
      	<td style="width: 250px; color: #333333; background-color: #E2E9FD; text-align: center;">
			<a
				 href="http://www.wettergefahren.de/DWD/wetter/radar/Radarfilm_WEB_DL.gif" target="_blank">
				 <img style="width: 190px; height: 225px; alt="DWD Unwetterkarte"
				 src="http://www.dwd.de/DWD/warnungen/warnapp/json/warning_map.png?'.$unix.'" width= "190" height= "225"></a></img></td>
			<td style="width: 305px; color: #333333; background-color: #E2E9FD; text-align: left;">
			'.$wo_Blitzkarte.'
		</tr>
';
}
else
{
$HTML_Radar ='
   	<tr>
      	<td style="width: 220px; color: #333333; background-color: #E2E9FD; text-align: center;">
			'.$nr_Regenradar.'
      	<td style="width: 250px; color: #333333; background-color: #E2E9FD; text-align: center;">
			<a
				 href="http://www.dwd.de/DE/Home/home_node.html" target="_blank">
				 <img style="width: 190px; height: 225px; alt="DWD Unwetterkarte"
				 src="http://www.dwd.de/DWD/warnungen/warnapp/json/warning_map.png?'.$unix.'" width= "190" height= "225"></a></img></td>
			<td style="width: 305px; color: #333333; background-color: #E2E9FD; text-align: center;">
			<a
				 href="http://www.sat24.com/de" target="_blank">
				 <img style="width: 318px; height: 225px; alt="Satellitenbild DE Sat24"
				 src="http://www.sat24.com/image.ashx?country=de&type=loop&sat=vis?'.$unix.'" width= "318" height= "225"></a></img></td>
		</tr>';
}




// Warnlagebericht zusammen dengeln, wenn keine DEFCON-Warnungen aktiv sind bzw. wenn der Timeslot für Warnlagebericht erreicht ist
	$te      = mktime((int)substr($wl_timeslot, 0, 2), (int)substr($wl_timeslot, 3, 2), 0, date("m", time()),  date("d", time()),  date("Y", time()));
	$ts      = $te - (60*5);

	if(($DEFCON_Value == count($DEFCON)-1) && ($region != '') || ((time() > $ts) && (time() < $te) && ($region != '')))
	{
	   $HTML_Warnings ='';
	   $HTML_WarnLTitle ='
	   <tr>
	      <td style="width: 716px; color: #333333; background-color: #E2E9FD; font-family: Arial; font-weight: bold; font-size: 12pt;" colspan="3">'.$WL_Title.'</td>
		</tr>';
		$HTML_WarnLBody ='
	   <tr>
	      <td style="width: 716px; color: #333333; background-color: #E2E9FD; font-family: Arial;  font-size: 10pt;" colspan="3">'.$WL_Body.'</td>
		</tr>';
		$HTML_WarnLage = $HTML_WarnLTitle.$HTML_WarnLBody;
	}
	else
	{
	   $HTML_Warnings ='
			<tr>
	      <td style="width: 716px; color: #333333; background-color: #E2E9FD; font-family: Arial; font-size: 10pt;" colspan="3">'.$warnung.'</td>
			</tr>';
	   $HTML_WarnLage = '';

	}

$HTML_Footer ='

  </tbody>
</table>
</body>
</html>
';

	// Content für WFE zusammenstellen
			if(( $DEFCON_Value <= $WFE_Radar) && ($WFE_Radar >= 0))
			{
			   $WFE_Content   	= ($HTML_Table.$HTML_Radar.$HTML_Warnings.$HTML_WarnLage.$HTML_Footer);
			}
			else
			{
			   $WFE_Content   	= ($HTML_Table.$HTML_Warnings.$HTML_WarnLage.$HTML_Footer);
			}
			// ablegen der Warnmeldung als html-Datei .....
				$Script_ID        	= $_IPS['SELF'];
				$path 					= IPS_GetKernelDir().'webfront\user	mp' ;
				$Filename 				= $path.'\DWD_Unwetter_'.$ort.'_'.$Script_ID.'.html';

         // Ordner anlegen, wenn nicht vorhanden

				if (!is_dir($path))
				mkdir ($path  , 0777, true);

			// schreiben der html-Datei
				$handle 					= fopen($Filename,"w");
				fwrite($handle, $WFE_Content);
				fclose($handle);

			// Schreiben der IPS String-Variable
				SetValueString($id_text, $WFE_Content);
}

#######################################################################################################################################
// Install-Routinen
elseif($_IPS['SENDER'] == 'Execute')
{
	// Profil DWD.DEFCON anlegen
	if (IPS_VariableProfileExists("DWD.Unwetter.Warnstatus"))  IPS_DeleteVariableProfile("DWD.Unwetter.Warnstatus");
	IPS_CreateVariableProfile("DWD.Unwetter.Warnstatus", 1);
	IPS_SetVariableProfileValues("DWD.Unwetter.Warnstatus", 0, 7, 1); //PName, Minimal, Maximal, Schrittweite
	IPS_SetVariableProfileAssociation("DWD.Unwetter.Warnstatus", 0, "DEFCON 0", "", 11403362); //P-Name, Value, Assotiation, Icon, Color
	IPS_SetVariableProfileAssociation("DWD.Unwetter.Warnstatus", 1, "DEFCON 1", "", 16711680); //P-Name, Value, Assotiation, Icon, Color
	IPS_SetVariableProfileAssociation("DWD.Unwetter.Warnstatus", 2, "DEFCON 2", "", 16422144); //P-Name, Value, Assotiation, Icon, Color
	IPS_SetVariableProfileAssociation("DWD.Unwetter.Warnstatus", 3, "DEFCON 3", "", 16776960); //P-Name, Value, Assotiation, Icon, Color
	IPS_SetVariableProfileAssociation("DWD.Unwetter.Warnstatus", 4, "DEFCON 4", "", 13408767); //P-Name, Value, Assotiation, Icon, Color
	IPS_SetVariableProfileAssociation("DWD.Unwetter.Warnstatus", 5, "DEFCON 5", "", 16711935); //P-Name, Value, Assotiation, Icon, Color
	IPS_SetVariableProfileAssociation("DWD.Unwetter.Warnstatus", 6, "DEFCON 6", "", 6534143); //P-Name, Value, Assotiation, Icon, Color

	if((($ParentModul['ObjectType'] != 1) && ($ParentModul['ObjectName'] != 'DWD Unwetterwarnungen')) || ($Update == true))
	{
	   if(($ParentModul['ObjectType'] != 1) && ($ParentModul['ObjectName'] != 'DWD Unwetterwarnungen'))
	   {
		   // Dummy-Instanz anlegen und Script drunterhängen
	      $ModulID				= IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
	      IPS_SetName($ModulID, 'DWD Unwetterwarnungen');
	      IPS_SetParent($ModulID, $Parent);
	      IPS_SetParent($_IPS['SELF'], $ModulID);
	      IPS_SetHidden($_IPS['SELF'], true);
	      IPS_ApplyChanges($ModulID);
      }
      // Variablen anlegen - wenn nicht vorhanden
      // 1. vorhandene Vars auslesen
      $ModulID					= IPS_GetParent($_IPS['SELF']);
      for($i=0;$i<count($VarNames);$i++)
		{
		   if(@IPS_GetObjectIDByName($VarNames[$i]['name'], IPS_GetParent($_IPS['SELF'])) == false)
		   {
		   $VarID				= IPS_CreateVariable($VarNames[$i]['type']);
		   IPS_SetName($VarID, $VarNames[$i]['name']);
		   IPS_SetHidden($VarID, $VarNames[$i]['hidden']);
		   IPS_SetPosition($VarID, $VarNames[$i]['position']);
		   IPS_SetParent($VarID, $ModulID);
		   SetValue($VarID, $VarNames[$i]['default_value']);
			}
			// Profile zuweisen
			$VarID				= IPS_GetObjectIDByName($VarNames[$i]['name'], IPS_GetParent($_IPS['SELF']));
			IPS_SetVariableCustomProfile($VarID, $VarNames[$i]['profil']);
		}

	}

	 echo "#9999 IPS Unwetterwarnung: Install ready (neue Objekte angelegt)
";
	 if(function_exists("IPSLogger_Dbg")) IPSLogger_Dbg(c_LogId, "#9999 IPS Unwetterwarnung: Install ready (neue Objekte angelegt)");

}
else
{
	echo "Script #".$_IPS['SELF']." Unwetterwarnung: ohne Ergebnis gelaufen (keine Objekte gefunden/Objekte fehlerhaft
";
	if(function_exists("IPSLogger_Err")) IPSLogger_Err(c_LogId, "Script #".$_IPS['SELF']." Unwetterwarnung: ohne Ergebnis gelaufen (keine Objekte gefunden/Objekte fehlerhaft)");
}


// Timer-Management
	 IPS_SetScriptTimer($_IPS['SELF'], 5*60);

// Textformatierung
	function formatText($text)
	{
	    $text = html_entity_decode($text);
	    $text = str_replace("ö", "ö", $text);
	    $text = str_replace("Ã?", "Ü", $text);
	    $text = str_replace("ü", "ü", $text);
	    $text = str_replace("ä", "ä", $text);
	    $text = str_replace("Ã?", "ß", $text);
	    $text = str_replace("&ndash;", "-", $text);
	    $text = str_replace('&#039;', "`", $text);
	    $text = str_replace("&", "&", $text);
	    $text = str_replace("Ã?", "Ö", $text);
	    $text = str_replace("â??", "\"", $text);
	    $text = str_replace("â??", "\"", $text);
	    $text = str_replace("–", "-", $text);
	    $text = str_replace("â??", "\"", $text);
	    $text = str_replace("Â?", "\"", $text);
	    $text = str_replace("Â?", "\"", $text);
	    $text = str_replace("Â?", "-", $text);
	    $text = str_replace("Â?", "-", $text);
	    $text = str_replace("Ã?", "Ä", $text);
	    return $text;
	}
// Sonderbuchstaben in Großbuchstaben
	function toUpper($text)
	{
	    $text = html_entity_decode($text);
	    $text = str_replace("ü", "Ü", $text);
	    $text = str_replace("ö", "Ö", $text);
	    $text = str_replace("ä", "Ä", $text);
	    return $text;
	}
?&gt;

PS: noch zwei Bilder, wobei ich die Warnmeldung Simulieren musste.

Moin Jürgen!

Danke für deine Arbeit! Magst du uns mal 1,2,3 Screenshots posten, das man sieht was einen erwartet, wenn man dein Skript verwendet? :slight_smile:

Edit: Danke!

Grüße,
Chris

@Bayaro

erledigt.

Hallo,

ich bin bei den Regional-CVodes am verzweifeln.
Möchte die Warnungen für Osterholz-Scharmbeck in Niedersachsen haben.
Habe es jetzt so angepasst

   $ort                                             = 'OHZ';          // DWD-Key für Ort
    $ort_desc                                     = 'Osterholz-Scharmbeck';      // Freitext für Ortsname
   $lokal = "OHZ";
    // Warnlagebericht (Regionen)

    $region                             = 'HA';           // Regional-Code für Warnlageberichte eintragen (leer [''] => Deaktivierung der Warnlageberichte)
    $region1 = 'Osterholz-Scharmbeck';
$quelle = 'ftp://'.dwd_kennung.':'.dwd_passwort.'@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/HA';
// Folgendes Muster entsprechend anpassen
$pattern = 'WWHA*_OHZ*';

Bekomme aber nur diese Fehlermeldung:

Warning:  file_get_contents(ftp://...@ftp-outgoing2.dwd.de/gds/gds/specials/warnings/LZ/WWHA59_OHZX_312237): failed to open stream: FTP server reports 550 /gds/gds/specials/warnings/LZ/WWHA59_OHZX_312237: No such file or directory
 in [Wetter aktuell\DWD Wetterwarnungen\DWD Unwetterwarnungen\DWD Unwetterwarnungen] on line 167

Kann mir jemand sagen was falsch ist?

Hallo Horst,
das hatte ich auch, bei mir lag es daran das im FTP Ordner noch kein Bericht vorlag. In deinem Fall gibt es einen aber hast Du auch das HA in Zeile 167 angepasst? Genauso wie in Zeile 63.

Gruß Torsten

Hallo Torsten,

nee nicht angepasst, aber jetzt, danke.

jetzt hänge ich noch hier:

SetValueInteger($gueltig_ab_ID, $gueltig_ab_val);
SetValueInteger($gueltig_bis_ID, $gueltig_bis_val);

Warning: Wrong parameter type for SetValueInteger() in C:\IP-Symcon_2_0\scripts\52485.ips.php on line 243

Warning: Wrong parameter type for SetValueInteger() in C:\IP-Symcon_2_0\scripts\52485.ips.php on line 244

und wofür sind die Variablen:

setValueString(25174 /[Objekt #25174 existiert nicht]/, $warnung);
setValueString(31927 /[Objekt #31927 existiert nicht]/, $warnung);

Zeilen 280 und 281

Moin,

finde die passenden Regional-Codes nicht. Kann mir bitte jemand man nen Link geben bzw. nen Tipp wo ich die finde.

Gruß
hardlog

@hbraun,

Korrigiere mal in Zeile 223 „Sontag“ zu:

$a = str_replace('Sonntag, ', "", $a);