Ok, in der Theorie ist es jetzt klar.
Aber in der Praxis klappt es nicht.
Ist das so korrekt?
Aufgerufenes Skript:
<?
//Homematic-Kanäle
//Kanal 1: 16286
//Kanal 2: 37400
//Kanal 3: 26325
switch($_IPS['SENDER'])
{
case "WebFront":
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
case "RunScript":
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
switch($_IPS['VALUE'])
{
case 1:
HM_WriteValueBoolean(16286,"STATE",false);
HM_WriteValueBoolean(37400,"STATE",false);
HM_WriteValueBoolean(26325,"STATE",false);
break;
case 2:
HM_WriteValueBoolean(16286,"STATE",true);
HM_WriteValueBoolean(37400,"STATE",false);
HM_WriteValueBoolean(26325,"STATE",false);
break;
case 3:
HM_WriteValueBoolean(16286,"STATE",true);
HM_WriteValueBoolean(37400,"STATE",true);
HM_WriteValueBoolean(26325,"STATE",false);
break;
case 4:
HM_WriteValueBoolean(16286,"STATE",true);
HM_WriteValueBoolean(37400,"STATE",true);
HM_WriteValueBoolean(26325,"STATE",true);
break;
}
break;
}
?>
Das Skript soll das obere aufrufen:
<?
$Bypass_Temperatur = "23.0"; // gewünschte Raumtemperatur;
$Mindest_Aussentemperatur = "5.0"; // minimale Aussentemperatur;
$Hysterese = "1.0"; // Hysterse
$Aussenluft = GetValueFloat(38339); // aktuelle Außentemperatur
$Abluft = GetValueFloat(34473); // aktuelle Ablufttemperatur
$Zuluft = GetValueFloat(53040); // aktuelle Zulufttemperatur
$Status_Bypass = GetValueBoolean(36803); // aktueller Bypassstatus
$Sommerbetrieb = GetValueBoolean(17793); // Prüfung ob Sommer- oder Winterhalbjahr
$SEWT = GetValueBoolean(25099); // Läuft der Erdwärmetauscher (falls ja, kühlt er die Aussenluft herunter)
if ($Status_Bypass == false){ // Bedingungen für Öffnung des Bypass, nur im Sommerhalbjahr aktiv
if ($Sommerbetrieb == true and $Aussenluft > $Mindest_Aussentemperatur and ($Abluft+$Hysterese) > $Bypass_Temperatur and $Aussenluft < $Abluft) {
HM_WriteValueBoolean(52155,"STATE",true); // Bypass öffnen
IPS_RunScriptEx(42440, array("case" => "2")); //Lüftung auf Stufe 2 stellen
}
elseif ($SEWT == true){
HM_WriteValueBoolean(52155,"STATE",true); // Bypass öffnen
IPS_RunScriptEx(42440, array("case" => "1")); //Lüftung auf Stufe 1 stellen
}
}
elseif ($Status_Bypass == true){ // Bypass schließen
if ($Sommerbetrieb == true) { // Prüfung auf Sommerhalbjahr
if ($SEWT == true){
IPS_Sleep(5); // nichts tun
}
elseif ($Aussenluft < $Mindest_Aussentemperatur){
HM_WriteValueBoolean(52155,"STATE",false); // Bypass schließen, wenn es draußen zu kalt ist
IPS_RunScriptEx(42440, array("case" => "1")); //Lüftung auf Stufe 1 stellen
}
elseif ($Aussenluft >= ($Bypass_Temperatur-$Hysterese)){
HM_WriteValueBoolean(52155,"STATE",false); // Bypass schließen, wenn es draußen wärmer ist als gewünscht
IPS_RunScriptEx(42440, array("case" => "1")); //Lüftung auf Stufe 1 stellen
}
}
}
elseif ($Status_Bypass == true){
if ($Sommerbetrieb == false){
HM_WriteValueBoolean(52155,"STATE",false); // Bypass im Winter geschlossen halten
IPS_RunScriptEx(42440, array("case" => "1")); //Lüftung auf Stufe 1 stellen
}
}