Node-RED - Text-to-Speech avec Google Home

Je souhaites partager dans ce tuto ma façon de fonctionner pour effectuer du Text-to-Speech sur mes Google Home, pour cela vous aurez besoin de l’intégration « Variable » disponible avec HACS, puis d’effectuer la configuration TTS ( Documentation ) dans Home Assistant pour obtenir le service « tts.google_say » et bien sur d’une ou plusieurs Google Home.

Dans un premier temps je vous invite à déclarer une variable qui servira à enregistrer la phrase que la Google Home devra dire (voir la documentation de l’intégration « Variable » - Documentation ) :

var:
  phrase_tts:
  friendly_name: 'Phrase TTS'
  icon: mdi:voice

Maintenant que vous avez déclaré votre variable nous allons pouvoir mettre en place le Flow qui servira à éxécuter le TTS :

  • Pour commencer je vais ajouter un Node « link in » pour pouvoir appeler mon Flow TTS depuis n’importe quel autre Flow :

image

  • Ensuite pour pouvoir activer ou non le TTS pour ne pas être dérangé si besoin, j’ai au préalable crée un « input_boolean » et je vais ajouter un Node « current_state » configuré comme suit :

image

  • Puis je vérifie que ma Google Home n’est pas en cours de lecture pour de la musique avec un Node « current_state » pour ne pas couper la musique car celle-ci ne peux pas se remettre toute seule et vous devrez relancer votre lecture :

image

  • Puis je choisis le volume adéquat avec un Node « call_service » pour le TTS car j’ai constaté que le volume de la voix TTS est inférieure au volume d’une musique normalisée :

image

  • Maintenant je lance le TTS avec un Node « call_service » configuré comme suit :

image
image

  • Ensuite j’attends avec un Node « wait_until » que la Google Home ai fini de parler et ne soit plus en statut « playing » afin de régler à nouveau un volume nominal cependant le Flow est tellement rapide que j’ai dû ajouter un Node « delay » de 2 secondes car le statut de la Google Home n’avait pas le temps de changer avant de baisser le volume ce qui donne ceci :

image

image

image

  • A la fin on obtient ceci :

Maintenant que votre Flow est prêt, vous pouvez maintenant l’appeler depuis un autre Flow pour différentes alertes, par exemple je souhaite être alerté par la voix quand ma machine à laver a terminée son cycle pour aller mettre tout ça dans le sèche linge (pour ça j’utilise un prise connectée avec la consommation en temps réel avec un sensor avec la consommation et un binary_sensor crées pour cela afin d’avoir un statut on pendant le cycle puis off quand c’est terminé en fonction de la consommation) :

  • J’ajoute un Node « events: state » et je le configure avec mon binary_sensor comme suit :

image
image

  • Ensuite on va utiliser le service « var.set » avec un Node « call_service » correspondant à l’intégration « Variable » pour choisir notre phrase de TTS :


  • Puis à l’aide maintenant d’un Node « link out » on va lancer le Flow du TTS :

image
image

  • Cela donne :

Et voilà, vous avez maintenant un Flow TTS que vous pouvez utiliser depuis d’autres Flows pour créer diverses alertes !

Bonus, pour ceux qui veulent voici mon code pour mon sensor et mon binary_sensor :

- platform: template
  sensors: 
    conso_machine_a_laver:
      value_template: '{{ states.switch.machine_a_laver.attributes.current_power_w|int }}'  
      friendly_name: 'Consommation Machine à Laver' 
      unit_of_measurement: 'w'

- platform: template
  sensors:
    machine_en_cours:
      friendly_name: "Cycle machine en cours"
      value_template: "{{(states.sensor.conso_machine_a_laver.state) | float >= 2 | float }}"
2 J'aimes

Merci pour le partage

Salut,
je viens d’appliquer ça, et c’est super propre

Merci Super

Juste petite suggestion, vu que c’est pour débuter, je trouve qu’il y a pas mal de conditions pour obtenir le résultat lors d’un premier test. (enfin pour moi c’était mon premier nodered ^^)
Je pense que pour les plus novices, partir d’une ligne simple, pour ensuite ajouter des conditions serai plus ludic.
Ce-ci dit bravo