Installation de satellites snips

Qu’est-ce que MQTT ?

Avant de passer à la suite, il faut que je t’explique rapidement ce qu’est MQTT car tous les échanges entre les composants snips se base là-dessus.

MQTT veut dire « Message Queuing Telemetry Transport ». En fait, c’est un protocole de messagerie de type publish/subscribe, c’est à dire publication/abonnement. On dit qu’on s’abonne à un topic.

On va essayer de prendre un exemple simple avec un facteur, des petites annonces et un lotissement de maison. Ces petites annonces sont spécialisées chacune dans une partie. Par exemple, les petites annonces immobilières, les petites annonces sur les voitures et les petites annonces sur les jouets.

chacune des maisons à la possibilité de s’abonner à 0, 1 voir à toutes les petites annonces.
Imaginons que la maison 1 souhaite poster une annonce sur la vente d’une voiture rouge 5 places diesel. Une fois l’annonce rédigée, elle appelle le facteur qui récupère l’annonce.

Le facteur va ensuite regarder la liste des maisons qui sont abonnées aux petites annonces voitures et va aller mettre cette annonce dans chacune des boites aux lettres des maisons concernées.

Et pour aller plus loin, chaque maison à la possibilité de s’abonner qu’à des petites annonces précises. Par exemple, voiture rouge coupé. dans ce cas, la maison abonnée à ce type de petites annonces ne recevra pas l’annonce que nous avons postée plus haut

Et en langage MQTT ?

Les topics sont dans ce format :

annonces/voitures/diesel/

tout est séparé par un slash  » / « . Tu remarqueras que plus tu vas vers la droite plus c’est précis. On va donc pour avoir des topics plus où moins dédiés par exemple :

annonces/voitures/diesel
annonces/voitures/essence/rouge
annonces/maison/cinq-chambres

Après, tu peux venir t’abonner à n’importe quel topic. Si tu souhaites avoir toutes les annonces sur les voitures, alors tu vas t’abonner à :

annonces/voitures/#

Et si tu veux t’abonner à toutes les petites annonces :

annonces/#

Et dans snips ?

Et bien pour snips, chaque composant va avoir son topic avec des « sous-topics » dédiés. Par exemple :

hermes/hotword : pour les mots clés
hermes/asr : Pour la reconnaissance vocale
hermes/tts : Pour la lecture du texte à haute voix

Mais pour hotword, il y’a des topics plus spécialisés comme :

hermes/hotword/< WAKEWORD_ID >/detected

A chaque fois que le composant hotword détectera le mot clé identifié par wakeword_id, alors il postera un message sur ce topic.

Derrière, il y a un composant de snips qui est abonné à ce topic et qui sait que lorsque le mot clé est détecté, c’est à lui de jouer

Voilà, j’espère que cela t’éclaire un peu plus sur MQTT. Je ne suis pas trop rentré dans les détails et j’ai parfois fait des raccourcis mais le but était que tu aies une vision générale de ce qu’est MQTT et comment ça fonctionne.

