Wetterwarnung

… ein „IPS-Klassiker“ im neuen Gewand:

//Einstellungen in px - Oben-Links ist 0,0
$homeX = 250;     // 250
$homeY = 140;     // 140
$homeRadius = 15;

$remoteImage = "http://www.dwd.de/bvbw/portlets/WarnPortlet/jsp/getwarningmaps.jsp?src=SG_x_x_0.gif&mimeType=image/gif";
$localImage = IPS_GetKernelDir()."\\media\\unwetter.gif";
$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 = ImageCreateFromGIF ($localImage);

$warnung[4] = imagecolorresolve  ($im, 175, 0, 100);  // dunkel rot
$warnung[3] = imagecolorresolve  ($im, 255, 255, 0);  // rot
$warnung[2] = imagecolorresolve  ($im, 250,  150, 0); // orang
$warnung[1] = imagecolorresolve  ($im, 255,  255, 0); // gelb

//Pixel durchgehen
$warnstufe = 0;
for($x=$homeX-$homeRadius; $x<=$homeX+$homeRadius; $x++) {
   for($y=$homeY-$homeRadius; $y<=$homeY+$homeRadius; $y++) {
      $found = array_search(imagecolorat($im, $x, $y), $warnung);
      if(!($found === FALSE)) {
         $warnstufe+=$found;
      }
   }
}
SetValue(40729 /*[Wetter\Unwetterwarnung]*/, $warnstufe);    

// 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);

echo "Unwetter: $warnstufe
";

if ($warnstufe > 100){

// ALARM

}

MST

unwetter.gif

Hallo Steiner,

schön gemacht. Evtl. geht es aber auch einfacher. Über die Seite Warntabelle kann man direkt kontrollieren, ob der betreffende Landkreis vorhanden ist und falls ja, dann kann auch gleich der Grund für die Warnung mit eingelesen werden.

Ich wünsche einen schönen Tag.

Christoph.

Hallo Christoph,

manchmal sieht man die Bits vor lauter Bytes nicht :rolleyes:
Danke für den Hinweis.
So wird ein Schuh draus - siehe Bild.
Das passende Skript:

$warnung = GetValue(52760 /*[Wetter\Wetter Warnung]*/);
//echo "Warnung: $warnung
";

$pos = strpos($warnung, "keine Warnung");
if ($pos === False){

	echo "Wetter - ALARM";

}

MST

add_rule.png

wie bekommt man das denn für die Region BadenWürttemberg hin :confused:

Gruß Ewald

http://www.dwd.de/bvbw/portlets/WarnPortlet/jsp/getwarningmaps.jsp?src=SU_x_x_0.gif&mimeType=image/gif

und im Script Rot auf 255,0,0 ändern hatten gestern eine Rote Warnung und zeigte sie falsch an.

Gruß Michi

:stuck_out_tongue: Danke Michi für die Hilfe !

Gruß Ewald

Über die Seite Warntabelle kann man direkt kontrollieren,… Grund für die Warnung mit eingelesen werden.

wie bekommt man das denn für die Region BadenWürttemberg hin

Wie bekommt man das überhaupt hin?
Welches der beiden Scripte ist denn das bessere?
Die Seite „[Exercise] TextParser“ habe ich gelesen und getestet, hat auch fuktioniert. Nur diesesmal klappt es nicht.

Gibt es eine Anleitung für Anfänger, so Schritt für Schritt?

Gruß
K.-H.

Ich löse das Problem direkt im Designer.
Habe ein Web eingebettet, und den link zu meiner regionalen Wetterwarnung hinterlegt.

http://www.dwd.de/bvbw/portlets/WarnPortlet/jsp/warnings.jsp?LAND_CODE=HAN&LANG=de#WS_ANCHOR_0

Der „Kassiker“ gibt bei mir folgende Fehlermeldung aus:

„Fatal error: Call to undefined function ImageCreateFromGIF() in [www Reader\DWD\Wetterwarnung] on line 25“

Was mache ich falsch?

Du musst noch die php_gd2.dll in Deiner php.ini mit einladen.

Da steh ich nun wieder :slight_smile:

Mir sagt generell die php.ini was, aber wo änder ich die für IP-Symcon?
War wahrscheinlich wieder krank als das im Ip-Symconseminar durchgenommen wurde :smiley:

Danke schonmal
Grüße
Diron

Sie sollte in deinem IPS Verzeichnis sein. Dort die Datei einbinden und auch ins Verzeichnis kopieren.


