Ich habe nun endlich mein Vorhaben umgesetzt. Das Thema ist zwar theoretisch nicht neu aber ggf. doch für den ein oder anderen interessant. Worum geht es:
Ich habe jetzt schon länger vor, meine Heizungsregelung mit Prognosedaten zu füttern, statt den Außentemperaturfühler zu nutzen. Grund ist, dass meine Raumtemperatur einwenig schwankt. Sprich wenn es Nachts kälter wird, ist es zu kalt und wenn es morgens wärmer wird, überhitzen die Räume.
Grund ist die Fussbodenheizung, welche die Wärme nur stark verzögert abgibt. Dazu kommt noch, dass die FBH von oben gedämmt ist (durch Echtholzdielen/Parkett), was weiter verzögert. Daher wollte ich, dass der außentemperaturgeführte VL der Fussbodenheizung durch eine fremde und zukünftige Temperatur gefüttert wird.
Aber wo bekomme ich gute Daten her? Aktuell habe ich das OpenWeatherMap Modul, welches aber erstens nur ungenaue Daten (Mehrere °C Abweichung) liefert und zweitens der Detailgrad zu niedrig ist (nicht Minutengenau).
Da wir selber immer bei WetterDotCom nach dem Wetter schauen und die dortigen Werte fast °C mit den AT Werten stimmen (selbst Regen wird fast Minutengenau vorhergesagt), wäre es ideal diese Daten zu nutzen. Ein weiterer Vorteil ist, dass diese eine API anbieten, welche für den privat gebraucht eingeschränkt und kostenlos verwendbar ist.
Gesagt getan und registriert.
(Available Parameters | Meteomatics)
Nach dem ich nun die API einwenig studiert habe ich das Ganze wie folgt umgesetzt.
Mittels eines Scripts, lade ich minutengenau die Temperaturen für die nächsten 3 Stunden. Dieses Script lasse ich Stündlich laufen.
<?php
$username = "";
$password = "";
$location = "50.xxxx,7.xxxx";
$rangeHour = 3; // Wieivle Stunde im Vorraus
$cacheId = 14745; // Speicher die Daten in einer Stringvariable zwischen
function meteomatics($time, $params, $optionals = '') {
global $username, $password, $location;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.meteomatics.com/$time/$params/$location/json?$optionals");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
$result = curl_exec($ch);
if (curl_errno($ch)) return false;
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) return false;
$result = json_decode($result);
if ($result->status != 'OK') return false;
curl_close($ch);
return $result;
}
$start_time = gmdate('Y-m-d\TH:i:\0\0\Z', time());
$end_time = gmdate('Y-m-d\TH:i:\0\0\Z', time()+($rangeHour*3600));
$time = $start_time . '--' .$end_time . ':PT1M';
$result = meteomatics($time, 't_2m:C');
if($result) {
$table = [];
foreach($result->data[0]->coordinates[0]->dates as $item) {
$table[$item->date] = $item->value;
}
SetValueString($cacheId, json_encode($table));
}
Dann habe ich ein Script welches minütlich den Wert in x Stunden ermittelt (bei mir aktuell 2 Stunden) und passende Variablen füttert. (Aktuell die Prognose + die aktuell Temperatur)
<?php
$shift = 2; // 2 Stunden
$cacheId = 14745;
$temp1Id = 11580;
$temp2Id = 53015;
$temp1Date = gmdate("Y-m-d\TH:i:00\Z", time());
$temp2Date = gmdate("Y-m-d\TH:i:00\Z", time() + ($shift * 3600));
$table = json_decode(GetValueString($cacheId), true);
if(isset($table[$temp1Date])) {
$value = $table[$temp1Date];
SetValueFloat($temp1Id, $value);
}
if(isset($table[$temp2Date])) {
$value = $table[$temp2Date];
SetValueFloat($temp2Id, $value);
}
Das Ganze sieht dann mit Dummyinstanz so aus:
Den Wert der „Temperatur in 2 Stunden“ liefere ich anschließend per Event an meine Heizung (in meinem Fall eine Steuerung von der Technischen Alternative per KNX"
Vielleicht hat der ein oder andere auch ein Interesse daran. Ich denke ich werde sogar meine Wetterprognose auch auf die neue API umbauen und OpenWeatherMap komplett einstampfen.