Wetterdaten von Wunderground
Moderator: Co-Administratoren
-
- Beiträge: 6
- Registriert: 27.05.2019, 21:15
Wetterdaten von Wunderground
Ich habe eine eigene Wetterstation und habe diese bei Wunderground registriert. Dadurch habe ich die Möglichkeit einen API-Key zu bekommen und mir die Daten über "https://api.weather.com/v2/pws/observat ... =m&apiKey=..." zu laden. Wenn ich die URL über einen Browser abrufe bekomme ich die Daten wie folgt zurück:
{"observations":[{"stationID":"...","obsTimeUtc":"2019-05-27T19:35:33Z","obsTimeLocal":"2019-05-27 21:35:33","neighborhood":"...","softwareType":"EasyWeatherV1.2.0","country":"DE","solarRadiation":0.0,"lon":...,"realtimeFrequency":null,"epoch":1558985733,"lat":...,"uv":0.0,"winddir":304,"humidity":77,"qcStatus":1,"metric":{"temp":13,"heatIndex":13,"dewpt":9,"windChill":13,"windSpeed":0,"windGust":0,"pressure":1002.03,"precipRate":0.0,"precipTotal":0.0,"elev":356}}]}.
Auf meiner CCU2 habe ich die Variable "Wetter" als String angelegt, den CUx installiert und das Skript geschrieben:
var url = "https://api.weather.com/v2/pws/observat ... =m&apiKey=...";
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();
daten = (wetter_XML);
dom.GetObject("Wetter").State(daten);
Die Daten kommen aus irgend einem Grund nicht in der Variable an. Was mache ich falsch?
{"observations":[{"stationID":"...","obsTimeUtc":"2019-05-27T19:35:33Z","obsTimeLocal":"2019-05-27 21:35:33","neighborhood":"...","softwareType":"EasyWeatherV1.2.0","country":"DE","solarRadiation":0.0,"lon":...,"realtimeFrequency":null,"epoch":1558985733,"lat":...,"uv":0.0,"winddir":304,"humidity":77,"qcStatus":1,"metric":{"temp":13,"heatIndex":13,"dewpt":9,"windChill":13,"windSpeed":0,"windGust":0,"pressure":1002.03,"precipRate":0.0,"precipTotal":0.0,"elev":356}}]}.
Auf meiner CCU2 habe ich die Variable "Wetter" als String angelegt, den CUx installiert und das Skript geschrieben:
var url = "https://api.weather.com/v2/pws/observat ... =m&apiKey=...";
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();
daten = (wetter_XML);
dom.GetObject("Wetter").State(daten);
Die Daten kommen aus irgend einem Grund nicht in der Variable an. Was mache ich falsch?
-
- Beiträge: 3302
- Registriert: 07.01.2015, 23:26
- Wohnort: Scheeßel
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 11 Mal
Re: Wetterdaten von Wunderground
Suche mal nach Wunderground im Forum, dafür gibt es ein fertiges Script.
-
- Beiträge: 6
- Registriert: 27.05.2019, 21:15
Re: Wetterdaten von Wunderground
Die Skripte sind von den Zugängen von vor über zwei Jahren. Diese URL's funzen schon ne weile nicht mehr.
-
- Beiträge: 6
- Registriert: 27.05.2019, 21:15
-
- Beiträge: 3302
- Registriert: 07.01.2015, 23:26
- Wohnort: Scheeßel
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 11 Mal
Re: Wetterdaten von Wunderground
Das funktionierte bis zum Jahreswechsel bei mir noch, da wurde das APi ja kostenpflichtig.
viewtopic.php?f=18&t=17209
viewtopic.php?f=18&t=17209
-
- Beiträge: 6
- Registriert: 27.05.2019, 21:15
Re: Wetterdaten von Wunderground
Wenn man seine eigene Wetterstation hat, dann bekommt man wieder einen kostenlosen API-Key. Die aktuelle Abfrage ist wie in meiner Anfrage beschrieben und geht ja auch direkt im Browser. Nun ist halt die Frage, warum das aus dem Skript nicht funktioniert.
-
- Beiträge: 3302
- Registriert: 07.01.2015, 23:26
- Wohnort: Scheeßel
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 11 Mal
Re: Wetterdaten von Wunderground
Kommt überhaupt etwas an?
So müsste der Inhalt der Abfrage bei "Script Testen" wiedergegeben werden.
Wenn ich das mache und eine ausgedachte Station ID udn einen ausgedachten API Key da einsetze, wird mit der Quelltext der gesamten XML Fehlerseite angezeigt mit unter anderem "Invalid apiKey", so dass ich davon ausgehe, dass bei korrekter Station ID und korrektem API Key auch die Ausgabe dort stehen würde.
So müsste der Inhalt der Abfrage bei "Script Testen" wiedergegeben werden.
Code: Alles auswählen
var url = "https://api.weather.com/v2/pws/observat ... =m&apiKey=...";
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();
WriteLine(wetter_xml);
-
- Beiträge: 6
- Registriert: 27.05.2019, 21:15
Re: Wetterdaten von Wunderground
Moin,
bei mir fehlte die Zeile "WriteLine(wetter_xml);". Diese habe ich jetzt ergänzt, hat aber leider nichts geändert. Wie es aussieht kommt erst gar nichts an. Wenn ich bei der URL die Adresse von meiner FritzBox eintrage bekomme ich diverse Einträge in der Variablen "Wetter". Sieht dann so aus:
!DOCTYPE html
html lang="de"
head
meta http-equiv=content-type content="text/html; charset=utf-8" /
meta http-equiv="Cache-Control" content="private, no-transform" /
meta http-equiv="X-UA-Compatible" content="IE=edge" /
meta name="format-detection" content="telephone=no" /
usw.
Also grundsätzlich geht's, nur alle url's im Internet scheinen nicht erreichbar. Meine CCU2 hat aber Zugriff zum Internet, auf der Startseite werden z.B. die Zeiten für Sonnenauf- und -untergang aktualisiert.
bei mir fehlte die Zeile "WriteLine(wetter_xml);". Diese habe ich jetzt ergänzt, hat aber leider nichts geändert. Wie es aussieht kommt erst gar nichts an. Wenn ich bei der URL die Adresse von meiner FritzBox eintrage bekomme ich diverse Einträge in der Variablen "Wetter". Sieht dann so aus:
!DOCTYPE html
html lang="de"
head
meta http-equiv=content-type content="text/html; charset=utf-8" /
meta http-equiv="Cache-Control" content="private, no-transform" /
meta http-equiv="X-UA-Compatible" content="IE=edge" /
meta name="format-detection" content="telephone=no" /
usw.
Also grundsätzlich geht's, nur alle url's im Internet scheinen nicht erreichbar. Meine CCU2 hat aber Zugriff zum Internet, auf der Startseite werden z.B. die Zeiten für Sonnenauf- und -untergang aktualisiert.
-
- Beiträge: 6
- Registriert: 27.05.2019, 21:15
Re: Wetterdaten von Wunderground
Hallo nochmal,
ich habe die URL im Format von json auf xml geändert:
var url = "https://api.weather.com/v2/pws/observat ... =m&apiKey=...".
Im Browser sieht es jetzt so aus:
<?xml version="1.0" encoding="ISO-8859-1"?>
<observations xmlns="">
<observations>
<observations>
<stationID>...</stationID>
<obsTimeUtc>2019-05-29T04:38:05Z</obsTimeUtc>
<obsTimeLocal>2019-05-29 06:38:05</obsTimeLocal>
<neighborhood>...</neighborhood>
<softwareType>EasyWeatherV1.2.0</softwareType>
<country>DE</country>
<solarRadiation>29.85</solarRadiation>
<lon>...</lon>
<realtimeFrequency/>
<epoch>1559104685</epoch>
<lat>...</lat>
<uv>0.0</uv>
<winddir>290</winddir>
<humidity>88</humidity>
<qcStatus>1</qcStatus>
<metric>
<temp>6</temp>
<heatIndex>6</heatIndex>
<dewpt>4</dewpt>
<windChill>6</windChill>
<windSpeed>3</windSpeed>
<windGust>4</windGust>
<pressure>1012.19</pressure>
<precipRate>0.0</precipRate>
<precipTotal>0.0</precipTotal>
<elev>356</elev>
</metric>
</observations>
</observations>
</observations>
Hat in der Variablen leider nichts geändert. Die Internet-LED an der CCU2 leuchtet auch. Als DSL-Router nutze ich eine FritzBox 7490.
Vielleicht hat ja noch jemand eine Idee.
Danke
ich habe die URL im Format von json auf xml geändert:
var url = "https://api.weather.com/v2/pws/observat ... =m&apiKey=...".
Im Browser sieht es jetzt so aus:
<?xml version="1.0" encoding="ISO-8859-1"?>
<observations xmlns="">
<observations>
<observations>
<stationID>...</stationID>
<obsTimeUtc>2019-05-29T04:38:05Z</obsTimeUtc>
<obsTimeLocal>2019-05-29 06:38:05</obsTimeLocal>
<neighborhood>...</neighborhood>
<softwareType>EasyWeatherV1.2.0</softwareType>
<country>DE</country>
<solarRadiation>29.85</solarRadiation>
<lon>...</lon>
<realtimeFrequency/>
<epoch>1559104685</epoch>
<lat>...</lat>
<uv>0.0</uv>
<winddir>290</winddir>
<humidity>88</humidity>
<qcStatus>1</qcStatus>
<metric>
<temp>6</temp>
<heatIndex>6</heatIndex>
<dewpt>4</dewpt>
<windChill>6</windChill>
<windSpeed>3</windSpeed>
<windGust>4</windGust>
<pressure>1012.19</pressure>
<precipRate>0.0</precipRate>
<precipTotal>0.0</precipTotal>
<elev>356</elev>
</metric>
</observations>
</observations>
</observations>
Hat in der Variablen leider nichts geändert. Die Internet-LED an der CCU2 leuchtet auch. Als DSL-Router nutze ich eine FritzBox 7490.
Vielleicht hat ja noch jemand eine Idee.
Danke
-
- Beiträge: 132
- Registriert: 13.10.2015, 14:34
- Hat sich bedankt: 2 Mal
Re: Wetterdaten von Wunderground
probiere mal folgendes:
Code: Alles auswählen
!URSPRUNG Stand 03.04.2014 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_Bedingungen Zeichenkette
!W_Temperatur Zahl °C
!W_Luftfeuchte Zahl %
!W_Windbedingungen Zeichenkette
!W_Windrichtung Zeichenkette
!W_Windrichtg Zahl °
!W_Windgeschwindigkeit Zahl km/h
!W_Windboeen Zahl km/h
!W_Luftdruck Zahl mb
!W_Luftdrucktrend Zeichenkette
!W_Taupunkt Zahl °C
!W_UV Zeichenkette
!STAND 24.06.2019
!CUxD Nummer prüfen oder ggf. anpassen!
var url = "http://api.weather.com/v2/pws/observations/current?stationId=DEINE_STATION_ID&format=xml&units=m&apiKey=DEIN_API_KEY";
!hier ist die Abfrage mit CUxD
dom.GetObject("CUxD.CUX2801004:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801004:1.CMD_QUERY_RET").State(1);
string wetter_xml = dom.GetObject("CUxD.CUX2801004:1.CMD_RETS").State();
!Daten mit Suchworten aus XML-File ausfiltern:
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));
dom.GetObject("W_Station").State(daten);
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 = "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 = "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));
integer zahl = daten.ToFloat();
dom.GetObject("W_Luftfeuchte").State(zahl);
string word = "wind_string";
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_Windbedingungen").State(daten);
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));
word_laenge =daten.Length();
string anfangsbuchstabe = daten.Substr(0,1);
! Umlaute korrigieren
!
! N # Nord ***
if (anfangsbuchstabe == "N") {
!
if (daten == "Nordwest") {daten = "Nord-West" ;}
}
! S # Süd ***
if (anfangsbuchstabe == "S") {
! 4 # Süd
if (word_laenge == 4) {daten = "Süd";}
! 8 # Südwest
if (word_laenge == 8) {daten = "Süd-West";}
! 12 # Süd-Südost
if (word_laenge == 12) {daten = "Süd-Süd-Ost" ;}
! 13
if (word_laenge == 13) {daten = "Süd-Süd-West" ;}
}
! W # Westen
if (anfangsbuchstabe == "W") {
! 13 # West-Südwest
if (word_laenge == 13) {daten = "West-Süd-West" ;}
}
! O # Osten
if (anfangsbuchstabe == "O") {
! 11 # Ost-Südost
if (word_laenge == 11) {daten = "Ost-Süd-Ost" ;}
}
dom.GetObject("W_Windrichtung").State(daten);
!WriteLine(daten);
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));
integer zahl = daten.ToFloat();
dom.GetObject("W_Windgeschwindigkeit").State(zahl);
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));
integer zahl = daten.ToFloat();
dom.GetObject("W_Windboeen").State(zahl);
!string word = "pressure_mb";
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));
integer zahl = daten.ToFloat();
dom.GetObject("W_Luftdruck").State(zahl);
string word = "dewpt";
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_Taupunkt").State(zahl);
string word = "uv";
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_UV").State(zahl);
string word = "solarRadiation";
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_Wattprom2").State(zahl);