IP-Symcon-Unwetterzentrale

Dieser zeile auscommenten


//Im DebugModus Rechteck einzeichnen

if($debug) {

   $schwarz = ImageColorAllocate ($im, 0, 0, 0);

   $rot = ImageColorAllocate ($im, 255, 0, 0);

   // ->>>> imagefilledrectangle($im, $homeX-$homeRadius, $homeY-$homeRadius, $homeX+$homeRadius, $homeY+$homeRadius, $schwarz);
   imagesetpixel($im, $homeX, $homeY, $rot);
   imagegif($im, $localImage);
}

–edit–
Zu schnell victory gerufen … nur ein pixel rot
hmm

das hier soll arbeiten


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

–ende edit–

–edit 2–
Wer brauchte da winkel functionen fur seine graphics ???
ich weiss off-topic, aber mude und zu faul der richtige thread zu suchen …

winkel funktionen fur der designer : imagerotate ( resource src_im, float angle, int bgd_color [, int ignore_transparent] )
sehe : http://be2.php.net/manual/en/function.imagerotate.php
– ende edit–

Gehe schlafen !
GGGss out

Ja suppi,

genau das ist das.

Danke schön, dann kann ich ja heute auch ruhig schlafen gehen.

Gruß,
Doc

Um 21h00 ? :eek:
Na wenn das nicht vorbildlich ist?

mfG Franz

Na dass sieht ja echt gut aus, werd’s direkt mal ausprobieren.

Danke an GGGss

Gruss

sveto

… ich habe mal den FS20 Regenmelder (oben) mit der „IPS-Unwetterzentrale“ (unten) verglichen: für meine Ansprüche ausreichend!
Bei einer Regenmeldung packe ich den Schirm ein, oder verschiebe die Outdoor-Aktivitäten (Joggen, Radfahren).
Sinn und Zweck des o.g. Skript ist es Vorhersage zu bekommen. Es funktioniert auch für Blitze, so kann man z.B. eine SMS aufs Handy generieren.
Die „bunten Pixel“ (1 bis 6 im Skript) werden ihrer Stärke entsprechend aufsummiert (siehe Grafik „Niederschlag“).

MST

niederschlag_value.jpg

Hallo Steiner,

soweit funktioniert das Script super. Nette Sache. Doch heute hatte ich 4 Stunden alle 30 Minuten folgende Meldung:

ScriptError: UnwetterZentrale.ips.php ~ Sender: TimerEvent ~ Result: <br />
<b>Warning</b>:  fopen() [<a href='function.fopen'>function.fopen</a>]: php_network_getaddresses: getaddrinfo failed: Der angegebene Host ist unbekannt.  in <b>C:\Programme\IP-Symcon\scripts\UnwetterZentrale.ips.php</b> on line <b>45</b><br />
<br />
<b>Warning</b>:  fopen(http://www.wetteronline.de/daten/radar/dsch/2006/09/19/1345.gif) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No error in <b>C:\Programme\IP-Symcon\scripts\UnwetterZentrale.ips.php</b> on line <b>45</b><br />

Was sagt mir das?

Zweite Frage, wie kann ich Abstufungen machen: Regen naht, es regnet, etc.
Sprich, wie wertest du die farbigen Pixel aus.

Das hier ist doch nur EINE Abstufung:

if ($regenmenge >= 1)

Ich würde mir gerne je nach Dringlichkeit entweder eine SMS aufs Handy senden oder eine Aktion (Rolladen runter) ausführen lassen.

Ich habe das Script folgendermaßen angepasst:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : UnwetterZentrale.ips.php
Trigger  : 
Interval : 
*/
//Einstellungen in px

$homeX = 270;
$homeY = 126;
$homeRadius = 4;

//Zum testen der X,Y,Radion Angaben auf true setzen und Bild hinerher angucken
//$debug= False;
$debug = True;

//Auf 15 Minuten Takt Synchronizieren

$offset = (integer)date("s") + ((integer)date("i") % 15) * 60;

if($offset != 0) {
   IPS_SetScriptTimer("UnwetterZentrale",910 - $offset);
} else {
    IPS_SetScriptTimer("UnwetterZentrale",910);
}

//Zeit berechnen

$minute=Floor(date("i") / 15) * 15 - 30;
$dateline=mktime(date("H"), $minute, 0, date("m"), date("d"), date("y"));

$year=gmdate("Y", $dateline);
$month=gmdate("m", $dateline);
$day=gmdate("d", $dateline);
$time=gmdate("Hi", $dateline);

$remoteImage = "http://www.wetteronline.de/daten/radar/dsch/$year/$month/$day/$time.gif";
$localImage = IPS_GetKernelDir()."\\radar.gif";

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

//Stärken

$regen[6] = imagecolorresolve  ($im, 255,   0, 255);
$regen[5] = imagecolorresolve  ($im, 153,  51, 153);
$regen[4] = imagecolorresolve  ($im,  28,  126, 217);
$regen[3] = imagecolorresolve  ($im,  42,  170, 255);
$regen[2] = imagecolorresolve  ($im,  83,  210, 255);
$regen[1] = imagecolorresolve  ($im, 170,  255, 255);

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

      }
   }
}


