Envoie de message sur une enceinte Alexa Echo

Voici une petite procédure pour envoyer du texte sur des enceintes Alexa Echo.
J’ai des enceintes type Sonos (play one et une Ikea), cela fonctionne de base via l’intégration de « media-control », mais pas avec Alexa Echo …

Ayant quelques Alexa Echo je souhaitais pouvoir aussi leur envoyer un texte.

Pré-requis :

  • HA (la base)
  • Node-Red
  • Des Alexa Echo
  • Un compte Amazon qui est associé aux Echos

HA :

Création des « Entrées » necessaires pour la partie « lovelace ».
Aller dans le menu « Configuration », « Entrées », « Ajouter une entrée » :

Curseur de son :

Liste des Alexa Echo :

La zone de texte à envoyer :

Le bouton pour envoyer :

Dans un dashboard lovelace :

05

Voici le code :

type: entities
title: Envoie msg à un Alexa Echo via NodeRed
entities:
  - entity: input_text.mon_texte_pour_alexa_echo
    name: Texte à envoyer
  - entity: input_number.curseur_son_alexa_echo
    name: Volume
  - entity: input_select.ma_liste_alexa_echo
    name: Alexa Echo cible
  - entity: input_boolean.mon_inter
    name: Envoyer

Node Red :

Installer une nouvelle palette, aller dans le « menu », « settings », « palette » :

Cliquer sur « Palette », « Install », rechercher « alexa remote » puis cliquer sur « install » du module « node-red-contrib-alexa-remote2-v2 » :

Avant de voir la configuration de chaque composants, voici à quoi ressemble le flow :

Un composant « Trigger state » (le bouton d’envoi) :


Spécifique : on ne veut que le passage à « on » de l’interrupteur, on verra par la suite pourquoi.

Un composant « Current State » (le texte à envoyer) :

Un composant « Current state » (le choix de l’Echo) :

Un composant « Current state » (le niveau de son) :

Un composant « Alexa routine » (l’intelligence du module Node-Red) :



Ce qui est fait ici, c’est que le HA/Node-Red va proxifier la connexion pour récupérer le cookie de connexion pour le rejouer à chaque envoie de message.
Au premier déploiement, sous le composant « Alexa routine » il affichera de se connecter sur l’IP du HA fourni et le port dans une page Web, il faudra alors se connecter avec le compte Amazon en lien avec les Alexa Echo.

Un composant « Call service » :


Ce dernier composant sert à repasser le bouton d’envoi (input_boolean.mon_inter) en position « 0 », c’est de la cosmétique en attendant que je trouve mieux ;).

Mettre les liens entre les différents composants et faire le « Deploy » (à la première connexion, il faut ouvrir une page web avec l’IP du HA et port fourni dans la « Alexa routine »).

Retourner sur la carte « lovelace » précédemment créée et tester !

Note :

Je pense que cela à un impact sur la langue, je l’avais fait pour les voix FR avec Sonos.
Dans le « Configuraiton.yaml » :

# Text to speech
tts:
  - platform: google_translate
    language: "fr"
3 « J'aime »

Salut à tous,

J’aimerais envoyer un message sur mon Alexa Echo sans passer par NodeRed et je ne trouve nul part de tutoriel pour ça.
En plus, ce tuto datant un peu, je n’arrive pas à trouver comment, dans la nouvelle version de HA, créer

Salut,

Si tu as HACS installé il y a cette intégration qui marche pas trop mal.
Ca te permet de voir les echo sous forme de media player. Et de voir le titres joués dessus, envoyer des mesages et gérer le volume depuis HA.
On ne peut cela dit pas y streamer de la musique stockée en local.

C’est bien cette intégration que j’ai installé mais j’arrive à « jouer » du texte dessus via ce code dans Outils de développement > Services (en mode yaml) :

service: notify.alexa_media
data:
  message: Test dannonce
  target: media_player.mr_echo_dot
  data:
    type: tts

Mais lorsque je l’adapte pour être utiliser comme script comme ceci via les fichiers yaml (d’ailleurs je ne vois pas ce script apparaître dans l’IHM de HA) :

notify_alexa_salon:
  alias: Announce Alexa
  description: 'Envoi une notification sur Alexa'
  fields:
    message:
      description: 'Le contenu du message'
      example: 'La lampe est allumée !'
  sequence:
  - service: notify.media_player.mr_echo_dot
    data:
      data:
        type: announce
      message: "{{ message }}"
      target: media_player.mr_echo_dot

J’ai ce message d’erreur dans les logs de HA sans même avoir essayé de lancer ce script :

Logger: homeassistant.config
Source: config.py:454
First occurred: 13:01:14 (1 occurrences)
Last logged: 13:01:14

