Wochenplan für Heizen mehrerer Räume / Durcheinander^10

Hallo Zusammen und ein frohes neues Jahr!
Ich habe vor ewigen Zeiten schon einmal gefragt - worauf sich auch jemand gekümmert hatte - damit komme ich aber nicht gut klar…aaalso:

(Ich versuche mich kurz zu fassen…:D)

Aktuell wird unsere Heizung, d.h. Warmwasser und Absenken & Heizbetrieb und die individuelle Raumtemperatur wie folgt geregelt:

Im Google-Kalender stehen die Schichten meiner Frau drin (X = Frei, S = Spät etc.), die aber aktuell dank Kind nicht allzuviel arbeiten geht. (Bald geht unsere Tochter aber in den Kindergarten…)

Dieser wird von IPS ausgelesen und es wird nach Ereignissen gesucht, welche ein ein-Buchstaben-Kürzel haben.
Diese werden in eine Variable geschrieben und…wie auch immer: IPS weiß an welchem Tag welche Schicht ist.

Daraufhin wähle ich ein Skript aus, es gibt X-Wochentag, X-Samstag und X-Sonntag (das gleiche für Früh, Spät & Nachtdienst).
Also 12 Skripte.

In jedem Skript steht nun grob folgendes:

<?
############## Früh Sonntag ###################
$time=date('H:i');

$S_WZ=GetValue(28398  );
$S_SZ=GetValue(23219 );
$S_BO=Getvalue(39922);
$S_KU=Getvalue(18920);
$S_BU=Getvalue(41282);

##########################
#Bad_unten-Temp
$T_BU_Low=GetValue(47800);
$T_BU_Mid=GetValue(24421);
$T_BU_High=GetValue(16831);
$Min_BU=GetValue(32806);

If ($Min_BU >0) {
		HM_WriteValueFloat(34726, "SET_POINT_TEMPERATURE", $T_BU_High);
		If ($Min_BU >=5){$Min_BU=$Min_WZ-5;
		SetValueFloat(15069 ,$Min_BU);}
		else {$Min_BU=0;
		SetValueFloat(15069 ,$Min_BU);}}
	else{
	If ($time >= '00:00' && $time <='4:10' && $S_BU!=$T_BU_Low) {
	HM_WriteValueFloat(34726, "SET_POINT_TEMPERATURE", $T_BU_Low);}
	If ($time >= '04:11' && $time <='06:00' && $S_BU!=$T_BU_High) {
	HM_WriteValueFloat(34726, "SET_POINT_TEMPERATURE", $T_BU_High);}
    If ($time >= '06:01' && $time <='07:30' && $S_BU!=$T_BU_Low) {
	HM_WriteValueFloat(34726, "SET_POINT_TEMPERATURE", $T_BU_Low);}
    If ($time >= '07:31' && $time <='22:31' && $S_BU!=$T_BU_High) {
	HM_WriteValueFloat(34726, "SET_POINT_TEMPERATURE", $T_BU_High);}
    If ($time >= '22:31' && $time <='23:59' && $S_BU!=$T_BU_Low) {
	HM_WriteValueFloat(34726, "SET_POINT_TEMPERATURE", $T_BU_Low);}}

##########################
#Wohnzimmer-Temp
$T_WZ_Low=GetValue(16771);
$T_WZ_Mid=GetValue(14810);
$T_WZ_High=GetValue(14124);
$Min_WZ=GetValue(15069 );

If ($Min_WZ >0) {
		HM_WriteValuefloat(51674 ,"SET_TEMPERATURE", $T_WZ_High);
		If ($Min_WZ >=5){$Min_WZ=$Min_WZ-5;
		SetValueFloat(15069 ,$Min_WZ);}
		else {$Min_WZ=0;
		SetValueFloat(15069 ,$Min_WZ);}}
	else{
If ($time >= '00:00' && $time <='10:30' && $S_WZ!=$T_WZ_Low) {
HM_WriteValuefloat(51674 ,"SET_TEMPERATURE", $T_WZ_Low);}
If ($time >= '10:30' && $time <='22:00' && $S_WZ!=$T_WZ_High) {
HM_WriteValuefloat(51674 ,"SET_TEMPERATURE", $T_WZ_High);}
If ($time >= '22:01' && $time <='22:30' && $S_WZ!=$T_WZ_Mid) {
HM_WriteValuefloat(51674 ,"SET_TEMPERATURE", $T_WZ_Mid);}
If ($time >= '22:31' && $time <='23:59' && $S_WZ!=$T_WZ_Low) {
HM_WriteValuefloat(51674 ,"SET_TEMPERATURE", $T_WZ_Low);}}

