Tageswetterprognose abrufen

Hallo an alle!

Ich habe begonnen mit IPS meine Heizung / Lüftung / Solaranlage / Pufferspeicher etc. zu optimieren. Mit den Scripten an sich komme ich schon recht gut klar. Zum Thema Web-Programmierung HTML etc. habe ich leider keine Erfahrung.

Zur Optimierung der einzelnen Komponenten wäre es von großem Vorteil, wenn ich einmal täglich z.B. morgens um 04:00 Uhr die tagesaktuellen Wetterprognosen für meine PLZ z.B. mit folgenden Daten abrufen könnte:

Temperatur: morgens, mittags, abends nachts
Sonnenerwartung: vormittag, nachmittag, Anzahl Sonnenstunden
Regenwahrscheinlichkeit, Niederschlagsmenge, Windgeschwindigkeit

Hat jemand ein Script oder ein Plan, wie ich dies realisieren könnte. Es genügt im ersten Schritt der aktuelle Tag.

Wäre für Hilfe sehr dankbar!

Liebe Grüße
Fridolin

Was willst Du denn mit den Daten machen. Nur zum Visualisieren oder auch verarbeiten.
Zum verarbeiten mit direktem Einfluss auf deine Scripts, empfiehlt sich eine eigene Wetterstation, da Du die aktuellen Daten vorOrt hast.

Ansonsten kann man eine Wetterseite auslesen und die Daten entsprechend verarbeiten, dabei sollte man das Copyright des Seitenbetreiber beachten.

Möglichkeiten hier, GoogleWetter, DWD usw… dieses sind aber alles Werte von der nächsten Meßstation welche erheblich von deinen vorOrt gemessenen abweichen können.

Hallo Rainer,

aktuelle Messdaten habe ich schon.

Ich brauche eher eine Prognose. Beispiel: Ich habe eine Luftheizung, die auch zur Kühlung durch kalte Außenluftzufuhr verwendet werden kann. Wenn ich z.B. morgens um 04:00 Uhr ableiten kann, dass es nachmittags 25 Grad warm wird, kann ich das Haus durch die morgenfrische Luft z.B. auf 20 Grad abkühlen, gleichzeitig kann ich mit Sonnenwärme für die Solaranlage rechnen, so dass der Pufferspeicher auch unter die üblichen Grenzwerte gefahren werden kann.

Ich bin auch gerne bereit, für ein Script, welches die Wetterprognose in Variablen liefert, zu bezahlen.

Viele Grüße
Frido

dafür braucht man nichts zahlen. Sieh dir mal das Googlewetter an. Da hast Du min, max Werte für 4 Tage, allerdings nur Temperatur.

Scriptteile gibt es hier z.B. http://www.ip-symcon.de/forum/f56/eigene-wetterseite-10114/
die ganzen Werte kann man natürlich auch in Variablen schreiben.

Hier mal ein Beispiel.

<?

function website_wetter($plz, $land, $icons_src="/", $sprache="de", $ort="")
{
    $icons_google = "/ig/images/weather/";

    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;
   

    // 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;

        $i++;
    }
    return $wetter;
}
// Ort oder PLZ eintragen
$wetter = website_wetter("Nidda", "Germany");

//Variablen anlegen und IDs anpassen
SetValue(12345, $wetter[0]['temperatur']); // Float
SetValue(23456, $wetter[1]['tiefsttemperatur']); // Float
SetValue(34567, $wetter[1]['hoechsttemperatur']); // Float
SetValue(67890, $wetter[0]['luftfeuchtigkeit']); // Integer
SetValue(65847, $wetter[0]['wind']); // String
?>

Hallo Rainer!

Vielen herzlichen Dank für das Script.

Ich bekomme allerdings noch die folgenden Warnungen und die Daten kommen in den Variablen nicht an. Ich habe die Variablen im IPS entsprechend mit Float, Integer und String definiert.

48 SetValue(16418 /[8.Heizung/Klima\Wetter_Lufttemperatur]/, $wetter[0][‚temperatur‘]); // Float

Warning: Could not convert variant of type (Null) into type (Double) in C:\IP-Symcon\scripts\51065.ips.php on line 48

Hast Du eine Idee woran das liegen könnte.

Herzlichen Dank und viele Grüße
Frido

Hallo Rainer!

Sorry, ich habs entdeckt. Habe noch die Vorgabe zur Formatkonvertierung (float) eingefügt. Jetzt funktioniert es.

Beispielzeile:

