[Assist] Communiquer avec Home Assistant

Bonjour à tous,

EDIT Décembre 2023: J’ai repris le sujet que j’avais mis de côté, et comme ça reste un peu complexe, je vais mettre quelques pistes pour démarrer.

Pour fonctionner, le système à besoin:

d’un micro, par exemple celui-ci:
https://www.amazon.fr/Haut-Parleur-Microphone-conférence-Enhancement-Microphones/dp/B09FJ7LWX4

D’installer les composants suivants:

Le protocole de communication nécessaire entre tous les composants: Wyoming

Le gestionnaire du micro: Microphone Assist

Un composant de conversion de Voix en Texte (Speech To Text STT): pour reconnaître les messages vocaux:

Un composant de conversion de Texte en Voix (Text to Speech TTS): pour que HA puisse répondre:

Un composant de déclenchement sur mot-clef (l’équivalent du Hey Google, Alexa ou Siri)

Et paramétrer le tout dans Home Assistant.

Pour les phrases reconnues:

Et merci @Krull56 pour le support :slight_smile:


Message original février 2023:

Vous avez réussi à communiquer avec votre HA via le nouvel assistant Assist disponible avec la version 2023.2 ?

Pour un interrupteur (switch):

J’ajoute une certaine méfiance avec ces systèmes automatiques, par exemple j’ai des tas de prises qui commandent des tas d’appareils, si je dis « Eteins toutes les prises » et qu’il me comprend, il va éteindre mon routeur, mon HA, ma box et tutti quanti…

Salut,
je viens d’essayer et pareille. En français et anglais ou cas ou.

Edit:
c’est bon :stuck_out_tongue:
talk HA2

Faut regarder les setences ( phrases ) utiliser pour le FR

allumer light:

language: fr
intents:
  HassTurnOn:
    data:
      - sentences:
          - "<allume> [toutes] (<lumiere> | <lumieres>) (dans | du | de) <area>"
        slots:
          domain: "light"

Eteindre light:

language: fr
intents:
  HassTurnOff:
    data:
      - sentences:
          - "<eteins> [toutes] (<lumiere> | <lumieres>) (dans | du | de) <area>"
        slots:
          domain: "light"
1 « J'aime »

Bonjour,

Je viens d’utiliser ‹ Assist › qui offre pas mal de possibilités.
Mais je rencontre un problème pour une requête qui concerne plusieurs entités dans la même pièce ( area ?)

Par exemple :
éteins les lumières fonctionne correctement.

Mais j’ai plusieurs lumières dans le garage et la requête :
éteins les lumières du garage retourne systématiquement → Une erreur est intervenue pendant le traitement

Une idée ?
A+
Bernard

essaye comme ca, ca fonctionne: éteins toutes lumières du garage

assit toute

Hello, c’est plutôt fiable pour le moment. Après à ce stade il faut ouvrir l’assist et appuyer sur le micro pour que HA ‹ entende › :wink:
Ensuite bien définir ses alias !

Merci,
cela fonctionne après avoir revu quelques paramètres des entités. Dont:

  • définir des alias
  • changer la configuration d’interrupteurs en ‹ lights ›

Par contre j’ai encore un souci avec les groupes :
j’ai des groupes pour :

  • toutes les lumières,
  • tous les volets,

La requête ‹ éteins les lumières › fonctionne correctement.
Mais celle pour les groupes ne fait rien, mais affiche ‹ Volets fermés ›.
Le group est défini ainsi dans groups.yaml

#group:
  volets:
    name: Volets
    entities:
      - cover.roller_shutter
      - cover.roller_shutter_2
      - cover.roller_shutter_2_2
      - cover.roller_shutter_3
      - cover.roller_shutter_4

Toute suggestion est la bienvenue.
A+
Bernard

Salut à tous ! Arrivez vous à déclencher des scripts avec assist ?

Hello,

Ca fonctionne avec allume / ouvrir en sentence.

Pour info, la prochaine version de HA intègrera lance / démarre / execute en sentences complémentaires

Tu peux en attendant creer un fichier custom
Assist - Custom Sentences - Home Assistant (home-assistant.io)

language: fr
intents:
  HassTurnOn:
    data:
      - sentences:
          - "[Lance|Démarre|Exécute] [le] [script] <name>"
        requires_context:
          domain: script
        slots:
          domain: script
        response: script

@+

Edit : La sentence « démarre » fonctionne aussi :wink:

1 « J'aime »

Bonjour à tous,

N’ayant pas trop suivi les développements, ça marche l’assistant vocal ou on en est toujours au stade de la bidouille ?

Hello.

Ca fonctionne très bien !

Il manque juste une amélioration de la partie Hard (mic-array avec traitement) pour que ce soit parfait. Nabu a annoncé hier soir le dev de leur propre materiel courant 2024.

Il y a une discussion sur ce sujet avec quelques astuces ici :
Projet voice control - Entraide Home Assistant - Home Assistant Communauté Francophone (hacf.fr)

ou ici :

Year of the voice - Chapitre 5, c’est ce mercredi - Communauté HACF / BlaBlaBla & Suggestions - Home Assistant Communauté Francophone

@+

J’y vois encore de la bidouille, mais je me trompe peut-être.

Par exemple, est-ce qu’un micro comme ça pourrait fonctionner connecté sur un NUC ?

https://www.amazon.fr/CMTECK-Microphone-omnidirectionnel-ordinateurs-condensateur/dp/B07C2YX4T1/ref=sr_1_49

Si la bidouille c’est installer des addons, les configurer, parametrer HA, deployer du code sur ESPHome, alors HA n’est que bidouille :wink:

J’ai un mic de conférence ANKER sur mon nuc hebergeant HA , un satellite sur base de RPI + Respeaker4, 3 satellites sur base d’ESP32 et tout fonctionne.

Avec la dernière nouveauté du contexte , l’ensemble de mes équipements Assist vont entrer dans une autre dimension :crazy_face:

A toi de te faire ta propre idée

@+

Je suis informaticien, pas électronicien, ma limite, c’est le fer à souder… :grin:

Donc pas de souci pour installer des trucs, mais pour l’instant, la synthèse n’est pas claire pour moi.

Imaginons que j’achète le micro USB indiqué ci-dessous, quelles seraient les étapes ?

  1. Brancher le micro sur le NUC
  2. Paramétrer Promox pour faire un passthrough du micro USB vers la VM HA

Et ensuite, il faut installer quoi en synthèse ? quelles sont les étapes ?

Pour l’utilisation d’un mic usb sur HA, tu as l’info dans le chapitre 4

Year of the Voice - Chapter 4: Wake words - Home Assistant (home-assistant.io)

Ca consiste à installer l’addon Assist-Microphone

Pour la partie générale, installer wyoming , piper pour le TTS, pour le STT faster -whisper ou Vosk ( mon préféré) pour être en local sinon via l’abo nabu-casa, 1 ou plusieurs moteurs de wakeword ( openwakeword, porcupine1, porcupine, snowboy) .
Puis configurer un ou plusieurs assistants avec les pipeline/wakeword de ton choix

En effet, ça ne s’invente pas ! merci pour la synthèse :slight_smile:

1 « J'aime »

Autre question, il n’y a pas de contre-indications particulières concernant le micro ? Si je prends un combiné micro-haut-parleur comme ici, ça devrait fonctionner ?

https://www.amazon.fr/gp/product/B09FJ7LWX4/ref=ox_sc_act_title_2

C’est ce modèle que j’utilise connecté à mon NUC

1 « J'aime »

Il est conseillé de mettre à jour son firmware

1 « J'aime »

J’ai réussi à installer tout le bazar (encore merci @Krull56 pour m’avoir donné les pointeurs) et globalement ca fonctionne, sauf que l’assistate (« tournesol ») ne me laisse pas le temps de parler.

Ce qui fonctionne:

  • porcupine1 (reconnaît le mot clef « tournesol »)
  • Speak to Text: Vosk reconnaît bien ce que je dis
  • Text to Speech: Piper qui me dit bien sur le haut-parleur qu’elle n’a rien compris.

Un des problème semble venir de la partie wav qui est coupée dès qu’il y a un 10ème de seconde de blanc, voilà par exemple ce que me traduit vosk dans les log pour la phrase tournesol allume prise tulipe:

