Blocky - Pb action qui boucle

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 <\>.
dartflag
Messages : 218
Inscription : 27 nov. 2015, 20:43

Blocky - Pb action qui boucle

Message par dartflag »

Bonjour,

je suis débutant dans les scripts. Et impossible de trouver l'astuce ayant quand même cherché avant de poster ma question. :?

J'ai installé un keypad dans l'entrée chez moi. Quand je pars, je passe le keypad devant le lecteur et il m'active la camera et baisse le chauffage.
Mais pour le retour c'est plus compliqué. Je souhaiterai lancer des actions différentes si c'est le jour ou la nuit.

1- Si je reviens de jour, je désactive la camera, et active le chauffage
2- Si je reviens de nuit, je désactive la camera, active le chauffage et allume les lumières .

voici mon blocky, mais ça boucle.C'est certainement normal, puisque, les conditions sont remplissais comment en sortir? je ne sais comment tester le changement d'état du keypad, off->on ou on->off, et non pas l'état courant.

Quand je vais me coucher et que j'éteins les lumières, le script me les rallume, car les états sont remplis. :cry:
Capture d’écran.png
Capture d’écran.png (53.86 Kio) Consulté 7796 fois
je vous remercie de votre aide.

Fred
Dernière modification par dartflag le 21 janv. 2017, 21:10, modifié 1 fois.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Blocky - Pb action qui boucle

Message par vil1driver »

Salut,

Peut être choisir un type device au lieu de time ?
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
dartflag
Messages : 218
Inscription : 27 nov. 2015, 20:43

Re: Blocky - Pb action qui boucle

Message par dartflag »

Salut Vil,

mais j'ai déjà un type device=keypad? et je suis bien obligé de d'utiliser le type time pour savoir si je suis le jour ou la nuit?

Fred
jay
Messages : 30
Inscription : 04 janv. 2017, 13:21

Re: Blocky - Pb action qui boucle

Message par jay »

Ola,
C'est une question de logique. Ton événement ici n'est pas activé que et seulement que quand l'état de ton keypad change. Du coup l'événement est appelé toutes les x secondes et comme tes conditions dans les if sont remplies ba ca fait ce tu demandes de faire même si tu as eteint la lumière à la main ^^
Le problème c'est que je penses que tu es à la limite avec blocky et le script lua/bash pour ce que tu souhaites faire.

Moi j'aurais fais un script et je l'aurais mis dans les paramètres Action on et off de ton keypad. Comme ca ton script n'est exécute que quand la valeur du keypad change. Tu pourras eteindre ta lumière sans qu'elle se rallume.

Blocky c'est bien quand tu veux qqchose qui verifie tout le temps ou dans une condition simple genre tous les jours à 11h00 ou si tu mets à ON ta télé, ba tu mets a ON la freebox.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Blocky - Pb action qui boucle

Message par vil1driver »

Le type de script indique comment il se lance..
Soit toutes les minutes (time)
Soit sur la maj du périphérique (device)
Tout à fait possible de savoir si on est la nuit dans un type device.
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
dartflag
Messages : 218
Inscription : 27 nov. 2015, 20:43

Re: Blocky - Pb action qui boucle

Message par dartflag »

bonsoir,

et bien j'ai suivi vos conseils, j'ai laissé tombé le blocky et j'ai fait du LUA. j'ai fait le script suivi, a tester si cela fonctionne bien.

merci pour les tuyaux ;)

Code : Tout sélectionner

-- script_device_keypad.lua
time = os.date("*t")

commandArray = {}

	if (devicechanged['KeyPad'] == 'On')
		then
			print('KeyPad: On')
			print('Away')
			commandArray['Camera']='On'
			commandArray['Nest - Absent']='On'
				
				elseif (devicechanged['KeyPad'] == 'Off')
					then
						if ((60 * time.hour + time.min) > (timeofday['SunriseInMinutes'])) and ((60 * time.hour + time.min) < (timeofday['SunsetInMinutes']))
							then	
								print('KeyPad: Off')
								print('Home jour')
								commandArray['Camera']='Off'
								commandArray['Nest - Absent']='Off'
									elseif ((60 * time.hour + time.min) > (timeofday['SunsetInMinutes'])) or ((60 * time.hour + time.min) < (timeofday['SunriseInMinutes']))
										then
											print('KeyPad: Off')
											print('Home nuit')
											commandArray['Camera']='Off'
											commandArray['Nest - Absent']='Off'
											commandArray['Lumiere 2']='On'
											commandArray['Lumiere 3']='On' 		
						end
				
	end

return commandArray


bon il y a certainement plus court et plus simple, mais je débute :D

Fred
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Blocky - Pb action qui boucle

Message par vil1driver »

joli script ;)

te voila maintenant du bon côté de la force :mrgreen:

oui tu peux simplifier un point, mais c'est bien d'avoir étudié le côté "compliqué" en premier lieu,
ça permet de comprendre et ouvre une autre possibilité : différer avant ou après les heures de lever/coucher du soleil en ajoutant/retranchant quelques minutes à la comparaison..

donc, ceci

Code : Tout sélectionner

((60 * time.hour + time.min) > (timeofday['SunriseInMinutes'])) and ((60 * time.hour + time.min) < (timeofday['SunsetInMinutes']))
peut être remplacé par ceci

Code : Tout sélectionner

timeofday['Daytime']
et ceci

Code : Tout sélectionner

((60 * time.hour + time.min) > (timeofday['SunsetInMinutes'])) or ((60 * time.hour + time.min) < (timeofday['SunriseInMinutes']))
peut être remplacé par ceci

Code : Tout sélectionner

timeofday['Nighttime']
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
dartflag
Messages : 218
Inscription : 27 nov. 2015, 20:43

Re: Blocky - Pb action qui boucle

Message par dartflag »

merci Vil :D

j'ai fait les petites adaptations que tu m'as données et ça fonctionne au poil.
Répondre