das Programm ist zwar noch nicht vollends ausgereift aber zumindest ein Anfang ist gemacht.
- Zuerst hole ich mir die Wetterdaten von OWM, die es in 2 Ausführungen gibt. Einmal die aktuellen und einmal die Voraussicht für 3 Tage. Dafür braucht man nur einen Account bei openweathermap.org und eine kostenlose API abonieren.
Unter: http://api.openweathermap.org/data/2.5//weather?q= Stadtname ,de&appid= APInummer &lang=de"; bekommt man die aktuellen Wetterdaten.
Unter http://api.openweathermap.org/data/2.5/forecast?id= Stadtid &appid= APInummer &lang=de für die 5 Tages Auskunft
Die StadtID findet man einfach ein in der Browseradresszeile. Auf openweather.org seine Stadt suchen und von dort die StadtID kopieren. https://openweathermap.org/city/StadtID
Dann sind alle Vorbereitungen getroffen und es kann losgehen
Aktuelles Wetterabrufen
Dafür habe ich mich aus dem Skript aus dem Forum bedient und leicht angepasst. Hier muss im String" weatherURL" den APIID und den Stadtname(zb. Berlin) eingetragen werden.
Code: Alles auswählen
boolean CUxD=true;
string txt;
var stdout;
real wert;
real a_wert;
integer wert_pos;
string stderr;
string pos2;
string weatherUrl="http://api.openweathermap.org/data/2.5//weather?q=Stadtname,de&appid=APIID&lang=de";
if(CUxD){
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '" # weatherUrl # "'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
}else{
system.Exec("wget -q -O - '" # weatherUrl # "'", &stdout, &stderr);}
! Aussentemperatur
string pos1="{\"temp\":";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
wert = stdout.Substr(wert_pos,10).StrValueByIndex(pos2,0);
real a_wert = wert.ToInteger() - 273;
dom.GetObject("AKT_OWM_AussenTemperatur").Variable(a_wert);
!WriteLine ("aktuelle Aussentemperatur: " # a_wert # "°C");
! Windgeschwingigkeit
string pos1="\"wind\":{\"speed\":";
string pos2=",";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
wert = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);
a_wert = wert.ToFloat() / 3.6; ! Umrechnung in km pro Stunde
if (a_wert < 0.00) {txt = "Fehler"; } else {
if (a_wert < 1.85) {txt = "Windstille"; } else {
if (a_wert < 9.00) {txt = "geringer Wind"; } else {
if (a_wert < 19.00) {txt = "leichter Wind"; } else {
if (a_wert < 28.00) {txt = "schwacher Wind"; } else {
if (a_wert < 37.00) {txt = "mäßiger Wind"; } else {
if (a_wert < 46.00) {txt = "frischer Wind"; } else {
if (a_wert < 56.00) {txt = "starker Wind"; } else {
if (a_wert < 65.00) {txt = "starker bis stürmischer Wind";} else {
if (a_wert < 74.00) {txt = "stürmischer Wind"; } else {
if (a_wert < 83.00) {txt = "Sturm"; } else {
if (a_wert < 102.00) {txt = "schwerer Sturm"; } else {
if (a_wert < 117.00) {txt = "orkanartiger Sturm"; } else {
if (a_wert >= 117.00) {txt = "Orkan"; }}}}}}}}}}}}}}
dom.GetObject("AKT_OWM_Wind").State(txt);
dom.GetObject("AKT_OWM_Wind_Speed").Variable(a_wert.ToString(1));
!WriteLine("Windgeschwindigkeit: " + txt + " mit " + a_wert.ToString(1) +" km/h");
! Beschreibung
string pos1="description\":\"";
string pos2="\"";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
string a_wert;
a_wert = stdout.Substr(wert_pos,30).StrValueByIndex(pos2,0);
a_wert = a_wert.ToUTF8();
dom.GetObject("AKT_OWM_Beschreibung").Variable(a_wert);
WriteLine ("Beschreibung: " # a_wert);
! Wetter
string pos1="main\":\"";
string pos2="\"";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
string a_wert;
a_wert = stdout.Substr(wert_pos,30).StrValueByIndex(pos2,0);
dom.GetObject("AKT_OWM_Weather").Variable(a_wert);
WriteLine ("Weather: " # a_wert);
! Niederschlag über 3h
real a_wert;
string pos1="rain\":{\"3h\":";
string pos2="}";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
a_wert = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);
dom.GetObject("AKT_OWM_Regen3h").Variable(a_wert.ToInteger());
!WriteLine ("Regen in 3h: " # a_wert # " mm");
}
Im System muss jetzt eine ganze Reihe Variablen eingetragen werden: AKT_OWM_Regen3h, AKT_OWM_Weather, AKT_OWM_Beschreibung, AKT_OWM_Wind, AKT_OWM_Wind_Speed, AKT_OWM_AussenTemperatur.
Die Daten kann man für eine ganze Reihe Programme auswerten. Wie ob man heute draußen die Wäsche aufhängen soll, bin mal gespannt auf eure Anwendnen
Das Tageswetter
Hier Werte ich aus dem Wust von Daten das Tageswetter aus. Dies geschieht im 3 Stundentackt
Hier muss im String" weatherURL" den APIID und den StadtID(zb. 2953321 für Frankfurt) eingetragen werden.
Code: Alles auswählen
boolean CUxD=true;
string txt;
var stdout;
real wert;
real a_wert;
integer wert_pos;
string stderr;
string pos2=","; ! oder string pos2="}";
string weatherUrl="http://api.openweathermap.org/data/2.5/forecast?id=&appid=&lang=de";
if(CUxD){
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '" # weatherUrl # "'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
}else{
system.Exec("wget -q -O - '" # weatherUrl # "'", &stdout, &stderr);}
!das heutige Datum herausfinden
string pos_date1="dt_txt\":\"";
string pos3= " ";
integer wert_pos_date1 = stdout.Find(pos_date1) + pos_date1.Length();
string date1 = stdout.Substr(wert_pos_date1,20).StrValueByIndex(pos3,0);
string date2= date1;
while (date1==date2){
! Aussentemperatur
string pos1="{\"temp\":";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
wert = stdout.Substr(wert_pos,10).StrValueByIndex(pos2,0);
real atemp = wert.ToInteger() - 273;
!WriteLine ("aktuelle Aussentemperatur: " # a_wert # "°C");
! Beschreibung
string pos1="description\":\"";
string pos2="\"";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
string beschr = stdout.Substr(wert_pos,30).StrValueByIndex(pos2,0);
beschr = beschr.ToUTF8();
! Wetter
string pos1="main\":\"";
string pos2="\"";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
string bwetter = stdout.Substr(wert_pos,30).StrValueByIndex(pos2,0);
!Niederschlag über 3h
integer niederschlag3h;
string pos1="rain\":{\"3h\":";
string pos2="}";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
niederschlag3h = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);
! Windgeschwingigkeit
string pos1="\"wind\":{\"speed\":";
string pos2=",";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
integer speed = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);
if (speed < 0.00) {txt = "Fehler"; } else {
if (speed < 1.85) {txt = "Windstille"; } else {
if (speed < 9.00) {txt = "geringer Wind"; } else {
if (speed < 19.00) {txt = "leichter Wind"; } else {
if (speed < 28.00) {txt = "schwacher Wind"; } else {
if (speed < 37.00) {txt = "mäßiger Wind"; } else {
if (speed < 46.00) {txt = "frischer Wind"; } else {
if (speed < 56.00) {txt = "starker Wind"; } else {
if (speed < 65.00) {txt = "starker bis stürmischer Wind";} else {
if (speed < 74.00) {txt = "stürmischer Wind"; } else {
if (speed < 83.00) {txt = "Sturm"; } else {
if (speed < 102.00) {txt = "schwerer Sturm"; } else {
if (speed < 117.00) {txt = "orkanartiger Sturm"; } else {
if (speed >= 117.00) {txt = "Orkan"; }}}}}}}}}}}}}}
!Die Uhrzeit herausfinden und den String kuerzen
string pos_time="dt_txt\":\"";
string pos3 = "country\": \"DE\"";
pos2= "\"";
pos3= " ";
integer wert_pos_time = stdout.Find(pos_time) + pos_time.Length()+11;
integer wert_pos_date2 = stdout.Find(pos_time) + pos_time.Length();
string time = stdout.Substr(wert_pos_time,20).StrValueByIndex(pos2,0);
string date2 = stdout.Substr(wert_pos_date2,20).StrValueByIndex(pos3,0);
integer pos4 =wert_pos_date2+21;
stdout = stdout.Substr(pos4,16000);
!WriteLine("UZ: "#time);
!WriteLine("Temperatur: " #atemp);
!WriteLine("Wettertyp: " #bwetter);
!WriteLine("Windgesch: "#speed);
!WriteLine("" #beschr);
!WriteLine("" #bwetter);
!WriteLine(niederschlag3h);
if (time=="00:00:00"){
dom.GetObject("OWM_AussenTemperatur_00").Variable(atemp);
dom.GetObject("OWM_Beschreibung_00").Variable(beschr);
dom.GetObject("OWM_Weather_00").Variable(bwetter);
dom.GetObject("OWM_Regen3h_00").Variable(niederschlag3h);
dom.GetObject("OWM_Wind_00").State(txt);
dom.GetObject("OWM_Wind_Speed_00").Variable(speed);
}
if (time=="03:00:00"){
dom.GetObject("OWM_AussenTemperatur_03").Variable(atemp);
dom.GetObject("OWM_Beschreibung_03").Variable(beschr);
dom.GetObject("OWM_Weather_03").Variable(bwetter);
dom.GetObject("OWM_Regen3h_03").Variable(niederschlag3h);
dom.GetObject("OWM_Wind_03").State(txt);
dom.GetObject("OWM_Wind_Speed_03").Variable(speed);
}
if (time=="06:00:00"){
dom.GetObject("OWM_AussenTemperatur_06").Variable(atemp);
!dom.GetObject("OWM_Beschreibung_06").Variable(beschr);
dom.GetObject("OWM_Weather_06").Variable(bwetter);
dom.GetObject("OWM_Regen3h_06").Variable(niederschlag3h);
dom.GetObject("OWM_Wind_06").State(txt);
dom.GetObject("OWM_Wind_Speed_06").Variable(speed);
}
if (time=="09:00:00"){
dom.GetObject("OWM_AussenTemperatur_09").Variable(atemp);
dom.GetObject("OWM_Beschreibung_09").Variable(beschr);
dom.GetObject("OWM_Weather_09").Variable(bwetter);
dom.GetObject("OWM_Regen3h_09").Variable(niederschlag3h);
dom.GetObject("OWM_Wind_09").State(txt);
dom.GetObject("OWM_Wind_Speed_09").Variable(speed);
}
if (time=="12:00:00"){
dom.GetObject("OWM_AussenTemperatur_12").Variable(atemp);
dom.GetObject("OWM_Beschreibung_12").Variable(beschr);
dom.GetObject("OWM_Weather_12").Variable(bwetter);
dom.GetObject("OWM_Regen3h_12").Variable(niederschlag3h);
dom.GetObject("OWM_Wind_12").State(txt);
dom.GetObject("OWM_Wind_Speed_12").Variable(speed);
}
if (time=="15:00:00"){
dom.GetObject("OWM_AussenTemperatur_15").Variable(atemp);
dom.GetObject("OWM_Beschreibung_15").Variable(beschr);
dom.GetObject("OWM_Weather_15").Variable(bwetter);
dom.GetObject("OWM_Regen3h_15").Variable(niederschlag3h);
dom.GetObject("OWM_Wind_15").State(txt);
dom.GetObject("OWM_Wind_Speed_15").Variable(speed);
}
if (time=="18:00:00"){
dom.GetObject("OWM_AussenTemperatur_18").Variable(atemp);
dom.GetObject("OWM_Beschreibung_18").Variable(beschr);
dom.GetObject("OWM_Weather_18").Variable(bwetter);
dom.GetObject("OWM_Regen3h_18").Variable(niederschlag3h);
dom.GetObject("OWM_Wind_18").State(txt);
dom.GetObject("OWM_Wind_Speed_18").Variable(speed);
}
if (time=="21:00:00"){
dom.GetObject("OWM_AussenTemperatur_21").Variable(atemp);
dom.GetObject("OWM_Beschreibung_21").Variable(beschr);
dom.GetObject("OWM_Weather_21").Variable(bwetter);
dom.GetObject("OWM_Regen3h_21").Variable(niederschlag3h);
dom.GetObject("OWM_Wind_21").State(txt);
dom.GetObject("OWM_Wind_Speed_21").Variable(speed);
}
}
OWM_Beschreibung_00, OWM_AussenTemperatur_00, OWM_Weather_00, OWM_Regen3h_00, OWM_Wind_00,
OWM_Beschreibung_03, OWM_AussenTemperatur_03, OWM_Weather_03, OWM_Regen3h_03, OWM_Wind_03,
OWM_Beschreibung_06, OWM_AussenTemperatur_06, OWM_Weather_06, OWM_Regen3h_06, OWM_Wind_06,
OWM_Beschreibung_09, OWM_AussenTemperatur_09, OWM_Weather_09, OWM_Regen3h_09, OWM_Wind_09,
OWM_Beschreibung_12, OWM_AussenTemperatur_12, OWM_Weather_12, OWM_Regen3h_12, OWM_Wind_12,
OWM_Beschreibung_15, OWM_AussenTemperatur_15, OWM_Weather_15, OWM_Regen3h_15, OWM_Wind_15,
OWM_Beschreibung_18, OWM_AussenTemperatur_18, OWM_Weather_18, OWM_Regen3h_18, OWM_Wind_18,
OWM_Beschreibung_21, OWM_AussenTemperatur_21, OWM_Weather_21, OWM_Regen3h_21, OWM_Wind_21,
Regenmenge, Giessen.
Tageswetter per Telegram
Wenn ein Telegram-bot eingerichtet wurde ((Hier für weitere Infos)), kann man sich sehr einfach per Telegramm morgens das Tageswetter schicken lassen
Code: Alles auswählen
integer Rmax;
integer max;
integer regenmenge;
string regen="Es besteht eine hohe Regenwahrscheinlichkeit um: ";
string klar;
string sturm="Es soll heute stürmen um: ";
string niederschlag;
boolean giessen;
integer T00=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_AussenTemperatur_00").Value();
integer T03=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_AussenTemperatur_03").Value();
integer T06=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_AussenTemperatur_06").Value();
integer T09=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_AussenTemperatur_09").Value();
integer T12=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_AussenTemperatur_12").Value();
integer T15=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_AussenTemperatur_15").Value();
integer T18=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_AussenTemperatur_18").Value();
integer T21=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_AussenTemperatur_21").Value();
if (T00>T03){max=T00;}else{max=T03;}
if (max>T06){max=max;}else{max=T06;}
if (max>T09){max=max;}else{max=T09;}
if (max>T12){max=max;}else{max=T12;}
if (max>T15){max=max;}else{max=T15;}
if (max>T18){max=max;}else{max=T18;}
if (max>T21){max=max;}else{max=T21;}
string W00=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Weather_00").Value();
string W03=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Weather_03").Value();
string W06=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Weather_06").Value();
string W09=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Weather_09").Value();
string W12=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Weather_12").Value();
string W15=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Weather_15").Value();
string W18=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Weather_18").Value();
string W21=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Weather_21").Value();
if (W03=="Rain"){regen=regen+"03 Uhr, ";}
if (W06=="Rain"){regen=regen+"06 Uhr, ";}
if (W09=="Rain"){regen=regen+"09 Uhr, ";}
if (W12=="Rain"){regen=regen+"12 Uhr, ";}
if (W15=="Rain"){regen=regen+"15 Uhr, ";}
if (W18=="Rain"){regen=regen+"18 Uhr, ";}
if (W21=="Rain"){regen=regen+"21 Uhr, ";}
if (W00=="Rain"){regen=regen+"24 Uhr, ";}
if (regen =="Es besteht eine hohe Regenwahrscheinlichkeit um: ") {regen ="";}
if (W00=="clear" & W03=="clear" & W06=="clear" & W09=="clear" & W12=="clear" & W15=="clear" & W18=="clear" & W21=="clear"){klar="Es bleibt den ganzen Tag klar";} else {klar="Es wird heute bewölkt";}
integer S00=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Wind_Speed_00").Value();
integer S03=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Wind_Speed_03").Value();
integer S06=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Wind_Speed_06").Value();
integer S09=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Wind_Speed_09").Value();
integer S12=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Wind_Speed_12").Value();
integer S15=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Wind_Speed_15").Value();
integer S18=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Wind_Speed_18").Value();
integer S21=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Wind_Speed_21").Value();
if (S03 > 39){sturm=sturm+"03 Uhr, ";}
if (S06 > 39){sturm=sturm+"06 Uhr, ";}
if (S09 > 39){sturm=sturm+"09 Uhr, ";}
if (S12 > 39){sturm=sturm+"12 Uhr, ";}
if (S15 > 39){sturm=sturm+"15 Uhr, ";}
if (S18 > 39){sturm=sturm+"18 Uhr, ";}
if (S21 > 39){sturm=sturm+"21 Uhr, ";}
if (S00 > 39){sturm=sturm+"24 Uhr, ";}
if (sturm=="Es soll heute stürmen um: "){sturm="Es weht kaum wind";}
max = max.ToString(1);
integer R00=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Regen3h_00").Value();
integer R03=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Regen3h_03").Value();
integer R06=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Regen3h_06").Value();
integer R09=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Regen3h_09").Value();
integer R12=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Regen3h_12").Value();
integer R15=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Regen3h_15").Value();
integer R18=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Regen3h_18").Value();
integer R21=dom.GetObject(ID_SYSTEM_VARIABLES).Get("OWM_Regen3h_21").Value();
if (R00>R03){Rmax=R00;}else{Rmax=03;}
if (Rmax>R06){Rmax=Rmax;}else{Rmax=R06;}
if (Rmax>R09){Rmax=Rmax;}else{Rmax=R09;}
if (Rmax>R12){Rmax=Rmax;}else{Rmax=R12;}
if (Rmax>R15){Rmax=Rmax;}else{Rmax=R15;}
if (Rmax>R18){Rmax=Rmax;}else{Rmax=R18;}
if (Rmax>R21){Rmax=Rmax;}else{Rmax=R21;}
regenmenge= R00+R03+R06+R09+R12+R15+R18+R21;
dom.GetObject("regenmenge").Variable(Regenmenge);
if (regenmenge>20){giessen=false; dom.GetObject("Giessen").Variable(false);}else{giessen=true; dom.GetObject("Giessen").Variable(true);}
regenmenge = regenmenge.ToString(1);
WriteLine(regenmenge);
if (Rmax>0 ){niederschlag="Es gibt leichten Regen";}
if (Rmax>=2.5 ){niederschlag="Es gibt mittleren regen";}
if (Rmax>=10){niederschlag="Es gibt ein starkes Gewitter";}
string message = klar+ "\n" + "Temperatur bis " +max+" °C," +"\n"+sturm +"\n"+regen+"\n"+niederschlag;
message= message.ToUTF8();
WriteLine(message);
!string chatid = ""; ! chat_id des Empfängers
!string botAPI = ""; ! API des eingerichteten Bots
!dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/botAPI/sendMessage -d text='"#message#"' -d chat_id="#chatid);