Alternative zur eigenen Wetterstation

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

buempi
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz

Re: Alternative zur eigenen Wetterstation

Beitrag von buempi » 20.06.2011, 12:08

Hallo m.jansen

Das wäre durchaus möglich. Man könnte die Datei über File_Get_Contents() einlesen und dann mit den Funktionen StrPos() und SubStr() die gewünschten Werte "ausschneiden".

Auf das erste Problem dabei bin ich allerdings schon beim Einlesen gestossen! Holt man die Datei mit PHP, kommen bei mir englische Texte und Temperaturen in Fahrenheit! - Bei Anzeige im Internet-Explorer ist's deutsch und Celsius. Probier das mal bei dir mit einem Zeichen-Objekt "Anzeige" (20 Zeilen hoch, 100 Zeichen breit) und folgendem Skript:

Code: Alles auswählen

<?
$Anzeige = File_Get_Contents("http://www.google.com/ig/api?weather=Aachen");
?>
Aber willst du statt der spröden Textanzeige nicht viel lieber ein hübsches Gadget
WetterAachen.JPG
WetterAachen.JPG (20.96 KiB) 3480 mal betrachtet
mit dem MiniBrowser einblenden lassen? Solche Darstellungen gibt es im Internet in Hülle und Fülle, in praktisch jedem beliebigen Stil und Grösse bei Wetterdiensten, Radio- und TV-Stationen usw. usw...

Viele Grüsse
Bümpi

m.jansen
Beiträge: 219
Registriert: 16.03.2011, 16:30
Wohnort: Aachen

Re: Alternative zur eigenen Wetterstation

Beitrag von m.jansen » 20.06.2011, 12:50

Hallo buempi,

ja im Browser ist alles Deutsch :-(,naja schade.
Werde aber damit villeicht paar weitere Anbieter testen,mal sehen....
Ja das mit dem Browser hatte ich auch schon überflogen,aber ich habe bisher keinen
Gadget gefunden der zu meiner Ansicht passt,wenn es aber so gehen würde,könnte ich mir eigene Icons u.s.w anlegen.
Außerdem hätte man ja noch zusätzlich die Werte zu weiteren Verarbeitung da.
Hm Vielen Dank erstmal wieder für deine Mühe,mal sehen was ich damit noch anfangen kann....


Mfg.
m.jansen

m.jansen
Beiträge: 219
Registriert: 16.03.2011, 16:30
Wohnort: Aachen

Re: Alternative zur eigenen Wetterstation

Beitrag von m.jansen » 20.06.2011, 14:38

Hallo buempi,
ich glaube ich habs :-)

Schaumal bitte unter:
http://www.hackthenet.de/weblog/225/google-wetter-api
oder hier:
http://www.keepaneye.de/wetterdaten-aus ... verwenden/

Dort sollte es für dich (PHP Spezi) ales benötigte enthalten sein.
Leider kann ich noch kein PHP drum bitte um Hilfe bei zusammensätzen des Codes.

Da steht auch:
Da die Wetter-API von Google im Normalfall immer die Sprache im Output verwendet,
die der Browser im Header mitschickt, müssen wir der cURL-Anweisung natürlich den richtigen Header
auch wieder übergeben. Würden wir das nicht tuen, bekämen wir per Standard englischen Output.
Hier wird jedoch die bevorzugte Sprache des Browsers “kopiert”, so das der Spanier spanischen Output bekommt
Damit sollte es denke ich lösbar sein,Deutsch einzustellen :mrgreen:


Mfg.
m.jansen

m.jansen
Beiträge: 219
Registriert: 16.03.2011, 16:30
Wohnort: Aachen

Re: Alternative zur eigenen Wetterstation

Beitrag von m.jansen » 20.06.2011, 16:35

