Tageswetterprognose abrufen

probier das mal.

@ Rainer, diese ist mittlerweile standartmässig drinnen.

<?php

// Die GIF-Datei laden
$gif = imagecreatefromgif('./php.gif');

// Die Datei im PNG-Format speichern
imagepng($gif, './php.png');

// Den Speicher freigeben
imagedestroy($gif);

// Wir sind fertig
echo 'Die Gif-Datei wurde erfolgreich nach PNG konvertiert!';
?>

Hier noch mal mit Pfadangaben für IPS

// Die GIF-Datei laden
$gif = imagecreatefromgif(IPS_GetKernelDir()."webfront/user/Test/LZ_x_x_0.gif");

// Die Datei im PNG-Format speichern
imagepng($gif, IPS_GetKernelDir()."webfront/user/Test/LZ_x_x_0.png");

// Den Speicher freigeben
imagedestroy($gif);

// Wir sind fertig
echo 'Die Gif-Datei wurde erfolgreich nach PNG konvertiert!';

Danke Rainer,

leider habe ich einen Fehler:

Warning:  imagepng() [function.imagepng]: Unable to open 'C:\Programme\IP-SYMCON_2.2\webfront/user/fixed/LZ_x_x_0.png' for writing: No such file or directory in C:\Programme\IP-SYMCON_2.2\scripts\57093.ips.php on line 56
foreach($api->weather->forecast_conditions as $weather)
    {
      $wetter[$i]['wochentag'] = $weather->day_of_week->attributes()->data;
      $wetter[$i]['zustand'] = $weather->condition->attributes()->data;
      $wetter[$i]['tiefsttemperatur'] = $weather->low->attributes()->data;
      $wetter[$i]['hoechsttemperatur'] = $weather->high->attributes()->data;
      $wetter[$i]['icon'] = str_replace($icons_google, $icons_src, $weather->icon->attributes()->data);
      
      $remoteImage = $icons_google.$wetter[$i]['icon'];
		$localImage = IPS_GetKernelDir()."\\webfront\\user\\icons\\fixed\\".leer((string)$wetter[$i]['zustand']).".gif";
		//Downloaden
		$content = @file_get_contents($remoteImage);
		if((strpos($http_response_header[0], "200") === false))
 		{return;}
		//Speichern
		file_put_contents( $localImage, $content );
		// Die GIF-Datei laden
		$gif = imagecreatefromgif(IPS_GetKernelDir()."\\webfront\\user\\icons\\fixed\\".leer((string)$wetter[$i]['zustand']).".gif");
		// Die Datei im PNG-Format speichern
		imagepng($gif, IPS_GetKernelDir()."webfront\\user\\fixed\\".leer((string)$wetter[$i]['zustand']).".png");    //Zeile 56
		// Den Speicher freigeben
		imagedestroy($gif);

      $i++;
   }

Ich weiss ja nicht was Du vor hast, aber das was Du da machst geht so gar nicht.

Ich denke deine Gifs liegen in einem Ordner, diese brauchst doch nur umwandeln. :confused:

Danke Rainer,

der Fehler war wohl im Pfad.
Ich lade mir die Icons von Google runter. Wenn ich alle habe kann ich mir das runterladen wieder sparen. Warscheinlich gibt es eine einfachere Lösung.:o

Hier noch meine Skript-Version.
Einzige Änderung:
Pfadangabe, Icons laden

<?
// Hier den Ort angeben
$plz         =    "83379";
$land        =    "Germany";
$icons_src   =    "/";
$sprache     =    "de";
$ort         =    "Weibhausen";
$pfad        =    43112 /*[Wetter\Vorhersage]*/;            // Position im Baum ACHTUNG: alle Var in dieser Kat werden gelöscht

$icons_google = "http://www.google.de";

if($ort != "")
    {
       $station = $ort;
   }
else
   {
        $station = $plz."-".$land;
   }

$api = simplexml_load_string(utf8_encode(@Sys_GetURLContent("http://www.google.com/ig/api?weather=".$station."&hl=".$sprache)));

//print_r($api);

$wetter = array();

// Aktuelles Wetter
$wetter[0]['zustand'] = $api->weather->current_conditions->condition->attributes()->data;
$wetter[0]['temperatur'] = $api->weather->current_conditions->temp_c->attributes()->data;
$wetter[0]['luftfeuchtigkeit'] = $api->weather->current_conditions->humidity->attributes()->data;
$wetter[0]['wind'] = $api->weather->current_conditions->wind_condition->attributes()->data;
$wetter[0]['icon'] = str_replace($icons_google, $icons_src, $api->weather->current_conditions->icon->attributes()->data);


