nachdem wunderground und wetter.com keine api (nur für die Vorhersage) mehr haben musste ich umstellen.
Da es verschiedene Themen für die Wettervorhersage gibt habe ich dieses neue Thema erstellt. Wenn falsch, bitte verschieben.
Ich habe mir aus den verschiedenen Quellen von:
-https://homematic.simdorn.net/wettervor ... derground/
-https://smarthome.kuklin.de/2018/06/27/ ... homematic/
und diesem Form für das Datum und anderes ein Skript zusammen geklaut/gebaut, dass nicht die Kommas zählt (bei accuweather verschieben sich diese immer mal wieder), sonder nach Suchstichworten. Auch gibt es mir für mein EasyDisplay zusammengesetzte Texte raus, damit ich nicht für jede Systemvariable eine eigene Zelle benötige.
Nicht so hübsch und bestimmt einige Zeilen überflüssig. Ich kann nur klauen, anpassen und Fehler suchen. Zum Selbst schreiben reicht es noch nicht.
Vielleicht ist da ja doch hilfreich für andere. Tipps nehme ich gerne entgegen.
Die Darstellung erfolgt dann, neben dem EasyDisplay, auch auch auf dem EPaper Display.
Code: Alles auswählen
!Accuweather Vorhersage holen
!
!Hier die WETTERSTATION-ID und API-KEY eintragen
string wetterstation_id = "2600687";
string api_key = "xxxxxxxxxxxxxxxxxxxxxxx";
url = "http://dataservice.accuweather.com/forecasts/v1/daily/1day/"#wetterstation_id#"?apikey="#api_key#"&language=de-de&details=true&metric=true";
dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
responce = dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State();
dom.GetObject("Wetter responce").State(responce);
!umlaut ö finden, zeichen ö
string txtneu = "";
string teilstr;
foreach(teilstr, responce.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;
}
}
responce = txtneu;
!Daten mit Suchworten aus "responce" ausfiltern:
!Wettervorhersage Text
string word = "ShortPhrase";
integer word_laenge = word.Length();
string word2 = "LongPhrase";
integer word2_laenge = word2.Length();
integer word_position = responce.Find(word);
string daten = responce.Substr((word_position + word_laenge + 3), 100);
integer word2_position = daten.Find(word2);
daten = daten.Substr(0, (word2_position-3));
dom.GetObject("Wetter tagsüber").State(daten);
!Wettervorhersage Temp max
string word = "Maximum";
integer word_laenge = word.Length();
string word2 = "Unit";
integer word2_laenge = word2.Length();
integer word_position = responce.Find(word);
string daten = responce.Substr((word_position + word_laenge + 11), 20);
integer word2_position = daten.Find(word2);
daten = daten.Substr(0, (word2_position-2));
dom.GetObject("Wetter Max. Temp.").State(daten);
!Wettervorhersage Temp min
string word = "Minimum";
integer word_laenge = word.Length();
string word2 = "Unit";
integer word2_laenge = word2.Length();
integer word_position = responce.Find(word);
string daten = responce.Substr((word_position + word_laenge + 11), 20);
integer word2_position = daten.Find(word2);
string daten = daten.Substr(0, (word2_position-2));
dom.GetObject("Wetter Min. Temp.").State(daten);
!Wettervorhersage Gültigkeit
string word = "DailyForecasts";
integer word_laenge = word.Length();
integer word_position = responce.Find(word);
string datum = responce.Substr((word_position + word_laenge + 12), 10);
!Gültig ab Wochentag
string y = datum.StrValueByIndex("-",0);
string m = datum.StrValueByIndex("-",1);
string d = datum.StrValueByIndex("-",2);;
datum = datum.ToTime();
integer wd1 = datum.Format("%w").ToInteger();
string wtage = "So;Mo;Di;Mi;Do;Fr;Sa";
string wtag1 = wtage.StrValueByIndex(";",wd1);
string datum = wtag1#", "#d#"."#m#". 07:00 Uhr";
dom.GetObject("Wetter gültig ab").State(datum);
!Wettervorhersage Regenwahrscheinlichkeit tagsüber
string word = "RainProbability";
integer word_laenge = word.Length();
integer word_position = responce.Find(word);
string daten = responce.Substr((word_position + word_laenge + 2), 2);
dom.GetObject("Wetter Regenwahrscheinlichkeit tagsüber").State(daten);
!NACHTS
!Wettervorhersage für nachts filtern
string word = "Night";
integer word_laenge = word.Length();
integer word_position = responce.Find(word);
string datenN = responce.Substr((word_position), 700);
!Wettervorhersage Text Nachts
string word = "ShortPhrase";
integer word_laenge = word.Length();
string word2 = "LongPhrase";
integer word2_laenge = word2.Length();
integer word_position = datenN.Find(word);
string daten = datenN.Substr((word_position + word_laenge + 3), 300);
integer word2_position = daten.Find(word2);
daten = daten.Substr(0, (word2_position-3));
dom.GetObject("Wetter nachts").State(daten);
!Wettervorhersage Regenwahrscheinlichkeit nachts
string word = "RainProbability";
integer word_laenge = word.Length();
string word2 = "SnowProbability";
integer word2_laenge = word2.Length();
integer word_position = datenN.Find(word);
string daten = datenN.Substr((word_position + word_laenge + 2), 25);
integer word2_position = daten.Find(word2);
daten = daten.Substr(0, (word2_position-2));
dom.GetObject("Wetter Regenwahrscheinlichkeit nachts").State(daten);
!Temperatur zusammenfügen
var tmax=dom.GetObject("Wetter Max. Temp.").State();
tmax = tmax.ToString(1) ;
var tmin=dom.GetObject("Wetter Min. Temp.").State();
tmin = tmin.ToString(1) ;
dom.GetObject("Wetter Temp").State((tmax)#" °C bis "#(tmin)#" °C");
!Regenwahrscheinlichkeit zusammenfügen
var RWtag=dom.GetObject("Wetter Regenwahrscheinlichkeit tagsüber").State();
RWtag = RWtag.ToString(0) ;
var RWnacht=dom.GetObject("Wetter Regenwahrscheinlichkeit nachts").State();
RWnacht = RWnacht.ToString(0) ;
dom.GetObject("Wetter Regenwahrscheinlichkeit").State(("Tags: ")#(RWtag)#(" %, Nachts: ")#(RWnacht)#" %");
!Wettervorhersage zusammenfügen
dom.GetObject("Wettervorhersage").State ("Gültig ab: "#dom.GetObject("Wetter gültig ab").State()#", Tags: "#dom.GetObject("Wetter tagsüber").State()#", Nachts: "#dom.GetObject("Wetter nachts").State());
Die Darstellung im EasyDisplay: