Gestern tobten mal wieder heftige Unwetter über Deutschland.
Wo und in welcher Stärke sie auftreten können wird in verschiedenen Warnstufen auf Seite derUnwetter-Zentrale dargestellt.
Für IP-Symcon gibt es hierzu bereits einige Einträge und Skripte im Forum:
[ul]
[li]Unwetterzentrale Revolutions[/li][li]DWD Unwetterwarnung (WFE, Mail und html)[/li][/ul]Auf der Homepage von LightningMaps.org können die Blitzeinschläge live mitverfolgt werden (Bild1).
Wie man diese mit IP-Symcon auswertet, wurde hier im Forum schon an verschiedenen Stellen vorgestellt.
Die Vorgehensweise ist immer dieselbe: es wird der gewünschte Bereich in einem Bild festgelegt. Anschließend werden die Pixel mit einem bestimmten RGB-Farbwert gezählt, die in ihm enthalten sind. Den jeweiligen Farbwert kann man z.B. mit dem Programm „Paint“ und dem Werkzeug „Farbauswahl“ ermitteln (Bild2). Bei Überschreitung einer bestimmten Schwelle, kann dann ein Alarm ausgelöst werden - in diesem Beispiel eine PushNotification auf ein Smartphone.
// X-Y-Koordinaten des zu überwachenden Region
$homeX = 500;
$homeY = 150;
$homeRadius = 20;
$debug = True;
// Achtung: die URL kann sich leider im Laufe der Zeit ändern
// hier ist das Format PNG
// bei anderen muss das Skript angepaßt werden: ImageCreateFromJPEG, ImageJPEG
$remoteImage = "http://www.blibis.de/gfx/map/outbig.png";
$localImage = IPS_GetKernelDir()."\\media\blitze.png";
//Radarbild Downloaden
$remoteFile = fopen("$remoteImage",'rb');
$localFile = fopen($localImage,'wb');
if(!$remoteFile || !$localFile) {
exit; //Error erzeugen!
}
while (!feof($remoteFile)) {
$chunk = fread($remoteFile,1024);
fwrite($localFile,$chunk);
}
fclose($localFile);
fclose($remoteFile);
//Radarbild auswerten
$im = ImageCreateFromPNG ($localImage);
//Stärken
$blitz[1] = imagecolorresolve ($im, 255, 85, 0); // orange
$blitz[2] = imagecolorresolve ($im, 255, 255, 255); // weiß
$blitz[3] = imagecolorresolve ($im, 255, 255, 0); // gelb
//Pixel durchgehen
$blitz_intensi = 0;
for($x=$homeX-$homeRadius; $x<=$homeX+$homeRadius; $x++) {
for($y=$homeY-$homeRadius; $y<=$homeY+$homeRadius; $y++) {
$found = array_search(imagecolorat($im, $x, $y), $blitz);
if(!($found === FALSE)) {
$blitz_intensi +=$found;
}
}
}
$blitz_intensi = (int)( $blitz_intensi );
//Im DebugModus Rechteck einzeichnen
if($debug) {
$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);
imagePNG ($im, $localImage);
}
imagedestroy($im);
//Regenmenge der jeweiligen Stärken im Radius aufsummiert
//echo "Blitzintensität: $blitz_intensi
";
SetValue(29397 /*[Wetter\Blitz-Intensität]*/, $blitz_intensi);
if (($blitz_intensi >= 5) and (GetValue(31250 /*[Wetter\Blitz - Alarm]*/) == False)) {
echo "ALARM";
WFC_PushNotification(25678 /*[Alte Schule]*/, "Unwetter", "Gewitter", "Speaker", 0);
SetValue(31250 /*[Wetter\Blitz - Alarm]*/, True);
}else{
SetValue(31250 /*[Wetter\Blitz - Alarm]*/, False);
}
Beim o.g Skrpt wird das Radarbild von Blibis.de verwendet. Es müssen die Koordinaten siewie die ID der PushNotification angepasst werden; der Aufruf erfolgt zyklisch alles 15 Minuten. Wer mag, kann noch die Blitzintensität in eine Variabel schreiben und mitloggen.
Das Skript lässt sich auch für einfache „Bilderkennungsaufgaben“ verwenden: ein gelbes Postauto wird sicher im Bild einer Webcam erkannt.
MST