Aller au contenu
jjacques68

Conditions/Triggers

Recommended Posts

Encore moi :) désolé j'ai tendance à bombarder le forum de questions, mais je vous promets que je cherche des réponses avant de poster :15:

 

Alors on en avait un peu discuté avec @Lazer je crois, mais je me rends compte que les Trigger dans les scènes semblent être plus compliqués...

 

Je m'explique : Je veux qu'une scène soit triggée lorsque qu'un Wall Plug (pour cette exemple) change d'état.

 

Et bien je suis obligé de mettre 2 lignes de conditions, une pour tester le "True" et pour le "False".

{
    operator = "any",
    conditions = {
        {type = "device", id = 34, property = "value", operator = "==", value = true, isTrigger = true},
        {type = "device", id = 34, property = "value", operator = "==", value = false, isTrigger = true}
    }
}    

Je pensais qu'il était possible, par exemple, d'en avoir qu'une : 

{
    operator = "any",
    conditions = {
        {type = "device", id = 34, property = "value", operator = "!=", value = 2, isTrigger = true},
    }
}    

Mais visiblement, il n'accepte (pour ce type de module) que le "True" et "False" comme "value".

 

Alors imaginons maintenant que cette scène doit être triggée par tout tout tout plein de device !

La liste des conditions va exploser, minimum le double que ce qu'on faisait sur la HC2 !!

 

c'est un peu bof comme méthode non ?

 

où je me trompe complètement !

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello dans ce cas tu peux utiliser l'opérateur anyValue

voici un exemple pour moi qui fonctionne avec un détécteur de mouvement à chaque changement de statut:

{
  conditions = { { 
    type = "device",
    id = 511,
    property = "value", 
    operator = "anyValue",
    isTrigger = true
}},
  operator = "all"
}

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui oui en effet, depuis la dernière mise à jour ça fonctionne comme ça... :)


Envoyé de mon iPhone en utilisant Tapatalk Pro

Partager ce message


Lien à poster
Partager sur d’autres sites

J'espère que je ne "déterre" pas ce sujet ?

 

Je sèche sur une combinaison de triggers (qui par ailleurs fonctionne à la perfection).

 

Le hic c'est qu'une condition dit toujours "oui". La première.

Elle est censée trigger quand un détecteur (Aeon Multisensor 6, à cause de l'option humidité) se déclenche ET quand la luminosité est à zéro.

Mais la condition est remplie et "trigge" même en plein jour.

 

Voici le listing :

{ operator = "any",
  conditions = { { operator = "all",
                   conditions = {{ type = "device",
                                   id = 54,
                                   property = "value",
                                   operator = "==",
                                   value = true,
                                   isTrigger = true },
                                 { type = "device",
                                   id = 149,
                                   isTrigger = false,
                                   operator = "<",
                                   property = "value",
                                   type = "device",
                                   value = 3 }} },
                 { type = "device",
                   id = 42,
                   property = "value",
                   operator = "==",
                   value = true,
                   isTrigger = true },
                 { id = 211,
                   isTrigger = true,
                   operator = "==",
                   property = "centralSceneEvent",
                   type = "device",
                   value = {keyAttribute = "Pressed", keyId = 2}},
                 { id = 211,
                   isTrigger = true,
                   operator = "==", 
                   property = "centralSceneEvent",
                   type = "device",
                   value = {keyAttribute = "Pressed", keyId = 4}} }}

 

L'ID "motion" est le 54, et celle de la luminosité est 149 (en tête de listing).

J'ai testé plusieurs syntaxes operator/conditions, mais on a vite fait le tour.

 

Je penche maintenant pour soit une erreur de property, soit un bug du concepteur (moi...).

 

Modifié par Sowliny

Partager ce message


Lien à poster
Partager sur d’autres sites

etrange...

 

tu as essayé en enlevant les autres conditions, juste garder celle du motion et de la luminosité ?

 

{ 
	operator = "all",
	conditions = {
		{type = "device", id = 54,  property = "value", operator = "==", value = true, isTrigger = true},
		{type = "device", id = 149, property = "value", operator = "<", value = 3, isTrigger = false}
	} 
}

 

si tu as affiche dans le debug la valeur de luminosité lorsque la scène est triggée, ça donne combien ?

Modifié par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

J'avais déjà testé (au début) seulement motion et lux;

Ca fonctionnait parfaitement.

 

Le debug donne la valeur correcte de luminosité.

 

Par contre, j'ai reproduit (et supprimé l'erreur - enfin je pense), car ma (?) HC3 est un peu fantasque, et ne supporte pas bien les enregistrements successifs de scènes, sans un reboot de temps en temps.

 

