Aussentemperatur von OpenWeatherMap.Org laden
Moderator: Co-Administratoren
-
- Beiträge: 2
- Registriert: 29.10.2017, 15:49
Re: Aussentemperatur von OpenWeatherMap.Org laden
Ich bin fündig geworden.
Das Problem ist der URL Aufruf.
Siehe auch: viewtopic.php?f=26&t=41413&p=412148#p412148
Bin zwar nicht wirklich fit in Sachen Skripte aber es funktioniert bei mir wenn ich die URL zusätzlich in Anführungszeichen setze.
string weatherUrl="'http://api.openweathermap.org/data/2.5/ ... xxxxxxxxxx'";
Das Problem ist der URL Aufruf.
Siehe auch: viewtopic.php?f=26&t=41413&p=412148#p412148
Bin zwar nicht wirklich fit in Sachen Skripte aber es funktioniert bei mir wenn ich die URL zusätzlich in Anführungszeichen setze.
string weatherUrl="'http://api.openweathermap.org/data/2.5/ ... xxxxxxxxxx'";
Re: Aussentemperatur von OpenWeatherMap.Org laden
Bei mir funktioniert es mit folgender Änderung:
Code: Alles auswählen
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);
}
-
- Beiträge: 6
- Registriert: 19.02.2014, 02:41
Re: Aussentemperatur von OpenWeatherMap.Org laden
Hi,
danke für diesen äußerst interessanten Thread.
Ich bin mal so frei und fasse das Skript auf dem aktuellen Stand hier zusammen:
Alle Variablen in Gänsefüßchen hinter dom.GetObject, also beispielsweise "VAR_OWM_Regen3h" müssen manuell in der CCU angelegt werden. Gibt es hier eine Empfehlung für den Datentyp?
Hab ich übersehen?
Liebe Grüße
Chris
danke für diesen äußerst interessanten Thread.
Ich bin mal so frei und fasse das Skript auf dem aktuellen Stand hier zusammen:
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/weather?q=Ort,de&appid=xxxxxxanpassenxxxxx";
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.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
string pos1="\"gust\":";
string pos2=",";
if(stdout.Find(pos1)>-1){
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");
}else{
! ### Variable zurücksetzen ###
dom.GetObject("VAR_OWM_Wind_Gust").Variable(0);
}
! 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"));
}
Hab ich übersehen?
Liebe Grüße
Chris
Zuletzt geändert von alchy am 25.04.2018, 22:56, insgesamt 1-mal geändert.
Grund: Code in Codetags posten
Grund: Code in Codetags posten
Re: Aussentemperatur von OpenWeatherMap.Org laden
Die Systemvariablen sind bei mir ausschliesslich vom Typ Zahl
Ausser:
Code: Alles auswählen
VAR_OWM_Wind_Speed
VAR_OWM_Windrichtung
VAR_OWM_Zeit
Ist der Wert VAR_OWM_Regen3h bei euch gefüllt?
Bei mir fehlt der in der API oder gibts da noch einen Trick? Rückgabewerte sind:
Code: Alles auswählen
coord
lon 11.58
lat 48.14
weather
0
id 803
main "Clouds"
description "broken clouds"
icon "04d"
base "stations"
main
temp 290.76
pressure 1016
humidity 72
temp_min 290.15
temp_max 291.15
visibility 10000
wind
speed 1.5
deg 250
clouds
all 75
dt 1531246800
sys
type 1
id 4887
message 0.0022
country "DE"
sunrise 1531193099
sunset 1531249970
id 2867714
name "Muenchen"
cod 200
Re: Aussentemperatur von OpenWeatherMap.Org laden
Noch eine Frage zu CuxD (ist das erstmal, das ich es nutze)
Sobald ich die Variable auf "true" setze (bzw. lasse)
Bekomme ich als Ausgabe nur noch 1 d.h. der wget schein schon nciht zu funktionieren. Wie debugged man bei CuxD?
Lösung:
Ma muss natürlich bei CuxD erst ein Gerät 28 anlegen (siehe auch https://technikkram.net/2017/08/homemat ... c-ersetzen)
Sobald ich die Variable auf "true" setze (bzw. lasse)
Code: Alles auswählen
if(CUxD){
WriteLine("1");
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '" # weatherUrl # "'");
WriteLine("2");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
WriteLine("3");
stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
Lösung:
Ma muss natürlich bei CuxD erst ein Gerät 28 anlegen (siehe auch https://technikkram.net/2017/08/homemat ... c-ersetzen)
-
- Beiträge: 41
- Registriert: 16.03.2017, 10:36
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 11 Mal
- Danksagung erhalten: 1 Mal
Re: Aussentemperatur von OpenWeatherMap.Org laden
Hallo mcbert,
https://openweathermap.desk.com/custome ... howing-up-
Dort heißt es unter anderem:
---
Generell denke ich dass es besser ist die API mit folgenden Zusätzen aufzurufen:
&units=metric (bereits von mape erwähnt, weniger Konvertierung im Skript erforderlich)
&lang=DE (bringt die description bereits in gewünschter Zielsprache also z.B: "Überwiegend bewölkt" statt "scattered clouds"
also etwa so
Was man vielleicht auch noch nutzen könnte ist folgende Information die zurückgegeben wird
welche die Data receiving time in Unix, UTC bereitsstellt. Müsste man nur in Datum / Uhrzeit konvertieren und eine eigene Systemvaribale mit Zeichenkette zuweisen, dann weiß man nicht nur wann die Wetterdaten in die CCU2 geladen wurden sondern auch deren Alter.
Viele Grüße, Bastian
Bei mir die gleiche Situation, nach etwas forschen bin ich auf diesen Thread gestoßen:
https://openweathermap.desk.com/custome ... howing-up-
Dort heißt es unter anderem:
Sprich es liefern leider nicht alle Wetterstationen diesen Wert.There is a case when precipitation data is not provided by the weather stations (simply not measured).
---
Generell denke ich dass es besser ist die API mit folgenden Zusätzen aufzurufen:
&units=metric (bereits von mape erwähnt, weniger Konvertierung im Skript erforderlich)
&lang=DE (bringt die description bereits in gewünschter Zielsprache also z.B: "Überwiegend bewölkt" statt "scattered clouds"
also etwa so
Code: Alles auswählen
http://api.openweathermap.org/data/2.5/weather?id=111ORTID111&APPID=111APIKEY111[b]&mode=metric&lang=DE[/b]
Code: Alles auswählen
dt 1531246800
Viele Grüße, Bastian