SetValue(16418 /[8.Heizung/Klima\Wetter_Lufttemperatur]/, (float)$wetter[0][‚temperatur‘]); // Float

Nochmals herzlichen Dank! ich bin begeistert von Deiner Lösung.

Viele Grüße
Frido

Hallo RWN und RitterFridolin,

bin mir nicht sicher ob der Luftfeuchtewert stimmt…
Habe an das Script folgende Zeile angehangen und es kommt ein anderer Wert als in der Variablen

echo $wetter[0]['luftfeuchtigkeit']

Ergebniss = „Feuchtigkeit: 48Â %“

in der Variablen ist bei mir „0“ ich hoffe das ich einen Fehler mache…

Gruß aus dem 48% feuchten Dtmd

dann ändere es um auf string. Die Variable auch. Wenn Du nur den Wert haben willst, musst den Rest halt rausschneiden. Ich habe es nicht ausprobiert, sondern einfach zusammen geschrieben.

(string)$wetter[0]['luftfeuchtigkeit'])

Danke,

eine neue Variable als String definiert und den Wert hinein geschrieben > geht …danke…

schönes WE
Detlef

Hallo,

habe hier das Ganze als Script

<?
// Hier den Ort angeben
$plz 			=	"97828";
$land       =	"Germany";
$icons_src	=	"/";
$sprache		=	"de";
$ort			=	"Marktheidenfeld";

$icons_google = "/ig/images/weather/";

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;


// 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;

      $i++;
   }
//print_r($wetter);

//print_r (IPS_GetVariableProfileList());

//Variablen anlegen
SetValueString(CreateVariableByName($IPS_SELF, "Heute", 3, ""),umlaute((string)$wetter[1]['zustand']));
SetValueFloat(CreateVariableByName($IPS_SELF, "Heute - min -", 2, "~Temperature"),(float)$wetter[1]['tiefsttemperatur']);
SetValueFloat(CreateVariableByName($IPS_SELF, "Heute - max -", 2, "~Temperature"),(float)$wetter[1]['hoechsttemperatur']);

SetValueString(CreateVariableByName($IPS_SELF, "Morgen", 3, ""),umlaute((string)$wetter[2]['zustand']));
SetValueFloat(CreateVariableByName($IPS_SELF, "Morgen - min -", 2, "~Temperature"),(float)$wetter[2]['tiefsttemperatur']);
SetValueFloat(CreateVariableByName($IPS_SELF, "Morgen - max -", 2, "~Temperature"),(float)$wetter[2]['hoechsttemperatur']);

SetValueString(CreateVariableByName($IPS_SELF, "Übermorgen", 3, ""),umlaute((string)$wetter[3]['zustand']));
SetValueFloat(CreateVariableByName($IPS_SELF, "Übermorgen - min -", 2, "~Temperature"),(float)$wetter[3]['tiefsttemperatur']);
SetValueFloat(CreateVariableByName($IPS_SELF, "Übermorgen - max -", 2, "~Temperature"),(float)$wetter[3]['hoechsttemperatur']);

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 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;
    }


?>

Jürgen

Hallo,

habe den Script umgeschrieben.

Es werden jetzt für die vier Tage Forecast Variablen angelegt und richtig sortiert, damit die Anzeige im Webfront / ifront passt.

<?
// Hier den Ort angeben
$plz 			=	"97828";
$land       =	"Germany";
$icons_src	=	"/";
$sprache		=	"de";
$ort			=	"Marktheidenfeld";

$icons_google = "/ig/images/weather/";

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;


// 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;

      $i++;
   }
//print_r($wetter);



// Variablen im Pfad .Wettervorhersage löschen

$Vars = IPS_GetVariableList();

foreach($Vars as $ID)
	{	
   	 if (strpos( IPS_Getlocation( $ID ), ".Wettervorhersage" ) > 0)
			{
			  IPS_DeleteVariable( $ID ) ;
			}

   }


//Variablen anlegen


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

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

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

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

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

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

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

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

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

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

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

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


// 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 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;
    }


?>

Jürgen

Hallo Clipper_I.

Super Skript. Als PHP-Dummi verzeihe mir bitte die dumme Frage.
Bei deinem Skript werden die Variablen unter der der Instanz (Skript) angelegt.
mit IPS_SetPosition die Reihenfolge festgelegt, aber wie lege ich die Position fest, dass die Variablen nicht unter der Instanz (Skript) angelegt werden - sondern in der Kategorie :confused:.

Danke.

Lukky

Hallo Lukky,
zb. so

$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];

Hallo Lucky,

