Unwetterzentrale Revolutions

Wetteronline hat die Auflösung verbessert. Beim Verkleinern mit IPS sieht’s ein bisschen schrottig aus.
Ich lasse die Bilder jetzt per Skript verkleinern, irgendeine Funktion „resize“ aus dem Netz.

Anbei noch der Vollständigkeit halber die Funktion:


resize (IPS_GetKernelDir()."\\media\\radar.gif", 241, 305, IPS_GetKernelDir()."\\media\\radar2.gif");

function resize($img, $w, $h, $newfilename) {

 //Check if GD extension is loaded
 if (!extension_loaded('gd') && !extension_loaded('gd2')) {
  trigger_error("GD is not loaded", E_USER_WARNING);
  return false;
 }

 //Get Image size info
 $imgInfo = getimagesize($img);
 switch ($imgInfo[2]) {
  case 1: $im = imagecreatefromgif($img); break;
  case 2: $im = imagecreatefromjpeg($img);  break;
  case 3: $im = imagecreatefrompng($img); break;
  default:  trigger_error('Unsupported filetype!', E_USER_WARNING);  break;
 }

 //If image dimension is smaller, do not resize
 if ($imgInfo[0] <= $w && $imgInfo[1] <= $h) {
  $nHeight = $imgInfo[1];
  $nWidth = $imgInfo[0];
 }else{
                //yeah, resize it, but keep it proportional
  if ($w/$imgInfo[0] > $h/$imgInfo[1]) {
   $nWidth = $w;
   $nHeight = $imgInfo[1]*($w/$imgInfo[0]);
  }else{
   $nWidth = $imgInfo[0]*($h/$imgInfo[1]);
   $nHeight = $h;
  }
 }
 $nWidth = round($nWidth);
 $nHeight = round($nHeight);

 $newImg = imagecreatetruecolor($nWidth, $nHeight);

 /* Check if this image is PNG or GIF, then set if Transparent*/
 if(($imgInfo[2] == 1) OR ($imgInfo[2]==3)){
  imagealphablending($newImg, false);
  imagesavealpha($newImg,true);
  $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
  imagefilledrectangle($newImg, 0, 0, $nWidth, $nHeight, $transparent);
 }
 imagecopyresampled($newImg, $im, 0, 0, 0, 0, $nWidth, $nHeight, $imgInfo[0], $imgInfo[1]);

 //Generate the file, and rename it to $newfilename
 switch ($imgInfo[2]) {
  case 1: imagegif($newImg,$newfilename); break;
  case 2: imagejpeg($newImg,$newfilename);  break;
  case 3: imagepng($newImg,$newfilename); break;
  default:  trigger_error('Failed resize image!', E_USER_WARNING);  break;
 }

   return $newfilename;
}

Danke. :loveips:

Hallo,

läuft das Skript noch ? Ich bekomme keine Variable angelegt wo die Regendaten drin stehen.

-> Habe meine Fehler gefunden.

Gruß Uwe

Hat sich zufällig jemand schon mal die Mühe gemacht, das Skript für die Schweiz (MeteoSchweiz - Radarbild) anzupassen?

Wenn nicht, werde ich zur Tat schreiten. Habe aber wenig mit HTML am Hut, und deswegen könnte es dauern…

Angepasst nicht, aber das Bild scheint immer den gleichen Namen zu haben. Damit sind eigentlich keine HTML Kenntnisse notwendig ;).

Es müsste eigentlich reichen, beim $remote_image den Pfad fest einzutragen.

Danke Ralf. Du hast natürlich recht. Inzwischen habe ich an etwas raffinierterem gedacht. Any opinion?

Hi all,

wetteronline hat heute das Regenradarbild leicht angepasst. In dem Zusammenhang wurden auch die Farben für die Niederschlag-Intensität minimal angepasst. Die Folge ist, dass das Script von Seite 1 ins Leere greift.

