Multi zone temperature control

Topics (not sure which fora)
when not sure where to post, post here and mods will move it to right forum.

Moderators: leecollings, remb0

Post Reply
mangaman
Posts: 3
Joined: Sunday 07 August 2016 21:41
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Multi zone temperature control

Post by mangaman »

Hello,

I'm new to domoticz. I got solar panels last month and used a raspberry with domoticz installed to get the data from the smart meter. The data from the solarpanels itself (solaredge 3500) still not working. But that's for later

Using domoticz and reading i "discovered" that multizone temperature control was possible.
The kids rooms are to cold in the winter but the cv is not turning on because the controlled room is at setpoint. So this has priority.

As far as i can tell i need the following items.

Every room a thermostat:
The secure srt321 was adviced. But they could tell me if if it was possible to get the actual room temperature from it.
Or is it better to take the danfoss....

Boilerswitch:
Secure boiler switch. Just a switch to start the boiler/cv

Every radiator a thermostatic valve:
The danfoss lc13 was adviced.

These items can operate stand alone without domoticz. Every thermostate should be a trigger to start the boilerswitch.

But with domoticz i would be able to set temperatures from an app and get reading. This to check/controll kids room temps and adjust.

For the domotics part i need a zwave rflink controller on 868 mhz (if im correct)

Has anyone some more info about this subject. This wil be an expensive project and would like to get it right the first time. So before buying i need more info :)

Verstuurd vanaf mijn SM-G920F met Tapatalk
User avatar
Egregius
Posts: 2582
Joined: Thursday 09 April 2015 12:19
Target OS: Linux
Domoticz version: v2024.7
Location: Beitem, BE
Contact:

Re: Multi zone temperature control

Post by Egregius »

Define 'expensive' :lol:

I have similar setup with 6 Danfoss Z Thermostat 014G0013, 5 FIBARO System FGSD002 Smoke Sensor as temperature sensors, and a FIBARO System FGWPE Wall Plug for a electric heater.

Depending on your heating installation it could be more interesting to install valves on the pipe divider (In Flemisch we call that a 'collecteur').
One requirement for that is a pipe circuit for each room. Advantage of that is that you don't need a bunch of battery powered thermostat valves.
I couldn't do that, the 4 rooms are on 2 circuits. So I went for the Danfoss thermostat (after buying several others wich weren't good enough, or to noisy).

You also need thermometers in each room. I use Fibaro smoke sensors as they apeared to be very accurate and fast. In my bathroom they detect a 2,5°C change in 8 minutes.

On my boiler I have the Secure Actuator. Later I had a Fibaro switch for another thing and noticed you can switch a potential free contact with that also, so a Fibaro relay would be enough.

And of course, you'll need a good script to control everything, calculate all room requirements to decide if the boiler needs to heat, shut it back down before the temperature is achieved to avoid over heating,...
The script I use is at http://egregius.be/tag/domoticz/
mangaman
Posts: 3
Joined: Sunday 07 August 2016 21:41
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Multi zone temperature control

Post by mangaman »

The collecteur option was my first idea. But i too have 2 circuits for 5 room. It is possible but way to expensive.

I know the whole setup won't be cheap either. I just don't want to buy sensors which are useless afterwards.

Instead of using the smokesensor with temp sensor, i was thinking of the secure wall thermostat. The reason is because the kids (and wife) have to use it to. They dont want to first take a phone or tablet to change temperature.



Verstuurd vanaf mijn SM-G920F met Tapatalk
fergalom
Posts: 74
Joined: Thursday 24 September 2015 11:44
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Multi zone temperature control

Post by fergalom »

Egregius wrote:Define 'expensive' :lol:

I have similar setup with 6 Danfoss Z Thermostat 014G0013, 5 FIBARO System FGSD002 Smoke Sensor as temperature sensors, and a FIBARO System FGWPE Wall Plug for a electric heater.

Depending on your heating installation it could be more interesting to install valves on the pipe divider (In Flemisch we call that a 'collecteur').
One requirement for that is a pipe circuit for each room. Advantage of that is that you don't need a bunch of battery powered thermostat valves.
I couldn't do that, the 4 rooms are on 2 circuits. So I went for the Danfoss thermostat (after buying several others wich weren't good enough, or to noisy).

You also need thermometers in each room. I use Fibaro smoke sensors as they apeared to be very accurate and fast. In my bathroom they detect a 2,5°C change in 8 minutes.

