Après les dernières aventures matérielles pour piloter nos chauffages électriques, je vous propose un épisode où l’on gardera les mains propres :) Aujourd’hui, on va implémenter un thermostat logiciel qui va permettre de maintenir une pièce à une température donnée. Pour cet épisode, vous n’aurez même besoin d’aucun matériel supplémentaire !
Cet article est le 6ème d’une série dédiée à la domotique dont vous pourrez trouver le sommaire au bas de cet article.
Le principe du thermostat de chauffage
Dans chacune de mes pièces, j’ai une sonde de température (cf Episode 2), ainsi qu’un chauffage électrique (cf Episode 4). L’objet de l’exercice du jour sera donc d’asservir le chauffage à cette sonde : on va donc l’allumer ou l’éteindre en fonction de la température mesurée dans la pièce ! Pour éviter que le chauffage passe son temps à s’allumer et à s’éteindre, on va ajouter une « marge d’erreur » (on appelle cette marge l’hystérésis). Concrètement, si l’on souhaite maintenir une pièce à une température de consigne de 20°C et que l’on choisit une hystérésis de 0.5°C, on va allumer le chauffage quand la température va passer en dessous de 19.5°C et l’éteindre au delà de 20.5°C.

Mon cahier des charges
J’ai choisi de commencer avec quelque chose de simple.
- Un interrupteur virtuel pour chacune de mes pièces dans Domoticz.
- Le thermostat de la pièce en question sera actif quand l’interrupteur virtuel sera en position ON.
- La température de consigne n’est pas modifiable directement depuis l’interface de Domoticz
- La techno utilisée ne supportant pas le retour d’état, je cherche un moyen de fiabiliser le système
La mise en oeuvre
Etape 1 : Créer l’interrupteur virtuel
Si vous ne l’avez pas déjà fait, dans la partie Configuration/Matériel de Domoticz, ajouter un périphérique de type « Dummy ». Tous nos interrupteurs virtuels y seront rattachés.

Dans l’onglet « Interrupteurs », cliquez sur « Ajout manuel » et ajoutez un interrupteur ON/OFF du type qui vous plaira (seul impératif : le rattacher au périphérique « Dummy » créé précédemment).

A partir de ce moment, vous avez un bel interrupteur, en l’occurrence « Thermostat salon », que vous pouvez allumer et éteindre à loisir ! Rajoutons un peu de magie derrière tout cela ;)

Etape 2 : Création du script
Domoticz permet d’écrire des scripts LUA pour exécuter de petits scénarios. Aujourd’hui on va justement s’en servir pour implémenter cette logique de thermostat ! Chaque script est à placer dans le répertoire scripts/lua de domoticz. Pour cet exemple, j’ai donc créé un fichier script_device_thermostat-salon.lua dans ce dossier (le nom du fichier doit impérativement commencer par « script_device_ » comme expliqué dans le wiki de domoticz).
Le contenu du fichier
-- Alexandre DUBOIS - 2014 -- Ce script permet de maintenir la température de salon entre 19°C et 21°C quand l'interrupteur -- virtuel 'Thermostat salon' est activé. -------------------------------- ------ Variables à éditer ------ -------------------------------- local consigne = 20 --Température de consigne local hysteresis = 0.5 --Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens local sonde = 'Salon' --Nom de la sonde de température local thermostat = 'Thermostat salon' --Nom de l'interrupteur virtuel du thermostat local radiateur = 'Radiateur salon' --Nom du radiateur à allumer/éteindre -------------------------------- -- Fin des variables à éditer -- -------------------------------- commandArray = {} --La sonde Oregon 'Salon' emet toutes les 40 secondes. Ce sera approximativement la fréquence -- d'exécution de ce script. if (devicechanged[sonde]) then local temperature = devicechanged[string.format('%s_Temperature', sonde)] --Temperature relevée dans le salon --On n'agit que si le "Thermostat" est actif if (otherdevices[thermostat]=='On') then print('-- Gestion du thermostat pour le salon --') if (temperature < (consigne - hysteresis) ) then print('Allumage du chauffage dans le salon') commandArray[radiateur]='Off' elseif (temperature > (consigne + hysteresis)) then print('Extinction du chauffage dans le salon') commandArray[radiateur]='On' end end end return commandArray
Pour adapter ce script à votre installation, il suffit de modifier les quelques variables entre les lignes surlignées en jaune (8 à 12).
Comment le script fonctionne ?
Chaque fois qu’une nouvelle valeur est reçue de la part de la sonde du salon (et si l’interrupteur virtuel du thermostat est actif), on compare la température actuelle de la pièce à la température de consigne (+ ou – l’hystérésis). Si nécessaire on allume le radiateur (en coupant le signal sur le fil pilote) ou on lui demande de s’éteindre (en envoyant un signal sur le fil pilote).
Le fait que le script soit rattaché à un interrupteur est super pratique. Déjà cela permet de lancer le thermostat en 1 clic, mais surtout cela permet d’y associer des plannings, pour faire en sorte par exemple que le chauffage se coupe la nuit, qu’il se mette en route 1h avant votre retour du travail etc…
Quelles améliorations ?
Ce système a le mérite de fonctionner, je l’ai mis en œuvre tout cet hiver mais il existe plusieurs améliorations possibles :
- utiliser un algorithme de régulation plus performant (thermostat à base de régulateur PID par exemple)
- prendre en compte la gestion de plusieurs sondes/radiateurs par pièce (pour les grandes pièces)
- fournir à l’utilisateur la possibilité de spécifier sa température souhaitée dans l’interface de Domoticz, plutôt que dans le script
Voilà, j’espère que cet article vous aura plu et vous donnera envie d’aller encore plus loin dans la domotique ! N’hésitez pas à partager vos pensées et questions dans les commentaires.