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 : 1036
Enregistré le : 19 oct. 2017, 14:49

Planning de chauffage

Message par Wolfen38 » 26 oct. 2019, 10:59

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 ?

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


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

Re: Planning de chauffage

Message par vil1driver » 26 oct. 2019, 11:41

Salut,

Pas le droit de mettre 2 else de suite

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

Re: Planning de chauffage

Message par Wolfen38 » 26 oct. 2019, 11:47

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 : 5187
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Planning de chauffage

Message par vil1driver » 26 oct. 2019, 11:50

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


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


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

Re: Planning de chauffage

Message par Wolfen38 » 26 oct. 2019, 12:00

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 : 5187
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Planning de chauffage

Message par vil1driver » 26 oct. 2019, 12:09

C'est probable oui ;)

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

Re: Planning de chauffage

Message par Wolfen38 » 26 oct. 2019, 12:10

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 : 287
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Planning de chauffage

Message par denis_brasseur » 26 oct. 2019, 18:34

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
10 Getdio 54755 (gestion chauffage)
2 CHACON 34131 (détecteur fumées)
5 Bresser Capteur thermo/hygro
2 CHACON DiO 54781 (contacteur porte)
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

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

Re: Planning de chauffage

Message par Wolfen38 » 26 oct. 2019, 18:38

si j'écris

Code : Tout sélectionner

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

Code : Tout sélectionner

elseif...
?

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

Re: Planning de chauffage

Message par denis_brasseur » 27 oct. 2019, 07:39

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
10 Getdio 54755 (gestion chauffage)
2 CHACON 34131 (détecteur fumées)
5 Bresser Capteur thermo/hygro
2 CHACON DiO 54781 (contacteur porte)
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre