DWD (Un)Wetterwarnung

Hallo in die Runde,

Ich habe mich auch mal ein bisschen mit den DWD Wetterdaten beschäftigt und wollte das Ergebnis mal hier teilen.

Weitere Anregungen zur Verbesserung sind gerne Willkommen.

Version 0.31 - FIx Variablen Profilerstellung
Version 0.33 - (voruebergehender) Fix für IPS 4.0 bei Umlautproblemen
Version 0.35 - Warnbilder an-/abschaltber
Version 0.37 - weitere Warnungen hinzugefügt


<?

# ******************************************
# Wettervorhersage / Warnungen aus den Daten des DWD
#
# nach Anregungen aus dem Forum:
# https://www.symcon.de/forum/threads/18782 /*[Objekt #18782 existiert nicht]*/-DWD-Unwetterwarnung-%28WFE-Mail-und-html%29?highlight=dwd+unwetterwarnung+wfe
# https://www.symcon.de/forum/threads/29674 /*[Objekt #29674 existiert nicht]*/-DWD-Wetterwarnungen-JSON-Daten-auswerten
#
# Username: dzvo
# Stand: v0.35 - 11.03.2016
#
# 0.31
#  - Grosse Vorschaubilder des aktuellen Wetters eingefuegt (muss noch eventuell nachgearbeitet werden ;-) )
#  - Fix VariablenProfil
#
# 0.33
# 	- Es gibt zusaetzlich Variablen fuer die externe Benutzung:
#	- Warnlevel - die Zahl der hoechsten Warnstufe ueber alle Kreise
# 	- Warnevent - in kurzform zusammengefasste Infos zur Verarbeitung als Pushnachricht
# 	  beide Variablen werden nur auf Aendrung aktualisiert damit nicht jedesmal bei gleichem Inhalt eine Nachricht gesente wird.
#
# 0.35
#  - Ueber eine Variable ($warnbilder_anzeigen) definiert ob die Landkreis Warnbilder mit angezeigt werden sollen oder nicht.
#
# 0.36
#  - Fehlerbeseitigung, wenn keine Warnmeldungen vorlagen
#
# 0.37
#  - weitere Warnungen hinzugefügt
#
# Installation
# ------------
# Einfach Ausfuehren, die benoetigten Variablen werden automatisch angelegt.
#
#
# Bekannte Fehler
# ---------------
# Da ich leider keine umfassende Uebersicht der einzelnen definitonen des aktuellen Wetters gefunden habe, kommt es vor das
# bei neuen Wettervorkommnissen ab Zeile 410 / das Array weiter gefuellt werden muss. Gerne pfelge ich diese nach.
# Unter Übersicht unter http://www.dwd.de/DE/wetter/warnungen_aktuell/objekt_einbindung/objekteinbindung.htm gibt es eine Uebersicht
# der von DWD zur Verfuegung gestellen Kreise.
#
# Konfiguration
# -------------
# Hier eine beliebige Anzahl von Warnkreisen eintragen
# Die passenden Regionsnamen findet man unter der Übersichtskarte nach dem ankicken der Region
# http://wettergefahren.de/warnungen/warnsituation.html
#

$region = array ("Hansestadt Hamburg", "Ostfrisische Küste", "Nordfriesische Küste", "Kreis Prignitz");


# Anzahl der Warnbilder in einer Zeile
$warnbilder_anzeigen = true;
$warnbilder_tabellenbreite = 715;
$warnbilder_anzahl_je_reihe = 6;

# Im Debug Modus das Script einfach 2 mal hintereinader ausfuehren.
# Dadurch das dass Script nicht über dem Timer ausgeführt wird werden alle Orte / Warnungen ausgewertet, ob z.B. alle Billder geladen werden.
# Wird das Script über den Timer ausgeführt werden nur die eigenen Orte geladen.

$debug = true;


# *** Script Code *******************************

// Datenquelle
$json = file_get_contents("http://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json");


// fals die Daten nicht geladen werden koennen
if( empty($json) || $json == "" ) { goto ende; }
// Erst einmal die Enden Abschneiden
$daten = json_decode(substr($json, 24, strlen($json) - 26 ),TRUE);