DEBUG:root:Unexpected event: type=transcribe, data={'language': 'fr'}
DEBUG:root:Loaded recognizer in 0.00 second(s)
DEBUG:root:Transcript for client 4852291918306: **tournesol aller**
DEBUG:root:Client disconnected: 4852291918306
DEBUG:root:Client connected: 4868515555377
DEBUG:root:Sent info to client: 4868515555377
DEBUG:root:Client disconnected: 4868515555377
DEBUG:root:Client connected: 4886848877064
DEBUG:root:Unexpected event: type=transcribe, data={'language': 'fr'}
DEBUG:root:Loaded recognizer in 0.00 second(s)
DEBUG:root:Transcript for client 4886848877064: tournesol
DEBUG:root:Client disconnected: 4886848877064
DEBUG:root:Client connected: 4900408908370
DEBUG:root:Unexpected event: type=transcribe, data={'language': 'fr'}
DEBUG:root:Loaded recognizer in 0.00 second(s)
DEBUG:root:Client connected: 4900850699370
DEBUG:root:Sent info to client: 4900850699370
DEBUG:root:Transcript for client 4900408908370: tournesol allume
DEBUG:root:Client disconnected: 4900408908370
DEBUG:root:Client disconnected: 4900850699370

Voilà ce que j’ai mis pour Vosk:

Pour Microphone Assist:

Et la log de Microphone Assit:

