Von: Simon

Homematic Wetter-Daten online abrufen ├╝ber Wunderground

Wer sich jetzt nicht direkt eine Wetterstation von Homematic f├╝r ca 250ÔéČ kaufen m├Âchte, nur um zu wissen, ob es drau├čen regnet, den kann ich verstehen. Aber das m├╝sst ihr auch nicht, denn man kann in der Zentrale von Wunderground Homematic Wetter-Daten online abrufen!

Dabei rufen wird ├╝ber Homematic das Wetter online ├╝ber wunderground.com ab. Auf dieser Internetseite werden Daten von Wetterstationen kostenfrei zur Verf├╝gung gestellt und dank eines Homematic Wetter Skripts aus dem Homematic Forum ist die Implementierung denkbar einfach. 

Also, wenn du Wetter-Daten aus dem Internet in deiner CCU3 oder CCU2 benutzen und anzeigen lassen m├Âchtest, bitte einfach der Schritt-f├╝r-Schritt-Anleitung folgen ­čśë

Alternativ kannst du Homematic auch ├╝ber Apple HomeKit steuern und in der Homebridge Wetterdaten-Plugins einbinden. Somit bist du unabh├Ąngig, von der CCU ­čśë

Voraussetzungen

Homematic Komponenten

Zuletzt aktualisiert am 30.11.2023 um 04:50 . Wir weisen darauf hin, dass sich hier angezeigte Preise inzwischen ge├Ąndert haben k├Ânnen. Alle Angaben ohne Gew├Ąhr.

Zusatzsoftware auf der Homematic Zentrale

KEINE, auch kein CUX Daemon!

Arbeiten auf Wunderground.com

Account erstellen

Zuerst m├╝ssen wir uns auf wunderground einen Account erstellen, von dieser Webseite beziehen wir unsere Homematic Wetter-Internet-Daten.

www.wunderground.com Account erstellen um Homematic Wetterdaten online abrufen zu k├Ânnen
www.wunderground.com Welcome schlie├čen
Das WELCOME! Fenster l├Ąsst sich oben rechts schlie├čen

Anschlie├čend erhaltet ihr eine Best├Ątigungs-E-Mail. Das hei├čt ihr m├╝sst euren Account mit dem Link in der E-Mail aktivieren, da ihr sonst keine API Keys erstellen k├Ânnt!

API KEY erstellen, um ├╝ber Wunderground Homematic Wetter-Daten abzufragen

Nachdem ihr eure E-Mail-Adresse validiert habt, m├╝sst ihr euch einen API Key erstellen

www.wundergrounda.com API ├Âffnen
www.wunderground.com explore my options
www.wunderground.com Purchase Key 0 USD

Anschlie├čend gelangt ihr auf eine Seite, auf der ihr eure pers├Ânlichen Daten eintragen m├╝sst. Danach gelangt ihr auf die Seite, von der ihr euch euren eigenen API KEY kopieren k├Ânnt.

www.wunderground.com Key kopieren
Lasst dieses Fenster ge├Âffnet, ihr braucht den Key gleich

Arbeiten auf der Homematic Zentrale

Systemvariablen anlegen

Rufe nun die Web-Oberfl├Ąche deiner Zentrale ├╝ber deine Homematic IP Adresse auf.

Ihr m├╝sst nun in der Homematic WebUI folgende Systemvariablen f├╝r die Homematic Wetter-Daten anlegen. Wenn ihr eine Variable vergesst oder Schreibfehler eingebaut habt, funktioniert das Skript nicht mehr!

NameTypEinheit
W_StationZeichenkette 
W_AktualisierungZeichenkette 
W_BedingungenZeichenkette 
W_TemperaturZahl┬░C
W_LuftfeuchteZahl%
W_WindbedingungenZeichenkette 
W_WindrichtungZeichenkette 
W_WindrichtgZahl┬░
W_WindgeschwindigkeitZahlkm/h
W_WindboeenZahlkm/h
W_LuftdruckZahlmb
W_LuftdrucktrendZeichenkette 
W_TaupunktZahl┬░C
W_UVZeichenkette 

Hier ein Beispiel anhand der Variable W_Temperatur

WebUI Systemvariable

Programm erstellen

Zuletzt m├╝ssen wird noch das Programm erstellen, das die Variablen f├╝rs Wetter in Homematic mit Daten f├╝llt.

