Il concerne la gestion de mes radiateurs electriques.
Je remercie tout d'abord tous ceux qui on contribué à cette réalisation me mettant sur la bonne voie pour lever certain point bloquant.
En matos j'ai donc
1 module qui gere on off d'un radiateur par pièce
1 sonde température par pièce
J'ai 1 interrupteur virtuel "manuel" pour définir si on est en période de chauffage général
J'ai 1 interrupteur virtuel "manuel" pour définir si on est en période de chauffage exclusif pour la salle de bain (on ne supporte pas le froid dans cette pièce)
1 consigne de thermostat virtuel par pièce
J'ai fais le choix d'avoir 1 script time par pièce qui s’exécute toutes les 5 minutes et où on retrouve les variables de chaque pièce et un appel d'une fonction qui se trouve dans un fichier où j'aurais toutes mes fonctions utiles "mesfonctions.lua" (1 seule pour l'instant, celle des radiateurs).
J'ai choisis ce mode de fonctionnement car si je change d'avis sur les conditions ou fonctionnement je n'aurais qu'a changer ce fichier pour modifier mes 6 radiateurs.
Script : rien de foncièrement particulier pour le fonctionnement car tout se passe dans le fichier fonction. ici nous renseignement que les valeur local inhérente à la pièce.
Code : Tout sélectionner
commandArray = {}
time = os.date("*t")
if (time.min % 5 == 0) then
-- Mettre sur true pour afficher les messages lors du debogague
debug=false
-- chemin ou se trouve le fichier de mes fonctions que j'appellerais
package.path = package.path..";/home/pi/domoticz/scripts/lua/?.lua"
-------- variables fixes a changer selon piéces & modules---------
local minus = 1 --Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens
local radiateur = 'Prise_SecheServiette' --Nom du device radiateur à allumer/éteindre
local periode = 'Periode_Chauffe_SDB' --Switch manuel permettant de valider si on est en periode de chauffage de SDB
local sonde = 'Temp_SDB' -- sonde temperature/humidite salle de bain
local planning = 'Consignes_SDB' --themostat avec plannification pour le chauffage de la salle de bain
require "mesfonctions" -- appel du fichier ou sont stockees mes fonctions
gest_chauffage(minus,radiateur,periode,sonde,planning) -- appel de la fontion de gestion du chauffage avec arguments necessaire
local resultat = resultat -- transformation en variable local au cas ou ;-)
if(debug)then
print('recection du resultat '..resultat..' pour la sonde '..sonde..' ') -- afficher resultat reçu de la fonctions
end
end
return commandArrayIl n'y a que la fonctions gest_chauffage pour l'instant.
Il y aurait plusieurs possibilités bien sur pour faire cette fonction et bien plus simple c'est sûr... mais entre évolutivité, sécurité, compréhension pour mon petit cerveau... j'ai choisi ce qui suit
j'ai choisi dans un premiers temps de mettre les conditions qui corresponds à la période de chauffage en "On"
On commence par une vérification des températures pour voir si pour commencer il n'y a pas une gros incohérence (température vraiment trop basse ou vraiment trop haute) avec envoi de mail.
Puis selon les conditions on obtiens une variable "resultat" qui est en : On Off ou rien
Puis arrive le cas de la période de non chauffage
là on a un "resultat" de toute façon en Off (cela pourrait changer et avoir un choix en" rien"... a voir dans le futur)
... vérification aussi surtout pour voir s'il ne faudrait allumer le chauffage.
Puis enfin on applique le "resultat"
J'ai fait le choix d'une application du resultat à seul endroit de la fonction par simple commodité par rapport à ma façon de réfléchir.
Donc actuellement mes modules reçoivent toutes les 5 minutes un ordre de s'éteindre car nous ne sommes pas en période de chauffage.
Code : Tout sélectionner
-- Fonction pour savoir si on mets le radiateur en route
function gest_chauffage(minus,radiateur,periode,sonde,planning)
local temp, hum = otherdevices_svalues[sonde]:match("([^;]+);([^;]+)") -- recuperation de la temperature de la sonde
local temp = tonumber(temp) -- mise au format chiffre
local consigne = otherdevices_svalues[planning] -- recuperation de la temperature du hermostat
local consigne = tonumber(consigne) -- mise au format chiffre
if(debug)then
print("temperature reference de "..sonde.." est de "..consigne)
print("temperature reelle du radiateur "..radiateur.." est de "..temp)
end
if (otherdevices[periode] == 'On') then -- si c'est une periode de chauffage
-- Alerte en cas de resultat incoherent en periode de chauffe
if (temp < 16.5) then -- Aucune piece en dessous cette temperature dans mes parametrages
commandArray['SendEmail']='Probleme temperature#Alerte chauffage sur '..radiateur..' ou sur '..sonde..' car temperature trop basse#pubstef@francepolska.eu'
elseif ((temp > 24) and (sonde ~= 'Temp_SDB')) then -- Aucune piece au dessus de cette temperature dans mes parametrages (hors salle de bain)
commandArray['SendEmail']='Probleme temperature#Alerte chauffage sur '..radiateur..' ou sur '..sonde..' car temperature trop haute#pubstef@francepolska.eu'
elseif ((temp > 30) and (sonde == 'Temp_SDB')) then -- La salle de bain ne depasse jamais 30 meme quand madmae prend une mega douche
commandArray['SendEmail']='Probleme temperature SDB#Alerte chauffage sur '..radiateur..' ou sur '..sonde..' car temperature trop haute#pubstef@francepolska.eu'
end
-- choix ordre au chauffage selon situation
if (temp <= (consigne - minus)) then --il faut trop foid
if (otherdevices[radiateur] == 'Off') then -- si le radiateur est sur Off
resultat = 'On'
if(debug)then
print("Allumage du radiateu "..radiateur)
end
elseif (otherdevices[radiateur] == 'On') then -- si il est sur on
resultat = 'rien' -- allumer le radiateur
if(debug)then
print("Chauffage "..radiateur.." deja en action") --rien faire
end
end
elseif (temp > consigne) then -- si trop chaud
resultat = 'Off' -- eteindre chauffage
if(debug)then
print("Extinction du chauffage "..radiateur)
end
else -- autrement
resultat = 'rien'
if(debug)then
print("Attente d'ordre sur "..radiateur) -- ne rien faire
end
end
else -- autrement
resultat = 'Off' -- eteidre radiateur
if(debug)then
print("Hors periode de chauffage de "..radiateur)
end
-- Alerte en cas de resultat incoherent en HORS periode de chauffe car a c'est emperature on commence a chauffer
if ((temp =< 16) and (sonde ~= 'Temp_SDB')) then -- autre que la salle de bain
commandArray['SendEmail']='Periode de chauffage#Alerte chauffage la sonde '..sonde..' indique une temperature basse#pubstef@francepolska.eu'
elseif ((temp =< 17) and (sonde == 'Temp_SDB')) then -- pour la salle de bain
commandArray['SendEmail']='Periode de chauffage dans SDB#Alerte chauffage la sonde '..sonde..' indique une temperature trop basse pour la SDB#pubstef@francepolska.eu'
end
end
-- execution de l'ordre selon resultat
if resultat == 'On' then
commandArray[radiateur]='On'
elseif resultat == 'Off' then
commandArray[radiateur]='Off'
elseif resultat == 'rien' then
if(debug)then
print("Aucune manipulation necessaire sur radiateur "..radiateur)
end
end
return resultat -- je renvoie le resultat
end