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 11. April 2021 um 02:04 . 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);
Code-Sprache: PHP (php)

Viel Spaß beim Nachmachen!


Vorheriger

Homematic Smart Home via ioBroker über Alexa steuern

Word SSL-Bibliothek Fehlermeldung beim Öffnen von Word Dokumenten von Webseiten oder Sharepoint

Nächster
About Simon

Hi 👋 ich bin Simon Müller. Gründer des Blogs simon42 & bekennender vollblut- und Berufs-Nerd. Hier schreibe ich ehrlich und mit Leidenschaft über alle Smart Home und Technik Themen, die mir im Leben begegnen oder mich aktuell interessieren. Mein Zuhause wurde bereits von Sprachassistenten übernommen und längst habe ich die Kontrolle über die Anzahl der smarten Geräte verloren 😁 Kaffeespende für den Author

4 Gedanken zu „Homematic Wetter-Daten online abrufen über Wunderground“

    • 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

×
Jemand hat SD Karte Klonen – Mit Windows 10 SD Karten kopieren über Print geteilt
vor 2 hours
×
Jemand hat Shelly Smart Home System – Test & Komplettübersicht über WhatsApp geteilt
vor 6 hours
Send this to a friend