// Daten aufloesen
$daten_einzeln = array();
	if( !empty($daten['warnings']) ) {
		foreach($daten['warnings'] as $eintrag ) {
					for ( $i = 0; $i < count($eintrag); $i ++ ) {
						$daten_einzeln[] =
								array("state" => utf8_decode($eintrag[$i]['state']),
										"stateShort" => $eintrag[$i]['stateShort'],
										"regionName" => utf8_decode($eintrag[$i]['regionName']),
										"description" => utf8_decode($eintrag[$i]['description']),
										"startTime" => date("d.m.Y H:i:s", substr($eintrag[$i]['start'], 0, 10)),
										"endTime" => date("d.m.Y H:i:s", substr($eintrag[$i]['end'], 0, 10)),
										"startUnix" => substr($eintrag[$i]['start'], 0, 10),
										"endUnix" => substr($eintrag[$i]['end'], 0, 10),
										"headline" => utf8_decode($eintrag[$i]['headline']),
										"event" => utf8_decode($eintrag[$i]['event']),
										"instruction" => utf8_decode($eintrag[$i]['instruction']),
										"altitudeStart" => $eintrag[$i]['altitudeStart'],
										"altitudeEnd" => $eintrag[$i]['altitudeEnd'],
										"type" => utf8_decode($eintrag[$i]['type']),
										"level" => $eintrag[$i]['level']
										);
					}
		}
	}


if ($debug && $_IPS['SENDER'] == "Execute" ) {
	$region = array ("");

		if ($debug && GetValue(CreateVariableByIdent($_IPS['SELF'], "Orte", "Orte", 3)) != "" ) {
		$region = explode('"@"', GetValue(CreateVariableByIdent($_IPS['SELF'], "Orte", "Orte", 3)) );
		}
	}

// gesuchte Daten auslesen
	for ($i=0; $i<count($daten_einzeln); $i++) {

			// Nachschauen ob die gesuchten Kreise im JSON enthalten sind
			if( in_array( $daten_einzeln[$i]["regionName"] , $region) ) {
				// Region neu schreiben
				$kreise[] = $daten_einzeln[$i];
			}

		// Debug auf alle Regionen abfragen
		if ( $debug ) {
				// Region neu schreiben
				$orte_export[] = $daten_einzeln[$i]["regionName"];
			}
	}

	// Debug ... alle aktuellen Orte einzeln rausschreiben

		if ($debug && GetValue(CreateVariableByIdent($_IPS['SELF'], "Orte", "Orte", 3)) == ""  && !empty($daten['warnings']) ) {
			$export = "";
				$result = array_values(array_unique($orte_export));
					for ($x=0; $x< count($result) - 1; $x++) {
						$export .= $result[$x] . '"@"';
					}

				   SetValue(CreateVariableByIdent($_IPS['SELF'], "Orte", "Orte", 3),  $export );

				} else {
				// Variable nach Import loeschen
					IPS_DeleteVariable(CreateVariableByIdent($_IPS['SELF'], "Orte", "Orte", 3) );

				}


  // weiter gehts im Normalprogramm


// Array neu sortieren
if ( !empty($kreise) ) {
		$kreise = sortArrayByFields( $kreise, array( "level" => SORT_DESC, "type" => SORT_DESC, "event" => SORT_DESC  ) 	);
}

// Warnlevel & Warnevent definieren
$warnlevel0 = 0; $warnlevel1 = 0; $warnlevel2 = 0; $warnlevel3 = 0; $warnlevel4 = 0; $warnlevel5 = 0;
$warnevent = "";

	for ($i=0; (!empty($kreise) && $i<count($kreise)); $i++) {

					if ($kreise[$i]["level"] == 1 ) {
						$warnlevel1++;
							$warnevent .= $kreise[$i]["level"] . "." . $kreise[$i]["type"] . " - " . $kreise[$i]["event"] . " - " . $kreise[$i]["regionName"] . "
";
					}
					if ($kreise[$i]["level"] == 2 ) {
						$warnlevel2++;
							$warnevent .= $kreise[$i]["level"] . "." . $kreise[$i]["type"] . " - " . $kreise[$i]["event"] . " - " . $kreise[$i]["regionName"] . "
";
					}
					if ($kreise[$i]["level"] == 3 ) {
						$warnlevel3++;
							$warnevent .= $kreise[$i]["level"] . "." . $kreise[$i]["type"] . " - " . $kreise[$i]["event"] . " - " . $kreise[$i]["regionName"] . "
";
					}
					if ($kreise[$i]["level"] == 4 ) {
						$warnlevel4++;
							$warnevent .= $kreise[$i]["level"] . "." . $kreise[$i]["type"] . " - " . $kreise[$i]["event"] . " - " . $kreise[$i]["regionName"] . "
";
					}
					if ($kreise[$i]["level"] == 5 ) {
						$warnlevel5++;
							$warnevent .= $kreise[$i]["level"] . "." . $kreise[$i]["type"] . " - " . $kreise[$i]["event"] . " - " . $kreise[$i]["regionName"] . "
";
					}
			}



