Control your floor heating with a smart home controller
This is the fourth post about central heating automation of my own heating system described in first post.
You may have already heard that floor heating is great, but it’s a little complicated to set up and regulate. Indeed, floor heating is based on the storage of heat in the slab, using low temperature hot water. The heating time is longer and the water temperature should be controlled more precisely.
Recent boilers ensure good management and regulation of floor heating without much effort. How to manage such a heating mode and what benefit to gain ? You may find some answers in this article
In regards to comments I received, I’ve added a paragraph called Is there any interest to change floor heating temperature setpoint ?
As specified in post Calibrating your heater, my condensing boiler is optimizing the level of heating in relation to the outside temperature by itself. Furthermore setting automatic start / stop of the flame is carried on analysis of the return temperature of water.
The room thermostat is then used to adjust precisely the temperature inside the room and achieve daily programming. Replacing the thermostat by a home automation module (see post Control a gas boiler wih your the home automation system) is used to give control to the home automation controller of the house.
It is then possible to incorporate equivalent functions to smart thermostats such as NEST or QIVIVO :
- remote control of heating
- fine management of time slots according to a timetable
- use of information of human presence or not in the house to adjust the temperature
- use of the location of people to start heating when returning
- Access to historical values and charts to analyze and optimize
I use the standard thermostat device proposed by my eedomus controller to achieve regulation. In the case of floor heating, its settings are special.
- indoor thermometer is manager by an Aeon Labs multisensor 4in1 sensor supplied by mains through its USB connector (no more battery to replace!).
Although its test have shown big difference in temperature measurement vs other devices, it appears that temperature values are correct in regards to my other thermometer when multisensor is at correct place, meaning just below the ceiling.
- outdoor temperature probe have no effect, although it’s declared. This is caused by ‘T’ coefficient which is null.
- ‘C’ coefficient is equal to 10, which is a very high value. Impact is on the way thermostat’s going to work : basic ON/OFF mode (stop heating if too hot, start heating if too cold). Boiler’s managing the other aspects of regulation
- I’m using also the auto-stop feature of thermostat when door detectors on my main entrance or outdoor kitchen door detect any opening.
Automation of heating temperature versus events
The aim is to achieve an intelligent adaptation of the thermostat according to the timeframe and people inside the house.
The first setup was initially based on eedomus programming rules. Rules have multiplied and it appeared that using a php script is simplifying the writing of the rules, also reducing the computational load for eedomus.
Is there any interest to change floor heating temperature setpoint ?
A floor heating has an important thermal inertia, then temperature changes are long (several hours). Those changes are longer if temperature variation is importante. It’s then useless to modify temperature setpoint too much during a day. This inertia has effects in both direction : decrease of temperature in the room is also slow, and a decrease of setpoint by 0.5°C stops the boiler during 2 ou 3 hours
In the proposed script, temperature setpoint is reduced by 1°C during the night and heating restart early in the morning (this value of 1°C may be still a little too high). When absent from home, temperature setpoint is decreased by 0,5°C, the home is still comfortable when you come back.
In my opinion, it’s not temperature reduction value which is important, but time when comfort setpoint is set back. This restart boiler and then then floor is hot when waking up, which is an added piece of comfort.
What about energy consumption induced by such way of working, is it reducing or increasing consumption ? Unfortunately I have no answer to this question (still), but I can argue for both. I’m then appealing to you to find answers !
Do you have some experiment to share ? Have you already read some posts about this subject ? If yes, please share those information.
The device “comfort setpoint”
The eedomus thermostat doesn’t include multiple setpoints like “Comfort temperature”, “Temperature Eco”. It’s very easy to modify setpoint temperature in rules but the temperature setpoint is described in the rule and can’t be modified directly.
Wishing to have direct access to the “Comfort temperature” setpoint , I added a state device named “Consigne confort RDC” in french. It contains a list of possible values for the desired temperature. This device is added to the one created with the eedomus thermostat, I renamed the last one”Thermostat”. This thermostat has its temperature setpoint that varies throughout the day depending on the period and other factors.
The built-in eedomus calendar is very convenient to setup hourly rules . Here are the different period I have defined in my side :
Firstly here are the periods that begin at specific hour
- “Evening” (Soirée in french): blinds are closed, some aren’t sleeping
- “Night” (nuit in french): everybody’s sleeping, temperature setpoint is decreased
- “Wake up” (réveil in french): begins very early the morning to warm up the house
- “Presence” : someone’s at home during the day, blinds are opened, comfort temperature is set
Some period aren’t trigger completely or fully by hourly rules but by other particular events :
- “Pyjama” means we’ve woken up, but we don’t want to fully open blinds. Transition from “Wake up” to “Pyjama” is triggered by human activity detection inside the kitchen.
- “Presence” is triggered manually before hourly rule when we want the blinds to open
- “Absence” is triggered from period “Presence” when there’s no more activity detected in the whole house. Temperature setpoint is slightly decreased.
- “Evening” is triggered before hourly rule at sunset, then blinds are closing.
- “Night” is triggered automatically from “Evening” when there’s no more activity detected inside whole house. Temperature’s decreased.
- “Extended absence” is triggered manually when we are absent during several days.
A script to control temperature
Ce script va contrôler la température réglée sur le périphérique “Thermostat” en fonction de la phase et des évènements.
Si on enlève le code permettant de récupérer et agir sur les valeurs des périphériques la programmation est facile à lire en php, en voici un petit extrait :
This script’s setting the temperature setpoint on the device “Thermostat” depending on time and events.
Doing the same job with eedomus rules instead of script is possible, but the full understanding is easier reading php code that manage multiple rules in parallel, here is a small excerpt of the script :
|if ($chauffage[‘value’] == 0)
echo ” > Chauffage éteint<br>”;
$settemp = 7;
echo “|-> Chauffage allumé.<br>”;
This script’s using those input data, to be added as arguments in the call :
- dayphase : it’s API code of “Day Phase” peripheral giving current dayphase
- consigne (setpoint in english): it’s API code of peripheral “comfort temperature” described above
- thermostat : API code of peripheral “Thermostat” described before
- activite (activity in english): it’s API code of “Activity” peripheral. It gives situation of human activity or not in the room. Values are :
- 0 means no activity
- 100 means activity
- Chauffage (heating in english): it’s API code of peripheral “heating” giving general state of heating system being active or not
Its possible values are :
- 0 means “heater is deactivated”
- 100 means “Heater is active”
- 200 means “Forced heating”. This is a test mode to force heater to heat up
Executing the temperature control script
Script being saved in eedomus controller, it has to be launched when necessary by some rules.
In order to do so, an http type peripheral have to be creating containing an URL and parameter value matching the script names and corresponding arguments
For each argument, replace the blurred values by API code of corresponding peripheral, being for instance :
- URL : http/localhost/script
- Type : GET
- Parameters : ?exec=gestion_chauffage_sam.php&dayphase=12345&consigne=23456&thermostat=34567&chauffage=45678&soleilstatut=56789&activite=67890
We have then to create a rule calling this value and so the script, when there’s some change on one of those peripherals. In my case I have 2 rules :
- first rule launchs the script for local events inside the room (setpoint, activity,thermostat)
- second rule launchs the script when common event for every room is happening (dayphase, heating mode, sun)
In my case this second rules is starting several scripts
successively for the different rooms thanks to a macro, but it isn’t necessary for a single script.
If you followed all the steps, you now have a programmable thermostat in your eedomus with direct access to comfort temperature setpoint. Although the php script didn’t exist previous winter, my floor heating was already controlled by rules, and no malfunction have appeared. The temperature was also perfectly regulated with the eedomus thermostat using parameters described above.
Those rules have now been removed and replaced by the php script. A script is easy to read and maintain when a working basis is available. Although a script is easier to understand when you want to manage some complex cases. You can find also in this post some way to organize periods of time using in particular eedomus calendar.
I suspect everyone may have different needs, so the script may be fine tuned, I hope this description and script availability may help you. Don’t hesitate to react by leaving a comment, a question or some kind of proposition to improve this post.