Aller au contenu
jjacques68

Trigger de scène : besoin d’explications

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

 

 

Partager ce message


Lien à poster
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},
	}
}

 

Partager ce message


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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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 ?

Partager ce message


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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


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

Partager ce message


Lien à poster
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

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Avec quelle scène / déclaration ?

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour la journée, il faut bien un all, mais pour la nuit il faut un any.

Partager ce message


Lien à poster
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:

Partager ce message


Lien à poster
Partager sur d’autres sites
à l’instant, Krikroff a dit :

l'opérateur par défaut est donc "any"

non c'est le premier "all"

Partager ce message


Lien à poster
Partager sur d’autres sites
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...

Partager ce message


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

 

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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:

Partager ce message


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

Partager ce message


Lien à poster
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},        
            }
        }
    }
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites
à 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...

 

Partager ce message


Lien à poster
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
                }
            }
        }
    }
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×