// Warnevent ausgeben.
if ( empty($warnevent) ) { $warnevent = "Es sind keine Warnmeldungen vorhanden."; }

// Warnlevelstufe generieren
if ( $warnlevel0 >= 0 ) { $level = 0; } if ( $warnlevel1 >= 1 ) { $level = 1; } if ( $warnlevel2 >= 1 ) { $level = 2; } if ( $warnlevel3 >= 1 ) { $level = 3; } if ( $warnlevel4 >= 1 ) { $level = 4; } if ( $warnlevel5 >= 1 ) { $level = 5; }

$inhaltkreis = "";
$hoehe = "";
$warnbilderlaender = "";

	if ( $warnlevel1 + $warnlevel2 + $warnlevel3 + $warnlevel4 + $warnlevel5  > 0 ) {
		for ($i=0; $i<count($kreise); $i++) {

					// eigene Zeile fuer die Hoehenangaben
			      if ( $kreise[$i]['altitudeStart'] != ""  ) {
						$hoehe =	"<tr><td style='padding-left: 5px;'>ab: " . $kreise[$i]['altitudeStart'] . "m Höhe</td></tr>";
			      }
			      if ( $kreise[$i]['altitudeEnd'] != ""  ) {
						$hoehe =	"<tr><td style='padding-left: 5px;'>bis zu einer Höhe von: " . $kreise[$i]['altitudeStart'] . "m </td></tr>";
			      }

			$inhaltkreis .= "
					<table border='0' width='650px'>
					<tr>
					<td rowspan='5' style='width: 15px; background-" . farbe($kreise[$i]["level"]) . " '> </td>

					<td style='padding-left: 5px; " . farbe($kreise[$i]["level"]) . " ' ><b>" . $kreise[$i]['headline'] . "";

					if ($debug && $_IPS['SENDER'] == "Execute" ) {
						$inhaltkreis .= " <br>(" . $kreise[$i]["event"] . " - " . $kreise[$i]["state"] . ")";

					}

			$inhaltkreis .= "</b></td>
					</tr>

					<tr><td style='padding-left: 5px;' >" . $kreise[$i]["level"] . "<font size='4'>Meldung für " . $kreise[$i]["regionName"] . "</font></td></tr>

					<tr><td style='padding-left: 5px;'>Zeitraum von: " . $kreise[$i]['startTime'] . " bis: " . $kreise[$i]['endTime'] . "
																	" . $hoehe . "</td></tr>
					<tr><td style='padding-left: 5px;'><font size='3'>" . $kreise[$i]['description'] . " </font></td></tr>

					</table>

		      <div style='height: 5px;'> </div>
				";

			if ($warnbilder_anzeigen) {
		 		$warnbilderlaender .= warnuebersicht($kreise[$i]["state"], $kreise[$i]["event"] );
			}

		}
	} else {
		$inhaltkreis .= "
					<table border='0' width='650px' >
					<tr>
					<td rowspan='1' style='width: 15px; background-" . farbe(0) . " '> </td>

					<td style='padding-left: 5px; " . farbe(0) . " ' >" . $warnevent . "</td>
					</tr>
					<tr height='450px'>
					   <td>
					    
						</td>
					</tr>
					</table>
					";
	}






$output = "

<script type='text/javascript' >

function applyVisibility(obj_name, new_value) {
	   document.getElementById(obj_name).style.zindex=new_value;
	}
</script>

<style type='text/css'>
a.menue, a.menue:link, a.menue:visited, a.menue:active {
	position: relative;
	text-decoration: none;
	padding: 0px;
	margin: 0px;
}

a.menue:hover {
	z-index:1000;
	background: transparent;
	padding: 0px;
	margin: 0px;
}

a.menue span {
	display: none;
	text-decoration: none;
}

a.menue:hover span {
	z-index:1;
	display: block;
	position: absolute;
	width:300px; height:133px;

}

