Profitant de mon covid - pas très original en la saison - je me suis amusé à faire quelques lignes en Lua pour gérer certains radiateurs.
Au départ, j'ai des têtes thermostatiques sur tous les radiateurs à l'exception de celui qui sert de bypass (sécurité pour ne pas fermer le circuit et donc endommager la chaudière). Les têtes sont des Eurotronic Spirit Zigbee, gérées par une zigate mais je pense que cela importe peu.
Dans un premier temps, j'avais créé un interrupteur virtuel avec planification.
Trois boutons : Hors gel, présence, absence.
Trois actions en script shell : script://./chauffage/sam.sh xx (où xx est la température et chauffage le sous-dossier du dossier script où se trouve le script). Ainsi on ne change pas le script, on change juste la température.
Le script shell
Code : Tout sélectionner
#!/bin/bash
#http://ip:8080/json.htm?type=command¶m=setsetpoint&idx=X&setpoint=Y
echo 'Mise à jour du chauffage SaM-Salon'
# Initialisation de l'id du premier radiateur
i=611
# Boucle pour appliquer la variable à chaque radiateur id+2
while ((i<620))
do
curl -i -k -s "http://ip:8080/json.htm?type=command¶m=setsetpoint&idx=$i&setpoint=$1"
((i=i+2))
done
exit 0
Alors pour les chambres, j'ai affiné, mais cette fois en Lua, trigger "time".
Le script est une adaptation d'un script vu ici ou sur domoticz.com (merci à son auteur original dont j'ai oublié le nom).
L'idée est la suivante :
- pour le déclencheur (trigger), il fallait que cela se fasse à une fréquence raisonnable. Un trigger sur la température ? Un trigger à la minute ? Tout cela paraissait trop fréquent. Donc j'ai pris une fréquence à 5 minutes, soit 12 fois par heure, ce qui est déjà assez élevé. 6 minutes, c'est 10 fois, 7 c'est 8 fois, 10 c'est 6 fois, etc.
- la température n'est pas prise à partir de la vanne - ce qu'elle peut faire - mais à partir d'un capteur autonome.
- la variation du setpoint doit être comprise entre -x et 2x par rapport à la consigne (pour 18° avec une limite de 2°, entre 16° et 22°).
- pour la modification du setpoint, je suis passé par l'url en json, bien plus efficace. En effet, la modification en Lua envoie bien la commande, mais souvent la modification ne prend pas. En URL, c'est 100% efficace.
Code : Tout sélectionner
--- Gestion du radiateur ---
--- V. 2021 ---
commandArray = {}
-----------------------------------
------------ Variables ------------
-----------------------------------
-- Nom du lieu
Qui = "Parents"
-- Interrupteur virtuel du thermostat
Th = otherdevices['Chauffage 1er']
-- Sonde température
sonde = 'Parents Temp'
Temp = otherdevices[sonde]
-- Setpoint du radiateur
Radiat = otherdevices['Parents Thermostat']
-- idx du radiateur
idx = 603
-- Valeur seuil pour éviter que le setpoint ne cesse bouger
hysteresis = 0.5
-- Limite de variation du setpoint (-x à +2x)
limit = 2
-- Fréquence de vérification toutes les x minutes
freq = 5
-----------------------------------
-------- Fin des variables --------
-----------------------------------
----- Conversion en numérique -----
Temp = tonumber(Temp)
Radiat = tonumber(Radiat)
-----------------------------------
---- Préparation des consignes ----
-----------------------------------
-- Températures de consigne prévues par le bouton virtuel
-- hors gel = 8
-- absence = 13
-- presence = 18
if (Th == "Absence") then
consigne = 16
elseif (Th == "Présence") then
consigne = 18
else
consigne = 8
end
-----------------------------------
-------- Fin des consignes --------
-----------------------------------
-----------------------------------
------ Contrôle du radiateur ------
-----------------------------------
if (Th ~= "Hors gel") and (os.date('%M')%freq == 0) and ((Temp < (consigne - hysteresis)) or (Temp > (consigne + hysteresis))) then
ecart = tonumber(string.format("%.0f",(consigne - Temp)))
if ecart >= 2*limit then
ecart = 2*limit
elseif ecart <= -limit then
ecart = -limit
end
set = consigne + ecart
if (Radiat ~= set) then
print("-+-+-+- Consigne "..Qui.." passée à "..set.." -+-+-+-")
-- commandArray['SetSetpoint:'..idx] = set
commandArray['OpenURL'] = 'http://ip:8080/json.htm?type=command¶m=setsetpoint&idx='..idx..'&setpoint='..set
end
end
return commandArray