[LUA] Script de chauffage avec détection PIR et retour de conso

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: script de chauffage avec détection PIR et retour de conso

Message par vil1driver »

la partie anticipation est le plus foireux du script :D

je ne sais pas trop comment expliquer plus que ce que j'ai déjà dis.. je compte c'est tout, plus le temps passe pendant la montée en température de la pièce et plus j'abaisse la consigne pour que ça stoppe la chauffe avant la consigne réelle (radiateur reste chaud une bonne demie heure) et fait l'inverse en phase de refroidissement pour commencer à chauffer avant d'avoir besoin (radiateur met environs 15 minutes à être chaud).

c'est très largement perfectible car j'ai voulu faire simple.. (même si ça ne l'est pas forcément),
mais il y a un gain certain, on est plus proche de la consigne , et on est bien plus réactif (par rapport à du PID) aux influence extérieures (four.. fenêtre ouverte.. etc).

le chauffage étant mon projet initial niveau domotique je suis sur ce script depuis un moment, et il ne cesse d'être peaufiné..
il va donc certainement s'améliorer encore.
je pense que je vais tenter de me faire une petite représentation graphique de la température de surface des mes radiateur fonction du temps..

mais peut être que je dois simplement me décider à changer de génération de radiateur...
http://www.radiateur-electrique.org/bain-huile.php
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Nissa
Messages : 96
Inscription : 21 déc. 2015, 23:38
Localisation : Bordeaux

Re: script de chauffage avec détection PIR et retour de conso

Message par Nissa »

Essayé et adopté !
Je l'ai simplifié n'ayant pas de capteur de mouvement. La mise on / off des radiateurs s'effectue selon la comparaison consigne/sonde et la valeur de 2 interrupteurs : Switch manuel On/Off et un calendrier.
Merci vil1driver, après la custom page, tu es mon meilleur inspirateur.
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é
lolo6112
Messages : 54
Inscription : 17 juil. 2016, 16:12

Re: script de chauffage avec détection PIR et retour de conso

Message par lolo6112 »

vil1driver a écrit :la partie anticipation est le plus foireux du script :D

je ne sais pas trop comment expliquer plus que ce que j'ai déjà dis.. je compte c'est tout, plus le temps passe pendant la montée en température de la pièce et plus j'abaisse la consigne pour que ça stoppe la chauffe avant la consigne réelle (radiateur reste chaud une bonne demie heure) et fait l'inverse en phase de refroidissement pour commencer à chauffer avant d'avoir besoin (radiateur met environs 15 minutes à être chaud).

c'est très largement perfectible car j'ai voulu faire simple.. (même si ça ne l'est pas forcément),
mais il y a un gain certain, on est plus proche de la consigne , et on est bien plus réactif (par rapport à du PID) aux influence extérieures (four.. fenêtre ouverte.. etc).

../...
mais peut être que je dois simplement me décider à changer de génération de radiateur...
http://www.radiateur-electrique.org/bain-huile.php
Bonjour,
Merci pour le boulot, t'es vraiment fort en script, chapeau. Moi je galère un peu encore en LUA, pourtant je programme en pas mal de langages.

Question : Ton script marcherait-il, ou quelle adaptation penserais-tu qu'il faille faire, pour du rayonnant élec. ?
Virer l'anticipation ? Moi je trouve ça bien d'anticiper, ça évite au moins de faire du flip/flop dans certains cas.

Euhhh oui faudrait p'tet songer à changer de radiateur ;) , moi c'était des grilles pain quand j'ai acheté, j'ai même pas essayé :D

Merci de ta réponse si tu en as une. Je ne pense pas qu'il y ait une réelle inertie sur des rayonnants. Quand ils viennent de chauffer ça tiens peut-être 5 minutes. En fait j'en sais rien, j'ai pas gardé la main sur un radi pour voir.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: script de chauffage avec détection PIR et retour de conso

Message par vil1driver »

Bah.. Si l'inertie ne t'intéresse pas désactive la..

Code : Tout sélectionner

local inertie = true                  -- radiateur à inertie true/false
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
lolo6112
Messages : 54
Inscription : 17 juil. 2016, 16:12

Re: script de chauffage avec détection PIR et retour de conso

Message par lolo6112 »

vil1driver a écrit :Bah.. Si l'inertie ne t'intéresse pas désactive la..

Code : Tout sélectionner

local inertie = true                  -- radiateur à inertie true/false
Bonjour,

Merci de ta réponse.
Oui désolé je n'avais pas encore complétement dépiauté le script, j'ai vu qu'il suffisait de mettre la valeur à false pour désactiver.
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: script de chauffage avec détection PIR et retour de conso

Message par rapinou »

lolo6112 a écrit :Je ne pense pas qu'il y ait une réelle inertie sur des rayonnants. Quand ils viennent de chauffer ça tiens peut-être 5 minutes. En fait j'en sais rien, j'ai pas gardé la main sur un radi pour voir.
Vois sur tes logs de capteur température.


J'en profite pour remercier vil1driver qui a inspiré je pense la quasi-totalité des membres du forum pour leurs scripts chauffage :D
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
lolo6112
Messages : 54
Inscription : 17 juil. 2016, 16:12

Re: script de chauffage avec détection PIR et retour de conso

Message par lolo6112 »

rapinou a écrit : Vois sur tes logs de capteur température.

J'en profite pour remercier vil1driver qui a inspiré je pense la quasi-totalité des membres du forum pour leurs scripts chauffage :D
Bonjour,
@rapinou,
Oui je sais mais pour le moment je teste et en plus j'ai des capteurs de température STHI100 HOME CONFORT. Hors ces foutus capteurs viennent juste d’être implémentés cet été sur RFLink. Résultat ils ne bronchent pas pendant des heures, des fois j'ai des updates qui datent de la veille !!
Pratique pour faire de la régul, bon je discute avec la stunteam pour voir si c'est les capteurs ou si c'est l'update qui ne se fait pas, mon contact à un doute là dessus. D'après le fabricant, qui ne fabrique pas grand chose à mon avis mais qui importe ça de chine, l'update se ferait toutes les 10 minutes.
Bref, la fête quoi, reste plus qu'à me bricoler des capteurs de secours avec du RF chinois en attendant...
Dommage demain c'est 'rouge' ça va être mano mano la régul.

@vil1driver,
Je suis en train de fouiller/tester ton script, et puis essayer de l'arranger à ma sauce et du coup bien le comprendre.
Encore bravo il est ballu ton script !
Et hormis mes déboires avec mes sondes, des résultats dans le log, en effet l'inertie rend la rampe plus douce qu'un PID, je la conserverai ;)
Question :
Je me disais que je mettrai bien 2 inters généraux pour toutes les zones, 1 premier pour la saison froide/chaude, 1 autre pour les vacances.
Le mieux est :
- Que je teste en premier mon inter général saison de chauffe, puis celui des vacances et que j'encapsule toute ta série de tests entre ces deux tests ;
- Ou est-ce que le bouton vacances doit plutôt renvoyer au dernier 'else' de la série de tests ;
- Et enfin que je mette un relais dédié pour au moins couper en direct les radiateurs. Par le fil pilote, avec un demi alternance, pas sur que cela inhibera vraiment les actions du script si je ne tiens pas compte de l'inter. Ton script enverrait alors un ordre 220V sur le relais Eco qui surpassera la demi alternance. Comme l'idée est plutôt aux économies je n'envisage pas de coller des modules radio ON/OFF sur toutes les alims de mes 11 radiateurs pour les couper électriquement.
En fait l'idée est de passer Off part le fil pilote tout les radiateurs hors saison de chauffe, et seulement Hors Gel tous les radiateurs pendant des vacances en saison de chauffe.
Je mettrai les relais sur une carte Arduino, pas de radio et alim secourue :) , sauf que pour le Off et le Hors gel direct il me faudrait 2 relais de plus que celui du mode 'Eco' par zone qu'avec ton script, d'où grosssssse économie :D
patoche
Messages : 192
Inscription : 25 oct. 2015, 15:51

