Script de chauffage, pompe a chaleur, ...

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Script de chauffage, pompe a chaleur, ...

Message par Smat »

Bonjour à tous,

Je reviens sur le forum pour avoir vos avis sur un script assez complexe :

Je m'explique : je fonctionne sans soucis depuis plus d'un an avec ce script

viewtopic.php?f=10&t=233

Code : Tout sélectionner

--------------------------------
------ Variables à éditer ------
--------------------------------
local consigneconfort = tonumber(otherdevices_svalues['Temperature Consigne Confort'])
local consigneeco = tonumber(otherdevices_svalues['Temperature Consigne Eco'])
local hysteresis = 0.5 
--------------------------------
-- Fin des variables à éditer --
--------------------------------

commandArray = {}
if (devicechanged['Sonde Temp Int']) then
local temperature = tonumber(string.sub(otherdevices_svalues['Sonde Temp Int'],1,4))
    if (otherdevices['Chauffage Mode Confort']=='On') then
    	if (temperature < (consigneconfort - hysteresis) ) then
            print('Allumage du chauffage Mode Confort')
            --commandArray['Chaudiere']='On'
            commandArray['Pompe a Chaleur']='On'
        elseif (temperature > consigneconfort) then
	        print('Extinction du chauffage Mode Confort')
            --commandArray['Chaudiere']='Off'
            commandArray['Pompe a Chaleur']='Off'
	   	end
	elseif (otherdevices['Chauffage Mode Confort']=='Off')then 
	    if (temperature < consigneeco) then
            print('Allumage du chauffage Mode Eco')
            --commandArray['Chaudiere']='On'
            commandArray['Pompe a Chaleur']='On'
	    elseif (temperature > (consigneeco + hysteresis) ) then
	        print('Extinction du chauffage Mode Eco')
            --commandArray['Chaudiere']='Off'
            commandArray['Pompe a Chaleur']='Off'
        end
    end
end
return commandArray

Le problème étant que je dois switcher manuellement entre la Pompe a Chaleur et ma chaudière gaz.
J'ai dans l'idée d'acheter des vannes motorisées pour automatiser tout ça.


J'ai changer le script en ça :

Code : Tout sélectionner

--------------------------------
------ Variables à éditer ------
--------------------------------
local consigneconfort = tonumber(otherdevices_svalues['Temperature Consigne Confort'])
local consigneeco = tonumber(otherdevices_svalues['Temperature Consigne Eco'])
local consigneswitch = tonumber(otherdevices_svalues['Température Consigne Switch'])
local hysteresis = 0.5 
--------------------------------
-- Fin des variables à éditer --
--------------------------------

commandArray = {}
if (devicechanged['Sonde Temp Ext']) then
	local temperature_ext = tonumber(string.sub(otherdevices_svalues['Sonde Temp Ext'],1,4))
		if (otherdevices['Chauffage Mode Confort']=='On') then
			if (temperature_ext > (consigneswitch - hysteresis) ) then
				commandArray['Vanne PaC']='On'
				commandArray['Vanne Chaudiere']='Off'
					if (devicechanged['Sonde Temp Int']) then
						local temperature_int = tonumber(string.sub(otherdevices_svalues['Sonde Temp Int'],1,4))
							if (temperature_int < (consigneconfort - hysteresis) ) then
           						print('Allumage du chauffage Mode Confort')
            		     		commandArray['Pompe a Chaleur']='On'
       						elseif (temperature_int > consigneconfort) then
	        					print('Extinction du chauffage Mode Confort')
	        					commandArray['Pompe a Chaleur']='Off'
	   						end
			if (temperature_ext < consigneswitch) then
				commandArray['Vanne Chaudiere']='On'
				commandArray['Vanne PaC']='Off'
					if (devicechanged['Sonde Temp Int']) then
						local temperature_int = tonumber(string.sub(otherdevices_svalues['Sonde Temp Int'],1,4))
							if (temperature_int < (consigneconfort - hysteresis) ) then
           						print('Allumage du chauffage Mode Confort')
            		     		commandArray['Chaudiere']='On'
       						elseif (temperature_int > consigneconfort) then
	        					print('Extinction du chauffage Mode Confort')
	        					commandArray['Chaudiere']='Off'
	   						end
		elseif (otherdevices['Chauffage Mode Confort']=='Off')then 
	    	if (temperature_ext > (consigneswitch - hysteresis) ) then
				commandArray['Vanne PaC']='On'
				commandArray['Vanne Chaudiere']='Off'
					if (devicechanged['Sonde Temp Int']) then
						if (temperature_int < consigneeco ) then
           					print('Allumage du chauffage Mode Eco')
            		     	commandArray['Pompe a Chaleur']='On'
       					elseif (temperature_int > (consigneeco + hysteresis)) then
	        				print('Extinction du chauffage Mode Eco')
	       					commandArray['Pompe a Chaleur']='Off'
	   					end
									if (temperature_ext < consigneswitch) then
										commandArray['Vanne Chaudiere']='On'
										commandArray['Vanne PaC']='Off'
											if (devicechanged['Sonde Temp Int']) then
												if (temperature_int < consigneeco ) then
           											print('Allumage du chauffage Mode Eco')
            		     							commandArray['Chaudiere']='On'
       											elseif (temperature_int > consigneeco) then
	   				     							print('Extinction du chauffage Mode Eco')
	        										commandArray['Chaudiere']='Off'
	   											end
	   										end
	   									end
	   								end
	   							end
	   						end
	   					end
	   				end
	   			end
	   		end
	   	end

