[LUA] Regulation chauffage PID

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.
Guitoo
Messages : 4
Inscription : 20 févr. 2015, 08:46

Re: Regul chauffage PID

Message par Guitoo »

BenjaminV a écrit : -le fonctionnement de ta chaudière en tout ou rien suppose que tu ne possèdes pas de brûleur modulant ?
Alors bonne question. Sur la chaudière il existe bien un potar de température d'eau et je pense que le bruleur module en fonction de la température d'eau de sortie. On peut utiliser la chaudière comme ça à condition d'avoir des vannes thermosatique aux radiateurs. > La chaudière maintien une température d'eau constante, les radiateurs puisent les calories dans le réseau en autonomie.

Dans mon cas, la chaudière maintien la température d'eau dans le circuit que lorsque le relais du Pi est fermé. Ce qui permet des économies tant au niveau de la circulation que des calories inutiles (par exemple quand je suis pas à la maison)
BenjaminV a écrit : -pourquoi ne pas laisser la chaudière réaliser sa propre régulation au niveau de la température de ton collecteur ? As-tu eu de meilleurs résultats avec ta régul ? Selon moi la vraie plus value d'un PID se situe au niveau de chaque départs de ton collecteur pour avoir une régulation pièce par pièce.
Pasque tu ne régule pas la température de la maison. Tu régule l'eau certe, mais tu ne sais pas à quelle température tu est. Mais bon c'est une discution de chauffagiste, chaque cas est différent fonction de l'installation, de la barraque, de la position géographique...

Moi j'ai une vieille maison 3 niveaux, plutot compacte, 600mm de murs de pièrre. Chaudière gaz + maxi radiateurs en fonte et quasiment pas de vanne thermo. Climat rigoureux avec des hivers bien froid pendant au moins 3 mois.
Grosse inertie >> Kd
Au début je l'avais pas mis, or j'avais un probleme de dépassement du point de consigne dans les deux sens. A la chauffe et à l'arrivée sur la température éco. Le temps de réponse du systeme est de 15minutes environ... c'est sur que dans une isba cest plus rapide!

Le systeme à franchement bien marché depuis 3 mois, pas de plantage, pas de gag. J'ai repérer tout un tas d'améliorations à faire mais le temps me manquant ça sera pour plus tard. D'autant plus qu'on a plus tellement besoin de chauffage en ce moment :D

A+ les domogeek
heartblood
Messages : 189
Inscription : 13 août 2015, 09:50

Re: Regul chauffage PID

Message par heartblood »

Merci pour ce script, je n'ai pas pu le tester vu que la saison ne s'y prete pas...

Malgré tout, j'ai un problème avec ceci (voire tout simplement avec VarCycle dans le script script_time_cmdchauff)

commandArray['Variable:'..VarCycle]= tostring('0')

Cela me retourne "attempt to concatenate global 'VarCycle' (a nil value)"

Est ce normal ? Est ce par ce que le script n'a pas encore tourné une seule fois, donc il n'a pas eu l'occasion de transformer VarCycle en autre chose que nill ?

Merci d'avance!
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Regul chauffage PID

Message par vil1driver »

La commande est explicite, elle renseigne une variable.. L'as tu créé ?

Je ne suis pas sur mon pc donc pas simple de fouiller le code mais il te faudra trouver où est défini le nom de la variable utilisateur que doit prendre la variable locale.

Perso je laisse au script le soin de créer les variables utiles mais tout le monde ne le fait pas, et ici ça ne semble pas être le cas...
Dernière modification par vil1driver le 14 sept. 2015, 20:30, modifié 1 fois.
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
heartblood
Messages : 189
Inscription : 13 août 2015, 09:50

Re: Regul chauffage PID

Message par heartblood »

C'est bien ce que je pensais, mais dans le script proposé à aucun moment elle n'est appelé ?
Je l'ai créé au cas où mais ça ne fait aucune différence, je remets le script d'origine (créé par Guitoo ) :

Code : Tout sélectionner


-- script_time_cmdchauffv2.lua ---------------------------------------
-- G PETREMENT -------------------------------------------------------
----------------------------------------------------------------------
-- Permet de commander relais de pilotage de chaudiere à gaz ---------
-- Le cycle fait 900s / 15min  ---------------------------------------
-- La commande est un nombre de 0 à 100 ------------------------------
-- Le cycle minimum de la chaudière est de 3min pour réduire l'usure -
----------------------------------------------------------------------

local InterOnOff = 'Chauffage On/Off'     --Interrupteur général de mise en route du chauffage
local VarCmdChauff = 'CmdChauff'          --Variable de commande de chauffage définie par script_device_thermostat
local CycleMini = 180                     --Durée de chauffe minimum en secondes (fonction de la chaudière)
local InterRelais = 'Piface RelayChaud'   --Sortie vers relais chaudière
local domoticz_url = '192.168.0.4:8080'   --Adresse IP:port de Domoticz

-- Fonction retourant la differrence de temps en secondes
function timedifference(s)
   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

