Wetterdaten - Wunderground API

Und immer schön im Rhythmus bleiben :smiley:

Ja,ja ich merke dass auch daran. Aber die Göttergattin braucht einen Beweis.

tschewie

Hmm, demzufolge ist heute wahrscheinlich 3-facher Vollmond.

Wunderground liefert ja das Alter des Mondes, sollte doch so möglich sein, dies zu berechnen. Ich nehme diese Daten im Moment immer noch von einer anderen Seite.

Aber so geht es doch auch

Die Zeit in Tagen, die seit dem letzten Neumond vergangen ist, wird allgemein als das Mondalter bezeichnet. Bei Vollmond ist das Mondalter 15 Tage. Bei der Osterrechnung spielt das Alter des Mondes am letzten Tag des Vorjahres eine Rolle und heißt Epakte.

  • -s.u.- -

Hallo zusammen,
hier meine Version mit Ausgabe in HTML Textbox und XML basiert.

Code:


<?php
$api = "234123412341234"; // key erhält man nach Registrierung bei http://www.wunderground.com/weather/api/

$zmw="00000.23.10818";
/* ZMW kann man ermitteln mit dem Längengrad und Breitengrad, nachdem man sich einen API-Key besorgt hat*
http://api.wunderground.com/api/.... API-KEY..../geolookup/q/48.03688878166352,8.930683135986328.json
*/


// Create own variables for
$cur_temp_var = false;
$cur_cludy_icon = true;

/* Daten von der eigenen Wetterstation in Aktuell einbeziehen
   Falls nicht vorhanden einfach auf 0 setzen */
$cur_temp = 27750 /*[Objekte\Oregon Wettersensoren\Temperatur aussen\Temperatur]*/;
$cur_hum  = 22319 /*[Objekte\Oregon Wettersensoren\Temperatur aussen\Luftfeuchtigkeit]*/;
$cur_wind = 37765 /*[Objekte\Oregon Wettersensoren\Windsensor\Windgeschwindigkeit Durchschnitt]*/;
$cur_rain = 52877 /*[Objekte\Oregon Wettersensoren\Regensensor\Regenmenge letzte Stunde]*/;

// ----------------------------
$tag[0] = "Sonntag";
$tag[1] = "Montag";
$tag[2] = "Dienstag";
$tag[3] = "Mittwoch";
$tag[4] = "Donnerstag";
$tag[5] = "Freitag";
$tag[6] = "Samstag";

//aktuelles Wetter
	$xmlWetter = file_get_contents("http://api.wunderground.com/api/$api/forecast/q/zmw:$zmw.xml");
	$xmlWetterNow = file_get_contents("http://api.wunderground.com/api/$api/conditions/q/zmw:$zmw.xml");
	
	$xml = simplexml_load_string($xmlWetter);
	$xmlNow = simplexml_load_string($xmlWetterNow);
	$x = 0;
	$html = "<table >
			    <tr>";
	// Aktuell
	if($cur_temp != 0){
	   $temp_now = getvalue($cur_temp);
	} else {
	   $temp_now = $xmlNow->current_observation->temp_c;
	}
	
	if($cur_hum != 0){
	   $hum_now = GetValueFormatted($cur_hum);
	} else {
	   $hum_now = $xmlNow->current_observation->relative_humidity;
	}
	
	if($cur_wind != 0){
	   $wind_now = GetValueFormatted($cur_wind);
	} else {
	   $wind_now = $xmlNow->current_observation->wind_kph."km/h";
	}
	
	if($cur_rain != 0){
	   $rain_now = GetValueFormatted($cur_rain);
	} else {
	   $rain_now = ($xmlNow->current_observation->precip_1hr_metric * 10 ).' mm';
	}
	if($cur_cludy_icon){
		SetValue(CreateVariableByName($IPS_SELF, "Weather_Icon", 3, ""), strval($xmlNow->current_observation->icon_url));
	}
	$html.= '<td align="center" valign="top"  style="width:110px;padding-left:20px;">
					Aktuell<br>
					<img src="'.$xmlNow->current_observation->icon_url.'" style="float:left;">
					<div style="float:right">
					'.$temp_now.'°C<br>
					'.$hum_now.'<br>
					</div>
					<div style="clear:both; font-size: 10px;">Ø Wind: '.$wind_now.'<br>
					Regen 1h: '.$rain_now.'
					</div>
				</td>';
	// Vorhersage
	foreach($xml->forecast->simpleforecast->forecastdays->forecastday as $name=> $day){
		if( isToday($day->date->epoch)){
			$Wochentag = "Heute";
		} else {
			$Wochentag =$tag[date("w",intval($day->date->epoch))];
		}
		$html.= '<td align="center" valign="top"  style="width:110px;padding-left:20px;">
						'.$Wochentag.'<br>
						<img src="'.$day->icon_url.'" style="float:left;">
						<div style="float:right">
						'.$day->low->celsius.'°C<br>
						'.$day->high->celsius.'°C
						</div>
						<div style="clear:both; font-size: 10px;">Ø Wind: '.$day->avewind->kph.' km/h<br>
						Niederschlag: '.($day->qpf_allday->mm).' mm
						</div>
					</td>';
	}
	$html .= "</tr>
				</table>";
   SetValue(CreateVariableByName($IPS_SELF, "Wetter", 3, "~HTMLBox"), $html);
  	if($cur_temp_var){
	  	$cur_temp = floatval($xmlNow->current_observation->temp_c);
		SetValue(CreateVariableByName($IPS_SELF, "Aktuelle Temperatur", 2, "~Temperature"),$cur_temp );
	}

