Aller au contenu

Trigger de scène : besoin d’explications


jjacques68

Recommended Posts

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...

 

 

Lien vers le commentaire
Partager sur d’autres sites

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},
	}
}

 

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

[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

Lien vers le commentaire
Partager sur d’autres sites

@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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 .

Lien vers le commentaire
Partager sur d’autres sites

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 !

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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é par jjacques68
Lien vers le commentaire
Partager sur d’autres sites

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 ;)

 

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

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é par jjacques68
Lien vers le commentaire
Partager sur d’autres sites

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é par jjacques68
Lien vers le commentaire
Partager sur d’autres sites

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" :60:

Lien vers le commentaire
Partager sur d’autres sites

à 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...

 

Lien vers le commentaire
Partager sur d’autres sites

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é par jjacques68
Lien vers le commentaire
Partager sur d’autres sites

Lol, je crois bien que c'est moi qui ne comprends pas ce que tu me dis :94:

 

En effet les 3 bloques sont dans le all

 :98:

Lien vers le commentaire
Partager sur d’autres sites

Je ne suis pas certain que le isTrigger = false soit utile, par défaut si non précisé c'est false.

Lien vers le commentaire
Partager sur d’autres sites

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},        
            }
        }
    }
}

 

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...