Ich habe eine Wetterstation von der ich die Daten über Wunderground mit diesem folgenden bekannten Script hole. Es funktioniert sehr gut, sofern Wunderground Online ist.
Das Script stammt von dem Bekannten Beitrag unter viewtopic.php?f=18&t=17209&start=690
Code: Alles auswählen
!Wetterdaten_Wunderground_holen
!Stand 13.04.2019 http://homematic-forum.de/forum/viewtopic.php?f=31&t=17209
!zuerst folgende Systemvariablen anlegen
!Achtung: keine vergessen und exakte Schreibweise mit Drag&Drop
!W_Station Zeichenkette
!W_Aktualisierung Zeichenkette
!W_Temperatur Zahl °C
!W_Luftfeuchtigkeit Zahl %
!W_Windgeschwindigkeit Zahl km/h
!W_Windboeen Zahl km/h
!W_Regen_d Zahl l
!W_Regen_h Zahl l
!W_Luftdruck Zahl hPa
!W_Ort Zeichenkette
!W_Windrichtung Zahl °
var url = "https://api.weather.com/v2/pws/observations/current?stationId=DEINE_STATION&format=xml&units=m&apiKey=DEIN_API_KEY";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string wetter_xml = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
string word = "temp";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Temperatur").State(zahl);
string word = "obsTimeLocal";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("W_Aktualisierung").State(daten);
string word = "windGust";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Windboeen").State(zahl);
string word = "windSpeed";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Windgeschwindigkeit").State(zahl);
string word = "precipRate";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Regen_h").State(zahl);
string word = "precipTotal";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Regen_d").State(zahl);
string word = "stationID";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("W_Station").State(daten);
string word = "humidity";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("W_Luftfeuchtigkeit").State(daten);
string word = "pressure";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("W_Luftdruck").State(daten);
string word = "neighborhood";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
string latin = daten.ToLatin();
dom.GetObject("W_Ort").State(latin);
string word = "winddir";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("W_Windrichtung").State(daten);
Wenn man mit der Davis Wetterstation auch die Meteobridge in Betrieb hat, kann man im internen Netz die Daten direkt holen, ohne über extern Wunderground zu gehen.
Der Aufruf lautet: "http://ip-of-meteobridge/cgi-bin/livedataxml.cgi"
Als Resultat bekommt man dann die Daten wie folgt angezeigt:
<logger>
<THB date="20121227224318" id="thb0" temp="26.0" hum="37" dew="10.2" press="1008.8" seapress="1010.1" fc="2"/>
<TH date="20130104141909" id="th0" temp="9.1" hum="95" dew="8.3"/>
<RAIN date="20130104141856" id="rain0" rate="0.0" total="3.0" delta="0.0"/>
<WIND date="20130104141916" id="wind0" dir="109" gust="0.9" wind="2.2" chill="9.1"/>
</logger>
Siehe auch hier: https://www.meteobridge.com/wiki/index. ... ervices/de
Ich wollte nun fragen, da ich dem Programmieren einfach nicht genug kundig bin, ob jemand das obige Script ändern könnten auf das neue Datenset? Ich wäre wirklich sehr dankbar.
Der Vorteil liegt auf der Hand, man kann so nur im Intranet die eigenen Wetterdaten holen und verwerten und dies beinahe in "Realtime".
Ich weiss, dass es sehr mutig ist, solch eine Bitte zustellen. Wie auch immer, herzlichen Dank im voraus.