Hallo, "Ortenauer"
, ich habe einen Kunden in Schutterwald (Fitnessstudio)!
Jimbaem hat geschrieben: ↑10.06.2019, 19:18
Das ist doch mal ne Aussage, warum finde ich das mit der Suchfunktion hier im Forum nicht
Weil ich bis dato mein Script noch nicht veröffentlicht habe
Jimbaem hat geschrieben: ↑10.06.2019, 19:18
Das mit dem Datenstrom hab ich auch schon so gemacht. Habe auch schon überlegt das Ganze in "Einzelteile" für jeden Tag zu zerlegen und dann nach der Werten zu suchen und zu filtern.
Na, dann mach' es doch und du siehst die ganzen Daten und Werte
OK . . . here we go:
Code: Alles auswählen
!##### AccuWeather - API (v5.3) #####
!##### (3)5-Tage Vorschau-Wetterdaten #####
!##### in Systemvariablen schreiben #####
!##### by FBK2904 (09.05.19) #####
! ### Hier die WETTERSTATION-ID und API-KEY eintragen ###
string wetterstation_id = "123456";
string api_key = "abcdefghijklmnopqrstuvwxyz";
var url = "http://dataservice.accuweather.com/forecasts/v1/daily/5day/"#wetterstation_id#"?apikey="#api_key#"&language=de-de&details=true&metric=true"; ! 5 Tage Wetter
dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
string Wetter_XML = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State().Replace('"', "").Replace("[", "").Replace("]", "").Replace("(", "").Replace(")", "").Replace("{", "").Replace("}", "");
! WriteLine("Wetter_XML = "#Wetter_XML);
! ### Heutige UnixTime (Epochdate) aus Wetter-XML heraussuchen ###
! ### und Aktualisierungszeit daraus berechnen ###
string word = "DailyForecasts";
string param = "EpochDate:";
integer param_laenge = param.Length();
integer word_position = Wetter_XML.Find(word);
integer word_pos_end = Wetter_XML.Find("Sun") - word_position;
string daten = Wetter_XML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0));
string UpdateTime = daten.ToInteger().ToTime().Format("%H:%M");
dom.GetObject("SV_WETTER_For5_UpdateTime").State(UpdateTime);
! WriteLine(daten #" = " #"UpdateTime: " #UpdateTime);
! ### Schleifen-Vearbeitung (foreach) aller Werte für x-Tage ###
! ### "GenerateEnum (0,2)" = Heute(0), Morgen(1), Übermorgen(2) ###
string Zahl;
string Unix_ED = daten.ToFloat();
foreach(Zahl,system.GenerateEnum (0,2))
{
! ### Nächste UnixTime, Real-Wochentag und Real-Datum berechnen ###
string UnixTime = "EpochTime_"+Zahl;
string EpochTime = Zahl.ToInteger()*86400;
EpochTime = EpochTime+Unix_ED;
string RealTime = EpochTime.ToInteger().ToTime().Format("%Y-%m-%d %H:%M:%S");
string Datum = EpochTime.ToInteger().ToTime().Format("%d.%m.");
string Tag = RealTime.ToTime();
integer wd = Tag.Format("%w").ToInteger();
string woche = "SO.;MO.;DI.;MI.;DO.;FR.;SA.";
Tag = woche.StrValueByIndex(";",wd);
dom.GetObject("SV_WETTER_For5_Day"+Zahl).State(Tag);
dom.GetObject("SV_WETTER_For5_Date"+Zahl).State(Datum);
! WriteLine("");
! WriteLine(EpochTime #" = " #Tag #" " #Datum);
! ### sowie jeweiliges Tages-XML herausschneiden ###
string word = EpochTime;
string param = ",";
integer param_laenge = param.Length();
integer word_position = Wetter_XML.Find(word);
string End = Zahl.ToInteger()+1;
string SearchEnd = "day="+End;
integer word_pos_end = Wetter_XML.Find(SearchEnd) - word_position;
string WetterXML = Wetter_XML.Substr(word_position, word_pos_end -117); ! evtl. unnötige "http"-Reste hinten abschneiden (bis "Sources:)"
! WriteLine("EpochDay-XML = " #WetterXML);
! ### Allgemeine Wetterdaten heraussuchen ###
! # Minimale Temperatur (Nacht) suchen und Wert korrigieren #
! WriteLine("-Allgemein-");
string word = "Temperature:Minimum:";
string param = "Value:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("Unit:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToFloat()+1.5; ! Wert um 1.5 erhöhen
dom.GetObject("SV_WETTER_For5N_Temp"+Zahl).State(daten);
! WriteLine(daten);
! # Minimale RealFeel-Temperatur (Nacht) suchen und Wert korrigieren #
string word = "RealFeelTemperature:Minimum:";
string param = "Value:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("Unit:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToFloat()+1.5; ! Wert um 1.5 erhöhen
dom.GetObject("SV_WETTER_For5N_TempRF"+Zahl).State(daten);
! WriteLine(daten);
! # Maximale Temperatur (Tag) suchen und Wert korrigieren #
string word = "Maximum:";
string param = "Value:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("Unit:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToFloat()+1.5; ! Wert um 1.5 erhöhen
dom.GetObject("SV_WETTER_For5D_Temp"+Zahl).State(daten);
! WriteLine(daten);
! # Maximale RealFeel-Temperatur (Tag) suchen und Wert korrigieren #
string word = "RealFeelTemperature:Minimum:";
string param = "Maximum:Value:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("Unit:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToFloat()+1.5; ! Wert um 1.5 erhöhen
dom.GetObject("SV_WETTER_For5D_TempRF"+Zahl).State(daten);
! WriteLine(daten);
! ### Tages-Wetterdaten heraussuchen ###
! WriteLine("-Tag-");
! # WetterIcon suchen #
string word = "Day:";
string param = "Icon:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("IconPhrase:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToInteger();
dom.GetObject("SV_WETTER_For5D_Icon"+Zahl).State(daten);
! WriteLine(daten);
! # WetterText suchen #
string word = "Day";
string param = "LongPhrase:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("Probability") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",Precipitation");
daten = daten.Substr(0, (word_pos_end -0));
dom.GetObject("SV_WETTER_For5D_Text"+Zahl).State(daten.ToLatin());
! WriteLine(daten.ToLatin());
! # Niederschlag-Wahrscheinlichkeit (%) suchen #
string word = "Day:";
string param = "PrecipitationProbability:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("ThunderstormProbability:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToFloat();
dom.GetObject("SV_WETTER_For5D_NiedSchl"+Zahl).State(daten);
! WriteLine(daten);
! # Windgeschwindigkeit suchen und auch in Text umwandeln #
string word = "Day:";
string param = "Wind:Speed:Value:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("Unit:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToFloat();
dom.GetObject("SV_WETTER_For5D_WindAkt"+Zahl).State(daten);
! WriteLine(daten);
! # Umsetzung in Wetterdienst-Windtexte #
if (daten < 0.00) {daten = "???" ;} else {
if (daten < 1.00) {daten = "Windstille" ;} else {
if (daten < 5.00) {daten = "Leiser Zug" ;} else {
if (daten < 11.00) {daten = "Leichte Brise" ;} else {
if (daten < 19.00) {daten = "Schwacher Wind" ;} else {
if (daten < 28.00) {daten = "Mäßiger Wind" ;} else {
if (daten < 38.00) {daten = "Auffrischender Wind" ;} else {
if (daten < 49.00) {daten = "Starker Wind" ;} else {
if (daten < 61.00) {daten = "Starker bis stürmischer Wind" ;} else {
if (daten < 74.00) {daten = "Stürmischer Wind" ;} else {
if (daten < 88.00) {daten = "Sturm" ;} else {
if (daten < 102.00) {daten = "Schwerer Sturm" ;} else {
if (daten < 117.00) {daten = "Orkanartiger Sturm" ;} else {
if (daten >= 117.00) {daten = "Orkan" ;} }}}}}}}}}}}}}
dom.GetObject("SV_WETTER_For5D_WindAktTXT"+Zahl).State(daten);
! WriteLine(daten);
! # Windrichtung (Text) suchen #
string word = "Day:";
string param = "Localized:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("English:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0));
dom.GetObject("SV_WETTER_For5D_WindDir"+Zahl).State(daten);
! WriteLine(daten);
! # Windboen suchen #
string word = "Day:";
string param = "WindGust:Speed:Value:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("Unit:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToFloat();
dom.GetObject("SV_WETTER_For5D_WindBoen"+Zahl).State(daten);
! WriteLine(daten);
! ### Nacht-Wetterdaten heraussuchen ###
! WriteLine("-Nacht-");
! # WetterIcon suchen #
string word = "Night:";
string param = "Icon:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("IconPhrase:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToInteger();
dom.GetObject("SV_WETTER_For5N_Icon"+Zahl).State(daten);
! WriteLine(daten);
! # WetterText suchen #
string word = "Night:";
string param = "LongPhrase:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("Probability:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",Precipitation");
daten = daten.Substr(0, (word_pos_end -0));
dom.GetObject("SV_WETTER_For5N_Text"+Zahl).State(daten.ToLatin());
! WriteLine(daten.ToLatin());
! # Niederschlag-Wahrscheinlichkeit (%) suchen #
string word = "Night:";
string param = "PrecipitationProbability:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("ThunderstormProbability:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToFloat();
dom.GetObject("SV_WETTER_For5N_NiedSchl"+Zahl).State(daten);
! WriteLine(daten);
! # Windgeschwindigkeit suchen und auch in Text umwandeln #
string word = "Night:";
string param = "Wind:Speed:Value:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("Unit:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToFloat();
dom.GetObject("SV_WETTER_For5N_WindAkt"+Zahl).State(daten);
! WriteLine(daten);
! # Umsetzung in Wetterdienst-Windtexte #
if (daten < 0.00) {daten = "???" ;} else {
if (daten < 1.00) {daten = "Windstille" ;} else {
if (daten < 5.00) {daten = "Leiser Zug" ;} else {
if (daten < 11.00) {daten = "Leichte Brise" ;} else {
if (daten < 19.00) {daten = "Schwacher Wind" ;} else {
if (daten < 28.00) {daten = "Mäßiger Wind" ;} else {
if (daten < 38.00) {daten = "Auffrischender Wind" ;} else {
if (daten < 49.00) {daten = "Starker Wind" ;} else {
if (daten < 61.00) {daten = "Starker bis stürmischer Wind" ;} else {
if (daten < 74.00) {daten = "Stürmischer Wind" ;} else {
if (daten < 88.00) {daten = "Sturm" ;} else {
if (daten < 102.00) {daten = "Schwerer Sturm" ;} else {
if (daten < 117.00) {daten = "Orkanartiger Sturm" ;} else {
if (daten >= 117.00) {daten = "Orkan" ;} }}}}}}}}}}}}}
dom.GetObject("SV_WETTER_For5N_WindAktTXT"+Zahl).State(daten);
! WriteLine(daten);
! # Windrichtung (Text) suchen #
string word = "Night:";
string param = "Localized:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("English:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0));
dom.GetObject("SV_WETTER_For5N_WindDir"+Zahl).State(daten);
! WriteLine(daten);
! # Windboen suchen #
string word = "Night:";
string param = "WindGust:Speed:Value:";
integer param_laenge = param.Length();
integer word_position = WetterXML.Find(word);
integer word_pos_end = WetterXML.Find("Unit:") - word_position;
string daten = WetterXML.Substr(word_position, word_pos_end);
word_position = daten.Find(param);
daten = daten.Substr(word_position + param_laenge, daten.Length());
word_pos_end = daten.Find(",");
daten = daten.Substr(0, (word_pos_end -0)).ToFloat();
dom.GetObject("SV_WETTER_For5N_WindBoen"+Zahl).State(daten);
! WriteLine(daten);
}
Das Script holt sich die 5-Tage Vorschau (in diesem Fall nur 3 Tage) und beschreibt dann die entsprechenden SysVar's.
Dies kann in Zeile 36 auch auf z.B. 5 Tage "foreach(Zahl,system.GenerateEnum (0,4))" geändert werden.
Es muss eine große Anzahl an SysVar's (mit einer Endung "0", "1", "2", usw.) angelegt werden.
Das Script holt sich erst einmal einige Grunddaten und zerlegt diese dann in "Tages-Strings" und verarbeitet das ganze
dann in einer Schleife für die entsprechenden Tages- und Nachtwerte.
Die Zeile 61 muss auch angepasst werden, da der Wert "word_pos_end -117" abhängig von dem Wetter-Stationsname ist !
Achja ... wer sich wundert, warum ich in meinen Scripten jeweils bei "Temperature" bzw. "RelativeHumidity" die Werte verbiege?
-> Weil die Messwerte meines an der Haus-Nordseite hängenden Funk-Temperatur-Feuchtesensor (HM-WDS10-TH-O)
nicht mit den Wetterstations-Werten ganz übereinstimmt
Grüssle,
Frank