Planning chauffage en fonction de la T°

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 <\>.
anjubelle
Messages : 17
Inscription : 20 févr. 2015, 10:53

Planning chauffage en fonction de la T°

Message par anjubelle »

Bonjour

je dispose d'un radiateur qui est géré via le mode "planning".
Je voudrais scripter ce planning en fonction de la température....
En gros si temp > 20° alors planning off......

Je ne sais pas si c'est faisable en l'état où si il faut refaire un event....

Merci
Devices: Téléinfo USB rail DIN, Chacon 54751 x3, Chacon 54798 x3, Oregon THN132N x4, Oregon THGN800, Oregon WGR800, Oregon PCR800, Door sensor sc2262 x3, KD101 Smoke
Hardware: RPi, RFXCom, Archos 101b
jackslayter
Messages : 1040
Inscription : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: Planning chauffage en fonction de la T°

Message par jackslayter »

Code : Tout sélectionner

commandArray = {}
local consigne = 20
local sonde = 'salon'
local temperature = devicechanged[string.format('%s_Temperature', sonde)]
time = os.date("*t")
if (((time.hour < 8) and (time.hour > 13) and (temperature < consigne )) or ((time.hour < 20) and (time.hour > 22) and (temperature < consigne ))) then
commandArray['radiateur']='On'
else
commandArray['radiateur']='Off'
end 
return commandArray
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
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Re: Planning chauffage en fonction de la T°

Message par Smat »

Et pour plus de flexibilité, la température peut être mise en température setpoint (dummy device)
anjubelle
Messages : 17
Inscription : 20 févr. 2015, 10:53

Re: Planning chauffage en fonction de la T°

Message par anjubelle »

merci pour le script !
Devices: Téléinfo USB rail DIN, Chacon 54751 x3, Chacon 54798 x3, Oregon THN132N x4, Oregon THGN800, Oregon WGR800, Oregon PCR800, Door sensor sc2262 x3, KD101 Smoke
Hardware: RPi, RFXCom, Archos 101b
dbocart
Messages : 45
Inscription : 06 déc. 2014, 14:27

Re: Planning chauffage en fonction de la T°

Message par dbocart »

Bonjour,

J'utilise ce type de script depuis Novembre 2014, basé sur un autre script avec hystérésis, c'est (très) efficace j'ai apporté pls amélioration avec le temps, mode Confort, mode Eco, mode Eco++

j'enregistre les log dans un fichier externe au raspbery avec la température ext prise via accuweather
Alerte SMS, si les mode absence et présent sont actif en même temps par ex:
La fonction round permet d'arrondir la valeur des capteurs de T°à +/- 0,1°

Absence -> bouton absent -> permet de passé le chauffage en mode ECO++
Présent -> Bouton Présent -> prend la priorité sur les horaires de planning du thermostat (bouton virtuel qui déclenche les radiateur via planification)

