Domotique : Partie 5 – Implémenter un thermostat simple

Cet article fait partie de la série Domotique (18 articles au total)

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.

L'évolution de la température d'une pièce avec une régulation par hystérésis. Ici on cible une température de 20°C avec une marge d'erreur de 1°C
L’évolution de la température d’une pièce avec une régulation par hystérésis. Ici on cible une température de 20°C avec une marge d’erreur de 1°C. (Crédits : domotique-store.fr)

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.

Périphérique virtuel auquel seront rattachés nos interrupteurs virtuels
Périphérique virtuel auquel seront rattachés nos interrupteurs virtuels

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).

Création d'un interrupteur virtuel. Les valeurs sélectionnées (Type, Code...) n'ont pas d'importance.
Création d’un interrupteur virtuel. Les valeurs sélectionnées (Switch Type, Unit Code…) n’ont pas d’importance.

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 ;)

Interrupteur virtuel finalisé. Il ne reste plus qu'à animer tout cela !
Interrupteur virtuel finalisé. Il ne reste plus qu’à animer 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.