→Lien market
→Rhasspy Assistant Tips n Tricks
Plugin pour le support de l’assistant vocalRhasspy dans Jeedom.Vous devez au préalable avoir un assistant Rhasspy fonctionnel, en version 2.5 minimum.
Configuration du plugin JeeRhasspy
Utilisation
Configuration Rhasspy
Callback Scénario
Commandes
Scripting
Après installation du plugin, il vous suffit de l’activer.Il apparaîtra alors dans le menuPlugins > Communication.
Vous devez alors renseigner, sur la page de configuration du plugin :
#variable(rhasspyWakeWord)#
pour par exemple couper la musique le temps de votre demande.Une fois le plugin configuré, il faut une première fois importer l’assistant Rhasspy.
A l’importation, il y a trois options possible:Lors de la première importation, ces options n’ont pas d’incidence.
L’importation de l’assistant va créer :
Tip
Vous pouvez supprimer des intentions de trois façons:
- En réimportant votre assistant, suivant l’option choisie (voir ci-dessus).
- En utilisant le boutonSupprimer les intentions, qui supprimera tous vos Intents actuels du plugin.
- Sur une intention, utilisez le boutonSupprimer.
Si vous avez également dessatellites reliés à votre Rhasspy, créez les dans le plugin avec le boutonAjouter un satellite. Vous devrez renseigner l’url complète du satellite.
Pour le maître (master) et chaque satellite, vous disposez sous son icône de plusieurs boutons:
Tip
Pour nommer votre device Rhasspy, vous devez :
- Sur l’interface de Rhasspy, aller sur l’ongletSettings
- Renseigner un nom dans le champsiteId
Pour que Rhasspy envoie les événements souhaités à Jeedom, vous devez modifier son profile.
Si vous avez des satellites, il faudra le faire sur chacun d’entre eux.
Vous pouvez le faire:
Si vous utilisez l’option permettant de renseigner les variables rhasspyWakeWord / rhasspyWakeSiteId sur détection du wakeword, cochez la caseConfigurer l’event Wakeword Detected.
Pour chaque Intention (Intent), vous devez :
Tip
Vous pouvez aussi utiliser les interactions de Jeedom en cochant la caseInteraction
Voici un exemple de scénario.
Le premier bloc SI sera commun à la plupart de ce type de scénario : On veut savoir d’où vient la demande pour pouvoir la traiter correctement.house_room est un slot de rhasspy, par exemple, si on lui demande :
Allume la lumière de la cuisine
Le plugin sait donc de quelle intention il s’agit, et lance alors le scénario correspondant avec les tags suivant :
Start : Lancement provoque. Tags : {"#intent#":"lightsTurnOnJeedom","#confidence#":"1","#wakeword#":"someoneHere","#query#":"allume les lumière de la cuisine","#siteId#":"salon","#house_room#":"cuisine"}
Donc si a on pas de tag(house_room), car on peut simplement lui demander d’allumer la lumière sans préciser où, on a deux solutions :
Le deuxième bloc SI n’est pas obligatoire. Vous pouvez lancer le même scénario pour plusieurs intents, et il sert donc à filtrer l’intent souhaité.Par exemple si on veux allumer ou éteindre une lumière.
Finalement, on vérifie de quelle lumière il s’agit :SI tag(rhasspy_room) matches "/cuisine|maison/"
En matchant cuisine ou maison, on pourra aussi demander :
Allume les lumières de la maison
On peut aussi différencieren bas,en haut pour pouvoir demander :
Allume les lumières en bas
AvecSI tag(rhasspy_room) matches "/cuisine|maison|en bas/"
Et ainsi de suite …
Sur chaque device Rhasspy, il y a sept commandes:
Ces deux dernières commandes nécessitentHermesLedControl.
Les commandesSpeak etdynamic Speak disponibles sur le Master possèdent un champsiteId:lang permettant de faire parler un satellite, et dans une langue au choix. Quelques exemples :
Cette commande permet de construire un texte dynamique en fonction d’informations d’équipements dans Jeedom.
Par exemple, vous voulez demander à Rhasspy si le volet est ouvert. L’information dans Jeedom étant le pourcentage d’ouverture, ou 0 / 1, la réponse ne sera pas trèswaf (Wife Acceptance Factor).
Vous pourriez faire plusieurs blocs SI pour testant chaque possibilité et renvoyer le bon texte, mais çà complexifie énormément les scénarios.
La commandedynamic Speak va vous permettre de faire simplement :
Le volet de la salle est {#[Salon][Volet Terrasse][Etat]#|0:fermé|<99:ouvert à #[Salon][Volet Terrasse][Etat]# pourcent|99:ouvert}
Donc, on passe d’abord l’information dans un{} puis, séparés par des|, on passe les conditions si:alors avec le si comme valeur et le alors comme texte.Dès qu’une condition est trouvée, l’évaluation s’arrête. Si le volet est à 0 c’est bien ‘fermé’ qui sera énoncé, car <99 ne sera pas évalué.
Un autre exemple pour demander si une lumière est allumée ou éteinte :
La lumière est actuellement {#[Cuisine][Lumière][Etat]#|0:éteinte|1:allumée}
Vous pouvez utiliser la commande interne de JeedomAsk pour que votre Rhasspy vous pose une question, et attende votre réponse. Votre scénario pourra ensuite agir en fonction de votre réponse.
Pour cela vous devez indiquer :
Voici un exemple :
Si vous avez un maître et des satellites, la commande Ask devra correspondre au device d’où vient la demande.
Dans ce cas, créez un tag(profile) avec le siteId et écrivez la commande ask comme cela :
#[Rhasspy-Intents][TTS-#profile#][Ask]#
Jeedom changera alors automatiquement le nom de la commande avec le siteId, et la demande de confirmation Ask sera émise sur le bon device.
Les autres commandes sont des commandes simples qui ne nécessitent pas vraiment d’explications ;-)
Si vous souhaitez retrouver un device Rhasspy avec un plugin script ou dans un bloc code de scénario, voici la manière la plus simple et sûr de le retrouver :
$eqLogic=eqLogic::byLogicalId('TTS-'.config::byKey('masterSiteId','jeerhasspy'),'jeerhasspy');
$_siteId='satName';$eqLogic=eqLogic::byLogicalId('TTS-'.$_siteId,'jeerhasspy');
Comme la commandespeak du maître permet de faire parler un satellite, un petit exemple simple :
$eqLogic=eqLogic::byLogicalId('TTS-'.config::byKey('masterSiteId','jeerhasspy'),'jeerhasspy');$cmd=$eqLogic->getCmd('action','speak');$options=array('title'=>'monSatellite:es','message'=>'Como esta ?');$cmd->execCmd($options);