Blitze & Gewitter II

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

Farbe_bestimmen.JPG

läuft soweit aber…

Warning: Ihr Server-Authentifizierungs-Token hat sich geändert. Bitte reaktivieren Ihren Server.

Funktioniert , leider, nicht mehr :frowning:

Hey Marcel,

der Blitzerwarner läuft wieder :smiley: die Variablen dürften klar sein :

Boolean -> ~Alert -> Alarm
Float -> Intensität

wie Steiner geschrieben hat muss man den aktuellen Link
eintragen:

http://www.blids.de/spion/bilder/aktkartegergrau.jpg ist der
aktuelle da es im Moment keine PNG Datei sondern jpg ist,
muss dies im Skript mit „ImageCreateFromJPEG“ korrigiert
werden.

Zuletzt sollten noch die RGB Farben mittels Paint ausgelesen
werden, die Bedeutung der Farben erhältst du hier :

http://www.industry.siemens.com/services/global/de/blids/service/spion/Seiten/spion_de.aspx

Achja deine Position muss du ebenso im Paint ermitteln,
indem du mit der Maus auf deine Position fährst erhältst
du Links unten die Koordinaten :

foto.png

dann sollte noch der Umkreis angepasst werden, ich habe bewusst
einen großen Umkreis gewählt um auch zu testen ob „Alarm“
gemeldet wird, somit ergibt sich folgendes Skript:

<?

// X-Y-Koordinaten des zu überwachenden Region
$homeX = 164;
$homeY = 505;
$homeRadius = 70;
$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.blids.de/spion/bilder/aktkartegergrau.jpg";
$localImage = IPS_GetKernelDir()."\\media\blitze.jpg";

//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 = ImageCreateFromJPEG ($localImage);

//Stärken
$blitz[1] = imagecolorresolve  ($im, 233, 3, 0);      // rot
$blitz[2] = imagecolorresolve  ($im, 255, 155, 16);     // orange
$blitz[3] = imagecolorresolve  ($im, 255,  255, 24);     // 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(53708 /*[Wetter\Blitz-Intensität]*/, $blitz_intensi);

if (($blitz_intensi >= 5) and (GetValue(38505 /*[Wetter\Blitz - Alarm]*/) == False)) {
   echo "ALARM";
   WFC_PushNotification(27986 /*[Alte Schule]*/, "Unwetter", "Gewitter", "Speaker", 0);
     SetValue(38505 /*[Wetter\Blitz - Alarm]*/, True);
}else{
    SetValue(38505 /*[Wetter\Blitz - Alarm]*/, False);
}

?>

somit startet das Wochenende hervorragend dank :loveips:

Grüße Alex

Guter Mann ! Danke

Gesendet von meinem iPhone mit Tapatalk

Hallo Alex,

vielen Dank dafür!

Gruß
Jens

Moin Moin ,

also hier knallt es wie sau aber das script zeigt nix dazu an :frowning:

Sind die Koordinaten richtig?

Gesendet von meinem Redmi Note 2 mit Tapatalk

Also so richtig scheint das aber auch bei mir nicht zu funktionieren.

hier bekomme ich eine Blitzintensität von 1 !

Das war aber ein echt ausgewachsenes Gewitter eben !

Such dir mal einen Ort auf der Karte in dem es richtig kracht und prüfe , da kommt immer 0 raus

$blitz[1] = imagecolorresolve  ($im, 233, 3, 0);      // rot
$blitz[2] = imagecolorresolve  ($im, 255, 155, 16);     // orange
$blitz[3] = imagecolorresolve  ($im, 255,  255, 24);     // gelb

wahrscheinlich passen die RGB Farben nicht mehr zum Bild ;).

Gerade wollte ich mich daran machen das bei mir zu korrigieren. Sehr praktisch - Danke.

Vorsicht, die sind nur aus dem Script oben kopiert ;), das sollte der Hinweis zur Prüfung sein.

MfG
Ralf

hallo zusammen,

welche Werte habt ihr denn da so eingetragen?

Grafikprogramm nehmen und die passenden Werte aus einem aktuellen Bild entnehmen.

War nur ein Hinweis, weil auch beim Regenradar die Farben nicht mehr passten.

MfG
Ralf

Gibt jetzt ja auch mehr Abstufungen :frowning:

Gesendet von meinem iPhone mit Tapatalk

JPEG error #53

Was soll mir der Fehler sagen?
Im WF wird die Datei angezeigt, über FTP kann ich mir die Datei auch korrekt anzeigen, aber wenn ich mir das Bild im Objektbaum ansehen möchte, dann kommt die Fehlermeldung.

Folgendermaßen habe ich die Datei auf meinem Raspi angelegt:

// Anlegen eines neuen Links mit dem Namen "Blitzkarte"
$ImageFile = IPS_GetKernelDir()."media/blitze.jpg";     // Image-Datei
$MediaID = IPS_CreateMedia(1);                  // Image im MedienPool anlegen
IPS_SetMediaFile($MediaID, $ImageFile, true);   // Image im MedienPool mit Image-Datei verbinden
IPS_SetName($MediaID, "Blitzkarte"); // Medienobjekt benennen
IPS_SetParent($MediaID, 32348 /*[Wetter\Gewitter]*/); // Medienobjekt einsortieren unter dem Objekt mit der ID "12345"
IPS_SetIdent($MediaID, "Blitzkarte");

Wo liegt der Fehler ?

Gruß
Jens

Eben wegen den Abstufungen find ichs recht schwer die genauen Werte zu finden…
Hab schon mal mit einem Grafikprogramm die Farbwerte ausgelesen, allerdings war danach kein Gewitter obwohl die Fläche orange/rot war…

Gesendet von meinem JY-S3 mit Tapatalk

da müßte man jetzt X Werte einbauen ! Die Abstufung ist das Problem.