Rhasspy et node-red

rhasspy

Bonjour à toi ami lecteur. Pour cet article, je me suis dit que j’allais te parler de Rhasspy et de node-red.

Si on devait découper en étape ce qu’on souhaite faire avec un assistant vocal, à peu de chose près, ça donnerait ça :

  1. Détection du hotword
  2. capture de la demande utilisateur
  3. Reconnaissance vocale (Speech to text)
  4. Reconnaissance de l’intention de l’utilisateur(nlu)
  5. Exécution de l’intention utilisateur
  6. Retour vocal à l’utilisateur du résultat de l’exécution de l’action.

Rhasspy fonctionne sous forme de module. En fait, à peu de chose près, pour chaque étape ci-dessus, tu as le choix de la technologie à utiliser.

Pour snips ou d’autres assistants vocaux, il y avait un store pour gérer la partie 5 « Exécution de l’intention de l’utilisateur ». Un magasin d’application. Techno devenu presque nécessaire aujourd’hui pour qu’un produit comme un assistant vocal offline se démocratise.

Je ne sais pas si avoir un magasin d’application, c’est dans la roadmap. Mais nous ne sommes pas sans rien non plus. Les plus malins et les plus futés, comme toi ami lecteur 😉 , sauront aller un peu plus loin que le détail du non store.

Je rappelle qu’aujourd’hui Rhasspy peut interagir avec :

  • Jeedom grâce au plugin de KiboOst
  • Home Assistant
  • Une application locale (scrypt python par ex.)
  • Une URL distante (post de l’intent en http)

Le petit truc qu’on va utiliser dans cet article, c’est la techno de l’URL distante. En fait, une fois l’intent et les slots récupérés, Rhasspy va mettre tout ça dans une boite sous forme de json et envoyer tout ça sur un port en écoute de ce genre de boite de json justement. Et cette boite, tu l’auras compris, c’est le protocole http.

La question est, comment s’occuper justement de cette fameuse url distante magique censée attendre notre json et ensuite exécuter l’action. Bon, le suspens est tombé depuis longtemps. Je te propose de voir comment le faire avec node-red.

Le dernier point à savoir, c’est que pour Rhasspy, si l’étape 5 renvoi une chaine de caractère selon un format particulier, alors c’est qu’il y a une chaine de texte à lire.