##########################
#Schlafzimmer-Temp
$T_SZ_Low=GetValue(43281);
$T_SZ_Mid=GetValue(39789);
$T_SZ_High=GetValue(12957);
$Min_SZ=GetValue(56815 );

If ($Min_SZ >0) {
		HM_WriteValuefloat(20904,"SET_TEMPERATURE", $T_SZ_High);
		If ($Min_SZ >=5){$Min_SZ=$Min_SZ-5;
		SetValue(56815 ,$Min_SZ);}
		else {$Min_SZ=0;
		SetValue(56815 ,$Min_SZ);}}
	else{
If ($time >= '00:00' && $time <='10:30' && $S_SZ!=$T_SZ_Mid) {
HM_WriteValuefloat(20904,"SET_TEMPERATURE", $T_SZ_Mid);}
If ($time >= '14:16' && $time <='15:15' && $S_SZ!=$T_SZ_High) {
HM_WriteValuefloat(20904,"SET_TEMPERATURE", $T_SZ_High);}
If ($time >= '15:16' && $time <='21:30' && $S_SZ!=$T_SZ_Low) {
HM_WriteValuefloat(20904,"SET_TEMPERATURE", $T_SZ_Low);}
If ($time >= '21:31' && $time <='23:59' && $S_SZ!=$T_SZ_Mid) {
HM_WriteValuefloat(20904,"SET_TEMPERATURE", $T_SZ_Mid);}}
##########################
#Bad-Oben-Temp
$T_BO_Low=GetValue(33378 );
$T_BO_Mid=GetValue(28136 );
$T_BO_High=GetValue(20372  );
$Min_BO=GetValue(26206 );

If ($Min_BO >0) {
		HM_WriteValuefloat(37551,"SET_TEMPERATURE", $T_BO_High);
		If ($Min_BO >=5){$Min_BO=$Min_BO-5;
		SetValuefloat(26206 ,$Min_BO);}
		else {$Min_BO=0;
		SetValuefloat(26206 ,$Min_BO);}}
	else{
If ($time >= '00:00' && $time <='04:00' && $S_BO!=$T_BO_Low) {
HM_WriteValuefloat(37551,"SET_TEMPERATURE", $T_BO_Low);}
If ($time >= '04:01' && $time <='07:30' && $S_BO!=$T_BO_Mid) {
HM_WriteValuefloat(37551,"SET_TEMPERATURE", $T_BO_Mid);}
If ($time >= '07:31' && $time <='22:15' && $S_BO!=$T_BO_Low) {
HM_WriteValuefloat(37551,"SET_TEMPERATURE", $T_BO_Low);}
If ($time >= '22:16' && $time <='23:59' && $S_BO!=$T_BO_Mid) {
HM_WriteValuefloat(37551,"SET_TEMPERATURE", $T_BO_Mid);}}
##########################
#Kueche-Temp
$T_KU_Low=GetValue(37162 );
$T_KU_Mid=GetValue(59287 );
$T_KU_High=GetValue(45676 );
$Min_KU=GetValue(48079  );

