Anpassung Unwetterzentrale an Schweiz, V2.0alpha

…und hier kommt nun die versprochene Anpassung der Unwetterzentrale an die Schweizer Verhältnisse. Ich bin vom Schwezerischen Meteorologischen Dienst abgekommen, und verwende nun Kachelmanns Daten. Das Resultat ist viel zuverlässiger.

Es entsteht ein geographischer output (CurrentPrecipitations.gif) sowie mehrere Zeitverläufe als Präzipitationsintegrale (DailyRainAreaIntegralGraph.png etc.). Ueber die Zeit integriert wird eine kleine Fläche (ca. 1 km2) sowie eine grössere Fläche (9 km2) um das Epizentrum herum. In meiner Erfahrung der letzten 2 Monate sind die entsprechenden Kurven aber meistens ziemlich genau überlappend.

Der Script verwendet Meike’s Script (auf der Basis von GoogleCharts) um zeitliche Verläufe zu generieren - dazu muss natürlich Meikes Script installiert werden.

So wie er steht, ist der Script auf Zürich-Süd (zwischen Wollishofen und Enge) eingestellt. Natürlich kann dies verändert werden, aber es braucht etwas Geduld aus Gründen die sofort ersichtlich werden.

Ich wünsche den Eidgenossen - ob zugezogen, neu-eingebürgert (wie ich), alt-ansässig, oder expatriates - viel Erfolg mit der Unwetterzentrale Schweiz!


<?

//Einstellungen in px

$homeX = 153;
$homeY = 271;
$homeRadius = 2;
$largerhomeRadius = 5;

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

/*Auf xy Minuten Takt Synchronisieren

$offset = (integer)date("s") + ((integer)date("i") % 15) * 60;
echo $offset. "   ";
if($offset != 0) {
   IPS_SetScriptTimer("UnwetterZentrale V2",600 - $offset);
} else {
    IPS_SetScriptTimer("UnwetterZentrale V2",600);
}
*/
//Zeit berechnen

$minute=Floor(date("i") / 5) * 5;

$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=date("Hi", $dateline);


$CurrentGifTime = $year . $month. $day. $time;
$MonthlyRecurrent = $day. $time;
$CurrentGif ="http://data.meteomedia.de//data/layers/zuerich1/zuerich1_radarfcst_".$CurrentGifTime.".gif";
//echo $CurrentGif.chr(13);
$MeteoCentraleData=Sys_GetURLContent($CurrentGif);
//echo $data;
//preg_match("zuerich1_radarfcst_", $data, $result);

$remoteImage = $CurrentGif;
// $localImage = IPS_GetKernelDir()."\\RadarGifs\metradar-".$MonthlyRecurrent.".gif";
// $remoteCurrentImage = IPS_GetKernelDir()."\\Media\CurrentPrecipitations.gif";
$localImage = IPS_GetKernelDir()."\\Media\CurrentPrecipitations.gif";

//Radarbild Downloaden

$remoteFile = fopen("$remoteImage",'rb');
$localFile = fopen($localImage,'wb');
// $remoteCurrentFile = fopen($remoteCurrentImage,'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[1] = imagecolorresolve  ($im, 0,235,235);
$regen[2] = imagecolorresolve  ($im, 0, 178,235);
$regen[3] = imagecolorresolve  ($im, 0,104,235);
$regen[4] = imagecolorresolve  ($im, 0,0,235);
$regen[5] = imagecolorresolve  ($im, 0,255,0);
$regen[6] = imagecolorresolve  ($im, 0, 199, 0);
$regen[7] = imagecolorresolve  ($im, 0, 140, 0);



//Pixel durchgehen

$regenmenge = 0;
$pixelcounter =0;
(string)$regenstring = "";
for($x=$homeX-$homeRadius; $x<=$homeX+$homeRadius; $x++) {

   for($y=$homeY-$homeRadius; $y<=$homeY+$homeRadius; $y++) {
		if ($pixelcounter > 0) $regenstring = $regenstring . ", ";
      $pixelcounter =$pixelcounter + 1;
      $found = array_search(imagecolorat($im, $x, $y), $regen);
		$regenpixel[$pixelcounter] = $found;
			if ($found < 1) $found = 0;
		$regenstring = $regenstring . $found;
//		echo nl2br("
 x:". $x." y: ".$y." pixelcounter: ".$pixelcounter ." found:".$regenpixel[$pixelcounter]). " ". "imagecolor: ". imagecolorat($im, $x, $y);
      if(!($found === FALSE)) {

         $regenmenge+=$found;

      }
   }
}