```php

extension_dir = "C:\IP-Symcon\"
extension = "php_gd2.dll"
extension = php_mysql.dll
extension = php_soap.dll
extension = php_curl.dll
extension = php_xmlrpc.dll
extension = php_java.dll
extension = php_pdo.dll
extension = php_sqlite.dll
max_execution_time = 150

Habt ihr php nochmal zusätzlich installiert? In meinem Installationsverzeichnis \IP-Symcon gibts diese Dateien nicht.

Dann kannst Du Dir einfach eine erstellen.

Also php.ini im IP-Symcon-Verzeichnis erstellt und den Code vom RWN darein kopiert. Wo bekomme ich die anderen Dateien her?

Das war eher als Beispiel gedacht. Was Du noch benötigst ist die php_gd2.dll.

Im Anhang.

php_gd2.zip (400 KB)

Danke.

Habe deine Datei in den IP-Symcon Ordner entpackt. Klappt auchnet :confused:

Hallo,

bei mir hatte es eben auch nicht sofort funktioniert, ich hab allerdings gleich 2 Dinge geändert als es funktionierte.
Das erste war die Zeile in der PHP.ini:


extension_dir = "C:\Programme\IP-SYMCON\"
extension = php_gd2.dll

Dort hatte ich erst:
extension=php_gd2.dll
also ohne Leerzeichen zu stehen.

Und ich hatte eine andere php_gd2.dll, die ich bei php direkt geladen hatte, diese hab ich noch gegen die aus dem Forum getauscht.

Schöne Grüße
Thomas

Hallo,

nachdem heute nun ein extremes Gewitter über Kiel gezogen ist, wollte ich das Script mal testen. Auf der Wetterkarte war fast das gesamte Schleswig-Holstein rot gefärbt (incl. meines Heim-Quadrates). Doch die Warnstufe blieb auf 0.

Hier mein Script:

<?
//Einstellungen in px - Oben-Links ist 0,0
$homeX = 214;     // 250
$homeY = 101;     // 140
$homeRadius = 10;

$remoteImage = "http://www.dwd.de/bvbw/portlets/WarnPortlet/jsp/getwarningmaps.jsp?src=SG_x_x_0.gif&mimeType=image/gif";
$localImage = IPS_GetKernelDir()."\\media\\unwetter.gif";
$webfrontImage = IPS_GetKernelDir()."\\webfront\\img\\unwetter.gif";
$remoteFile = fopen("$remoteImage",'rb');
$localFile = fopen($localImage,'wb');
$webfrontFile = fopen($webfrontImage,'wb');

if(!$remoteFile || !$localFile) {
   exit; //Error erzeugen!
}

while (!feof($remoteFile)) {
  $chunk = fread($remoteFile,1024);
  fwrite($localFile,$chunk);
  fwrite($webfrontFile, $chunk);
}
fclose($localFile);
fclose($remoteFile);
fclose($webfrontFile);

//Radarbild auswerten
$im = ImageCreateFromGIF ($localImage);

$warnung[4] = imagecolorresolve  ($im, 175, 0, 100);  // dunkel rot
$warnung[3] = imagecolorresolve  ($im, 255, 255, 0);  // rot
$warnung[2] = imagecolorresolve  ($im, 250,  150, 0); // orang
$warnung[1] = imagecolorresolve  ($im, 255,  255, 0); // gelb

//Pixel durchgehen
$warnstufe = 0;
for($x=$homeX-$homeRadius; $x<=$homeX+$homeRadius; $x++) {
   for($y=$homeY-$homeRadius; $y<=$homeY+$homeRadius; $y++) {
      $found = array_search(imagecolorat($im, $x, $y), $warnung);
      if(!($found === FALSE)) {
         $warnstufe+=$found;
      }
   }
}
SetValue(23531 /*[Außenbereich\.Scripts\Warnstufe]*/, $warnstufe);

// 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);
imagegif($im, $webfrontImage);
imagedestroy($im);

echo "Unwetter: $warnstufe
";

if ($warnstufe > 100){

// ALARM

}
?>

Wo liegt das Problem?

!! Update: Nun hat sich mein Bereich Orange gefärbt und die Warnstufe steht auf 540. Kann es sein, dass das rote Quadrat für den Heimbereich schuld ist? Quasi roter Adler auf rotem Grund.

Gruß

Jimmy

Daran kann´s nicht liegen, denn dein Standort wird erst nach dem Auswerten markiert.