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