Demande aide scenario gestion verrouillage porte en fonction de la présence

Bonsoir à tous,

Comme l’indique le titre, j’ai élaboré un scenario dont l’objectif est d’automatiser le verrouillage de la porte d’entrée.

Ce que j’en attends :

  • la porte se verrouille si tout le monde est absent
  • la porte se verrouille à 21:30 si il y a au moins une personne présente
  • la porte se déverrouille si quelqu’un rentre après 21:30 puis elle se reverrouille après 5 minutes
  • la porte de déverrouille à 07:00 si quelqu’un est présent

J’ai trois déclencheurs :

  • le premier à 07:00 et le second à 21:30.
  • le troisième en fonction d’une variable présence

Les présences sont obtenues grâce à 3 virtuels (téléphones + nutales focus) : un virtuel par personne + un virtuel présence globale. Ce dernier peut prendre 3 valeurs :

  • tout le monde est présent = 2
  • il y a une présence = 1
  • tout le monde est absent = 0

Voici donc le moment redouté, mon scenario :

Pensez-vous que ce scenario répond à mon attente ?

Enfin, j’ai un doute quant à la syntaxe de la dernière condition :

variable(presence) matches "/PRÉSENT/" && time_between(#time#,2130,0700) && (tag(tag_presence_philippe) matches "/ABSENT/" || tag(tag_presence_anne) matches "/ABSENTE/")

Je compte gérer ce scenario avec un mode AUTO (scenario activé) et un mode MANUEL (scenario désactivé).

Merci d’avance de vos retours.

Bonsoir,

Je ne vais pas tout dire tout de suite histoire d’avancer progressivement

Première chose qui m’interpelle : Pourquoi définir/utiliser des variables dans ton scénario ? Je n’ai pas vu d’intérêt à première vue. L’utilisation des commandes de présence du virtuel doivent justement permettre de savoir qui est là ou pas.

Deuxième chose : Un time_between qui permet de voir si c’est entre 21h30 et 21h31 ne sert à rien. Il suffira de vérifier que #time# == 2130

Troisième chose pour le moment mais c’est un conseil général : Evite d’utiliser des accents dans les tags/variables (comme PRÉSENT), c’est pas terrible

Bonsoir @Bison,

Merci pour ta réponse. Je vais commencer par le plus simple pour moi :

C’est rectifié.

J’ai mon déclencheur à 21:30 et je me suis dit que si je mettais la commande pile poil à la même heure elle risquait de ne pas s’exécuter pour quelques secondes de retard. Du coup j’ai pensé qu’un battement d’une minute me permettrait d’éviter ce problème.

C’est la partie la plus difficile pour moi. Au départ, j’avais conçu un scenario en omettant de considérer que tout le monde n’était pas forcément absent ou présent en même temps.
Quand je m’en suis rendu compte, j’ai cherché une solution en jouant uniquement sur les virtuels mais je n’y suis pas parvenu. J’ai bloqué sur la partie où une personne est présente à 21:30 et que l’autre rentre plus tard.

Tu compares l’heure actuelle #time# en heure et minute donc la comparaison sera vraie pendant 59 secondes, c’est OK donc sans compliqué les choses.

Si tu veux, reprenons (fait un autre scénario pour pas casser tout de suite ce que tu as fait) et avançons du plus simple au plus compliqué.

Donc un peu dans l’ordre :

  • la porte se verrouille si tout le monde est absent
SI #présence_globale# == 0 Alors Verrouille
  • la porte se verrouille à 21:30 si il y a au moins une personne présente
SI #time# == 2130 && #presence_globale# != 0 Alors Verrouille
  • la porte de déverrouille à 07:00 si quelqu’un est présent
SI #time# == 0700 && #presence_globale# != 0 Alors Déverrouille

Commence par ça et fait une capture stp. Est-ce que déjà pour ça tu es OK ?

C’est ce que j’avais fait dans mon premier scenario (je crois parce que je l’ai effacé) mais dans ce cas « presence_globale » peut prendre la valeur 1 ou 2. On ne sait donc pas si quelqu’un doit rentrer après 21:30. Je me trompe ?

Je commençais par traiter les 3 cas les plus simple. On a pas encore traité le cas où quelqu’un rentre entre 21h30 et 07h00, tu veux que j’en parle maintenant ?

Pardon j’ai été un peu long mais je suis allé diner. J’ai suivi ton conseil et commencé un nouveau scenario. Voilà ou j’en suis :

OK, alors il faut bien utiliser ta vraie commande de présence globale pour les SI n°1 et n°2, sinon ça marchera pas :slight_smile:

Du coup restera à traiter le dernier cas. Il y a plusieurs façon de procéder, j’en propose une.

Il va falloir savoir si le scénario est déclenché par l’une des commandes de présence afin de différencier l’action du déclenchement par le scénario => #trigger# == 'virtualCmd'

Ensuite il faudra vérifier si c’est quelqu’un qui arrive donc si la valeur de la commande vaut 1 => #trigger_value# == 1
Mais tu veux que cela ne soit le cas qu’entre 21h30 et 0700 => time_between(#time#, 2130, 0659)

Donc :

SI #trigger# == 'virtualCmd' Alors
 SI #trigger_value# == 1 && time_between(#time#, 2130, 0659) Alors
  Déverrouille

Comme ça c’est bon ?

Il ne faut pas écrire le mot « SI » dans les conditions. Je le mets pour t’indiquer qu’il faut un bloc SI mais faut pas l’écrire (du coup même chose pour les bloc de SI n°2 et n°3, j’avais pas vu tout à l’heure.

Ensuite reste plus qu’à reverrouiller après 5mn donc après l’action de Deverrouillage il faudra ajouter ce que tu avais fait dans ton autre scénario :

Dans 5 Alors Verrouille

J’ai fait des copier/coller pour ne pas me tromper et je ne l’avais pas vu non plus. J’ai rectifié et voici le résultat :

Du coup, je garde les déclencheurs programmés et je supprime celui sur événement ?

Il te manque à utiliser ta vraie commande de présence globale.

Tu pourras me montrer tes déclencheurs au passage ?

OK ça devrait être pas mal là.

Mais il te manque en déclencheur tes 2 commandes de présence Philippe et Anne afin que le scénario se déclenche quand il y a un changement de l’état de présence de l’un de vous deux.

Ben oui ! Quand on se laisse porter on ne réfléchit plus.

J’ai essayé de faire avec toi du pas à pas en suivant des étapes pour que tu comprennes. J’espère que c’est le cas et que sinon tu aurais posé des questions :slight_smile:

Restera à tester voir comment ça se comporte. Si les commandes d’états suivent bien la réalité de votre présence ça devrait aller mais il pourrait y avoir des petites choses à rectifier … faut voir.

Si besoin d’aide il faudra bien mettre les logs du scénario en indiquant la réalité du terrain pour que l’on puisse analyser et adapter un peu au besoin

J’ai modifié l’heure de verrouillage à 22:30 pour pouvoir tester tout de suite.
Pour le reste je te tiendrai au courant demain.
En attendant, je te remercie beaucoup et je te souhaite une bonne fin de soirée

La première partie a très bien fonctionné.

[2026-02-02 22:30:08][SCENARIO] -- Début : . Tags : {"#trigger#":"schedule","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Scénario exécuté automatiquement sur programmation","#trigger_value#":null}
[2026-02-02 22:30:08][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Appartement][Présence globale (V)][Etat]# == 0
[2026-02-02 22:30:08][SCENARIO] Evaluation de la condition : [2 == 0] = Faux
[2026-02-02 22:30:08][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-02-02 22:30:08][SCENARIO] - Exécution du sous-élément de type [condition] : if #time# == 2230 && #[Appartement][Présence globale (V)][Etat]# != 0
[2026-02-02 22:30:08][SCENARIO] Evaluation de la condition : [2230 == 2230 && 2 != 0] = Vrai
[2026-02-02 22:30:08][SCENARIO] - Exécution du sous-élément de type [action] : then
[2026-02-02 22:30:09][SCENARIO] Exécution de la commande [Entrée][Serrure entrée][On (Verrouillage)]
[2026-02-02 22:30:09][SCENARIO] - Exécution du sous-élément de type [condition] : if #time# == 0700 && #[Appartement][Présence globale (V)][Etat]# != 0
[2026-02-02 22:30:09][SCENARIO] Evaluation de la condition : [2230 == 0700 && 2 != 0] = Faux
[2026-02-02 22:30:09][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-02-02 22:30:09][SCENARIO] - Exécution du sous-élément de type [condition] : if #trigger# == 'virtualCmd'
[2026-02-02 22:30:09][SCENARIO] Evaluation de la condition : ["schedule" == 'virtualCmd'] = Faux
[2026-02-02 22:30:09][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-02-02 22:30:09][SCENARIO] Fin correcte du scénario

Bonjour @Bison,

Voici un premier point sur ce qui fonctionne :

  • verrouillage de la porte à 21:30 si il y a une présence
  • déverrouillage de la porte à 07:00 si il y a une présence
  • verrouillage de la porte quand tout le monde est absent

Ce qui n’a pas fonctionné :

  • déverrouillage de la porte quand nous sommes rentrés

Voici le log du scenario quand on est sorti (11:45) puis quand on est rentré (11:59) :

[2026-02-03 11:45:24][SCENARIO] -- Début : . Tags : {"#trigger#":"virtualCmd","#trigger_name#":"[Appartement][Présence Anne (V)][Etat]","#trigger_id#":14605,"#trigger_message#":"Scénario exécuté automatiquement sur événement venant de : [Appartement][Présence Anne (V)][Etat] (0)","#trigger_value#":0}
[2026-02-03 11:45:24][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Appartement][Présence globale (V)][Etat]# == 0
[2026-02-03 11:45:24][SCENARIO] Evaluation de la condition : [0 == 0] = Vrai
[2026-02-03 11:45:24][SCENARIO] - Exécution du sous-élément de type [action] : then
[2026-02-03 11:45:24][SCENARIO] Exécution de la commande [Entrée][Serrure entrée][On (Verrouillage)]
[2026-02-03 11:45:24][SCENARIO] - Exécution du sous-élément de type [condition] : if #time# == 2130 && #[Appartement][Présence globale (V)][Etat]# != 0
[2026-02-03 11:45:24][SCENARIO] Evaluation de la condition : [1145 == 2130 && 0 != 0] = Faux
[2026-02-03 11:45:24][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-02-03 11:45:24][SCENARIO] - Exécution du sous-élément de type [condition] : if #time# == 0700 && #[Appartement][Présence globale (V)][Etat]# != 0
[2026-02-03 11:45:24][SCENARIO] Evaluation de la condition : [1145 == 0700 && 0 != 0] = Faux
[2026-02-03 11:45:24][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-02-03 11:45:24][SCENARIO] - Exécution du sous-élément de type [condition] : if #trigger# == 'virtualCmd'
[2026-02-03 11:45:24][SCENARIO] Evaluation de la condition : ["virtualCmd" == 'virtualCmd'] = Vrai
[2026-02-03 11:45:24][SCENARIO] - Exécution du sous-élément de type [action] : then
[2026-02-03 11:45:24][SCENARIO] Exécution d'un bloc élément : 653
[2026-02-03 11:45:24][SCENARIO] - Exécution du sous-élément de type [condition] : if #trigger_value# == 1 && time_between(#time#, 2130, 0659)
[2026-02-03 11:45:24][SCENARIO] Evaluation de la condition : [0 == 1 && 0] = Faux
[2026-02-03 11:45:24][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-02-03 11:45:24][SCENARIO] Fin correcte du scénario
------------------------------------
[2026-02-03 11:59:34][SCENARIO] -- Début : . Tags : {"#trigger#":"virtualCmd","#trigger_name#":"[Appartement][Présence Anne (V)][Etat]","#trigger_id#":14605,"#trigger_message#":"Scénario exécuté automatiquement sur événement venant de : [Appartement][Présence Anne (V)][Etat] (1)","#trigger_value#":1}
[2026-02-03 11:59:34][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Appartement][Présence globale (V)][Etat]# == 0
[2026-02-03 11:59:34][SCENARIO] Evaluation de la condition : [2 == 0] = Faux
[2026-02-03 11:59:34][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-02-03 11:59:34][SCENARIO] - Exécution du sous-élément de type [condition] : if #time# == 2130 && #[Appartement][Présence globale (V)][Etat]# != 0
[2026-02-03 11:59:34][SCENARIO] Evaluation de la condition : [1159 == 2130 && 2 != 0] = Faux
[2026-02-03 11:59:34][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-02-03 11:59:34][SCENARIO] - Exécution du sous-élément de type [condition] : if #time# == 0700 && #[Appartement][Présence globale (V)][Etat]# != 0
[2026-02-03 11:59:34][SCENARIO] Evaluation de la condition : [1159 == 0700 && 2 != 0] = Faux
[2026-02-03 11:59:34][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-02-03 11:59:34][SCENARIO] - Exécution du sous-élément de type [condition] : if #trigger# == 'virtualCmd'
[2026-02-03 11:59:34][SCENARIO] Evaluation de la condition : ["virtualCmd" == 'virtualCmd'] = Vrai
[2026-02-03 11:59:34][SCENARIO] - Exécution du sous-élément de type [action] : then
[2026-02-03 11:59:34][SCENARIO] Exécution d'un bloc élément : 653
[2026-02-03 11:59:34][SCENARIO] - Exécution du sous-élément de type [condition] : if #trigger_value# == 1 && time_between(#time#, 2130, 0659)
[2026-02-03 11:59:34][SCENARIO] Evaluation de la condition : [1 == 1 && 0] = Faux
[2026-02-03 11:59:34][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-02-03 11:59:34][SCENARIO] Fin correcte du scénario

A première vue, je dirais que j’ai oublié d’envisager qu’on puisse rentrer ensemble à n’importe quelle heure. J’en déduis qu’il faudrait ajouter #présence_globale# en déclencheur mais sans aucune certitude.

Plus que « ensemble » c’est surtout la possibilité de déverrouiller quand quelqu’un rentre en dehors de la plage 21h30 → 0659 qui n’est pas encore considéré.

Actuellement le dernier bloc SI vérifie que quelqu’un rentre entre 21h30 et 0659, Anne ou toi pour déclencher l’ouverture et referme 5mn plus tard.

Il faut peut-être ajuster la plage horaire du coup ?

Tu voulais que la porte puisse se déverrouiller mais que quand vous êtes tous les deux là (1 déjà présent et l’autre rentre ou vous rentrez ensemble) ?