If ($Min_KU >0) {
		HM_WriteValuefloat(41052 ,"SET_TEMPERATURE", $T_KU_High);
		If ($Min_KU >=5){$Min_KU=$Min_KU-5;
		SetValuefloat(48079 ,$Min_KU);}
		else {$Min_KU=0;
		SetValuefloat(48079 ,$Min_KU);}}
	else{
If (($time >= '00:00') AND ($time <='09:00') AND ($S_KU!=$T_KU_Low)) {
HM_WriteValuefloat(41052 ,"SET_TEMPERATURE", $T_KU_Low);}
If (($time >= '09:01') AND ($time <='11:30') AND ($S_KU!=$T_KU_High)) {
HM_WriteValuefloat(41052 ,"SET_TEMPERATURE", $T_KU_High);}
If (($time >= '11:31') AND ($time <='14:45') AND ($S_KU!=$T_KU_Mid)) {
HM_WriteValuefloat(41052 ,"SET_TEMPERATURE", $T_KU_Mid);}
If (($time >= '14:46') AND ($time <='18:30') AND ($S_KU!=$T_KU_High)) {
HM_WriteValuefloat(41052 ,"SET_TEMPERATURE", $T_KU_High);}
If (($time >= '18:31') AND ($time <='20:30') AND ($S_KU!=$T_KU_Mid)) {
HM_WriteValuefloat(41052 ,"SET_TEMPERATURE", $T_KU_Mid);}
If (($time >= '20:31') AND ($time <='23:59') AND ($S_KU!=$T_KU_Low)) {
HM_WriteValuefloat(41052 ,"SET_TEMPERATURE", $T_KU_Low);}}

#####################   Warmwasser
If (($time >= '00:00') AND ($time <='04:10')) {
SetValueBoolean(57740 ,false);
SetValueBoolean(39461 ,false);}
If (($time >= '04:10') AND ($time <='04:39')) {
SetValueBoolean(57740 ,false);
SetValueBoolean(39461 ,true);}
If (($time >= '04:40') AND ($time <='04:46')) {
SetValueBoolean(57740 ,false);
SetValueBoolean(39461 ,false);
IPS_RunScript(49664);}
If (($time >= '04:47') AND ($time <='09:30')) {
SetValueBoolean(57740 ,false);
SetValueBoolean(39461 ,false);}
If (($time >= '09:31') AND ($time <='16:30')) {
SetValueBoolean(57740 ,true);
SetValueBoolean(39461 ,true);}
If (($time >= '16:31') AND ($time <='20:00')) {
SetValueBoolean(57740 ,true);
SetValueBoolean(39461 ,true);}
If (($time >= '20:01') AND ($time <='22:00')) {
SetValueBoolean(57740 ,true);
SetValueBoolean(39461 ,false);}
If (($time >= '22:01') AND ($time <='23:59')) {
SetValueBoolean(57740 ,false);
SetValueBoolean(39461 ,false);}
?>

Zur Info: „Min_BU oder Min_WZ“ usw. sind separate Timer, mit denen man einen Raum auch außerhalb des Plans für bis zu 4h auf „High“ setzen kann.

Wie man sieht - ganz schön viel Zeug und Durcheinander.
Die Skripte laufen alle 5 min und setzen dann entsprechend die Temperaturen an den Thermostaten.

Es hatte schonmal jemand vorgeschlagen, dass ich das mittels objektorientierter Programmierung versuche, aber ehrlich gesagt - ich habe mal kurz begonnen mich da „reinzulesen“, aber es ging irgendwie nur ins Nirvana. (Ich habe es „Nicht drauf“…)
Zudem habe ich nochmal ausgiebig mit einem Kumpel gesprochen der Programmierer ist - der ist der Meinung, unterm Strich spart das nicht viel Code und Zeit & Durcheinander ein.

Da ist mir aber eingefallen, IPS kann ja auch Wochenpläne! Yey :smiley:
Soweit so gut.
Meinem aktuellen Kenntnisstand nach, müsste ich dann damit wenigstens für jeden Raum, für jede Schicht einen Plan machen. (Plus Warmwasser / Heizen)
Das würde bedeuten, dass ich 6 oder 7 mal 4 Pläne brauche, d.h. 24 bis 28 Stück.
Das bedeutet ebenfalls ein heilloses Durcheinander.

Hat jemand eine Idee wie man das auch eleganter machen könnte?

Gruß,
Maeffjus