Re: script de chauffage avec détection PIR et retour de conso

Message par patoche »

Bonjour et merci pour le partage de ce script.

Je le teste en remplacement de mon script blocky, pour la prise en compte d'hysteresis.
Dans les logs de l'inter virtuel chauffage je vois que les actions on et off sont envoyées en constance, n'est ce pas préjudiciable pour le système, ralentissement, place mémoire, cycle écriture...,?
Dans mon blocky j'envoie l'action que si l'inter n'est pas dans le bon état, avec malgré tout une redondance de 3-4 ordres.
RPI2 OSMC + domoticz + Rfx 433e + chacon dio, teleinfo 433 via arduino nano, sonde T° innovaley et TFA 303139, sonde T° piscine DIY 433 oregon, OWL 180, RPI zero W + camera
jackslayter
Messages : 1040
Inscription : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: script de chauffage avec détection PIR et retour de conso

Message par jackslayter »

l'hiver approchant enfin, j'ai remis en route les scripts de chauffage.
j'ai des problèmes alors que cela marchait bien en mars mais je suis dessus par contre dans les logs les syntaxes ne sont pas prisent en compte

Code : Tout sélectionner

 2018-10-25 13:00:26.691 Status: LUA: <font color='#0206a9'>PID zone: SALON</font>
