Code: Select all
$Setkamer=8.0;$setpointkamer=cget('setpointkamer');
if($setpointkamer!=0&&strtotime($t['kamer_set'])<eenuur){cset('setpointkamer',0);$setpointkamer=0;}
if($setpointkamer!=2){
if($buiten_temp<15&&$s['raamkamer']=='Closed'&&$s['heating']=='On'&&(strtotime($t['raamkamer'])<tweeuur||time>achtavond)){
$Setkamer=12.0;
if(time<zevenochtend||time>achtavond)$Setkamer=16.0;
}
if($s['kamer_set']!=$Setkamer){ud($i['kamer_set'],0,$Setkamer,'Rkamer_set');$s['kamer_set']=$Setkamer;}
}
$Settobi=8.0;$setpointtobi=cget('setpointtobi');
if($setpointtobi!=0&&strtotime($t['tobi_set'])<eenuur){
cset('setpointtobi',0);$setpointtobi=0;
}
if($setpointtobi!=2){
if($buiten_temp<15&&$s['raamtobi']=='Closed'&&$s['heating']=='On'&&(strtotime($t['raamtobi'])<tweeuur||time>achtavond)){
$Settobi=12.0;
if(date('W')%2==1){
if(date('N')==3)if(time>achtavond)$Settobi=16.0;
elseif(date('N')==4) if(time<zevenochtend||time>achtavond) $Settobi=16.0;
elseif(date('N')==5) if(time<zevenochtend)$Settobi=16.0;
}else{
if(date('N')==3) if(time>achtavond)$Settobi=16.0;
elseif(in_array(date('N'),array(4,5,6)))if(time<zevenochtend||time>achtavond) $Settobi=16.0;
elseif(date('N')==7) if(time<zevenochtend)$Settobi=16.0;
}
}
if($s['tobi_set']!=$Settobi){ud($i['tobi_set'],0,$Settobi,'Rtobi_set');$s['tobi_set']=$Settobi;}
}
$Setalex=8.0;$setpointalex=cget('setpointalex');
if($setpointalex!=0&&strtotime($t['alex_set'])<achtuur){cset('setpointalex',0);$setpointalex=0;}
if($setpointalex!=2){
if($buiten_temp<17&&$s['raamalex']=='Closed'&&$s['heating']=='On'&&(strtotime($t['raamalex'])<tweeuur||time>achtavond)){
$Setalex=12.0;
if(time<strtotime('8:00')||time>achtavond)$Setalex=18.5;
}
if($s['alex_set']!=$Setalex){ud($i['alex_set'],0,$Setalex,'Ralex_set');$s['alex_set']=$Setalex;}
}
$Setliving=14.0;$setpointliving=cget('setpointliving');
if($setpointliving!=0&&strtotime($t['living_set'])<drieuur){cset('setpointliving',0);$setpointliving=0;}
if($setpointliving!=2){
if($buiten_temp<20&&$s['heating']=='On'&&$s['raamliving']=='Closed'){$Setliving=17.0;
if(time>=strtotime('3:00')&&time<zevenochtend)$s['slapen']=='Off'?$Setliving=20.5:$Setliving=17.0;
elseif(time>=zevenochtend&&time<strtotime('22:30'))$s['slapen']=='Off'?$Setliving=20.5:$Setliving=17.0;
}
if($s['living_set']!= $Setliving){ud($i['living_set'],0,$Setliving,'Rliving_set');$s['living_set']=$Setliving;}
}
if($s['deurbadkamer']=="Open") {
if($s['badkamer_set']!=10&&(strtotime($t['deurbadkamer'])<eenmin||$s['lichtbadkamer']=='Off')){ud($i['badkamer_set'],0,10,'badkamer_set 10 deur open');$s['badkamer_set']=10;}
}elseif($s['deurbadkamer']=="Closed"){
if($s['lichtbadkamer']=='On'&&$s['badkamer_set']!=22){ud($i['badkamer_set'],0,22,'badkamer_set 22 deur dicht en licht aan');$s['badkamer_set']=22;}
elseif($s['lichtbadkamer']=='Off'&&$s['badkamer_set']!=15){ud($i['badkamer_set'],0,15,'badkamer_set 15 deur dicht en licht uit');$s['badkamer_set']=15;}
}
$kamers=array('living','badkamer','tobi','alex','kamer');
$kamersgas=array('living','alex');
$bigdif=100;$brander=$s['brander'];$Tbrander=strtotime($t['brander']);$Ibrander=$i['brander'];
foreach($kamers as $kamer){
${'dif'.$kamer}=number_format($s[$kamer.'_temp']-$s[$kamer.'_set'],1);
if(in_array($kamer,$kamersgas))if(${'dif'.$kamer} < $bigdif) $bigdif=${'dif'.$kamer};
${'Set'.$kamer}=number_format($s[$kamer.'_set'],1);
}
foreach($kamers as $kamer){
if(${'dif'.$kamer}<=number_format(($bigdif+ 0.2),1)&&${'dif'.$kamer}<1)${'RSet'.$kamer}=setradiator($kamer,${'dif'.$kamer},true,$s[$kamer.'_set']);
else ${'RSet'.$kamer}=setradiator($kamer,${'dif'.$kamer},false,$s[$kamer.'_set']);
}
if($s['kamerZ']!=$RSetkamer)ud($i['kamerZ'],0,$RSetkamer,'RkamerZ');
if($s['tobiZ']!=$RSettobi)ud($i['tobiZ'],0,$RSettobi,'RtobiZ');
if($s['alexZ']!=$RSetalex)ud($i['alexZ'],0,$RSetalex,'RalexZ');
//if($s['badkamerZ']!=$RSetbadkamer)ud($i['badkamerZ'],0,$RSetbadkamer,'RbadkamerZ');
if($s['livingZ']!=$RSetliving)ud($i['livingZ'],0,$RSetliving,'RlivingZ');
if($s['livingZZ']!=$RSetliving)ud($i['livingZZ'],0,$RSetliving,'RlivingZZ');
if($s['livingZE']!=$RSetliving)ud($i['livingZE'],0,$RSetliving,'RlivingZE');
if($bigdif<=-0.3&&$brander=="Off"&& $Tbrander<time-60)sw($Ibrander,'On','brander dif = '.$bigdif);
elseif($bigdif<=-0.2&&$brander=="Off"&& $Tbrander<time-120)sw($Ibrander,'On','brander dif = '.$bigdif);
elseif($bigdif<=-0.1&&$brander=="Off"&& $Tbrander<time-180)sw($Ibrander,'On','brander dif = '.$bigdif);
elseif($bigdif<=0&&$brander=="Off"&& $Tbrander<time-240)sw($Ibrander,'On','brander dif = '.$bigdif);
elseif($bigdif>=0.1&&$brander=="On"&& $Tbrander<time)sw($Ibrander,'Off','brander dif = '.$bigdif);
elseif($bigdif>=0&&$brander=="On"&& $Tbrander<time-60)sw($Ibrander,'Off','brander dif = '.$bigdif);
elseif($bigdif>=-0.1&&$brander=="On"&& $Tbrander<time-120)sw($Ibrander,'Off','brander dif = '.$bigdif);
elseif($bigdif>=-0.2&&$brander=="On"&& $Tbrander<time-180)sw($Ibrander,'Off','brander dif = '.$bigdif);
elseif($bigdif>=-0.3&&$brander=="On"&& $Tbrander<time-240)sw($Ibrander,'Off','brander dif = '.$bigdif);
$badkvuur=$s['badkamervuur'];$Tbadkvuur=strtotime($t['badkamervuur']);$Ibadkvuur=$i['badkamervuur'];
if($difbadkamer<=-0.2&&$badkvuur=="Off"&&$Tbadkvuur<time-180)sw($Ibadkvuur,'On','badkamervuur dif = '.$difbadkamer);
elseif($difbadkamer<=-0.1&&$badkvuur=="Off"&&$Tbadkvuur<time-240)sw($Ibadkvuur,'On','badkamervuur dif = '.$difbadkamer);
elseif($difbadkamer<=0&&$badkvuur=="Off"&&$Tbadkvuur<time-360)sw($Ibadkvuur,'On','badkamervuur dif = '.$difbadkamer);
elseif($difbadkamer>=0.1&&$badkvuur=="On"&&$Tbadkvuur<time)sw($Ibadkvuur,'Off','badkamervuur dif = '.$difbadkamer);
elseif($difbadkamer>=0&&$badkvuur=="On"&&$Tbadkvuur<time-45)sw($Ibadkvuur,'Off','badkamervuur dif = '.$difbadkamer);
elseif($difbadkamer>=-0.1&&$badkvuur=="On"&&$Tbadkvuur<time-90)sw($Ibadkvuur,'Off','badkamervuur dif = '.$difbadkamer);
elseif($difbadkamer>=-0.3&&$badkvuur=="On"&&$Tbadkvuur<time-150)sw($Ibadkvuur,'Off','badkamervuur dif = '.$difbadkamer);
Basically it schedules the desired temperature of all virtual and real setpoints (valves).
It calculates how much heating is needed and depending on that the boiler is switched. To avoid overheating I 'pulse' the boiler of the temperature is almost achieved.
The cget function in it grabs a tempory variable that allows a manual override (sometimes I just want it a bit warmer than the schedule), after 3 hours I return to the auto-schedule.
Also, full automatically setpoints are set depending on wether we're at home and/or a sleep.