Unwetterzentrale mit Statusausgabe über Soundkarte

Hallo zusammen,
ich habe mir mal die Freiheit genommen das Script um meinen Wunsch nach Download und Speicherung der Wetteronline Bilder zu erweitern.

Was macht diese Version des Scriptes:
Es legt 2 Bilder im Mediaordner an, die die Regenlage in BW und D anzeigt und welche dann wieder im Webfront als Popups eingebunden werden können. Das Bild für BW ist natürlich wie immer anpassbar wenn man den Link auf die Webseite entsprechend seines Bundeslandes anpasst. D ist wohl eher generischer Natur.

Zusätzlich nutzt es den Mediaplayer & TTS für die Ausgabe von Audiowarnmeldungen. Mediaplayer für Standardsachen wie „Ich habe einen Hinweis !“ und TTS für die Ausgabe von spezifischen Informationen wie Regenpixelmenge und Unwetter/Regenstärke bei über 600 PX (ich habe 2 Stufen etabliert).

Es ist somit eine Mischung aus verschiedenen Scripten, die aber im Kern nur übernommen wurden und nicht spezifisch angepasst wurden. Sie sollten also eigentlich keine Probleme verursachen (hoffe ich)

Falls jemand das auch schon mal überlegt hat, hier das Script so wie ich es nutze.

Sollte es nicht genehm sein das Script so zu verändern, bitte diesen Post löschen und meinen Versuch des PHP Beitrages ungestraft zu lassen.

Gruss
B71

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : UnwetterZentrale.ips.php
Trigger  :
Interval :
*/
//Einstellungen in px 108/59
$homeX = 108;
$homeY = 59;
$homeRadius = 10;
//Zum testen der X,Y,Radion Angaben auf true setzen und Bild hinerher angucken
$debug= True;
//$debug = True;
//Auf 15 Minuten Takt Synchronisieren
$offset = (integer)date("s") + ((integer)date("i") % 15) * 60;
//echo $offset."
";
if($offset != 0) {
   IPS_SetScriptTimer("UnwetterZentrale",1200 - $offset);
} else {
    IPS_SetScriptTimer("UnwetterZentrale",1200);
}
//Zeit berechnen
//$minute=Floor(date("i") / 15) * 15 - 30;
$minute=Floor(date("i") / 15) * 15;
$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/dbad/$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
$fileName = "media\\wetteronline-radar.png";
$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);
imagepng($im, "../".$fileName);

//Deutschland Regenstatus
$remoteImage1 = "http://www.wetteronline.de/daten/radar/dwddg/$year/$month/$day/$time.gif";
$localImage1 = IPS_GetKernelDir()."\\radar1.gif";
//Radarbild Downloaden
$remoteFile1 = fopen("$remoteImage1",'rb1');
$localFile1 = fopen($localImage1,'wb1');

if(!$remoteFile1 || !$localFile1) {
   exit; //Error erzeugen!
}

while (!feof($remoteFile1)) {

  $chunk = fread($remoteFile1,1024);

  fwrite($localFile1,$chunk);

}

fclose($localFile1);
fclose($remoteFile1);
//Radarbild auswerten
$fileName1 = "media\\wetteronline-radar-D.png";
$im1 = ImageCreateFromGIF ($localImage1);
//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);
imagepng($im1, "../".$fileName1);


//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 Staerken im Radius aufsummiert
// echo $regenmenge;
$id_sound = 24271 /*[Skripte\Media Player]*/;
$daylight = getvalueboolean (53187 /*[Skripte\.Laufzeitscripte\Sunrise / Sunset\Sunrise / Sunset generell\Daylight0]*/);
if ($regenmenge == 0) {
      SetValueString("WE_Unwetter", "Es bleibt trocken !");
}
if (($regenmenge >= 50) and ($regenmenge <= 599)) {
      SetValueString("WE_Unwetter", "Normaler Regen !");
}
if (($regenmenge >= 500) and ($regenmenge <= 999)) {
      SetValueString("WE_Unwetter", "Starker Regen !");
      if ($daylight == True)
      {
      WAC_PlayFile($id_sound , IPS_GetKernelDir()."media\\hinweis.wav");
      IPS_Sleep(2000);
      TTS_Speak(20785 /*[Text To Speech]*/, "Es wird sehr stark regnen.", true);
      IPS_Sleep(2000);
      TTS_Speak(20785 /*[Text To Speech]*/, "Die Regenmenge ist $regenmenge Pixel", true);
        }
}
if (($regenmenge >= 1000) and ($regenmenge <=1549))
        {
      SetValueString("WE_Unwetter", "Unwetter/Platzregen !");
      if ($daylight == True)
      {
      WAC_PlayFile($id_sound , IPS_GetKernelDir()."media\\hinweis.wav");
      IPS_Sleep(2000);
        TTS_Speak(20785 /*[Text To Speech]*/, "Achtung ! Dies ist eine Unwetterwarnung !", true);
        IPS_Sleep(2000);
        TTS_Speak(20785 /*[Text To Speech]*/, "Die Regenmenge ist $regenmenge Pixel !", true);
        }
}
if ($regenmenge >= 1550){
      SetValueString("WE_Unwetter", "Schweres Unwetter !");
      if ($daylight == True)
      {
      WAC_PlayFile($id_sound , IPS_GetKernelDir()."media\\hinweis.wav");
      IPS_Sleep(2000);
        TTS_Speak(20785 /*[Text To Speech]*/, "Achtung ! Dies ist eine Unwetterwarnung !", true);
        IPS_Sleep(2000);
        TTS_Speak(20785 /*[Text To Speech]*/, "Die Regenmenge ist $regenmenge Pixel !", true);
        }
}
//gibt die Pixelanzahl aus
SetValueInteger ("Regenpixel" , $regenmenge);
if ($regenmenge <= 50)
{
echo "Um ";
echo date("H:i")." Uhr";
echo " ist eine Regenmenge von $regenmenge Px";
echo " vorhergesagt. Es bleibt somit wohl trocken.";
}
else
{
echo "Um ";
echo date("H:i")." Uhr";
echo " ist eine Regenmenge von $regenmenge Px";
echo " vorhergesagt. Es wird sehr wahrscheinlich regnen.";
}
?>

Hallo B71,

wenn Du Code veröffentlichst, setzte es doch bitte in die entsprechenden „TAGS“ ein.

Hi Rainer,

tja…getan hätte ich es gerne…wusste aber nicht über welches tool, da mein PHP Editor Notepad heisst.

Daher der Hinweis zu meinen rudimentären PHP Versuchen im Post :slight_smile:

Grüssle & Danke für das editieren.

B71

Hallo Bernd,

das hat nichts mit dem Editor deines Vertrauens zu tun sondern mit dem Editor der benutzt wird um im Forum Nachrichten zu schreiben.

Wenn Du auf diese Nachricht antwortest schau mal im Editorfenster oben/rechts, da ist ein Papiersymbol mit PHP, wenn Du dieses klickst und dazwischen den Quelltext einfügst wird er so wie gewünscht im Forum angezeigt :wink:

Hallo Werner,
den Button hatte ich NOCH NIE wahrgenommen.

Lieben Dank und ab heute bin ich ein PHP-Korrekt-Poster.

B71

Verwendet jemand einen anderen Datenanbieter als Grundlage für die Regenwarnungen?
Die wetteronline Seite ist doch etwas grob in der Auflösung.