Nachdem ich doch schon einige Jahre das Forum beobachte und mir Anregeungen und Code übernommen habe, habe ich nun mal selbst gebastelt.
Bisher habe ich weder mit PHP noch mit HTML eigene Erfahrungen gesammelt.
Nachdem die Unwetterwarnung von Raktenschnecke nun nicht mehr funktionierte, war mein Ziel die JSON Daten aus der Seite des DWD’s auszulesen - ohne Anmeldung, ohne FTP und ohne Suchen nach den geeigneten Dateien in DWD Verzeichnissen.
Da mittel- und langfristig der DWD hier noch einige Änderungen vornehmen wird, sind aus meiner heutigen Sicht Änderungen in den JSON Daten auch zukünftig einfacher zu handhaben - habe aber auch keine Erfahrung!
Nach einigen Tagen ‚try and error‘ mein Ergebnis:
- Kategorie z.B. ‚Wetterwarnungen‘ anlegen
- Skript unterhalb der Kategotie anlegen und nachfolgenden Code einfügen.
- Region(en) bis zu 3) im Skript anpassen.
- Skript ausführen.
- Variablen werden autom. angelegt, aber beim ersten ‚Skript ausführen‘ noch nicht komplett gefüllt.
- Eine ‚Vorabinformation Unwetter‘ wird in diesem Skript aus den JSON Daten nicht ausgelesen!
In diesem Skript habe ich mich nur auf das Auswerten der JSON Datein konzentriert und es wird ein HTML String für den WFE zusammengebaut.
Im Skript könnte aber auch der WFE Teil komplett, zwischen den Tags ‚#WFE zusammenstellen Anfang‘ und ‚- Ende‘, entfernt werden oder nach eigenen Wünschen aufgebaut werden - Farbe, Form und Geschmack sind doch oft individuell.
Es sind einige Hilfsroutinen (Ausgabe über Echo und print_r ) eingebaut.
Email - oder SMS senden, Jalousien einfahren, Fenster u. Türen autom. schließen etc. sind nicht integriert und sollten meines Erachtens aushalb dieses Skripts abgehandelt werden. Dazu könnte z.B. ein Event Trigger an die IPS Variable ‚DWD Wetterwarnungen Region - Anzahl‘ angehängt werden.
Das Skript wurde mit IP-Symcon 3.4 erstellt.
<?
// Stand: 10.12.2015
// siehe DWD: http://www.dwd.de/DE/wetter/warnungen_aktuell/objekt_einbindung/objekteinbindung.html
// JavaScript Object Notation (JSON-File)
// Aktualisierung: nach Bedarf, spätestens nach 10 Minuten
// Warnkriterien: alle, aber auch einzeln auslesbar
// Über den Pfad http://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json wird eine Json-Datei zur Verfügung gestellt, in der der Warnstatus für Deutschland dargestellt wird.
// Die einzelnen Kreise und Kriterien können über selbst erstellte Scripte ausgelesen und als Text oder Grafik umgesetzt werden.
// Ausblick
// Auch zukünftig werden wir das Angebot verbessern und erweitern:
// Voraussichtlich ab Ende November werden die Bilder der Warnsituation der einzelnen Bundesländer und verschiedener Warnkriterien bereitgestellt werden.
// Wir planen das flashbasierte Warnmodul durch ein neues Angebot einer konfigurierbaren Warndarstellung ersetzen.
// Langfristig wird das Warnmanagement auf Gemeindewarnungen umgestellt werden.
// ####### Regionen definieren - anpassen ######
// Den exaten Namen einer Region entnimmt man der Seite http://www.dwd.de/DE/wetter/warnungen/warnWetter_node.html
$regionInput1 = "Kreis Harz - Bergland (Oberharz)"; // primäre Region
$regionInput2 = "Kreis Garmisch-Partenkirchen"; // sekundäre Region - Nachbarregion oder Finca
$regionInput3 = "Kreis Cuxhaven - Küste"; // sekundäre Region - Nachbarregion oder Datscha
$warningThreshold = 0; // Warning Level ab dem die Anzahl der Warnmeldungen für die Regionen gezählt wird
// 0 = alles wird gezählt, 1= nur Vorabinf. werden nicht gezählt, 2 = Vorabinf. und einfache Warnungen (gelb) werden nicht gezählt .....
// #############################################
// ####### Ausgaben auf der Management Console aktivieren bzw. deaktivieren #######
$listOverview = false; // Auflisten einer Übersicht - ggf. zwecks Analyse einschalten
$listDetails = false; // Auflisten des unformatierten Inhalts - ggf. zwecks Analyse einschalten
$listRegion = false; // Auflisten der Regionen für die eine Warnmeldung vorhanden ist - zwecks zur Analyse einschalten
$listRegionSel = false; // Auflisten der ausgewählten Regionen - ggf. zwecks Analyse einschalten
// #############################################################################
$DWDwarnings = array(); // Neues Array mit Wetterwarnungen der oben angegebenen Regionen definieren
$currentWarnigs = 0; // Anzahl aktuellen Warnungen
// Variablen-Definitionen
$VarNames[0] = array('name'=>'DWD Wetterwarnungen letzte Aktualisierung (UNIX-Timestamp)', 'type'=>1, 'hidden'=>true, 'profil'=>'~UnixTimestamp', 'position'=> -50, 'default_value'=>0,);
$VarNames[1] = array('name'=>'DWD Wetterwarnungen Region - Anzahl', 'type'=>1, 'hidden'=>true, 'profil'=>'', 'position'=> -40, 'default_value'=>0,);
$VarNames[2] = array('name'=>'DWD Wetterwarnungen für Region(en) - letzte Veränderung (UNIX-Timestamp)', 'type'=>1, 'hidden'=>true, 'profil'=>'~UnixTimestamp', 'position'=> -30, 'default_value'=>0,);
$VarNames[3] = array('name'=>'DWD Wetterwarnungen für Region(en) - Beschreibung der letzten Veränderung', 'type'=>3, 'hidden'=>true, 'profil'=>'', 'position'=> -20, 'default_value'=>'- bisher keine Änderung erfolgt',);
$VarNames[4] = array('name'=>'DWD Wetterwarnungen WFE', 'type'=>3, 'hidden'=>false, 'profil'=>'~HTMLBox', 'position'=> -60, 'default_value'=>'',);
// übergeordnete Instanz identifizieren
$Parent = IPS_GetParent($_IPS['SELF']);
$ParentModul = IPS_GetObject($Parent);
// 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 Wetterwarnungen') && ($Update == false))
{
// Variablen identifizieren
$letzteAktualisierung_ID = IPS_GetObjectIDByName($VarNames[0]['name'], IPS_GetParent($_IPS['SELF']));
$anzahlMeldungen_ID = IPS_GetObjectIDByName($VarNames[1]['name'], IPS_GetParent($_IPS['SELF']));
$letzteAenderung_ID = IPS_GetObjectIDByName($VarNames[2]['name'], IPS_GetParent($_IPS['SELF']));
$letzteAenderungBeschr_ID = IPS_GetObjectIDByName($VarNames[3]['name'], IPS_GetParent($_IPS['SELF']));
$WFE_ID = IPS_GetObjectIDByName($VarNames[4]['name'], IPS_GetParent($_IPS['SELF']));
// IPS Werte auslesen
$letzteAktualisierung = getValueInteger($letzteAktualisierung_ID);
$anzahlMeldungen = getValueInteger($anzahlMeldungen_ID);
$letzteAenderung = getValueInteger($letzteAenderung_ID);
$letzteAenderungBeschr = getValueString($letzteAenderungBeschr_ID);
$WFE = getValueString($WFE_ID);
}
#######################################################################################################################################
// Install-Routinen
elseif($_IPS['SENDER'] == 'Execute')
{
if((($ParentModul['ObjectType'] != 1) && ($ParentModul['ObjectName'] != 'DWD Wetterwarnungen')) || ($Update == true))
{
if(($ParentModul['ObjectType'] != 1) && ($ParentModul['ObjectName'] != 'DWD Wetterwarnungen'))
{
// Dummy-Instanz anlegen und Script drunterhängen
$ModulID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetName($ModulID, 'DWD Wetterwarnungen');
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 'Script Name #'.$_IPS['SELF'];
echo "#9999 IPS Wetterwarnung: Install ready (neue Objekte angelegt)
";
if(function_exists("IPSLogger_Dbg")) IPSLogger_Dbg(c_LogId, "#9999 IPS Wetterwarnung: Install ready (neue Objekte angelegt)");
}
else
{
echo "Script #".$_IPS['SELF']." Wetterwarnung: ohne Ergebnis gelaufen (keine Objekte gefunden/Objekte fehlerhaft
";
if(function_exists("IPSLogger_Err")) IPSLogger_Err(c_LogId, "Script #".$_IPS['SELF']." Wetterwarnung: ohne Ergebnis gelaufen (keine Objekte gefunden/Objekte fehlerhaft)");
}
// Timer-Management
IPS_SetScriptTimer($_IPS['SELF'], 10*60);
// ########### Warnmeldung von DWD Webseite auslesen ##########################
// JSON Objekt holen
$json = file_get_contents("http://www.wettergefahren.de/DWD/warnungen/warnapp/warnings.json");
if( empty($json) )
{ IPS_LogMessage( IPS_GetName($_IPS['SELF']), "can't get url content"); return; }
// var_dump($json);
// Warnmeldungen aus dem JSON Objekt extrahieren
$unit = extract_unit($json, 'warnWetter.loadWarnings(', ');'); // Daten aus dem JSON Objekt extrahieren
// var_dump($unit);
// $unit = utf8_encode($unit); // bringt nicht den gewünschten Effekt
$data = trans_Umlaut($unit); // Umlaute und "ß" zwecks nachfolgendem json_decode entfernen und mit "..Q" markieren
$weather_alerts = json_decode($data); // Daten formatieren
$reg1wrncnt = 0;
$reg2wrncnt = 0;
$reg3wrncnt = 0;
// ************ Overview ***********************************************
if ( $listOverview == true )
{
echo "Letzte Aktualisierung durch DWD am ".trans_d(substr($weather_alerts->time, 0, 10))." ".date('d.M Y H:i', substr($weather_alerts->time, 0, 10)). "
";
echo " Es sind für ".count((array)$weather_alerts->warnings)." Regionen Warnmeldungen vorhanden
";
echo " Es sind für ".count((array)$weather_alerts->vorabInformation)." Regionen Vorabinformationen vorhanden
";
}
// ************ Details ***********************************************
if ( $listDetails == true )
{
echo "======================= Warnings ======================
";
print_r($weather_alerts->warnings);
echo "================== Vorabinformation ===================
";
print_r($weather_alerts->vorabInformation);
}
// ************ Region ***********************************************
if($listRegion == true)
{
echo "Warnmeldungen für folgende Regionen sind z.Zt. vorhanden:
";
// print_r ($weather_alerts->warnings);
// var_dump($weather_alerts->warnings);
}
$i = 0;
foreach($weather_alerts->warnings as $value)
{
// var_dump($value);
for($j=0;$j<(count($value));$j++)
{
// print_r($value[$j]);
// echo "next value ".$j."
";
$data= trans_toUmlaut(($value[$j]->regionName));
$value[$j]->regionName = $data;
// echo "
".$value[$j]->regionName;
$data = trans_toUmlaut($value[$j]->event);
$value[$j]->event = $data;
// echo "
".$value[$j]->event;
$data = trans_toUmlaut($value[$j]->headline);
$value[$j]->headline = $data;
// echo "
".$value[$j]->headline;
$data = trans_toUmlaut($value[$j]->description);
$value[$j]->description = $data;
// echo "
".$value[$j]->description;
$data = trans_toUmlaut($value[$j]->instruction);
$value[$j]->instruction = $data;
// echo "
".$value[$j]->instruction;
$data = trans_toUmlaut($value[$j]->state);
$value[$j]->state = $data;
// echo "
".$value[$j]->instruction;
// *********************************************************************
// echo " =================== Region : ".$i." Warnung #: ".$j."
";
// echo $j."
";
// print_r($value[$j]);
// *********************************************************************
if (($value[$j]->regionName == $regionInput1) or ($value[$j]->regionName == $regionInput2) or ($value[$j]->regionName == $regionInput3))
{
$DWDwarnings[$value[$j]->regionName] = $value; // Aufbau einer eigenen Tabelle mit den Angaben aus $regionInput1, -2, -3
}
// Hier wird eingestellt ab welcher Warnstufe die aktuelle Anzahl Meldungen hochgezählt wird
if (($value[$j]->level > $warningThreshold) and (($value[$j]->regionName == $regionInput1) or ($value[$j]->regionName == $regionInput2) or ($value[$j]->regionName == $regionInput3)))
{
$currentWarnigs = $currentWarnigs + 1; // Aktuelle Anzahl von Meldungen größer Level 0 zählen
switch ($value[$j]->regionName)
{
case $regionInput1:
$reg1wrncnt=$reg1wrncnt+1;
break;
case $regionInput2:
$reg2wrncnt=$reg2wrncnt+1;
break;
case $regionInput3:
$reg3wrncnt=$reg3wrncnt+1;
break;
}
// echo "
Anzahl Warnmeldungen > Warnstufe 0 : aktueller Level: ".$value[$j]->level." Anzahl Warnmeldumgen insges: ".$currentWarnigs."
";
// echo "
Region 1: ".$reg1wrncnt;
// echo "
Region 2: ".$reg2wrncnt;
// echo "
Region 3: ".$reg3wrncnt;
// echo "
";
}
if(($listRegion == true) and ($j == 0))
{
echo $value[$j]->regionName."
"; // Regionsnamen für die eine Meldung vorhanden ist auflisten
}
// ************ RegionSel ***********************************************
if ($listRegionSel == true)
{
if (($value[$j]->regionName == $regionInput1) or ($value[$j]->regionName == $regionInput2) or ($value[$j]->regionName == $regionInput3))
{
if ($j == 0)
{
echo "
**************************************************************************";
echo "
Für die Region ".$value[$j]->regionName." sind ".count($value)." Meldungen vorhanden" ;
echo "
**************************************************************************";
}
// print_r($value[$j]);
echo "
** Warnmeldung #".($j+1)." **";
echo "
Warnstufe............: ".$value[$j]->level;
// 5 = Warnungen vor extremem Unwetter
// 4 = Unwetterwarnungen
// 3 = Warnungen vor markantem Wetter
// 2 = Wetterwarnungen
// 1 = Vorabinformatio Unwetter
echo "
Warntyp..............: ".$value[$j]->type;
// In folgender Tabelle sind Warntypen mit ? markiert, die noch nicht in der Praxis getestet werden konnten!
// 0 = Gewitter inklusive Begleiterscheinungen ?
// 1 = Wind/Sturm/Orkan
// 2 = Stark- und Dauerregen
// 3 = Schneefall/Schneeverwehungen
// 4 = Nebel ?
// 5 = Frost
// 6 = Glätte/Glatteis
// 7 = Tauwetter ?
// 8 = Hitzewarnungen ?
// 9 = UV-Warnungen ?
//10 = Küstenwarnungen ?
//11 = Binnenseewarnungen ?
echo "
Ab ( Höhenmeter )...: ".$value[$j]->altitudeStart;
echo "
Bis ( Höhenmeter )...: ".$value[$j]->altitudeEnd;
$timestamp = substr($value[$j]->start, 0, 10);
$dow = trans_d($timestamp);
$start = $dow.", ".date('d.M Y H:i', $timestamp)." Uhr ";
echo "
Beginnzeitpunkt......: ".$start;
$timestamp = substr($value[$j]->end, 0, 10);
$dow = trans_d($timestamp);
$end = $dow.", ".date('d.M Y H:i', $timestamp)." Uhr ";
echo "
Endzeitpunkt.........: ".$end;
echo "
Ereignis.............: ".$value[$j]->event;
echo "
Kopfzeile............: ".$value[$j]->headline;
echo "
Beschreibung.........: ".$value[$j]->description;
echo "
Anweisung............: ".$value[$j]->instruction;
echo "
Bundesland...........: ".$value[$j]->state;
echo "
";
}
}
// echo "
============================================================";
}
// print_r($value);
// echo "
".$i;
$i=$i+1;
}
if ($listRegionSel == true){
echo "
Es sind ".($i)." Meldungen durchsucht worden
";
}
if (($listRegionSel == true) or ($listDetails == true)){
echo "
".$weather_alerts->copyright." - siehe: http://www.dwd.de/DE/service/copyright/copyright_node.html
";
}
if ( $Update == true )
{
echo "===================== Installation / Erster Lauf =====================
";
echo "=== Es können noch keine IPS Variablen gesetzt oder gelesen werden ============
";
}
else
{
$previousWarnigs = GetValueInteger($anzahlMeldungen_ID);
if ($previousWarnigs == $currentWarnigs) {
$msg=' ';
// echo " keine Veränderung";
}else{
$msg = " von bisher ".$previousWarnigs." auf ".$currentWarnigs." Meldungen";
// echo $msg;
SetValueInteger($letzteAenderung_ID, time());
setValueString($letzteAenderungBeschr_ID, $msg);
}
// Letzte Aktualisierung als UNIX TIMESTAMP
// echo substr($weather_alerts->time, 0, 10);
SetValueInteger($letzteAktualisierung_ID, intval(substr($weather_alerts->time, 0, 10)));
SetValueInteger($anzahlMeldungen_ID, $currentWarnigs);
}
// ***********************************************
// Eigene Tabelle ausgeben - Beispiele:
// ***********************************************
// Die gesamte eigenen Tabelle ausgeben
// print_r($DWDwarnings);
// Zugriff auf Index regionName
//print_r($DWDwarnings[$regionInput1]);
// Zugriff auf Index regionName und ersten Tabelleneintrag
//Zuerst Anzahl der Einträge ermitteln
if (array_key_exists($regionInput1 , $DWDwarnings )){
$warnNbr = count((array)($DWDwarnings[$regionInput1]));}
else{$warnNbr = 0;}
//echo "Tabelleneinträge für Region = ".$warnNbr."
";
//Zugriff auf erste Warnmeldung - Gezählt wird ab 0!
if($warnNbr > 0 ){
// print_r($DWDwarnings[$regionInput1][0]);
// print_r($DWDwarnings[$regionInput1][0]->headline);
}
//Zugriff auf dritte Warnmeldung - Gezählt wird ab 0!
if($warnNbr > 2 ){
// print_r($DWDwarnings[$regionInput1][0]);
// print_r($DWDwarnings[$regionInput1][2]->headline);
}
// print_r(($DWDwarnings[$regionInput1][1]));
// print_r(($DWDwarnings[$regionInput1][2]));
// print_r($DWDwarnings[$regionInput2]);
// print_r($DWDwarnings[$regionInput3]);
// #WFE zusammenstellen - Anfang
// Definition HTML-Content
$dow = trans_d(intval(substr($weather_alerts->time, 0, 10))); // day of week ermitteln
$lastupdate = $dow.", ".date('d.m.Y H:i', intval(substr($weather_alerts->time, 0, 10)))." Uhr ";
if ( $Update == true )
{
echo "===================== Installation / Erster Lauf =====================
";
echo "=== Es können noch keine IPS Variablen gesetzt oder gelesen werden ============
";
$warningsChanged = date('d.m.Y H:i',time());
}
else
{$warningsChanged = date('d.M Y H:i',GetValueInteger($letzteAenderung_ID));}
if(isset($DWDwarnings[$regionInput1][0]->end) == false){
Echo "
Es ist keine Warnmeldung für $regionInput1 vorhanden";
echo "
Für den WFE wird der Zähler von $reg1wrncnt auf 0 gesetzt!
";
// $currentWarnigs = 0;
}
$WL_Header = '<FONT SIZE="1">DWD Meldungen von: </FONT><b>'.$lastupdate.'</b>';
if($reg1wrncnt == 0){
$WL_Title = ' Keine Warnmeldung für die Region '.$regionInput1.' vorhanden';
}
else {
echo $reg1wrncnt.' Warnungen für Region '.$regionInput1."
";
echo $reg2wrncnt.' Warnungen für Region '.$regionInput2."
";
echo $reg3wrncnt.' Warnungen für Region '.$regionInput3."
";
$w = 0;
$WL_Title = ' ';
for($w=0;$w < $reg1wrncnt; $w++)
{
switch ($DWDwarnings[$regionInput1][$w]->level)
{
case 0:
// echo "
Warnig level ist 0
";
$WarnBoxColor = '#C5E566'; // grün: keine Warnungen
$WarnBoxColor = '#E2E9FD'; // blau wie der Hintergrund: keine Warnungen
break;
case 1:
// echo "
Warnig level ist 1
";
break;
case 2:
// echo "
Warnig level ist 2
";
$WarnBoxColor = '#FFFF00'; // gelb: Wetterwarnungen
break;
case 3:
// echo "
Warnig level ist 3
";
$WarnBoxColor = '#FA9600'; // orange: Warnungen vor markantem Wetter
break;
case 4:
// echo "
Warnig level ist 4
";
$WarnBoxColor = '#FF0000'; // rot: Unwetterwarnungen
break;
case 5:
// echo "
Warnig level ist 5
";
$WarnBoxColor = '#AF0064'; // violett: Warnungen vor extremen Unwetter
break;
}
if (date('Yz', (substr($DWDwarnings[$regionInput1][$w]->end, 0, 10))) != date('Yz', (substr($DWDwarnings[$regionInput1][$w]->start, 0, 10))))
{
$dows = trans_d(substr($DWDwarnings[$regionInput1][$w]->start, 0, 10)); // day of week ermitteln
$startTimestamp = $dows.". ".date('d.m.Y H:i',substr($DWDwarnings[$regionInput1][0]->start, 0, 10))." Uhr ";
$dowe = trans_d(substr($DWDwarnings[$regionInput1][$w]->end, 0, 10)); // day of week ermitteln
$endTimestamp = $dowe.". ".date('d.m.Y H:i',substr($DWDwarnings[$regionInput1][$w]->end, 0, 10))." Uhr ";
$WL_Title = '<p>'.$WL_Title.'</br>'.$startTimestamp.'<FONT SIZE="1">  bis </FONT><b> </br>'.$endTimestamp.' - '.$DWDwarnings[$regionInput1][$w]->headline.'</p>';
}
else
{
$dows = trans_d(substr($DWDwarnings[$regionInput1][$w]->start, 0, 10)); // day of week ermitteln
$startTimestamp = $dows.". ".date('d.m.Y H:i',substr($DWDwarnings[$regionInput1][0]->start, 0, 10));
$dowe = trans_d(substr($DWDwarnings[$regionInput1][$w]->end, 0, 10)); // day of week ermitteln
$endTimestamp = date('H:i',substr($DWDwarnings[$regionInput1][$w]->end, 0, 10))." Uhr ";
$WL_Title = '<p>'.$WL_Title.'</br>'.$startTimestamp.' - '.$endTimestamp.' - '.$DWDwarnings[$regionInput1][$w]->headline.'</p>';
}
}
}
$WL_Body = ' ';
$WarnColor = '#C5E566'; // grün: keine Warnungen
// UNIX-Timestamp
$unix = time();
$tmlnend=0; // timeline end
$tmlnstr=0; // timeline start
// echo count($DWDwarnings);
if (count($DWDwarnings) > 0 )
if(isset($DWDwarnings[$regionInput1][0]->state)){$BL = ($DWDwarnings[$regionInput1][0]->state);} // Bundesland
$HTML_Header ='
<html>
<head>
<style type="text/css" media="screen"> body { background-color:#efefef;}
</style>
</head>';
if ($reg1wrncnt > 0){
$elapsed=0; // Dauer der Warnung in h
$elapsed = ((substr($DWDwarnings[$regionInput1][0]->end, 0, 10) - (substr($DWDwarnings[$regionInput1][0]->start, 0, 10)))/3600);
// Anfang ist nicht heute dann Beginn 0Uhr
// Ende ist nicht heute dann Ende 24Uhr
$heuteTag = date('Yz', time()); echo "Heute ".$heuteTag."
";
$endeTag = date('Yz', (substr($DWDwarnings[$regionInput1][0]->end, 0, 10))); echo "Ende ".$endeTag."
";
$beginnTag = date('Yz', (substr($DWDwarnings[$regionInput1][0]->start, 0, 10))); echo "Anfang ".$beginnTag."
";
if ($beginnTag != $heuteTag) {$tmlnstr=0; echo "Ende in der Anzeige auf 24Uhr gestetzt
";}
else{$tmlnstr = date('H',(substr($DWDwarnings[$regionInput1][0]->start, 0, 10)));}
if ($endeTag != $heuteTag) {$tmlnend=24; echo "Ende in der Anzeige auf 24Uhr gestetzt
";}
else{$tmlnend = date('H',(substr($DWDwarnings[$regionInput1][0]->end, 0, 10)));}
$tmlnbgn=$tmlnstr*29;
$tmlnstp=$tmlnend*29;
echo "
Begin ".$tmlnstr."h Stop ".$tmlnend."h Dauer ".$elapsed."h";
echo "
Begin ".$tmlnbgn."px Stop ".$tmlnstp."px
";
if ($reg1wrncnt == 0){
$WarnColor = '#E2E9FD'; // blau wie der Hintergrund: keine Warnungen
}
else {
switch ($DWDwarnings[$regionInput1][0]->level) {
case 0:
// echo "
Warnig level ist 0
";
$WarnColor = '#C5E566'; // grün: keine Warnungen
break;
case 1:
// echo "
Warnig level ist 1
";
break;
case 2:
// echo "
Warnig level ist 2
";
$WarnColor = '#FFFF00'; // gelb: Wetterwarnungen
break;
case 3:
// echo "
Warnig level ist 3
";
$WarnColor = '#FA9600'; // orange: Warnungen vor markantem Wetter
break;
case 4:
// echo "
Warnig level ist 4
";
$WarnColor = '#FF0000'; // rot: Unwetterwarnungen
break;
case 5:
// echo "
Warnig level ist 5
";
$WarnColor = '#AF0064'; // violett: Warnungen vor extremen Unwetter
break;
}
}
// Timeline erstellen
$timeline =
' <div style="border:1px solid rgb(220, 220, 220); width:714px; height:40px; margin-left:auto; margin-right:auto; margin-top:auto; margin-bottom:auto; text-align:left;">
<div style="background-color:#E2E9FD; width:696px;height:10px;" id="balken1">
<div style="background-color:'.$WarnColor.'; width:'.$tmlnstp.'px;height:10px;" id="balken2">
<div style="background-color:#E2E9FD; width:'.$tmlnbgn.'px;height:10px;" id="balken3">
</div></div></div>
<div style="line-height:30px;margin-top:0px;text-align:justify"></div>
<font size="1" color="#A9A9A9" face="Arial">00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00 08:00 09:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00 24:00</font>
</div>
';
}
else
{$timeline =
' <div style="border:1px solid rgb(220, 220, 220); width:714px; height:0px; margin-left:auto; margin-right:auto; margin-top:auto; margin-bottom:auto; text-align:left;">
</div>
';}
$HTML_Table ='
<body scroll="no">
<table
style="text-align: left; margin-left: auto; margin-right: auto; background-color: rgb(220, 220, 220); width: 720px; 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;" colspan="3">'.$WL_Header.'</td>
</tr>
<tr>
<td style="width: 716px; color: #333333; background-color: #E2E9FD; text-align: left;" colspan="3"><FONT SIZE="1">Meldungen für Region: </FONT><b>'.$regionInput1.'</b></td>
</tr>
<tr>
<td style="width: 716px; color: #333333; background-color: #E2E9FD; text-align: center;" colspan="3">'.$timeline.'</td>
</tr>';
// zeile 120: <td style="width: 716px; color: #333333; background-color: #E2E9FD; text-align: center;" colspan="3">.'Hier fehlt die Darstellung des Zeitstrahls'.$unix.'"></img></td>
// Gewittererkennung (Schlagwortsuche im Warnungs-String)
$Blitzkarte = false;
if (array_key_exists($regionInput1 , $DWDwarnings )){
if(strpos($DWDwarnings[$regionInput1][0]->description,"GEWITTER") != false)
{
$Gewitter = true;
}
else
{
$Gewitter = false;
}
$Gewitter = false; // obige Abfrage bringt anschließend keine Blizkarte
// true: tauscht bei Gewitter-Warnmeldungen das SAT24-PIC gegen die Wetteronline-Blitzkarte DE
$Blitzkarte = true; // true: tauscht bei Gewitter-Warnmeldungen das SAT24-PIC gegen die Wetteronline-Blitzkarte DE
// Definition 3. RADAR-Pic: Blitzkarte DE (Alternative)
if ($currentWarnigs == 0){$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/DL/green_flat/DL_Track.gif" width="222" height="225"></a></img></td>';
}
else {
$BLs= trans_BL($BL); // Kürzel des Bundeslandes ermitels
// echo $BLs;
// kleine Bundesländer werden in Anzeigen größerer Länder dargestellt
switch ($BL) {
case "Berlin":
$BL = "Brandenburg";
break;
case "Hamburg":
$BL = "Schleswig-Holstein";
break;
case "Bremen":
$BL = "Niedersachsen";
break;
case "Saarland":
$BL = "Reinland-Pfalz";
break;
}
$wo_Blitzkarte ='
<a
href="http://www.wetteronline.de/blitze/'.$BL.'" 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/'.$BLs.'/green_flat/'.$BLs.'_Track.gif" 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>';
if(($Blitzkarte) && ($Gewitter))
{
$HTML_Radar ='
<tr>
<td style="width: 293px; color: #333333; background-color: #E2E9FD; text-align: right;">
'.$nr_Regenradar.'
<td style="width: 155px; color: #333333; background-color: #E2E9FD; text-align: center;">
<a
href="http://www.wettergefahren.de/DWD/warnungen/warnapp/warning_map.png>
<img style="width: 159px; height: 225px; alt="DWD Unwetterkarte"
src="http://www.wetteronline.de/?ireq=true&pid=p_blitze_map&src=blitze/vermarktung/p_blitze_map/www/Track/NIE/green_flat/NIE_Track.gif" width= "159" height= "225"></a></img></td>
<td style="width: 305px; color: #333333; background-color: #E2E9FD; text-align: left;">
'.$wo_Blitzkarte.'
</tr>
';
// src="http://www.wettergefahren.de/dyn/app/ws/maps/DE_x_x_0.gif?'.$unix.'" width= "159" height= "225"></a></img></td>
echo 'Unwetterkarte wird nicht angezeigt!';
}
else
{
$HTML_Radar ='
<tr>
<td style="width: 216px; color: #333333; background-color: #E2E9FD; text-align: right;">
'.$nr_Regenradar.'
<td style="width: 155px; color: #333333; background-color: #E2E9FD; text-align: center;">
<a
href="http://www.wettergefahren.de/warnungen/warnsituation.html" target="_blank">
<img style="width: 180px; height: 225px; alt="DWD Unwetterkarte"
src="http://www.wettergefahren.de/DWD/warnungen/warnapp/warning_map.png?nocache='.$unix.'" width= "180" height= "225"></a>
</img>
</td>
<td style="width: 305px; color: #333333; background-color: #E2E9FD; text-align: left;">
<a
href="http://www.sat24.com/de" target="_blank">
<img style="width: 230px; height: 225px; alt="Satellitenbild DE Sat24"
src="http://www.sat24.com/image.ashx?country=de&type=loop&sat=vis?'.$unix.'" width= "230" height= "225"></a></img></td>
</tr>';
echo "Unwetterkarte aktualisiert!
";
}
if ( $Update == true )
{
echo "===================== Installation / Erster Lauf =====================
";
echo "=== Es können noch keine IPS Variablen gesetzt oder gelesen werden ============
";
$HTML_Warnings =$warningsChanged.' - Änderung der Warnlage - unverändert nach Erstinstallation'.'</br>';
}
else
{
$HTML_Warnings =$warningsChanged.' - Änderung der Warnlage '.GetValueString($letzteAenderungBeschr_ID).'</br>';}
$HTML_WarnLTitle = '</br> Regionen: '.$regionInput1.' - '.$regionInput2.' - '.$regionInput3.'</br>
<tr>
<td style="width: 716px; color: #333333; background-color: #E2E9FD ; font-family: Arial; font-weight: bold; font-size: 10pt;" 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.'<br /><br /></td>
</tr>';
$HTML_WarnLage = $HTML_WarnLTitle.$HTML_WarnLBody;
$HTML_Footer ='
</tbody>
</table>
</body>
</html>
';
$WFE_Content = ($HTML_Table.$HTML_Radar.$HTML_Warnings.$HTML_WarnLage.$HTML_Footer);
if ( $Update == true )
{
echo "===================== Installation / Erster Lauf =====================
";
echo "=== Es können noch keine IPS Variablen gesetzt oder gelesen werden ============
";
}
else
{
SetValueString($WFE_ID, $WFE_Content);
}
// #WFE zusammenstellen - Ende
// *********************************************************
// *********************** Funktionen **********************
// *********************************************************
// *** JSON Daten aus JSON Stream extrahieren ***
function extract_unit($string, $start, $end)
{
$pos = stripos($string, $start);
$str = substr($string, $pos);
$str_two = substr($str, strlen($start));
$second_pos = stripos($str_two, $end);
$str_three = substr($str_two, 0, $second_pos);
$unit = trim($str_three); // remove whitespaces
return $unit;
}
// *** Umlaute als Sonderzeichen entfernen
function trans_Umlaut($unit)
{
$trans = array(
'Ä' => 'AeQ',
'Ö' => 'OeQ',
'Ü' => 'UeQ',
'ä' => 'aeQ',
'ö' => 'oeQ',
'ü' => 'ueQ',
'ß' => 'ssQ',
//**
'Ä' => 'AeQ',
'Ö' => 'OeQ',
'Ü' => 'UeQ',
'ä' => 'aeQ',
'ö' => 'oeQ',
'ü' => 'ueQ',
'ß' => 'ssQ',
);
$data = strtr($unit, $trans);
return $data;
}
// Textformatierung
function trans_toUmlaut($unit)
{
$trans = array(
'AeQ' => 'Ä',
'OeQ' => 'Ö',
'UeQ' => 'Ü',
'aeQ' => 'ä',
'oeQ' => 'ö',
'ueQ' => 'ü',
'ssQ' => 'ß',
'm²' => 'm²',
' °C' => '°C',
);
$data = strtr($unit, $trans);
return $data;
}
function trans_d($timestamp)
{
$transd = array(
'Monday' => 'Montag',
'Tuesday' => 'Dienstag',
'Wednesday' => 'Mittwoch',
'Thursday' => 'Donnerstag',
'Friday' => 'Freitag',
'Saturday' => 'Samstag',
'Sunday' => 'Sonntag',
'Mon' => 'Mo',
'Tue' => 'Di',
'Wed' => 'Mi',
'Thu' => 'Do',
'Fri' => 'Fr',
'Sat' => 'Sa',
'Sun' => 'So',
'January' => 'Januar',
'February' => 'Februar',
'March' => 'März',
'May' => 'Mai',
'June' => 'Juni',
'July' => 'Juli',
'October' => 'Oktober',
'December' => 'Dezember'
);
$dow = strtr(date("D", $timestamp), $transd);
return $dow;
}
function trans_BL($BL)
{
$trans = array(
'Baden-Württemberg ' => 'BWB',
'Bayern' => 'BAY',
'Berlin' => 'BRA',
'Brandenburg' => 'BRA',
'Bremen' => 'NIE',
'Hamburg' => 'SHS',
'Hessen' => 'HES',
'Mecklenburg-Vorpommern' => 'MVP',
'Niedersachsen' => 'NIE',
'Nordrhein-Westfalen' => 'NRW',
'Reinland-Pfalz' => 'RHP',
'Saarland' => 'RHP',
'Sachsen' => 'SAC',
'Sachsen-Anhalt' => 'SAH',
'Schleswig-Holstein' => 'SHS',
'Thüringen' => 'THU',
);
$BLs = strtr($BL, $trans);
return $BLs;
}
?>
Gruss Klaus