hier meine Variante mit Pfadanpassung.

<?
// Hier den Ort angeben
$plz 			=	"97828";
$land       =	"Germany";
$icons_src	=	"/";
$sprache		=	"de";
$ort			=	"Marktheidenfeld";

$icons_google = "/ig/images/weather/";

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;


// 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;

      $i++;
   }


// Variablen im Pfad .Wettervorhersage löschen

$Vars = IPS_GetVariableList();

foreach($Vars as $ID)
	{	
   	 if (strpos( IPS_Getlocation( $ID ), "Wettervorhersage" ) > 0)
			{
			  IPS_DeleteVariable( $ID ) ;
			}

   }


//Variablen anlegen
//Festlegen wohin die Variable soll



$ID = CreateVariableByName($IPS_SELF, "Heute", 3, "");
SetValueString($ID,umlaute((string)$wetter[1]['zustand']) );
IPS_SetPosition($ID,1);
IPS_SetParent($ID, 43450 /*[Wetter\Wettervorhersage]*/);

$ID = CreateVariableByName($IPS_SELF, "Heute - min -", 2, "~Temperature");
SetValueFloat($ID,(float)$wetter[1]['tiefsttemperatur']);
IPS_SetPosition($ID,2);
IPS_SetParent($ID, 43450 /*[Wetter\Wettervorhersage]*/);

$ID = CreateVariableByName($IPS_SELF, "Heute - max -", 2, "~Temperature");
SetValueFloat($ID,(float)$wetter[1]['hoechsttemperatur']);
IPS_SetPosition($ID,3);
IPS_SetParent($ID, 43450 /*[Wetter\Wettervorhersage]*/);

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[2]['wochentag'], 3, "");
SetValueString($ID,umlaute((string)$wetter[2]['zustand']));
IPS_SetPosition($ID,4);
IPS_SetParent($ID, 43450 /*[Wetter\Wettervorhersage]*/);

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

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

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[3]['wochentag'], 3, "");
SetValueString($ID,umlaute((string)$wetter[3]['zustand']));
IPS_SetPosition($ID,7);
IPS_SetParent($ID, 43450 /*[Wetter\Wettervorhersage]*/);

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

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

$ID = CreateVariableByName($IPS_SELF, (string)$wetter[4]['wochentag'], 3, "");
SetValueString($ID,umlaute((string)$wetter[4]['zustand']));
IPS_SetPosition($ID,10);
IPS_SetParent($ID, 43450 /*[Wetter\Wettervorhersage]*/);

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

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

// 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 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;
    }


?>

Hab dir meinen Objektbaum als Datei angehängt.

Jürgen

Hier mal meine Version des Wetterscripts:

<?
/*##########  Anleitung  ######################

1. WWW Reader anlegen. ALs URL folgendes eingeben: http://www.google.com/ig/api?weather=XXXXX&hl=de
Wobei die "XXXX" durch Deinen Ort ersetzt werden muß. "&hl=de" nicht vergessen, da sonst die Temperaturen in °F übermittelt werden.
Timer aktivieren, reicht eigentlich alle 1800s = 30 min , da auch die Daten von google nur alle 30min aktualisiert werden.

2. Register Variable anlegen
Als "übergeordnete Instanz" den WWWReader angeben.
Als Zielscript dieses hier auswählen.

3. In IPS noch 5 Ordner(für die 5 VorhersageTage) anlegen und die ID's im Script anpassen. 
Wenn Du die Version 2.1 oder höher einsetzt, kannst Du auch "Dummy Instanzen" nehmen.
Damit können die Werte auch einfach im Webfront angezeigt werden.
Die entsprechenden Variablen, die dann die Werte beinhalten, werden dann automatisch angelegt.

4. Einbinden der Grafiken
4.1. Dashboard

- Im Mediaordner findest Du 5 .gif Bilder (WetterAktuell.gif , WetterTag0.gif -WetterTag4.gif)
- Die brauchst du im Dashboard nur einfügen
- Fertig

4.2. Webfront
Das ist etwas schwieriger, da die Icon's von goggle 40x40 Punkte groß sind. Webfront verlangt aber 32x32 Punkte. Deswegen folgendes:

- die Logos auf Größe anpassen und ins Verzeichnis "IPS_GetKernelDir().\webfront\img\icons\png" kopieren. (Die Logos sind in der Zip Datei)
- ab der Version 2.2 in den Ordner: IPS_GetKernelDir().\webfront\user\icons\fixed
- den Stringvariablen "Aussichten" ein Profil mit dem Namen "Bild1" bis "Bild4" verpassen (siehe Grafik)
- das Script wie angehängt anpassen:
- in dem Script wird nun den Variablenprofilen "Bild0 - Bild4" jeweils das entsprechende logo zugeordnet. 
- Im Webfront werden diese aber leider nur aktualisiert wenn Du "F5" drückst.
*/
##########  Anleitung Ende      ###############