L'éclairage extérieur s'allume (puisqu'il s'agit de cela) avec operator "==" et value = 0, ce qui ne devrait pas se produire puisque la luminosité extérieure est à plus de 300.

Par contre, l'allumage ne se produit pas avec les valeurs operator "<" et value = 3 - ce qui est le but !

 

Ce qui laisserait à penser que la valeur "zéro" n'est pas vraiment nulle - cela pourrait être 0.0 ?

Je testerai à la nuit pour voir...

 

Merci pour ta réponse et ton éclairage :D

Modifié par Sowliny

Partager ce message


Lien à poster
Partager sur d’autres sites

In fine : à la nuit, ça fonctionne parfaitement.

 

J'en déduis donc que le trigger "operator "==" ... value = 0" pose un problème. Surtout value = 0.

Le test ne semble pas fonctionner (du moins avec ce module).

Soit il s'agit d'un bug (lié à la jeunesse de la HC3 ?), soit le "zéro" renvoyé par le module n'est pas un "vrai" zéro (peut-être une valeur de type 0.0) et ne peut donc pas répondre au test "= 0".

 

Ou alors le bug vient de moi :rolleyes: !

 

Modifié par Sowliny

Partager ce message


Lien à poster
Partager sur d’autres sites

Jamais essayé - ce n'était qu'une hypothèse basée sur des "value" que j'ai déjà rencontré sur différents modules...

 

Je crois que je vais en rester là (avec un test "< 3" s'il n'y a plus de déclenchements en plein jour.

J'ai bien d'autres projets en cours et en vue.

 

Aujourd'hui je viens de réactiver (c.à.d. de transférer la scène depuis la HC2) ma boîte à insoler les circuits (imprimés).

20200827_231111.thumb.jpg.8c4db0394da833e2ed8f1a4ef95fe884.jpg

Réalisée à partir d'une boîte de rangement Ikéa. Elle me permet de tirer des cartes au format europe.

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, retour à la case départ...

 

Rien n'y fait, le déclenchement en plein jour persiste !

Du coup, j'ai supprimé le test de la luminosité dans la section trigger :

                { type = "device",
                  id = 149,
                  isTrigger = true,
                  operator = "==",
                  property = "value",
                  type = "device",
                  value = 0 },

 

et remplacé par un test au début de la scène elle-même :

if sourceTrigger.id == tonumber(fibaro.getGlobalVariable("MID_wykr_taras"))
   and tonumber(fibaro.getValue(149, "value")) > 5
   then fibaro.debug("debug","Scene "..sceneId.." killed (swiatlo = "..fibaro.getValue(149, "value")..")")
          fibaro.scene("kill", {sceneId})
end

 

"si le trigger est le détecteur terrasse et que la luminosité est > à 5" alors tuer la scène.

Pas très élégant, mais ca ira en attendant de trouver une solution à ce (bug ?).

 

Partager ce message


Lien à poster
Partager sur d’autres sites

j'allais finir par te le proposer, rien de mieux que des lignes de code ;) :angry:

 

par contre je comprends pas pourquoi tu "kill" la scènes.

C'est quoi cette VG ?

 

tu fais simplement :

if sourceTrigger.id == TON_ID_DU_PIR and tonumber(fibaro.getValue(149, "value")) < 5 then
	--allumage
end

ou alors j'ai pas tout compris...

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est en effet la VG du PIR.

Tu as bien compris.

 

J'ai fait comme cela en attente de :

1) tester sur plusieurs jours (quoique le résultat soit déjà certain.

2) trouver ce qui coince dans le trigger (quoique là aussi, il n'y a plus grand chose à attendre...)

 

Ta solution est plus élégante bien sûr, et je l'adopterai certainement. C'est bien sur mieux que de "killer" !

 

Partager ce message


Lien à poster
Partager sur d’autres sites

PS : pour répondre à ton interrogation sur le nom de la VG (je te dois bien ça) :

 

MID_ : Module ID

wykr_ : détection (wykrywanie...)

taras_ : terrasse (facile !)

 

C'est ma syntaxe générale sur les noms de VG.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah ouai d'accord !!
Excellent :)


