Auf der Suche nach einer Lösung extern ermittelte Wetterdaten in HomeMatic-Programmen zu verwenden, bin ich im Homematic-Forum fündig geworden. Der Beitrag von Dr. Eugen Stall (funkleuchtturm) beschreibt sehr anschaulich, wie man mittels HomeMatic-Script eine XML-Datei von wunderground.com parsen und gefundene Inhalte in Systemvariablen schreiben kann. Ich habe sein Script um zwei Systemvariablen erweitert und zusätzlich die von wunderground.com gelieferten Wochentage und Monate ins Deutsche übersetzt. Dadurch konnte ich meine HomeMatic Installation mit Wetterdaten von Wunderground zur Steuerung meiner Komponenten ergänzen.
Update 25.11.21: Wunderground hat die API-Schnittstelle deaktiviert, eine Alternative bietet Wunderground leider nicht an.
Update 30.07.18: Wunderground vergibt inzwischen keine API-Keys mehr.
Wunderground schreibt dazu auf der Website: „To improve our services and enhance our relationship with our users, we will no longer provide free weather API keys as part of our program. If you have been directed to download our Weather Underground free API key by a third party provider, please contact your vendor for resolution.“
Update 05.04.17: Die korrekte Darstellung vom „ü“ in den Systemvariablen W_Windrichtung und W_Windbedingungen erledige ich jetzt per Suchen & Ersetzen.
Wer sich ein bisschen in HomeMatic-Script eingelesen hat, kann sehr einfach auch weitere Daten aus dem XML-File in Systemvariable schreiben oder evtl. auch an der Datenaufbereitung „schrauben“ um die Wetterdaten von Wunderground für die Steuerung von HomeMatic-Komponenten zu nutzen.
Hinweis: Ich gehe davon aus, dass du CUxD bereits installierst hast! Falls dies noch nicht geschehen ist, findest du hier eine Anleitung.
Hier in aller Kürze, wie du das Script zum Laufen bringst:
- Einen Account bei wunderground.com anlegen und einen API-Key erstellen, eine detaillierte Anleitung dazu findest du hier.
- Alle 16 Systemvariablen anlegen, Schreibweise und Feldtyp bitte beachten. Achtung: Beim kleinsten Schreibfehler, oder wenn du eine Systemvariable vergisst anzulegen, läuft das Script NICHT!
- Im Script deinen API-Key und die von dir präferierte Wetterstation in der URL-Zeile eintragen. Am besten dir zusammengebaute URL zum Test direkt im Browser ausprobieren. Hast du alles richtig gemacht, erscheint beim Testen ein kompletter XML-File mit den Wetterdaten von Wunderground deiner präferierten Wetterstation im Browser.
- Anschliessend ein Programm (siehe unten) erstellen und das Script an entsprechende Stelle kopieren, um die Wetterdaten von Wunderground in Systemvariablen zu schreiben.
! Wetterdaten von wunderground.com holen !Stand 03.04.2014 https://homematic-forum.de/forum/viewtopic.php?f=31&t=17209 !zuerst folgende Systemvariablen anlegen !Achtung: keine vergessen und exakte Schreibweise mit Copy & Paste !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 Zahl !Aussentemperatur Zeichenkette (Erweiterung E.Simdorn) !Luftfeuchtigkeit Zeichenkette (Erweiterung E.Simdorn) ! Weiter Ergaenzungen durch E.Simdorn ! Uebersetzung der Monate und Wochentage ! Temperatur und Luftfeuchtigkeit jeweils in einen Text-String umwandeln und formatieren ! Temperatur und Luftfeuchtigkeit jeweils in einen Text-String umwandeln und formatieren ! Umlaut ü aus W_Windrichtung und W_Windbedingungen per Suchen & Ersetzen umgesetzt var url = "http://api.wunderground.com/api/hier_deinen_API-Key_eintragen/conditions/lang:DL/q/pws:IHESSENG16.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("observation_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)); daten = daten; 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)); string Text01=daten.StrValueByIndex(" ", 0); string Text02=daten.StrValueByIndex(" ", 1); string Text03=daten.StrValueByIndex(" ", 2); string Text04=daten.StrValueByIndex(" ", 3); string Text05=daten.StrValueByIndex(" ", 4); string wochentag = ""; if (Text01 == "Mon,") {wochentag = "Montag" ;} if (Text01 == "Tue,") {wochentag = "Dienstag" ;} if (Text01 == "Wed,") {wochentag = "Mittwoch" ;} if (Text01 == "Thu,") {wochentag = "Donnerstag" ;} if (Text01 == "Fri,") {wochentag = "Freitag" ;} if (Text01 == "Sat,") {wochentag = "Samstag" ;} if (Text01 == "Sun,") {wochentag = "Sonntag" ;} if(Text03=="Jan") {Text03 = "Januar" ;} if(Text03=="Feb") {Text03 = "Februar" ;} if(Text03=="Mar") {Text03 = "März" ;} if(Text03=="Apr") {Text03 = "April" ;} if(Text03=="May") {Text03 = "Mai" ;} if(Text03=="Jun") {Text03 = "Juni" ;} if(Text03=="Jul") {Text03 = "Juli" ;} if(Text03=="Aug") {Text03 = "August" ;} if(Text03=="Sep") {Text03 = "September" ;} if(Text03=="Oct") {Text03 = "Oktober" ;} if(Text03=="Nov") {Text03 = "November" ;} if(Text03=="Dec") {Text03 = "Dezember" ;} string outText= wochentag # ", " # Text02 # ". " # Text03 # " " # Text04 # " / " # Text05 # " Uhr"; daten = outText; 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); ! ***** ! Temperatur real in string umwandeln und anschliessen den Dezimalpunkt gegen ein Komma austauschen string TextTemp = zahl.ToString(2); integer TPunkt = TextTemp.Find("."); string TextTemp1 = TextTemp.Substr(0, TPunkt); TextTemp1 = TextTemp1 # ","# TextTemp.Substr(TPunkt +1, 2) # " Grad Celsius"; TextTemp = TextTemp1; dom.GetObject('Aussentemperatur').Variable(TextTemp); WriteLine(dom.GetObject('Aussentemperatur').Variable()); ! ***** 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 TextHumi = zahl.ToString(1); integer TPunkt = TextHumi.Find("."); string TextHumi1 = TextHumi.Substr(0, TPunkt); TextHumi1 = TextHumi1 # ","# TextHumi.Substr(TPunkt +1, 2) # " %"; TextHumi = TextHumi1; dom.GetObject('Luftfeuchtigkeit').Variable(TextHumi); WriteLine(dom.GetObject('Luftfeuchtigkeit').Variable()); ! ***** 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)); ! Umlaute korrigieren string textuml = daten; string textneu = "ü"; string teilstr; integer teilstr_laenge; foreach (teilstr, textuml.Split("ü")) { if (textneu == "ü") { textneu = teilstr; } else { teilstr_laenge = teilstr.Length(); teilstr = teilstr.Substr(1,teilstr_laenge-1); textneu = textneu # "ü" # teilstr; } } daten = textneu; if (daten == "Calm") {daten = "Windstill" ;} 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)); ! Umlaute korrigieren string textuml = daten; string textneu = "ü"; string teilstr; integer teilstr_laenge; foreach (teilstr, textuml.Split("ü")) { if (textneu == "ü") { textneu = teilstr; } else { teilstr_laenge = teilstr.Length(); teilstr = teilstr.Substr(1,teilstr_laenge-1); textneu = textneu # "ü" # teilstr; } } daten = textneu; dom.GetObject("W_Windrichtung").State(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)); if (daten == -9999) { daten = "0"; } 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)); integer zahl = daten.ToFloat(); dom.GetObject("W_UV").State(zahl);
Falls du weitere Werte aus dem XML-Datenstrom der Wetterdaten von Wunderground für deine HomeMatic-Installation nutzen willst, lies bitte auch die Kommentare. Hier habe ich schon für einige Leser Erweiterungen beschrieben.
In den Kommentaren gab es die Frage nach Wettervorhersagedaten, ich habe deshalb einen Beitrag zur Wettervorhersage mit Wunderground erstellt.
Hallo Erhard,
du hast das Script um 2 Variablen erweitert. Alle Variblen fängen mit W_ an, ausser den beide. Für den späteren Überblick wäre es vielleicht besser auch die 2 mit einem W_ anfangen zu lassen.
Was ich auch ganz gut fände ist, wenn bei den Variablen Zahl der Wertebereich angegeben wäre.
Gruß Karsten
Hallo Karsten, ich habe diese beiden zusätzlichen Systemvariablen extra ohne „w_“ angelegt. Diese beiden Systemvariablen enthalten die von wunderground.com ermittelten Daten aufbereitet für meine Favoriten auf der CCU2-Startseite. Da macht sich ein „w_“ nicht ganz so gut … 🙂
Gruß Erhard
Hallo Erhard,
im Script Zeile 137 und 154 noch auskommentieren.
Gruß
Karsten
Hallo Karsten,
danke für den Hinweis. Mit dem Befehl dem „WriteLine“ lasse ich mir bei der Script-Entwicklung unter HQ WebUI den Inhalt von Variablen zur Kontrolle ausgeben, bei der späteren Ausführung des Scripts stören diese Ausgaben nicht wirklich. Aber der guten Ordnung halber habe ich die beiden Zeilen auskommentiert. 😉
Liebe Grüße Erhard
Hallo Erhard
habe folgendes Problem alle meine Werte werden mit 0.00 ausgegeben. Wenn Ich das skript Teste im HQ WebUI bekomme Ich die Meldung ExecError: Execution failed
Und unten Rechts steht
wochentag Freitag
TextHumi1
TextTemp
url http://api.wunderground.com/api/mein Key/conditions/lang:DL/q/mein Ort.xml
word observation_time_rfc822
outText Freitag, 14. Oktober 2016 / 08:18 Uhr
TPunkt 0
Text01 Fri,
anfangsbuchstabe
Text02 14
daten_history_url http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=mein Ort
Text03 Oktober
wort_position 755
word_position 33
Text04 2016
Text05 08:18
USER_ID 1004
hier geht es noch weiter habe es aber weg gelassen
hoffe du kannst mir helfen
Gruß Ralf
Hallo Ralf,
hast du die Systemvariablen W_Station, W_Aktualisierung, W_Bedingungen, W_Temperatur, W_Luftfeuchte, W_Windbedingungen, W_Windrichtung, W_Windrichtg, W_Windgeschwindigkeit, W_Windboeen, W_Luftdruck, W_Luftdrucktrend, W_Taupunkt, W_UV, Aussentemperatur, Luftfeuchtigkeit angelegt?
Dabei unbedingt auf die genaue Schreibweise achten.
Gruß Erhard
voll Stolz hab ich das geschafft!
jetzt möchte ich gern, wenn die Temperatur < 6 Grad dann soll HM-Sec-Win (ist schon eingebunden) das Fenster schließen;
sonst Fenster auf.
Wie kann ich (Leihe) das realsisieren.
Die Wetterdaten habe ich, die HM-SEC-Win ist einbunden.
Vermutlich brauche ich hierzu ein kleines Script? Lieben Dank für Unterstützung.
Hallo Hermann, Gratulation zum erfolgreichen Einstieg in die HomeMatic-Welt!
Die Systemvariable W_Temperatur ist eine Ganzzahl, die du in HomeMatic-Programmen auswerten kannst.
Die Logik dabei ist ziemlich einfach:
Bedingung: Wenn…
[Systemzustand] W_Temperatur im Wertebereich kleiner gleich 6.00 C [bei Änderung auslösen]
Aktivität: Dann…
[Geräteauswahl] HM-Sec-Win [sofort] …
Ich habe leider (noch) keine HM-Sec-Win und weiß deshalb nicht mit welcher Aktion der Aktivitätenzweig weiter gehen könnte.
Falls du noch Fragen hast, bitte einfach melden.
Gruß Erhard
Lieber Erhard,
Wir haben nun auch unsere Wetterstation erfolgreich mit deinem Skript eingebunden!
Super!
Uns fehlen allerdings noch ein paar Daten. Der aktuelle Regen, die Regen menge mm/h und die Helligkeit in W/m2.
Kannst du uns bei der einbindung dieser Parameter helfen?
Des Weiteren haben wir ein sehr merkwürdigs Problem festgestellt. Die Daten, die die Wetterstation ausgibt sind dieselsben, die auch in Homematic übernommen werden. ABER die Daten für den luftdruck, die von der Wetterstation ausgegeben werden sind nicht die, die unser Display anzeigt und auch die, die unsere Wetterstation im internet liefert sind dieselben wie im Display, nicht die direkten Daten der Wetterstation.
Auch zeigt die Wetterstation eine sehr merkwürdige Örtlichkeit an bei dem Paramerter Display Location. Hier steht eine falsche Höhe und ein falscher Namen. Wir konnten nicht herausfinden, wo diese zu ändern sind. Das sind zwar keine Probleme mit dem tollen Skript, aber vielleicht weißt du trotzdem Rat.
vielen Dank und liebe Grüße
Anna und Jörg
Guten Abend Anna & Jörg,
in der Funk-Wetterstation WDC 7000 könnt Ihr durch das Berühren der Fläche „CFG” das Konfigurationsmenü öffnen und durch wiederholtes Berühren der Fläche „NEXT” zum Hauptmenüpunkt „SYSTEM” navigieren und dort die Option „ALTITUDE” anwählen. Durch das Berühren der Flächen „+” bzw. „-” könnt Ihr die geografische Höhe Eures Standorts über dem Meeresspiegel (Höhe ü. NN) in Metern einstellen. Wartet einige Sekunden, danach erscheinen die korrigierten Daten für den relativen Luftdruck im Display. Habt Ihr auch die Position Eures Standorts über den Hauptmenüpunkt „POSITION” eingestellt?
Gruß Erhard
Lieber Erhardt,
Wir haben nicht die WDC7000 sondern eine Frogit.
Ja, wir haben die Höhe und den Ort korrekt eingestellt. Bei unserer Wetterstation wird der selbst eingestellte Ort angezeigt und eben auch der falsche Ort, von dem wir nicht wissen, wo er herkommt.
Aber das ist auch nicht ganz so entscheidend. Meinst du, du kannst uns beim Einbinden den fehlenden Daten helfen?
Danke und Gruß
Anna und Jörg
Guten Abend Anna & Jörg,
ihr habt also eine Froggit-Wetterstation und übermittelt die Daten an wunderground.com. Diese fragt ihr dann mit dem Skript ab und möchtet jetzt auch die Parameter für aktuelle Regen, die Regen menge mm/h und die Helligkeit in W/m2. Wenn ihr mir eure öffentliche Station-ID mitteilt, kann ich mir den Datenstrom anschauen und euch die notwendigen Skript-Erweiterungen schicken.
Gruß Erhard
P.S.: Die Idee mit der Froggit-Wetterstation ist klasse, scheint viel günstiger als die ELV-Wetterstation. Für welchen Typ von Frogit habt ihr euch entschieden, was waren die Kriterien?
Hallo Erhard,
Vielen Dank für deine Hilfe. Wir nutzen die Froggit seit zwei Jahren und sind sehr zufrieden damit, es ist das Modell HP1000 und ein zusätzliches zweites Display HP1003. Der stationscode lautet XXXXXXXXXXX. Es wäre super wenn du mal schauen könntest. Bitte den Code nicht veröffentlichen.
Vielen Dank und herzliche Grüße
Anna und Jörg
Guten Abend Anna & Jörg,
für die Regenmenge der letzten Stunde bitte eine weitere Systemvariable vom Typ Zahl mit dem Namen W_Regen in der CCU2 anlegen und anschliessend folgenden Code am Ende des Skripts einfügen:
string word = "precip_1hr_in";
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").State(zahl);
Für die Helligkeit in der CCU2 eine Systemvariable vom Typ Zahl mit dem Namen W_Solar anlegen und an das Ende des Skripts folgenden Code einfügen:
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_Solar").State(zahl);
Vielen Dank für den Tipp mit der Froggit HP1000, ich werde mir diese wahrscheinlich statt der HomeMatic-Wetterstation zulegen.
Ich hoffe ich konnte euch weiterhelfen.
Gruß Erhard
Super vielen Dank,
Kann ich daraus auch ein Diagramm erstellen, wir sind erst am Anfang bei Homematic. Aber inzwischen klappt es durch solch guten Support schon ganz gut. Wir wollten erst die Homematic kaufen obwohl wir die Froggit schon zwei Jahre haben weil wir dachten das wir sie nicht einbinden können.
Grüße Anna und Jörg
Guten Abend Anna & Jörg,
leider lassen sich mit der CCU2 nur Diagramme von HomeMatic-Komponenten erstellen.
Ich habe deshalb einen Raspberry in Betrieb genommen und CCU-Historian darauf installiert. Damit werden die Daten der HomeMatic-Komponenten sowie die Werte der Systemvariablen aufgezeichnet und in Diagrammen darstellen.
Eine Anleitung wie ihr einen Raspberry einrichtet und wie ihr darauf CCU-Historian installiert habe ich im Detail beschrieben.
Gruß Erhard
Hallo Erhard.
Danke für das Script und die anderen tollen Anleitungen. Ich habe die CCU2 seit 2 Wochen und bin schon gut fortgeschritten in der Automatisierung. Läuft alles.
Leider bekomme ich bei dem Wetterscript trotz korrekter Systemvariablen und der korrekten Einbindung von API und Wetterstation nur 0-Werte….
Woran kann das liegen?
Guten Abend Tommy,
bitte schicke mir mal die Kennung der Wunderground-Station die du versuchst abzufragen.
Wenn du möchtest, werde ich diese vor der Veröffentlichung deines Beitrages unkenntlich machen.
Gruß Erhard
Hallo Erhard, ich habe das komplette Script kopiert. Bitte die Kennung unkenntlich machen. Danke fürs helfen.
Hallo Tommy,
danke für das Posting des kompletten Scripts. Ich habe es auf deinen Wunsch aus deinem Post entfernt.
Der Fehler lag tatsächlich in meinem Script, hat sich wohl beim Aktualisieren eingeschlichen.
Durch den Abbruch des Scriptes konnten die Systemvariablen nicht gefüllt werden!
Ich habe den Fehler korrigiert und das Script erneut ohne Fehler getestet. Bitte kopiere das aktualisierte Script nochmal in deine CCU2 und ergänze deinen API-Key und deine Wetterstation.
Freue mich über eine Rückmeldung, es sollte jetzt klappen!
Gruß Erhard
Hallo Erhard,
leider das gleiche Problem bei mir – Null Werte und ??? als Antwort…
Haben die bei Weatherunderground was an der Ausgabe geändert?
Gruß
Andreas
Hallo Andreas,
nein, die der XML-Feed von Wunderground funktioniert einwandfrei!
Bitte überprüfe dein Script in der HomeMatic-Oberfläche auf Fehler, indem du im Fenster „Skript bearbeiten“ den Button „Fehlerprüfung“ klickst.
Falls kein Syntax-Fehler vorliegt, erscheint im unteren Fenster „Kein Fehler“. Sollte eine Fehlermeldung erscheinen, schicke mir bitte dein geändertes Script. Ich werde es vor Freischaltung deines Kommentars löschen.
Gruß Erhard
Hallo Erhard,
Fehlerprüfung habe ich durchgeführt – kein Fehler…
Der Link im Browser bringt auch vernünftige Ergebnisse zurück.
Mein Script sieht wie folgt aus (siehe unten) – Dankes schon im Vorfeld für die Hilfe.
Noch eine Frage zu den angelegten Variablen mit Zahl – da ist der Wertebereich von 0 bis 65000 eingestellt. Ist hier eine Änderung notwendig, z.B. -30 bis 50?
Gruß
Andreas
Anhang durch Admin gelöscht!
Hallo Andreas,
in mein Script hat sich ein Fehler eingeschlichen, bitte versuche es mit dem von mir vorgestern auf der Website korrigierten Script!
Nach der Korrektur des Scripts konnte ich die Daten der von dir abgefragten Wetterstation ohne Fehler in meine Variablen lesen.
Dein Hinweis auf den Wertebereich der Systemvariablen ist vollkommen richtig.
Falls du trotz der Verwendung des aktuellen Script weiterhin Hilfe benötigst, bitte einfach melden.
Gruß Erhard
P.S.: Ich gehe davon aus, dass du das HomeMatic-Plugin CUxD auf deiner CCU2 installiert hast. Sonst kann das Script nicht auf wunderground.com zugreifen und die Systemvariablen füllen.
Hallo Andreas,
läuft das Skript inzwischen? Falls es immer noch nicht läuft und du die Installation vom CUxD nach meiner Anleitung durchgeführt hast, liegt der Fehler bei mir. In meinem Beitrag hatte ich eine kleine Wichtigkeit vergessen. Jedes neue CUxD-Gerät erscheint zunächst im Posteingang der CCU2 und muss dort fertiggestellt werden. Danach muss die CCU2 neu gestartet werden. Ich habe meine Installationsanleitung für den CUxD dahingehend ergänzt.
Gruß Erhard
Hallo Erhard,
muss ich mir heute Abend nochmals anschauen – sorry, war in den Schulferien mit den Kiddis unterwegs, Schlittenfahren macht auch Spass 🙂
Habe eben auch deine Doku mit der HUE gesehen – TOP! Da spare ich mir den Umweg über IFTTT…
Gruß
Andreas
Hallo Andreas,
ich habe über das Wochenende auch an einer Statusrückmeldung der Philips Hue Lampen in der CCU2 gearbeitet. Funktioniert einwandfrei und wird in den kommenden Tagen als Schritt-für-Schritt Anleitung veröffentlich.
Gruß Erhard
Update: Inzwischen habe ich eine Schritt für Schritt Anleitung für die Abfrage des Hue-Lampenstatus erstellt.
Hallo Erhard,
das CUxD Gerät hat in der Tat gefehlt – Danke für den Tipp!
Habe jetzt gute Werte bis auf 2 Variablen:
W_Windrichtg: -9999.00
W_Windgeschwindigkeit: -16088.40 km/h
Hab ich da noch was falsch bei den Variablen definiert?
Gruß
Andreas
Hallo Andreas,
bitte rufe die XML-Daten von wunderground per http-Befehl im Browser ab und kontrolliere im Ergebnis für W_Windrichtg den Wert in und für W_Windgeschwindigkeit den Wert in . Wenn dort ähnlich „komische“ Werte stehen, liegt es an der Wetterstation.
Ich wüsste nicht, was du an den Systemvariablen falsch gemacht haben könntest.
Gruß Erhard
Lieber Erhard, leider kommen immer noch nur 0-Werte. Zumindest jedoch beim Skript testen jetzt 2 Ausgaben:
0,00 Grad Celsius
0,0 %
Vorher kam da gar nix.
Der CUxD Syslog zeigt folgendes an:
Jan 4 07:26:32 homematic-ccu2 daemon.info cuxd[18433]: pclose(wget -q -O – ‚http://api.wunderground.com/api/hier meine API/conditions/lang:DL/q/pws:IGOSLAR5.xml‘) exit(4) 0s
Hallo Tommy,
was passiert, wenn du den XML-Feed von Wunderground direkt im Browser mit der URL abfragst?
http://api.wunderground.com/api/hier meine API/conditions/lang:DL/q/pws:IGOSLAR5.xml
Ich habe alles mit meinem API-Key getestet, klappt perfekt!
Gruß Erhard
Tausend Dank lieber Erhard, es waren die Netzwerkeinstellungen, die das Problem verursachten.
Du bist Spitze!!!!
Hallo Thomas,
das freut mich!
Viel Spaß weiterhin mit deiner CCU2 und den Hausautomationsprojekten.
Hausautomation ist wie früher Modelleisenbahn: nimmt viel Zeit in Anspruch, bereitet viel Spaß und wird ständig ausgebaut.
Liebe Grüße Erhard
Hallo, meinen Key habe ich bekommen lässt sich auch auflösen.
http://api.wunderground.com/api/*key*/conditions/lang:DL/q/pws:IOSNABRC61.xml
Variablen habe ich alle angelegt. Allerdings kommt keine Auflösung in der Ccu….
muss ich die Variablen mit dem Kanal des CuxD gerätes verknüpfen?
den Script mit dem Gerät/Kanal verknüpfen?
Danke vorab für die Hilfe 🙂
Hallo Benni,
hast du CUxD nach meiner Anleitung installiert? Falls ja, liegt der Fehler wahrscheinlich bei mir. In meinem Beitrag hatte ich eine kleine Wichtigkeit vergessen. Jedes neue CUxD-Gerät erscheint zunächst im Posteingang der CCU2 und muss dort fertiggestellt werden. Danach muss die CCU2 neu gestartet werden, ich habe meine Installationsanleitung für den CUxD dahingehend ergänzt. Falls kein CUxD-Gerät im Posteingang zum Fertigstellen liegt, schicke mir bitte einen ScreenShot vom CUxD-Syslog. Den CUxD-Syslog erreichst du in der Web-Oberfläche der CCU2 über „Einstellungen/Systemsteuerung/Zusatzsoftware/CUx-Daemon/Einstellen“ und dann im CUxD „Info/Full Syslog“.
Gruß Erhard
Hallo Erhard, ich habe es auch nach Deiner Anleitung versucht. Auch die Meldung im Posteingang funktioniert. Ich habe auch eine feste Station eingegeben.
Alle Systemvariablen sind exakt erstellt. Ich bekomme keine Daten
Gruß
Stefan
Hallo Stefan,
deine CCU2 hat anscheinend keinen Zugriff auf einen DNS-Server um die URL von Wunderground in eine IP-Adresse aufzulösen.
Darauf deutet auch die Fehlermeldung „Try to get time from ntp.homematic.com“ im CUxD-Log hin.
Wahrscheinlich blinkt bei deiner CCU2 die LED Internet.
Wie hast du die IP-Adresse der CCU2 vergeben? Per DHCP-Server oder manuell?
Hast du evtl. unter „Einstellungen/Systemsteuerung/Netzwerkeinstellungen/IP-Einstellungen“ den Haken gesetzt und keinen „Bevorzugter DNS-Server“ angegeben?
Ich empfehle die IP-Adresse der CCU2 und den genutzten DNS-Server in deinem Internet-Router (z.B. deiner Fritz!Box) zu ermitteln und diese Daten dann fest in der CCU2 einzutragen.
Nach der Korrektur der Netzwerkeinstellungen sollte das Skript ohne Probleme die Systemvariablen füllen.
Gruß Erhard
Hallo Erhard, meine CCU 2 (XXX.1.99) hängt auf dem Dachboden und ist über ein DLAN -> NETGEAR WNR 2200 (XXX.1.22) -> Fritzbox (XXX.1.1) verbunden.
Die Internetdiode blinkt NICHT !
Ich habe meiner HM die IP 192.XXX.1.99 vergeben.
Das Gateway liegt bei 192.XXX.1.1
Bevorzugter DNS-Server: 192.XXX.0.1
Die IP der CCU2 wird mir in der Fritz.box NICHT angezeigt, jedoch im nachgeschalteten WNR 2200 (192.XXX.1.22) Dort kann ich die IP der HM auch ablesen.
Gruß Stefan
Hallo Stefan,
der interne DNS-Server ist in der Regel der Internet-Router, also deine Fritz!Box.
Deine Fritzbox hat die IP-Adresse 192.XXX.1.1 und als DNS-Server hast du die 192.XXX.0.1 angegeben.
Du hättest somit zwei IP-Subnetze in deinem Netzwerk!
Wenn du dir nicht sicher bist, kannst du zum Test auch die beiden öffentlichen Google DNS-Server verwenden:
8.8.8.8 und 8.8.4.4
Mit einem oder beiden diese DNS-Server sollte die Namensauflösung in deiner CCU2 klappen. Danach sollte die Fehlermeldung „Try to get Time from …“ im CUxD-Syslog verschwinden und des wunderground-Skript die Systemvariablen mit Daten füllen.
Gruß Erhard
Also ich bin völlig verwirrt … ich komme hier gar nicht mehr weiter … keinerlei Veränderung … per Email könnte ich wenigstens Bilder anhängen …
Hallo Stefan,
ich gehe davon aus, dass du einen Windows Rechner benutzt. Unter Windows 7/8 kannst du über [Start]/[Ausführen]/[cmd] in das Terminal gelangen.
Gibt dort bitte den Befehl ipconifg /all ein. Anschliessend erscheint die IP-Konfiguration deiner Netzwerkschnittstellen LAN/WLAN. Dabei wird auch die IP-Adresse deines Gateways angegeben, diese IP-Adresse in der Netzwerkkonfiguration deiner CCU2 eintragen.
Gruß Erhard
Hallo,
erstmal vielen, vielen Dank für die Anleitung. Ich habe alle Systemvariablen eingeplegt und im Programm auch das komplette Script mit meiner API eingepflegt. Die CuxDaeomon ist auch entsprechend der Anleitung auf der Seite eingerichtet. Aber ich erhalte nur Null-Werte und ??? in der Statusanzeige.
Ich wäre für eine kurze Hilfestellung sehr dankbar.
Vielen Dank im Voraus
Hallo Maurice,
bist du sicher, dass du das angelegte CUxD-Gerät im Posteingang der CCU2 bestätigt hast? Anschliessend musst du unbedingt die CCU2 einmal neu starten, sonst steht das neue CUxD-Gerät nicht in allen Funktionen zur Verfügung.
Falls du beide Punkte beachtet hast, schaue bitte im CUxD-Syslog nach der Fehlermeldung und schicke mir diese evtl. einfach zu.
Gruß Erhard
Hallo Erhard,
ich hatte das angelegte CuxD im Posteingang und bestätigt. Anschließend auch die CCU2 noch mal neu gestartet. Mein Syslog sieht wie folgt aus:
[Syslog durch Admin gelöscht]
Hallo Maurice,
bitte rufe das HomeMatic-Programm von Hand OHNE Wenn-Bedingung auf und kopiere anschliessend den CUxD-Syslog. In dem von dir übersandten Syslog war keine Fehlermeldung bzgl. des CUxD-Aufrufs drin.
Gruß Erhard
Hallo Erhard,
die WENN-Funktion wurde nun von mir gelöscht und über „Status und Bedienung in der CCU2 gestart. Hier ist das Ergebnis der Syslog:
Jan 29 21:39:50 homematic-ccu2 local0.err ReGaHss: Error: IseXmlRpc::CallGetValue: CallXmlrpcMethod failed [../Platform/DOM/iseXmlRpc.cpp (1447)]
[Rest vom Syslog durch Admin gelöscht]
Ich danke schon mal herzlichst,
Maurice
Guten Abend Maurice,
die häufig auftretende Fehlermeldung deutet auf ein Skript hin, dass Amok läuft. In welcher Frequenz rufst du denn das Wunderground-Skript auf. Als ob das Skript die Systemvariablen nicht füllen kann, da es gerade schon wieder gestartet wird! Bitte deaktiviere das Wunderground-Skript, indem du das Häkchen unter „Programme/Verknüpfungen“ bei „Aktion“ weg nimmst. Dann warte eine kurze Zeit und schaue wieder in das CUxD-Syslog, ob du neue Fehlermeldungen laut Zeitstempel findest.
Gruß Erhard
Hallo Erhard,
sorry, jetzt habe ich noch mehr Fehlermeldungen. Ich glaube ich mache alles noch mal neu. Also das Gerät bei CUx-Daemon neu installieren und das Programm mit dem Skript neu schreiben. Nur die Systemvariablen lasse ich drin, hier liegt aus meiner Sicht nämlich kein Fehler vor. Anbei der neue Syslog-Auszug:
>…
Jan 30 21:22:07 homematic-ccu2 local0.err ReGaHss: Error: IseESP::SyntaxError= Error 1 at row 2 col 20 near ^ ! Wetterdaten Datteln – Temperatur ermitteln !Stand 03.04.2014 http://homema^M [../Platform/DOM/iseESP.cpp (1067)]
Jan 30 21:22:07 homematic-ccu2 local0.err ReGaHss: Error: ParseProgram: SyntaxError= ! Wetterdaten Datteln – Temperatur ermitteln
>…
[Rest vom Syslog durch Admin entfernt]
Herzlichen Dank noch mal,
Maurice
Hallo Maurice,
ich würde das wunderground HomeMatic-Programm, inkl. Skript, von der CCU2 löschen und anschliessend die CCU2 durchstarten. Einen kleinen Moment warten und anschliessend in den CUxD-Syslog schauen. Wenn jetzt die Fehlermeldungen aufhören, ist es tatsächlich das wunderground Programm.
Ich habe heute mein Skript von meinem Blog kopiert und ausprobiert, funktioniert einwandfrei.
Wie kopierst du das Skript von meinem Blog? Bitte direkt über die Zwischenablage und nicht über einen Text-Editor.
Gruß Erhard
Hallo Erhard,
genau, ich habe es direkt und komplett rauskopiert, allerdings ohne die Bezifferung der Zeilen. Habe ausßer meiner API und der Wetterstation nichts verändert. Die url funktioniert im Browser auch super. Habe nun alles, bis auf die 16 einzelnen Systemvariablen, gelöscht und beginne von vorne. Irgendwo habe ich da wohl einen Fehler drin… Ich gebe gleich auf jeden Fall mal eine Info.
Herzlichen Dank,
Maurice
Hallo Maurice,
bitte nutze zum Kopieren des Skripts unbedingt die Kopierfunktion oben rechts aus der Titelleiste des Skript-Fensters. Dann werden die Zeilennummern automatisch ausgeblendet und du kopierst dir keine ungültigen Zeichen in dein Skipt.
Gruß Erhard
Hallo Erhard,
leider nichts zu machen. CuxDaemon noch upgedatet und alles neu formatiert und das Skript wie beschrieben rauskopiert. Immer noch werden die Fragezeichen und Nullen als Werte ausgegeben.
Viele Grüße
Maurice
Hallo Maurice,
was steht jetzt nach dem Ausführen des wunderground-Programms im Syslog?
Liebe Grüße Erhard
Hallo Erhard,
leider immer noch diese Fehlermeldungen. Ich bin zwischenzeitlich auch mit meinen Ideen am Ende. Selbst die Systemvariablen habe ich noch mal neu eingegeben, um Fehler zu vermeiden. Auf einer Internetseite habe ich gelesen, dass das Problem von dom.GetObject in Skripten erzeugt werden kann, wenn es keine passende ID findet. Halte ich aber für unwahrscheinlich, da das Skript bei allen anderen läuft.
Hier der Auszug:
Jan 31 22:41:01 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 102 0x66 [3] 0 0x00 [4] 0 0x00 [../Platform/DOM/iseESPexec.cpp (11622)]
Jan 31 22:41:45 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 102 0x66 [3] 0 0x00 [4] 0 0x00 [../Platform/DOM/iseESPexec.cpp (11622)]
Übrigens, ich habe auch das Cux Geräte im KEY|EXEC_TIMEOUT von 10 auf 2 Minuten gestellt. Aber auch erfolglos.
Viele Grüße
Maurice
Hallo Maurice,
deine CCU2 kann anscheinend den DNS Namen nicht auflösen. Kann es sein, dass die Internet-LED an deiner CCU2 blinkt?
Bitte schicke mir mal einen Screen-Shot von „Einstellungen/Systemsteuerung/Netzwerkeinstellung“ an erhard@simdorn.net.
Welche AddOns hast du auf deiner CCU2 instatlliert?
Gruß Erhard
Hallo Erhard,
den Screenshot habe ich dir auf deine Mailadresse geschickt. Die Internet-LED leuchtet, blickt aber nicht. Zudem funktioniert die CCU2 sonst einwandfrei.
Außer CuXDeamon und meine-homematic laufen keine weiteren Addons.
Viele Grüße
Maurice
Hallo Maurice,
leider erkenne ich im Moment für dein Problem auch keine Lösung. Sorry!
Gruß Erhard
Guten Morgen Erhard,
kein Problem! Ich lasse meine Eingaben mal im Sytem hinterlegt und probiere weiter. Sollte ich eine Lösung finden, melde ich mich bei dir und werde berichten.
Besten Dank auf jeden Fall,
Maurice
Hallo Maurice,
ich bleibe auch dran, lasse ungern Probleme ungelöst!
Liebe Grüße Erhard
Hallo Erhard,
ich habe gelesen, dass die System.Exec manchmal probleme macht. Im Handbuch von CuxD habe ich auf Rat folgende Passage gefunden:
5.8.2 System.Exec (16 Kanäle)
Dieses Gerät dient als Ersatz der undokumentierten und fehleranfälligen system.exec() Funktion auf der CCU. Die Funktionalität wird über das Lesen bzw. Schreiben von Daten- punkten eines HM-Gerätes abgebildet. Damit existiert eine einfache Möglichkeit zum direkten Ausführen von Systembefehlen aus der WebUI bzw. der CCU-Logikschicht. Die konfigurierte Befehlszeile wird mittels C-Funktion system() bzw. popen() als überwachter Hintergrundprozess ausgeführt. Die Überwachung kann verhindert werden, wenn am Ende der Befehlszeile ein & Zeichen steht.
Was aber nicht, wo ich „&“ Zeichen einfügen soll.
Viele Grüße
Maurice
Hallo Maurice,
das &-Zeichen muss folgendermaßen an die Befehlszeile angehängt werden:
!hier ist die Abfrage mit CUxD
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'&");
Bitte nicht bei den einfachen und doppelten Anführungszeichen durcheinander kommen, 😉
Gruß Erhard
Hallo Erhard
Vielen Dank für Deine grosse Arbeit, funktioniert „fasst“ alles… Nur eben die Umlaute nicht…
W_Windrichtung: Südost
Muss ich irgend etwas noch anpassen?
Hallo Claudio,
einfach folgenden Abschnitt im Script austauschen:
! S # Süd ***
if (anfangsbuchstabe == "S") {
! 4 # Süd
if (word_laenge == 4) {daten = "Süd";}
! 7 ä Südost
if (word_laenge == 7) {daten = "Süd-Ost";}
! 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" ;}
}
oder folgende Zeilen ergänzen:
! 7 ä Südost
if (word_laenge == 7) {daten = "Süd-Ost";}
Gruß Erhard
Hallo Erhard, vielen Dank für dieses tolle Manual, hat auf anhieb alles geklappt. Super vielen Dank
Peter
Hallo Peter,
vielen Dank für dein Feedback! Es macht mir immer wieder Freude, wenn ich weiterhelfen kann.
Gruß Erhard
Echt Klasse , vielen Dank für die ausführliche Anleitung !
Lieber Erhard,
erstmal Glückwunsch zu deiner guten Website.
Leider habe ich es nach mehrstündiger Installation und Syntaxüberprüfung nicht geschafft den Wetterdatenabruf zum Laufen zu bekommen.
Habe alle Hilfestellungen aus den Kommentaren ausprobiert, die CCU mehrfach neu gestartet, die Scriptprüfung läuft fehlerfrei, etc…
Aber immer wenn ich das Programm starte dreht sich für 2 Sekunden die Eieruhr, es erfolgt aber keine Ausgabe von Daten. (der XML-Script im Browser sieht aber gut aus….)
Was mach ich falsch ?
Gruß Mike
Mar 14 21:33:01 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 97 0x61 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64 [../Platform/DOM/iseESPexec.cpp (11622)]
Sorry, habe vergessen zu erwähnen das der u.a. CuxD SysLog ausgegeben wird…
Hallo Erhard,
danke für Deine prima Seite mit vielen Anregungen.
Ich beschäftige mich schon seit einigen Jahren mit der Homematic, aber über einfache Wenn/Dann Programme bin ich nie hinausgekommen. Viele Komponenten habe ich mit PocketControl HM bedient und gesteuert.
Deine Ausführungen und Beispiele haben in mir den Wunsch geweckt, mehr aus der Hausautomation zu machen.
Angefangen habe ich mit WU Script und die Daten meiner Wetterstation in meiner Homematic zu verwenden. Ich habe mich schon immer geärgert, dass ich die Werte meiner Davis Vantage Pro nicht einlesen konnte. Der Weg über WU ist genial, danke.
Ein schönes Wochenende aus dem Münsterland
Andreas
Hallo Andreas,
ich freue mich, wenn mein Blog dir einige Anregungen gebracht hat. Das Hobby HomeMatic ist fast unerschöpflich, es gibt immer wieder neue Möglichkeiten seiner Kreativität freien Lauf zu lassen.
Gruß Erhard
Hallo Erhard ,
Ersteinmal finde ich deine Beiträge enorm. Ich habe schon einige Projekte auf meiner Ccu2 umgesetzt.was mir besonders am Herzen liegt ist das Wetter.ich betreibe eine Davis Vantage pro2 mit Meteohub die ja auch eine xml liefert.wie kann ich die Daten in meiner ccu einbinden? Könntest du mir dabei helfen, ich bin ebnet nicht so ein Programmierer der das alleine schaffen könnte.ich brauche nur ein Beispiel zB die Temperatur auszulesen.ich wäre dir sehr dankbar.
Mit freundlichen Grüßen , Michael Engelhardt
Hallo Michael,
ich kenne die Davis Vantage pro2 leider nicht, aber mit Hilfe von Meteohub sollte eine Übertragung zu wunderground.com einfach möglich sein. Sicherlich kann man auch die xml-Datei der Davis Vantage pro2 direkt durch die CCU2 abrufen und verarbeiten. Um dazu eine Anleitung schreiben zu können, fehlt mir allerdings die Wetterstation. Ich habe einen Windsensor im Einsatz, der ebenfalls direkt xml-Daten liefert die ich direkt über die CCU2 abrufe und auswerte. Hast du evtl. eine Anleitung wie du die xml-Daten im Browser abrufen kannst? Wenn ja, benötige ich diesen Aufruf und eine xml-Datei als Beispiel. Solltest du beides liefern können, nehme ich dir Herausforderung gerne an.
Gruß Erhard
Hallo Erhard, danke für die Antwort.
Also zunächst einmal habe ich die Wetterstation Davis Vantage Pro2 die ihre Daten per Funk auf meinem kleinen Wetterserver (Meteohub)in einem Verzeichnis eine Datei ablegt die jede Minute aktuallisiert wird (allsensors.xml)Der Meteohub-Server läuft 24/7h und befindet sich in meinem Netzwerk (192.168.XXX.XXX) Dies allsensors.xml wertet alle Sensoren meiner Davis aus. Über dem Brauser gebe ich die IP-Adresse von diesem Verzeichnis ein ,(http://192.168.XXX.XXX/meteograph.cgi?text=all) und dann werden mir alle Sensoren (Variabelen)mit den aktuellen Werten dargestellt.zB:
actual_th0_temp_c 2.7
actual_th0_temp_f 36.9
actual_th0_hum_rel 93
actual_th0_hum_abs 5.4
actual_th0_dew_c 1.7
actual_th0_dew_f 35.1
actual_th0_heatindex_c 2.7
actual_th0_heatindex_f 36.9
actual_th0_humidex_c 1.0
actual_th0_humidex_f 33.8
So habe ich die Möglichkeit hunderte von Sensoren , Variablen darzustellen.
Also die Variable für zB. Temperatur actual_th0_temp_c
im Browser :http://192.168.X.X/meteograph.cgi?text=actual_th0_temp_c
enter und als Wert wird mir 2,7 angezeigt.
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.
Ps Danke vielmals für deine Unterstützung
mfg Michael
Hallo Michael,
die Aufgabe klingt simple, ich benötige allerdings den kompletten im Browser dargestellten Quelltext. Je nachdem welchen Browser du verwendest, gelangst du entweder über das Menü [Ansicht]/[Quelltext] oder über den rechten Maustastendialog zum Quelltext des gelieferten Ergebnis. Bitte kopiere mir diesen Quelltext, dann kann ich dir am Wochenende ein entsprechendes Programm erstellen.
Gruß Erhard
Hallo Erhard, habe gerade versucht dir den Qellcode zu senden , aber hat nicht funktioniert. Ist wohl etwas zu groß für die Kommentar spalte .
Aber ich war auch nicht ganz untätig ,
var url = „http://192.168.X.X/meteograph.cgi?text=actual_th0_temp_c“;
dom.GetObject(„CUxD.CUX2801001:2.CMD_SETS“).State(„wget -q -O – ‚“#url#“‚“);
dom.GetObject(„CUxD.CUX2801001:2.CMD_QUERY_RET“).State(1);
string srueck = dom.GetObject(„CUxD.CUX2801001:2.CMD_RETS“).State();
WriteLine(srueck);
dom.GetObject(ID_SYSTEM_VARIABLES).Get(„Davis Aussentemperatur“).State(srueck);
(ist aber nicht auf meinem Mist gewachsen)
Funktioniert !! (Freu) Aber vielleicht sollten wir trotzdem weiter machen , mit einem Projekt . Die Davis Wetterstation ist glaube ich ziemlich verbreitet und sie gehört auch zu den Profistationen , was mir gelungen ist , ist ja für EUCH Profis kein Problem. Ich weis noch nicht einmal wie ich dir den Quellcode zukommen lassen soll.
Was habe ich gemacht , zuerst eine Variable erstellt mit dem Typ Zeichenkette,
dann ein Program
Bedingung: Wenn…
Periodisch Ganztägig beginnend am 22.03.2017
Aktivität: Dann…Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
var url = „http://192.168.X.X/meteograph.cgi?text=actual_th…
Aktivität: Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
Ich finde das passt ganz klasse in deiner Schritt für Schritt Anleitung !!
Hallo Michael,
prima, da kannst du wirklich stolz sein! Du scheinst das Prinzip des wget-Aufrufs verstanden zu haben, damit kannst du jetzt weitere Daten in deine CCU2 einbinden. Ich habe einen professionellen Wettersensor (Windrichtung, Windgeschwindigkeit) für den Neubau meiner Tochter besorgt. Er besitzt eine Schnittstelle, die ebenfalls per wget Daten zu Verfügung stellt. Sobald ich die Zeit für dieses Projekt finde, werde ich dazu eine Schritt für Schritt Anleitung dazu erstellen.
Gruß Erhard
Hallo Herr Simdorn,
mit Interesse verfolge ich Ihre Arbeit, das Projekt „wunderground“ läuft in Ihrer Variante störungsfrei und absolut zuverlässig.
Einen kleinen Schönheitsfehler bekomme ich allerdings nicht weg:
Während bei der „W_Windrichtung“ „Süd-West“ korrekt umgewandelt wird, klappt das bei „W_Windbedingungen“ nicht.
Haben Sie eine Lösung ?
Beste Grüße und „Weiter so“
Thomas Flächsig
Hallo Thomas,
nenne mir bitte die falsch angezeigten Windbedingungen, dann erweitere ich das Script um die Fehlerkorrektur.
Gruß Erhard
Hallo Erhard,
Danke für die schnelle Antwort (y)
Bisher ist mir das nur bei „Süd-West“ aufgefallen, und NUR in den „W_Windbedingungen“, bei „W_Windrichtung“ ist es korrekt.
Ansonsten ist bei uns gerade Windstille, so dass ich auf Wechsel-Winde zur Beobachtung hoffen muß 🙂
Danke vorab und Beste Grüße
Thomas
Hallo Thomas,
ich habe bei keiner Wunderground-Wetterstation in den Windbedingungen eine Himmelsrichtung genannt bekommen. Bitte nenne mir die Stationskennung der Wunderground-Station, die du abfragst. Ich werde die Stationskennung anschliessend in deinem Beitrag unkenntlich machen.
Gruß Erhard
Hallo Erhard,
aktuell ist mir lediglich „Südwest“ bei den „Windebedingungen“ aufgefallen – Vielen Dank vorab (y)
Gruß Thomas
Hallo Thomas,
die korrekte Darstellung vom „ü“ in den Systemvariablen W_Windrichtung und W_Windbedingungen erledige ich jetzt per Suchen & Ersetzen. Bitte die entsprechenden Code-Zeilen austauschen bzw. ergänzen
Gruß Erhard
Hallo Erhard,
ich bin auch ein Bewunderer, der Dich um Dein Wissen im Umgang mit Skripten beneidet. Ich habe auch die Wetterdaten von Wunderground in meine HomeMatic eingebunden. Da ich Skripte nicht „wirklich“ verstehe, schreibe ich sie immer ab und deshalb war ich sehr glücklich, als die Daten von Wunderground tatsächlich bei mir angezeigt wurden.
Ohne ein „Aber“ geht es leider auch bei mir nicht. Deine nachgereichten Skriptzeilen für W_Regen und W_Solar habe ich auch wie beschrieben, ans Ende des Skriptes kopiert. Natürlich habe ich auch 2 neue Systemvariable vom Typ Zahl angelegt.
Das Ergebnis ist aber gleich 0 und das in Wirklichkeit. In der Anzeige steht 0.0 obwohl auf der Webseite Werte angezeigt werden. Ich kann mir keinen Grund dafür vorstellen, deshalb hier mein Hilferuf an Dich. Die Fehlerprüfung im Skriptfenster ist auch i.O.
Vieleicht hast Du eine Idee.
Tschüß erst einmal
Heiko
Hallo Heiko,
vielleicht eine dumme Frage: Heissen die beiden neuen Variablen auch wirklich „W_Regen“ und „W_Solar“? Und wenn ja, sind die Variablennamen genauso geschrieben (groß/klein)?
Eine Variable mit dem Wert 0 deutet immer darauf hin, dass sie nicht vom Programm angesprochen wurde.
Bitte nenne mir die Kennung der Wunderground-Station, die du abfragst. Ich werde den Stationsnamen anschliessend unkenntlich machen.
Gruß Erhard
Hallo Erhard,
was ich beim Umgang mit einem PC (und den Problemen) gelernt habe, es gibt keine dumme Fragen. Die Schreibweise ist immer ein Problem, deshalb benutze ich immer drag and drop. Ich denke auch, dass das Programm mit der Skriptzeile nicht zurecht kommt-aber warum?
Meine Seite ist:https://www.wunderground.com/personal-weather-station/dashboard?ID=xxxxxxxx#history
Ich würde Dir gern ein paar Screenshots schicken, aber dieses Kommentarfenster will das nicht.
Tschüß Heiko
Hallo Heiko,
bitte schicke mir die Screen-Shots direkt an meine Mail-Adresse erhard@simdorn.net.
Gruß Erhard
Frohe Ostern!
Ich versuche einen Forecast für die Regenmenge der nächsten drei Tage zu bekommen; schaffe es aber nicht, das XML-File, das ich von der API mit /forecast/ bekomme, zu parsen.
Kann mir hier jemand helfen?
Gruß Axel.
Hallo Axel,
den XML-File für den Forecast kannte ich noch nicht, welche Werte möchtest du aus dem XML-File auslesen?
Ich erstelle dazu gerne eine separate Anleitung.
Gruß Erhard
Hallo Ehrhard,
zunächst einmal vielen Dank, dass du dein Wissen an uns weiter gibst. Ich konnte schon viel daraus lernen, zumal ich hier noch ein Newkommer bin.
Nun zur eigentlichen Frage. Der o.a. Script funktionier bei mir einwandfrei. Aber ich hatte vergessen den richtigen Ort einzugeben. Ich wohne in Diemarden, die Wetterdaten kann ich auch im Internet abfragen, aber ich habe keine Ahnung, wie ich den Ort korrekt benennen muss. ….|Hessen16.xml läuft wie gesagt, aber gebe ich Diemarden, ein Ort in Gleichen, anstatt Hessen16 ein, klappt es nicht mehr. Auch der Versuch mit Göttingen blieb erfolglos. Kannst du mir einen Tip geben?
Vielen Dank und liebe Grüße
Rüdiger
Hallo Rüdiger,
rufe im Web-Browser http://www.wunderground.com auf und gebe im Suchschlitz Diemarden ein. Es erscheint eine Wetterstation in Diemarden. Jetzt klickst du unter Diemarden auf Gleichen, es erscheint der Name der Wetterstation „IBSKLEIN3“. Damit sollte es auch bei dir klappen!
Liebe Grüße Erhard
Hallo Erhard,
vielen Dank für die Antwort.
Habe es auch gleich abgeändert und läuft.
Danke
Liebe Grüße Rüdiger
Hallo, ich hab das tatsächlich dank der super Anleitung hingekriegt. Frage: Die Browserversion bei wunderground gibt auch die Regenmenge aus. Da gibt es im Script aber keine Variable dafür oder hab ich das übersehen?
Danke für die Mühe
Hallo Carlo,
das Script kann jederzeit auch um die Regenmenge erweiterter werden, ich melde mich später dazu.
Gruß Erhard
Hallo Erhard,
habe mich endlich auch wieder intensiver mit der CCU2 auseinandersetzen können und dein Wetterscript ausprobiert. Nach ein paar dummen Fehlern – Kleinigkeiten, gehört wohl dazu 😉 – läuft alles einwandfrei. Danke dafür!
Leider bieten nicht alle Wetterstationen alle Informationen, aber dafür kann ja dein Script nichts.
Bemerkenswert finde ich noch deine Geduld, mit der du hier Leuten hilfst. Chapeau!
Danke Dir und Dir weiterhin so viel Spaß mit der Automatisierung wie dem Rest dieser Runde! 🙂
Grüße,
Thomas.
Hallo Thomas,
im Moment passiert nicht viel auf meinem Blog, aber die Hausautomation geht bei mir in die nächste Runde. Ich habe in den letzten Wochen ioBroker auf einem Cubiboard aufgebaut und werde meine Erfahrungen in den kommenden Wochen hier niederschreiben. Es bleibt spannend!
Gruß Erhard
Vielen lieben Dank für Ihre tolle Arbeit. Mit dieser Hilfe ist es mir gelungen, Wetter- und Astrodaten einzubinden. Sie erwähnen auch, dass Sie ein Script für die Forecast Meldungen erstellen wollen.
Ich habe mich vergeblich daran ausprobiert. Die Variablen wie „title“ und fcttext_metric“ kommen ja mehrfach vor und ich finde in der Scriptbeschreibung keine richtige Schleife. Sie haben erwähnt, dass Sie dazu mal was machen wollten – kann aber auf Ihrer Seite nicht finden.
Hilfe wäre toll.
Guten Abend Frank,
welche Werte möchtest du konkret aus dem Forecast-XML extrahieren?
Gruß Erhard
Hallo wie kann ich die Wetterdaten in CUxD Gerätetyp 90 (Wetter Kombisensor) einfügen das ich die Wetterdaten in PockedControl HM als Gerät (außerhalb) vom haus sehe ???
Hallo Eddi,
mit diesem Thema habe ich mich bisher nicht weiter beschäftigt. Ich bin inzwischen zur Steuerung und Visualisierung meiner Hausautomation auf ioBroker umgestellt. PockedControl HM nutze ich zwar weiterhin, mehr zur Bedienung meiner Hausautomation von unterwegs. Da aber inzwischen Komponenten weiterer Hersteller in meine Hausautomation „eingezogen“ sind, reicht mir PocketControl HM leider nicht mehr aus.
Liebe Grüße Erhard
Guten Tag Herr Simdorn,
ich hatte vor 4 wochen schon einen ersten kontakt hier aufgenommen
und hatte den api key an sie geschickt…
aber die beiträge die ich hier angezeigt bekomme gehen nur bis 8,7,2017
=== Beitrag gekürzt durch Admin ===
Hallo Herr Kerber,
ich war die letzten Wochen sehr beschäftigt und kam deshalb nicht zur Beantwortung der Fragen… Sorry!
Schön, dass Sie inzwischen die Lösung selbst gefunden haben. Dank für das Feedback.
Liebe Grüße Erhard Simdorn
herr simdorn
ich habe meinen fehler gefunden
es lag einzig und allein bei wunderground
die wetterstation und der api key sind verbunden
i8ch muss die wetterstation als Favorite Cites so abgespeichert haben
ausserdem ist bei der auswahl des staionsnamens vorsicht geboten
der angezeigte namen Z.B. Am Wegesrand wird bei der eingabe im broswer
umgewandelt in „Am%20Wegesrand“ das habe ich dann auch so im script eingegeben
danke trotzdem
mfg
norbert kerber
Hallo Herr Kerber,
ich schalte Ihren Tipp zur Lösung frei, damit evtl. andere Leser diesen Tipp lesen können.
Liebe Grüße Erhard Simdorn
Hallo Erhard,
ich bin begeistert von Deinen Seiten – ohne die vielen Anregungen wäre es mir nicht möglich gewesen, die vielen Möglichkeiten der homematic so schnell zu nutzen.
Die Wetterdaten meiner Froggit HP1000 Wetterstation stehen nun auch in der homematic zur Verfügung. Alles hat auf Anhieb geklappt.
Vielen Dank für Deinen Blog
Andreas
Hallo Andreas,
vielen Dank für dein Feedback! Freut mich, dass bei dir alles auf Anhieb geklappt hat.
Gruß Erhard
Hallo Herr Simdorn,
bei der Fehlerprüfung im Scripteditor der CCU2 trat der nachfolgende Fehler auf:
Error 1 at row 27 col 9 near ^
! Wetterdaten von wunderground.com holen
!Stand 03.04.2014 http://homemat
Parse following code failed:
!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 Zahl
!Aussentemperatur Zeichenkette (Erweiterung E.Simdorn)
!Luftfeuchtigkeit Zeichenkette (Erweiterung E.Simdorn)
=== Script gekürzt durch Admin ===
Außerdem möchte ich mir die Inhalte der Variablen anzeigen lassen. Kann ich das mit dem CUxD Gerät90 (Universial Wrapper Device) realisieren? Haben Sie ggf. eine Scriptcodeerweiterung?
Vielen Dank im Voraus.
Hallo Tobias,
da der Fehler noch in dem Kommentarteil des Scripts angezeigt wird, handelt es sich bestimmt um einen Kopierfehler! Bitte kopiere das Script nochmal aus meinem Beitrag über die Kopierfunktion rechts oben im Script-Fenster. Dann sollte das Problem behoben sein.
Die entsprechenden Werte werden in normale Systemvariablen geschrieben und somit kannst du Sie ganz normal anzeigen lassen!
Gruß Erhard
Tja, gibt es eine Alternative zu http://www.wunderground.com, weil hier werden keine API-Keys mehr vergeben.
Hallo Patrick,
vielen Dank für deinen Hinweis, ich habe meinen Artikel entsprechend ergänzt. Es gibt verschiedene andere Wetterdienste, die schaue ich mir bei Gelegenheit mal genauer an und schreibe dann dazu eine kurze Anleitung.
Gruß Erhard
Hallo Erhard,
ich hab vorhin das Skript für die Wettervorhersage (https://homematic.simdorn.net/wettervorhersage-von-wunderground/) von Wunderground angelegt und es funktioniert auch Super.
Jetzt wollte ich noch die Wetterdaten einfügen und habe das entsprechende Skript von oben hinterlegt. Leider bleiben die Systemvariablen leer. Der api key und die CUxD sind identisch zum anderen Skript.
Kann ich beides nicht gleichzeitig ausführen?
Gruß
Michael
Hallo Michael,
was meinst du mit „Jetzt wollte ich noch die Wetterdaten einfügen“? Wie hast du festgestellt, dass das Script läuft?
Gruß Erhard
Hallo Erhard,
Seit ein paar Tagen bekommen wir plötzlich keine Daten mehr von Wonderground. Auf der Homepage haben wir festgestellt, dass kein API Key mehr eingetragen war.
Wir haben daraufhin einen neuen generiert, der ist jetzt deutlich länger. Leider funktioniert der Abruf der Daten trotzdem nicht, es kommt immer der Fehler „Key not found“.
Hast du eine Idee zur Lösung des Problems?
Danke und Gruß,
Jörg und Anna
Hallo Erhard,
wer eine eigene Wetterstation hat und die Daten an wunderground sendet, kann weiterhin seine eigenen Wetterdaten per api (kostenlos) beziehen.
Anbei das angepasste Skrip. Basis dafür war Dein Skript.
Wenn Du möchtest, kannst Du es gerne veröffentlichen (ich habe nicht so eine schöne Webpage)
Gruß
Andreas
***************************************************************************
! Wetterdaten von wunderground.com holen – eigene Wetterstation erforderlich, die Daten an wunderground sendet
!Stand 14.04.2019
!zuerst folgende Systemvariablen anlegen
!Achtung: keine vergessen und exakte Schreibweise mit Copy & Paste
!W_Station Zeichenkette
!W_Aktualisierung Zeichenkette
!W_Temperatur Zahl °C
!W_Luftfeuchte Zahl %
!W_Windrichtg Zahl °
!W_Windgeschwindigkeit Zahl km/h
!W_Windboeen Zahl km/h
!W_Luftdruck Zahl mbar
!W_Taupunkt Zahl °C
!W_UV Zahl
!W_Solar Zahl Watt
!W_Regenrate Zahl mm/h
!W_Regensumme Zahl mm am Tag
!W_Hitzeindex Zahl °C
!W_Temp_gefuehlt Zahl °C
!Aussentemperatur Zeichenkette (Erweiterung E.Simdorn)
!Luftfeuchtigkeit Zeichenkette (Erweiterung E.Simdorn)
! Weiter Ergaenzungen durch E.Simdorn
! Temperatur und Luftfeuchtigkeit jeweils in einen Text-String umwandeln und formatieren
! Temperatur und Luftfeuchtigkeit jeweils in einen Text-String umwandeln und formatieren
! Wetter api: stationID=Deine Wetterstation, apiKey=Dein apiKey der Wetterstation, units: m (metrisch) oder e(englisch), format: xml (gibt es auch als json)
var url =“https://api.weather.com/v2/pws/observations/current?stationId=IHESSENG39&format=xml&units=m&apiKey=Dein_apiKey“;
!Abfrage mit CUxD
dom.GetObject(„CUxD.CUX2801001:1.CMD_SETS“).State(„wget –no-check-certificate -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 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));
daten = daten;
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));
!daten = daten.Substr(0, (word_position -11));
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);
! *****
! Temperatur real in string umwandeln und anschliessen den Dezimalpunkt gegen ein Komma austauschen
string TextTemp = zahl.ToString(2);
integer TPunkt = TextTemp.Find(„.“);
string TextTemp1 = TextTemp.Substr(0, TPunkt);
TextTemp1 = TextTemp1 # „,“# TextTemp.Substr(TPunkt +1, 2) # “ Grad Celsius“;
TextTemp = TextTemp1;
dom.GetObject(‚Aussentemperatur‘).Variable(TextTemp);
WriteLine(dom.GetObject(‚Aussentemperatur‘).Variable());
! *****
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 TextHumi = zahl.ToString(1);
integer TPunkt = TextHumi.Find(„.“);
string TextHumi1 = TextHumi.Substr(0, TPunkt);
TextHumi1 = TextHumi1 # „,“# TextHumi.Substr(TPunkt +1, 2) # “ %“;
TextHumi = TextHumi1;
dom.GetObject(‚Luftfeuchtigkeit‘).Variable(TextHumi);
WriteLine(dom.GetObject(‚Luftfeuchtigkeit‘).Variable());
! *****
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));
if (daten == -9999) {
daten = „0“;
}
integer zahl = daten.ToFloat();
dom.GetObject(„W_Windrichtg“).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));
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“;
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 = „windChill“;
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_Temp_gefuehlt“).State(zahl);
string word = „heatIndex“;
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_Hitzeindex“).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));
integer zahl = daten.ToFloat();
dom.GetObject(„W_UV“).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_Regenrate“).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_Regensumme“).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_Solar“).State(zahl);