// Wettervorhersage heute, morgen, in zwei und in drei Tagen ($wetter[1] bis $wetter[4])
$i = 1;
foreach($api->weather->forecast_conditions as $weather)
    {
      $wetter[$i]['wochentag'] = $weather->day_of_week->attributes()->data;
      $wetter[$i]['zustand'] = $weather->condition->attributes()->data;
      $wetter[$i]['tiefsttemperatur'] = $weather->low->attributes()->data;
      $wetter[$i]['hoechsttemperatur'] = $weather->high->attributes()->data;
      $wetter[$i]['icon'] = str_replace($icons_google, $icons_src, $weather->icon->attributes()->data);
      
      $remoteImage = $icons_google.$wetter[$i]['icon'];
      //echo $remoteImage."
";
		$localImage = IPS_GetKernelDir()."\\webfront\\user\\icons\\fixed\\".leer((string)$wetter[$i]['zustand']).".gif";
		//Downloaden
		$content = @file_get_contents($remoteImage);
		if((strpos($http_response_header[0], "200") === false))
 		{return;}
		//Speichern
		file_put_contents( $localImage, $content );
		// Die GIF-Datei laden
		$gif = imagecreatefromgif(IPS_GetKernelDir()."\\webfront\\user\\icons\\fixed\\".leer((string)$wetter[$i]['zustand']).".gif");
		// Die Datei im PNG-Format speichern
		imagepng($gif, IPS_GetKernelDir()."\\webfront\\user\\icons\\fixed\\".leer((string)$wetter[$i]['zustand']).".png");
		// Den Speicher freigeben
		imagedestroy($gif);

      $i++;
   }


// Variablen im Pfad löschen

$Vars = IPS_GetChildrenIDs($pfad);

foreach($Vars as $ID)
    {
      $arr = IPS_GetObject($ID);
        if ($arr['ObjectType'] == 2)
            {
              IPS_DeleteVariable( $ID ) ;
            }

   }




//Variablen anlegen
//Festlegen wohin die Variable soll

$ID = CreateVariableByName($IPS_SELF, "Heute", 3, "Heute");
SetValueString($ID,umlaute((string)$wetter[1]['zustand']) );
IPS_SetPosition($ID,1);
IPS_SetParent($ID, $pfad);
IPS_SetVariableProfileIcon("Heute",  leer((string)$wetter[1]['zustand']));

$ID = CreateVariableByName($IPS_SELF, "Heute - min -", 2, "~Temperature");
SetValueFloat($ID,(float)$wetter[1]['tiefsttemperatur']);
IPS_SetPosition($ID,2);
IPS_SetParent($ID, $pfad);

$ID = CreateVariableByName($IPS_SELF, "Heute - max -", 2, "~Temperature");
SetValueFloat($ID,(float)$wetter[1]['hoechsttemperatur']);
IPS_SetPosition($ID,3);
IPS_SetParent($ID, $pfad);

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[2]['wochentag'], 3, "Morgen");
SetValueString($ID,umlaute((string)$wetter[2]['zustand']));
IPS_SetPosition($ID,4);
IPS_SetParent($ID, $pfad);
IPS_SetVariableProfileIcon("Morgen",  leer((string)$wetter[2]['zustand']));

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[2]['wochentag']." - min -", 2, "~Temperature");
SetValueFloat($ID,(float)$wetter[2]['tiefsttemperatur']);
IPS_SetPosition($ID,5);
IPS_SetParent($ID, $pfad);

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[2]['wochentag']." - max -", 2, "~Temperature");
SetValueFloat($ID,(float)$wetter[2]['hoechsttemperatur']);
IPS_SetPosition($ID,6);
IPS_SetParent($ID, $pfad);

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[3]['wochentag'], 3, "Uebermorgen");
SetValueString($ID,umlaute((string)$wetter[3]['zustand']));
IPS_SetPosition($ID,7);
IPS_SetParent($ID, $pfad);
IPS_SetVariableProfileIcon("Uebermorgen",  leer((string)$wetter[3]['zustand']));

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[3]['wochentag']." - min -", 2, "~Temperature");
SetValueFloat($ID,(float)$wetter[3]['tiefsttemperatur']);
IPS_SetPosition($ID,8);
IPS_SetParent($ID, $pfad);

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[3]['wochentag']." - max -", 2, "~Temperature");
SetValueFloat($ID,(float)$wetter[3]['hoechsttemperatur']);
IPS_SetPosition($ID,9);
IPS_SetParent($ID, $pfad);

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[4]['wochentag'], 3, "Ueberuebermorgen");
SetValueString($ID,umlaute((string)$wetter[4]['zustand']));
IPS_SetPosition($ID,10);
IPS_SetParent($ID, $pfad);
IPS_SetVariableProfileIcon("Ueberuebermorgen",  leer((string)$wetter[4]['zustand']));

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[4]['wochentag']." - min -", 2, "~Temperature");
SetValueFloat($ID,(float)$wetter[4]['tiefsttemperatur']);
IPS_SetPosition($ID,11);
IPS_SetParent($ID, $pfad);

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[4]['wochentag']." - max -", 2, "~Temperature");
SetValueFloat($ID,(float)$wetter[4]['hoechsttemperatur']);
IPS_SetPosition($ID,12);
IPS_SetParent($ID, $pfad);