8 Comments

  1. Bonjour Ced,
    Tout d’abord, super travail que ces tutos pour la mise en place de Snips, je me suis appuyé à 99% sur tes écrits pour mettre en place mon installation (encore en phase de test pour le moment).

    En bref je dispose de :
    1 Serveur Snips master tournant sur une VM Debian 9.8
    1 Serveur Jeedom sur VM Debian 8.7
    1 Satellite Snips tournant sur un Pi Zero WH + Respeaker 2Mic + HP Mono Adafruit 3351

    Ce qui fonctionne :
    Hotword OK
    App snips Timer, Heure, Jeedom (avec config Jeedom) OK
    Réponse sur le satellite OK

    On pourrait croire que tout fonctionne, hors le soucis que j’ai est que, pour mes tests, dans une pièce au calme, sans bruit dominant (musique, ventilateurs, …) j’interpelle le satellite avec mon « Hey Snips », il réagit, mais une fois sur deux il ne va pas récupérer mon instruction.

    Un SAM WATCH n’indique rien de spécial :

    ##
    SAM WATCH qui indique que tout va bien, match sur le hotword, récupération de l’instruction, analyse et envoi des données pour traitement et réponse TTS si nécessaire
    A la fin du traitement remise en état d’attente du hotword
    ##
    [22:43:11] [Hotword] detected on site SAT01, for model hey_snips
    [22:43:11] [Asr] was asked to stop listening on site SAT01
    [22:43:11] [Hotword] was asked to toggle itself ‘off’ on site SAT01
    [22:43:11] [Dialogue] session with id ‘1fb8dab8-92df-4977-a41f-e669dcd60aa6’ was started on site SAT01
    [22:43:11] [AudioServer] was asked to play a wav of 41.1 kB with id ‘4f29f241-8721-40f9-a976-605240304eb0’ on site SAT01
    [22:43:11] [AudioServer] finished playing wav with id ‘4f29f241-8721-40f9-a976-605240304eb0’
    [22:43:11] [Asr] was asked to listen on site SAT01
    [22:43:27] [Dialogue] session with id ‘1fb8dab8-92df-4977-a41f-e669dcd60aa6’ was ended on site SAT01. The session was ended because one of the component didn’t respond in a timely manner
    [22:43:27] [Asr] was asked to stop listening on site SAT01
    [22:43:27] [Hotword] was asked to toggle itself ‘on’ on site SAT01

    Quelques secondes avant, j’ai pu appelé mon Sat, qui a réagit et a allumé mon bandeau LED « Allume le tableau ».
    Je le ré-interpelle pour cette fois lui demander de l’éteindre, le hotword match, mais aucun enregistrement n’est fait sur la commande dictée ensuite « Eteinds le tableau ». Obligé d’attendre 15 secondes de timeout pour retenter. En règle générale, ça me fait ça quasi une fois sur deux.
    Je n’ai aucune idée de la raison de cette non reconnaissance pseudo aléatoire.

    Aurais-tu une idée? Augmenter / améliorer la qualité du micro ? Lorsque je fait un arecord pour tester la qualité du micro, puis un aplay pour écouter le résultat, je trouve qu’il y a beaucoup de bruit parasite (j’ai conscience du prix réduit du respeaker, et par conséquent, des concessions qui ont dut être faites pour la fabrication).

    Merci par avance pour ton aide Ced, ou à quiquonque a déjà rencontré le problème et réussi à le corriger.

    Pesty.

  2. Bonjour
    Bonjour
    Comment avez vous resolu l envoi constant du son entre le satellite et le master ?
    Y a t il une config pour envoyer l audio qu une fous le hotword detecte ?
    Lionrl

    • Bonjour,

      Pour le moment, officiellement, il n’y a pas de solution. La solution dont je parle est une bidouille. Elle est composée de 2 snips full avec une configuration particulière de mosquitto qui retransfert certains messages sur le mosquitto du snips maître.
      Si j’ai le temps, je ferai un article là dessus, mais ça reste une bidouille avec comme principale contrainte de ne pas avoir d’actions sur les apps…

      Ced

  3. Salut Ced,
    j’ai décidément pas de bol, j’ai reçu mon pi0w, mais à chaque install il me plante tous les services ….je te bip sur Dscd

    Bien vu le tuto 😉

  4. Bonjour Cedcox,
    Super tuto, très bien détaillé. Je découvre ton site suite au post sur SNIPS pour Jeedom.

    De mon côté j’avais 1 VM OK et un rpi3 OK en mode autonome chacun.
    J’ai suivi ton tuto à la lettre et je ne sais pas pourquoi après le redémarrage j’ai quelques soucis :
    – Le fichier asound est vide à chaque redémarrage
    – Du coup logiquen: server-audio : en Not running
    – Malgré la remise en état après chaque redémarrage : pas de déclenchement après prononciation de Jarvis et donc rien dans sam watch

    J’ai mis à jour le post sur le forum jeedom pour pouvoir mettre des captures d’écrans.

    Merci 😉

Poster un Commentaire

Votre adresse de messagerie ne sera pas publiée.


*


Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.