Wunderground Wetter mit einfachem HM-Skript holen

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Lukas22
Beiträge: 4
Registriert: 11.02.2019, 14:41

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Lukas22 » 12.04.2019, 21:54

Die Variable habe ich nochmal kontrolliert. Wie gesagt momentan nur "Wetter_Temperatur".
Das Programm wird alle 5 min ausgeführt.
Hab gerade das neueste Update auf die CCU2 gespielt um auszuschließen das es daran liegt.
Leider hat auch das nichts gebracht.

Hier das Skript:

Code: Alles auswählen

var url = "https://api.weather.com/v2/pws/observations/current?stationId=XXXXXXX&format=xml&units=m&apiKey=XXXXXXXXXXXXXXXXXXXX";

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();


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("Wetter_Temperatur").State(zahl);
Zuletzt geändert von alchy am 14.04.2019, 23:12, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

hm_jan
Beiträge: 9
Registriert: 17.03.2017, 12:51

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von hm_jan » 14.04.2019, 11:00

Hallo Lukas
Habe dein Script jetzt auch noch einmal getestet und kann bestätigen die Variable wird gef+üllt und das Ergebnis ist 0
Irgenwas fehlt offensichtlich....grüße
Jan

Njdfg
Beiträge: 41
Registriert: 22.08.2016, 14:50
Wohnort: 40xxx Düsseldorf

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Njdfg » 14.04.2019, 17:38

Hallo zusammen,

hier meine Version mit ein paar Einträgen mehr.

Code: Alles auswählen

!Wetterdaten_Wunderground_holen
!Stand 13.04.2019  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_Temperatur               	Zahl      °C
        !W_Luftfeuchtigkeit        	Zahl       %
        !W_Windgeschwindigkeit 	Zahl       km/h
        !W_Windboeen               	Zahl       km/h
        !W_Regen_d                   	Zahl       l
        !W_Regen_h                   	Zahl       l
        !W_Luftdruck                 	Zahl       hPa
        !W_Ort			     	Zeichenkette
        !W_Windrichtung            	Zahl       °
         
      var url = "https://api.weather.com/v2/pws/observations/current?stationId=DEINE_STATION&format=xml&units=m&apiKey=DEIN_API_KEY";

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();

string word = "temp";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Temperatur").State(zahl);

string word = "obsTimeLocal";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("W_Aktualisierung").State(daten);

string word = "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));
real zahl = daten.ToFloat();
dom.GetObject("W_Windboeen").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));
real zahl = daten.ToFloat();
dom.GetObject("W_Windgeschwindigkeit").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_Regen_h").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_Regen_d").State(zahl);

string word = "stationID";
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 = "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));
dom.GetObject("W_Luftfeuchtigkeit").State(daten);

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));
dom.GetObject("W_Luftdruck").State(daten);

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));
string latin = daten.ToLatin();
dom.GetObject("W_Ort").State(latin);

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));
dom.GetObject("W_Windrichtung").State(daten);

hm_jan
Beiträge: 9
Registriert: 17.03.2017, 12:51

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von hm_jan » 14.04.2019, 22:43

Hallo Njdfg

vielen Dank für das Script....es funktioniert nun alles wieder so, wie es früher mit der alten API war.
Das einzige was ich noch erwähnen möchte ist, all die Leute die nur 0 Werte als ausgabe bei diesem oder einigen anderen Scripten bekommen:
Das Zertifikat von WUnderground wird vom wget auf der Homematci nicht erkannt und deswegen schlägt der Aufruf fehl.
Als kurzzeit Lösung den wget Befehl in den Scripten folgendermassen abändern:
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget --no-check-certificate -q -O - '"#url#"'");

Ich konnte nun auf die Schnelle nicht finden, was in anderen Beiträgen diesbezüglich erklärt wurde, aber eventuell hilft ja ein Firmware Update das einige Root Vertifikate gleich mit updated ?
Viele Grüße
Jan

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von alchy » 14.04.2019, 23:25


Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

hm_jan
Beiträge: 9
Registriert: 17.03.2017, 12:51

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von hm_jan » 15.04.2019, 09:56

alchy hat geschrieben:
14.04.2019, 23:25
>> dort entlang <<
Hallo Alchy, ja das habe ich ja in meinem vorigen Beitrag bereits geschrieben, daß man die Zertifikatsprüfung dahingehend überspringen kann, wenn man das Script folgendermassen abändert: wget --no-check-certificate -q -O - '"#url#"'")
Aber offensichtlich hat der Scriptersteller ja aktuellerere Root Zertifikate auf seiner CCUx drauf bei der der Certcheck funktioniert. Deswegen meine Frage, ob durch ein CCU Update neuerere Root Certs eingespielt werden....das konnte ich gestern abend leider nicht mehr überprüfen....

Njdfg
Beiträge: 41
Registriert: 22.08.2016, 14:50
Wohnort: 40xxx Düsseldorf

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Njdfg » 15.04.2019, 19:16

hm_jan hat geschrieben:
14.04.2019, 22:43
Hallo Njdfg

vielen Dank für das Script....es funktioniert nun alles wieder so, wie es früher mit der alten API war.
Das einzige was ich noch erwähnen möchte ist, all die Leute die nur 0 Werte als ausgabe bei diesem oder einigen anderen Scripten bekommen:
Das Zertifikat von WUnderground wird vom wget auf der Homematci nicht erkannt und deswegen schlägt der Aufruf fehl.
Als kurzzeit Lösung den wget Befehl in den Scripten folgendermassen abändern:
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget --no-check-certificate -q -O - '"#url#"'");

Ich konnte nun auf die Schnelle nicht finden, was in anderen Beiträgen diesbezüglich erklärt wurde, aber eventuell hilft ja ein Firmware Update das einige Root Vertifikate gleich mit updated ?
Viele Grüße
Jan
Servus Jan,
bei mir funktioniert das Script wie oben gepopstet.... haben den Zusatz mit dem Zertifikat nicht drin.... komisch...komisch.. :lol: 8)

hm_jan
Beiträge: 9
Registriert: 17.03.2017, 12:51

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von hm_jan » 16.04.2019, 09:56

Hallo Njdfg

darf ich fragen, welche CCU du hast (CCU2 oder 3) oder RaspberryPi und welche CCU Firmware ?
Bei mir: 2.41.9 auf einer CCU2

viele Grüße
Jan

Lukas22
Beiträge: 4
Registriert: 11.02.2019, 14:41

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Lukas22 » 16.04.2019, 13:49

Hallo Jan,
mit der Änderung des wget Befehls funktioniert es bei mir jetzt auch alles wie gewünscht 😊.
Hatte ich noch nirgends von gelesen, vielen Dank für den Hinweis!

GodsNumb
Beiträge: 4
Registriert: 09.01.2019, 21:44

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von GodsNumb » 12.05.2019, 01:02

Abend in die Runde,

wenn ich das richtig verstanden habe, geht WU nicht mehr (Sorry die letzten 5 Seiten waren sehr Chaotisch)

Kann man das "normale" Script, so anpassen das HTML Daten abgegriffen werden? Ich habe leider nicht sooooo die Kompetenz in dem Scripten ;-)

Und zwar geht es um folgende URL: http://stationdata.wunderground.com/cgi ... n=*STATION ID*
Genau das selbe, ohne API und XML. Würde ungern drauf verzichten.

Falls dies bereits hier schon mal diskutiert wurde, dann fettes sorry.

Antworten

Zurück zu „Projektvorstellungen“