Hello,
Je me permets de remettre ici un post que j’avais fait sur l’ancien forum avec une présentation d’utilisation de scénario callback avec SNIPS. Désolé les screens sont en Jeedom V3 mais c’est pareil
Voici donc un exemple assez simple sur un scénario en callback gérant l’allumage et l’extinction des lumières.
LightSet et LightTurnOff sont paramétrés de la même façon avec le même scénario en callback, aucun binding:
Donc scenario start, je garde les tags intent (pour différencier on/off), le slot évidemment, et le siteId pour savoir d’où vient l’appel.
Ensuite le scénario SnipsLights :
- On détecte la pièce. Là où se trouve le device Snips (master, satellite) si on ne demande pas de pièce (allume la lumière), ou le siteId.
- Ensuite j’ai un slot lights_type « tous » (avec synonyme toutes), par exemple
Allume toutes les lumières de la maison
. Dans ce cas, je passe le tag snips_room à maison.
Notez que j’utilise depuis la v3.3 des tags et plus des variables, ce qui évite de devoir supprimer les variables à la fin du scénario pour ne pas polluer mes variables. C’est tout l’intérêt des tag, ils n’existent que pendant l’exécution du scénario.
- Ensuite, un bloc SI par intent pouvant appeler le scénario. Donc ici, je filtre si je suis sur l’intent LightsSet ou LightTurnOff.
*Je vérifie aussi le nom de l’intent sans le « kiboost: » car dans ce cas, c’est un autre scénario pour les TurnOn et TurnOff qui appel celui-ci, quand je ne précise pas quoi allumer. Ex,
Allume la télé
, l’autre scénario SnipsOnOff va allumer la télé, mais si je dis
Allume la cuisine
il ne trouvera rien et va donc lancer ce scénario (SnipsLights) avec le siteId, qui lui va allumer les lumières de la cuisine.*
- Ensuite pour chaque intent, j’utilise des matches et je check si c’est éteint, allumé etc. J’utilise des matches car plusieurs slots peuvent allumer la même lumière. Par exemple
allume la cuisine
va allumer la cuisine, mais
allume en bas
va aussi allumer la cuisine, et le salon.
Allume les lumières de la maison
allumera tout, etc. La même lumière doit donc répondre à plusieurs slots, d’où les matches.
Un autre exemple sur un scénario qui gère le volume de la musique.
Il répond aux commandes, par ex:
Monte le son, augmente vraiment le volume, coupe le son (mute), baisse un peu le son, etc…
J’ai donc un ratio par défaut, et si j’ai un tag ratio (un peu, beaucoup etc) je change le ratio. Puis comme pour les lumières, je filtre l’intent (up/down), et je gère le volume avec le ratio.
Même principe pour des volets, où je peux donner une valeur
Ouvre le volet du pignon à 60
ou un ratio
Ferme un peu les volets
Allez on pousse encore un peu, avec un truc super pratique que j’ai mis en place, et infaisable sans un assistant vocal.
Cà nécessite d’avoir d’autres scénarios d’allumage extinction etc mais l’exemple est pas mal je trouve.
Cas concrets :
- Vous avez des lumières qui s’allument toutes seules sur mouvement. Super, pratique, la classe ok… Et là, paf, gâteau d’anniversaire, il faut du noir, mais tout le monde bouge !! Pas top de sortir son smartphone et trouver le scénario d’allumage pour le couper, puis éteindre, et idem dans l’autre sens après…
- Autre cas, votre fils va au lit, il ne peux plus allumer sa lumière car il est trop tard (oui çà aussi c’est géré avec son interrupteur), mais il arrive pas à dormir et vous souhaitez rallumer sa lumière un petit moment. Facile, homebridge ou autre, mais pouf vous oubliez de l’éteindre ensuite et le petit passe la nuit avec sa lumière allumée…
- Ambiance intime, bougies, ben pas de lumières alors …
J’ai donc crée dans la console deux intents, LightTimeOn et LightTimeOff, qui sont un peu comme les LightSet et LightTurnOff mais avec un slot duration. Ex:
Éteins la lumière de la cuisine pendant 5 minutes
Allume la lumière de Buzz l’éclair pendant 20 minutes
(Non je n’ai pas appelé mon fils comme çà…)
Laisse éteins en bas pendant deux heures.
etc…
Évidemment, j’ai des hotwords personnalisés, et à partir d’une certaine heure, mon fils ne peux plus demander d’allumer la lumière, le scénario saura que c’est lui qui fait la demande et lui répondra de demander à ses parents !
Ensuite, mon scénario callback, même principe.
Allume la cuisine pendant 20 minutes
Le slot duration est passé en secondes, on check si on allume la cuisine, la maison, en bas etc… (matches)
On coupe la variable autoOff de la pièce (çà c’est un autre scénario qui gère l’extinction si pas de mouvement ou luminosité, donc là il éteindra pas car autoOff à zero)
On préviens qu’on laisse allumé x minutes (je gère le tts avec un script, pour gérer pas mal de truc comme les virgules, les moins etc)
Puis dans x minutes, on remet la variable autoOff à 1 pour reprendre le cours normal des opérations.
Pour la lumière de mon fils, le DANS fais une extinction après le délai.
On gère donc les anniversaires, le petit qui veux lire un peu, la soirée bougies, etc etc …
On pourrait écrire un bouquin là dessus, j’ai essayé de rester succinct tout en donnant assez d’éléments pour comprendre le principe.
Après, c’est ma façon de faire, rien d’universel, à chacun de faire comme il le sent !