Neues Programm in der WebUI anlegen

WebUI Programme & Zentralverkn├╝pfung
WebUI neues Programm anlegen

├ťbersicht des Programms W_Wunderground zum Homematic Wetter-Daten online abrufen

WebUI Programm W_Wunderground ├ťbersicht gross
Zeitsteuerung von W_Wunderground
WebUI Programm W_Wunderground Zeitmodul
Skriptcode von W_Wunderground

Schlussendlich findet ihr hier das Skript vom Programm W_Wunderground. Dieses Skript ist f├╝r die Bef├╝llung der Homematic Wetter-Daten Variablen mit den Daten von Wunderground verantwortlich.

Vergesst bitte nicht in Zeile 19:

  • XXXXXXXXXXXXXXXX durch euren API KEY zu ersetzen
  • MEINESTADT.xml durch eure Heimatstadt zu ersetzen, zum Beispiel Frankfurt.xml22
!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
 
var url = "http://api.wunderground.com/api/XXXXXXXXXXXXXXXX/conditions/lang:DL/q/Germany/MEINESTADT.xml";
 
!hier ist die Abfrage mit CUxD
!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();
 
!hier ist die Abfrage mit system.Exec
string stdout;
string stderr;
system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr);
WriteLine(stdout);
string wetter_xml = stdout;
WriteLine(wetter_xml);
 
!Beim XML-File den ueberfluessigen Header entfernen
integer laenge = wetter_xml.Length();
integer wort_position = wetter_xml.Find("display_location");
wetter_xml = wetter_xml.Substr(wort_position, (laenge - wort_position));
!WriteLine(wetter_xml);
 
!Daten mit Suchworten aus XML-File ausfiltern:
 
!string word = "full";
string word = "city";
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 = "observation_time";
string word = "observation_time_rfc822";
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));
daten = daten.Substr(0, (word_position -11));
dom.GetObject("W_Aktualisierung").State(daten);
 
string word = "weather";
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_Bedingungen").State(daten);
 
string word = "temp_c";
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 = "relative_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 = "wind_dir";
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 = "wind_degrees";
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_Windrichtg").State(zahl);
 
string word = "wind_kph";
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 = "wind_gust_kph";
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";
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 = "pressure_trend";
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_Luftdrucktrend").State(daten);
 
string word = "dewpoint_c";
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);

Viel Spa├č beim Nachmachen!

HomeKit Ger├Ąte ├ťbersicht

smarte News

Erfahre als Erster, wenn wir neue Artikel zu Smart Home oder anderen interessanten Themen ver├Âffentlichen!

Wir senden keinen Spam und verkaufen keine Daten! Erfahre mehr in unserer Datenschutzerkl├Ąrung.

Die Anzeige der Produkte wurde mit dem affiliate-toolkit WordPress Plugin umgesetzt.

Gr├╝nder von simon42. Schreibt hier ehrlich und leidenschaftlich ├╝ber Smart Home und Technik Themen, denn das Zuhause wurde bereits von Sprachassistenten ├╝bernommen und die Kontrolle abgegeben ­čśü

9 Gedanken zu „Homematic Wetter-Daten online abrufen ├╝ber Wunderground“

    • Hi Christian,
      danke f├╝r den Hinweis, ich schaue mir das mal an. HTTPS macht ja Sinn, aber kaum zu glauben wie alt mein Beitrag (und ich) inzwischen geworden ist xD

    • So wie es aussieht, hat wunderground seine API am 23.11.2021 abgeschaltet, von daher wird das auch mit HTTPS nicht funktionieren. Es wird lediglich noch das Wetter der eigenen Wetterstation (sollte man die haben) ausgelesen, aber auch nicht direkt ├╝ber wunderground, sondern ├╝ber api.weather.com, siehe hier. Ich werde bei Gelegenheit eine Anleitung f├╝r die OpenWeatherMap Api & Homematic schreiben ­čśë

      Beste Gr├╝├če & bis bald

    • Hi Celli,
      die Daten werden mit dem Programm in die vorher angelegten Variablen in der CCU3 geschrieben, und k├Ânnen ggf. von dir in Programmen verwendet werden.

      Beantwortet das die Frage?

      Beste Gr├╝├če
      Simon

Schreibe einen Kommentar

Send this to a friend