Invalid config for [script]: Service notify.media_player.mr_echo_dot does not match format <domain>.<name> for dictionary value @ data['sequence'][0]['service']. Got None. (See ?, line ?).

Edit : Message d’erreur corrigé :

Il fallait prendre le service notify.alexa_media_mr_echo_dot au lien de notify.media_player.mr_echo_dot, ce qui donne ceci :

notify_alexa_salon:
  alias: Announce Alexa
  description: 'Envoi une notification sur Alexa'
  fields:
    message:
      description: 'Le contenu du message'
      example: 'La lampe est allumée !'
  sequence:
  - service: notify.alexa_media_mr_echo_dot
    data:
      data:
        type: announce
      message: "{{ message }}"
      target: media_player.mr_echo_dot

Donc c’est bon ça marche?

J’avais galéré au début sur le tts car certaines fois l’assistant graphique de HA pour les appels de service avait du mal à comprendre le double niveau de data et systématiquement me l’enlevait. Mais une fois que ça roule c’est bon.

    data:
      data:
        type: announce

Maintenant, je voudrais pouvoir relier le même genre de carte @Alasta à ce service notify_alexa_salon.
Je voudrais pouvoir envoyer une annonce contenant le Texte à envoyer via Alexa lorsque je clique sur le bouton Envoyer:thinking:

Tu créé un input_text et un input_button dans les assistants.
Tu créé une automatisation qui appelle le service tts d’alexa avec en texte le input text avec comme trigger le bouton est appuyé
Tu ajoutes un carte entities avec le text et le bouton.

Ca ne marche pas ça?

Alors j’essaie de faire ce que tu m’as dit @AlexHass, c’est à dire :
J’ai créer un input_text :

announce_alexa_text:
  name: announce_alexa_text
  initial: Test dannonce Alexa

Puis un input_button :

announce_alexa_button:
  name: announce_alexa_button
  icon: mdi:bell

Puis une automation qui fait appelle à mon script notify_alexa_salon :

- mode: single
  alias: Anounce a message
  trigger:
    - platform: state
      entity_id: input_button.announce_alexa_button
  action:
    - service: script.notify_alexa_salon
      data:
        message: input_text.announce_alexa_text

qui fonctionne (si on veut …) en faisant dire à Alexa « input tiret bas texte point … ».

J’en déduis que ce n’est pas le contenu de l’input qui est lu mais le nom de la variable. J’ai essayé comme ceci mais Alexa ne dit plus rien :

message: "{{ input_text.announce_alexa_text }}"

Quelle est la syntaxe pour que l’attribut message prenne le contenu de l’input pluôt que le nom de l’input ?

Edit : J’ai trouvé la syntaxe :

- mode: single
  alias: Anounce a message
  trigger:
    - platform: state
      entity_id: input_button.announce_alexa_button
    - platform: state
      entity_id: input_text.announce_alexa_text
  action:
    - service: script.notify_alexa_salon
      data:
        message: "{{ states('input_text.announce_alexa_text') }}"

avec la carte entities qui va avec :

type: entities
title: Envoie msg à un Alexa Echo via NodeRed
entities:
  - entity: input_text.announce_alexa_text
    name: Texte à envoyer
  - entity: input_button.announce_alexa_button
    name: Envoyer

Reste plus qu’à ajouter la modification du volume via un curseur … :thinking:

Edit : Essaie d’ajout du volume

J’ai modifié mon script pour intégrer le volume comme ceci :

notify_alexa_salon:
  alias: Announce Alexa
  description: 'Envoi une notification sur Alexa'
  fields:
    message:
      description: 'Le contenu du message'
      example: 'La lampe est allumée !'
    volume:
      description: 'Le volume de l annonce'
      example: '0.4'
  sequence:
  - service: media_player.volume_set
    data:
      entity_id: media_player.mr_echo_dot
      volume_level: '0.6'
  - service: notify.alexa_media_mr_echo_dot
    data:
      data:
        type: announce
      message: "{{ message }}"
      target: media_player.mr_echo_dot

Et ça fonctionne bien mais je voudrais définir le volume de l’annonce via un input_number et je pêche sur la transformation de l’input_number :

announce_alexa_volume:
  name: Volume
  initial: 40
  min: 0
  max: 100
  step: 1

en volume « compréhensible » par le service media_player.volume_set qui est compris entre 0 et 1 en décimal.
J’ai essayé comme ceci mais sans succès :

- mode: single
  alias: Announce a message
  trigger:
    - platform: state
      entity_id: input_button.announce_alexa_send
    - platform: state
      entity_id: input_text.announce_alexa_text
    - platform: state
      entity_id: input_number.announce_alexa_volume
  action:
    - service: script.notify_alexa_salon
      data:
        message: "{{ states('input_text.announce_alexa_text') }}"
        volume: "{{ ((states('input_text.announce_alexa_volume')|int) / 100|float) }}"