DEBUG:__main__:Waiting for speech
DEBUG:__main__:Speech detected
DEBUG:homeassistant_satellite.remote:{'type': 'auth_required', 'ha_version': '2023.12.3'}
DEBUG:homeassistant_satellite.remote:{'type': 'auth_ok', 'ha_version': '2023.12.3'}
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'result', 'success': True, 'result': None}
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'run-start', 'data': {'pipeline': '01gzmfs3e6gxksrd5v4vsqseg2', 'language': 'fr', 'runner_data': {'stt_binary_handler_id': 1, 'timeout': 300}}, 'timestamp': '2023-12-18T17:14:28.348212+00:00'}}
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'wake_word-start', 'data': {'entity_id': 'wake_word.porcupine1', 'metadata': {'format': 'wav', 'codec': 'pcm', 'bit_rate': 16, 'sample_rate': 16000, 'channel': 1}, 'timeout': 3}, 'timestamp': '2023-12-18T17:14:28.348317+00:00'}}
DEBUG:__main__:wake_word-start {'entity_id': 'wake_word.porcupine1', 'metadata': {'format': 'wav', 'codec': 'pcm', 'bit_rate': 16, 'sample_rate': 16000, 'channel': 1}, 'timeout': 3}
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'wake_word-end', 'data': {'wake_word_output': {'wake_word_id': 'tournesol', 'timestamp': 1020}}, 'timestamp': '2023-12-18T17:14:29.242428+00:00'}}
DEBUG:__main__:wake_word-end {'wake_word_output': {'wake_word_id': 'tournesol', 'timestamp': 1020}}
DEBUG:root:play ffmpeg: ['ffmpeg', '-i', '/usr/src/sounds/awake.wav', '-f', 'wav', '-ar', '22050', '-ac', '1', '-filter:a', 'volume=0.5', '-']
DEBUG:root:play: ['aplay', '-r', '22050', '-c', '1', '-f', 'S16_LE', '-t', 'raw']
Playing raw data 'stdin' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'stt-start', 'data': {'engine': 'stt.vosk', 'metadata': {'language': 'fr', 'format': 'wav', 'codec': 'pcm', 'bit_rate': 16, 'sample_rate': 16000, 'channel': 1}}, 'timestamp': '2023-12-18T17:14:29.242519+00:00'}}
DEBUG:__main__:stt-start {'engine': 'stt.vosk', 'metadata': {'language': 'fr', 'format': 'wav', 'codec': 'pcm', 'bit_rate': 16, 'sample_rate': 16000, 'channel': 1}}
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'stt-vad-start', 'data': {'timestamp': 725}, 'timestamp': '2023-12-18T17:14:29.251656+00:00'}}
DEBUG:__main__:stt-vad-start {'timestamp': 725}
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'stt-vad-end', 'data': {'timestamp': 1655}, 'timestamp': '2023-12-18T17:14:31.015415+00:00'}}
DEBUG:__main__:stt-vad-end {'timestamp': 1655}
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'stt-end', 'data': {'stt_output': {'text': 'tournesol'}}, 'timestamp': '2023-12-18T17:14:31.286421+00:00'}}
DEBUG:__main__:stt-end {'stt_output': {'text': 'tournesol'}}
DEBUG:root:play ffmpeg: ['ffmpeg', '-i', '/usr/src/sounds/done.wav', '-f', 'wav', '-ar', '22050', '-ac', '1', '-filter:a', 'volume=0.5', '-']
DEBUG:root:play: ['aplay', '-r', '22050', '-c', '1', '-f', 'S16_LE', '-t', 'raw']
Playing raw data 'stdin' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'intent-start', 'data': {'engine': 'homeassistant', 'language': 'fr', 'intent_input': 'tournesol', 'conversation_id': None, 'device_id': None}, 'timestamp': '2023-12-18T17:14:31.286499+00:00'}}
DEBUG:__main__:intent-start {'engine': 'homeassistant', 'language': 'fr', 'intent_input': 'tournesol', 'conversation_id': None, 'device_id': None}
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'intent-end', 'data': {'intent_output': {'response': {'speech': {'plain': {'speech': "Désolé, je n'ai pas compris", 'extra_data': None}}, 'card': {}, 'language': 'fr', 'response_type': 'error', 'data': {'code': 'no_intent_match'}}, 'conversation_id': None}}, 'timestamp': '2023-12-18T17:14:31.480389+00:00'}}
DEBUG:__main__:intent-end {'intent_output': {'response': {'speech': {'plain': {'speech': "Désolé, je n'ai pas compris", 'extra_data': None}}, 'card': {}, 'language': 'fr', 'response_type': 'error', 'data': {'code': 'no_intent_match'}}, 'conversation_id': None}}
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'tts-start', 'data': {'engine': 'tts.piper', 'language': 'fr_FR', 'voice': 'fr_FR-siwis-medium', 'tts_input': "Désolé, je n'ai pas compris"}, 'timestamp': '2023-12-18T17:14:31.480446+00:00'}}
DEBUG:__main__:tts-start {'engine': 'tts.piper', 'language': 'fr_FR', 'voice': 'fr_FR-siwis-medium', 'tts_input': "Désolé, je n'ai pas compris"}
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'tts-end', 'data': {'tts_output': {'media_id': "media-source://tts/tts.piper?message=D%C3%A9sol%C3%A9,+je+n'ai+pas+compris&language=fr_FR&voice=fr_FR-siwis-medium", 'url': '/api/tts_proxy/393247aa3dd2cd24b4ee2f8550489431d86f0c02_fr-fr_1e55c50379_tts.piper.mp3', 'mime_type': 'audio/mpeg'}}, 'timestamp': '2023-12-18T17:14:31.480755+00:00'}}
DEBUG:__main__:tts-end {'tts_output': {'media_id': "media-source://tts/tts.piper?message=D%C3%A9sol%C3%A9,+je+n'ai+pas+compris&language=fr_FR&voice=fr_FR-siwis-medium", 'url': '/api/tts_proxy/393247aa3dd2cd24b4ee2f8550489431d86f0c02_fr-fr_1e55c50379_tts.piper.mp3', 'mime_type': 'audio/mpeg'}}
DEBUG:root:play ffmpeg: ['ffmpeg', '-i', 'http://192.168.100.175:8123/api/tts_proxy/393247aa3dd2cd24b4ee2f8550489431d86f0c02_fr-fr_1e55c50379_tts.piper.mp3', '-f', 'wav', '-ar', '22050', '-ac', '1', '-filter:a', 'volume=0.5', '-']
DEBUG:root:play: ['aplay', '-r', '22050', '-c', '1', '-f', 'S16_LE', '-t', 'raw']
Playing raw data 'stdin' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono
DEBUG:homeassistant_satellite.remote:{'id': 1, 'type': 'event', 'event': {'type': 'run-end', 'data': None, 'timestamp': '2023-12-18T17:14:31.480781+00:00'}}
DEBUG:__main__:run-end None
DEBUG:homeassistant_satellite.remote:Pipeline finished
DEBUG:__main__:Waiting for speech

Une piste ? une idée ? une confif à me proposer de tester ?

Merci à tous !

Hello

Dans la config de Assist-Microphone , j’ai -1 dans le wake buffer seconds (et pas 30 secondes :wink: )