Page 12 sur 34
Re: chauffage PID
Publié : 12 mars 2018, 07:47
par vil1driver
toutes mes sondes virtuelles sont nommées de la sorte: nom de la vrai sonde + _pid
exemple:
sonde réelle : salon
sonde virtuelle : salon_pid
j'ai donc un script de
type device
Code : Tout sélectionner
-- envoie dans une sonde vituelle la temp réelle et la valeur de la commande pid en tant qu'humidité
-- chargement des modules
dofile('/home/vil1driver/domoticz/scripts/lua/modules.lua')
debug = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
commandArray = {}
local sondes = {}
sondes[1] = 'thomas'
sondes[2] = 'salle de bain'
sondes[3] = 'salon'
sondes[4] = 'parents'
--etc
for n,sonde in pairs(sondes) do
if devicechanged[sonde] then
commandArray['UpdateDevice'] = otherdevices_idx[sonde..'_pid']..'|0|'..getTemp(sonde)..';'..getHum(sonde..'_pid')..';0'
break
end
end
return commandArray
et 2 modifications dans modules.lua
vers la ligne 700
log('commande: '..commande..'% ('..string.sub(os.date("!%X",heatTime),4,8):gsub("%:", "\'")..'\")')
log('')
end
-- maj sonde virtuelle
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[pid['sonde']..'_pid']..'|0|'..temp..';'..commande..';0'}
vers la ligne 713
-- arrêt chauffage (renvoi commande systematique par sécurité)
commandArray[pid['radiateur']] = arret..' AFTER '..constrain(pid['secu']-lastSeen(pid['radiateur']),3,pid['secu'])
-- maj sonde virtuelle
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[pid['sonde']..'_pid']..'|0|'..temp..';0;0'}
ce qui donne ce genre de graph (consigne à 20°C)

Re: chauffage PID
Publié : 12 mars 2018, 20:32
par jackyhi
Merci pour ton aide précieuse vil1driver.
voici mon script je n'ai qu'une sonde pour l'instant.
Code : Tout sélectionner
-- script_device_CopySondeToVirtuelle_PID.lua
-- envoie dans une sonde vituelle la temp réelle et la valeur de la commande pid en tant qu'humidité
-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
debug = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
commandArray = {}
local sondes = {}
sondes[1] = 'TempSAM'
-- sondes[2] = 'salle de bain'
-- sondes[3] = 'salon'
-- sondes[4] = 'parents'
--etc
for n,sonde in pairs(sondes) do
if devicechanged[sonde] then
commandArray['UpdateDevice'] = otherdevices_idx[sonde..'_pid']..'|0|'..getTemp(sonde)..';'..getHum(sonde..'_pid')..';0'
break
end
end
return commandArray
Dans le module.lua voici les lignes ajoutées:
Code : Tout sélectionner
log('commande: '..commande..'% ('..string.sub(os.date("!%X",heatTime),4,8):gsub("%:", "\'")..'\")')
log('')
end
-- maj sonde virtuelle
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[pid['sonde']..'_pid']..'|0|'..temp..';'..commande..';0'}
end
end
-- toutes les 15 minutes, si on ne veut pas chauffer
if ( time.min%15 == 0 and otherdevices[pid['OnOff']] == 'Off' ) then
-- arrêt chauffage (renvoi commande systematique par sécurité)
commandArray[pid['radiateur']] = arret..' AFTER '..constrain(pid['secu']-lastSeen(pid['radiateur']),3,pid['secu'])
-- maj sonde virtuelle
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[pid['sonde']..'_pid']..'|0|'..temp..';0;0'}
end
end

