Helios KWL EasyControls auslesen und steuern.
da ich immer wieder gefragt werde, veröffentliche ich hier nochmal erklärt wie das auslesen und steuern funktioniert.
Dank dem Team hier im Forum die die Steuerung erst ermöglicht haben. Vielen Dank nochmal.
Auslese Script anlegen:
<?
$kwlip = "192.168.2.31";
$kwlpasswort = '12345678';
$header[] = "Connection: close";
$header[] = "Origin: http://" . $kwlip;
$header[] = "User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36";
$header[] = "Content-Type: text/plain;charset=UTF-8";
$header[] = "Accept: */*";
$header[] = "Referer: http://" . $kwlip . "/anzeig.htm";
$header[] = "Accept-Encoding: gzip, deflate";
$header[] = "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4";
$ch = curl_init('http://' . $kwlip . '/data/werte8.xml');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'xml=/data/werte8.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
$result = curl_exec($ch);
curl_close($ch);
if ($result === false)
{
//wenn Anmeldung fehlschlägt --> anmelden
$header[] = "Connection: close";
$header[] = "Origin: http://" . $kwlip;
$header[] = "User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36";
$header[] = "Content-Type: text/plain;charset=UTF-8";
$header[] = "Accept: */*";
$header[] = "Referer: http://" . $kwlip . "/info.htm";
$header[] = "Accept-Encoding: gzip, deflate";
$header[] = "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4";
$ch = curl_init('http://' . $kwlip . '/info.htm');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'v00402='.$kwlpasswort);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
}
else
{
$simple = simplexml_load_string($result);
//print_r($simple); //ausgelesene Variablen anzeigen
$aussenluft = str_replace('.', ',', str_replace('"', '', $simple->VA[12]));
setvalue(36805 /*[Lüftung\Werte\Außenluft]*/ , $aussenluft);
$zuluft = str_replace('.', ',', str_replace('"', '', $simple->VA[13]));
setvalue(56798 /*[Lüftung\Werte\Zuluft]*/ , $zuluft);
$fortluft = str_replace('.', ',', str_replace('"', '', $simple->VA[14]));
setvalue(23221 /*[Lüftung\Werte\Fortluft]*/ , $fortluft);
$abluft = str_replace('.', ',', str_replace('"', '', $simple->VA[15]));
setvalue(54424 /*[Lüftung\Werte\Abluft]*/ , $abluft);
$zuluftrrp = str_replace('.', ',', str_replace('"', '', $simple->VA[54]));
setvalue(52558 /*[Lüftung\Werte\Zuluft Drehzahl]*/ , $zuluftrrp);
$abluftrrp = str_replace('.', ',', str_replace('"', '', $simple->VA[55]));
setvalue(47051 /*[Lüftung\Werte\Abluft Drehzahl]*/ , $abluftrrp);
$luefterstufe = str_replace('.', ',', str_replace('"', '', $simple->VA[10]));
setvalue(33732 /*[Lüftung\Werte\Lüfterstufe]*/ , $luefterstufe);
$bypass = str_replace('.', ',', str_replace('"', '', str_replace(']', '', $simple->VA[98])));
if ($bypass == 1)
{
setvalue(39647 /*[Lüftung\Werte\Bypass]*/ , true);
}
else
{
setvalue(39647 /*[Lüftung\Werte\Bypass]*/ , false);
}
}
?>
Steuerungsscript anlegen:
dieses läuft bei mir alle 2 Minuten.
<?
$kwlip = "192.168.2.31";
$kwlpasswort = '12345678';
if(GetValue(48576 /*[Lüftung\Programm]*/ )==5) //manuelle Steuerung
{
//Durchschnitt Luftfeuchtigkeit Bad errechnen
$archiveID = 12401 /*[Archive Handler]*/ ;
$objectID = 45058 /*[Heizung\Thermo BAD\HUMIDITY]*/ ;
$endtime = time(); // time() for "now"
$starttime = strtotime("yesterday 12:00"); // for n minutes ago
$limit = 0; // kein Limit
//print_r(AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit));
$buffer = AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit);
$anzahl = 0;
$summe = 0;
$totaldauer = 0;
foreach ($buffer as $werte){
$wert = $werte["Value"];
$dauer = 24 * 3600;
$anzahl = $anzahl + 1;
$totaldauer = $totaldauer + $dauer;
$summe = $summe + ($wert*$dauer);
}
echo "N-Werte: ".$anzahl. "
";
$mittelw = $summe / $totaldauer;
echo "Mittelwert Bad: " . $mittelw . "
";
SetValue(21793 /*[Lüftung\Werte\bad-durchschnitt]*/ ,$mittelw);
If(($mittelw + 2) < (GetValue(45058 /*[Heizung\Thermo BAD\HUMIDITY]*/ )))
{
$befehl = 'v00102=4';
IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 18000);
setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 4);
}
else
{
//Luftfeuchtigkeitsdurchschnitt Küche
$objectID = 49249 /*[Heizung\Thermo Küche\HUMIDITY]*/ ;
$buffer = AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit);
$anzahl = 0;
$summe = 0;
$totaldauer = 0;
foreach ($buffer as $werte){
$wert = $werte["Value"];
$dauer = 24 * 3600;
$anzahl = $anzahl + 1;
$totaldauer = $totaldauer + $dauer;
$summe = $summe + ($wert*$dauer);
}
echo "N-Werte: ".$anzahl. "
";
$mittelw = $summe / $totaldauer;
echo "Mittelwert Küche: " . $mittelw . "
";
If ($mittelw == Null)
$mittelw = GetValue(49249 /*[Heizung\Thermo Küche\HUMIDITY]*/);
echo "Küche: " . GetValue(49249 /*[Heizung\Thermo Küche\HUMIDITY]*/);
If(($mittelw + 2) < (GetValue(49249 /*[Heizung\Thermo Küche\HUMIDITY]*/)) or (GetValue(49249 /*[Heizung\Thermo Küche\HUMIDITY]*/) > 59) or (GetValue(41138 /*[Heizung\Thermo Schlafzimmer\HUMIDITY]*/) > 63) or (GetValue(18250 /*[Heizung\Thermo Wohnzimmer\HUMIDITY]*/ ) > 59) or (GetValue(45058 /*[Heizung\Thermo BAD\HUMIDITY]*/) > 65) or (GetValue(18069 /*[Lüftung\Werte\IPS2GPIO_iAQ LUFT\CO2]*/) > 1000) or (GetValue(45150 /*[Lüftung\Werte\IPS2GPIO_iAQ LUFT\TVOC]*/) > 500))
{
$befehl = 'v00102=2';
IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 18000);
setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 2);
}
else
{
$befehl = 'v00102=1';
IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 18000);
setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 1);
}
}
If((GetValue(56798 /*[Lüftung\Werte\Zuluft]*/) + 1 < GetValue(54424 /*[Lüftung\Werte\Abluft]*/)) and (GetValue(39647 /*[Lüftung\Werte\Bypass]*/) == 1) and (GetValue(54424 /*[Lüftung\Werte\Abluft]*/) >= 22) or (GetValue(18069 /*[Lüftung\Werte\IPS2GPIO_iAQ LUFT\CO2]*/) > 1500) or (GetValue(45150 /*[Lüftung\Werte\IPS2GPIO_iAQ LUFT\TVOC]*/) > 700))
{
$befehl = 'v00102=3';
IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 18000);
setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 3);
}
else if (GetValue(56798 /*[Lüftung\Werte\Zuluft]*/) > 22)
{
$befehl = 'v00102=1';
IPS_SetScriptTimer(36077 /*[Lüftung\Programm\zurück auf auto]*/ , 18000);
setvalue(27010 /*[Lüftung\Lüftungsstufe aktuell]*/ , 1);
}
$header[] = "Connection: close";
$header[] = "Origin: http://" . $kwlip;
$header[] = "User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36";
$header[] = "Content-Type: text/plain;charset=UTF-8";
$header[] = "Accept: */*";
$header[] = "Referer: http://" . $kwlip . "/anzeig.htm";
$header[] = "Accept-Encoding: gzip, deflate";
$header[] = "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4";
$ch = curl_init('http://' . $kwlip . '/data/werte8.xml');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_FAILONERROR, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $befehl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
//$result = false;
$result = curl_exec($ch);
curl_close($ch);
if ($result === false)
{
//wenn Anmeldung fehlschlägt --> anmelden
$header[] = "Connection: close";
$header[] = "Origin: http://" . $kwlip;
$header[] = "User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36";
$header[] = "Content-Type: text/plain;charset=UTF-8";
$header[] = "Accept: */*";
$header[] = "Referer: http://" . $kwlip . "/info.htm";
$header[] = "Accept-Encoding: gzip, deflate";
$header[] = "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4";
$ch = curl_init('http://' . $kwlip . '/info.htm');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'v00402='.$kwlpasswort);
//curl_setopt($ch, CURLOPT_POSTFIELDS, 'v00102=2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
}
}
IPS_RUNSCRIPT(51367 /*[Lüftung\Werte\Werte auslesen]*/);
?>
Viel Spaß damit, bei Fragen einfach melden