Unwetterzentrale mit Statusausgabe über Soundkarte

Hallo,

anbei ein Beispiel für „Unwetterzentrale.ips.php“ in V2 mit Ausgabe des Status über Soundkarte (Links für Soundfile und Image für Wetterdaten sind entsprechend anzupassen).

<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File     : UnwetterZentrale_V2.ips.php
Trigger  :
Interval :
*/

//Einstellungen in px

$homeX = 208;
$homeY = 125;
$homeRadius = 15;

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

//Auf 15 Minuten Takt Synchronisieren

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

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

//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/dber/std.gif";
$remoteImage = "http://www.wetteronline.de/daten/radar/dber/$year/$month/$day/$time.gif";
//$localImage = IPS_GetKernelDir()."\\radar.gif";
$localImage = "C:/Programme/IP-Symcon_V2/IP-Symcon/Icons/Radarbild/radar_1.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);

//Designer update

//IMGP_SendEvent("radar_1.gif");


//Radarbild auswerten

$im = ImageCreateFromGIF ($localImage);

//Strken

$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 Staerken 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 >= 50) {
	$id_status = 19518; //Statusvariable
	//$id_visible = 3456; //Variable für Designer
	$status = getvalue($id_status);
	if ($status == 3) {
		//setvalue($id_visible, false);
	   // include(IPS_GetScriptFile("Doorbell")); // DingDong-Sound
		WAC_PlayFile(46056 /* ObjektID MediaPlayer */, "C:/Programme/IP-Symcon_V2/IP-Symcon/sounds/regenradar.wav");
		WAC_SetVolume(46056, 100);
		WAC_Play(46056 /*[regenradar.wav]*/);
		}
}

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

//gibt die Pixelanzahl aus
SetValueInteger ("Regenpixel" , $regenmenge);

?>

Hallo wesseli,

also so funktioniert das Script bei mir nicht. Da sollte man zum Beispiel fuer die Pfadangaben anders rangehen:


$localImage = "C:/Programme/IP-Symcon_V2/IP-Symcon/Icons/Radarbild/radar_1.gif"; 

ersetzen durch


$root = str_replace( '\\','/',IPS_GetKernelDir() );
$localImage = $root . "Icons/Radarbild/radar_1.gif"; 

In Deinen WAC Befehlen sind ueberall absolute IDs drin, die sollte man vorher als Variablen definieren am Anfang, um die schoen aenderbar zu halten. Sonst sucht man sich den Wolf nach Fehlern.

Hallo Torro,

Danke für die sachlichen Hinweise. Habe wieder etwas dazugelernt :).

Probiere es gleich aus.

Viele Gruesse
wesseli

hm , hab da mal paar Fragen:
1.) das einzige was bei mir angezeigt wird im Fenster von Webfront ist eine „0“ (siehe Pic) also Kein Regen.
2.) Der dazugehörige String „Kein Regen im Anmarsch“ erscheint leider nicht, obwohl er ausgewertet wird (Pic Objektbaum).
3.) Sobald jedoch der Regen über 50 ist, bekomm ich folgende Fehlermeldung:
Warning: Variable #19518 existiert nicht in [Unwetterzentrale] on line 132
4.) Kann man denn das Radar.gif au iregndwie dazu bringen daß es in dem Fenster von Webfront gleich mit angezeigt wird?

Wo liegt da der Hund begraben??

Hier das Script:

Wo liegt da der Hund begraben??

Warning: Variable #19518 existiert nicht in [Unwetterzentrale] on line 132

> anlegen

4.) Kann man denn das Radar.gif au iregndwie dazu bringen daß es in dem Fenster von Webfront gleich mit angezeigt wird?

> ja, sind jedoch tiefgreifende Kenntnisse notwendig

Die Variable #19518 (oder jede x-beliebige) wird man ab dem nächsten Update im WebFront anzeigen können (konfigurierbar).

MST