//Im DebugModus Rechteck einzeichnen

if($debug) {

   $schwarz = ImageColorAllocate ($im, 0, 0, 0);

   $rot = ImageColorAllocate ($im, 255, 0, 0);

   imagefilledrectangle($im, $homeX-$homeRadius, $homeY-$homeRadius, $homeX+$homeRadius, $homeY+$homeRadius, $schwarz);
   imagesetpixel($im, $homeX, $homeY, $rot);
   imagegif($im, $localImage);
}

imagedestroy($im);
//Regenmenge der jeweiligen Stärken im Radius aufsummiert
echo $regenmenge;
if ($regenmenge >= 1) {
      SetValueString("WE_Unwetter", "Regen naht!");
}
?>

Doch die Variable „WE_Unwetter“ bleibt ewig auf „Regen naht“ stehen. Auch jetzt, wo $regenmenge = 0 ist.

Hier hab ich doch bestimmt einen Bug eingebaut, oder?

Gruß

Jimmy

… nö, ein Bug ist es nicht:rolleyes:

… man könnte, aber nur, wenn man unbedingt will, die Variable zurück setzen:


if ($regenmenge >= 1000) {
      SetValueString("WE_Unwetter", "alle Schotten dicht");
} 

if ($regenmenge == 0) {
      SetValueString("WE_Unwetter", "kein Regen in Anmarsch");
} 

Die Wertigkeit der Pixel werden einfach aufsummiert. In der Praxis bei Starkgegen bis 1500.

MST

PS: manchmal sind noch keine aktuellen Daten / Bilder verfügbar - dann kommt es zu der o.g. Fehlermeldung

Hi Steiner,

danke für die promte Antwort.

Hast du schon Erfahrungswerte für die Abstufung, bist ja in Scharbeutz nicht weit von Schönkirchen bei Kiel weg;)

Gruß

Jimmy

Hallo Steiner,

habe das Script wie folgt erweitert und manuell ausgeführt:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : UnwetterZentrale.ips.php
Trigger  : 
Interval : 
*/
//Einstellungen in px

$homeX = 270;
$homeY = 126;
$homeRadius = 4;

//Zum testen der X,Y,Radion Angaben auf true setzen und Bild hinerher angucken
//$debug= False;
$debug = True;

//Auf 15 Minuten Takt Synchronizieren

$offset = (integer)date("s") + ((integer)date("i") % 15) * 60;

if($offset != 0) {
   IPS_SetScriptTimer("UnwetterZentrale",910 - $offset);
} else {
    IPS_SetScriptTimer("UnwetterZentrale",910);
}

//Zeit berechnen

$minute=Floor(date("i") / 15) * 15 - 30;
$dateline=mktime(date("H"), $minute, 0, date("m"), date("d"), date("y"));

$year=gmdate("Y", $dateline);
$month=gmdate("m", $dateline);
$day=gmdate("d", $dateline);
$time=gmdate("Hi", $dateline);

$remoteImage = "http://www.wetteronline.de/daten/radar/dsch/$year/$month/$day/$time.gif";
$localImage = IPS_GetKernelDir()."\\radar.gif";

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

//Stärken

$regen[6] = imagecolorresolve  ($im, 255,   0, 255);
$regen[5] = imagecolorresolve  ($im, 153,  51, 153);
$regen[4] = imagecolorresolve  ($im,  28,  126, 217);
$regen[3] = imagecolorresolve  ($im,  42,  170, 255);
$regen[2] = imagecolorresolve  ($im,  83,  210, 255);
$regen[1] = imagecolorresolve  ($im, 170,  255, 255);

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

      }
   }
}


//Im DebugModus Rechteck einzeichnen

if($debug) {

   $schwarz = ImageColorAllocate ($im, 0, 0, 0);

   $rot = ImageColorAllocate ($im, 255, 0, 0);

   imagefilledrectangle($im, $homeX-$homeRadius, $homeY-$homeRadius, $homeX+$homeRadius, $homeY+$homeRadius, $schwarz);
   imagesetpixel($im, $homeX, $homeY, $rot);
   imagegif($im, $localImage);
}

imagedestroy($im);
//Regenmenge der jeweiligen Stärken im Radius aufsummiert
echo $regenmenge;
if ($regenmenge = 0) {
      SetValueString("WE_Unwetter", "kein Regen in Anmarsch");
}
if ($regenmenge >= 1) {
      SetValueString("WE_Unwetter", "Regen naht!");
}
if ($regenmenge >= 1000) {
      SetValueString("WE_Unwetter", "alle Schotten dicht");
}
?>

