il y a plusieurs scripts de chauffages disponibles sur le forum, et ils sont tous très bien fait. Comme je suis un peu pénible, aucun ne correspondait entièrement à ce que je voulais. J'ai donc pris à droite et à gauche ce qui m'intéressait. Au final, les fonctions de mon script sont les suivante:
Gestion des températures et des horaires depuis l'interface graphique
Pour être très WAF, je voulais que tout ce gère grâce à un bouton et un thermostat.
Je m'articule donc sur un thermostat . On peut régler la température voulue en direct, ou bien programmer des changement par le bouton 'planning'.
Pour la mise en marche, j'ai créé un interrupteur virtuel qui actionne la mise en marche du chauffage, et qui peut donc se programmer encore une fois grâce au bouton 'planning'.
Envoi de la consommation
Là, il y a plusieurs écoles. On aime ou on aime pas. Le script permet donc de choisir si on veut utiliser ou non cette fonction. Pour ma part, je ne l'utilise plus car pour que ça fonctionne, il faut que le chauffage chauffe à fond lors de chaque allumage. C'est à dire qu'on envoi du courant dans la résistance électrique en permanence. Il consommera alors environs sa puissance en Watt. Ca suppose donc que le thermostat interne du radiateur soit shunté ou alors à fond. Perso ça me gène pour des raisons de sécurité: en cas de panne de domoticz alors que l'inter de chauffage est 'on'.... ca va chauffer en permanence.
Sinon, pas de soucis pour l'utiliser dans le script, ça fontionne. A condition bien sur d'avoir créé un compteur virtuel... Gestion des alarmes de sonde
La sonde qui n'émet plus??? chez moi (j'ai pas de chance) c'est fréquent! Faut dire que je n'utilise que des sondes DIY réalisées par moi-même.
Si la sonde n'émet plus durant 10 minutes, j'ai donc programmé 3 modes d'alarme
- 'On' : on allume le chauffage en permanence. Utile pour ne pas que le bébé qui dort tranquillement dans la chambre soit retrouvé congelé au petit matin (ça m'est presque arrivé, j'ai failli me retrouvé célibataire
- 'off' : on éteint le chauffage
- 'sondeBis' : on utilise alors la température relevée par une autre sonde. Perso, j'ai deux chambres côte à côte dont la température varie de ma nière similaire. Je choisi donc d'utiliser la sonde de cette autre chambre.
En cas d'alarme, un mail d'alerte est envoyé pour prévenir l'utilisateur.
Pour fonctionner, cette partie du script nécessite la création d'une variable utilisateur . A renseigner ensuite dans 'envoiMail = '
Mode débug
Gestion d'un mode 'debug', permettant d'afficher ou non des info dans le log
Le script :
Code : Tout sélectionner
---------------------------------
------ variables à adapter ------
---------------------------------
local consigne = 'Thermostat Garance' -- nom du thermostat de température de consigne
local hysteresis = 0.4 --Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens
local sonde = 'Garance' --Nom de la sonde de température
local thermostat = 'Chauffage Garance' --Nom de l'interrupteur virtuel du chauffage
local radiateur = 'Radiateur Garance' --Nom du radiateur à allumer/éteindre
local EmailTo = 'email@gmail.com' -- adresse mail où seront envoyées les botifications, si plusieurs séparer par ;
local envoiMail = 'mail_sonde_Garance' -- nom de la variable utilisateur gérant l'envoi des alertes
local compteur = 'oui' -- oui ou non si gestion de la consommation
-- si oui:
local puissance1 = 1000 -- puissance du chauffage en watt
local conso1 = 'Conso Garance' -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id1 = 61 -- Id du capteur virtuel de consommation électrique
local debug = 'non' -- oui ou non pour voir tous les messages debug dans le log
local modeAlarme = 'sondeBis' -- action à effectuer si il y a une alarme sonde:
-- choisir 'on' pour que le chauffage reste allumé, ou 'off' pour qu'il soit éteint
-- ou choisir 'sondeBis' pour utiliser une autre sonde de température (par ex une située dans une autre pièce)
local sondeBis = 'Evrard' -- nom de la sonde de remplacement pour le mode sondeBis
--------------------------------
-- Fin des variables à éditer --
--------------------------------
commandArray = {}
if debug == 'oui' then print('######## debug script time chauffage ########') end
------------------------------------
--- Gestion de l'alarme de sonde ---
------------------------------------
time = os.date("*t")
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
local lastSeen = timedifference(sonde)
if debug == 'oui' then print ('lastseen = '..lastSeen) end
if (lastSeen > 6000 ) then
alarmeSonde = 1
else
alarmeSonde = 0
commandArray['Variable:'..envoiMail] = tostring (0)
end
if debug == 'oui' then print ('alarme sonde = '..alarmeSonde) end
-- on récupère la valeur de envoiMail
mailEnvoye = tonumber(uservariables[envoiMail])
if debug == 'oui' then print ('envoiMail = '..mailEnvoye) end
if (mailEnvoye==0) and (alarmeSonde == 1) then envoyerAlerte = 1 end
if (mailEnvoye==1) and (alarmeSonde == 1) then envoyerAlerte = 0 end
if (mailEnvoye==0) and (alarmeSonde == 0) then envoyerAlerte = 0 end
if (mailEnvoye==1) and (alarmeSonde == 0) then envoyerAlerte = 0 end
if debug == 'oui' then print ('envoyerAlerte = '..envoyerAlerte) end
----------------------------------
--- Gestion de la consommation ---
----------------------------------
if (compteur == 'oui') then
if (otherdevices[radiateur] == 'On') then
-- envoie de la conso dans le capteur virtuel d'énergie
npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
energy1 = tonumber(energy1) + (puissance1 / 60)
npower1 = tonumber(npower1)
commandArray[1]={['UpdateDevice'] = conso_id1 .. '|0|' .. puissance1 .. ';' .. energy1}
print('Conso '..radiateur..' envoyée:'..energy1..' kw')
end
if (otherdevices[radiateur] == 'Off') then
-- envoie de la conso dans le capteur virtuel d'énergie
npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
energy1 = tonumber(energy1)
npower1 = tonumber(npower1)
commandArray[2]={['UpdateDevice'] = conso_id1 .. '|0|' .. 0 .. ';' .. energy1}
print('Conso '..radiateur..' nulle')
end
end
----------------------------------
--- Gestion de la température ----
----------------------------------
-- on récupère la consigne du thermostat
local consigne = tonumber(otherdevices_svalues[consigne])
if debug == 'oui' then print ('consigne = '..consigne) end
-- récupère la température relevée par la sonde
local temperature = tonumber(otherdevices_svalues[sonde])
if debug == 'oui' then print ('température = '..temperature) end
--Thermostat est actif et il n'y a pas d'alarme
if (otherdevices[thermostat]=='On') and (alarmeSonde == 0) then
if debug == 'oui' then print(thermostat..' : thermostat On / alarme 0') end
if (temperature < (consigne - hysteresis) ) then
print('Allumage du chauffage :'..radiateur)
commandArray[radiateur]='On'
elseif (temperature > (consigne + hysteresis)) then
print('Extinction du chauffage:'..radiateur)
commandArray[radiateur]='Off'
elseif (temperature <= (consigne + temperature)) and (temperature >= (consigne - temperature)) then
if debug == 'oui' then print('On laisse comme c\'est : '..radiateur) end
end
end
-- Thermostat est actif mais il y a une alarme sonde
if (otherdevices[thermostat]=='On') and (alarmeSonde == 1) then
if debug == 'oui' then print(thermostat..' : thermostat On / alarme 1') end
if modeAlarme == 'off' then
print ('Extinction du chauffage :'..radiateur)
commandArray[radiateur]='Off'
-- on envoi un mail sauf si c'est déjà fait
if envoyerAlerte == 1 then
print ('Alerte sonde, envoi d\'un mail')
objet = 'Alerte chauffage '..thermostat
message = 'Impossible d\'allumer le chauffage'..thermostat..' - Problème avec la sonde '..sonde
commandArray['SendEmail']= objet..'#'.. message .. '#' .. EmailTo
commandArray['Variable:'..envoiMail] = tostring (1)
else
print ('Alerte sonde, mail déjà envoyé')
end
elseif modeAlarme == 'sondeBis' then
print ('Alerte sonde, mode sonde bis')
if envoyerAlerte == 1 then
print ('Alerte sonde, envoi d\'un mail')
objet = 'Alerte chauffage '..thermostat
message = 'Problème avec la sonde '..sonde..' - Passage du chauffage '..thermostat..' en mode sonde bis - la sonde utilisée est : '..sondeBis
commandArray['SendEmail']= objet..'#'.. message .. '#' .. EmailTo
commandArray['Variable:'..envoiMail] = tostring (1)
else
print ('Alerte sonde, mail déjà envoyé')
end
local temperature = tonumber(otherdevices_svalues[sondeBis])
if (temperature < (consigne - hysteresis) ) then
print('Allumage du chauffage :'..radiateur)
commandArray[radiateur]='On'
elseif (temperature > (consigne + hysteresis)) then
print('Extinction du chauffage:'..radiateur)
commandArray[radiateur]='Off'
end
elseif modeAlarme == 'on' then
print ('Alerte sonde, mode ON')
print ('Allumage du chauffage :'..radiateur)
commandArray[radiateur]='On'
-- on envoi un mail sauf si c'est déjà fait
if envoyerAlerte == 1 then
print ('Alerte sonde, envoi d\'un mail')
objet = 'Alerte chauffage '..thermostat
message = 'Allumage permanent du chauffage'..thermostat..' - Problème avec la sonde '..sonde
commandArray['SendEmail']= objet..'#'.. message .. '#' .. EmailTo
commandArray['Variable:'..envoiMail] = tostring (1)
else
print ('Alerte sonde, mail déjà envoyé')
end
end
end
-- Thermostat est off et il n'y a pas d'alerte sonde
if (otherdevices[thermostat]=='Off') and (alarmeSonde == 0) then
if debug == 'oui' then print(thermostat..' : thermostat Off / alarme 0') end
print('Extinction du chauffage :'..radiateur)
commandArray[radiateur]='Off'
end
-- Thermostat est off et il y a une alerte sonde
if (otherdevices[thermostat]=='Off') and (alarmeSonde == 1) then
if debug == 'oui' then print(thermostat..' : thermostat Off / alarme 1') end
print ('Extinction du chauffage :'..radiateur)
commandArray[radiateur]='Off'
-- on envoi un mail sauf si c'est déjà fait
if envoyerAlerte == 1 then
print ('Alerte sonde, envoi d\'un mail')
objet = 'Alerte chauffage '..thermostat
message = 'Problème avec la sonde '..sonde..', inactive depuis plus de 10 minutes.'
commandArray['SendEmail']= objet..'#'.. message .. '#' .. EmailTo
commandArray['Variable:'..envoiMail] = tostring (1)
else
print ('Alerte sonde, mail déjà envoyé')
end
end
if debug == 'oui' then print('######## fin du debug script time chauffage ########') end
return commandArray