Page 1 of 1

Advise for new install

Posted: Tuesday 02 August 2016 15:34
by n1c0l45
Hi,

I have to change my heating thermostat and I would like to do something more efficient but I have to think also about the waf....
Today, I have a old gas boiler (no regulation, just on/off), 7 rooms with a radiator in each room. There are temp sensors connected to dmz also in each room.
I don't know if it's better to do multi zones (we use all rooms, maybe just the bathrooms which need heating just the morning?) or just to a full pid regulation for everything...
What do you recommend me? I just want to be able to change temp from my phone (even in domoticz?)
I saw elv max!, atag one, honeywell? Seems nice! But is it efficient? Also I don't have high programming skills so....

Thank you for the help

Re: Advise for new install

Posted: Tuesday 02 August 2016 15:44
by Egregius
I also have a old gas boiler with simple on/off.
I removed my room thermostat and replaced it with a zwave relay. That one turn's the boiler on/off.
On all radiator's I have Danfoss LC-13 thermostats.
In each room a thermometer is installed (Fibaro Smoke sensor) and for each room I have a dummy setpoint device.
Depending on all that numbers a script decides if the boiler needs to be on or not.
Works perfectly but requires some programming skills.

Re: Advise for new install

Posted: Tuesday 02 August 2016 15:52
by n1c0l45
Thanks for the quick answer!
This seems interesting! I have thought about something like that, but if can find an explanation or a how to, I don't think I, I'll be able to do it

Re: Advise for new install

Posted: Tuesday 02 August 2016 16:10
by Egregius
A part of my lua2php script:
http://www.domoticz.com/forum/viewtopic ... t=pass2php

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);
Lot's of code :P
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.

Re: Advise for new install

Posted: Tuesday 02 August 2016 21:26
by n1c0l45
Thank you, I gonna read all this.
Do you know if the thermostatic head you have are hysteresis or pid regulation?

Re: Advise for new install

Posted: Tuesday 02 August 2016 21:51
by Egregius
Don't know. It's the Danfoss LC-13.
You set a temperature and they open/close as needed.

Re: Advise for new install

Posted: Wednesday 03 August 2016 13:32
by markk
I went for Tado for heating and wouldn't have anything else now. I originally wanted to integrate my Heating with Domoticz for control but soon realised I didn't need to. Like you, we use all rooms so zoned heating wasn't necessary apart from ordinary TRD's just keeping temperatures equal. Tado is set for a comfortable temperature during the day and another for sleep time and I can honestly say I haven't touched it since then. It automatically turns the heating down as the last person leaves the house and knows when the first person is heading home so it's back up again when we arrive. Only thing is, I did get the gen 1 some time ago and I think it was cheaper then. prices may have gone up a bit now.

Re: Advise for new install

Posted: Wednesday 03 August 2016 21:21
by n1c0l45
Do you just have the Smart Thermostat Starter Kit or the full set with thermostatic valves?

Re: Advise for new install

Posted: Wednesday 03 August 2016 22:52
by markk
Don't think the TRVs are out yet. I just have the main thermostat and the wireless sensor.

Re: Advise for new install

Posted: Thursday 04 August 2016 21:17
by n1c0l45
Trv's are in the shop but really enjoyed expensive!