Aussentemperatur von OpenWeatherMap.Org laden
Moderator: Co-Administratoren
-
- Beiträge: 27
- Registriert: 08.10.2014, 09:38
Re: Aussentemperatur von OpenWeatherMap.Org laden
JA, funktioniert natürlich auch ohne CUxD.
Der folgende Code läuft bei mir seit 6 Monaten fehlerfrei (mir reicht die Außentemperatur) .
Vorraussetzung: Systemvariiable mit dem Namen: 'AussenTemperatur'
Der folgende Code läuft bei mir seit 6 Monaten fehlerfrei (mir reicht die Außentemperatur) .
Vorraussetzung: Systemvariiable mit dem Namen: 'AussenTemperatur'
Code: Alles auswählen
string weatherUrl='http://api.openweathermap.org/data/2.5/find?q=Berlin';
string stderr;
string stdout;
system.Exec("wget -q -O - "#weatherUrl, &stdout, &stderr);
string pos1='{"temp":';
string pos2=',';
integer tempPos=stdout.Find(pos1) + pos1.Length();
stdout=stdout.Substr(tempPos,100).StrValueByIndex(pos2,0);
real aktTemp=stdout.ToFloat()-273.15;
if (aktTemp>-272){
dom.GetObject('AussenTemperatur').Variable((stdout.ToFloat()-273.15));
}
-
- Beiträge: 55
- Registriert: 17.04.2014, 22:38
- Hat sich bedankt: 16 Mal
- Danksagung erhalten: 2 Mal
Re: Aussentemperatur von OpenWeatherMap.Org laden
Hallo,
bei mir fehlen im WebUi hinter den Temperaturen und den anderen Werten,
die Zeichen für %, km/s, °C, hPa usw.
Ich verwende das Script Version 0r2
Kann mir da jemand weiter helfen?
bei mir fehlen im WebUi hinter den Temperaturen und den anderen Werten,
die Zeichen für %, km/s, °C, hPa usw.
Ich verwende das Script Version 0r2
Kann mir da jemand weiter helfen?
-
- Beiträge: 27
- Registriert: 08.10.2014, 09:38
Re: Aussentemperatur von OpenWeatherMap.Org laden
Hallo Peter0961,
die Werte werden (zumindest von mir) zur Weiterverwendung ohne Einheiten gespeichert.
Suche im Script nach Einträgen wie z.B.:
und setze die Einheit mi +"xxx" dazu:
die Werte werden (zumindest von mir) zur Weiterverwendung ohne Einheiten gespeichert.
Suche im Script nach Einträgen wie z.B.:
Code: Alles auswählen
dom.GetObject("W_Wind_Speed").Variable(a_wert.ToString(1));
Code: Alles auswählen
dom.GetObject("W_Wind_Speed").Variable(a_wert.ToString(1) + "m/s" );
Re: Aussentemperatur von OpenWeatherMap.Org laden
Warum nicht in den Systemvariablen bei der Definition eine Einheit angeben?
Ich denke ein String daraus zu machen hat den Nachteil dass du die Wertgrösse nicht auswerten kannst. Ich nutze z. B. die aussentemp. um eine Mail an meine Frau und mich zu schicken wenn Fenster länger als 10/20 Minuten auf und Temperatur <10°C/18°C dann email an alle Familienmitglied oder Windgeschwindigkeit >56km/h und Fenster auf Dann auch email.
Ich denke ein String daraus zu machen hat den Nachteil dass du die Wertgrösse nicht auswerten kannst. Ich nutze z. B. die aussentemp. um eine Mail an meine Frau und mich zu schicken wenn Fenster länger als 10/20 Minuten auf und Temperatur <10°C/18°C dann email an alle Familienmitglied oder Windgeschwindigkeit >56km/h und Fenster auf Dann auch email.
- papi
- Beiträge: 371
- Registriert: 18.12.2013, 08:40
- Wohnort: Willich, NRW
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 5 Mal
Re: Aussentemperatur von OpenWeatherMap.Org laden
Was macht Ihr denn mit den Werten, die nur temporär von OpenWeatherMap geliefert werden?
Ich habe gerade noch die Abfrage der Windböen ("Gust") mit eingebaut, aber dieser Wert wird nicht dauerhaft von der Seite geliefert.
Eben kam er noch mit, jetzt ist er weg, genau wie die Böe.
Die Variable in der CCU behält aber natürlich dann ihren Wert, das ist doof.
Wenn kein Wert geliefert wird, müsste man dann doch irgendwie/irgendwann den Wert auf Null setzen?!
Das Gleiche hätten wir ja auch z.B. bei Nebel und Schnee.
Edit:
Erschwerend kommt noch dazu, dass der Wert aus der Windberechnung, die bei mir vorher abläuft, dann in der Böenberechnung wieder verwendet wird, weil er nicht durch den neuen Böenwert ersetzt wird, weil die Vaiablen den gleichen Namen haben:
Macht es Sinn, die Variable a_wert durch eine Vaiable b_wert zu ersetzen?
Oder kann ich eine der Variablen zu Beginn der Routine auf Null setzen, also quasi resetten? (wert = "0")?
Ich habe gerade noch die Abfrage der Windböen ("Gust") mit eingebaut, aber dieser Wert wird nicht dauerhaft von der Seite geliefert.
Eben kam er noch mit, jetzt ist er weg, genau wie die Böe.
Die Variable in der CCU behält aber natürlich dann ihren Wert, das ist doof.
Code: Alles auswählen
! Windboeen
string pos1="\"gust\":";
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
dom.GetObject("VAR_OWM_Wind_Gust").Variable(a_wert.ToString(1));
WriteLine("Windböen: " + a_wert.ToString(1) +" km/h");
Das Gleiche hätten wir ja auch z.B. bei Nebel und Schnee.
Edit:
Erschwerend kommt noch dazu, dass der Wert aus der Windberechnung, die bei mir vorher abläuft, dann in der Böenberechnung wieder verwendet wird, weil er nicht durch den neuen Böenwert ersetzt wird, weil die Vaiablen den gleichen Namen haben:
Code: Alles auswählen
! 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("VAR_OWM_Wind").State(txt);
dom.GetObject("VAR_OWM_Wind_Speed").Variable(a_wert.ToString(1));
WriteLine("Windgeschwindigkeit: " + txt + " mit " + a_wert.ToString(1) +" km/s");
! Windboeen
string pos1="\"gust\":";
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
dom.GetObject("VAR_OWM_Wind_Gust").Variable(a_wert.ToString(1));
WriteLine("Windböen: " + a_wert.ToString(1) +" km/s");
Oder kann ich eine der Variablen zu Beginn der Routine auf Null setzen, also quasi resetten? (wert = "0")?
Zuletzt geändert von papi am 31.03.2015, 14:15, insgesamt 1-mal geändert.
Re: Aussentemperatur von OpenWeatherMap.Org laden
Hm ... am Anfang als "Loakle Variablen" alle Werte auf die "Default/Nicht gesetzt"-Werte setzen und dann mit den Werten des Partners überschreiben und dann am Schluss in die Systemvariablen übertragen ... immer alle ...
-
- Beiträge: 27
- Registriert: 08.10.2014, 09:38
Re: Aussentemperatur von OpenWeatherMap.Org laden
hallo papi,
ich benötige nur die Aussentemperatur.
Der richtige weg wäre meiner Meinung nach vor dem setzen der Variable diese zu nullen.
Wenn ein neuer Wert vorhanden ist, wird der Nullwert dann gleich wieder ersetzt.
ich benötige nur die Aussentemperatur.
Der richtige weg wäre meiner Meinung nach vor dem setzen der Variable diese zu nullen.
Wenn ein neuer Wert vorhanden ist, wird der Nullwert dann gleich wieder ersetzt.
Code: Alles auswählen
! Windboeen
! ### Variable zurücksetzen ###
dom.GetObject("VAR_OWM_Wind_Gust").Variable('-');
string pos1="\"gust\":";
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
dom.GetObject("VAR_OWM_Wind_Gust").Variable(a_wert.ToString(1));
- papi
- Beiträge: 371
- Registriert: 18.12.2013, 08:40
- Wohnort: Willich, NRW
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 5 Mal
Re: Aussentemperatur von OpenWeatherMap.Org laden
Ach, ich hatte während des Editierens meines Beitrags gar nicht bemerkt, dass Du schon geantwortet hast.
Danke, das werde ich mal versuchen. Das ist wohl genau das, was ich gesucht habe.
Danke, das werde ich mal versuchen. Das ist wohl genau das, was ich gesucht habe.
- papi
- Beiträge: 371
- Registriert: 18.12.2013, 08:40
- Wohnort: Willich, NRW
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 5 Mal
Re: Aussentemperatur von OpenWeatherMap.Org laden
Hm, irgendetwas klappt da nicht.
Ich habe zurzeit immer eine Windgeschwindigkeit von 0,7 Km/h und eine Böe von 0,6 Km/h, obwohl gar kein Wert von der API geliefert wird und obwohl ich den Reset mit verbaut habe.
Hier die aktuelle Antwort der API:
{"temp":280.888,"temp_min":280.888,"temp_max":280.888,"pressure":1001.74,"sea_level":1013.42,"grnd_level":1001.74,"humidity":95},"dt":1427801967,"wind":{"speed":13.46,"deg":280.006},"sys":{"country":"Germany"},"rain":{"3h":1.095},"clouds":{"all":92},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}]}]}
So sähe übrigens die Antwort der API aus, wenn die Böe mitgeliefert würde:
{"temp":280.888,"temp_min":280.888,"temp_max":280.888,"pressure":1001.74,"sea_level":1013.42,"grnd_level":1001.74,"humidity":95},"dt":1427801967,"wind":{"speed":13.46,"gust":23.08,"deg":280.006},"sys":{"country":"Germany"},"rain":{"3h":1.095},"clouds":{"all":92},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}]}]}
Und hier nochmal vorsichtshalber das komplette Script:
Ich habe zurzeit immer eine Windgeschwindigkeit von 0,7 Km/h und eine Böe von 0,6 Km/h, obwohl gar kein Wert von der API geliefert wird und obwohl ich den Reset mit verbaut habe.
Hier die aktuelle Antwort der API:
{"temp":280.888,"temp_min":280.888,"temp_max":280.888,"pressure":1001.74,"sea_level":1013.42,"grnd_level":1001.74,"humidity":95},"dt":1427801967,"wind":{"speed":13.46,"deg":280.006},"sys":{"country":"Germany"},"rain":{"3h":1.095},"clouds":{"all":92},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}]}]}
So sähe übrigens die Antwort der API aus, wenn die Böe mitgeliefert würde:
{"temp":280.888,"temp_min":280.888,"temp_max":280.888,"pressure":1001.74,"sea_level":1013.42,"grnd_level":1001.74,"humidity":95},"dt":1427801967,"wind":{"speed":13.46,"gust":23.08,"deg":280.006},"sys":{"country":"Germany"},"rain":{"3h":1.095},"clouds":{"all":92},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}]}]}
Und hier nochmal vorsichtshalber das komplette Script:
Code: Alles auswählen
string CityName="Anrath";
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/find?q=" + CityName;
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();
! 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.ToFloat() - 273.15;
if (a_wert>-273.15) {
dom.GetObject("VAR_OWM_AussenTemperatur").Variable(a_wert);
WriteLine ("aktuelle Aussentemperatur: " # a_wert # "°C");
! minimale Aussentemperatur
string pos1="\"temp_min\":";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
wert = stdout.Substr(wert_pos,10).StrValueByIndex(pos2,0);
real a_wert = wert.ToFloat() - 273.15;
if (a_wert>-273.15) {
dom.GetObject("VAR_OWM_Aussen_min_Temperatur").Variable(a_wert);
WriteLine ("minimale Aussentemperatur: " # a_wert # "°C");
}
! maximale Aussentemperatur
string pos1="\"temp_max\":";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
wert = stdout.Substr(wert_pos,10).StrValueByIndex(pos2,0);
real a_wert = wert.ToFloat() - 273.15;
if (a_wert>-273.15) {
dom.GetObject("VAR_OWM_Aussen_max_Temperatur").Variable(a_wert);
WriteLine ("maximale Aussentemperatur: " # a_wert # "°C");
}
! Luftdruck
integer a_wert;
string pos1="\"pressure\":";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
a_wert = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);
dom.GetObject("VAR_OWM_Luftdruck").Variable(a_wert.ToInteger());
WriteLine ("Luftdruck: " # a_wert # " hPa");
! Relative Luftfeuchtigkeit
real a_wert;
string pos1="\"humidity\":";
string pos2=",";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
a_wert = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);
dom.GetObject("VAR_OWM_RelFeuchte").Variable(a_wert.ToInteger());
WriteLine ("Relative Luftfeuchtigkeit: " # a_wert # " %");
! 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("VAR_OWM_Wind").State(txt);
dom.GetObject("VAR_OWM_Wind_Speed").Variable(a_wert.ToString(1));
WriteLine("Windgeschwindigkeit: " + txt + " mit " + a_wert.ToString(1) +" km/h");
! Windboeen
! ### Variable zurücksetzen ###
dom.GetObject("VAR_OWM_Wind_Gust").Variable('-');
string pos1="\"gust\":";
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
dom.GetObject("VAR_OWM_Wind_Gust").Variable(a_wert.ToString(1));
WriteLine("Windböen: " + a_wert.ToString(1) +" km/h");
! Windrichtung
real wert;
string pos1="\"deg\":";
string pos2="}";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
wert = stdout.Substr(wert_pos,10).StrValueByIndex(pos2,0);
real a_wert = wert.ToFloat();
if (a_wert < 0.0) {txt = "Fehler" ;}else {
if (a_wert < 22.5) {txt = "Nord" ;} else {
if (a_wert < 67.5) {txt = "Nord-Ost" ;} else {
if (a_wert < 112.5) {txt = "Ost" ;} else {
if (a_wert < 157.5) {txt = "Sued-Ost" ;} else {
if (a_wert < 202.5) {txt = "Sued" ;} else {
if (a_wert < 247.5) {txt = "Sued-West" ;} else {
if (a_wert < 292.5) {txt = "West" ;} else {
if (a_wert < 337.5) {txt = "Nord-West" ;} else {
if (a_wert <= 360.0) {txt = "Nord" ;} else {
if (a_wert > 360.0) {txt = "Fehler" ;} }}}}}}}}}}
dom.GetObject("VAR_OWM_Windrichtung").State(txt);
WriteLine("Windrichtung: " + txt);
! Bewölkung
string pos1="clouds\":{\"all\":";
string pos2="}";
integer wert_pos = stdout.Find(pos1) + pos1.Length();
integer a_wert;
a_wert = stdout.Substr(wert_pos,10).StrValueByIndex(pos2,0);
dom.GetObject("VAR_OWM_Bewoelkung").Variable(a_wert.ToInteger());
WriteLine ("Bewölkung: " # 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("VAR_OWM_Regen3h").Variable(a_wert.ToInteger());
WriteLine ("Regen in 3h: " # a_wert # " mm");
! Zeit der Wetterdaten setzen
dom.GetObject("VAR_OWM_Zeit").State(system.Date("%Y-%m-%d %H:%M:%S"));
}
Zuletzt geändert von papi am 31.03.2015, 14:33, insgesamt 1-mal geändert.