// Die nächsten Zeilen brauche ich nicht, da ich die Werte aus meiner Wetterstation hole
//preg_match_all("|(\d+){2,}|",$wetter[0]['luftfeuchtigkeit'],$hudimity);

//SetValueInteger(CreateVariableByName($IPS_SELF, "Luftfeuchtigkeit", 1, "~Humidity"),(integer)$hudimity[0][0]);
//SetValueString(CreateVariableByName($IPS_SELF, "Wind", 3, ""),substr((string)$wetter[0]['wind'], 6));


function umlaute( $text )

    {
   $suchen = array("ö","ü");
    $ersetzen = array("ö","ü");
   $text = str_replace($suchen, $ersetzen, $text);

    return $text;
    }
    

function leer( $text ) 			// ich kann keine Sonderzeichen und Leerstellen bei den Icons brauchen

    {
   $suchen = array("ö","ü"," ");
    $ersetzen = array("oe","ue","_");
   $text = str_replace($suchen, $ersetzen, $text);

    return $text;
    }


function CreateVariableByName($id, $name, $type, $profile = "")
   {
       global $IPS_SELF;
       $vid = @IPS_GetVariableIDByName($name, $id);
       if($vid === false)
       {
           $vid = IPS_CreateVariable($type);
           IPS_SetParent($vid, $id);
           IPS_SetName($vid, $name);
           IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
           if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
			 
       }
       return $vid;
    }
//print_r ($wetter);
?>

Gruß
Christian

PS: Danke für die Hilfe und die Vorarbeit.:smiley:

Hallo Christian,

ich habe in meinem Beitrag eine .zip Datei. In dieser sind alle Icon’s mit drinn. Als .png in der Größe 32x32.
Icons

Ansonsten gibt es 22 verschiedene Wetterzustände und die entsprechenden Dateien sind:

chance_of_rain.gif
sunny.gif
mostly_sunny.gif
partly_cloudy.gif
mostly_cloudy.gif
chance_of_storm.gif
showers.gif
rain.gif
chance_of_snow.gif
cloudy.gif
mist.gif
storm.gif
thunderstorm.gif
chance_of_tstorm.gif
sleet.gif
snow.gif
icy.gif
dust.gif
fog.gif
smoke.gif
haze.gif
flurries.gif

Gruß

Vielen Dank,

warum einfach wenn es umständlich auch geht.:rolleyes:

Gruß
Christian

Hallo Attain,
ich habe dein Script aus Post 15 bei mir eingefügt.
Ich bin Schritt für Schritt nach deiner Anleitung vorgegangen.
Leider kriege ich das Script nicht zum laufen bzw. bekomme ich nachfolgende Fehlermeldung.

04.03.2011 21:25:24.625 | 58439 | DEBUG   | ExecuteThreadID #8   | Skriptausführung: 58439.ips.php ~ Absender: RegisterVariable
04.03.2011 21:25:24.796 | 58439 | DEBUG   | ExecuteThreadID #8   | Ausgeführt, Resultat: 1, Erfolgreich: True, Zeit: 168 ms
04.03.2011 21:25:24.796 | 58439 | MESSAGE | RegisterVariable     | <br />
<b>Notice</b>:  Use of undefined constant IPS_SENDER - assumed 'IPS_SENDER' in <b>D:\IP-Symcon\scripts\58439.ips.php</b> on line <b>48</b><br /> 