</style>



<table border='0' align='center' style='width: " . $warnbilder_tabellenbreite . "px;'>
	<tr>
	   <td>Stand: " . date("d.m.Y", substr($json, 32, 10 )) . " um " . date("H:i:s", substr($json, 32, 10 )) . "
			<span style='float: right; widht: 100%; '>Es sind " . ( $warnlevel1 + $warnlevel2 + $warnlevel3 + $warnlevel4 + $warnlevel5) . " Meldungen vorhanden.</span>
		</td>
	</tr>

	<tr>
	   <td>

				<table border='0' width='100%' align='center'>
				   <tr align='center' >
				      <td width=20%  style='color: #000000; background-" . farbe(1) . " '><b> " . $warnlevel1 . " </b></td>
				      <td width=20%  style='color: #000000; background-" . farbe(2) . " '><b> " . $warnlevel2 . " </b></td>
				      <td width=20%  style='color: #000000; background-" . farbe(3) . " '><b> " . $warnlevel3 . " </b></td>
				      <td width=20%  style='color: #000000; background-" . farbe(4) . " '><b> " . $warnlevel4 . " </b></td>
  				      <td width=20%  style='color: #000000; background-" . farbe(5) . " '><b> " . $warnlevel5 . " </b></td>
					</tr>
				</table>

		</td>
	</tr>
	<tr>
	   <td>

	      <!---
	      <div style='background-color: #aaaaaa; height: 200px; '>
	      http://www.wettergefahren.de/DWD/wetter/radar/Radarfilm_WEB_DL.gif
			//-->

			<a href='#' class='menue'><img src='http://www.niederschlagsradar.de/image.ashx?type=loop1stunde&jaar=&regio=homepage' width='216px' height='200px'>
			<span style='top: -100px; left: 70px;'><img src='http://www.niederschlagsradar.de/image.ashx?type=loop1stunde&jaar=&regio=homepage' id='bild' onmouseout='javascript: applyVisibility(\"bild\", \"-100\");'></span></a>
         <a href='#' class='menue'><img src='http://www.dwd.de/DWD/wetter/sat/bilder/meteosat/stc/METE_STC_wwwEuropa8km_aktuell_m00s.png' width='267px' height='200px'>
			<span style='top: -100px; left: -260px;'><img src='http://www.dwd.de/DWD/wetter/sat/bilder/meteosat/stc/METE_STC_wwwEuropa8km_aktuell_m00s.png'></span></a>
			<a href='#' class='menue'><img src='http://www.wettergefahren.de/DWD/wetter/wv_allg/deutschland/bilder/Deutschland.jpg' width='216px' height='200px'>
			<span style='top: -100px; left: -420px;'><img src='http://www.wettergefahren.de/DWD/wetter/wv_allg/deutschland/bilder/Deutschland.jpg'></span></a>

			<!--
			</div>
			//-->

		</td>
	</tr>

	<tr>
	   <td>
						" . $warnbilderlaender . "


		      <div style='height: 5px;'> </div>

	   </td>
	 </tr>

	<tr>
	   <td>
         $inhaltkreis
		</td>
	</tr>
</table>
</div>
";



// Varablen anlegen und Werte schreiben
// Aktualisierung
SetValue(CreateVariableByIdent($_IPS['SELF'], "Datenbestand", "Datenbestand", 3),  date("d.m.Y H:i:s", substr($json, 32, 10 )) );
// Webfront Output
SetValue(CreateVariableByIdent($_IPS['SELF'], "WFOutput", "WFOutput", 3),  $output );
IPS_SetVariableCustomProfile(CreateVariableByIdent($_IPS['SELF'], "WFOutput", "WFOutput", 3), "~HTMLBox");
// Level & Varablenprofil
$id_level = CreateVariableByIdent($_IPS['SELF'], "Warnlevel", "Warnlevel", 1);

// Profil anlegen
	if (IPS_VariableProfileExists("Script.WetterWarnstatus")) {
		//altes Pofil loeschen und neu anlegen
			IPS_DeleteVariableProfile("Script.WetterWarnstatus");
         variablenprofil("Script.WetterWarnstatus");
      	IPS_SetVariableCustomProfile( CreateVariableByIdent($_IPS['SELF'], "Warnlevel", "Warnlevel", 1) , "Script.WetterWarnstatus");
	} else {
          variablenprofil("Script.WetterWarnstatus");
      	IPS_SetVariableCustomProfile( CreateVariableByIdent($_IPS['SELF'], "Warnlevel", "Warnlevel", 1) , "Script.WetterWarnstatus");
	}

	if ( GetValue($id_level) != $level ) {
		SetValue(CreateVariableByIdent($_IPS['SELF'], "Warnlevel", "Warnlevel", 1),  $level );
	}

