Page 1 sur 1

[Resolu] Evènement en fonction de l'origine d'un changement d'état

Publié : 08 oct. 2020, 09:04
par erlik
Hello

Débutant dans Domoticz, je but sur un problème (insoluble pour moi)

Besoin :
J'ai 2 switchs Sonoff T1 qui doivent commander un même éclairage (remplacement de va-et-vient). Les switchs seront appelés S1 et S2, et la lampe ... bah ..... Lampe :D
S1 est relié à l'éclairage, et S2 non (interrupteur déporté).
Je souhait que les deux switchs changent d'état en même temps :
- si j'appuie sur S1 , S2 est en mode ON et Lampe s'allume
- si j'appuie sur S1 , S2 est en mode OFF et Lampe s'éteint
- si j'appuie sur S2, S1 passe en mode ON et Lampe s'allume
- si j'appuie sur S2, S1 passe en mode OFF et Lampe s'éteint
- si j'allume Lampe via l'interface, S1 et S2 passent en ON
- si j'éteins Lampe via l'interface, S1 et S2 passent en OFF

Problématique
Vous l'aurez compris, mon problème est d'ordre Maitre/Esclave. Si je défini S1 en Maitre, les changements manuels d'état de S2 ne l'affecte pas, et inversement.

Solution :
Le seul moyen que j'ai trouvé pour remédier à cela est de définir l'origine du changement d'état :
- Changement manuel, sur le switch
- Changement automatique via Domoticz

Le device subissant un changement manuel est défini comme maitre et l'enclave copie son état.
De plus, les 2 switches seraient réunis dans un même groupe Lampe, pour qu'ils puissent changer d'état via un évènement Domoticz. sa donnerait en pseudo code

Code : Tout sélectionner

SI ( S1.origineChangement == Manuel )
ALORS S2.valeur = S1.valeur
           Lampe = S1.valeur

SI ( S2.origineChangement == Manuel )
ALORS S1.valeur = S2.valeur
           Lampe = S2.valeur
Ma question est donc, comment transformer ce pseudo code en VRAI ?
Or , le système de groupes ou Blocky ne semblent pas répondre a ce besoin. Il ne me reste donc a priori que les scripts pour avoir des instructions d'assez bas niveau
J'avais pensé à trouvé l'utilisateur à l'origine du changement d'état , qui s'affiche dans les logs, ou encore le topic de la commande MQTT (In = manuel, ou Out = Domoticz), mais je ne sais pas comment l'utiliser dans un script

Merci

Re: Evènement en fonction de l'origine d'un changement d'état

Publié : 08 oct. 2020, 10:32
par boum
Bonjour,
Déjà, si S1 est relié à la lampe, pas besoin de gérer un 3e état. État de S1 = État de l'éclairage.

Sans trop réfléchir et sans tester, je ferais qq chose comme ça en dzVents :

Code : Tout sélectionner

return {
	on = {
		devices = {
			'S1',
			'S2',
		}
	},
	execute = function(domoticz, item)
		if item.active then
			domoticz.devices('S1').switchOn().checkFirst().silent()
			domoticz.devices('S2').switchOn().checkFirst().silent()
		else
			domoticz.devices('S1').switchOff().checkFirst().silent()
			domoticz.devices('S2').switchOff().checkFirst().silent()
		end
	end
}
Le script est déclenché par l'un des deux interrupteurs. On récupère son état et on bascule l'état des deux interrupteurs. checkFirst() pour éviter de changer l'état du déclencheur (il est déjà correct). silent() pour éviter de redéclencher ce script pour l'autre interrupteur.

À voir si ça correspond au besoin.
Bon courage.

PS : la documentation de dzVents (en anglais) est là https://www.domoticz.com/wiki/DzVents:_ ... _scripting

Re: Evènement en fonction de l'origine d'un changement d'état

Publié : 08 oct. 2020, 18:47
par erlik
Un grand merci ! Ca marche du 1er coup!
Je vais donc un peu me pencher sur le dzVents , ça a l'air pas mal puissant