Envoyé de mon iPhone en utilisant Tapatalk Pro

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 22 heures, Sowliny a dit :

Aujourd'hui je viens de réactiver (c.à.d. de transférer la scène depuis la HC2) ma boîte à insoler les circuits (imprimés). 

 

Réalisée à partir d'une boîte de rangement Ikéa. Elle me permet de tirer des cartes au format europe.

it's the final countdown....

 

désolé :D

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 10 heures, Lazer a dit :

it's the final countdown....

 

désolé :D

 

Je me suis douté en écrivant cela que j'aurai bien un commentaire marrant :P...

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 13 heures, jjacques68 a dit :

j'allais finir par te le proposer, rien de mieux que des lignes de code ;) :angry:

 

par contre je comprends pas pourquoi tu "kill" la scènes.

C'est quoi cette VG ?

 

tu fais simplement :


if sourceTrigger.id == TON_ID_DU_PIR and tonumber(fibaro.getValue(149, "value")) < 5 then
	--allumage
end

ou alors j'ai pas tout compris...

Ce matin, tout est correct (normal...).

Peut-etre demain j'inverserai la logique du test pour éviter le "kill", en incluant tout le processus dans un "if then..."

 

Mais avec quelques réserves dues au fait que cette scène est déclenchée par trois acteurs :

PIR de la terrasse,

PIR de la grange,

télécommande Nodon...

 

Et plus tard PIR du pignon nord-est de la maison, PIR du "couloir" entre la maison et la grange (surtout pour l'entrée de la grange)...

 

Avec une gestion séparée des deux zones "grange" et "maison". 

Partager ce message


Lien à poster
Partager sur d’autres sites

alors attention avec le fait d'avoir "beaucoup" de trigger...

Il n'y a pas de multi instance dans les scènes...

Si tu as plusieurs PIR qui déclenche la scène en même temps, tu vas avoir de jolies surprises... je sais  de quoi je parle... :( 

 

pour les autres trigger, tu mets à la suite :

if sourceTrigger.id ~= TON_ID_DU_PIR then
...
...
end

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici la liste des triggers (hormis la condition "fautive" initialement associée à la condition 54) :

 
-- ID  42 = Wykrywacz stodoły
-- ID  54 = Wykrywacz taras
-- ID 149 = Jasność tarasu
-- ID 211 = Nodon Pink
 
{ operator = "any",
  conditions = { { type = "device",
                   id = 54,
                   property = "value",
                   operator = "==",
                   value = true,
                   isTrigger = true },
                 { type = "device",
                   id = 42,
                   property = "value",
                   operator = "==",
                   value = true,
                   isTrigger = true },
                 { id = 211,
                   isTrigger = true,
                   operator = "==",
                   property = "centralSceneEvent",
                   type = "device",
                   value = {keyAttribute = "Pressed", keyId = }},
                 { id = 211,
                   isTrigger = true,
                   operator = "==", 
                   property = "centralSceneEvent",
                   type = "device",
                   value = {keyAttribute = "Pressed", keyId = }} }}
 

 

Pour le moment, tout fonctionne bien.

Il y en a 2 pour les PIR, et 2 pour la télécommande Nodon (211).

 

La scène redémarre à chaque déclenchement - je l'ai vérifié avec le debug des deux PIR.

Donc pas de souci ?

 

A quel genre de surprise je devrais m'attendre ?

Modifié par Sowliny

Partager ce message


Lien à poster
Partager sur d’autres sites

typiquement un message d'erreur dans le debug, si la scène est en court d'exécution et qu'un autre déclenchement (suivant l'option choisi sans les propriété de la scène) vient faire le "kill".

ou encore, toujours suivant l'option, tout simplement pas de déclenchement de la scène.

 

Je parle de cette option

038E5545-7958-4075-AE3A-79B0B8485934.jpeg.55c4c5b6420b8a0e2c61d5d0d5b84d97.jpeg

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour en ce beau matin !

 

Oui, l'option "Allow..." est bien sur YES (mais il me semble que pour le moment cela n'a pas d'importance, comme le restart n'est pas implémenté).

 

