Skript zur Auswertung von Temperatur und Windgeschwindigkeit

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

Moderator: Co-Administratoren

Antworten
nick74ma
Beiträge: 3
Registriert: 21.05.2018, 16:45

Skript zur Auswertung von Temperatur und Windgeschwindigkeit

Beitrag von nick74ma » 21.05.2018, 16:51

Code: Alles auswählen

! Skript zur Auswertung von Tageshöchsttemperatur und max. Windstärke aus openweathermap.org (5 day / 3 hour forecast)

! Anwendung: Skript zum Sonnenaufgang ausführen um die Systemvariablen Tageshoechsttemperatur und maximaleWindgeschwindigkeit zu setzen
! Programme anlegen:
! - Basierend auf Tageshoechsttemperatur (und Uhrzeit, Lichtmessung, uws.) die Jalousien herunterfahren, um ein Aufheizen des Hauses zu vermeiden
! - Basierend auf maximaleWindgeschwindigkeit das Absenken der Jalousien unterdrücken, um eine Beschädigung bei einem Sturm zu vermeiden

! Voraussetzungen: 
! - Systemvariablen Tageshoechsttemperatur und maximaleWindgeschwindigkeit angelegt
! - Kostenlose Registrierung erfolgt: https://home.openweathermap.org/users/sign_up
! - Kostenloser API Key besorgt: https://home.openweathermap.org/api_keys
! - city-ID des Wohnorts aus city.list.json.gz extrahiert: http://bulk.openweathermap.org/sample/

string appIdString='xxxxxxxxxxxxxxxxxxx'; ! OpenWeather API key
string cityIdString='yyyyyyy'; ! OpenWeatherMap city-ID
string weatherUrl='http://api.openweathermap.org/data/2.5/forecast?id='+cityIdString+'&appid='+appIdString;
string fehlermeldungString;
string wetterprognoseString;
system.Exec("wget -q -O - '" # weatherUrl # "'", &wetterprognoseString, &fehlermeldungString);
WriteLine ('wetterprognoseString: '+wetterprognoseString); !DEBUG
if (fehlermeldungString.Length()>0) {
	WriteLine ('fehlermeldungString: '+fehlermeldungString); !DEBUG
	quit;
}

! Auswertung maximale Temperatur
integer i=1;
string teilString;
string vorWertString='"temp":'; !Vor der Temperaturangeabe kommt "temp":
string wertString;
string nachwertString=","; !Nach der Temperaturangeabe folgt ,
real wertReal=0;
! Wetterprognose kommt in Zeitscheiben von jeweils 3 Stunden => die ersten 8 Zeitscheiben werden ausgewertet
while (i<9)
{
	teilString=wetterprognoseString.StrValueByIndex(vorWertString,i);
	wertString=teilString.Substr(vorWertString.Length()-1,10).StrValueByIndex(nachwertString,0);
	WriteLine ('wertString: '+wertString); !DEBUG
	if (wertString.ToFloat()>wertReal) { wertReal=wertString.ToFloat(); }
	i=i+1;
}
WriteLine ('wertReal: '+wertReal); !DEBUG
if (wertReal>0) { ! Bei einem fehlerhaften Abruf wird 0 ausgelesen. In diesem Fall soll die Tageshöchsttemperatur vom Vortag beibehalten werden. Der Fehler tritt eher selten auf - keine Ahnung, wie er sich vermeiden lässt.
	wertReal=wertReal-273.15; ! Umrechnung Kelvin auf Celsius
	dom.GetObject('Tageshoechsttemperatur').Variable(wertReal);
	WriteLine('Tageshoechsttemperatur: '+dom.GetObject('Tageshoechsttemperatur').Variable()); !DEBUG
}

! Auswertung maximale Windgeschwindigkeit
integer i=1;
string teilString;
string vorWertString='"speed":'; !Vor der Windgeschwindigkeit kommt "speed":
string wertString;
string nachwertString=","; !Nach der Windgeschwindigkeit folgt ,
real wertReal=0;
! Wetterprognose kommt in Zeitscheiben von jeweils 3 Stunden => die ersten 8 Zeitscheiben werden ausgewertet
while (i<9)
{
	teilString=wetterprognoseString.StrValueByIndex(vorWertString,i);
	wertString=teilString.Substr(vorWertString.Length()-1,10).StrValueByIndex(nachwertString,0);
	WriteLine ('wertString: '+wertString); !DEBUG
	if (wertString.ToFloat()>wertReal) { wertReal=wertString.ToFloat(); }
	i=i+1;
}
WriteLine ('wertReal: '+wertReal); !DEBUG


if (wertReal>0) { ! Bei einem fehlerhaften Abruf wird 0 ausgelesen. In diesem Fall soll die Windgeschwindigkeit vom Vortag beibehalten werden. Der Fehler tritt bei Tageshöchsttemperatur eher selten auf - ich weiß nicht, ob er auch bei der Windgeschwindigkeit auftritt.
	wertReal=wertReal*3.6; ! Umrechnung m/s auf km/h
	dom.GetObject('maximaleWindgeschwindigkeit').Variable(wertReal);
	WriteLine('maximaleWindgeschwindigkeit: '+dom.GetObject('maximaleWindgeschwindigkeit').Variable()); !DEBUG
}
Zuletzt geändert von nick74ma am 03.06.2018, 13:35, insgesamt 3-mal geändert.

NickHM
Beiträge: 3733
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 66 Mal
Danksagung erhalten: 120 Mal

Re: Skript zur Auswertung von Temperatur und Windgeschwindig

Beitrag von NickHM » 21.05.2018, 17:00

Hallo

möchtest Du ggf. Deine persönlichen Daten aus dem Script entfernen und kurz erläutern, wie der User seine Stadt und seinen Key beim Anbieter erzeugt?

EDIT erledigt, Danke
Zuletzt geändert von NickHM am 21.05.2018, 19:16, insgesamt 2-mal geändert.

nick74ma
Beiträge: 3
Registriert: 21.05.2018, 16:45

Re: Skript zur Auswertung von Temperatur und Windgeschwindig

Beitrag von nick74ma » 21.05.2018, 18:55

Danke - sehr aufmerksam!

nick74ma
Beiträge: 3
Registriert: 21.05.2018, 16:45

Re: Skript zur Auswertung von Temperatur und Windgeschwindig

Beitrag von nick74ma » 03.06.2018, 13:34

Mir war noch ein Fehler reingerutscht - soeben behoben.

Antworten

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