Homematic Wetterdaten von Wunderground abrufen – Homematic-Guru.de (2024)

Homematic Wetterdaten ohne Wetterstation?

Sie möchten Wetterdaten in der Homematic haben, besitzen aber keine Homematic Wetterstation?
Wer auf sekundengenaue Daten verzichten kann, der kann die Daten bequem aus dem Internet importieren bzw. sich an der Wetterstation des Nachbarn bedienen 🙂

Hier stelle ich Ihnen eine Lösung per Homematic Script vor, das über die API-Schnittstelle von Wunderground.com mittels CUxD die Daten vom Webservice herunterlädt und in die Homematic Systemvariablen abspeichert.
Diese Daten können anschließend beliebig in Homematic Programmen wie z.B. in einer Gartenbewässerung weiterverarbeitet werden.

ACHTUNG! Aktuell gibt Wunderground keine kostenlosen API-Keys heraus!

Los geht’s!

Voraussetzung ist eine lauffähige CUxD Installation mit Exec-Gerät Konfiguration
TIPP: Installation CUxD-Addon

Quicktipp: Variable anlegen
Auf Korrekte Schreibweise achten!

  • Wetter Station
    Name: W_Station Typ: Zeichenkette
  • Wetter Aktualisierung
    Name: W_Aktualisierung Typ: Zeichenkette
  • Wetter Bedingungen
    Name: W_Bedingungen Typ: Zeichenkette
  • Wetter Bedingungen
    Name: W_Bedingungen Typ: Zeichenkette
  • Wetter Luftdrucktrend
    Name: W_Luftdrucktrend Typ: Zeichenkette
  • Wetter UV
    Name: W_UV Typ: Zeichenkette
  • Wetter Windbedingungen
    Name: W_Windbedingungen Typ: Zeichenkette
  • Wetter Windrichtung
    Name: W_Windrichtung Typ: Zeichenkette
  • Wetter Luftdruck
    Name: W_Luftdruck Typ: Zahl Maßeinheit: mb
  • Wetter Luftfeuchte
    Name: W_Luftfeuchte Typ: Zahl Maßeinheit: %
  • Wetter Taupunkt
    Name: W_Taupunkt Typ: Zahl Maßeinheit: °C
  • Wetter Temperatur
    Name: W_Temperatur Typ: Zahl Maßeinheit: °C Minimalwert: -59 Maximalwert: 59
  • Wetter Windboeen
    Name: W_Windboeen Typ: Zahl Maßeinheit: km/h
  • Wetter Windgeschwindigkeit
    Name: W_Windgeschwindigkeit Typ: Zahl Maßeinheit: km/h
  • Wetter Windrichtung (Grad)
    Name: W_Windrichtg Typ: Zahl Maßeinheit: °
  • Programm anlegen

Quicktipp: Programm anlegen

  • Bedingung: Wenn… Zeitsteuerung, Zeitspannung ganztägig, Serienmuster Zeitintervall alle 15 Minuten
  • Aktivität: Dann… Script einfügen

ACHTUNG: In der URL den API-Key und ORT (ohne <>) einfügen!
Beispiel var url = “http://api.wunderground.com/api/jdf7g4h58hgfj75h/conditions/lang:DL/q/Germany/FRANKFURT.xml”;

!Stand 03.04.2014 http://homematic-forum.de/forum/viewtopic.php?f=31&t=17209var url = "http://api.wunderground.com/api/&lt;HIER API-KEY&gt;/conditions/lang:DL/q/Germany/&lt;HIER ORT&gt;.xml";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();!Beim XML-File den ueberfluessigen Header entferneninteger 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 # Westenif (anfangsbuchstabe == "W") { ! 13 # West-Südwest if (word_laenge == 13) {daten = "West-Süd-West" ;}}! O # Ostenif (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);


Danke an Eugen Stall (stall.biz), für die HM-Script Übersetzung!

Fertig!

Homematic Wetterdaten von Wunderground abrufen – Homematic-Guru.de (1)

Über die Favoriten kann man sich eine schöne Ansicht auf die Startseite legen

Verwendete Hardware

  • Homematic Zentrale CCU3 inkl. AIO CREATOR NEO Lizenz

    179,95

    Enthält 19% Mwst.

    zzgl. Versand

    In den Warenkorb
Homematic Wetterdaten von Wunderground abrufen – Homematic-Guru.de (2024)
Top Articles
Latest Posts
Article information

Author: Kelle Weber

Last Updated:

Views: 6152

Rating: 4.2 / 5 (53 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Kelle Weber

Birthday: 2000-08-05

Address: 6796 Juan Square, Markfort, MN 58988

Phone: +8215934114615

Job: Hospitality Director

Hobby: tabletop games, Foreign language learning, Leather crafting, Horseback riding, Swimming, Knapping, Handball

Introduction: My name is Kelle Weber, I am a magnificent, enchanting, fair, joyous, light, determined, joyous person who loves writing and wants to share my knowledge and understanding with you.