Plugin SNIPS : Scénarios Callback

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 :wink:

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 ! :grin:

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 !

:wink:

2 « J'aime »

Bonsoir kiboost,

Merci pour le partage.
Tu as quoi comme matériel pour capter la voix pour snips ?

Sur les masters et satellites, un ReSpeaker 2-Mics Pi HAT

Jamais eu de soucis et çà fonctionne très bien même de loin, çà m’avait surpris au début et au quotidien pas besoin d’autre chose.

Merci pour l’info car j’ai essayé snips à ses débuts, jarvis aussi, ainsi qu’un Google assistant diy. A chaque fois j’ai stoppé pour le captage audio qui n’arrivait pas à la cheville de ma GH même avec l’aspirateur. Le meilleur micro que j’avais à l’époque était une jabra qui fonctionnait bien pour ma compagne et 1 fois sur 2 ou 3 pour moi. Du coup ça m’avait saoulé. Mais à chaque fois j’y repense pour le côté local.

Bizarre j’ai vraiment aucun soucis. Même musique forte faut parler plus fort mais une fois le hotword detecte il coupe le son et on lui parle normalement.

Après y’a le 4 mic ou le matrix qui marchent mieux apparemment mais jamais testé car pas besoin.

Salut,

Moi perso, j’ai pris le ReSpeaker Mic Array v2.0 pour mon salon (car j’ai pas mal de surface) et j’en suis très content. J’avais testé le micro de la ps3 eye mais c’est bien pour les petites pièces.

Je voudrais te remercier, Kiboost pour ton Github de Tips sur Snips, ça m’a permis de mieux comprendre et d’ajouter des fonctionnalités qui me manquaient. Par contre, je n’ai pas vu d’options pour couper le son lors de la détection du hotword, comment tu procèdes ?

Dans les paramètres de snips tu active la variable sur détection de hotword

01

Tu fais un scénario en provoqué sur #variable(snipsMsgHotwordId)#

Le scénario vérifie si mon ampli est en route et le volume, si c’est trop fort il mute

Et à la fin de mes scénarios callbacks je check simplement, pour remettre le son si besoin :

la variable sur détection de hotword te permet aussi de récupérer qui a déclenché le hotword, si bien sur tu est en hotword perso.

Ahhh, un grand merci, j’avais fait gaffe à ça !!! :wink:

salut @kiboost et merci pour ces détails. J’utilise Snips après avoir mis en place toutes mes interaction jeedom. Du coup la plupart de mes intents sont réglés avec reaction « interaction ».


Du coup je pers le multidialogue, et je dois rappeler snips à chaque commande. Je voudrais savoir si tu as eu ce pb et si tu as pu le corriger?

merci!

Désole je n’ai jamais utilisé les interactions et ne vois pas ce que çà m’apporterai

Bonjour,

Je m’y suis remis ce WE en dédiant mon PI3 de prototypage et effectivement ça s’est pas mal amélioré !
Plutôt bien avec ma Jabra avec TV allumée aussi bien pour moi que pour madame et sans apprentissage de voix…
L’intégration du plugin est simple aussi.
J’ai utilisé pour l’instant 2 intents (Allumer une lampe et l’éteindre) et pas liée avec intéractions, mais avec le binding → Super cool et simple
Je vais donc commander un respeaker pour avoir un truc intégré et je vais mettre d’autres actions en regardant vos diverses recommandations ci-dessus…

Bonsoir kiboost,

Tu pourrais me partager tes modifs pour arriver aux nouveaux intents : LightTimeOn et LightTimeOff, que je me forme par l’exemple ?

Merci

EDIT 23/11 : J’y suis arrivé (en lisant la doc :zipper_mouth_face:)