Was mache ich falsch?

Hallo,

ups, da muß mir doch beim kopieren ein Fehler unterlaufen sein. Diese Zeile ist falsch:


IF (IPS_SENDER == "RegisterVariable")

Richtig muß es heißen:


IF ($IPS_SENDER == "RegisterVariable")

Ich habe es im Script geändert.

Gruß

Hallo Attain,
Danke das wars.
Eine Frage hätte ich da aber noch.
Die Variablen werden als Integer angelegt könnte man die auch als Float anlegen lassen?
Denn dafür gibts ja schon hauseigene Profile für z.B. Temperatur.

Hallo,
ich habe mir die Integer Profile angelegt.
Jetzt klappt es wunderbar.
Nochmals Danke für die Super Arbeit.

Das Script wird zwar fehlerlos ausgeführt, aber die Anzeige bleibt ziemlioch bescheiden. Was ist da falsch?

Deine Variablen befinden sich alle unterhalb des Skripts. Da werden sie nicht angezeigt.

Erstelle dir eine Dummy-Instanz, verlinke die bereits erstellten Variablen dorthin.

Ich hab auch die Probleme, dass im Webfront nur die erste Variable gezeigt wird :frowning:
Skript ist von Clipper_I
Jemand ne Idee?

Wenn ich das richtig sehe haben die Variablen die bei Dir nicht angezeigt werden kein Variablenprofil zugeordnet.

Mach einmal eine Doppelklick auf eine Variable die nicht angezeigt wird und zeig mir den Screenshot nachdem Du einmal auf „Weiter“ geklickt hast.

Sollte hier nichts stehen such dir ein passendes Profil aus dem Dropdown „Eigenes Profil“ aus. Sollte kein passendes vorhanden sein mußt Du dir selber eines bauen.

@ wgreipl:
Genau das war es; wusste nicht, dass variablen immer ein Profil brauchen!
Danke für die schnelle Antwort!

Nur dann wenn diese im Webfront sichtbar sein sollen.

WebFront: IP-Symcon :: Automatisierungssoftware

Zu finden unter „Haussteuerung => Anzeigen von Variablen“.

Hallo,

hat denn jemand schon ein Skript erstellt, mit dem man die Wetterdaten von DWD in Variablen schreibt?
Die „aktuellen“ Werte von Google sind ja teilweise schon mehrere Stunden alt:mad:

Gruß,
Andreas

DWD scheint ja keine Daten nach Ort zur Verfügung zu stellen.:frowning:

Ich parse jetzt die Daten von WetterOnline. Sie werden einmal stündlich aktualisiert und da die Wetterstation in der Nähe ist, sind die Werte bei mir im Gegensatz zu GoogleWeather ziemlich genau. Den UV Index gibt es da auch.
Also werde ich die Oregon WMRS200 zurück gehen lassen, und falls es irgendwann einen Homematic Regensensor geben wird diesen noch integrieren um den genauen Regenbeginn zu erkennen.:rolleyes:

Grüße, Andreas

doch, aber nicht für „exotische“ Orte :smiley:

und mit relativ wenig Informationen

TT : Lufttemperatur in Grad Celsius
Tmin : Minimum der Lufttemperatur, 06 UTC Vortag bis 06 UTC heute, Grad Celsius
Tmax : Maximum der Lufttemperatur, 06 UTC Vortag bis 06 UTC heute, Grad Celsius
RR1 : Niederschlagsmenge, einstündig, mm = l/qm
RR24 : Niederschlagsmenge, 24stündig, 06 UTC Vortag bis 06 UTC heute, mm = l/qm
SSS : Gesamtschneehöhe in cm
DD : Windrichtung
FF : Windgeschwindigkeit letztes 10-Minutenmittel in km/h
FX : höchste Windspitze im Bezugszeitraum in km/h

Alternativ könntest du dir auch AccuWeather ansehen, z.B. Kronach wäre verfügbar. Da gibt es ein XML für die Nutzung im Firefox. Die Datenmenge ist „extrem“ groß.

doch, aber nicht für „exotische“ Orte

Danke für die Info, da lebe ich wohl zu ländlich. Die nächste Station ist 50km entfernt. :rolleyes:

Accuweather.com habe ich mir mal angeschaut, da ist auch Coburg gelistet (8km entfernt). Kann man irgendwo nachsehen, wo deren Wetterstation dafür steht?

Gruß,
Andreas