jjacques68 Posté(e) le 3 avril 2020 Signaler Posté(e) le 3 avril 2020 hello ! je viens d’éplucher un exemple de trigger de scène, trouvé sur le la page d’aide de fibaro : { operator = "all", conditions = { { type = "device", id = 54, property = "value", operator = "==", value = true, isTrigger = true }, { operator = "any", conditions = { { type = "date", property = "sunset", operator = ">=", value = 0 }, { type = "date", property = "sunrise", operator = "<=", value = 0 } } } } } en le lisant, on comprend assez facilement son fonctionnement : si le device 54 passe à true ET que l’on est la nuit, alors la scène est triggée. Ce qui me dérange c’est les conditions du sunset/sunrise : 1- il y a le symbole ‘’>=‘‘ ; ‘’<=‘’ et plus haut dans la page d’aide dans les explications, ils ne parlent que du symbole == 2- l’operator = ‘any’, il ne devrait pas être = ‘all’ ? -> si l’heure est > couché ET < levé. et non : si l’heure est > couché OU < levé je dis ça parce que je rencontre des soucis avec ce type de trigger... et j’ai un doute...
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 Après des essais, Concernant les symboles de comparaison, c'est OK. les ">", ">=", "<", "<=" ça passe. Concernant le "any"/"all" : Je maintiens ce que je dis, à savoir qu'il faut que ce soit un "all" et non un "any" : { operator = "all", conditions = { {type = "date", property = "sunset", operator = ">=", value = 0}, {type = "date", property = "sunrise", operator = "<=", value = 0}, } }
Barelle Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 Ben non, à minuit, on est au milieu de la nuit . Donc entre le coucher du soleil et minuit, c'est la nuit, OU, entre minuit et le lever du soleil. Une seule de ces conditions suffit.
Krikroff Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 [mention]jjacques68 [/mention] je ne suis pas certain de te suivre c’est quoi exactement le problème avec all / any ?Envoyé de mon iPhone en utilisant Tapatalk
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 @Krikroff ben si je mets « any », j’ai pas le résultat voulu. les conditions sont comme « ignorées ». Avec « all » ça correspond à ce que souhaite (mais du coup n’est pas en phase avec l’exemple de fibaro) Il y a 2 heures, Barelle a dit : Donc entre le coucher du soleil et minuit, c'est la nuit, OU, entre minuit et le lever du soleil. Une seule de ces conditions suffit. euh, alors là suis pas sûr ! y a pas de minuit dans l’histoire ! où tu vois ça ?
Krikroff Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 Il y a 6 heures, jjacques68 a dit : Je maintiens ce que je dis, à savoir qu'il faut que ce soit un "all" et non un "any" : { operator = "all", conditions = { {type = "date", property = "sunset", operator = ">=", value = 0}, {type = "date", property = "sunrise", operator = "<=", value = 0}, } } Hum.. si cela fonctionne c'est un bug alors... Car je ne vois pas de trigger dans ta déclaration rien à voir avec l'opérateur si tu veux mon avis .
Barelle Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 Dans ma compréhension, all correspond à un et logique des conditions et any à un ou logique. A une heure du matin, nous sommes bien avant le lever du soleil et avant le coucher du soleil, donc avec all la condition n'est pas remplie, ce n'est pas la nuit ! 1
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 (modifié) ah mais j'avais pas tout mis, voici le complet : { operator = "all", conditions = { --au moins un des 3 capteurs LUX <= 3000 (le max) { operator = "any", conditions = { {type = "device", id = 369, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 376, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 385, property = "value", operator = "<=", value = 3000, isTrigger = true}, } }, --ET en journée {type = "date", property = "sunrise", operator = ">", value = 0, isTrigger = false}, {type = "date", property = "sunset", operator = "<", value = 0, isTrigger = false}, } } ou comme ça, mais c'est pareil : { operator = "all", conditions = { --au moins un des 3 capteurs LUX <= 3000 (le max) { operator = "any", conditions = { {type = "device", id = 369, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 376, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 385, property = "value", operator = "<=", value = 3000, isTrigger = true}, } }, --ET en journée { operator = "all", conditions = { {type = "date", property = "sunrise", operator = ">", value = 0, isTrigger = false}, {type = "date", property = "sunset", operator = "<", value = 0, isTrigger = false}, } } } } Modifié le 4 avril 2020 par jjacques68
Krikroff Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 Ok, mais... Cela ne peut toujours pas fonctionner il y a 20 minutes, jjacques68 a dit : --ET en journée { operator = "all", conditions = { {type = "date", property = "sunrise", operator = ">", value = 0, isTrigger = false}, {type = "date", property = "sunset", operator = "<", value = 0, isTrigger = false}, } } impossible à réaliser ... (les deux conditions ne peuvent être réalisées simultanément) il faut obligatoirement un any (l'une ou l'autre des conditions) il y a 20 minutes, jjacques68 a dit : { operator = "all", conditions = { --au moins un des 3 capteurs LUX <= 3000 (le max) { operator = "any", conditions = { {type = "device", id = 369, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 376, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 385, property = "value", operator = "<=", value = 3000, isTrigger = true}, } }, --ET en journée {type = "date", property = "sunrise", operator = ">", value = 0, isTrigger = false}, {type = "date", property = "sunset", operator = "<", value = 0, isTrigger = false}, } } Je pense que tu as un problème de copier/coller ceci il manque des chose ici, cette déclaration ne passera certainement pas à l'enregistrement dans ta scène 1
Krikroff Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 Je pense comprendre ce qui te poses problème, l'opérateur global étant "all" si tu ne précise pas un "any" au niveau du bloque sunset/sunrise (bien que n'étant pas un trigger) alors la scène essaie de valider l'intégralité des conditions, ce qui est parfaitement logique.
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 et pourtant : [DEBUG] 04.04.2020 14:56:51: Moyenne = 1545.3333333333 / Est = 2350.0 / Sud = 52.0 / Ouest = 2234.0 [DEBUG] 04.04.2020 14:56:56: Moyenne = 2191.0 / Est = 2350.0 / Sud = 1989.0 / Ouest = 2234.0
Krikroff Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 Avec quelle scène / déclaration ?
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 (modifié) nan mais suis désolé, mais je maintiens mes conditions de déclenchement : { operator = "all", conditions = { --au moins un des 3 capteurs LUX <= 3000 (le max) { operator = "any", conditions = { {type = "device", id = 369, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 376, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 385, property = "value", operator = "<=", value = 3000, isTrigger = true}, } }, --ET en journée {type = "date", property = "sunrise", operator = ">", value = 0, isTrigger = false}, {type = "date", property = "sunset", operator = "<", value = 0, isTrigger = false}, } } Modifié le 4 avril 2020 par jjacques68
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 (modifié) et ça me semble cohérant, les conditions sunset et sunrise sont justement des conditions ! pas des trigger ! il faut que l'on soit après le sunrise ET avant le sunset ! donc: (capteurs LUX 1 OU capteurs LUX 2 OU capteurs LUX 3) ET après le sunrise ET avant le sunset Modifié le 4 avril 2020 par jjacques68
Barelle Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 Pour la journée, il faut bien un all, mais pour la nuit il faut un any.
Krikroff Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 Ok si ça marche c'est parfait Mais.. je ne vois pas la différence avec l'exmple de Fibaro, tu n'as pas d'opérateur dans tes bloques sunrise et sunset, l'opérateur par défaut est donc "any"
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 à l’instant, Krikroff a dit : l'opérateur par défaut est donc "any" non c'est le premier "all"
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 il y a 2 minutes, Barelle a dit : Pour la journée, il faut bien un all, mais pour la nuit il faut un any. je teste ce soir...
Krikroff Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 à l’instant, jjacques68 a dit : non c'est le premier "all" Tu ne comprends pas ce que je te dis. Il faut logiquement un opérateur par bloque , si pas d'opérateur alors c'est "any" par défaut...
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 (modifié) ben la je comprends pas non... j'ai un premier bloc avec l'opérateur "all" avec un deuxième bloc avec l'opérateur "any", qui se trouve dans le premier bloc... je peux le ré écrire comme ça, mais c'est pareil : l'équation reste identique... { operator = "all", conditions = { --au moins un des 3 capteurs LUX <= 3000 (le max) { operator = "any", conditions = { {type = "device", id = 369, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 376, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 385, property = "value", operator = "<=", value = 3000, isTrigger = true}, } }, --ET en journée { operator = "all", conditions = { {type = "date", property = "sunrise", operator = ">", value = 0, isTrigger = false}, {type = "date", property = "sunset", operator = "<", value = 0, isTrigger = false}, } } } } Modifié le 4 avril 2020 par jjacques68
Krikroff Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 Lol, je crois bien que c'est moi qui ne comprends pas ce que tu me dis En effet les 3 bloques sont dans le all
Krikroff Posté(e) le 4 avril 2020 Signaler Posté(e) le 4 avril 2020 Je ne suis pas certain que le isTrigger = false soit utile, par défaut si non précisé c'est false.
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 Faut avouer que c'est une logique un peu particulière... en plus maintenant je décale le sunset sunrise { operator = "all", conditions = { --au moins un des 3 capteurs LUX <= 3000 (le max) { operator = "any", conditions = { {type = "device", id = 369, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 376, property = "value", operator = "<=", value = 3000, isTrigger = true}, {type = "device", id = 385, property = "value", operator = "<=", value = 3000, isTrigger = true}, } }, --ET en journée (attention décalage de 14 minutes voir la scène Light - Sun Set/Rise)) { operator = "all", conditions = { {type = "date", property = "sunrise", operator = ">", value = -14, isTrigger = false}, {type = "date", property = "sunset", operator = "<", value = 14, isTrigger = false}, } } } }
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 à l’instant, Krikroff a dit : par défaut si non précisé c'est false oui oui tout a fait, c'est juste pour la lisiblité du code, histoire d'être clair...
jjacques68 Posté(e) le 4 avril 2020 Auteur Signaler Posté(e) le 4 avril 2020 ben c'est ce que je soulevait dans le premier post, Mais si tu regardes l'exemple donné plus bas, qui m'a fait démarrer ce sujet : Citation 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 { operator = "all", conditions = { { type = "device", id = 54, property = "value", operator = "==", value = true, isTrigger = true }, { operator = "any", conditions = { { type = "date", property = "sunset", operator = ">=", value = 0 }, { type = "date", property = "sunrise", operator = "<=", value = 0 } } } } }
Messages recommandés