Ok, danke, dacht ich mir daß ich die dann anlegen muß, hab au rumgewurschtelt, aber denke aufgrund meiner noch sehr dürftigen Kenntnisse über php versteh ich das script noch nicht so ganz und weiß nicht auf was sich die Variable bezieht und als welchen Typ ich die anlegen muß.

Was 2.) angeht…wieso wird der String im ausgabefenster nicht geschrieben?

… schönes Script, klappt gut …

Mir ist nur nicht klar wie ich das Image „radar.gif“ im Designer regelmäßig update.
Ich hab zwar das ganze Forum durchsucht finde aber für V2 die Alternative zu
IMGP_SendEvent(„radar_1.gif“);
nicht … kann mir da jemand auf die Sprünge helfen ?

Gruß, Michael

Das ist nicht notwendig, wenn das Bild im media-Ordner liegt. Falls nicht hilft ein IPS_SendMediaEvent.

Danke, genial !

Gruß, Michael

Hallo,

ich habe versucht dieses Skript bei mir zum Laufen zu bringen und habe dafür die Pfadnamen angepasst. Ich vermute jedoch, das noch einige Vorarbeiten zu machen sind bevor das Skript funktioniert?

Könnte mir bitte jemand Schritt für Schritt erklären was alles notwendig ist?
Woher kommt z.B. das radar_1.gif?
Müssen Funktionen oder Variablen noch eingefügt werden?
Wie passe ich das Skript auf meinen Wohnort an?

Ich bin für jede Hilfe dankbar!

Mhm, Script reinkopieren und los geht’s ;). Nee Spass, das Script scheint etwas komisch zu sein.

Wird vom Script angelegt

$localImage = "C:/Programme/IP-Symcon_V2/IP-Symcon/Icons/Radarbild/radar_1.gif";

Du musst die Variablen anlegen, die im Script mit SetValue… angesprochen werden. Da müssten aber eigentlich IDs drinstehen, wenn es ein V2-Script ist :o.

$remoteImage = "http://www.wetteronline.de/daten/radar/dber/$year/$month/$day/$time.gif";

ist das Quellbild.

Der Teil /dber/ stellt den Pfad zum regionalen Bild dar. Am besten öffnest du die Seite, die du haben möchtest im Browser und schaust dir die URL des Bildes an.

Wie passe ich das Skript auf meinen Wohnort an?

Es müssen die Koordinaten angepaßt werden. Dazu wird das Radar-Bild über die
Zwischenablage in z.B. „Paint“ kopiert und die X-Y- Koordinaten (mit dem Mauszeiger)
über dem Heimatort ablesen und in das Skript ($homeX, $homeY) übernehmen (Oben-Links ist 0,0).

MST

Ah, vielen Dank! Es lichtet sich langsam… :slight_smile:

Also die Region habe ich erfolgreich angepasst und 2 Variablen „Regenpixel“ und „WE_Unwetter“ angelegt.
Das Skript lädt auch das korrekte Bild runter.

Aber ich erhalte stets die Fehlermeldung:

Fatal error: Call to undefined function ImageCreateFromGIF() in [_Wetterdaten\Unwetterzentrale] on line 73

73 $im = ImageCreateFromGIF ($localImage);

Was kann das sein?

Was kann das sein?

@Steiner

Danke!

Leider funktioniert der Download Link nicht mehr und es scheint im Internet veschiedene Versionen der „php_gd2.dll“ zu geben…

Muß ich für v2 evtl. sowieso eine neuere „php_gd2.dll“ nehmen???

Diese funktioniert.

php_gd2.zip (386 KB)

Danke, jetzt funktioniert es!

Ist das bei Euch genauso, daß das Radarbild immer von ca. 30 min vor der aktuellen Zeit ist, obwohl auf dem Server schon aktuellere Bilder liegen?

Ja der Versatz ist so gewollt.
Dieser Wert kann hier geändert werden:


$minute=Floor(date("i") / 15) * 15 - 30; 

… man muss mit den Zeiten ein bisschen „spielen“ - bei mir aktuell:

$minute = Floor(date(„i“) / 15) * 15 -15;

MST