Ich habe jetzt schon sehr lange mein eigenes geschriebenes Script im Einsatz… Funktioniert sehr gut auf folgender Basis:
- Wenn TEMP < SOLL = HEIZEN
- WENN TEMP >= SOLL -> ZYKLUS HEIZEN in einer einstellbaren länge mit einstellbaren Pausen
Hier das Script ohne weitere Comments… Muss man sich selber die entsprechenden Parts heraussuchen:
<?
require_once "MyIPSFunctions.inc.php";
$DEBUG = 0;
// Wert, der die Zieltemperatur vorzieht (Nachlauf der Fußbodenheizung)
$PREOFF = 0;
$fbh_regler_arr = explode("|", $fbh_regler);
$fbh_values_arr = explode("|", $fbh_values);
$fbh_thermo_arr = explode("|", $fbh_thermo);
// Falls die MANUAL Variable der Regler verändert wird
if ( $IPS_SENDER == "WebFront" || $IPS_SENDER == "Variable" )
{
if ( IPS_GetName($IPS_VARIABLE) == "MANUAL" )
{
$obj = IPS_GetObject($IPS_VARIABLE);
$parent_id = $obj['ParentID'];
// Manual Control is being set to OFF
if ( $IPS_VALUE == false )
{
SetValue($IPS_VARIABLE, false);
MY_SetObjectVariable($parent_id, "PULSE_RUN", false);
HM_WriteValueBoolean($parent_id, "STATE", false);
} else
{
SetValue($IPS_VARIABLE, true);
MY_SetObjectVariable($parent_id, "PULSE_RUN", false);
HM_WriteValueBoolean($parent_id, "STATE", false);
}
}
}
// Wenn das Script durch ein TimerEvent aufgerufen wird. Das ist immer dann
// der Fall, wenn der Heizbetrieb auf EIN steht
if ( $IPS_SENDER == "TimerEvent" )
{
if ( $DEBUG == 1 ) echo "
";
$i = 0;
foreach ( $fbh_thermo_arr as $item )
{
// Prepare some important variables
$thermostat = (int)$item;
$temp_value = round(MY_GetObjectVariable($thermostat, "TEMPERATURE"),2);
$temp_soll = MY_GetObjectVariable((int)$fbh_values_arr[$i], "Aktuell");
$temp_day = MY_GetObjectVariable((int)$fbh_values_arr[$i], "Tag");
$temp_night = MY_GetObjectVariable((int)$fbh_values_arr[$i], "Nacht");
$time = time();
$regler_arr_temp = explode(",", $fbh_regler_arr[$i]);
// If the heating is turned on or the ECO-Mode is turned off
if ( GetValue($fbh_switch) == true || GetValue($fbh_switch_eco) == false )
{
if ( $DEBUG == 1 ) echo "Heizen EIN oder ECO AUS => ". IPS_GetName($thermostat) ."
";
// If the heating and ECO-Mode is turned off but we've got an ECO mode locally
if ( MY_GetObjectVariable((int)$fbh_values_arr[$i], "ECO") == true && GetValue($fbh_switch) == false )
{
if ( $DEBUG == 1 ) echo "ECO Mode für Raum: ". IPS_GetName($thermostat) ." während der Rest auf ECO AUS eingestellt ist und die Heizung auf AUS steht!
";
foreach ( $regler_arr_temp as $regler_item )
{
$regler_temp = (int)$regler_item;
if ( MY_GetObjectVariable($regler_temp, "STATE") == true )
HM_WriteValueBoolean($regler_temp, "STATE", false);
if ( $DEBUG == 1 ) echo "TURN OFF: ". IPS_GetName($regler_temp) ."
";
}
if ( $DEBUG == 1 ) echo "
";
$i++;
continue;
}
// The current temperature is lower than the setting
if ( $temp_value < $temp_soll-$PREOFF )
{
if ( $DEBUG == 1 ) echo "Temperaturbedarf!!!
";
// There's a need for temperature.
// HEATING: ON
foreach ( $regler_arr_temp as $regler_item )
{
$regler_temp = (int)$regler_item;
if ( $DEBUG == 1 ) echo "CONTROL: ". IPS_GetName($regler_temp) ."
";
// Only make automatic controls if the MANUAL-Flag is set to FALSE
if ( MY_GetObjectVariable($regler_temp, "MANUAL") == false )
{
if ( $DEBUG == 1 ) echo "Manuelle Steuerung ist aus
";
if ( MY_GetObjectVariable($regler_temp, "STATE") == false )
HM_WriteValueBoolean($regler_temp, "STATE", true);
if ( MY_GetObjectVariable($regler_temp, "PULSE_RUN") == true )
MY_SetObjectVariable($regler_temp, "PULSE_RUN", false);
if ( $DEBUG == 1 ) echo "TURN ON: ". IPS_GetName($regler_temp) ."
";
} else
{
if ( $DEBUG == 1 ) echo "Manuelle Steuerung EIN!
";
}
}
} else
{
if ( $DEBUG == 1 ) echo "Kein Temperaturbedarf oder ECO Mode!
";
// There's no need for temperature.
// HEATING: OFF
// The only thing we have to do now is cyclic heating (pulse mode)
foreach ( $regler_arr_temp as $regler_item )
{
$regler_temp = (int)$regler_item;
if ( $DEBUG == 1 ) echo "CONTROL: ". IPS_GetName($regler_temp) ."
";
if ( MY_GetObjectVariable($regler_temp, "MANUAL") == false &&
MY_GetObjectVariable($regler_temp, "ECO") == false )
{
if ( $DEBUG == 1 ) echo "Manuelle Steuerung ist aus
";
$last_run = (int)MY_GetObjectVariable($regler_temp, "LAST_RUN");
$pulse_run = false;
// Check if we have to start the PULSE_RUN
if ( $DEBUG == 1 ) echo "LOCKTIME: ".
MY_GetObjectVariable((int)$regler_item, "PULSE_LOCKTIME") ."
";
if ( ($last_run + (MY_GetObjectVariable((int)$regler_item, "PULSE_LOCKTIME")*60)) < $time &&
MY_GetObjectVariable($regler_temp, "PULSE_RUN") == false &&
MY_GetObjectVariable($regler_temp, "STATE") == false )
{
MY_SetObjectVariable($regler_temp, "PULSE_RUN", true);
MY_SetObjectVariable($regler_temp, "PULSE_START", $time);
$pulse_run = true;
if ( $DEBUG == 1 ) echo "START PULSE: ". IPS_GetName($regler_temp) ."
";
} else
{
if ( MY_GetObjectVariable($regler_temp, "STATE") == true &&
MY_GetObjectVariable($regler_temp, "PULSE_RUN") == false )
{
if ( $DEBUG == 1 ) echo "Ausschalten nach Heizperiode!
";
HM_WriteValueBoolean($regler_temp, "STATE", false);
MY_SetObjectVariable($regler_temp, "LAST_RUN", $time);
}
}
// Check if we have to keep the PULSE running
if ( MY_GetObjectVariable($regler_temp, "PULSE_RUN") == true )
{
if ( $DEBUG == 1 ) echo "PULSE RunTime: ".
MY_GetObjectVariable((int)$regler_item, "PULSE_RUNTIME") ."
";
$pulse_start = MY_GetObjectVariable($regler_temp, "PULSE_START");
if ( $pulse_start + (MY_GetObjectVariable((int)$regler_item, "PULSE_RUNTIME")*60) >= $time )
{
// Yes, keep the PULSE running
if ( $DEBUG == 1 ) echo "PULSE läuft... Weiterlaufen lassen!
";
$pulse_run = true;
} else
{
// No, turn it off
MY_SetObjectVariable($regler_temp, "PULSE_RUN", false);
MY_SetObjectVariable($regler_temp, "LAST_RUN", $time);
if ( $DEBUG == 1 ) echo "STOP PULSE: ". IPS_GetName($regler_temp) ."
";
}
}
if ( $pulse_run == true )
{
if ( MY_GetObjectVariable($regler_temp, "STATE") == false )
HM_WriteValueBoolean($regler_temp, "STATE", true);
if ( $DEBUG == 1 ) echo "TURN ON: ". IPS_GetName($regler_temp) ."
";
} else
{
if ( MY_GetObjectVariable($regler_temp, "STATE") == true )
HM_WriteValueBoolean($regler_temp, "STATE", false);
if ( $DEBUG == 1 ) echo "TURN OFF: ". IPS_GetName($regler_temp) ."
";
}
} else
if ( $DEBUG == 1 ) echo "Manuelle Steuerung oder ECO-Mode EIN!
";
}
}
}
$i++;
if ( $DEBUG == 1 ) echo "
";
}
}
?>