Also bümpi ich hab schon paar Stunden gesucht, gelesen und probiert,und da ist es :D
Bin halt ein Anfänger :(

Bild

So jetzt haben wir alles auf Deutsch !

wie bekomme ich die Daten jetzt in die Variablen wie Temperatur,Feuchte,Wind u.s.w und dann in den Homeputer?

Makro im Objekt Wetteranzeige:

Code: Alles auswählen

<?
$Wetteranzeige = File_Get_Contents("http://www.google.com/ig/api?weather=Aachen&hl=de");
?>
Zeilen:15
Zeichen:80



Mfg.
m.jansen

buempi
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz

Re: Alternative zur eigenen Wetterstation

Beitrag von buempi » 20.06.2011, 17:46

Hallo m.jansen

Ein "PHP-Spezi" bin ich keineswegs!!! - Ich weiss zwar, dass man in PHP XML-Dateien direkt auswerten kann; hab das aber noch nie gemacht. Deshalb hier ein Vorschlag mit ganz einfachen String-Funktionen!

Ich zeige dir das Vorgehen für die Tiefst- und die Höchsttemperatur von morgen: Du benötigst ein Objekt "Wetter" vom Typ Zeichen mit den Zahlen-Variablen "MorgenMini" und "MorgenMaxi". Da wird sukzessive vorne und hinten abgeschnitten, bis nur noch die gesuchen Werte übrig bleiben:

Code: Alles auswählen

Wetter := " "

<?
// Testen, ob Server erreichbar:
if ( ! fsockopen("google.com",80,$errno,$errstr,2)) $Wetter = "Google nicht erreichbar";
?>

wenn Wetter = "Google nicht erreichbar" dann
   Wetter := Zeit + " " + Wetter
   verlassen
endewenn

<?

$WetterString = "";

// Datei einlesen
$WetterString = File_Get_Contents("http://www.google.com/ig/api?weather=Aachen&hl=de");
// Testen, ob was im String drin steht:
if ($WetterString == "")
   {$Wetter = "keine Wetterdaten verfügbar";

   }else{

   // Erstes Vorkommen (heute) von «low data="» suchen:
   $Pos = strpos($WetterString,'low data="');
   // Alles, was davor steht sowie den Suchstring selbst (10 Zeichen) abschneiden:
   $WetterString = substr($WetterString,$Pos+10);
   // Zweites Vorkommen (morgen) von «low data="» suchen:
   $Pos = strpos($WetterString,'low data="');
   // Alles, was davor steht sowie den Suchstring selbst (10 Zeichen) abschneiden:
   $WetterString = substr($WetterString,$Pos+10);
   // Die Position des dahinterstehenden «"/>» suchen:
   $Pos = strpos($WetterString,'"/>');
   // Die Zahl dazwischen rausfiltern und in die Homeputer-Variable MorgenMini schreiben:
   $V_Wetter_MorgenMini = substr($WetterString,0,$Pos);

   // Position von «high data="» suchen:
   $Pos = strpos($WetterString,'high data="');
   // Alles, was davor steht sowie den Suchstring selbst (11 Zeichen) abschneiden:
   $WetterString = substr($WetterString,$Pos+11);
   // Die Position des dahinterstehenden «"/>» suchen:
   $Pos = strpos($WetterString,'"/>');
   // Die Zahl dazwischen rausfiltern und in die Homeputer-Variable MorgenMaxi schreiben:
   $V_Wetter_MorgenMaxi = substr($WetterString,0,$Pos);

   }

?>

Wetter := "Temperaturen morgen:<<Minimum:  "
Wetter := Wetter + MorgenMini + "°C<<Maximum: "
Wetter := Wetter + MorgenMaxi + "°C"
Schöne Textanzeigen lassen sich in Homeputer auf diese Art nicht realisieren, weil mit der Proportionalschrift eine saubere Ausrichtung nicht möglich ist.

Viele Grüsse
Bümpi

m.jansen
Beiträge: 219
Registriert: 16.03.2011, 16:30
Wohnort: Aachen

Re: Alternative zur eigenen Wetterstation

Beitrag von m.jansen » 20.06.2011, 18:49

Klase,das hilft mir sachon seeeeeeeeeehr :-)
Aber leider hab ich auch eine Enttäuschung zum Thema Einlesen der Datei.
Die ersten Tests waren Top,aber dann kamm nichts mehr rein.
Hab ich zu oft die Daten abgeholt?
Also hab ich geschaut ob im Objekt Wetterdaten die xml überhaupt eingelesen wird,leider nein.
Auch per Firefox kommt bei mir das:
Bild