2018-10-25 13:00:26.691 Status: LUA: <font color='#0206a9'>température: 20.9°C pour 19.5°C souhaité</font>
2018-10-25 13:00:26.691 Status: LUA: <font color='#0206a9'>Kp: 80</font>
2018-10-25 13:00:26.691 Status: LUA: <font color='#0206a9'>Ki: 35</font>
2018-10-25 13:00:26.691 Status: LUA: <font color='#0206a9'>Kd: 80</font>
2018-10-25 13:00:26.692 Status: LUA: <font color='#0206a9'>erreur: -1.4</font>
2018-10-25 13:00:26.692 Status: LUA: <font color='#0206a9'>&#8721; erreurs: 0</font>
2018-10-25 13:00:26.692 Status: LUA: <font color='#0206a9'>&#916; erreurs: -0.03</font>
2018-10-25 13:00:26.692 Status: LUA: <font color='#0206a9'>P: -112</font>
2018-10-25 13:00:26.692 Status: LUA: <font color='#0206a9'>I: 0</font>
2018-10-25 13:00:26.692 Status: LUA: <font color='#0206a9'>D: -2.4</font>
2018-10-25 13:00:26.692 Status: LUA: <font color='#0206a9'>cycle: 10min (sécu: 30s)</font>
2018-10-25 13:00:26.692 Status: LUA: <font color='#0206a9'>commande: 0% (00'00")</font>
2018-10-25 13:00:26.692 Status: LUA: <font color='#0206a9'></font> 
une idée ?
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
dekloo
Messages : 9
Inscription : 17 mars 2018, 21:24
Contact :

Re: script de chauffage avec détection PIR et retour de conso

Message par dekloo »

Hello à tous,
Voici mon script qui est une adapatation au script d'origine de Vil1driver (merci à toi)

J'utilise une double plage horaire pour la gestion heure plein/creuse.
Si c'est plein tarif je réduit d'un demi-degres la t° de consigne.

C'est tout frais, j'ai pas encore de recul sur les réglages. A suivre.

Si ca peut donner des idées :

Code : Tout sélectionner

----------------------------------------------
------ 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 :
domoticz_thermostat_heure_creuse_pleine.png
domoticz_thermostat_heure_creuse_pleine.png (11.27 Kio) Consulté 7721 fois
Voila,
A suivre...
Répondre