WETTER Vorhersage mit Wunderground
Moderator: Co-Administratoren
-
- Beiträge: 3302
- Registriert: 07.01.2015, 23:26
- Wohnort: Scheeßel
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 11 Mal
Re: WETTER Vorhersage mit Wunderground
Gibt hier auch ein Script im Forum für "Morgen".
Hast halt das für "Heute" erwischt.
Hast halt das für "Heute" erwischt.
Re: WETTER Vorhersage mit Wunderground
Ah ok.. wäre super wenn du das machst.
Eigentlich würde mir immer der nächste Tag reichen.
Herzlichen DANK
Eigentlich würde mir immer der nächste Tag reichen.
Herzlichen DANK
RaspberryMatic auf RPi 3 - AIO Creator NEO
Re: WETTER Vorhersage mit Wunderground
Hier das script für den nächsten tag
script ersetzt die umlaute in dem geholtem text, für die variable WetterFct_Text
Wenn dir das was der script macht ausreicht ok, aber es gibt mehrere und bessere varianten für das wunderground wetter in dem thread wo du es gefunden hast.
wenn es läuft kannst du dann den teil mit cuxd einsetzen und das teil mit system.exec auskommentieren mit !
Code: Alles auswählen
var URL = "http://api.wunderground.com/api/apikey/forecast/lang:DL/q/pws:STATION.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("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));
dom.GetObject("WetterFct_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("WetterFct_Condition").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("WetterFct_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("WetterFct_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("WetterFct_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("WetterFct_Pop").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));
WriteLine(daten);
string daten2 = daten;
dom.GetObject("WetterFct_Zeit").State(daten);
Wenn dir das was der script macht ausreicht ok, aber es gibt mehrere und bessere varianten für das wunderground wetter in dem thread wo du es gefunden hast.
wenn es läuft kannst du dann den teil mit cuxd einsetzen und das teil mit system.exec auskommentieren mit !
Re: WETTER Vorhersage mit Wunderground
Hier werden keine Umlaute ersetzt....
funktioniert das Script bei Dir ?
funktioniert das Script bei Dir ?
Gruß Markus
Re: WETTER Vorhersage mit Wunderground
sicher funktioniert esmchip hat geschrieben:Hier werden keine Umlaute ersetzt....
funktioniert das Script bei Dir ?
Code: Alles auswählen
var URL = "http://api.wunderground.com/api/apikey/forecast/lang:DL/q/pws:STATION.xml";
bei abfrage mit cuxd muss folgende zeile so lauten:
Code: Alles auswählen
integer wort_position = wetter_xml.Find("period 2");
Code: Alles auswählen
integer wort_position = wetter_xml.Find("<period>2");
Code: Alles auswählen
var url = "http://api.wunderground.com/api/apikey/forecast/lang:DL/q/pws:STATION.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();
!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("WetterFct_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("WetterFct_Condition").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("WetterFct_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("WetterFct_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("WetterFct_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("WetterFct_Pop").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("WetterFct_Zeit").State(daten);
Code: Alles auswählen
var url = "http://api.wunderground.com/api/apikey/forecast/lang:DL/q/pws:STATION.xml";
!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("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("WetterFct_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("WetterFct_Condition").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("WetterFct_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("WetterFct_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("WetterFct_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("WetterFct_Pop").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("WetterFct_Zeit").State(daten);
Re: WETTER Vorhersage mit Wunderground
Sorry, aber bei mir kommt noch:
WetterFct_Text: Regen. H¶chsttemperatur 17C. Wind aus WSW mit 15 bis 25 km/h. Regenrisiko 90 %. Niederschlag ca. ~ 6 mm.
=> keine Umlaut Korrektur....
Hier mein Script:
WetterFct_Text: Regen. H¶chsttemperatur 17C. Wind aus WSW mit 15 bis 25 km/h. Regenrisiko 90 %. Niederschlag ca. ~ 6 mm.
=> keine Umlaut Korrektur....
Hier mein Script:
Code: Alles auswählen
var url = "http://api.wunderground.com/api/xxxxxxxxxxxx/forecast/lang:DL/q/pws:IFRANKFU77.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();
!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("WetterFct_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("WetterFct_Condition").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("WetterFct_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("WetterFct_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("WetterFct_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("WetterFct_Pop").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("WetterFct_Zeit").State(daten);
Gruß Markus
Re: WETTER Vorhersage mit Wunderground
für deine Stationmchip hat geschrieben:Sorry, aber bei mir kommt noch:
WetterFct_Text: Regen. H¶chsttemperatur 17C. Wind aus WSW mit 15 bis 25 km/h. Regenrisiko 90 %. Niederschlag ca. ~ 6 mm.
=> keine Umlaut Korrektur....
mit deinem script
Re: WETTER Vorhersage mit Wunderground
bin scheinbar blöd....
ich führe das Script im Executer aus, und dann kommt:
Siehe Anlage:
Komisch ist auch, dass im Executer in der Ausgabe das hier steht:
{
"txtneu": " Regen. H¶chsttemperatur 17C. Wind aus WSW mit 15 bis 25 km/h. Regenrisiko 90 %. Niederschlag ca. ~ 6 mm.",
ich führe das Script im Executer aus, und dann kommt:
Siehe Anlage:
Komisch ist auch, dass im Executer in der Ausgabe das hier steht:
{
"txtneu": " Regen. H¶chsttemperatur 17C. Wind aus WSW mit 15 bis 25 km/h. Regenrisiko 90 %. Niederschlag ca. ~ 6 mm.",
- Dateianhänge
-
- Unbenannt.PNG (5.22 KiB) 2788 mal betrachtet
Gruß Markus
Re: WETTER Vorhersage mit Wunderground
dann mach es in einem programm, was willst du mit dem executer anstellen?mchip hat geschrieben:bin scheinbar blöd....
kannst auch mit script testen versuchen
Re: WETTER Vorhersage mit Wunderground
Danke, läuft, der Executer ist blöd !
Im Programm bzw. Script testen funzt es nun.....
Im Programm bzw. Script testen funzt es nun.....
Gruß Markus