Über die „echo“-Funktion wird im Script Output Window 0 angezeigt, was auch korrekt ist, die Variable „WE_Unwetter“ bleibt auf dem alten Wert „Regen naht“. Wo liegt der Fehler?

Gruß

Jimmy

… ich habe ich Scharbeutz nur eine Warnstufe :wink:


if ($regenmenge >= 50) {
   include(IPS_GetScriptFile("Beep"));
   DXMedia_Open(62704, "d:/daten/sounds/regenradar.wav");
   DXMedia_SetVolume(62704, 10);
   DXMedia_Play(62704);
}

MST

Anlage: Sound

regenradar.zip (31.4 KB)

@Jimmy

evtl.

 if ($regenmenge = 0) 

durch

 if ($regenmenge == 0) 

ersetzen.
Du willst ja die Variable vergleichen und nicht die „0“ zuweisen.

Gruß,
Doc

@ Jimmy,

if($variable == 0) {
.
.
.
}

gleich gleich - mein Fehler :mad:

MST

@all
Schade, hat jemand ne feinere Abstufung?

@Steiner & Doc Snuggles

THX, jetzt wird die „0“ interpretiert.

Gruß Jimmy

Ich bekomme das Skript überaupt nicht zum Laufen. Ich bekomme die Fehlermeldung „Call to undefined function ImageCreateFromGIF() …“ und habe darauf hin PHP von www.php.net manuell nach Anleitung installiert.

Die php_gd2.dll hab ich in’s Verzeichnis C:\Programme\IP-Symcon kopiert und einen entsprechenden Eintrag in der php.ini gemacht (extension_dir = „c:\programme\ip-symcon“).

PHP ist unter c:\programme\php installiert.

Wenn ich nun die Environment-Variable PHPRC=c:\programme\php, also auf das Verzeichnis mit der php.ini setze, laufen keinerlei Skripte mehr unter IPS, d.h. bei Execute wird der komplette Quelltext des jeweiligen Skripts im Script Output Window ausgegeben.

Hallo,

Die komplette Installation von PHP wäre nicht nötig gewesen. Nur die php_gd2.dll ins IPS-Verzeichnis kopieren (bei mir in einem Subfolger extensions) und dann in der php.ini (im IPS-Verzeichnis) folgende Einträge anpassen/einfügen:


```php

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

Die restlichen Einträge unverändert lassen.

Gruss

hightower

Danke, funzt!

Hi,

das Script läuft soweit sehr zuverlässig. Kompliment nochmal an Steiner.

Mir ist nur aufgefallen, dass bei mir, wenn ich die Variable $time ausgebe, nicht die aktuelle Zeit (-2h) sondern -2,5h errechnet wird.

Sprich um 20.45 Uhr hätte die URL …1845.gif lauten müssen. Tatsächlich wird aber die URL mit 18.15 gefüllt. Dementsprechend habe ich immer 30 Minuten Versatz.

Wie kann ich das ändern. Benutze das Standardscript (nur Koordinaten angepasst).

Gruß

Jimmy

Du könntest die „-30“ weglassen.

//Zeit berechnen
$minute=Floor(date("i") / 15) * 15 [b]- 30[/b] ;

Aber dann hast du das Problem, wenn das Bild nicht „pünktlich“ zur Verfügung steht, erhälst du „Schrott“.

Aktuell müsste „2100.gif“ funktionieren, tut es aber nicht :-(.
Ergebnis ist das Bild von 14:00, also „1200“.

Jetzt 23:06 ist das „2100.gif“ da, dann passt es wieder. Und um 23:21 gab es „2115.gif“ und es war wieder 6 Minuten später ;).

Ich ergänze gerade noch um die Unwetterwarnung vom DWD. Die Seite wird in wenigen minutenabständen aktualisiert.
Z.B. http://www.dwd.de/de/WundK/Warnungen/index.htm?Land=HN00&Art=O
Das Bild lässt sich auch direkt laden: http://www.dwd.de/scripts/getimg.php?src=/wundk/Warnungen/HN00_O.png

Kann mir mal jemand erklären ? Wie ich das Radar Bild in den Designer bekomme ?

Mir ist nicht ganz klar unter welchen Namen und wie das Bild aktuallisiert wird.

Die Soundausgabe geht schon.
(kleiner Anfänger erfolg)

Hallo Sven68,

nicht hiermit, aber siehe: http://www.ipsymcon.de/forum/showpost.php?p=11238&postcount=37
und das Bild im „ImagePool AddIn“ hinzufügen nicht vergessen.

MST