//Warnevent
$id_warnevent = CreateVariableByIdent($_IPS['SELF'], "Warnevent", "Warnevent", 3);
	if( GetValue($id_warnevent) != $warnevent) {
		SetValue(CreateVariableByIdent($_IPS['SELF'], "Warnevent", "Warnevent", 3),  $warnevent );
		IPS_SetVariableCustomProfile(CreateVariableByIdent($_IPS['SELF'], "Warnevent", "Warnevent", 3), "~TextBox");
	}






function farbe($warnlevel) {

	$warnfarbe = array("color: #C5E566; ", // Es ist keine amtliche Warnung aktiv (Grün)
							 "color: #E0E0E0; background-image: repeating-linear-gradient(135deg, transparent, transparent 5px, rgba(229,57,57,.8) 5px, rgba(229,57,57,.8) 8px); ", // Vorabinformation Unwetter (schraffiert)
							 "color: #FFFF00; ", // Amtliche Wetterwarnung (Gelb)
							 "color: #FA9600; ", // Amtliche Warnung vor markantem Wetter (Orange/Ocker)
							 "color: #E53935; ", // Amtliche Unwetterwarnung (Rot)
							 "color: #AF0064; ", // Amtliche Warnung vor extremem Unwetter (Dunkelrot)
							 "color: #FE68FE; ", // Hitze- oder UV-Warnung (Violett)
							 "",
							 "",
							 "",
							 "color: #cc99ff; ",
							 "",
							 "",
							 "",
							 "",
							 "",
							 "",
							 "",
							 "",
							 "",
							 // aus unerfindlichen Gründen ist der UV Index 20
							 "color: #fb66fc; ", // Hitze- oder UV-Warnung (Violett)
							 );

	return $warnfarbe[$warnlevel];

}



function warnuebersicht($bundesland, $warnevent ) {
	global $warnbilder_anzahl_je_reihe;
	global $warnbilder_tabellenbreite;

$bl = array ("Baden-Württemberg" => "baw", "Bayern" => "bay", "Berlin" => "bbb", "Brandenburg" => "bbb", "Bremen" => "nib", "Hamburg" => "shh", "Hessen" => "hes", "Mecklenburg-Vorpommern" => "mvp", "Niedersachsen" => "nib", "Nordrhein-Westfalen" => "nrw", "Rheinland-Pfalz" => "rps", "Saarland" => "rps", "Sachsen" => "sac", "Sachsen-Anhalt" => "saa", "Schleswig-Holstein" => "shh", "Thüringen" => "thu",
             "baden-w?rttemberg" => "baw", "bayern" => "bay", "berlin" => "bbb", "brandenburg" => "bbb", "bremen" => "nib", "hamburg" => "shh", "hessen" => "hes", "mecklenburg-vorpommern" => "mvp", "niedersachsen" => "nib", "nordrhein-westfalen" => "nrw", "rheinland-pfalz" => "rps", "saarland" => "rps", "sachsen" => "sac", "sachsen-anhalt" => "saa", "schleswig-holstein" => "shh", "th?ringen" => "thu");

$wk = array (

					// Darauf achten das alles klein geschrieben ist - gegebenen Fall ist die Liste zu ergaenzen
					// Übersicht unter http://www.dwd.de/DE/wetter/warnungen_aktuell/objekt_einbindung/objekteinbindung.htm

					"gewitter" => "gewitter",
					"starkregen" => "regen",
					"dauerregen" => "regen",
					"leichter schneefall" => "schnee",
					"schneefall" => "schnee",
					"wind" => "sturm",
					"böen" => "sturm",
					   "b?en" => "sturm",
					"windböen" => "sturm",
					   "windb?en" => "sturm",
					"starkwind" => "sturm",
					"sturm" => "sturm",
					"sturmböen" => "sturm",
					   "sturmb?en" => "sturm",
					"schwere sturmböen" => "sturm",
						"schwere sturmb?en" => "sturm",
					"orkanböen" => "sturm",
					   "orkanb?en" => "sturm",
					"orkan" => "sturm",
					"orkanartige böen" => "sturm",
					   "orkanartige b?en" => "sturm",
               "starkes gewitter" => "sturm",
			   "starkes gewitter" => "gewitter",
			   "ergiebiger dauerregen" => "regen",
               "STARKES GEWITTER" => "sturm",
               "schweres gewitter mit extrem heftigem starkregen und hagel" => "sturm",
               "schweres gewitter mit heftigem starkregen und hagel"  => "sturm",
               "SCHWERES GEWITTER mit HEFTIGEM STARKREGEN und HAGEL" => "sturm",
					"nebel" => "nebel",
					"frost" => "frost",
					"glätte" => "glatteis",
					   "gl?tte" => "glatteis",
					"glatteis" => "glatteis",
					"tauwetter" => "tauwetter",
					"hitze" => "hitze",
					"uv-index" => "uv");

$daten ="";
#$daten .= "<div><img src='http://www.dwd.de/DWD/warnungen/warnapp/json/warning_map_" . $bl[$bundesland] . "_" . $wk[mb_strtolower($warnevent)] . ".png'></div>
";

$daten .= "<img src='http://www.dwd.de/DWD/warnungen/warnapp/json/warning_map_" . $bl[strtolower_utf8($bundesland)] . "_" . $wk[strtolower_utf8($warnevent)] . ".png' width='" . ( ($warnbilder_tabellenbreite - 3) / $warnbilder_anzahl_je_reihe) . "px' height='". ((($warnbilder_tabellenbreite - 3) / $warnbilder_anzahl_je_reihe) * 1.25)  . "px' ></div>";


return $daten;


}

