User stellen ihre Haussteuerung vor
Moderator: Co-Administratoren
-
Lukas22
- Beiträge: 4
- Registriert: 11.02.2019, 14:41
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
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
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
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
-
hm_jan
- Beiträge: 9
- Registriert: 17.03.2017, 12:51
Beitrag
von hm_jan » 15.04.2019, 09:56
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
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..
-
hm_jan
- Beiträge: 9
- Registriert: 17.03.2017, 12:51
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
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
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.