Erst nach Eingabe des Codes per Hand konnte ich auf die xml zugreifen.
Und da sich der Code jedes mal ändert,ist das für den A.....
Hast du da noch eine Idee?

Nach wechsel der IP gehts erstmal wieder
Mfg.
m.jansen

buempi
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz

Re: Alternative zur eigenen Wetterstation

Beitrag von buempi » 20.06.2011, 19:05

m.jansen hat geschrieben:Hab ich zu oft die Daten abgeholt? [ ... ] Nach wechsel der IP gehts erstmal wieder
... es ist gut möglich, dass da eine Sperre gegen zu häufiges Abfragen drin ist. Besonders das Funktionieren mit der neuen IP deudet darauf hin. - Im praktischen Betrieb wird das ja keine Bedeutung haben, weil eine Abfrage im Stunden-Takt mehr als genügt!

Viele Grüsse
Bümpi

m.jansen
Beiträge: 219
Registriert: 16.03.2011, 16:30
Wohnort: Aachen

Re: Alternative zur eigenen Wetterstation

Beitrag von m.jansen » 20.06.2011, 19:11

ja da hast du Recht,bei jeder Stunde sollte es keine Probleme geben.
Sogar bei Tageswechsel sollte es reichen...
Diese Werte dann wie MorgenMini u.s.w die kann ich dann auch z.b. zum Schalten auswerten richtig?
Ok dann hab ich erstmal was für die nächsten Tage zum üben dank dir :D


Mfg.
m.jansen

m.jansen
Beiträge: 219
Registriert: 16.03.2011, 16:30
Wohnort: Aachen

Re: Alternative zur eigenen Wetterstation

Beitrag von m.jansen » 21.06.2011, 13:42

Hallo buempi,

