Page 3 sur 10

Re: Planning de chauffage

Publié : 02 nov. 2019, 08:47
par lost
Wolfen38 a écrit : 02 nov. 2019, 08:30 Je pensais que les scripts de type device ne s’exécutaient que lorsqu'il y avait un changement d'état d'un device, donc si pas de changement, pas d’exécution.
Oui, UN device... n'importe lequel en fait, d’où l'importance de tester que c'est bien celui sur lequel on veut agir qui a changé d'état.

Sinon on se retrouve à déclencher des actions, au mieux inutiles, dans son script chauffage alors qu'un oiseau est passé devant un capteur de mouvement sur sa terrasse!

Re: Planning de chauffage

Publié : 02 nov. 2019, 09:34
par denis_brasseur
Wolfen38 a écrit : 02 nov. 2019, 08:30 OK, merci Denis.

Je pensais que les scripts de type device ne s’exécutaient que lorsqu'il y avait un changement d'état d'un device, donc si pas de changement, pas d’exécution.
Effectivement, mais dans le cas où la condition est basée sur un changement d'état

Code : Tout sélectionner

if devicechanged['capteur'] then
 'ou'
 if devicechanged['capteur'] == 'On' then

Re: Planning de chauffage

Publié : 02 nov. 2019, 14:37
par Neutrino
Bonjour,
Il serait peut-être bien d'avoir le script en entier, non ?

Re: Planning de chauffage

Publié : 02 nov. 2019, 14:47
par Wolfen38
Suite aux avis de vil1driver et Denis, je suis parti sur un truc comme celà :

Code : Tout sélectionner

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

-- Récupère l'heure actuelle.
local heure = os.date('%H:%M')

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 = {}


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
Je ne sais pas si ca va fonctionner car c'est un programme qui me sert pour la semaine, mais le bon coté, c'est que pour le moment j'ai plus rien dans mes logs.

Re: Planning de chauffage

Publié : 02 nov. 2019, 17:23
par vil1driver
Tu n'as pas compris.. Tu fais probablement l'amalgame avec blocky.

Si ton script n'a pas vocation à réagir instantanément à la mise à jour d'un device. (exemple détection de mvt > lampe)
En gros un script qui ne comporte pas l'instruction devicechanged,

Il n'a pas à être de type DEVICE.
Et ne devrait donc pas être nommé
script_device_xxx.lua

Sinon il va constamment être exécuté, et peu même générer une boucle et totalement bloquer ton système.

Ton script doit être de type TIME et donc ne vérifier le statut des capteurs qu'une fois par minute (voir 10, 15min ou plus..)

Il est crucial de comprendre cela, les scripts lua ne devraient même pas être abordés avant d'avoir compris la façon dont domoticz va les exécuter.

De ce qui est de limiter les actions inutiles, il est souvent vérifié dans les scripts le status du device à modifier, modification qui n'a alors lieu que si elle est utile.

Ps: ton script actuel comporte de nouveaux plusieurs erreurs, certaines conditions sont impossibles à remplir. X ne peut être supérieur à 19 et en même temps inférieur à 6..

Re: Planning de chauffage

Publié : 04 nov. 2019, 05:31
par Wolfen38
Bah justement, je veux que mon script agisse instantanément au changement d'un de mes deux inter.

Si "inter chauffage" ou "presence-syb" passe a ON ou a OFF, alors en fonctionne de l'heure et de l'alarme, je veux injecter la valeur de température instantanément dans mon thermostat.

Re: Planning de chauffage

Publié : 06 nov. 2019, 18:20
par Wolfen38
La, je dois être bourré.

J'ai réduit mon script au mini

Code : Tout sélectionner

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

local debug = true

commandArray = {}

if devicechanged['Inter chauffage'] == 'on' then
    commandArray['Thermostat Réglage']='20'
	print("Thermostat sur 20°")
			
	else
	
	if (devicechanged['Inter chauffage'] == 'off' and otherdevices['Presence-syb'] == 'Off') then
		commandArray['Thermostat Réglage']='18'
		print("Thermostat sur 18°")
		end
	
end

return commandArray
Quand je clique mon inter chauffage pour le passer de on à off, rien ne se passe, aucun script executer.

Mon script est "script_device_chauffage.lua"

Re: Planning de chauffage

Publié : 06 nov. 2019, 18:30
par vil1driver
Majuscules à On et Off ;)

Bravo ça c'est un script qui va permettre d'aller petit à petit très loin.
Un pied après l'autre, c'est la clé

Re: Planning de chauffage

Publié : 06 nov. 2019, 18:35
par Wolfen38
Merci, désolé, j'ai raté ce petit détail....

Bon, maintenant le script ce lance, houra.

Donc tentons d'aller un peu plus loin....

Le srcipt se lance, mais mon thermostat ne se met pas à jour.... C'est un thermostat netatmo, je peux modifier manuellement la valeur dans le widget de dz, mais avec mon script, la valeur n'est pas intégrer dans le thermostat....

Re: Planning de chauffage

Publié : 06 nov. 2019, 18:49
par vil1driver
Essai cette façon de faire

Code : Tout sélectionner

commandArray['UpdateDevice']=otherdevice_idx["Thermostat Réglage"]..'|0|18'