Aussentemperatur von OpenWeatherMap.Org laden

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

nibblersrevenge
Beiträge: 27
Registriert: 08.10.2014, 09:38

Aussentemperatur von OpenWeatherMap.Org laden

Beitrag von nibblersrevenge » 08.10.2014, 12:14

Für ein anderes Script (http://homematic-forum.de/forum/viewtop ... 31&t=20602), welches Alarm bei zu lange geöffneten Fenstern auslöst benötige ich die Aussentemperatur.
Da ich diese nicht exakt benötige, kaufe ich mir keine Wetterstation sondern hole diese von http://openweathermap.org/current und schreibe den Wert einmal pro Stunde in eine Systemvariable.

Folgende Vorbereitung muss erfolgen:
1. Eine Systemvariable mit dem Namen AussenTemperatur muss erstellt werden.
2. Die weatherUrl im Script unten muß auf Eure Stadt angepasst werden.
(Es gibt auch die Möglichkeit, Längen und Breitengrad anzugeben ... näheres auf openweathermap.org)

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);

! Die Werte sind in Kelvin, deswegen muss 273.15 abgezogen werden um auf Grad-Celsius zu kommen.
real aktTemp=stdout.ToFloat()-273.15;

!Manchmal gibt es Fehler beim Abfragen, dann entsteht eine Temperatur von -273Grad. 
if (aktTemp>-272){
    dom.GetObject('AussenTemperatur').Variable(stdout.ToFloat()-273.15);
    WriteLine(dom.GetObject('AussenTemperatur').Variable());
}
EDIT 31.10.2014:
Ausführlicheres Script mit mehr Ergebnissen (erweitert von hoffmakl):
http://homematic-forum.de/forum/viewtop ... 10#p175847

Weiteres Wetterscript von funkleuchtturm:
http://homematic-forum.de/forum/viewtop ... nd#p139456
Zuletzt geändert von nibblersrevenge am 31.10.2014, 11:23, insgesamt 1-mal geändert.

Benutzeravatar
ff-haus
Beiträge: 145
Registriert: 09.12.2012, 21:20

Re: Aussentemperatur von OpenWeatherMap.Org laden

Beitrag von ff-haus » 16.10.2014, 14:00

Klappt es auch noch weitere Wetterdaten von der Seite abzurufen?
148 Kanäle in 61 Geräten mit 23 Gerätetypen:

nibblersrevenge
Beiträge: 27
Registriert: 08.10.2014, 09:38

Re: Aussentemperatur von OpenWeatherMap.Org laden

Beitrag von nibblersrevenge » 16.10.2014, 18:30

ff-haus hat geschrieben:Klappt es auch noch weitere Wetterdaten von der Seite abzurufen?
ja, alles was Du unter http://api.openweathermap.org/data/2.5/find?q=Berlin an Daten findest.
Also Luftdruck, Luftfeuchtigkeit, minimal und maximal Temperatur, Windgeschwindigkeit und Richtung.

Aber auch Wettervorhersage siehe: http://openweathermap.org/api

Benutzeravatar
ff-haus
Beiträge: 145
Registriert: 09.12.2012, 21:20

Re: Aussentemperatur von OpenWeatherMap.Org laden

Beitrag von ff-haus » 16.10.2014, 19:56

Code: Alles auswählen

string weatherUrl='http://api.openweathermap.org/data/2.5/find?q=Chemnitz';

string stderr;
string stdout;
system.Exec("wget -q -O - "#weatherUrl, &stdout, &stderr);

string pos1='{"humidity":';
string pos2=',';
integer humidityPos=stdout.Find(pos1) +  pos1.Length();
stdout=stdout.Substr(humidityPos,100).StrValueByIndex(pos2,0);

! Die Werte sind in Kelvin, deswegen muss 273.15 abgezogen werden um auf Grad-Celsius zu kommen.
real akthumidity=stdout.ToFloat();

{ akthumidity = akthumidity.ToString(1)#" %";
  dom.GetObject('Luftfeuchtigkeit').State(akthumidity);
}
Ich habe den Code mal für Luftfeuchtigkeit angepasst. Doch Werte kommen nicht heraus.
148 Kanäle in 61 Geräten mit 23 Gerätetypen:

nibblersrevenge
Beiträge: 27
Registriert: 08.10.2014, 09:38

Re: Aussentemperatur von OpenWeatherMap.Org laden

Beitrag von nibblersrevenge » 17.10.2014, 07:18

So gehts....

Code: Alles auswählen

string weatherUrl='http://api.openweathermap.org/data/2.5/find?q=Chemnitz';

string stderr;
string stdout;
system.Exec("wget -q -O - "#weatherUrl, &stdout, &stderr);

string pos1='humidity":';
string pos2=',';
integer humidityPos=stdout.Find(pos1) +  pos1.Length();
stdout=stdout.Substr(humidityPos,100).StrValueByIndex(pos2,0);

real akthumidity=stdout.ToFloat();

akthumidity = akthumidity.ToString(1)#" %";

WriteLine(akthumidity);
dom.GetObject('Luftfeuchtigkeit').State(akthumidity);

Benutzeravatar
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

Beitrag von papi » 17.10.2014, 09:59

Oh cool, Danke, habe ich mir sogleich auch eingebaut. :-)

Kann mir jemand sagen, wie man auch den Wind, Luftdruck und Regen abgfragt?
Regen scheint ja eine boolsche Geschichte zu sein oder? Aktuell wird da nämlich "1" für meinen Ort angezeigt.
Oder ist das die Stärke des Regens in einem Wertebereich?

Gruß
Michael

nibblersrevenge
Beiträge: 27
Registriert: 08.10.2014, 09:38

Re: Aussentemperatur von OpenWeatherMap.Org laden

Beitrag von nibblersrevenge » 18.10.2014, 10:42

Hallo,

was die Daten bei Rain bedeuten, weiß ich nicht.
Kannst Du aber sicher hier herausbekommen:http://openweathermap.org/weather-data#current

Das Script arbeitet ganz simpel:
die Antwort von OpenWeatherMap zerteile ich in drei Teile.
dafür ist im Script pos1 und pos2 verantwortlich:

Code: Alles auswählen

string pos1='humidity":';
string pos2=',';
Meine Antwort vom Server ist im Moment: http://api.openweathermap.org/data/2.5/find?q=Berlin

Code: Alles auswählen

{"message":"accurate","cod":"200","count":1,"list":[{"id":2950159,"name":"Berlin","coord":{"lon":13.41053,"lat":52.524368},"main":{"temp":285.01,"pressure":1023,"humidity":100,"temp_min":284.15,"temp_max":285.55},"dt":1413620036,"wind":{"speed":1,"deg":70},"sys":{"country":"DE"},"clouds":{"all":90},"weather":[{"id":741,"main":"Fog","description":"fog","icon":"50d"}]}]}
Wenn ich also den Luftruck möchte, dann ist pos1='pressure":' (natürlich mit Anführungszeichen und Doppelpunkt!)
Das Script zerteilt die Antwort und nimmt den 2ten Teil und übrig bleibt:

Code: Alles auswählen

1023,"humidity":100,"temp_min":284.15,"temp_max":285.55},"dt":1413620036,"wind":{"speed":1,"deg":70},"sys":{"country":"DE"},"clouds":{"all":90},"weather":[{"id":741,"main":"Fog","description":"fog","icon":"50d"}]}]}
Der Luftdruck steht jetzt ganz vorne und der Rest muss abgeschnitten werden.
Dafür ist pos2=',' also das Komma.
Übrig bleibt

Benutzeravatar
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

Beitrag von papi » 19.10.2014, 20:12

Ah, Rain ist wohl die Millimeterangabe des Niederschlags innerhalb der letzten 3 Stunden.

Danke für Deine Mühe!

dangerx
Beiträge: 16
Registriert: 17.10.2013, 21:38

Re: Aussentemperatur von OpenWeatherMap.Org laden

Beitrag von dangerx » 26.10.2014, 20:36

Hallo

vielen Dank für die Tolle Anleitung, kann man das auch mit CUxD ausführen lassen....

nibblersrevenge
Beiträge: 27
Registriert: 08.10.2014, 09:38

Re: Aussentemperatur von OpenWeatherMap.Org laden

Beitrag von nibblersrevenge » 27.10.2014, 10:16

dangerx hat geschrieben:Hallo
vielen Dank für die Tolle Anleitung, kann man das auch mit CUxD ausführen lassen....
Ich kenne mich mit CUxD leider gar nicht aus.... :|

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“