function CreateVariableByName($id, $name, $type, $profile = "")
{
	# type: 0=boolean, 1 = integer, 2 = float, 3 = string;
    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;
}

function isToday($time)
{
  $begin = mktime(0, 0, 0);
  $end = mktime(23, 59, 59);
  // check if given time is between begin and end
  if($time >= $begin && $time <= $end)
  {
    return true;
  } else {
    return false;
  }
}

Hi,
Hinein kopiert und läuft - Danke schön.

Wenn ich das nun ins Webfront konfiguriere zeigt es mit das Ausführensymbol des Scripts an.
Setze ich das Script auf „versteckt“ so wird die darunter liegende Wetter String auch nicht mehr angezeigt.
Wie bekomme ich das Symbol für das Script aus Webfront heraus?

Also ich lege mir meine Skripte und Objekte(Instanzen) immer in einen versteckten Ordner.
Das Webfront konfiguriere ich dann per Links.
Da ist man wesentlich flexibler und kann Informationen auch an unterschiedlichen Stellen anzeigen.

Leg einfach im Webfront einen Link auf die Variable.

Ich habe einen versteckten Ordner angelegt und darin ein Link auf den String der Wetter API.
Dann habe ich im Webfront eine Kategorie angelegt und als Startkategorie den versteckten Ordner angegeben.
Jetzt erscheint im Webfront nichts… :confused:

Was hat der String für ein Variablenprofil?

Das Variablenprofil ist
~HTMLBox

Du machst irgendwas falsch.

  1. Leg das Script erstmal irgendwo ab - das kann in einen Versteckten Ordner. 1 x ausführen.
  2. Geh einfach in eine vorhandene Kategroie im Webfront (Diese natürlich nicht versteckt!), dort einen Link zur Wetter Variable anlegen.

Hier ein Screenshot:
hardcopy.jpg

evtl. gibts eine Möglichhkeit, den Projekt-Transfer zu vereinfachen. Bei Lust und Laune könnt Ihr ja das hier mal probieren:

das sollte möglichen Trouble auf der Zielsystem-Seite verringern :wink:

Bitte jetzt nicht noch komplizierter machen als es ist. Es ist ein einfaches Skript das eine variable anlegt.

Jetzt funktioniert es.
Anscheinend darf der Ordner auf dessen Inhalt der Link zeigt nicht versteckt sein.
Ist ja auch nicht nötig.

Vielen, vielen Dank !!!

Hallo Leute,

arbeite gerade an meinem Front-End für meine HomeAutomation.
Ich bin wirklich sehr stark an der Wetter-API interessiert!
Leider klappt das noch nicht so wirklich… :frowning:

Habe mit den xampp geholt, auf diesem läuft auch schon einiges über php.
Habe also das Script von Stele99 in eine TXT reinkopiert es in .php geändert & anschließend über
http://localhost/weather.php“ aufgerufen.

Es erscheint jedoch nur:
„Fatal error: Call to undefined function SetValue() in C:\xampp\htdocs\weather.php on line 64“

Kann mir jemand sagen was ich falsch mache?

Mfg, Christof

Moin…

… sorry die Frage aber benutzt Du IP-Symcon?

Gruß,
Peter

hihi, das php im xampp kennt kein „setValue“

Hallo,

zur Zeit noch nicht.
… so weit bin ich noch nicht.

aha… Sollte php nicht überall die gleichen fundtionen haben?
PHP (als Standard) wird doch lediglich in xampp eingebunden oder nicht?

Habe ich evtl. vergessen I-welche Services zu starten??

Mfg Christof

Hallo,
in ip symcon gibt es ein paar zusätzliche funktionen dazu gehört auch setvalue.

mach mal anstatt setvalue einfach ein echo
nat ohne id und klammern.

Oh…

habe es ersetzt. Jetzt stolpert er über „IPS_SELF“.
Beim näheren hinschauen fällt auch auf, dass recht häufig „IPS_…“ auftaucht.

… Also müsste ich den halbe Code umschrieben!?:o

Mfg, Christof