Tageswetterprognose abrufen

dito, ich frag alle 30 min. ab und hatte noch keine Probleme.

Lukky:
Mit der Fehlermeldung kann ich nix anfangen. Bei mir geht die URL.
möglicherweise Firewall?

Gruß

Hi Jürgen,

ich frage Google alle 30 Minuten ab. Ich werde es mal mit 60 Minuten probieren. Aus o.a. Grund tendiere ich nund jedoch eher dazu den Yahoo-Dienst zu nehmen.

BG Johannes

BG

Hallo,

ich habe mir überlegt es wäre doch schön im WebFront zur „Prognose-Variable“ ein Icon anzeigen zu lassen. z.B. bei „Vereinzelt Regen“ das Icon:chance_of_rain.gif

Ich habe dieses Icon im \webfront\user\icons\fixed\-Ordner und im \webfront\user\icons\-Ordner liegen.

Warum kann ich diese Icons in den Profilen nicht auswählen.
Liegt es an der Größe oder an der Farbe?

Gruß
Christian

OK,
jetzt hab´s ich geschnallt.

Es müssen .png´s sein.

Weiß jemand ob man in php die .gif´s in .png´s umwandeln kann?

Gruß
Christian

Hallo Christian,

kann man, hier die ganzen Funktionen.

PHP: imagecreate - Manual

Danke Rainer,

aber leider kann ich das nicht umsetzen.
Ich bin auf dieses gestoßen: imagecreatefrompng

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
		$content = imagecreatefrompng  ( $content );
		file_put_contents( $localImage, $content );
		

      $i++;
   }

Aber leider mit einer Fehlermeldung:

Warning:  imagecreatefrompng(GIF89a() [function.imagecreatefrompng]: failed to open stream: No such file or directory in C:\Programme\IP-SYMCON_2.2\scripts\57093.ips.php on line 52

Das ist mir php-technisch noch ein wenig zu hoch:o
Hat jeman einen Codeschnipsel für mich?

Gruß
Christian

Hast Du die Datei „php_gd2.dll“ im ext-Ordner.
So weit ich weiss, muss sie für Grafikfunktionen vorhanden sein.

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?