Domoticz : Thermostat et prise en compte des heures creuses

Et si nous ajoutions un thermostat ? Vu la facilité de gestion proposée par Domoticz, j’ai décidé de passer le chauffage d’une de nos chambres sur ce système. Et surtout en prenant en compte les heures creuses ou pleine.

thermostat-domoticz

Alors je m’inspire beaucoup du script réalisé par Vil1driver sur le forum easydomoticz.com

Voici le mien et je détails ce qui me parait important :

Script Lua pour Domoticz : Thermostat et prise en compte des heures creuses
———————————————-
—— Configuration ——
———————————————-

— nom de zone
local zone = ‘ch Pupuce’ — nom de la zone pour affichage dans les logs et alerte mail

— consignes
local consigne_conf = ‘Thermo_Pupuce’ — nom de thermostat virtuel de gestion de la température de confort
local consigne_abs = 12 — Température lors d’abscence prolongée (hors gêle)

— capteurs
local sonde = ‘Temp_Pupuce’ — Nom de la sonde de température
local mode = ‘Chauffage_Pupuce’ — Nom de l’interrupteur virtuel général (On=auto Off=hors gêle)

— période de chauffage
— pour une période de 24h, mettre debut = ’00:00′ et fin = ’24:00′
— bien respecter le format hh:mm
local debut = ’02:00′
local fin = ’08:00′
local debut2 = ’13:00′
local fin2 = ’15:00′

— radiateur
local radiateur = ‘Radiateur_Pupuce’ — Nom de l’interrupteur de chauffage

— email
local mail = ‘*******@********’ — pour réception alerte sonde muette (chauffage coupé)

———————————————-
— Fin de la partie configuration —
———————————————-

function timedifference(d)
s = otherdevices_lastupdate[d] year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end

— quelle heure est-il
local heure = string.sub(os.date(« %X »), 1, 5)
— notre dernière apparition était elle dans la plage horaire ?
if (
(
(60*tonumber(string.sub(heure,1,2)) + tonumber(string.sub(heure,4,5))) >= 60*tonumber(string.sub(debut,1,2)) + tonumber(string.sub(debut,4,5))
and
(60*tonumber(string.sub(heure,1,2)) + tonumber(string.sub(heure,4,5))) < 60*tonumber(string.sub(fin,1,2)) + tonumber(string.sub(fin,4,5))
)
or
(
(60*tonumber(string.sub(heure,1,2)) + tonumber(string.sub(heure,4,5))) >= 60*tonumber(string.sub(debut2,1,2)) + tonumber(string.sub(debut2,4,5))
and
(60*tonumber(string.sub(heure,1,2)) + tonumber(string.sub(heure,4,5))) < 60*tonumber(string.sub(fin2,1,2)) + tonumber(string.sub(fin2,4,5))
)
) then
inScope = true
else
inScope = false
end
— on regarde de quand date la dernière relève de température
local lastSeen = string.sub(os.date(« !%X », timedifference(sonde)), 1, 5)

commandArray = {}

–envoie d’une alerte mail si la sonde reste muette (pas de valeur reçue sur les 30 dernières minutes)
if (lastSeen >= ’00:30′ and lastSeen < ’00:32′) then
commandArray[‘SendEmail’]=’Domoticz Alerte#Alerte sonde ‘..zone..’ muette#’..mail
end

— gestion de la consigne
— récupération de la valeur du thermostat
consigne_conf = tonumber(otherdevices_svalues[consigne_conf])
— si le thermostat général est actif
if (otherdevices[mode] == ‘On’) then
consigne = consigne_conf
else
consigne = consigne_abs
end

— si heure creuse/pleine
if (inScope == true) then
consigne = consigne
else
consigne = consigne – 0.5
end

— on récupère la température fournie par la sonde
local temperature = math.floor(10*tonumber(otherdevices_temperature[sonde]))/10

— si la température est supérieure ou égale à la consigne,
— ou que la sonde semble muette (10 min sans relève),
if ((temperature >= consigne) or (lastSeen > ’00:10′)) then
— on stop la chauffe
commandArray[radiateur]=’Off’
log = ‘Radiateur -. OFF .-‘
— si la température est inférieur à la consigne et que la sonde est OK
end
if ((temperature < consigne – 0.25) and (lastSeen <= ’00:10′)) then
— on chauffe
commandArray[radiateur]=’On’
log = ‘Radiateur -. ON .-‘
end

— logs
print(‘*** Chauffage ‘..zone..’ ***’)
if (inScope == true) then
print(‘Heure creuse : Youpi’)
else
print(‘Heure pleine -> Thermo – 0.5’)
end
print(‘il fait ‘..temperature..’°C pour ‘..consigne..’°C souhaité’)
print(log)

if (otherdevices[mode] == ‘Off’) then
print(‘Thermostat général sur Off’)
elseif (lastSeen > ’00:10′) then
print(‘Sonde muette !’)
else
— print(‘il fait ‘..temperature..’°C pour ‘..consigne..’°C souhaité’)
end
print(‘*** *** *** *** *** ***’)
return commandArray

Pour ces premiers tests, le Thermostat est réglé sur 19.
Et nous sommes à 17h30 en heure creuse.

Ce qui donne en Log :

thermostat-domoticz

Et voici 24h en courbe :

domoticz thermostat

En rouge : heures creuses -> consigne de chauffage à 19.5°
En vers : pendant les heures pleines, la consigne est légèrement plus basse.

Comme le radiateur est bien dimensionné pour la taille de la pièce à chauffer, la t° remonte rapidement.

 

One Comment

Add a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

AlphaOmega Captcha Classica  –  Enter Security Code