Planning de chauffage

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Répondre
Wolfen38
Messages : 1370
Enregistré le : 19 oct. 2017, 14:49

Planning de chauffage

Message par Wolfen38 »

Salut à tous,

Je viens d'écrire un petit script pour controler mon thermostat netatmo, mais j'aimerais votre avis avant de le tester histoire de ne pas arriver lundi dans une maison gelée et ma femme qui rale. (oui encore ! )

Code : Tout sélectionner

-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')

local debug = false  -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir

local interon1 = otherdevices['Inter chauffage'] == 'On'
local interon2 = otherdevices['Presence-syb'] == 'On'
local interoff1 = otherdevices['Inter chauffage'] == 'Off'
local interoff2 = otherdevices['Presence-syb'] == 'Off'
local alarmeon = otherdevices['Virtuel alarme'] == 'On'
local alarmeoff = otherdevices['Virtuel alarme'] == 'Off'
-- Récupère l'heure actuelle.
local heure = os.date('%H:%M')

commandArray = {}

if interon1 or interon2 then
if alarmeoff then
commandArray['Thermostat Réglage']='20'
else
if alarmeon and heure >= '19:00' and heure <= '06:30' then
commandArray['Thermostat Réglage']='20'
else
commandArray['Thermostat Réglage']='18'
else
commandArray['Thermostat Réglage']='18'
end
end
end


return commandArray
Inter chauffage et presence-syb, ce sont 2 inter qui passe on/off en fonction d'un planning.
virtuel alarme, c'est quand j'active ou désactive mon alarme.

Mon but, c'est que si l'un des 2 inter est sur on, alors plusieurs solutions :
-1 : Si alarme coupée, la température passe à 20°.
-2 : Si alarme activée mais entre 19h et 6h30, alors la température passe à 20°.
-3 : Si alarme activée mais pas entre 19h et 6h30, alors la température passe à 18°.

Ca vous parait correct ?

vil1driver
Messages : 5547
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Planning de chauffage

Message par vil1driver »

Salut,

Pas le droit de mettre 2 else de suite
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

Wolfen38
Messages : 1370
Enregistré le : 19 oct. 2017, 14:49

Re: Planning de chauffage

Message par Wolfen38 »

comme ca alors ?

Code : Tout sélectionner

-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')

local debug = false  -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir

local interon1 = otherdevices['Inter chauffage'] == 'On'
local interon2 = otherdevices['Presence-syb'] == 'On'
local interoff1 = otherdevices['Inter chauffage'] == 'Off'
local interoff2 = otherdevices['Presence-syb'] == 'Off'
local alarmeon = otherdevices['Virtuel alarme'] == 'On'
local alarmeoff = otherdevices['Virtuel alarme'] == 'Off'
-- Récupère l'heure actuelle.
local heure = os.date('%H:%M')

commandArray = {}

if interon1 or interon2 then
if alarmeoff then
commandArray['Thermostat Réglage']='20'
else
if alarmeon and heure >= '19:00' and heure <= '06:30' then
commandArray['Thermostat Réglage']='20'
else
if alarmeon and heure >= '06:31' and heure <= '18:59' then
commandArray['Thermostat Réglage']='18'
else
if interoff1 and interoff2 then
commandArray['Thermostat Réglage']='18'
end
end
end
end
end

return commandArray


vil1driver
Messages : 5547
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Planning de chauffage

Message par vil1driver »

Code : Tout sélectionner

-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')

local debug = false  -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir

local interon1 = otherdevices['Inter chauffage'] == 'On'
local interon2 = otherdevices['Presence-syb'] == 'On'
local alarmeon = otherdevices['Virtuel alarme'] == 'On'


commandArray = {}

commandArray['Thermostat Réglage']='18'
if ((interon1 or interon2) and ((alarmeon and (heure >= '19:00' or heure <= '06:30')) or not alarmeon)) then
   commandArray['Thermostat Réglage']='20'
end

return commandArray

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

Wolfen38
Messages : 1370
Enregistré le : 19 oct. 2017, 14:49

Re: Planning de chauffage

Message par Wolfen38 »

Rho le vilain, je fais un script en 40 lignes, et toi tu me fais un light en 10 !

Merci bien pour ton aide, vu comme ca, c'est bien plus simple.

Mais pour ma culture générale, tu penses que le mien aurait fonctionner quand même ?

vil1driver
Messages : 5547
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Planning de chauffage

Message par vil1driver »

C'est probable oui ;)
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

Wolfen38
Messages : 1370
Enregistré le : 19 oct. 2017, 14:49

Re: Planning de chauffage

Message par Wolfen38 »

Merci pour tout.

Moral de l'histoire, fait que je bosse plus ma condition de départ pour pas a avoir a enchaîner les else derrière.

Envoyé de mon Mi A1 en utilisant Tapatalk


denis_brasseur
Messages : 524
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Planning de chauffage

Message par denis_brasseur »

Pour que ton code fonctionne, il aurait fallu remplacer les else if par des elseif.
COmme le dit vil1driver, tu ne peux pas avoir 2 else dans la même condition, mais tu peux enchaîner les elseif.

Indenter le code permet de le rendre plus lisible et favorise la compréhension et le débogage.
Ton code aurait probablement fonctionné comme ceci

Code : Tout sélectionner

if interon1 or interon2 then
	if alarmeoff then
		commandArray['Thermostat Réglage']='20'
	elseif alarmeon and heure >= '19:00' and heure <= '06:30' then
		commandArray['Thermostat Réglage']='20'
	elseif alarmeon and heure >= '06:31' and heure <= '18:59' then
		commandArray['Thermostat Réglage']='18'
	elseif interoff1 and interoff2 then
		commandArray['Thermostat Réglage']='18'
	end
end
Celui de vilindriver est plus simple, le tiens peut etre plus lisible.
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

Wolfen38
Messages : 1370
Enregistré le : 19 oct. 2017, 14:49

Re: Planning de chauffage

Message par Wolfen38 »

si j'écris

Code : Tout sélectionner

else
if...
c'est différent de

Code : Tout sélectionner

elseif...
?

denis_brasseur
Messages : 524
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Planning de chauffage

Message par denis_brasseur »

C'est toi qui a raison, j'avais vu une imbrication de plusieurs else, ce qui n'est pas le cas.
L'avantage d'indenter le code le rend plus visible

Code : Tout sélectionner

if interon1 or interon2 then
	if alarmeoff then
		commandArray['Thermostat Réglage']='20'
	else
		if alarmeon and heure >= '19:00' and heure <= '06:30' then
			commandArray['Thermostat Réglage']='20'
		else
			if alarmeon and heure >= '06:31' and heure <= '18:59' then
				commandArray['Thermostat Réglage']='18'
			else
				if interoff1 and interoff2 then
					commandArray['Thermostat Réglage']='18'
				end
			end
		end
	end
end
Je voulais dire que ceci n'est pas correct :

Code : Tout sélectionner

if condition1 then

else
	if condition2 then
	
	end
else
	if condition3 then
	
	end
end
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

Répondre