Satellite MQTT M5 Atom Echo

Bonjour,
Voici ma configuration :
J’ai un Raspberry Pi 4 supportant la fonction Rhasspy avec un micro et deux HP en USB (siteId = Salon). Je l’ai interconnecté avec un autre Raspberry supportant Jeedom et coté Jeedom, la définition dans JeeRhasspy est TTS-Salon, cela fonctionne sans problème.
Je viens d’acquèrir une M5 Atom Echo (m5-docs) et j’ai installé le système (GitHub - Romkabouter/ESP32-Rhasspy-Satellite: The repo has implementing an esp32 standalone MQTT audio streamer. Is is desinged to work as a satellite for Rhasspy (https://rhasspy.readthedocs.io/en/latest/). It supports multiple devices) qui permet de connecter le M5 Atom Echo en MQTT avec Rhasspy, satelliteid=Echo1.
Si je laisse le champ siteId des commandes TTS de Jeerhasspy à blanc, lorsque je lance une commande à partir du M5 Atom Echo, j’ai le retour son dans mon HP principal, et la commande est bien exécutée.
Si j’inique dans le champ siteId des commandes TTS de JeeRhasspy #siteId#, lorsque je lance une commande à partir du M5 Atom Echo, je n’ai plus de retour son car Jeerhasspy essaie de déterminer un satellite et poste le retour suivant :

[2023-07-07 23:19:58][DEBUG] : [jeerhasspy] event() __EVENT__: {"intent": {"name": "MediaJeedom", "confidence": 1.0}, "entities": [], "slots": {}, "text": "\u00e9teint l' audiovisuel", "raw_text": "\u00e9teint l' audiovisuel", "tokens": ["\u00e9teint", "l'", "audiovisuel"], "raw_tokens": ["\u00e9teint", "l'", "audiovisuel"], "wakeword_id": "", "site_id": "Echo1"}
[2023-07-07 23:19:58][DEBUG] : [jeerhasspy] event() --Intent Recognized: éteint l' audiovisuel --> {"name":"MediaJeedom","confidence":1}
[2023-07-07 23:19:58][DEBUG] : [jeerhasspy_intent] exec_callback_scenario() scenario: Multimédia
[2023-07-07 23:19:58][DEBUG] : [jeerhasspy_intent] get_all_scenario_tags() out:scenario tags: {"#intent#":"MediaJeedom","#confidence#":1,"#wakeword#":"","#query#":"\u00e9teint l' audiovisuel","#siteId#":"Echo1"}
[2023-07-07 23:19:58][DEBUG] : [RhasspyUtils] playFinished() jeeRhasspy:playFinished  -> Echo1
[2023-07-07 23:19:58][DEBUG] : [RhasspyUtils] _request() POST | None/api/mqtt/hermes/audioServer/Echo1/playFinished | {"siteId":"Echo1"}
[2023-07-07 23:19:58][DEBUG] : [RhasspyUtils] _request() errno: 6
[2023-07-07 23:19:58][ERROR] : [RhasspyUtils] playFinished() jeeRhasspy:playFinished error -> 6

Ce qui est normal car il ne connait pas ce siteId et j’ai un timeout au niveau de Rhasspy.
Qui pourrait m’aider à configurer correctement, soit JeeRhasspy, soit Rhasspy ?
J’ai commencé à regarder RhasspyUtils dans JeeRhasspy pour modifier et je me pose la question du pourquoi de cette partie (ligne 60 de rhasspy.utils.class.php)
/

/load profile site_id
                $url = $_uri.'/api/profile';
                $profile = self::_request('GET', $url);
                self::logger('profile: '.$profile['result']);
                $profile = json_decode($profile['result'], true);
                if (isset($profile['mqtt']['site_id'])) {
                        $masterName = explode(',', $profile['mqtt']['site_id'])[0];
                } else {
                        $masterName = 'Rhasspy';
                }
                self::createDevice($masterName, 'masterDevice');

En vous remerciant de votre support à venir

Bonjour,
Je vais me répondre à moi-même et vous donnez une solution qui fonctionne pour ce type de satellite et aussi pour l’application Rhasspy Mobile. Je ferai un post dédié pour l’application Rhasspy Mobile pour son paramétrage spécifique, mais coté Plugin c’est identique.

:skull_and_crossbones: :skull_and_crossbones: :skull_and_crossbones: :skull_and_crossbones: :skull_and_crossbones:
Attention cette procédure implique une modification de la base de données Jeedom, il est recommandé de faire une SAUVEGARDE avant de commencer.
:skull_and_crossbones: :skull_and_crossbones: :skull_and_crossbones: :skull_and_crossbones: :skull_and_crossbones:

Il faut commencer par créer un satellite « compatible » dans le plugin, je m’explique, le plugin vérifie que le satellite répond à l’adresse IP indiquée sur le port défini (standard : 12101).
N’en ayant pas, j’ai changé le nom dans le serveur Rhasspy, dit « Master » avec celui que je voulais utiliser pour mon satellite, dans mon cas ESP_Echo1 (siteId du satellite ou de l’application), celà est aussi possible de le faire avec un satellite existant « compatible ».

J’ai fait le processus d’Ajouter un satellite en donnant l’adresse de mon ancien « Master » renommé du nom de mon satellite. Une fois le satellite créé, j’ai renommé le serveur Rhasspy dit « Master » avec son vrai nom. Ne pas oublier dans Jeedom de recharger la page (information affichée temporairement dans le Plugin).
Un point à préciser, il faut laisser le satellite le champ Objet parent à la même valeur que celle du satellite Master.
Maintenant nous allons identifier l’id du satellite dans la table eqLogic, nous allons cliquer sur l’icône de ce satellite pour faire apparaître ses propriétés et nous choisissons Configuration avancée. Le champ ID unique contient l’id dans la table eqLogic. Nous quittons ce panneau et nous allons dans Jeedom,

** Réglages > Système > Configuration et sélectionnons l’onglet _OS/DB **

Nous cliquons sur « Ouvrir » de la ligne Administration de la Base de données.
Sur le constructeur SQL, nous sélectionnons la table eqLogic dans le champ FROM, nous cochons la ligne WHERE et champ id avec = valeur de l’id récupéré précédemment et exécutons la requête.
Nous obtenons en retour la composition de cet équipement.
Nous vérifions que les champs name et logicalId sont renseignés avec la valeur TTS- et le nom du satellite. Le champ object_id doit être à null, si ce n’est pas le cas nous le corrigerons. Le champ eqType_name a la valeur jeerhasspy. Le champ configuration doit contenir l’adresse IP ou le nom du serveur Rhasspy , ce qui n’est pas le cas si nous avons utilisé un satellite Rhasspy pour le créer. Nous le corrigerons.
Pour effectuer une correction, nous sélectionnons UPDATE dans le champ constructeur SQL, un formulaire s’affiche avec le résultat de la requête précédente en-dessous.
Nous allons faire un copier/coller des champs en n’oubliant pas de positionner une simple quote en début et fin de champ de type texte (varchar, mediumtext). Nous effectuons les corrections en indiquant null pour valeur du champ object_id et en modifiant l’adresse IP ou le nom dans le champ configuration et nous exécutions la requête. En cas d’erreur, il doit manquer une simple quote sur un champ texte (en début et/ou en fin).

Dès l’acceptation cette mise à jour, le satellite est opérationnel coté Jeedom.
Un point à préciser, j’utilise les fonctions Speak, DynamicSpeak en précisant le champ siteId avec la variable #siteId#. Pour la fonction Ask, j’utilise la tournure #[Aucun][TTS-#profile#][Ask]# tel que @KiboOst le précise dans la documentation, attention Aucun correspond à l’Objet parent renseigné ou non). Pour la fonction Ask, je n’entends pas le bip sur ce satellite lorsque la parole est donnée pour la réponse.

Maintenant, cela se passe sur le serveur Rhasspy :
Les items : Wake Word / Speech to Text / Intent Recognition / Text to Speech / Dialog Management et Intent Handling
doivent être renseignés avec le nom du satellite (sans le TTS-) dans le champ Satellite siteIds.

J’utilise la fonction Key Press Only en appuyant sur le bouton du satellite.

Souhaitant que cela vous aide.
Je remercie @KiboOst de ce TRES bon plugin.

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.