commandArray = {}
--  Recuperation des variables
local CmdChauff = uservariables[VarCmdChauff]
local OnOff = otherdevices[InterOnOff]

--  Recuperation des minutes
time=os.time()
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))

-- Execution de cette partie du script toutes les 15 minutes
-- Contacte la chaudière et modifie la variable domoticz Cycle
if( (minutes==15) or (minutes==0) or (minutes==30) or (minutes==45) ) then
   print('-- Lancement du script à '..hours..'h'..minutes)
   print('-- OnOff ='..OnOff..' / CmdChauff ='..CmdChauff)
   
   if  OnOff == 'On' then  --Si l'inter général est ON
      local Cycle = CmdChauff * 9  --Calcul du temps de cycle en seconde
        
      if Cycle < CycleMini then --Si le cycle est trop court on coupe
         commandArray[InterRelais]='Off'
         commandArray['Variable:'..VarCycle]= tostring('0')
      print('Cycle :'..Cycle..'s >> Chaudière Off')
      
    elseif Cycle > 870 then --Si le cycle est trop long (> 14min30) on allume sans coupure
      commandArray[InterRelais]='On'
         commandArray['Variable:'..VarCycle]= tostring(Cycle)
      print('Cycle :'..Cycle..'s >> Chaudière On')
    
    else --Enfin on lance pour X seconde
         print('Cycle lancé pour : '..Cycle..'secondes')
         commandArray[1]={[InterRelais]='On'}
      commandArray[2]={[InterRelais]='Off AFTER '..tostring(Cycle)}
      end
   else
      commandArray[InterRelais]='Off'
      commandArray['Variable:'..VarCycle]= tostring('0')
      print('Chaudière Off')    
   end
end

return commandArray

vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Regul chauffage PID

Message par vil1driver »

Varcycle n'est pas le nom de la variable utilisateur mais le nom d'une variable locale dans le script..

Si elle n'est pas définie, tu vas devoir le faire en début de script

local VarCycle = 'nom de ta variable'
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
heartblood
Messages : 189
Inscription : 13 août 2015, 09:50

Re: Regul chauffage PID

Message par heartblood »

Merci bien, c'est ce que j'avais fait,
Sauf erreur qui expliquerait tout ma ligne est la suivante : local VarCycle = uservariables[VarCycle]

EDIT : C'était bien une erreur de ma part, il fallait faire comme tu as dit. Je me suis entete avec cette commande ci-dessus, et, je n'ai pas bien regardé comment je devais ecrire ma ligne. (A ce moment là : "commandArray['Variable:'..VarCycle]= tostring('0')" VarCycle est le nom de la variable et non ce que la variable VarCycle contient... :roll: )
Avec local VarCycle = "VarCyle", ça fonctionne impec.

Merci beaucoup!

EDIT 2 : En regardant de long en large ce script, je ne vois pas trop l'interet de cette variable :oops:
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Regul chauffage PID

Message par vil1driver »

heartblood a écrit :Merci bien, c'est ce que j'avais fait,
(...)
EDIT 2 : En regardant de long en large ce script, je ne vois pas trop l’intérêt de cette variable :oops:
j'ai regardé le code de plus près et cette variable est renseignée 3 fois mais n'est jamais réutilisée..

je pense que tu peux simplement supprimer les 3 lignes (51, 56 et 66), probablement un vestige des essais de Guitoo.
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
heartblood
Messages : 189
Inscription : 13 août 2015, 09:50

Re: Regul chauffage PID

Message par heartblood »

vil1driver a écrit :
j'ai regardé le code de plus près et cette variable est renseignée 3 fois mais n'est jamais réutilisée..

je pense que tu peux simplement supprimer les 3 lignes (51, 56 et 66), probablement un vestige des essais de Guitoo.
C'est ce que j'ai pensé aussi. Je l'ai d'ailleurs supprimé.
Merci
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Re: Regul chauffage PID

Message par dokho »

Bonsoir,

J'ai bien envie de tester ces scripts pour ma chaudière à gaz, par contre je ne comprends pas comment régler Kp, Ki et Kd ?

Concernant les sécurités je pensais laisser le thermostat actuel (en parallèle) pour gérer une éventuelle température trop basse et utiliser la fonction "auto off after x seconds" du module contact sec qubino afin d'éviter un fonctionnement non-stop en cas de plantage durant un cycle de chauffe.

Cela vous semble-t-il suffisant ?
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Regul chauffage PID

Message par vil1driver »

Le PID ce n'est vraiment pas simple, je te conseil de te documenter pour bien comprendre ce que c'est et l'influence de ces 3 paramètres pour parvenir à correctement les définir.. De très longues heures de lectures/configuration/essais en perspective.

Pour un résultat probablement décevant, ce fut mon cas..

C'est pour cela que j'ai laissé tomber le PID mais je ne possède pas de chaudière et donc les démarrages/arrêts répétés sont moin génants.

Bon courage ;)

Je pense que dans certains cas il ne faut pas hésiter à dépenser.
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
Répondre