function strtolower_utf8($string) {

#setlocale(LC_CTYPE, 'de_DE@euro', 'de_DE', 'de', 'ge');

$result = utf8_decode($string);
$result = strtolower($result);
$result = utf8_encode($result);

return $result;

}



function toAscii($str) {
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str);
    $clean = strtolower(trim($clean, '-'));
    $clean = preg_replace("/[\/_|+ -]+/", '-', $clean);

    return $clean;
}

function CreateVariableByIdent($id, $ident, $name, $type)
{
     $vid = @IPS_GetObjectIDByIdent($ident, $id);
     if($vid === false)
     {
         $vid = IPS_CreateVariable($type);
         IPS_SetParent($vid, $id);
         IPS_SetName($vid, $name);
         IPS_SetIdent($vid, $ident);
     }
     return $vid;
}

function sortArrayByFields($arr, $fields)
{
    $sortFields = array();
    $args       = array();

    foreach ($arr as $key => $row) {
        foreach ($fields as $field => $order) {
            $sortFields[$field][$key] = $row[$field];
        }
    }

    foreach ($fields as $field => $order) {
        $args[] = $sortFields[$field];

        if (is_array($order)) {
            foreach ($order as $pt) {
                $args[$pt];
            }
        } else {
            $args[] = $order;
        }
    }

    $args[] = &$arr;
        call_user_func_array('array_multisort', $args);
    return $arr;
}


function variablenprofil ($profilname) {

    IPS_CreateVariableProfile($profilname, 1);
        IPS_SetVariableProfileValues($profilname, 0, 5, 1);
            IPS_SetVariableProfileAssociation($profilname, 0, "Level 0", "", 0xC5E566);
            IPS_SetVariableProfileAssociation($profilname, 1, "Level 1", "", 0xE0E0E0);
            IPS_SetVariableProfileAssociation($profilname, 2, "Level 2", "", 0xFFFF00);
            IPS_SetVariableProfileAssociation($profilname, 3, "Level 3", "", 0xFA9600);
            IPS_SetVariableProfileAssociation($profilname, 4, "Level 4", "", 0xE53935);
            IPS_SetVariableProfileAssociation($profilname, 5, "Level 5", "", 0xAF0064);
            IPS_SetVariableProfileAssociation($profilname, 5, "Level 6", "", 0xFE68FE);

}


// Script Timer installieren
IPS_SetScriptTimer($IPS_SELF, 600);


ende:


?>



Hi dzvo,

danke für dein Script! Scheint super zu funktionieren. Muss das ganze jetzt nur noch an einen Push Versand koppeln.

Liebe Grüße Sebastan