et l’ajout de la variable volume dans mon script :

notify_alexa_salon:
  alias: Announce Alexa
  description: 'Envoi une notification sur Alexa'
  fields:
    message:
      description: 'Le contenu du message'
      example: 'La lampe est allumée !'
    volume:
      description: 'Le volume de l annonce'
      example: '0.4'
  sequence:
  - service: media_player.volume_set
    data:
      entity_id: media_player.mr_echo_dot
      volume_level: "{{ volume }}"
  - service: notify.alexa_media_mr_echo_dot
    data:
      data:
        type: announce
      message: "{{ message }}"
      target: media_player.mr_echo_dot

Une idée ?

Bonjour

Je débarque sur HA et je tente l’expérience de ce tutoriel pour envoyer un message sur mon alexa echo Dot ou freebox.
J’ai suivi toute les étapes une à une
image

et malgré ceci j’ai une erreur à l’exécution du Flow :
image

Je pense qu’il faut dire à un moment dans la liste déroulante que telle entrée est l’echo Dot et que l’autre entrée est la freebox mais je n’ai pas trouvé où, ou bien je n’ai pas tout compris :frowning:

Merci de votre aide

Edit :
Alors je pense que le problème vient de la config des current_state
Je n’arrive pas à avoir la même chose que vous par exemple pour le texte à envoyer j’ai ceci :

alors que vous avez ceci avec deux lignes state location et entity location :
image

Salut,
Je ne sais pas si ça vient de la viersion de node red ou du composant current state.
Mais les 2 peuvent faire le même chose. Le tiens est plus flexible.
State Location et Entity Location je pense que ça correspond respectivement à tes sorties entity state et entity

J’essaie de regarder ce soir sur mon Alexa :wink:

Salut… au hasard.

Min: 0 
Max: 1 
Step: 0.1

C’est accepté chez moi.

Pour le « routing speak », tu as bien créer avec le compte Amazon qui gère tes Echos et utilisé le lien généré par ce composant pour lancer la demande d’authentification ?

Pour « State Location et Entity Location » de ce composant j’ai pas les mêmes valeurs


moi le msg.payload s’appelle msg.text qui correspond au texte que l’Echo doit jouer.

J’ai créé ça car de mémoire j’ai tester le media player alexa, je récupérai les musiques en cours mais je n’arrivais ni à y envoyer de la musique ni du texte.

Bonsoir
Je ne serais pas te dire, je débute tant sur HA que sur Node Red et ça m’a perdu un peu je l’avoue
J’ai tenté de suivre le flow sur le premier poste pour voir et comprendre mais du coup avec la non correspondance pas simple pour un novice

Oui j’ai bien suivi la création de compte comme il faut avec la création du cookie qui va bien
j’ai d’ailleurs pu faire ce flow qui fonctionne d’ailleurs bien

avec ce message :

{
    "message": "La température de la chambre Parent est de , 
    {{states('sensor.temp_ch_parents_temperature')}} degré",
    "data": {
        "type": "tts",
        "method": "all",
        "language": "fr"
    },
    "target": [
        "media_player.alexa_media_freebox_delta_2"
    ]
}

Je veux bien refaire de 0 le sujet encore une fois pour voir si cela change quelques choses

Si fonctionne avec ton code ?
Mais tu veux le faire via une card ? c’est bien ça.

Je voulais le faire comme indiqué dans le poste en haut pour comprendre le fonctionnement surtout
Je cherche des tutos en tout genre pour début sereinement, je suis aujourd’hui sur Jeedom avec des habitudes autout d’Alexa, Discord (messages évolués) que j’aimerais retrouver ici voir même améliorer.

Donc oui via la carte pour commencer mais ensuite dans des automations (je crois que c’est le nom de scénario chez Jeedom :slight_smile: )

Je viens de refaire le tout et je n’avais pas compris que je pouvais changer ceci
image

Du coup cela fonctionne en changeant tous mes current state node
c’est top
Merci de l’aiguillage qui m’a permis de voir les choses autrements.

Pas de soucis :wink: on commence tous un jour.
Je ne me rappelle pas de tout sur Node-Red je l’ai fais il y a 1an et pas eu besoin de revenir dessus.
Je ne fais pas beaucoup de Node-Red, je n’y viens que si je n’ai pas trouvé dans HA de base puis HACS.

C’est hors sujet je pense mais pour le moment j’ai pas trouvé mes marque pour les automations dans HA

Pour les quelques automatisations que je fais, je commence par la créer en GUI et suivant complexité j’édite le automatisations.yaml.

Il y en a qui utilisent Node-RED à la place.

Merci des conseils et infos je découvre il faut que je me fasse à ces nouvelles façons de faire :slight_smile: