[LUA] YASDC (Yes Another Script De Chauffage) !
Re: YASDC (Yes Another Script De Chauffage) !
Bonjour valentin44,
Le capteur chauffage-conso est mis à jour en cumulant la variable puissance qui contient la valeur présente dans le tableau Watt.
Le tableau watt doit-être synchro avec le tableau piece ( Le radiateur de la piece['0'] a comme puissance watt['0']='1000', etc...)
Le capteur chauffage-conso est mis à jour en cumulant la variable puissance qui contient la valeur présente dans le tableau Watt.
Le tableau watt doit-être synchro avec le tableau piece ( Le radiateur de la piece['0'] a comme puissance watt['0']='1000', etc...)
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
-
valentin44
- Messages : 15
- Inscription : 23 févr. 2018, 21:30
Re: YASDC (Yes Another Script De Chauffage) !
quand tu parles de la variables "puissance", c'est celle qui se trouve dans le script, faut il en créer une dans domoticz dans "variables d'utilisateur" ?Nissa a écrit :Bonjour valentin44,
Le capteur chauffage-conso est mis à jour en cumulant la variable puissance qui contient la valeur présente dans le tableau Watt.
Le tableau watt doit-être synchro avec le tableau piece ( Le radiateur de la piece['0'] a comme puissance watt['0']='1000', etc...)
j'ai cela comme code j'ai bien un radiateur salon avec une puissance 1000 w
local piece={}-- Tableau Rajouter ici les radiateurs
piece['0']='salon'
local watt={}-- Tableau Rajouter ici la puissance en watts du radiateur (L'index doit correspondre a celui de la piece ci-dessus)
watt['0']='1000'
-- consignes de thermostat virtuels
local consigne_confort = 'Thermo_confort'
local consigne_eco = 'Thermo_eco'
local consigne_ecoplus = 'Thermo_ecoplus'
local conso = 'Chauffage_conso' -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique
Re: YASDC (Yes Another Script De Chauffage) !
Non, la variable puissance n'est utilisée que dans le script pour mettre à jour le capteur virtuel de consommation électrique ici =>
if (status == 1) then -- le radiateur est allume
cumul_power = tonumber(cumul_power + puissance)
energy = tonumber(energy + (puissance / 60)) -- puissance journaliere cumulee
else -- Le radiateur est eteint
energy = tonumber(energy)
end
A noter que la MAJ du capteur n'a lieu, c'est logique, que si le radiateur est allumé. Comme toi tu inverses ce fonctionnement, tu dois modifier cette condition.
A+
if (status == 1) then -- le radiateur est allume
cumul_power = tonumber(cumul_power + puissance)
energy = tonumber(energy + (puissance / 60)) -- puissance journaliere cumulee
else -- Le radiateur est eteint
energy = tonumber(energy)
end
A noter que la MAJ du capteur n'a lieu, c'est logique, que si le radiateur est allumé. Comme toi tu inverses ce fonctionnement, tu dois modifier cette condition.
A+
valentin44 a écrit :quand tu parles de la variables "puissance", c'est celle qui se trouve dans le script, faut il en créer une dans domoticz dans "variables d'utilisateur" ?Nissa a écrit :Bonjour valentin44,
Le capteur chauffage-conso est mis à jour en cumulant la variable puissance qui contient la valeur présente dans le tableau Watt.
Le tableau watt doit-être synchro avec le tableau piece ( Le radiateur de la piece['0'] a comme puissance watt['0']='1000', etc...)
j'ai cela comme code j'ai bien un radiateur salon avec une puissance 1000 w
local piece={}-- Tableau Rajouter ici les radiateurs
piece['0']='salon'
local watt={}-- Tableau Rajouter ici la puissance en watts du radiateur (L'index doit correspondre a celui de la piece ci-dessus)
watt['0']='1000'
-- consignes de thermostat virtuels
local consigne_confort = 'Thermo_confort'
local consigne_eco = 'Thermo_eco'
local consigne_ecoplus = 'Thermo_ecoplus'
local conso = 'Chauffage_conso' -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
-
valentin44
- Messages : 15
- Inscription : 23 févr. 2018, 21:30
Re: YASDC (Yes Another Script De Chauffage) !
Nissa a écrit :Non, la variable puissance n'est utilisée que dans le script pour mettre à jour le capteur virtuel de consommation électrique ici =>
if (status == 1) then -- le radiateur est allume
cumul_power = tonumber(cumul_power + puissance)
energy = tonumber(energy + (puissance / 60)) -- puissance journaliere cumulee
else -- Le radiateur est eteint
energy = tonumber(energy)
end
A noter que la MAJ du capteur n'a lieu, c'est logique, que si le radiateur est allumé. Comme toi tu inverses ce fonctionnement, tu dois modifier cette condition.
A+
je passe par un switch temporaire lui est allumé ce qui lance le Module OFF sur le radiateur donc la chauff
mais du coup le code est le même sauf que au lieu d'allumer directement le switch physique c'est un switch virtuel donc il ne devrait pas y avoir d'incidence
je remets le code
Code : Tout sélectionner
local piece={}-- Tableau Rajouter ici les radiateurs
piece['0']='salon'
local watt={}-- Tableau Rajouter ici la puissance en watts du radiateur (L'index doit correspondre a celui de la piece ci-dessus)
watt['0']='1000'
-- consignes de thermostat virtuels
local consigne_confort = 'Thermo_confort'
local consigne_eco = 'Thermo_eco'
local consigne_ecoplus = 'Thermo_ecoplus'
local conso = 'Chauffage_conso' -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique
local reset = false -- force la mise à zero de la consomation instantané (laisser à false pour un fonctionnement normal) true/false
local hysteresis = 0.4 -- Valeur seuil pour éviter que le relais ne cesse de commuter dans les 2 sens
local debug = false -- true or false pour voir tous les messages debug dans le log
local verbose = true -- Print ou non des logs
-- email
local mail = 'xxx' -- pour réception alerte sonde muette (chauffage coupé)
-- domoticz
local url = '192.168.1.39:8080' -- user:pass@ip:port de domoticz, pour la création des variables
----------------------------------------------
-- Fin de la partie configuration --
----------------------------------------------
time=os.date("*t")
function timedifference(d)
t1 = os.time()
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)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
cumul_power = 0 -- initialisation de la puissance instantanee des radiateurs en fonctionnement
for key, valeur in pairs(piece) do
-- Maj des variables en fonction de la valeur de la table
local le_radiateur_est_sur_ON = false -- Etat du radiateur false ou true
local sonde_KO = false -- Sonde de temperature HS
local sonde = string.format("%s%s", "Temperature_", valeur) -- Nom de la sonde de température
local presence = string.format("%s%s", "Chauffage_on_off_", valeur) -- Interrupteur manuel indiquant la presence
local calendrier = string.format("%s%s", "Chauffage_calendrier_", valeur)
local radiateur = string.format("%s%s", "Radiateur_inversseur_", valeur) -- Nom de l'interrupteur de chauffage
log = '***'
log2 = '***'
local heure = string.sub(os.date("%X"), 1, 5) -- Recuperation de l'heure du systeme
local lastSeen = string.sub(os.date("!%X", timedifference(sonde)), 1, 5) -- Heure de la derniere releve de la sonde de temperature
puissance=tonumber(watt[key]) -- Puissance en watt du radiateur
commandArray = {}
if (debug) then print ('>>>>>>>>>>>>>>>Initialisation '..puissance..' Radiateur>'..valeur) end
----------------------------------------------
------ Alerte mail ------
-- si la sonde est muette depuis 30' --
----------------------------------------------
if (lastSeen >= '00:30' and lastSeen < '00:32') then
commandArray['SendEmail']='Domoticz Alerte#Alerte sonde chambre '..piece..' muette#'..mail
if (debug) then print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Envoi mail probleme de sonde ') end
end
----------------------------------------------
------ Gestion consigne ------
----------------------------------------------
-- récupération de la valeur du thermostat
if (otherdevices[presence] == 'On') then -- si la presence est active (interrupteur manuel 'Chauffage_on_off_XXXX')
if (otherdevices[calendrier] == 'On') then -- ET calendrier ON (Chauffage_calendrier_XXXX)
consigne = tonumber(otherdevices_svalues[consigne_confort])
else
consigne = tonumber(otherdevices_svalues[consigne_eco])
end
else -- presence = OFF
consigne = tonumber(otherdevices_svalues[consigne_ecoplus])
end
if (debug) then print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Initialisation Consigne chambre '..valeur..' > '..consigne) end
-- on récupère la température fournie par la sonde
local temperature = math.floor(10*tonumber(otherdevices_temperature[sonde]))/10
if (debug) then print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Recup valeur sonde chambre '..valeur..' > '..temperature) end
----------------------------------------------
-- Inititialisation des Variables d etat --
----------------------------------------------
if (otherdevices[radiateur] == 'On') then le_radiateur_est_sur_ON = true end
if lastSeen > '00:10' then
local sonde_KO = true
log2 = '*** Sonde muette '
end
----------------------------------------------
------ Gestion du radiateur ------
--- selon temperature relevee et consigne --
----------------------------------------------
if (le_radiateur_est_sur_ON) and not (sonde_KO) then
log = '*** IF 1 > Le Radiateur est en marche'
status = 1
if temperature >= (consigne + hysteresis) then
commandArray[radiateur]='Off'
log = '*** IF 2 > Arret du Radiateur'
status = 0 -- Pour eviter le delai de la Maj du device (variable utilisee dans le if du calcul de conso)
end
else
log = '*** IF 3 > Le Radiateur est arrete'
status = 0
if temperature <= (consigne - hysteresis) and not (sonde_KO) then
commandArray[radiateur]='On'
log = '*** IF 4 > Allumage du Radiateur'
status = 1
end
end
-- calcul de la conso (npower = puissance actuelle / energy = puissance cumulee)
npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)") -- extraction des valeurs stockees dans le device conso
if (status == 1) then -- le radiateur est allume
cumul_power = tonumber(cumul_power + puissance)
energy = tonumber(energy + (puissance / 60)) -- puissance journaliere cumulee
else -- Le radiateur est eteint
energy = tonumber(energy)
end
power = tonumber(cumul_power) -- puissance instantanee
-- envoi de la conso dans le capteur virtuel d'énergie
if (reset) then
power = 0
energy = 0
end
commandArray[3]={['UpdateDevice'] = conso_id .. '|0|' .. power .. ';' .. energy}
-- logs
if (verbose) then
print ' '
print('********************* Chauffage '..valeur..' *********************')
print('*** Il fait '..temperature..'°C pour une consigne de '..consigne..'°C souhaités')
print(log,log2)
print('********************************************************************')
end
end -- fin de tableau
return commandArray
Dernière modification par vil1driver le 11 févr. 2019, 18:02, modifié 1 fois.
Raison : Suppression email dans le script
Raison : Suppression email dans le script
Re: YASDC (Yes Another Script De Chauffage) !
Le compteur de conso est,mis à jour lorsque la variable statut est à 1. Elle est mise à 1 lorsque radiateur=on. Dans ton cas quand radiateur est à on, il est, en fait, eteint de ce que j'ai'compris. Donc tu dois inverser le if statut.
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
-
valentin44
- Messages : 15
- Inscription : 23 févr. 2018, 21:30
Re: YASDC (Yes Another Script De Chauffage) !
et le IDX c'est lequel qu'il faut mettre
local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique
IDX du radiateur reel ?
local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique
IDX du radiateur reel ?
Re: YASDC (Yes Another Script De Chauffage) !
C'est l'id du capteur virtuel pas du radiateur
A+
A+
valentin44 a écrit :et le IDX c'est lequel qu'il faut mettre
local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique
IDX du radiateur reel ?
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
-
valentin44
- Messages : 15
- Inscription : 23 févr. 2018, 21:30
Re: YASDC (Yes Another Script De Chauffage) !
Bonjour
Apres plusieurs journées d'utilisation de ce script j'ai aujourd'ui mon salon et ma salle de bain ( j'ai un petit logement)
Le script fonctionne super bien, encore merci pour le taff
Ce que je constate (exemple de ce matin)
mon programme ce matin s'active à 6h il fait 18 degré pour une température de confort a 21 donc mon radiateur s'allume pour chauffer ma pièce
l'interrupteur passe bien en ON (je le vois dans les log et visuellement sur l'interface) mais mon module 433 Mhz ne s'active pas, je le vois ce matin a 10h45 j'appuie manuellement sur on et la il s'active bien
je ne le constate pas tous les jours mais je dirai bien 1 à 2 fois par semaine, l'antenne est a coté du module donc pas de raison que cela ne passe pas.
mes questions:
ce phénomène est il connu ?
comment forcer le On ?
est il possible dans le code de rajouter un script de sécurité du genre
si la temperature n'augmente pas en moins de 15-30 min alors forcer un on ?
ou alors faire un reboot du pi ou de domoticz qui peut influencer le système ?
merci de vos retour
cordialement
Apres plusieurs journées d'utilisation de ce script j'ai aujourd'ui mon salon et ma salle de bain ( j'ai un petit logement)
Le script fonctionne super bien, encore merci pour le taff
Ce que je constate (exemple de ce matin)
mon programme ce matin s'active à 6h il fait 18 degré pour une température de confort a 21 donc mon radiateur s'allume pour chauffer ma pièce
l'interrupteur passe bien en ON (je le vois dans les log et visuellement sur l'interface) mais mon module 433 Mhz ne s'active pas, je le vois ce matin a 10h45 j'appuie manuellement sur on et la il s'active bien
je ne le constate pas tous les jours mais je dirai bien 1 à 2 fois par semaine, l'antenne est a coté du module donc pas de raison que cela ne passe pas.
mes questions:
ce phénomène est il connu ?
comment forcer le On ?
est il possible dans le code de rajouter un script de sécurité du genre
si la temperature n'augmente pas en moins de 15-30 min alors forcer un on ?
ou alors faire un reboot du pi ou de domoticz qui peut influencer le système ?
merci de vos retour
cordialement
Re: YASDC (Yes Another Script De Chauffage) !
Bonsoir Valentin44,
C'est ton module qui ne capte pas toujours. Pour cela j'utilise un script que j'ai pris sur ce forum. Je crois que c'est de l'irremplaçable VIL1DRIVER, mais je ne trouve plus son sujet d'origine. Voici donc le script que j'utilise chez moi.
Tu mets dans la table 'check' les modules qui peuvent poser problème. Toutes les 15 mn, ce script va chercher la valeur de chaque module dans domoticz et renvoie cette valeur au module.
C'est trés efficace.
A+
C'est ton module qui ne capte pas toujours. Pour cela j'utilise un script que j'ai pris sur ce forum. Je crois que c'est de l'irremplaçable VIL1DRIVER, mais je ne trouve plus son sujet d'origine. Voici donc le script que j'utilise chez moi.
Tu mets dans la table 'check' les modules qui peuvent poser problème. Toutes les 15 mn, ce script va chercher la valeur de chaque module dans domoticz et renvoie cette valeur au module.
C'est trés efficace.
A+
Code : Tout sélectionner
--Permet toutes les 15 minutes de renvoyer la commande actuelle sensée etre appliquée aux modules sensibles
local debug = false
commandArray = {}
--recupere les minutes
time=os.time()
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))
if (debug) then print('************** Renforcement signal > Lancement du check a '..hours..'h'..minutes) end
-------Toutes les 15 minutes
if( (minutes==15) or (minutes==0) or (minutes==30) or (minutes==45) ) then
local check={}
check['0']='Chauffe-eau'
check['1']='Eclairage_cabane'
check['2']='Spot snake'
check['3']='Prise auchan'
check['4']='Eclairage portant couloir'
--Parcours le Tableau
for key, valeur in pairs(check) do
print ('************** Renforcement signal > Check : '..valeur.. ' -> ' ..otherdevices[valeur])
commandArray[valeur]=otherdevices[valeur]
end
end
return commandArray
--------FIN Renforcement des envois de signal-------------------------------------
valentin44 a écrit :Bonjour
Apres plusieurs journées d'utilisation de ce script j'ai aujourd'ui mon salon et ma salle de bain ( j'ai un petit logement)![]()
Le script fonctionne super bien, encore merci pour le taff![]()
Ce que je constate (exemple de ce matin)
mon programme ce matin s'active à 6h il fait 18 degré pour une température de confort a 21 donc mon radiateur s'allume pour chauffer ma pièce
l'interrupteur passe bien en ON (je le vois dans les log et visuellement sur l'interface) mais mon module 433 Mhz ne s'active pas, je le vois ce matin a 10h45 j'appuie manuellement sur on et la il s'active bien
je ne le constate pas tous les jours mais je dirai bien 1 à 2 fois par semaine, l'antenne est a coté du module donc pas de raison que cela ne passe pas.
mes questions:
ce phénomène est il connu ?
comment forcer le On ?
est il possible dans le code de rajouter un script de sécurité du genre
si la temperature n'augmente pas en moins de 15-30 min alors forcer un on ?
ou alors faire un reboot du pi ou de domoticz qui peut influencer le système ?
merci de vos retour
cordialement
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
-
valentin44
- Messages : 15
- Inscription : 23 févr. 2018, 21:30
Re: YASDC (Yes Another Script De Chauffage) !
Super,
je vais tester cela
c'est dommage qu'il n'y a pas un post qui résume tous les scripts "plug and play" comme le tien et bien d 'autres
cela valoriserai encore plus le travail réalisé
je vais tester cela
c'est dommage qu'il n'y a pas un post qui résume tous les scripts "plug and play" comme le tien et bien d 'autres
cela valoriserai encore plus le travail réalisé