Les valeurs de chauffage sont prise dans les variables utilisateurs (plus facile a changer a distance qu'un script)
L’hystérésis permet de ne pas faire des marches/arrêt en permanences des radiateurs

le changement d'état des radiateurs ce fait toutes les 2/3 minutes (0,3,5,8), cela permet d'éviter une hausse ou baisse trop éloigné de la température souhaité.

J'ai mis sondebak et sondeext mais elle ne sont pas utilisé dans le script

Code : Tout sélectionner

#####
local sonde = 'TEMP_SAM'				-- nom de la Sonde de temperature à surveiller
local sondebak = 'TEMP_CUISINE'			-- nom de la Sonde de temperature de backup à surveiller
local sondeExt = 'TEMP_GRENIER'			-- nom de la Sonde de temperature ext
local thermostat = 'Thermostat_SAM'		-- Interrupteur virtuel du thermostat (a planifier)
local radiateurRDC = 'RADIATEUR_RDC'    -- Nom du radiateur a allumer/eteindre
local Absence = 'Absence'				-- Thermostat On/Off pour gerer les vacances/absences, a planifier
local Present = 'Present'				-- Thermostat On/Off pour gerer les présences, a planifier

function round(num, dec,src)
		
	if num then
		local mult = 10^(dec or 2)
		return math.floor(num * mult + 0.5) / mult
	else
		print('La sonde ('.. src..') déconne ???')
		return 50
	end
end

function echo(msg)
       
        print('Therm log -> '..msg)
		
		local temps = os.date("*t")
		
		if ((temps.min % 10)==0) then 
			local namefile = '/mnt/dell/e/rpi_chauf_rdc_'..temps.year..'-'..temps.month..'.log'
			local file = io.open(namefile, "a")
			print('Print in file '..namefile)
			file:write(os.date()..';'..msg, "\n")
			file:flush()
			file:close()
			if unexpected_condition then 
				print('Err ecriture vers DELL')
			end
		end

        return ""
end

commandArray = {}

	local consigneCONF = uservariables["consigneCONF"]		-- Temperature de consigne CONFORT
	local consigneECO = uservariables["consigneECO"]			-- Temperature de consigne ECO
	local consigneECOpp = uservariables["consigneECOpp"]		-- Temperature de consigne ECO++
	local hysteresis = uservariables["hysteresis"]			-- Valeur seuil pour eviter que le relai ne cesse de commuter dans les 2 sens

	local time2 = os.date("*t")
 
if ((otherdevices[Absence]=='On') and (otherdevices[Present]=='On')) then
	echo('********* ABSENT ET PRESENT EN MEME TPS ??? *********')
	if (time2.min==0) then
		os.execute('curl -isk "https://smsapi.free-mobile.fr/sendmsg?user=#USER&pass=#PASSWORD&msg=ABSENT ET PRESENT EN MEME TPS ???"')
	end
end

if (otherdevices[Absence]=='Off') then

	--	Absent=Off (mode 'normal')
	-- 	Check toutes les 10 minutes 0, 10, 20, 30, 40, 50
		
	-- if (devicechanged[sondeext]) then 
		-- local tempeext = round(devicechanged[string.format('%s_Temperature', sondeext)],1)
		-- print('Temperature EXT = '..tempext)
	-- end
	
	if ( (devicechanged[sonde]) and ( ((time2.min % 10)==0) or ((time2.min % 10)==3) or ((time2.min % 10)==5) or ((time2.min % 10)==8) )) then
	
		local temperature = round(devicechanged[string.format('%s_Temperature', sonde)],1,sonde)
			
		print('Temperature sonde Salon = '..temperature)
			
		if otherdevices[Present]=='On' then
			print('Mode PRESENT H24=ON, mode Confort seulement')
		end
	
		-- on utilise que HUM
		WU_sWeatherTemp, hum = otherdevices_svalues['WU_ACHERES']:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")	
		
		-- on utilise sWeatherTemp (temp resenti)
		dir1, dir2, speed,Vval4,Vval5,WU_RESENT_TEMP = otherdevices_svalues['WU_VENTS']:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")
				
		if (otherdevices[thermostat]=='On') or (otherdevices[Present]=='On') then
			
			print('Thermostat RDC OFF -->  CONFORT ('..(consigneCONF-hysteresis)..' => *'.. consigneCONF ..'* <= '..(consigneCONF+hysteresis)..')')
			if (temperature <= (consigneCONF - hysteresis) ) then
				commandArray[radiateurRDC]='Off'
				echo(temperature..';Trop Froid;Allumage du chauffage RDC;(Mode CONFORT);'..tonumber(WU_RESENT_TEMP)..';'..tonumber(hum))
				
			elseif (temperature >= (consigneCONF + hysteresis)) then
				commandArray[radiateurRDC]='On'
				echo(temperature..';Trop chaud;Extinction du chauffage au RDC;(Mode CONFORT);'..tonumber(WU_RESENT_TEMP)..';'..tonumber(hum))
			end
		end
		
		if ((otherdevices[thermostat]=='Off') and (otherdevices[Present]=='Off')) then
			print('Thermostat RDC ON --> ECO ('..(consigneECO-hysteresis)..' => *'.. consigneECO ..'* <= '..(consigneECO+hysteresis)..')')
			if (temperature <= (consigneECO - hysteresis) ) then
			
				commandArray[radiateurRDC]='Off'
				echo(temperature..';Trop froid;Allumage du chauffage RDC;(Mode ECO);'..tonumber(WU_RESENT_TEMP)..';'..tonumber(hum))
			
			elseif (temperature > (consigneECO + hysteresis)) then
			
				commandArray[radiateurRDC]='On'
				echo(temperature..';Trop chaud;Extinction du chauffage RDC;(Mode ECO);'..tonumber(WU_RESENT_TEMP)..';'..tonumber(hum))
				
			end
			
		end
		
	end
else
	-- mode Absence
	if ((devicechanged[sonde]) and ((time2.min % 10)==0)) then

		local temperature = round(devicechanged[string.format('%s_Temperature', sonde)],1,sonde)

		print('Temperature sonde Salon = '..temperature)
		print('Mode Absence Actif -> ECO++ ('..(consigneECOpp-hysteresis)..' => *'.. consigneECOpp ..'* <= '..(consigneECOpp+hysteresis)..')')

		if (temperature <= (consigneECOpp - hysteresis)) then
			commandArray[radiateurRDC]='Off'
			echo(temperature..';Trop froid;Allumage du chauffage RDC;(Mode ECO++);'..tonumber(WU_RESENT_TEMP)..';'..tonumber(hum))
		elseif (temperature > (consigneECOpp + hysteresis)) then
			commandArray[radiateurRDC]='On'
			echo(temperature..';Trop chaud;Extinction du chauffage RDC;(Mode ECO++);'..tonumber(WU_RESENT_TEMP)..';'..tonumber(hum))
		end
	end
	
end

return commandArray
RPI 1B, RFXtrx433e, 2 x Chacon fils pilote (4 radiateurs RDC, 2 ETG) , 5x T°, 3x T° 1-Wire, téléinfo EDF filaire (via opto), RPI3B -> clé Zigbee ConBee II -> 3 Sonoff, 12 ampoules, strip led couleur
Répondre