Notice: Undefined index: gl?tte in [Smarthome\W27\Scripte\Wetter\DWD\Warnmeldungen] on line 354

Hallo,

erhalte diese Meldung

Warning:  Profil mit Namen "Script.WetterWarnstatus" existiert nicht in [Wetter aktuell\Unwetterwarnungen\DWD Wetterwarnungen\Unwetterwarnungen] on line 291

Da ich leider keine umfassende Uebersicht der einzelnen definitonen des aktuellen Wetters gefunden habe, kommt es vor das bei neuen Wettervorkommnissen ab Zeile 410 / das Array weiter gefuellt werden muss. Gerne pflege ich diese nach.
Unter Uebersicht unter Wetter und Klima - Deutscher Wetterdienst - Warnungen aktuell - Ihr Homepagewetter gibt es eine Uebersicht der von DWD zur Verfuegung gestellen Kreise.

ist gefixt. Wird kontolliert und das VariablenProfil neu angelegt.

Gruß
Thomas

Bei mir generiert er als eine Bild URL folgendes:

404 Not Found

Dieses Bild gibt es aber wohl nicht auf dem DWD Server:

Not Found

The requested URL /DWD/warnungen/warnapp/json/ was not found on this server.

Die anderen URLs funktionieren:


EDIT:

mit

 "gl?tte" => 'glatteis', 

in Zeile 344gehts dann.

Zeile 344

:stuck_out_tongue:

Danke, korrigiert.

Moin,

eigentlich stand „glätte“ => „glatteis“, ja schon drinne.

Und die Daten sollen auch vom DWD richtig (En)Codiert sein, sodas das „gl?tte“ im zu vergleichenden String nicht vorkommen sollte.

Grüße
Thomas

Bzgl. „Gl?tte“ sag ich nur >> IPS 4 und Umlaute :slight_smile:

Grüße,
Chris

Ach herje,

blöd … gerade mal getestet.

Na zum Gl?ck :wink: … Es nutzt es keiner aus Th?ringen oder Baden W?rtenberg …

Mal schauen ob man das noch richtig übersetzen kann.

Grüße
Thomas

Hallo Thomas,

danke für das geniale Script … läuft auf Anhieb !

Danke !

Andreas

Zeile 337

„windb?en“ => „sturm“,

Na zum Gl?ck :wink: … Es nutzt es keiner aus Th?ringen oder Baden W?rtenberg …

Ich hab es, mit 2x Gl?ck. Baden-Württemberg und Kreis Schwäbisch Hall.

Ich habe mal bei Zeile 72 das „utf8_decode“ entfernt, da bringt das Script dann zumindest die Warnmeldungen für den Kreis.

Gibt es schon eine Lösung für das Land?

Moin,

es ligt erst einmal „einfach“ nur in der Version … wie Bayaro schon feststellte.

In version 3.X geht es wunderbar, in Version 4.X gibt es die Umlautprobleme.

Ich sehe mal zu das ich die Tage bzw. hoffentlich am Wochenende dazu komme das zu ändern.

Grüße
Thomas

Sollte da nicht derjenige dafür verantwotlich sein der die Version ändert?

Ich habe meine „größeren“ Projekte/Module komplett auf Eis gelegt, bis das Thema „Umlaute“ bei IPS kein Thema mehr ist. Sonst pfusche ich jetzt irgendwas zurecht um dann, wenn es bei IPS „stimmt“, wieder alles umzubauen :rolleyes: Nein Danke, dazu hab ich zu viele Baustellen…

Grüße,
Chris

Moin,

Version 0.33 ist online.

Habe (auf recht Unkonventionelle) Weise, bis es endgültig in IPS gefixt ist, das Umlaut Problem umgangen.
Schön ist zwar was anderes aber es funktioniert. Die zu pflegende Datenmenge ist ja auch Überschaubar

Grüße
Thomas

Hallo,

kann es sein das, wenn keine Warnbilder vorhanden sind, Fehlermeldungen kommen. Bei mir scheint es zumindest so zu sein.

Undifined Variable Warnbilder_tabellenbreite

Moin,

em ist so bei mir nicht zu sehen. Geht auch so bei beiden IPS Versionen mit „keinen“ DWD Warnmeldungen.

Die Variable $warnbilder_tabellenbreite hat auch nur was mit dem Aussehen / Anordnung zu tun.

Gruß
Thomas