##########  Konfigurationsmenu: ###############   
// Konfiguration: das Array "$ordner" enthält die ID's der Dummy Instanzen/Ordner für den aktuellen Status die 4 Vorhersagetage.
// Wie in Punkt 3 angelegt.
$ordner = array (21419,17522,28569,55362,34642);  //ID's der übergeordneten Kategorien

// debug auf "true" setzen wenn es Probleme gibt. Es werden einige Daten dann ins Logfile geschrieben
$debug = false;

// ID des in Punkt 1 angelegeten WWW Reader
$ID_WWWReader = 23456;
########## Konfiguration Ende #################

IF ($IPS_SENDER == "RegisterVariable")  // wenn Daten von der RegisterVariable/WWWReader kommen
{

	// Google überträgt den Tagesname abgekürzt ("Mo.") , Ich wollte es aber ausgeschrieben, sieht besser aus^^
	// deswegen hier die zuordnung
	$Wochentage = array ("Mo."=>"Montag","Di."=>"Dienstag","Mi."=>"Mittwoch","Do."=>"Donnerstag","Fr."=>"Freitag","Sa."=>"Samstag","So."=>"Sonntag");

	// Zähler nullen
	$i = 0 ;

	// wenn testmodus "true" den empfangenen Datenstring in das Log schreiben
	if($debug) IPS_LogMessage( "Google Wetter",$IPS_VALUE );

	// die "Simple XML " Function die hier zum auslesen benutzt wird versteht keine Umlaute (äöü) deswegen muß der String
	// utf8 encodiert werden
	$xml = utf8_encode($IPS_VALUE);

	// den Datenstring in ein XML Array einlesen
	$xml = new SimpleXMLElement($xml);

	########## Einlesen des aktuellen Wetterstatuses ########
	// da der Anfang immer der selbe ist lese ich den in die Variable "$value" ein
	// damit werden die nachfolgenden Anweisungen kürzer und übersichtlicher
	$value = $xml->weather->current_conditions;

	// zum testen
	if ($debug) print_r ($value);

	// SetValueByParentID(Variablenname:String , Wert:hier Integer , ID des übergeordneten Orners:Integer)
	// Temperatur abspeichern
	SetValueByParentID("Temperatur", (int)$value->temp_c['data'],$ordner[$i]);

	// Feuchtigkeit
	SetValueByParentID("Feuchtigkeit", (int) substr($value->humidity['data'],14,2),$ordner[$i]);

	// Condition (Klar , Bewölkt, Regen......)
	// utf8 decode , damit die Umlaute wieder erscheinen
	SetValueByParentID("Condition", utf8_decode($value->condition['data']),$ordner[$i]);
	
	// von wann ist die Information?? auslesen aus der XML
	$Time = $xml->weather->forecast_information->current_date_time['data'];

	// den Timestamp aus dem String herausfinden
	$Timestamp = strtotime($Time);

	// als Zeichenkette Abspeichern
	$Time = date("d.m.y H:i",$Timestamp);

	// für Testzwecke
	if ($debug) IPS_LogMessage( "Google Wetter",date("d.m.y H:i",$Timestamp)); //

	SetValueByParentID("Stand vom:", "$Time" ,$ordner[$i]);

	// google hat auch immer ein Logo für die einzelnen Wetterbedingungen
	// der Pfad dazu steht im Wert"icon['data'] , es muß nur noch  "http://www.google.com" davor gesetzt werden
	$img_akt = "http://www.google.com".$value->icon['data'];  // url des Logos

	// das Bild aus dem I-net in den Media Ordner kopieren
	copy  ($img_akt, IPS_GetKernelDir()."\\media\\WetterAktuell.gif");

	//Logoname ermitteln
	$img_name = explode("/",$value->icon['data']); 

	// Logoname als StandartIcon im Profil Bild0 auswählen
	IPS_SetVariableProfileIcon("Bild$i",substr($img_name[4],0,-4));
	
	########## Einlesen der 4 Vorhersage Tage #########
	//Schleife für alle VorhersageWerte
	foreach (($xml->weather->forecast_conditions) as $value){
		if ($debug) print_r ($value);
		$i++;   // jeweils 1 hochzählen
		$img= "http://www.google.com".$value->icon['data'];  // url des Logos
		copy  ($img, IPS_GetKernelDir()."\\media\\WetterTag$i.gif");
		// Logos für das Webfront auswählen
		$img_name = explode("/",$value->icon['data']);
		IPS_SetVariableProfileIcon("Bild$i",substr($img_name[4],0,-4));
		if ($debug) IPS_LogMessage( "Google Wetter", "Bild$i ".substr($img_name[4],0,-4) );
		SetValueByParentID("Temperatur Max",(int)$value->high['data'],$ordner[$i]);
		SetValueByParentID("Temperatur Min",(int)$value->low['data'],$ordner[$i]);
		SetValueByParentID("Aussichten",utf8_decode($value->condition['data']),$ordner[$i]);

		// hier wird die zuordnung der Wochentage gemacht
		$Tag = $Wochentage["".$value->day_of_week['data']]; // Wochentag ausschreiben
		IPS_SetName($ordner[$i], $Tag);      // Umbenennen der Dummy Instanz/ des Ordners mit dem entsprechenden Wochentag
	}
}
else
{
	// neue Daten von google anfordern
	WWWReader_UpdatePage($ID_WWWReader);
}
	