J'ai aussi régulièrement (à chaque redéclenchement alors que l'instance primaire est en cours) cette ligne dans le debug :

[30.08.2020] [09:11:28] [ERROR] [SCENE33]:

 

Je pense que cela correspond à ta description.

Quoi qu'il en soit, cela ne semble pas avoir d'incidence sur le déroulement de la scène, ni sur son arrêt - toujours correct.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

oui voilà c'est ça... non ça a pas d'incidences.

 

mais... c'est pas propre... B)

 

L'option peut avoir une incidence, essaye sur NO et fait des essais, tu verras que des déclenchements seront loupés...

Modifié par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

Tout à fait pas propre :22:, ça me gave profond quand je vois ça... comme disent les d'jeun's.

 

On est soumis au bon vouloir de Fibaro pour arranger cela (je parle de "restart running scene").

Je pense sincèrement qu'ils auraient pu se concentrer sur ces fonctionnalités "de base", au lieu de donner dans "l'esbrouffe pour d'autres choses moins fondamentales.

 

Mais bon, tant que ça déclenche correct...

 

Promis, je vais tester sur NO, pour voir...

 

Partager ce message


Lien à poster
Partager sur d’autres sites

salut à tous

 

j'ai une scène avec 2 device (volet roulant) 

 

pensez-vous qu'il est possible que quand j'actionne un seul volet le 98 par exemple que je ne recois pas de réaction du le 95 

{
    operator = "any",
    conditions = {
        {
            type = "device",
            id = 95,
            property = "value",
            operator = "anyValue",
            value = false,
            isTrigger = true
        },
        {
            type = "device",
            id = 98,
            property = "value",
            operator = "anyValue",
            value = false,
            isTrigger = true
        }
    }
}
local id = 95
local variable = "telegram" --- nom de la variable
local idlampe = fibaro.getName(id)  --- nom du device
local valeur = fibaro.get(id, "value")-- récupérartion de la valeur du device

fibaro.setGlobalVariable(variable,  tostring(idlampe .. " est à " .. valeur)  .. "  pourcent")

local id = 98
local variable = "telegram" --- nom de la variable
local idlampe = fibaro.getName(id)  --- nom du device
local valeur = fibaro.get(id, "value")-- récupérartion de la valeur du device
fibaro.sleep(3000)
fibaro.setGlobalVariable(variable,  tostring(idlampe .. " est à " .. valeur)  .. "  pourcent")

 

Modifié par 971jmd

Partager ce message


Lien à poster
Partager sur d’autres sites

Tout à fait.

 

Si tu n'actionnes qu'un seul device (le 98 par exemple) le trigger déclenchera la scène.

 

Par contre, ta scène va se dérouler d'une façon linéaire, c'est à dire qu'elle va exécuter toutes les lignes sans se préoccuper si le trigger est le 98 ou le 95.

 

Pour éviter cela, mets cette ligne en premier :

local ID = fibaro.get(id, "value")

Tu pourras ensuite faire la différence avec :

if ID == 98

    then ....

    elseif ID == 95

               then ...

end

 

ou plus simple s'il n'y a qu'un choix binaire :

 

if ID== 98

    then ...

    else ...

end

 

Si j'ai bien compris la scène bien sûr.

Partager ce message


Lien à poster
Partager sur d’autres sites

×