Hallo zusammen,
die neue Version v1.6.20220114 ist jetzt auch als STABLE im Store vorhanden!
Danke ans IPS-Team
Heiko
Hallo zusammen,
die neue Version v1.6.20220114 ist jetzt auch als STABLE im Store vorhanden!
Danke ans IPS-Team
Heiko
Also bei mir klappt das mit dem Standortmarkierung nicht so richtig.
Browserfenster breit gezogen:
Browserfenster schmal:
richimaint
Hi,
ist denn die Platzierung im 2.Bild korrekt?
Bist Du sicher das Du die aktuelle Version hast? Bei mir sieht die Markierung so aus!
HINWEIS: Wenn man im Browser die Auflösung ändert bleibt der Punkt an der alten Stelle hängen. Dann muss man im WF mal auf eine andere Seite umschalten und zurück! Kommt aber bei fix montierten Wandtablets usw. selten vor
Gruß Heiko
Bei mir ist folgende Version drauf:
Auch nach erneuter Installation ist die Markierung ein Punkt.
Der Standort ist immer noch falsch.
Okay, dann anders
Poste mal Deine Settings (Screenshot) von „Unwetterkarte …“ und Deine Location via PN dann versuche ich es mal nach zu stellen!
Gruß Heiko
Kurze Auflösung des Problems von @richimaint - die Angaben für die Formatvorlage (Stylesheets) waren noch im alten Format, d.h. da fehlten die geschweiften Klammern drum rum!
Darum nochmal der Hinweis aus dem Post beachten => [Modul] Unwetterwarnung - #58 von pitti
Gruß Heiko
Hallo pitti,
bekomme jetzt immer eine Warnung
Notice: Undefined offset: 50 in /var/lib/symcon/scripts/17760.ips.php on line 246
Gruß
Hi,
was ist das für ein Script? Ist nicht Bestandteil des Moduls! Haste mehr Infos?
Gruß Heiko
Hi,
ich habe ein Script.
<?php
################################################################################
# Script: Weather.StormWarning.ips.php
# Version: 1.0
# Author: Heiko Wilknitz (@pitti)
#
# Abrufen von Radarbildern und Unwetterwarnungen
#
# ----------------------------------- ID´s -------------------------------------
#
# Bei Verwendung der Scripte 'Meldungsanzeige im WebFron' (Post #51)
# https://www.symcon.de/forum/threads/12115-Meldungsanzeige-im-WebFront
# hier die ScriptID von 'Meldungsverwaltung' eintragen, sonst 0!
$dbID = 0;
#
# ----------------------------- Konfiguration ----------------------------------
#
# Benötigte URLs für die verschiedenen Informationen
#
$urls = array(
# JSON API auslesen
'JSON' => 'https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json',
# Check Icon
'CHECK' => 'https://www.dwd.de/DWD/warnungen/warnapp_gemeinden/viewer/img/icn_check.png',
# Level Icons
'LEVEL' => 'https://www.dwd.de/DWD/warnungen/warnapp_gemeinden/viewer/img/warndreieck/<LEVEL>.png',
# Tye Icons
'TYPE' => 'https://www.dwd.de/DWD/warnungen/warnapp_gemeinden/viewer/img/warndreieck/warn_icons_<TYPE>.png',
# Temperatur Image
'TEMP' => 'https://www.dwd.de/DWD/wetter/aktuell/deutschland/bilder/wx_<STATE>_akt.jpg',
# Niederschlag Radar
'RADAR' => 'https://www.dwd.de/DWD/wetter/radar/rad_<STATE>_akt.jpg',
# Niederschlag Radarfilm
'MOVIE' => 'https://www.dwd.de/DWD/wetter/radar/radfilm_<STATE>_akt.gif',
# Karte mit allen Warnungen
'MAPS' => 'https://www.dwd.de/DWD/warnungen/warnapp_gemeinden/json/warnungen_gemeinde_map_<STATE><TYPE>.png'
);
#
# Karte
#
$maps = array(
array(0, 'Bundesland', '', 0x0000FF),
array(1, 'Deutschland', '', 0x0000FF)
);
#
# Bundesländer
#
$states = array (
array(0, 'Baden-Württemberg', '', 0x800080, 'baw'),
array(1, 'Bayern', '', 0x800080, 'bay'),
array(2, 'Berlin,Brandenburg', '', 0x800080, 'bbb'),
array(3, 'Hessen', '', 0x800080, 'hes'),
array(4, 'Mecklenburg-Vorpommer', '', 0x800080, 'mvp'),
array(5, 'Niedersachsen,Bremen', '', 0x800080, 'nib'),
array(6, 'Nordrhein-Westfalen', '', 0x800080, 'nrw'),
array(7, 'Rheinland-Pfalz,Saarland', '', 0x800080, 'rps'),
array(8, 'Sachsen', '', 0x800080, 'sac'),
array(9, 'Sachsen-Anhalt', '', 0x800080, 'saa'),
array(10,'Schleswig-Holstein,Hamburg', '', 0x800080, 'shh'),
array(11,'Thüringen', '', 0x800080, 'thu')
);
#
# Kriterien
#
$types = array(
array(-1,'Alle', '', 0xFFFF00, 'all'),
array(0, 'Gewitter', '', 0xFFFF00, 'gewitter'),
array(1, 'Wind / Sturm / Orkan', '', 0xFFFF00, 'sturm'),
array(2, 'Stark- oder Dauerregen', '', 0xFFFF00, 'regen'),
array(3, 'Schneefall', '', 0xFFFF00, 'schnee'),
array(4, 'Nebel', '', 0xFFFF00, 'nebel'),
array(5, 'Frost', '', 0xFFFF00, 'frost'),
array(6, 'Glätte, Glatteis', '', 0xFFFF00, 'glatteis'),
array(7, 'Tauwetter', '', 0xFFFF00, 'tauwetter'),
array(8, 'Hitze', '', 0xFFFF00, 'hitze'),
array(9, 'UV-Strahlung', '', 0xFFFF00, 'uv')
);
#
# Warning levels
#
$levels = array(
0 => "gelb",
1 => "gelb",
2 => "gelb",
3 => "orange",
4 => "rot",
5 => "dunkelrot",
10 => "violet_hitze",
20 => "violet_uv"
);
#
# Initial Code = Stadt Stuttgart
#
$regioCode = "108111000";
#
################################################################################
// INSTALLATION
if($_IPS['SENDER'] == "Execute") {
// Karte
$vid = CreateVariableByName($_IPS['SELF'], "Karte", 1);
CreateProfileInteger('DWD.Map', 'Image', '', '', 0, count($maps)-1, 0, 0, $maps);
IPS_SetVariableCustomProfile($vid, 'DWD.Map');
IPS_SetVariableCustomAction($vid, $_IPS['SELF']);
SetValue($vid, 0);
// Bundesland
$vid = CreateVariableByName($_IPS['SELF'], "Bundesland", 1);
CreateProfileInteger('DWD.State', 'Macro', '', '', 0, count($states)-1, 0, 0, $states);
IPS_SetVariableCustomProfile($vid, 'DWD.State');
IPS_SetVariableCustomAction($vid, $_IPS['SELF']);
SetValue($vid, 0);
// Kriterien
$vid = CreateVariableByName($_IPS['SELF'], "Kriterien", 1);
CreateProfileInteger('DWD.Types', 'Warning', '', '', 0, count($types)-1, 0, 0, $types);
IPS_SetVariableCustomProfile($vid, 'DWD.Types');
IPS_SetVariableCustomAction($vid, $_IPS['SELF']);
SetValue($vid, -1);
// Region Code
$vid = CreateVariableByName($_IPS['SELF'], "Region", 3);
IPS_SetIcon($vid, 'Edit');
IPS_SetVariableCustomProfile($vid, '~TextBox');
IPS_SetVariableCustomAction($vid, $_IPS['SELF']);
SetValue($vid, $regioCode);
// Aktuelle Temperaturen
$vid = CreateVariableByName($_IPS['SELF'], "Temperaturen aktuell", 3);
IPS_SetIcon($vid, 'Temperature');
IPS_SetVariableCustomProfile($vid, '~HTMLBox');
SetValue($vid, GetImageTag($states[0][4], $urls['TEMP']));
// Niederschlagsradar
$vid = CreateVariableByName($_IPS['SELF'], "Niederschlag Radarbild", 3);
IPS_SetIcon($vid, 'Rainfall');
IPS_SetVariableCustomProfile($vid, '~HTMLBox');
SetValue($vid, GetImageTag($states[0][4], $urls['RADAR']));
// Niederschlagsradaraufnahme
$vid = CreateVariableByName($_IPS['SELF'], "Niederschlag Radarfilm", 3);
IPS_SetIcon($vid, 'Rainfall');
IPS_SetVariableCustomProfile($vid, '~HTMLBox');
SetValue($vid, GetImageTag($states[0][4], $urls['MOVIE']));
// Unwettermeldungen
$vid = CreateVariableByName($_IPS['SELF'], "Unwettermeldungen", 3);
IPS_SetIcon($vid, 'WindSpeed');
IPS_SetVariableCustomProfile($vid, '~HTMLBox');
SetValue($vid, GetWeatherWarnings($regioCode, -1, $urls, $types, $levels, $dbID));
// Unwetterkarte
$vid = CreateVariableByName($_IPS['SELF'], "Unwetterkarte", 3);
IPS_SetIcon($vid, 'Image');
IPS_SetVariableCustomProfile($vid, '~HTMLBox');
SetValue($vid, GetWeatherMap($urls['MAPS'], 0, $states[0][4], $types[0][4]));
// Script Timer
if(IPS_GetScriptTimer($_IPS['SELF']) == 0) {
IPS_SetScriptTimer($_IPS['SELF'], 60*15);
}
}
// AKTION VIA WEBFRONT
else if($_IPS['SENDER'] == "WebFront") {
// Speichern
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
// Karte
$vid = CreateVariableByName($_IPS['SELF'], "Karte", 1);
$map = GetValue($vid);
// Bundesland
$vid = CreateVariableByName($_IPS['SELF'], "Bundesland", 1);
$state = GetValue($vid);
// Kriterien
$vid = CreateVariableByName($_IPS['SELF'], "Kriterien", 1);
$type = GetValue($vid);
// Region Code
$vid = CreateVariableByName($_IPS['SELF'], "Region", 3);
$code = GetValue($vid);
// Aktuelle Temperaturen
$vid = CreateVariableByName($_IPS['SELF'], "Temperaturen aktuell", 3);
SetValue($vid, GetImageTag($states[$state][4], $urls['TEMP']));
// Niederschlagsradar
$vid = CreateVariableByName($_IPS['SELF'], "Niederschlag Radarbild", 3);
SetValue($vid, GetImageTag($states[$state][4], $urls['RADAR']));
// Niederschlagsradaraufnahme
$vid = CreateVariableByName($_IPS['SELF'], "Niederschlag Radarfilm", 3);
SetValue($vid, GetImageTag($states[$state][4], $urls['MOVIE']));
// Unwettermeldungen
$vid = CreateVariableByName($_IPS['SELF'], "Unwettermeldungen", 3);
SetValue($vid, GetWeatherWarnings($code, $type, $urls, $types, $levels, $dbID));
// Unwetterkarte
$vid = CreateVariableByName($_IPS['SELF'], "Unwetterkarte", 3);
SetValue($vid, GetWeatherMap($urls['MAPS'], $map, $states[$state][4], $types[$type+1][4]));
}
// TIMER EVENT
else if($_IPS['SENDER'] == "TimerEvent") {
// Kriterien
$vid = CreateVariableByName($_IPS['SELF'], "Kriterien", 1);
$type = GetValue($vid);
// Unwettermeldungen
$vid = CreateVariableByName($_IPS['SELF'], "Unwettermeldungen", 3);
SetValue($vid, GetWeatherWarnings($regioCode, $type, $urls, $types, $levels, $dbID));
}
# ------------------------------ Funktionen ------------------------------------
// Findet zum übergebenen DWD-RegioCode entsprechende Wetterwarnungen und Vorabinformationen
// Übergabe: [STRING]$code = Regiocode, z.B. 106439000 für Rheingau-Taunus-Kreis
// Rückgabe: [STRING] = Warnings als Html-Tabelle
function GetWeatherWarnings($code, $type, $urls, $types, $levels, $db)
{
//Fehlerbehandlung
if(!isset($code)) die("Error in Function ".__FUNCTION__." - Missing argument for \$regioCode");
if(!is_string($code)) die("Error in Function ".__FUNCTION__." - Value for parameter \$regioCode is not a string"); //API aufrufen und XML einlesen
# Meldungstext wenn keine Warnungen vorliegen
$check_txt = '<b>Keine Unwetter-Meldungen vorhanden!</b><br />';
$check_txt .= '<i><small>zuletzt aktualisiert am '.date("d.m.",time()).' um '.date("H:i",time()).' Uhr</i></small>';
# Daten abholen
$json = file_get_contents($urls['JSON']);
//Warnungen extrahieren und in Array kodieren
$extract = ExtractUnit($json, 'warnWetter.loadWarnings(', ');');
$array = json_decode($extract,true);
//Übergabearray vorbereiten
$warnings = array();
//Warnungen und Vorabinformationen durchgehen und wesentliche Felder in Array schreiben
if(isset($array["vorabInformation"][$code])) foreach($array["vorabInformation"][$code] as $row) array_push($warnings,array("headline" => ReplaceCaseSensitiveWords($row["headline"]), "description" => ReplaceCaseSensitiveWords($row["description"]), "start" => round($row["start"] / 1000,0), "end" => round($row["end"] / 1000,0), "region" => $row["regionName"], "state" => $row["state"], "type" => $row["type"], "level" => $row["level"], "time" => round($array["time"] / 1000,0)));
if(isset($array["warnings"][$code])) foreach($array["warnings"][$code] as $row) array_push($warnings,array("headline" => ReplaceCaseSensitiveWords($row["headline"]), "description" => ReplaceCaseSensitiveWords($row["description"]), "start" => round($row["start"] / 1000,0), "end" => round($row["end"] / 1000,0), "region" => $row["regionName"], "state" => $row["state"], "type" => $row["type"], "level" => $row["level"], "time" => round($array["time"] / 1000,0)));
// HTML zusammenbauen
$style = "";
$style = $style.'<style type="text/css">';
$style = $style.'table {width:100%;border-collapse: collapse;}';
$style = $style.'td.img {width:50px;border:0px;vertical-align: top;text-align:left;padding:10px;border-left: 1px solid rgba(255, 255, 255, 0.2);border-top: 1px solid rgba(255, 255, 255, 0.2);border-bottom: 1px solid rgba(255, 255, 255, 0.2);}';
$style = $style.'td.txt {vertical-align: top;text-align:left;padding:5px 10px 5px 10px;border-right: 1px solid rgba(255, 255, 255, 0.2);border-top: 1px solid rgba(255, 255, 255, 0.2);border-bottom: 1px solid rgba(255, 255, 255, 0.2);}';
//$style = $style.'tr:nth-child(even) {background-color: rgba(0, 0, 0, 0.3);}';
$style = $style.'.stitle { color: rgba(128, 128, 0, 1.0); }';
$style = $style.'.fwarn { height: 50px; width: 50px;}';
$style = $style.'.iwarn { margin-left: -50px; height: 50px; width: 50px; }';
$style = $style.'</style>';
$html = $style.'<table>';
$count = 0;
foreach ($warnings as $key => $value) {
//print_r($value);
if(($type == -1) OR ($type == $value['type'])) {
$turl = str_replace('<TYPE>', $types[$value['type']+1][4], $urls['TYPE']);
$lurl = str_replace('<LEVEL>', $levels[$value['level']], $urls['LEVEL']);
$time = strftime("%a, %d.%b, %H:%M - ", $value['start']).strftime("%a, %d.%b, %H:%M Uhr", $value['end']);
$html .= '<tr>';
$html .= '<td class=\'img\'><div><img class=\'fwarn\' src=\''.$lurl.'\' alt=\'Level\' /><img class=\'iwarn\' src=\''.$turl.'\' alt=\'Typ\' /></div></td>';
$html .= '<td class=\'txt\'><b>'.$value['headline'].'</b><br / ><i><small>'.$time.'</small></i><br />'.$value['description'].'</td>';
$html .= '</tr>';
$count++;
}
}
// Exist Warnings
if($count == 0) {
$html .= '<tr>';
$html .= '<td class=\'img\'><div><img class=\'fwarn\' src=\''.$urls['CHECK'].'\' alt=\'No warning\'></div></td>';
$html .= '<td class=\'txt\'>'.$check_txt.'</td>';
$html .= '</tr>';
}
// Warnungen an Dashboard melden
if($db != 0) {
IPS_RunScriptWaitEx($db, array('action' => 'add', 'text' => 'Es liegen Unwetterwarnungen vor!', 'type' => 1, 'expires' => time() + 3600,'image' => 'WindSpeed', 'page' => 'spUnwetter'));
}
$html .= '</table>';
//Rückgabe
return $html;
}
// Warnungen extrahieren
function ExtractUnit($string, $start, $end)
{
$pos = stripos($string,$start);
$str = substr($string,$pos);
$strTwo = substr($str,strlen($start));
$secondPos = stripos($strTwo,$end);
$strThree = substr($strTwo,0,$secondPos);
$unit = trim($strThree);
return $unit;
}
// Ersetzen von Großschreibung in normale Schreibweise
function ReplaceCaseSensitiveWords($string)
{
$string = str_replace("VORABINFORMATION SCHWERES GEWITTER","Vorabinformation schweres Gewitter",$string);
$string = str_replace("VORABINFORMATION UNWETTER vor SCHWEREM GEWITTER","Vorabinformation Unwetter vor schwerem Gewitter",$string);
$string = str_replace("VORABINFORMATION UNWETTER vor ORKANBÖEN","Vorabinformation Unwetter vor Orkanböen",$string);
$string = str_replace("Amtliche UNWETTERWARNUNG vor SCHWEREM GEWITTER mit HEFTIGEM STARKREGEN und HAGEL","Unwetterwarnung vor schwerem Gewitter mit heftigem Starkregen und Hagel",$string);
$string = str_replace("Amtliche UNWETTERWARNUNG vor ORKANBÖEN","Unwetterwarnung vor Orkanböen",$string);
$string = str_replace("Amtliche WARNUNG vor GEWITTER","Warnung vor Gewitter",$string);
$string = str_replace("Amtliche WARNUNG vor STARKEM GEWITTER","Warnung vor starkem Gewitter",$string);
$string = str_replace("Amtliche WARNUNG vor SCHWEREM GEWITTER","Warnung vor schwerem Gewitter",$string);
$string = str_replace("Amtliche WARNUNG vor WINDBÖEN","Warnung vor Windböen",$string);
$string = str_replace("Amtliche WARNUNG vor STARKEN WINDBÖEN","Warnung vor starken Windböen",$string);
$string = str_replace("Amtliche WARNUNG vor SCHWEREN WINDBÖEN","Warnung vor schweren Windböen",$string);
$string = str_replace("Amtliche WARNUNG vor STURMBÖEN","Warnung vor Sturmböen",$string);
$string = str_replace("Amtliche WARNUNG vor ORKANBÖEN","Warnung vor Orkanböen",$string);
$string = str_replace("Amtliche WARNUNG vor STARKEN STURMBÖEN","Warnung vor starken Sturmböen",$string);
$string = str_replace("Amtliche WARNUNG vor SCHWEREN STURMBÖEN","Warnung vor schweren Sturmböen",$string);
$string = str_replace("Amtliche WARNUNG vor DAUERREGEN","Warnung vor Dauerregen",$string);
$string = str_replace("Amtliche WARNUNG vor NEBEL","Warnung vor Nebel",$string);
$string = str_replace("Amtliche WARNUNG vor GLÄTTE","Warnung vor Glätte",$string);
$string = str_replace("Amtliche WARNUNG vor GLATTEIS","Warnung vor Glatteis",$string);
$string = str_replace("Amtliche WARNUNG vor FROST","Warnung vor Frost",$string);
$string = str_replace("Amtliche WARNUNG vor LEICHTEM SCHNEEFALL","Warnung vor leichtem Schneefall",$string);
$string = str_replace("Amtliche WARNUNG vor SCHNEEFALL","Warnung vor Schneefall",$string);
$string = str_replace("Amtliche WARNUNG vor STARKEM SCHNEEFALL","Warnung vor starkem Schneefall",$string);
$string = str_replace("Amtliche WARNUNG vor HITZE","Warnung vor extremer Hitze",$string);
$string = str_replace("\n","",$string);
return $string;
}
// Erstellt für das übergebene Bundesland und Kriterium den Html-Image-Tag
function GetWeatherMap($url, $map, $state, $type)
{
// unschön aber wirkungsvoll
if($map == 1) {
$state = 'de';
}
if($type == 'all') {
$type = '';
}
else {
$type = '_'.$type;
}
IPS_LogMessage('DWD', 'Map: '.$map.', State: '.$state.', Typ: '.$type);
$img = str_replace('<STATE>', $state, $url);
$img = str_replace('<TYPE>', $type, $img);
// An die persönlichen Vorlieben anpassen!
$html = "<img src='".$img."' style='height:100%;width:100%;'/>";
return $html;
}
// Erstellt für das übergebene Bundesland den Html-Image-Tag
function GetImageTag($state, $url)
{
$img = str_replace('<STATE>', $state, $url);
// An die persönlichen Vorlieben anpassen!
$html = "<img src='".$img."' style='height: 100%; width: 100%; object-fit: fill;' />";
return $html;
}
// Erzeugt eine Variable unterhalb {id} mit dem Namen {name} vom Typ [type}
// Existiert die Variable schon wird diese zurückgeliefert.
function CreateVariableByName($id, $name, $type)
{
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid===false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
}
return $vid;
}
// Erzeugt ein Variablenprofil vom Typ {type} mit Name n{name}
function CreateProfile($name, $type)
{
if(!IPS_VariableProfileExists($name)) {
IPS_CreateVariableProfile($name, $type);
}
else {
$profile = IPS_GetVariableProfile($name);
if($profile['ProfileType'] != $type)
throw new Exception("Variable profile type does not match for profile ".$name);
}
}
// Erzeugt ein Integer-Variablenprofil
function CreateProfileInteger($name, $icon, $prefix, $suffix, $minvalue, $maxvalue, $step, $digits, $asso = NULL)
{
CreateProfile($name, 1);
IPS_SetVariableProfileIcon($name, $icon);
IPS_SetVariableProfileText($name, $prefix, $suffix);
IPS_SetVariableProfileDigits($name, $digits);
if(sizeof($asso) === 0){
$minvalue = 0;
$maxvalue = 0;
}
IPS_SetVariableProfileValues($name, $minvalue, $maxvalue, $step);
if(sizeof($asso) !== 0){
foreach($asso as $ass) {
IPS_SetVariableProfileAssociation($name, $ass[0], $ass[1], $ass[2], $ass[3]);
}
}
}
?>
Gibt es ein Modul?
Gruß
EDIT: Ich habe ja beides am Laufen
hat sich dann erledigt. Habe Script gelöscht. Habe ja doppelt gehabt
Bei mir kommt keine Karte mehr.
Wie sieht es bei Euch aus?
Update: funktioniert gerade wieder.
richimaint
Moin, im Modulstore stehen diverse Werte auch UV-Strahlung.
Leider finde ich diesen Wert nicht, auch wird er in der Doku nicht mehr erwähnt, aber vielleicht bin ich auch blind.
Wisst ihr wo ich den UV-Wert finde?
Das Modul meldet Unwetter oder Wetterabwwichungen, d.h. Wenn es eine UV Warnung gibt wird sie auch angezeigt.
Ok macht in dem Modul Sinn, danke!
Ich hätte es für andere Aktionen benötigt, in einem anderen Modul finde ich keinen UV-Index.
Hallo zusammen,
es gibt eine neue Beta, welche primär die zukünftige Version 7.0 unterstützt.
NEUE VERSION v1.7.20230626 (beta):
Gruß Heiko
Hi @pitti,
mir ist aufgefallen das im Titel der Warnmeldung kein „ö“ bei Windböen erscheint sondern ein „?“.
In der Warnung passt es.
und hier von der Website:
richimaint
Ha, gut aufgepasst Im Text drunter passt es wieder - lustig! Bin dran!
Danke & Ciao
Heiko
Ich habe die Beta und bei Stable genauso.
Für Erfurt bekomme ich keine Warung?
Bei Boltenhagen MV genauso:
Habe in einem anderen Meldungsfenster auch Probleme mit ä, ö und ü.
richimaint
Interessant, welche IPS Version und auf welchem OS?