//function zum Automatischen anlegen von Variablen und abspeichern der Werte	
function SetValueByParentID($Variable,$Wert,$ParentID){
   $id = @IPS_GetVariableIDByName($Variable,$ParentID);
   if($id == 0) {                         // wenn Variable fehlt: anlegen
       if     (is_bool($Wert))   $typ = 0;      // je nach typ des Wertes , die richtige Variable anlegen
       elseif (is_int($Wert))    $typ = 1;
       elseif (is_float($Wert))  $typ = 2;
       elseif (is_string($Wert)) $typ = 3;
      $id = IPS_CreateVariable($typ);       // Variable erstellen
      IPS_SetParent($id,$ParentID);         // dem entsprechenden Ordner einsortieren
      IPS_SetName($id,$Variable);           // den Variablennamen schreiben
      IPS_SetInfo($id, "Diese Variable wurde Automatisch erstellt");  // noch was sinvolles in den Infobereich schreiben
      }
   SetValue($id,$Wert);                   // Wert abspeichern
}
?> 

Gruß

GoogleApi.zip (55.2 KB)

Egal wo die Original-Variablen liegen würde ich sie auch belassen.

Sollte Du die Anzeige in einer anderen Kategorie wünschen würde ich persönlich es mit Links machen und die Originalen unberührt lassen.

Hallo Clipper_l, Hallo Attain

danke für die Rückantwort.

> Clipper_l

habe dein Skript etwas geändert und in mein Webfront eingebaut.
Funktioniert prima.

> Hallo Attain

Leider bekomme ich beim WWW Reader eine Fehlermeldung mit der ich nichts anfangen kann :confused:

Die URL ist richtig ?

http://www.google.com/ig/api?weather=bayreuth&hl=de

Wenn ich die URL in den Browser eingebe, verlangt Google eine graphische Eingabe zur Mensch-Maschine-Abfrage.
Korrektur 23:09 Uhr mit einer neuen IP vom Provider funktioniert die manuelle Abfrage ohne graphische Eingabe - der Fehler im WWW-Reader bleibt

Lukky

Hallo wgreipl,

bei meinem Script ist es erforderlich die Variablen an einen anderen Pfad „verschieben“.

a) Die Variablen werden dynamisch in Abhängigkeit des Tagesnamens erzeugt.
Somit klappt die Version mit dem Link´s nicht.

b) Belässt man die Variablen am original Ort ( also unter dem Script ), werden
diese im Webfront nicht angezeigt.
Dazu habe ich eine Fehlermeldung aufgemacht.

Schönen Abend
Jürgen

Hi,

die Daten aus der Google-Api abgreifen geht ganz gut, aber bei mir nicht immer. Google erkennt wohl das automatisierte Abfragen und sperrt dann immer mal wieder meine IP.
Hier ist ein Beispiel, wie andere Daten z.B. von Yahoo oder wetter.com genutzt werden können:
Kostenlose Wetterdaten aus XML-APIs, Beispiel-Code für google.com und weather.com | www.keepaneye.de

BG Johannes

Hallo Jolo,

wie oft fragst du den Googleforecast ab?

Ich mache es stündlich, ist mir noch nicht aufgefallen dass ich gesperrt wurde.

Jürgen