Wenn die Farben wie folgt angepasst werden, sollte es wieder funktionieren (noch nicht getestet, mangels Regen)


	//Stärken
	$regen[6] = imagecolorresolve  ($im, 250,2,250);
	$regen[5] = imagecolorresolve  ($im, 156,50,156);
	$regen[4] = imagecolorresolve  ($im,  28,126,220);
	$regen[3] = imagecolorresolve  ($im,  44,170,252);
	$regen[2] = imagecolorresolve  ($im,  84,210,252);
	$regen[1] = imagecolorresolve  ($im, 172,254,252);

nicht zu fassen, schon ist ein Radar-Echo da! und es funktioniert!
wer das eine Pixel findet, darf es mit nach Hause nehmen :smiley:

Vielen Dank !!!

Das wäre mir bestimmt so schnell nicht aufgefallen.

Und es FUNKTIONIERT !

Gruss
B71

ich unterstelle den Jungs fast Hinterlist und Böswilligkeit wegen unserer Scripte. Die haben die Farbwerte größtenteils nur um 2 Zähler bei einem von 3 Farbkanälen angepasst…sowas sieht kein Mensch :mad:

kann ich mir nicht vorstellen, hab daher mal kurz nachgefragt.
es wurden die Farbtabellen der Produkte vereinheitlicht, vielleicht kommen deswegen minimal andere Farbwerte raus. Absicht war das keine. :slight_smile:

Hey cool, danke für die Info.
ich teste gerade eine Logik, die die Radarecho-Farben selbst ermittelt (mit einer gewissen Fehlertoleranz gegenüber erneuten Formatänderungen durch wetteronline.de) und bei Fehler Warnungen ins Bild schreibt. Dann merkt man es schneller

Hi,

hat schon mal jemand über einen Umstieg von WetterOnline.de auf NiederschlagsRadar.de - Aktuelles NiederschlagsRadar Deutschland - RegenRadar Deutschland - Wetter nachgedacht?

Dort liegen die Radarbilder alle 5 Minuten vor und es gibt sogar eine 5 Minuten Prognose über die nächsten 2 Stunden!

Man könnte also eine Regenwarnung in die Zukunft bauen…

Gruss
Coyote

Frage 1: ja

und es gibt sogar eine 5 Minuten Prognose über die nächsten 2 Stunden!

gibts sogar für die nächsten xx Tage. Wetteronline hat ebenfalls eine Prognose für die kommenden 2h

Auf Grund der Änderung der Regegradar-Grafik habe ich mir eine Logik gebastelt, die a) die Radarecho-Farben selbst aus dem Radarbild ermittelt und b) etwas fehlertoleranter gegenüber zukünftigen Änderungen ist (vielleicht :-D).

Arbeitsweise
es wird der Farbwert für jede Intensitäts-Kategrorie der Legende in der rechten oberen Ecke des Pictures ausgelesen. Dazu wird im Script ein Startwert für die erste Zelle (aktuell 325px), ein Offset (20px) für alle weiteren Zellen sowie die Anzahl der Intensitätsgrade (6) angegeben (siehe Bild).
Die Auswertelogik liest dann einen 15px breiten und 1px hohen Bereich aus jeder Legendenzelle aus und vergleicht die Farbwerte jedes Pixels (vgl. Bild1 -> rote Rahmen in der Legende). Ergeben sich unterschiedliche Farbwerte (z.B. durch Lageänderung der Legende) pro Legenden-Zelle, wird ein Fehler ausgeworfen (der auch in das Ausgabe-Picture eingeblendet wird -> Bild 3).

Implementierung
diesen Code (Script der ersten Seite)


//Stärken 
$regen[6] = imagecolorresolve  ($im, 250,2,250); 
$regen[5] = imagecolorresolve  ($im, 156,50,156); 
$regen[4] = imagecolorresolve  ($im,  28,126,220); 
$regen[3] = imagecolorresolve  ($im,  44,170,252); 
$regen[2] = imagecolorresolve  ($im,  84,210,252); 
$regen[1] = imagecolorresolve  ($im, 172,254,252);  