- CaptureSonde_PID.jpg (23.59 Kio) Consulté 8165 fois
Encore merci.
Re: chauffage PID
Publié : 27 mars 2018, 10:08
par Hawk49
Bonjour Vl1Driver,
merci pour ton partage. Si je comprends bien ton script PID dans modules.lua, il part sur un principe d'une température de consigne constante. Du coup le calcul de l'intégrale n'est pas mis à 0 lorsque la consigne change (?).
Si c'est bien ça et si je comprends bien le fonctionnement, je pourrais créer un script lua qui se déclenche lorsque la consigne change et qui supprime les variables "'PID_temps_'..pid['zone']" et "'PID_integrale_'..pid['zone']".
Ou je raconte des co...ries ?!

Re: chauffage PID
Publié : 27 mars 2018, 11:23
par vil1driver
La consigne peut changer si, l'intégrale de toute façon sera rapidement adapté, il n'y a pas vraiment de gain à la passer à 0. Le chemin n'est pas forcément plus court jusqu'à la valeur optimale depuis zero ou depuis son ancienne valeur optimale (consigne précédente)
Re: chauffage PID
Publié : 28 mars 2018, 03:14
par Hawk49
Ok, merci beaucoup pour ta réponse.
Re: chauffage PID
Publié : 28 mars 2018, 08:46
par rimram31
Ca faisait quelques temps que je ne m'étais pas promené sur le forum ... excellent ton script vil1driver, un régulateur PID pour le chauffage, le graal de la commande de chauffage
L'hiver est plutôt derrière nous (encore que ...) mais ton script me fait gamberger. Ma plus grosse question en fait vient de ce que mon script actuel, hysteresis, renvoie la commande On ou Off toute les minutes quelque soit l'etat actuel ce qui est bien pratique en RF quand tu as quelques ordres qui se perdent dans la nature. Du coup, je cherche a voir si on pourrait adapter le script quitte a avoir des périodes multiples de la minute (et donc gérer les on/off sur les passages périodiques).
Autre question (là c'est l'ingénieur thermicien qui s'interroge, mon premier métier ...), logiquement tes variables d'asservissement et surtout Kp doit dépendre elle-même des conditions extérieures ... (plus il fait froid, plus il faut envoyer) et là glop, j'ai le cerveau qui part en vrille

As-tu observé ça dans ton application de ton algo ? Si oui, ça encourage pas obligatoirement a passer a un PID (vs hysteresis), je vois bien chez moi les grosses différences de montée en T selon la température extérieure et je me vois pas passer un hiver a optimiser le tout ...
Les derniers points ne sont que des petits détails, mon script actuel prend en param. une liste de sondes (logique moyenne et ignore sondes en erreur, fréquent chez moi ...) et une liste de switch pour la commande pour piloter n radiateurs pour une zone donnée.
Edit: La journée ayant porté conseil ... je me suis répondu entre temps aux 1ères et dernières questions. En utilisant une sonde et un switch virtuel pour ton script, ça peut le faire. En pre traitement, ca permet de gérer une liste de sondes, de switch physiques => virtuels avant appel, ça permet ensuite un post traitement ttes les minutes pour envoyer aux switchs RF un On/Off selon etat virtuel calculé par le pid (=> repeat).
Re: chauffage PID
Publié : 28 mars 2018, 14:45
par Hawk49
Ça rejoint la question que je me posais à propos du temps nécessaire pour obtenir une température donnée à une heure prévue d'avance (typiquement lors d'un changement de température souhaitée pour mon salon entre la nuit et le matin au ptit dej').
Je la posais ici:
https://easydomoticz.com/forum/viewtopi ... 846#p51846.
Car en effet, je me rappelle de la frustration après avoir digéré
https://controlguru.com/table-of-contents/ et comprendre qu'il était logique que les paramètres chèrement acquis n'étaient valables que dans des conditions inchangées (influences extérieures, valeur de la consigne).
Du coup j'en reviens à ma réflexion de départ de connaitre les caractéristiques d'une pièce (en terme d'isolation) et du chauffage pour anticiper l'influence des conditions météo. Belle théorie mais pas évident à mettre en pratique...
J'ai peut être trouvé une réponse avec le Smart Virtual Thermostat (
https://www.domoticz.com/wiki/Plugins/S ... ostat.html,
http://www.domoticz.com/forum/viewtopic ... a+planning) avec un algorithme d'apprentissage automatique qui me parait intéressant. En revanche, j'en suis qu'au début de ma lecture, c'est à dire que les paramètres pris en compte me semblent satisfaisants mais je n'ai pas encore étudié l'algorithme en lui même.
Certains connaissent ?
Ogulf, toujours partant pour faire un enfant illégitime ?? Que dirais tu d'un rejeton issu d'un ménage à trois entre le script de Vil1Driver, celui de Greg et le SVT de Logread ?

Re: chauffage PID
Publié : 28 mars 2018, 17:49
par rimram31
@Hawk49 pas d'idée pour de l'auto apprentissage.
J'avais cherché il y a quelques temps sur les sujets généraux de réglages de boucle PID mais rien d'évident a mettre en oeuvre . La seule chose qui m'était resté était de mixer algo simple + pid en reajustant le Kp sur la base de la réponse du début de cycle en hysteresis simple (d'autant + lente qu'il fait froid). Les autres coeffs me paraissent moins importants et, je pense, moins dépendants des conditions extérieures + du "système" (pièce, radiateurs ...).
Re: chauffage PID
Publié : 28 mars 2018, 17:53
par ogulf
Hawk49 a écrit :Ogulf, toujours partant pour faire un enfant illégitime ?? Que dirais tu d'un rejeton issu d'un ménage à trois entre le script de Vil1Driver, celui de Greg et le SVT de Logread ?

Je viens de parcourir la description du SVT : très intéressant, mais ressemble un peu à un algorithme PID en fait, car dépend de caractéristiques passées en paramètres ??
Cependant, ce plugin SVT mérite d'être testé, quitte à réutiliser les devices déjà existants (température de consigne, radiateurs, température de la pièce etc.) et supprimer ceux qui auront été créés par le plugin.
Question bête car je n'ai pas approfondi : peut-on gérer plusieurs zones ? Autant de SVT que de zones ? Est-ce seulement possible ?
Je vais attendre la fin de la saison de chauffe pour éventuellement tester cette approche

N'hésite pas à relancer le sujet
Mais j'ai pour l'instant un autre projet : installer une alarme (mon choix sera Visionic PowerMaxPro ou PowerMaster) et l'interfacer avec Domoticz (c'est décrit sur la PowerMaxPro sur le forum anglais - je n'ai pas le lien sous la main, mais rien n'existe il me semble pour la PowerMaster

)
Edit : voilà
> le lien < en question
Re: chauffage PID
Publié : 31 mars 2018, 11:25
par rimram31
ogulf a écrit :Je viens de parcourir la description du SVT : très intéressant, mais ressemble un peu à un algorithme PID en fait...
A voir le code, c'est effectivement un paramètre de commande "%" de temps de chauffe (sur une période de temps donnée) mais je ne vois qu'un coefficient proportionnel, Kp (ConstC dans le code) pas de correction dérivée et intégrale. Il y a par contre un coefficient correcteur en fonction de la T extérieure (?) et une partie autoapprentissage qui apparemment corrige Kp. Pas capté comment on passe en "auto apprentissage".
De mes lectures (et mes souvenirs d'automatismes ...), il existe des méthodes pour déterminer les paramètres d'une régulation PID (
http://php.iai.heig-vd.ch/~mee/seminair ... apidaj.pdf). Je me dis qu'en démarrant en hysteresis "simple" lors d'un changement de T du thermostat de commande (eco/confort) il y a peut-être moyen alors de calculer/adapter les paramètres du PID en fonction de la réponse observée. Mais je trouve rien sur la toile hors article universitaires ... (pas de code prêt a l'emploi,
https://playground.arduino.cc/Code/PIDAutotuneLibrary ???)