return commandArray
Est-ce que cela vous semble bon? J'aimerai avoir vos avis constructifs sur ce sujet.

Merci d'avance
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Re: Script de chauffage, pompe a chaleur, ...

Message par Smat »

Je vous donne plus de précision sur mon projet :

J'ai une PaC Daikin plus une chaudière Gaz en relève. J'ai deux sondes de température (une intérieur, et une extérieur). J'envisage d'acheter deux vannes motorisées (http://shop.wiltec.info/product_info.ph ... dcvetcged6)

L'idée est quand la température extérieure est inférieur a -5° Je ferme la vanne de la PaC, je l'arrete, j'ouvre celle de la chaudière et je mets cette dernière en fonction.

Ensuite j'ai deux modes un confort (20°) et un eco (16,5°).

J'espère être clair.

Merci d'avance pour vos réponses.
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Re: Script de chauffage, pompe a chaleur, ...

Message par Smat »

Re,

J'ai essayé de clarifier le code, mais ca ne fonctionne pas, pourquoi??

Code : Tout sélectionner

--------------------------------
------ Variables à éditer ------
--------------------------------
local temperature_int = tonumber(string.sub(otherdevices_svalues['Sonde Temp Int'],1,4))
local temperature_ext = tonumber(string.sub(otherdevices_svalues['Sonde Temp Ext'],1,4))
local temperature_switch = tonumber(string.sub(otherdevices_svalues['Temperature Consigne Switch'],1,4))
local consigne_confort = tonumber(otherdevices_svalues['Temperature Consigne Confort'])
local consigne_eco = tonumber(otherdevices_svalues['Temperature Consigne Eco'])
local hysteresis = 0.5 
--------------------------------
-- Fin des variables à éditer --
--------------------------------

commandArray = {}
if (devicechanged['Sonde Temp Int']) or (devicechanged['Sonde Temp Ext']) then

if (otherdevices['Chauffage Mode Confort']=='On') then
	if (temperature_ext >= temperature_switch) and (temperature_int > (consigne_confort + hysteresis)) then
		commandArray['Vanne PaC']='On'
		commandArray['Pompe a Chaleur']='Off'
		commandArray['Vanne Chaudiere']='Off'
		commandArray['Chaudiere']='Off'
	elseif
		if (temperature_ext >= temperature_switch) and (temperature_int <= consigne_confort) then
			commandArray['Vanne PaC']='On'
			commandArray['Pompe a Chaleur']='On'
			commandArray['Vanne Chaudiere']='Off'
			commandArray['Chaudiere']='Off'
		elseif
			if (temperature_ext < temperature_switch) and (temperature_int > (consigne_confort + hysteresis)) then
				commandArray['Vanne PaC']='Off'
				commandArray['Pompe a Chaleur']='Off'
				commandArray['Vanne Chaudiere']='On'
				commandArray['Chaudiere']='Off'
			elseif
				if (temperature_ext < temperature_switch) and (temperature_int <= consigne_confort) then
					commandArray['Vanne PaC']='Off'
					commandArray['Pompe a Chaleur']='Off'
					commandArray['Vanne Chaudiere']='On'
					commandArray['Chaudiere']='On'
				end
			end
		end
	end
elseif

if (otherdevices['Chauffage Mode Confort']=='Off') then
		if (temperature_ext >= temperature_switch) and (temperature_int > (consigne_confort + hysteresis)) then
			commandArray['Vanne PaC']='On'
			commandArray['Pompe a Chaleur']='Off'
			commandArray['Vanne Chaudiere']='Off'
			commandArray['Chaudiere']='Off'
		elseif
			if (temperature_ext >= temperature_switch) and (temperature_int <= consigne_confort) then
				commandArray['Vanne PaC']='On'
				commandArray['Pompe a Chaleur']='On'
				commandArray['Vanne Chaudiere']='Off'
				commandArray['Chaudiere']='Off'
			elseif
				if (temperature_ext < temperature_switch) and (temperature_int > (consigne_confort + hysteresis)) then
					commandArray['Vanne PaC']='Off'
					commandArray['Pompe a Chaleur']='Off'
					commandArray['Vanne Chaudiere']='On'
					commandArray['Chaudiere']='Off'
				elseif
					if (temperature_ext < temperature_switch) and (temperature_int <= consigne_confort) then
						commandArray['Vanne PaC']='Off'
						commandArray['Pompe a Chaleur']='Off'
						commandArray['Vanne Chaudiere']='On'
						commandArray['Chaudiere']='On'
					end
				end
			end
		end
	end
end
end    
return commandArray
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Script de chauffage, pompe a chaleur, ...

Message par vil1driver »

Salut,

Ne pas mettre de if après elseif..

Et méfie toi de cette commande, la première occurrence valide empêchera toutes les suivantes (jusqu'au end) même si elles sont également valides

Et en lisant en diagonale.. T'as probablement trop de end :-)

Quelques lectures de docs s'imposent à mon avis,
penses à regarder les logs également..
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
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Re: Script de chauffage, pompe a chaleur, ...

Message par Smat »

Merci vil1driver,

Je savais que tu allais me faire un retour. Alors pour le if derrière le elseif, je m'en suis rendu compte hier quand j'ai commencé les tests. Une fois enlevé, j'ai mis des print dans le code a chaque action, et on dirait qu'il ne va pas plus loin qu'ici :

Code : Tout sélectionner

if (devicechanged['Sonde Temp Int']) or (devicechanged['Sonde Temp Ext']) then

if (otherdevices['Chauffage Mode Confort']=='On') then
   if (temperature_ext >= temperature_switch) and (temperature_int > (consigne_confort + hysteresis)) then
      commandArray['Vanne PaC']='On'
      commandArray['Pompe a Chaleur']='Off'
      commandArray['Vanne Chaudiere']='Off'
      commandArray['Chaudiere']='Off'
Et en plus, il ne me fait pas les commandArray. Aurais-tu une idée??
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Script de chauffage, pompe a chaleur, ...

Message par vil1driver »

que ton chauffage soit sur On ou Off, tu fais les mêmes actions, je pense que c'est parce que tu es en phases de test...

je ferrais comme ceci

Code : Tout sélectionner

--------------------------------
------ Variables à éditer ------
--------------------------------
local temperature_int = tonumber(string.sub(otherdevices_svalues['Sonde Temp Int'],1,4))
local temperature_ext = tonumber(string.sub(otherdevices_svalues['Sonde Temp Ext'],1,4))
local temperature_switch = tonumber(string.sub(otherdevices_svalues['Temperature Consigne Switch'],1,4))
local consigne_confort = tonumber(otherdevices_svalues['Temperature Consigne Confort'])
local consigne_eco = tonumber(otherdevices_svalues['Temperature Consigne Eco'])
local hysteresis = 0.5
--------------------------------
-- Fin des variables à éditer --
--------------------------------

commandArray = {}
if (devicechanged['Sonde Temp Int']) or (devicechanged['Sonde Temp Ext']) then

if (otherdevices['Chauffage Mode Confort']=='On') then
	if (temperature_int > (consigne_confort + hysteresis)) then
		if (temperature_ext >= temperature_switch) then 
			commandArray[1]={['Vanne PaC']='On'}
			commandArray[2]={['Pompe a Chaleur']='Off'}
			commandArray[3]={['Vanne Chaudiere']='Off'}
			commandArray[4]={['Chaudiere']='Off'}
		else
			commandArray[1]={['Vanne PaC']='Off'}
            commandArray[2]={['Pompe a Chaleur']='Off'}
            commandArray[3]={['Vanne Chaudiere']='On'}
            commandArray[4]={['Chaudiere']='Off'}
		end
	elseif (temperature_int <= consigne_confort) then
		if (temperature_ext >= temperature_switch) then
			commandArray[1]={['Vanne PaC']='On'}
			commandArray[2]={['Pompe a Chaleur']='On'}
			commandArray[3]={['Vanne Chaudiere']='Off'}
			commandArray[4]={['Chaudiere']='Off'}
		else
			commandArray[1]={['Vanne PaC']='Off'}
            commandArray[2]={['Pompe a Chaleur']='Off'}
            commandArray[3]={['Vanne Chaudiere']='On'}
            commandArray[4]={['Chaudiere']='On'}
        end
	end	
else
	if (temperature_int > (consigne_confort + hysteresis)) then
		if (temperature_ext >= temperature_switch) then
			commandArray[1]={['Vanne PaC']='On'}
			commandArray[2]={['Pompe a Chaleur']='Off'}
			commandArray[3]={['Vanne Chaudiere']='Off'}
			commandArray[4]={['Chaudiere']='Off'}
		else
			commandArray[1]={['Vanne PaC']='Off'}
            commandArray[2]={['Pompe a Chaleur']='Off'}
            commandArray[3]={['Vanne Chaudiere']='On'}
            commandArray[4]={['Chaudiere']='Off'}
		end
	elseif (temperature_int <= consigne_confort) then
		if (temperature_ext >= temperature_switch) then
			commandArray[1]={['Vanne PaC']='On'}
			commandArray[2]={['Pompe a Chaleur']='On'}
			commandArray[3]={['Vanne Chaudiere']='Off'}
			commandArray[4]={['Chaudiere']='Off'}
		else
			commandArray[1]={['Vanne PaC']='Off'}
            commandArray[2]={['Pompe a Chaleur']='Off'}
            commandArray[3]={['Vanne Chaudiere']='On'}
            commandArray[4]={['Chaudiere']='On'}
        end
	end	
end    
end 
return commandArray
Dernière modification par vil1driver le 18 sept. 2015, 14:39, 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
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Re: Script de chauffage, pompe a chaleur, ...

Message par Smat »

Merci pour ton retour, mais ça ne fonctionne pas :
Il manquait un end et la PaC plus la vanne est en fonction continuellement (même si le mode confort est en Off), j'y regarde de plus près.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Script de chauffage, pompe a chaleur, ...

Message par vil1driver »

ah oui désolé pour le dernier end ;)
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
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Re: Script de chauffage, pompe a chaleur, ...

Message par Smat »

Je viens de voir pourquoi, la consigne_confort est utilisé partout, pas la consigne_eco. J'ai corrigé, ça a l'air de fonctionner.

Merci
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Script de chauffage, pompe a chaleur,

Message par deennoo »

Moi je suis pas fort en script mais en plomberie chauffage un peu, je comprends pas pourquoi tu mets des vannes 2 voies, au lieu de vannes 3voies.

Ta Pac est en releve de la chaudière, donc elle alimente le même circuit de chauffage (radiateur ou plancher chauffant).

Ton chauffagiste n'a pas pu raccorder tout au même endroit (simplification de l'installation par installation d'une vanne 3 voies

Attention en ne prenant qu'une vanne par circuit au phénomène de thermosiphon.

J'admets que ce est pas toujours possible.

Je vois aussi ta vannes ce ferme en 15 seconde, c'est très rapide, attention aux coups de bélier (l'eau circule dans les tuyaux grâce à un circulateur, ce n'est pas parce que ce dernier est arrêter que l'eau s'arrête de bouger, si ta vannes coupe le passage trop vite, l'eau en passant dans le trou de plus en plus petit va siffler, et une fois bouché, tu vas tout bloquer, pour peu que certains tuyau ne soit pas bien fixé, ils vont taper leur support.

Mieux vaut privilégier le couple que la vitesse.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
Répondre