$largerregenmenge = 0;
$largerpixelcounter =0;
$x=0;
$y=0;

(string)$largerregenstring = "";
for($x=$homeX-$largerhomeRadius; $x<=$homeX+$largerhomeRadius; $x++) {

   for($y=$homeY-$largerhomeRadius; $y<=$homeY+$largerhomeRadius; $y++) {
		if ($pixelcounter > 0) $largerregenstring = $largerregenstring . ", ";
      $pixelcounter =$pixelcounter + 1;
      $largerfound = array_search(imagecolorat($im, $x, $y), $regen);
		$largerregenpixel[$largerpixelcounter] = $largerfound;
			if ($largerfound < 1) $largerfound = 0;
		$largerregenstring = $largerregenstring . $largerfound;
//		echo nl2br("
 x:". $x." y: ".$y." pixelcounter: ".$largerpixelcounter ." found:".$largerregenpixel[$largerpixelcounter]). " ". "imagecolor: ". imagecolorat($im, $x, $y);
      if(!($found === FALSE)) {

         $largerregenmenge+=$largerfound;

      }
   }
}



//Im DebugModus Rechteck einzeichnen

if($debug) {
	$HomeRadiusPlus =$homeRadius + 1;
	$HomeRadiusArea =$homeRadius + 10;
	$HomeRadiusArea11 =$homeRadius + 11;
	$HomeRadiusArea12 =$homeRadius + 12;
	$HomeRadiusPlus2 =$homeRadius + 2;
	
   $schwarz = ImageColorAllocate ($im, 0, 0, 0);
   $rot = ImageColorAllocate ($im, 255, 0, 0);
   $weiss = ImageColorAllocate ($im, 255, 255, 255);
   
   imagerectangle($im, $homeX-$HomeRadiusPlus, $homeY-$HomeRadiusPlus, $homeX+$HomeRadiusPlus, $homeY+$HomeRadiusPlus, $rot);
   imagerectangle($im, $homeX-$HomeRadiusPlus2, $homeY-$HomeRadiusPlus2, $homeX+$HomeRadiusPlus2, $homeY+$HomeRadiusPlus2, $weiss);
   imagerectangle($im, $homeX-$HomeRadiusArea, $homeY-$HomeRadiusArea, $homeX+$HomeRadiusArea, $homeY+$HomeRadiusArea, $rot);
   imagerectangle($im, $homeX-$HomeRadiusArea11, $homeY-$HomeRadiusArea11, $homeX+$HomeRadiusArea11, $homeY+$HomeRadiusArea11, $weiss);

   //imagesetpixel($im, $homeX, $homeY, $rot);
   imagegif($im, $localImage);
//	imagegif($im, $remoteCurrentImage);

 }

imagedestroy($im);
//Regenmenge der jeweiligen Stärken im Radius aufsummiert
//echo "smaller regenmenge integral: ".$regenmenge. chr(13);
//echo "larger  regenmenge integral: ".$largerregenmenge. chr(13);
setvalue (29707 /*[PHP\Unwetterzentrale V2\RegenMengenIntegral]*/,$regenmenge);
setvalue (57575 /*[PHP\Unwetterzentrale V2\RegenMengenIntegral+5]*/ ,($largerregenmenge/4));





//daily graph
$Vari 			= array (29707 /*[PHP\Unwetterzentrale V2\RegenMengenIntegral]*/, 57575);
$Trans   		= array (60);
$Farben  		= array ("0000ff","ff0000");
$Text    		= array ("Regen 9 pix", "Regen 145 pix");
$YBeschriftung = array ("Menge Regen");
$YAchse			= array (0);
$Hinter1 = "000000";
$Hinter2 = "FFFFFF";
$Zeitspanne = 1;
$Pfad	= "C:/IP-Symcon/media/";
$filename = "DailyRainAreaIntegralGraph";
$Size = "800x350";
$Endzeit = "";
$Ueberschrift= "Präzipitationen";
$BoolOffset = 15;
$Schriftfarbe = "ffffff";
$Dynamisch = 3;
$Graphenart = "Line";
$TimeCompare = array(0);
$Faktor = array(0.5,0.5,0.5,0.5);

include("GoogleCharts.ips.php");

//monthly graph
$Zeitspanne = 3;
$filename = "MonthlyRainAreaIntegralGraph";
include("GoogleCharts.ips.php");

//yearly graph
$Zeitspanne = 4;
$filename = "YearlyRainAreaIntegralGraph";
include("GoogleCharts.ips.php");



?>