9 Comments

  1. Bonjour,
    eh bien j’ai du potasser un peu les principes des « Dockers » car j’ai effectivement mon Rhasspy sous docker et Node-RED sous l’environnement classique car livré avec mon Raspberry Pi OS FULL (32Bits) – bref le réseau coté Docker n’est pas tout à fait ce que je pensais .
    après moult péripéties, finalement, ma soluce à été de créer un macvlan afin que mon Rhasspy[Docké] puisse joindre le réseau local (eth0)
    $ docker network create -d macvlan \
    –subnet=192.168.1.0/24 \
    –gateway=192.168.1.1 \
    -o parent=eth0 my-macvlan-net
    ce qui donne :
    docker network ls
    NETWORK ID NAME DRIVER SCOPE
    4cb908bd20ea bridge bridge local
    fafc959be3eb host host local
    0709ee34b3ad my-macvlan-net macvlan local
    9f87a5a688ff none null local

    J’ai donc modifié le remote URL de l’Intent Handling par « http://192.168.16:1880/GestionIntent » et j’ai pu enfin voir mon objet dans la fenêtre debug de Node-RED …

    Merci pour la piste 😉

    Pascal

  2. Bonjour,
    J’ai quelques soucis de communication entre Rhasspy 2.5.0-pre et Node-RED
    le coté Rhasspy me semble correct voici le log (le fin)

    [DEBUG:2020-06-02 15:30:02,220] rhasspyserver_hermes: Sent 331 char(s) to websocket
    [DEBUG:2020-06-02 15:30:02,214] rhasspyserver_hermes: Handling NluIntent (topic=hermes/intent/disBonjour, id=7d377247-031a-4549-8a78-cbfc3743fb69)

    Mais le silence dans le log de Node-RED déployé …
    ma config Remote URL de Rhasspy -> http://127.0.0.1:1880/endpoint/GestionIntent
    (j’ai bien nommé le node ainsi maj/min)
    Je vais essayer de tester autrement le Node-RED pour valider celui-ci …
    Merci,
    Au fait « Ce site est vraiment formidable ! »
    Pascal

    Je vias continuer à chercher mais si vous avez une idée …

    • Bonjour Pascal,

      Comme ça, pas simple de voir ce qui cloche mais ce que j’essaierai dans un premier temps c’est juste de mettre le composant HTTP (ecoute intent) et juste derrière, le composant debug (msg.payload).
      Cela permettra juste de savoir si Rhasspy a bien envoyé quelque chose.
      Une autre chose aussi qui peut être tenter c’est d’accéder à l’URL depuis un navigateur (Internet explorer, chrome, edge ou firefox).

      Si il n y a toujours rien qui apparait dans la console de debug, alors cela serait plus « réseau » (firewall etc.)

      Autre point, si tu es avec Docker pour Rhasspy, il y a peut être une config réseau à configurer. Mais comme je n’utilise pas Docker…

      Voilà quelques pistes à étudier 🙂

      Ced

  3. Bonjour, vraiment super boulot j’adore !

    Je tente le coup avec node red et je n’arrive pas à connecter rhasspy à celui-ci.

    J’ai un pi4 maître basé sur hassio (hass + rhasspy + node red) et un satellite pi0 basé raspbian buster avec juste rhasspy.

    Bon an mal an, j’arrive à progresser un peu même si certaines choses restent floues dans ma tête sur qu’est-ce qui gère quoi et comment…

    Dans la section « Use a remote HTTP server to handle intents » je peux y mettre l’url
    Dans tout ça je bute sur un méchant problème : node-red ferme la porte à rhasspy d’un « 401 Client Error: Unauthorized for url: http://jarvis.lan:1880/gestionIntent« .
    En joignant directement cette adresse avec un browser j’obtiens toujours un écran de login.
    J’ai tenté le coup avec localhost à la place de jarvis.lan et j’obtiens ceci : HTTPConnectionPool(host=’localhost’, port=1880): Max retries exceeded with url: /gestionIntent (Caused by NewConnectionError(‘: Failed to establish a new connection: [Errno 111] Connection refused’))

    Ce qui paraît pire. Ce message mène à d’autres fils de discussions relatifs à des BDD
    Mon google-fu ne m’a été d’aucune aide.
    J’ai vu que Frenck (le dev de l’addon) a prévu une option « leave_front_door_open » mais ça ne me plaît que modérément.
    En activant cette option, le problème d’accès est (temporairement) réglé.
    J’ai vu ensuite qu’il avait prévu le préfixe /endpoint, avec localhost j’ai toujours le message « Max retries », avec jarvis.lan j’obtiens un 404 -_-

    Je suis évidemment une bille avec node-red, mais vu le morceau j’ignore si je dois chercher dans node red, ou bien dans le module supervisor, dans une option docker ou dans les intégrations hassio

    Je précise que je ne manque pas de redémarrer les plugins après modif et que je n’ai pas oublié de cliquer sur « deploy ».

    Pierre

  4. Bonjour bravo pour la qualité de votre site et merci pour le partage….
    Après une lecture rapide de l’ensemble des tuto sur Rhasspy , je vais reprendre depuis le début ….
    Une question : avez vous déjà testé rhasspy sur raspberry pi4 ?
    merci d’avance

    • Bonjour,

      Moi, non, mais d’autres personnes oui et elles n’ont pas eu de soucis. Et il y a beaucoup de monde aujourd’hui teste rhasspy avec le pi 4.

      Ced

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.