Wunderground Wetter mit einfachem HM-Skript holen
Moderator: Co-Administratoren
Re: Wunderground Wetter mit einfachem HM-Skript holen
Hallo,
ich betreibe eine Homematic CCU2 im Zusammenspiel mit OpenHab. OpenHab generiert sehr viele Logeinträge durch Systemvariablen und Programme, die Leerzeichen enthalten, deswegen würde es mich interessieren wie man die Systemvariable WD0_Windrichtung 1 in WD0_Windrichtung_1 umbenennen kann. Dies würde ich gerne für WD0-WD3 machen und auch für Windrichtung 2 WD0 - WD3. Einfach die Systemvariablen umbenennen und im Skript die folgenden Zeilen
string F9 = "maxwind,dir,1,2,5,Windrichtung 2,";!Zeichenkette
und
string F11 = "avewind,dir,1,2,5,Windrichtung 1,";!Zeichenkette
anpassen, funktioniert nicht.
Danke für eure Hilfe.
VG Chris
ich betreibe eine Homematic CCU2 im Zusammenspiel mit OpenHab. OpenHab generiert sehr viele Logeinträge durch Systemvariablen und Programme, die Leerzeichen enthalten, deswegen würde es mich interessieren wie man die Systemvariable WD0_Windrichtung 1 in WD0_Windrichtung_1 umbenennen kann. Dies würde ich gerne für WD0-WD3 machen und auch für Windrichtung 2 WD0 - WD3. Einfach die Systemvariablen umbenennen und im Skript die folgenden Zeilen
string F9 = "maxwind,dir,1,2,5,Windrichtung 2,";!Zeichenkette
und
string F11 = "avewind,dir,1,2,5,Windrichtung 1,";!Zeichenkette
anpassen, funktioniert nicht.
Danke für eure Hilfe.
VG Chris
-
- Beiträge: 7
- Registriert: 13.05.2015, 16:08
Re: Wunderground Wetter mit einfachem HM-Skript holen
Hallo zusammen,
habe die 39 Seiten mittlerweile durch und mein Script Wetterdaten abholen und die Variablen befüllen klappt auch, aber NUR wenn ich das zugehörige Programm manuell ausführe...Es macht mir einfach nicht die 10 Minütige Ausführung... Bin ich betriebsblind ? Hat mir jemand einen entscheidenden Tip ?
habe die 39 Seiten mittlerweile durch und mein Script Wetterdaten abholen und die Variablen befüllen klappt auch, aber NUR wenn ich das zugehörige Programm manuell ausführe...Es macht mir einfach nicht die 10 Minütige Ausführung... Bin ich betriebsblind ? Hat mir jemand einen entscheidenden Tip ?
CCU2 mit IFTTT/WU/NEO und jeder Menge LED Lampen im Einsatz
Re: Wunderground Wetter mit einfachem HM-Skript holen
Stelle mal bei "nur prüfen" was anderes ein.
sehr selten im Forum
-
- Beiträge: 7
- Registriert: 13.05.2015, 16:08
Re: Wunderground Wetter mit einfachem HM-Skript holen
Ich könnte schwören das hatte ich am Anfang auch eingestellt, und nachdem ich ettliches geändert hatte bin ich irgendwann bei "nur prüfen" hängen geblieben.robsdobs hat geschrieben:Stelle mal bei "nur prüfen" was anderes ein.
Nachdem ich jetzt wieder umgestellt habe auf "zu Zeitpunkten auslösen" läufts auf einmal...
Danke an den stubser
CCU2 mit IFTTT/WU/NEO und jeder Menge LED Lampen im Einsatz
-
- Beiträge: 131
- Registriert: 08.09.2015, 15:14
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 4 Mal
Re: Wunderground Wetter mit einfachem HM-Skript holen
Hi zusammen,
bei mir läuft seit gestern Nacht folgendes Skript nicht mehr mit folgendem Fehler:
Fehlermeldung:
Skript
Es werden noch folgende Variablen befüllt:
WV_Tag
WV_Kondition
WV_Icon
WV_Text
Ist das bei euch auch so? Bin für jeden Tipp dankbar.
Grüße
kafisc
bei mir läuft seit gestern Nacht folgendes Skript nicht mehr mit folgendem Fehler:
Fehlermeldung:
Code: Alles auswählen
homematic-raspi local0.err ReGaHss: Error: IseESP::ScriptRuntimeError: !
Code: Alles auswählen
! Wettervorhersage von wunderground holen
!Stand 21.08.2017 https://homematic-forum.de/forum/viewtopic.php?t=17209
!zuerst folgende Systemvariablen anlegen
!Achtung: keine vergessen und exakte Schreibweise mit Copy & Paste
!WV_Tag Zeichenkette -> Forecast fuer welchen Wochentag
!WV_Kondition Zeichenkette -> Forecast Wetterbedingung
!WV_Icon Zeichenkette -> Forecast URL zu Pictogramm (zeigt Bild im Protokoll / Systemvariablen)
!WV_Text Zeichenkette -> Forecast Text (max 200 Zeichen)
!Max_Temp_Heute Zahl °C -> Forecast Maximale Temperatur
!Regenwahrsch_Heute Zahl % -> Forecast Regenwahrscheinlichkeit (probability of precipation)
!WV_Zeit Zeichenkette -> Forecast erstellt um diese Zeit
var url = "http://api.wunderground.com/api/xxxxxxx/forecast/lang:DL/q/Germany/Sindelfingen.xml";
!hier ist die Abfrage mit CUxD
dom.GetObject("CUxD.CUX2801015:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801015:1.CMD_QUERY_RET").State(1);
string wetter_xml = dom.GetObject("CUxD.CUX2801015:1.CMD_RETS").State();
!Beim XML-File den ueberfluessigen Header entfernen
integer laenge = wetter_xml.Length();
integer wort_position = wetter_xml.Find("forecast");
wetter_xml = wetter_xml.Substr(wort_position, (laenge - wort_position));
!WriteLine(wetter_xml);
integer laenge = wetter_xml.Length();
!hier den Auszugebenden tag anpassen, period 2 ist der nächste tag
integer wort_position = wetter_xml.Find("period 2");
wetter_xml = wetter_xml.Substr(wort_position, (laenge - wort_position));
!WriteLine(wetter_xml);
!Daten mit Suchworten aus XML-File ausfiltern:
string word = "title";
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));
WriteLine(daten);
dom.GetObject("WV_Tag").State(daten);
string word = "icon";
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 daten2 = daten;
dom.GetObject("WV_Kondition").State(daten);
string word = "icon_url";
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 = "</div><img src=\"" + daten + "\" alt=\"" + daten2 + "\">";
dom.GetObject("WV_Icon").State(daten);
string word = "fcttext_metric";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge + 1 + 9), 200);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position-5));
!umlaut ö finden, zeichen ö
string txtneu = "";
string teilstr;
foreach(teilstr, daten.Split("¶"))
{
if (txtneu == "")
{
txtneu = teilstr;
}else{
txtneu = txtneu # "ö" # teilstr;
}
}
daten = txtneu;
!umlaut ü finden, zeichen ü
string txtneu = "";
string teilstr;
foreach(teilstr, daten.Split("¼"))
{
if (txtneu == "")
{
txtneu = teilstr;
}else{
txtneu = txtneu # "ü" # teilstr;
}
}
daten = txtneu;
!umlaut ä finden, zeichen ä
string txtneu = "";
string teilstr;
foreach(teilstr, daten.Split("¤"))
{
if (txtneu == "")
{
txtneu = teilstr;
}else{
txtneu = txtneu # "ä" # teilstr;
}
}
daten = txtneu;
!umlaute korrigiert, zeichen à entfernen
string txtneu = "";
string teilstr;
foreach(teilstr, daten.Split("Ã"))
{
if (txtneu == "")
{
txtneu = teilstr;
}else{
txtneu = txtneu # "" # teilstr;
}
}
daten = txtneu;
dom.GetObject("WV_Text").State(daten);
string word = "celsius";
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("WV_TempMax").State(zahl);
string word = "pop";
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("WV_Regen").State(zahl);
string word = "pretty_short";
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 daten2 = daten;
dom.GetObject("WV_Zeit").State(daten);
WV_Tag
WV_Kondition
WV_Icon
WV_Text
Ist das bei euch auch so? Bin für jeden Tipp dankbar.
Grüße
kafisc
- papi
- Beiträge: 371
- Registriert: 18.12.2013, 08:40
- Wohnort: Willich, NRW
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 5 Mal
Re: Wunderground Wetter mit einfachem HM-Skript holen
Nö, geht noch.
Prüfe doch mal den in Deinem Skript aufzurufenden Link im Browser, ob und vor allem welche Daten er zurückliefert.
Ggfs. musst Du Dir eine alternative Wetterstation suchen.
Prüfe doch mal den in Deinem Skript aufzurufenden Link im Browser, ob und vor allem welche Daten er zurückliefert.
Ggfs. musst Du Dir eine alternative Wetterstation suchen.
Re: Wunderground Wetter mit einfachem HM-Skript holen
Ich hab mal eine Frage.
Ich möchte den Sonnenauf und Sonnenuntergang mit angezeigt haben und weiterverarbeiten. Nun kann ich mir ja die "Befehle" oder besser Namen für die Werte bei wunderground holen.
Da ich aber nicht mehr unter forecast oder conditions bin, sondern unter astronomy, muss ich auch eine andere URL abfragen. Siehe Bild unten.
Soweit so gut, wenn ich das richtig verstanden habe.
Nun mein Problem, kann ich einfach das hier vorliegende Skript nehmen, die andere URL eintragen, Systemvariablen anlegen und soweit alles rausschmeisen und nur durch Sonnenaufgang und Untergang ersetzen ? Da ich skripttechnisch nicht so der Held bin, wäre es nett, wenn mir einer sagen könnte was ich unbedingt brauche und was raus kann.
So long
Ich möchte den Sonnenauf und Sonnenuntergang mit angezeigt haben und weiterverarbeiten. Nun kann ich mir ja die "Befehle" oder besser Namen für die Werte bei wunderground holen.
Da ich aber nicht mehr unter forecast oder conditions bin, sondern unter astronomy, muss ich auch eine andere URL abfragen. Siehe Bild unten.
Soweit so gut, wenn ich das richtig verstanden habe.
Nun mein Problem, kann ich einfach das hier vorliegende Skript nehmen, die andere URL eintragen, Systemvariablen anlegen und soweit alles rausschmeisen und nur durch Sonnenaufgang und Untergang ersetzen ? Da ich skripttechnisch nicht so der Held bin, wäre es nett, wenn mir einer sagen könnte was ich unbedingt brauche und was raus kann.
So long
So long
Marcus
Marcus
Re: Wunderground Wetter mit einfachem HM-Skript holen
So, als absoluter Skriptidiot hab ich mich jetzt mal datan gewagt. Wie erwartet ohne Erfolg. Vielleicht kann mir jemand sagen was ich falsch mache. (wahrscheinlich alles).
1. Ich habe eine Systemvariable W_Sonnenuntergang als Zahl angelegt. (ich habe es auch als Zeichenkette versucht, ging auch nicht)
2. Dann habe ich ein Zeitprogramm ganztägig, alle 1 stunde angelegt mit folgendem Skript. Bei dem Skript handelt es sich um das hier bekannte Skript für die Wetterdaten.
3. Api link funktioniert.
API Link
Skript
Ich habe echt ganz wenig Ahnung von Skripten und habe gelöscht was ich gedacht habe. Habt Nachsicht mit mir, ich lern es schon noch.
1. Ich habe eine Systemvariable W_Sonnenuntergang als Zahl angelegt. (ich habe es auch als Zeichenkette versucht, ging auch nicht)
2. Dann habe ich ein Zeitprogramm ganztägig, alle 1 stunde angelegt mit folgendem Skript. Bei dem Skript handelt es sich um das hier bekannte Skript für die Wetterdaten.
3. Api link funktioniert.
API Link
Code: Alles auswählen
<response><version>0.1</version><termsofService>http://www.wunderground.com/weather/api/d/terms.html</termsofService><features><feature>astronomy</feature></features><moon_phase><percentIlluminated>65</percentIlluminated><ageOfMoon>9</ageOfMoon><current_time><hour>20</hour><minute>20</minute></current_time><sunset><hour>16</hour><minute>26</minute></sunset><sunrise><hour>8</hour><minute>03</minute></sunrise><moonset><hour>0</hour><minute>48</minute></moonset><moonrise><hour>12</hour><minute>53</minute></moonrise></moon_phase><sun_phase><sunset><hour>16</hour><minute>26</minute></sunset><sunrise><hour>8</hour><minute>03</minute></sunrise></sun_phase></response>
Skript
Code: Alles auswählen
!Astrodaten von wunderground.com holen
var url = "http://api.wunderground.com/api/trallalla/astronomy/lang:DL/q/Germany/pws:IOBOBERH4.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_Sonnenuntergang").State(daten);
string word = "sunset";
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_Sonnenuntergang").State(daten);
Ich habe echt ganz wenig Ahnung von Skripten und habe gelöscht was ich gedacht habe. Habt Nachsicht mit mir, ich lern es schon noch.
Zuletzt geändert von alchy am 27.12.2017, 21:03, insgesamt 2-mal geändert.
Grund: Code in Codetags posten
Grund: Code in Codetags posten
So long
Marcus
Marcus
-
- Beiträge: 164
- Registriert: 03.06.2016, 21:55
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 51 Mal
- Danksagung erhalten: 8 Mal
Re: Wunderground Wetter mit einfachem HM-Skript holen
Kurze Zwischenfrage: Warum nutzt du nicht die Astro-Funktion, die die CCU schon mitbringt?
Grüße, Ecky
Code: Alles auswählen
var auf = system.SunriseTime("%H:%M").ToString();
var ab = system.SunsetTime("%H:%M").ToString();
WriteLine(auf);
WriteLine(ab);
Grüße,
Ecky
Ecky
Re: Wunderground Wetter mit einfachem HM-Skript holen
Ich dachte immer, die (Zeitsteuerung) wäre nicht so zuverlässig.
Außerdem geht es mir denke ich mehr ums basteln mit dem Skript. Ich finde es super, was hier einige für tolle Skripte schreiben und ich versuche es wenigstens halbwegs zu verstehen. Das ist mehr learning by doing.
Aber trotzdem danke für den Tipp
Außerdem geht es mir denke ich mehr ums basteln mit dem Skript. Ich finde es super, was hier einige für tolle Skripte schreiben und ich versuche es wenigstens halbwegs zu verstehen. Das ist mehr learning by doing.
Aber trotzdem danke für den Tipp
So long
Marcus
Marcus