habe soeben versucht (als Anfänger)das was du mir als Beispiel gezeigt hast nachzuvollziehen.
Der Anfang deines PHP ist klar als Sicherheit.
Doch das Filtern mit dem 10 Zeichen u.s.w. ist mir noch nicht so klar :(
Hier nochmal die XML:
<xml_api_reply version="1">

<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">

<forecast_information>
<city data="Aachen, North Rhine-Westphalia"/>
<postal_code data="Aachen"/>
<latitude_e6 data=""/>
<longitude_e6 data=""/>
<forecast_date data="2011-06-21"/>
<current_date_time data="2011-06-21 10:55:00 +0000"/>
<unit_system data="SI"/>
</forecast_information>

<current_conditions>
<condition data="Meistens bewölkt"/>
<temp_f data="66"/>
<temp_c data="19"/>
<humidity data="Feuchtigkeit: 73 %"/>
<icon data="/ig/images/weather/mostly_cloudy.gif"/>
<wind_condition data="Wind: SW mit 26 km/h"/>
</current_conditions>

<forecast_conditions>
<day_of_week data="Di."/>
<low data="14"/>
<high data="20"/>
<icon data="/ig/images/weather/chance_of_rain.gif"/>
<condition data="Vereinzelt Regen"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Mi."/>
<low data="11"/>
<high data="20"/>
<icon data="/ig/images/weather/chance_of_storm.gif"/>
<condition data="Vereinzelt stürmisch"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Do."/>
<low data="8"/>
<high data="17"/>
<icon data="/ig/images/weather/chance_of_storm.gif"/>
<condition data="Vereinzelt stürmisch"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Fr."/>
<low data="9"/>
<high data="14"/>
<icon data="/ig/images/weather/chance_of_rain.gif"/>
<condition data="Vereinzelt Regen"/>
</forecast_conditions>
</weather>
</xml_api_reply>
Rot sind ja die gesuchten Daten,was ich irgendwie nicht verstehe ist:
// Alles, was davor steht sowie den Suchstring selbst (10 Zeichen) abschneiden:
Bitte nicht schlagen, könntest du mir bitte das in der xml nochmal markieren,was du da genau entfernt hast(für blutige Anfänger)?
Möchte das gerne alles nachvollziehen (verstehen) können,damit ich mir die anderen Daten noch filtern kann.
Das wäre echt Klasse!

Mfg.
m.jansen

buempi
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz

Re: Alternative zur eigenen Wetterstation

Beitrag von buempi » 21.06.2011, 15:13

Hallo m.jansen

Es ist eigentlich ganz einfach: Die Funktion

Code: Alles auswählen

$Pos = strpos($WetterString,'low data="');
schreibt in die Variable «$Pos» beim wievielten Zeichen «low data="» anfängt. In der folgenden Zeile

Code: Alles auswählen

$WetterString = substr($WetterString,$Pos+10);
Wird der Sub-String ("Rest-Zeichenkette") ab der Position, die nach "$Pos plus 10 Zeichen" anfängt in den Wetter-String zurückgeschrieben.

Ich habe mal blau eingefärbt, was mit der ersten Funktion "gezählt" wird und grün, was nach der zweiten Funktion übrig bleibt. Das rote dazwischen ist der Suchstring (10 Zeichen), der auch entfernt wird:
<xml_api_reply version="1">

<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">

<forecast_information>
<city data="Aachen, North Rhine-Westphalia"/>
<postal_code data="Aachen"/>
<latitude_e6 data=""/>
<longitude_e6 data=""/>
<forecast_date data="2011-06-21"/>
<current_date_time data="2011-06-21 10:55:00 +0000"/>
<unit_system data="SI"/>
</forecast_information>

<current_conditions>
<condition data="Meistens bewölkt"/>
<temp_f data="66"/>
<temp_c data="19"/>
<humidity data="Feuchtigkeit: 73 %"/>
<icon data="/ig/images/weather/mostly_cloudy.gif"/>
<wind_condition data="Wind: SW mit 26 km/h"/>
</current_conditions>

<forecast_conditions>
<day_of_week data="Di."/>
<
low data="14"/><high data="20"/>
<icon data="/ig/images/weather/chance_of_rain.gif"/>
<condition data="Vereinzelt Regen"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Mi."/>
<low data="11"/>
<high data="20"/>
<icon data="/ig/images/weather/chance_of_storm.gif"/>
<condition data="Vereinzelt stürmisch"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Do."/>
<low data="8"/>
<high data="17"/>
<icon data="/ig/images/weather/chance_of_storm.gif"/>
<condition data="Vereinzelt stürmisch"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Fr."/>
<low data="9"/>
<high data="14"/>
<icon data="/ig/images/weather/chance_of_rain.gif"/>
<condition data="Vereinzelt Regen"/>
</forecast_conditions>
</weather>
</xml_api_reply>
Im zweiten Durchgang weiter unten (morgen/Mittwoch) wird dann noch das "/> hinter dem Temperaturwert gesucht und nur ab Position 0 bis zum Anfang dieses Suchstrings in die Variable MorgenMini geschrieben; im Beispiel also 11.

Das erste Zeichen bei diesen Funktionen ist übrigens jeweils 0, also

Code: Alles auswählen

$Pos = strpos("ABC","A")
gibt 0 zurück, weil A das nullte Zeichen im String ABC ist!

Die ganzen PHP-Funktionen sind übrigens hier sehr gut beschrieben!

Viele Grüsse
Bümpi

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“