On my boiler I have the Secure Actuator. Later I had a Fibaro switch for another thing and noticed you can switch a potential free contact with that also, so a Fibaro relay would be enough.

And of course, you'll need a good script to control everything, calculate all room requirements to decide if the boiler needs to heat, shut it back down before the temperature is achieved to avoid over heating,...
The script I use is at http://egregius.be/tag/domoticz/
Hi Egregius, would you mind sharing the script you referred to above, can't find it on your site.
Trying to do something similar with Danfoss and the FGSD002 and no point in re-inventing the wheel ;-)
User avatar
Egregius
Posts: 2582
Joined: Thursday 09 April 2015 12:19
Target OS: Linux
Domoticz version: v2024.7
Location: Beitem, BE
Contact:

Re: Multi zone temperature control

Post by Egregius »

It's part of my pass2php script at https://egregius.be/2016/lua-pass2php-v2-0/
Line 288 till 381.
Operational, messy coded, should try to make it nicer coded but then again, it works for me so why bother ;)

Example of 1 room with comments inline:

Code: Select all

//default temperature of none of the lower lines are true
$Setliving=14.0;
//get a simple variable. 0=normal operation, 1= preheat (not used anymore), 2=manual override
$setpointliving=cget('setpointliving');
//reset the manual override if it's set more than 3 hours ago.
if($setpointliving!=0&&strtotime($t['living_set'])<drieuur){cset('setpointliving',0);$setpointliving=0;}
//if variable is not manual override check the schedule
if($setpointliving!=2){
    //check if outside temperature is lower than 20°, the dummy switch 'heating' is on and the windows of the room is closed
    if($buiten_temp<20&&$s['heating']=='On'&&$s['raamliving']=='Closed'){
        //if above is all true risen the setpoint to 17°
        $Setliving=17.0;
        //if time of day is between 3:00 and 18:00 check is dummy switch 'sleep' is on, if true rise to 20.5°
        if(time>=strtotime('3:00')&&time<strtotime('18:00'))$s['slapen']=='Off'?$Setliving=20.5:$Setliving=17.0;
        //else if time is between 18:00 and 22:30 rise temp to 21°
        elseif(time>=strtotime('18:00')&&time<strtotime('22:30'))$s['slapen']=='Off'?$Setliving=21:$Setliving=17.0;
    }
    //Finally is all above is done and the variable is other then the virtual setpoint of the room update the setpoint in domoticz to the new value
    if($s['living_set']!= $Setliving){
        ud($i['living_set'],0,$Setliving,'Rliving_set');
        $s['living_set']=$Setliving;
    }
}
Let's do some magic on all rooms:

Code: Select all

//arrays of all the rooms, and the rooms that are heated by the gas burner
$kamers=array('living','badkamer','tobi','alex','kamer');
$kamersgas=array('living','tobi','alex','kamer');
//set a variable really high
$bigdif=100;
//state of the gas burner
$brander=$s['brander'];
//last update time of the burner
$Tbrander=strtotime($t['brander']);
//idx of the bruner
$Ibrander=$i['brander'];
//loop thru all rooms
foreach($kamers as $kamer){
    //set a variable with the difference between real temperature and setpoint, round the number to 1 decimal place.
    ${'dif'.$kamer}=number_format($s[$kamer.'_temp']-$s[$kamer.'_set'],1);
    //if the room is heated by gas and the difference is smaller than the biggest difference update the $bigdiff variable
    if(in_array($kamer,$kamersgas))if(${'dif'.$kamer} < $bigdif) $bigdif=${'dif'.$kamer};
    //
    ${'Set'.$kamer}=number_format($s[$kamer.'_set'],1);
}
//loop thru all rooms again, now that we know all temp differences we can calculate the setpoint for the valves, the coldest rooms get a higher setting so the valves are already open when needed. 
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']);
}
Update the real valves with the calculated values, this room has 3 valves:

Code: Select all

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');
 
And at last turn on the burner depending on the biggest difference and the last switch time:

Code: Select all

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);
 
It took quite some time to get it this way but it works really good. I have a histeris of 0.1°, the heating is fast because only the valves that require heat are open, and because they go open before the difference drops below 0 there's no delay caused by the wake-up time.
fergalom
Posts: 74
Joined: Thursday 24 September 2015 11:44
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Multi zone temperature control

Post by fergalom »

Excellent, thanks!
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest