Aktuellester Stand vom 01.06.2016:
Verfügbar als PHP-Modul: https://github.com/paresy/SymconMisc
Nach dem Klassiker im Jahre 2006 -> IP-Symcon-Unwetterzentrale
Der Reloaded Variante im Jahre 2008 -> Wetterwarnung
Gibt es jetzt die 2010 Version, die sich vollständig automatisch in IP-Symcon integriert
Das Skript läd das aktuelle Radarbild in IP-Symcon rein und berechnet die farbigen Pixel (Regenwolke) gewichtet zu einem imaginären Regenwert. Da dieser keine statistische Größe darstellt, müsst ihr selber entscheiden, ab welchem Wert ihr euch benachrichtigen lasst, dass es Regnen wird.
Für weitere Funktionen bitte NEUE Skripte anlegen und auf die Regenmengenänderung triggern. Bitte keinen Code einfach in das Skript panschen
Hinweis:
Damit ihr nicht alle 15 Minuten mit einer „Es wird gleich Schütten“ SMS genervt werdet, nutzt den „Bei Grenzüberschreitung“ Trigger in IP-Symcon und deaktiviert den Haken bei „Nachfolgende Ereignisse ausführen“. Dadurch wird die Meldung bei einer Überschreitung verschickt. Eine neue Meldung aber erst, wenn der Regenwert wieder unterhalb der Schwelle lag.
<?
/*
dwddg = Deutschland
dbad = Baden-Württemberg
dbay = Bayern
dber = Brandenburg/Berlin
dhes = Hessen
dmec = Mecklenburg-Vorpommern
dnie = Niedersachsen/Bremen
dnrw = NRW
drlp = Rheinland-Pfalz/Saarland
dsac = Sachsen
dsan = Sachsen-Anhalt
dsch = Schleswig-Holstein/Hamburg
dtue = Thüringen
*/
$area = "dsch";
/*
Die Koordinaten könnt ihr am einfachsten herausfinden, indem ihr das Bild in Paint öffnet und mit dem Cursor auf euren Punkt geht. Dann könnt ihr in der Statuszeile von Paint die X/Y Koordinaten ablesen.
*/
$homeX = 324;
$homeY = 179;
/*
Der Radius gibt an, wie viele Pixel um euren Ort zur Berechnung des Regenwertes genutzt werden sollen
*/
$homeRadius = 10;
//Ab hier nichts mehr ändern
$object = IPS_GetObject($IPS_SELF);
$parentID = $object['ParentID'];
//Installer
if ($IPS_SENDER == "Execute") {
IPS_SetHidden($IPS_SELF, true);
IPS_SetName($IPS_SELF, "Auslese-Skript");
$parentObject = IPS_GetObject($parentID);
if ($parentObject['ObjectType'] !== 1)
{
$instanceID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetParent($instanceID, $parentID);
$parentID = $instanceID;
IPS_SetParent($IPS_SELF, $parentID);
IPS_SetName($instanceID, "Unwetterzentrale");
}
IPS_SetScriptTimer($IPS_SELF, 3600);
}
//Auf 15 Minuten Takt Synchronisieren
$offset = (integer)date("s") + ((integer)date("i") % 15) * 60;
if($offset != 0) {
IPS_SetScriptTimer($IPS_SELF,900 - $offset);
} else {
IPS_SetScriptTimer($IPS_SELF,900);
}
//Zeit berechnen
$minute=floor(date("i") / 15) * 15;
$dateline=mktime(date("H"), $minute, 0, date("m"), date("d"), date("y"));
//Radarbild Downloaden
$opts = array(
'http'=>array(
'method'=>"GET",
'max_redirects'=>1
)
);
$context = stream_context_create($opts);
$localImage = IPS_GetKernelDir()."\\radar.gif";
$remoteImage = "http://www.wetteronline.de/daten/radar/$area/".gmdate("Y", $dateline)."/".gmdate("m", $dateline)."/".gmdate("d", $dateline)."/".gmdate("Hi", $dateline).".gif";
$data = @file_get_contents($remoteImage, false, $context);
if($data === false) {
//Altes Bild laden
$dateline -= 15*60;
$remoteImage = "http://www.wetteronline.de/daten/radar/$area/".gmdate("Y", $dateline)."/".gmdate("m", $dateline)."/".gmdate("d", $dateline)."/".gmdate("Hi", $dateline).".gif";
$data = @file_get_contents($remoteImage, false, $context);
if($data === false) {
return;
}
}
if((strpos($http_response_header[0], "200") === false)) {
return;
}
file_put_contents($localImage, $data);
//Radarbild auswerten
$im = ImageCreateFromGIF ($localImage);
//Stärken
$regen[6] = imagecolorresolve ($im, 250,2,250);
$regen[5] = imagecolorresolve ($im, 156,50,156);
$regen[4] = imagecolorresolve ($im, 28,126,220);
$regen[3] = imagecolorresolve ($im, 44,170,252);
$regen[2] = imagecolorresolve ($im, 84,210,252);
$regen[1] = imagecolorresolve ($im, 172,254,252);
//Pixel durchgehen
$regenmenge = 0;
for($x=$homeX-$homeRadius; $x<=$homeX+$homeRadius; $x++) {
for($y=$homeY-$homeRadius; $y<=$homeY+$homeRadius; $y++) {
$found = array_search(imagecolorat($im, $x, $y), $regen);
if(!($found === FALSE)) {
$regenmenge+=$found;
}
}
}
// Bereich zeichnen
$schwarz = ImageColorAllocate ($im, 0, 0, 0);
$rot = ImageColorAllocate ($im, 255, 0, 0);
imagerectangle($im, $homeX-$homeRadius, $homeY-$homeRadius, $homeX+$homeRadius, $homeY+$homeRadius, $rot);
imagesetpixel($im, $homeX, $homeY, $rot);
imagegif($im, $localImage);
imagedestroy($im);
$mid = CreateImageByName($parentID, "Radarbild", "radar.gif");
IPS_SendMediaEvent($mid);
$vid = CreateVariableByName($parentID, "Regenwert", 1);
SetValue($vid, $regenmenge);
function CreateVariableByName($id, $name, $type, $profile = "") {
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
function CreateImageByName($id, $name, $filename) {
global $IPS_SELF;
$mid = @IPS_GetMediaIDByName($name, $id);
if($mid === false) {
$mid = IPS_CreateMedia(1);
IPS_SetParent($mid, $id);
IPS_SetName($mid, $name);
IPS_SetInfo($mid, "this media was created by script #$IPS_SELF");
IPS_SetMediaFile($mid, $filename, true);
}
return $mid;
}
?>
paresy