ersetzen durch


	// Legendenfarben auswerten (und Farbwerte ermitteln)
           // IPS Foren-Thread/Post (Erläuterungen): http://www.ip-symcon.de/forum/f53/unwetterzentrale-revolutions-10663/index6.html#post166249
	// Definitionen für Legendenauswertung
	$legend_y            = 8;        // Zeile für Legendenauswertung
	$legend_x				= 325;      // Startpunkt für erste Legendenfarbe
	$Cell_width          = 15;       // Breite der Auswertung für jede Legendenfarbe (nur ein Teil der gesamten Zelle!)
	$CellDelta_x			= 20;       // Offset x-Pixel bist zum Startpunkt der nächsten Zelle
	$LegendCells        	= 6;        // Anzahl Legendenfarben

	// Legendenauswertung
	$color_error         = array();
   for($lc=0; $lc<$LegendCells; $lc++)    										// Schleife für Legendenzellen ($lc == Legend-Cell(Nr))
   {
		if($lc!=0) $legend_x = $legend_x + $Cell_width + $CellDelta_x;    // Zellen-Startpunkt ab 2. Durchlauf setzen

		//Ermittlung Legendenfarbe für 1 Zelle
	   for($x=$legend_x; $x<=$legend_x + $Cell_width; $x++)              // Schleife für einzelne Legendenzelle
	   {
	   	if($x==$legend_x)	$regen[$lc+1] = imagecolorat($im, $x, $legend_y);
	   	if($x!=$legend_x)
	   	{
	   	   if($regen[$lc+1] != imagecolorat($im, $x, $legend_y))
	   	   {
	   	      // Fehlermeldung
	   	      echo "Regenradar-Script #".$_IPS['SELF'].": Fehler in Farberkennung!
";
	   	      $color_error[$lc]      = "Farbfehler";
	   	   }
	   	}
	   	// Debug
		   //echo "LegendCell: $lc, x: $x, pixColor: ".$regen[$lc+1]."
";
	   }
	   // Debug
	   //echo "LegendCell: $lc, pixColor: ".$regen[$lc+1]."
";
   }

um Fehlermeldungen auch im Radarbild auszugeben (Bild 3), muss dieser Code


	// Fehlermeldung Legendenauswertung in Pic einblenden
	for($i=0;$i<count($color_error);$i++)
	{
	   if(isset($color_error[$i]))
	   {
	      imagestring ( $im, 20,100, 225, 'Fehler in Farberkennung Legende!', $rot );
	   }

	}

unmittelbar nach Zeile 119 (imagesetpixel($im, $homeX, $homeY, $rot);)eingefügt werden

Verdammt. Und gerade jetzt ist kein Regen da um die Funktion zu testen :smiley:

Danke für die Erweiterung.

Wenn das immer solche „Auswirkungen“ hat sollten wir besser öfter was ändern :smiley:

Bauen wir halt unser eigenes Netz mit Blackjack und äh Hausautomatisierung!

Ich möchte die Frage von KADORF nochmal auf greifen.
Da das aktuelle Radarbild mit mehr als 6 Minuten Verzögerung zur Verfügung steht müsste die Abfrage immer 7 Minuten später stattfinden. Allerdings verstehe ich Paresys Script leider nicht. Kann mir jemand kurz erklären warum

   IPS_SetScriptTimer($IPS_SELF, 3600);
}

//Auf 15 Minuten Takt Synchronisieren
$offset = (integer)date("s") + ((integer)date("i") % 15) * 60;
if($offset != 0) {
   IPS_SetScriptTimer($IPS_SELF,900 - $offset);
} else {
   IPS_SetScriptTimer($IPS_SELF,900);
}

//Zeit berechnen
$minute=floor(date("i") / 15) * 15;
$dateline=mktime(date("H"), $minute, 0, date("m"), date("d"), date("y"));


das so gemacht wurde und wo dann die +7 Minuten hin müßten?

if($offset != 0) {
   IPS_SetScriptTimer($IPS_SELF,(900 - $offset)+420);
} else {
   IPS_SetScriptTimer($IPS_SELF,900);
}

Sollte glaube reichen.