Googlehome remplacé par Rhasspy+HA (enfin presque :o) ) en docker

Bonjour à toutes et tous,

J’espère ne pas vous encombrer avec ce partage, peut-être évident pour vous. Mais vu que j’ai pas mal galéré et que j’arrive, enfin, au résultat escompté, voici qui pourrais peut-être aider certains débutants tel que moi…
Mon projet est d’avoir une enceinte connectée 100% hors ligne (ok, c’est un oxymore).

Avec ce qu’il y a ci-dessous, vous pouvez avec des commandes vocales :

  • Faire réciter du texte à votre Rpi (donne l’heure par exemple ou répond à des questions)
  • Faire parler (morceau pré-établi) ou jouer de la musique le RPi, sans lecteur sous HA (pas réussi à configurer HA en container pour jouer de la musique, du coup Rhasspy s’en charge, en wav uniquement)
  • Commander un appareil en Zwave

Matériel :

  1. PI3B+ (le dongle Aeotec Z-Wave USB Stick Gen5 ne fonctionne pas sous le PI4, il faut le savoir et j’ai passé un peu de temps à trouver l’info…).
  2. Dongle Aeotec Z-Wave USB Stick Gen5
  3. Prise Fibaro wall plug zwave
  4. Respeaker seed 4-mic : important pour la suite car les Respeaker ne fonctionnent pas avec l’add-on Rhasspy, et donc pas avec HA OS (ni supervised).
  5. Une enceinte publicitaire avec un raccordement au Rpi en Jack 3.5mm (je n’ai pas réussi à appairer en Bluetooth).

Installation:
Vu que j’ai commencé de… zéro (je me suis mis à linux et Python sur un vieil ordi lors du confinnement…), voici un lien qui m’a beaucoup aidé pour configurer le Rpi, le reSpeaker et Rhasspy : https://www.coxprod.org/domotique/

Les containers sont installés avec les commandes (exhaustives) : https://forum.hacf.fr/t/containers-docker/5980/34?u=damien

Pour les config, il faut installer l’intégration MQTT dans HA en plus de Mosquitto.

Les tutos vidéo décrivent relativement bien comment configurer Mosquitto, les tokens etc. (entre autre https://www.youtube.com/c/JournaldeThomas/videos.

J’ai eu des soucis également avec les networks de docker : mettre Rhasspy et Mosquitto dans Bridge d’une part et d’autre part HA et Zwavejs2mqtt dans le host.

Dernier point quand on est sur docker : installer Portainer…

Automatismes:
Je modifie les fichiers YAML (configuration et automation) grâce à Portainer et la commande en ligne dans le container que celui-ci propose (le -it de la commande en ligne docker n’est pas pratique pour moi).

automations.yaml

- id: '1630703484317'
  alias: Reponse Rhasspy
  description: ''
  trigger:
  - platform: event
    event_type: rhasspy_GetTime
  condition: []
  action:
  - service: rest_command.rhasspy_speak
    data:
      payload: '{% set response %} {% if now().hour > 12 %} {% set the_hours = now().hour
        - 12 %} {% else %} {% set the_hours = now().hour %} {% endif %} il est {{
        the_hours }} heure {{ now().minute }} {% endset %} {{ response }}'
  mode: single
- id: '1636309029841'
  alias: Commande prise
  description: ''
  trigger:
  - platform: event
    event_type: rhasspy_ChangePlugState
  condition: []
  action:
  - type: toggle
    device_id: 5005bc48143f66050ab8aed121055a4a
    entity_id: switch.nodeid_3_switch
    domain: switch
  mode: single
- id: '1636909817124'
  alias: Il est l or
  description: ''       
  trigger:       
  - platform: event
    event_type: rhasspy_GetTimePlus
  condition: []                
  action:      
  - service: rest_command.rhasspy_play
    data:                              
      payload: /profiles/Media/monsignor.wav
  mode: single

et le configuration.yaml

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:

# Text to speech
tts:
  - platform: google_translate

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

#Connexion Mosquitto
mqtt:
  broker: 192.168.1.6
  username: mqtt
  password: *****votre config*******

rest_command:
  rhasspy_speak:
    url: 'http://192.168.1.6:12101/api/text-to-speech'
    method: 'POST'
    payload: '{{ payload }}'
    content_type: text/plain
  rhasspy_play:
    url: 'http://192.168.1.6:12101/api/play-wav'
    method: 'POST'
    payload: '{{ payload }}'
5 « J'aime »