Quelques mots sur Alexa (ou plutôt nos Amazon echo)
Pour commencer
Quelques considérations avant de commencer
Alexa, Google Home, Siri ou Assist?
"Pourquoi
La question s’est posé avant la domotique, et n’ayant rien en Apple, le choix était donc Alexa ou Google home…
A ce moment l’amazon echo (gen4) offrait un hub zigbee qui permettait de se projeter dans un embryon de solution domotique, un look sphérique sympa, et Madame étant abonnée amazon prime, un accès simple à Amazon musique…
Donc le choix a été Alexa avec une echo gen4, bientôt suivie par des petites sœurs echo dot (g4) et (g5) pour les enfants et d’autres pièces (ou trouve toujours une promo pour les french days ou le black friday)… On en est content, mais on n’a rien testé d’autre. Ce post n’est donc aucunement une pub pour Alexa, mais plutôt un retour d’expérience pour essayer d’en tirer le plus possible…
Il y a des avantages:
- simplicité
- materiel bien fini et performant
- esthétique
- reconnaissance vocale efficace
Il y a des inconvénients:
- cloud
- soft propriétaire amazon
- impossible de lire des MP3 dessus (sauf en mode bluetooth)
- réponses parfois peu pertinentes
L’intégration à la domotique Home assistant, avec Nabu-Casa ou par des solutions gratuites en bidouillant?
Notre choix perso, le bidouillage.
Nous n’avons pas NabuCasa. Donc l’adaptation de ce qui suit au cas « home assistant cloud » est à vérifier, mais a priori les principes restent les mêmes pour la plupart des notions.
Concernant nos raisons, j’ai débuté Home assistant pile au moment ou l’abonnement a augmenté de 5 à 7.5€/mois , et je n’ai pas voulu être dépendant d’un service qui pourrait prendre régulièrement +50%…
Ce serait à refaire aujourd’hui, je ne sais pas si je ne ferais pas le choix de NabuCasa.
Notre intégration est donc un poil plus complexe à installer, mais au final les capacités sont les mêmes…
Cloud ou pas cloud…
Cloud !!!
Contrairement aux solutions qui commencent à émerger depuis 2023 (année de la voix), Alexa n’est pas disponible en local, et tant que personne n’aura « jailbreaké » les amazon echo, il y a peu de chance que ceci le devienne. C’est donc une partie de la domotique qui est 100% dépendante de:
- l’accès de Home assistant à internet (box, routeur, fibre, etc…)
- la disponibilité des serveurs d’amazon (le cloud
)
C’est donc une chose à garder en tête:
-
Les commandes vocales via Alexa/echo sont interprétées sur les serveurs d’amazon via le web avant d’arriver à votre home assistant => elles seront perdues en cas de perte de l’accès web ou de l’indisponibilité des serveurs amazon. Il vous faut donc toujours un autre moyen de piloter votre domotique en cas de panne.
-
Les envois d’information (media player, notifications par ex) vers Alexa/echo sont interprétées sur les serveurs d’amazon via le web avant de sortir de votre enceinte => elles seront perdues en cas de perte de l’accès web ou de l’indisponibilité des serveurs amazon. Ne bâtissez pas un système d’alarme critique sur des notifications Alexa.…
-
Les sensors remontés depuis les Alexa/echo sont interprétés sur les serveurs d’amazon via le web avant d’arriver à votre home assistant => ils seront perdus en cas de perte de l’accès web ou de l’indisponibilité des serveurs amazon. Ne bâtissez pas d’automatisations critiques sur ces senseurs.
Donc si on veut faire de l’interface audio ou du contrôle vocal sans cloud. Alexa n’est pas la solution, mais il commence à y avoir des solutions alternatives qui marchent avec Home assistant (mais ce n’est plus le sujet de ce post).
Un peu d’architecture…
Comment ranger tout ça?
Les choses seront un peu différente suivant qui est arrivé en premier dans la maison entre Home assistant et Alexa. Dans le monde d’Alexa on dispose des éléments suivants qui permettent aussi de faire une installation domotique :
- des équipements maison connectés qui peuvent être détectés directement par Alexa (les echo font hub Zigbee)
- Des Skills (un peu l’équivalent des intégrations de HA)
- Des Scènes
- Des Routines (l’équivalent des automatisations de HA)
- Des Pièces pour grouper ses équipements
- Des Groupes d’enceintes pour faire du multi-room
- Une Application qui dispose d’un pseudo dashboard
On pourrait tout dédoubler, mais ce n’est ni efficace, ni souhaitable… tout le jeu va être de réussir à interconnecter Home Assistant et Alexa pour pourvoir élargir les possibilités des deux cotés, mais avec méthode. La meilleure solution est à mon avis:
- de centraliser au maximum dans home assistant la gestion des entités et intégrations (sauf celles qui ne seraient disponibles que dans des Skills Alexa) donc si comme nous vous avez débuté avec Alexa, il est au final plus intéressant de retirer vos équipements d’Alexa pour les réassocier avec Home assistant l’idée étant de tout avoir au même endroit et si possible en local, sans cloud).
- de réaliser toutes les automatisations dans Home assistant (plus de possibilités et accès à toutes les entités, et tout en local)
- de faire le dashboard dans Home assistant (plus de possibilités de personalisation et accès à toutes les entités, et en local). Ce point pourrait être discuté si à la place d’une amazon echo, on utilise un echo show par exemple. Peut être que le dashboard natif d’Alexa serait justifié comme dashboard simplifié…
- d’utiliser Alexa pour ses capacité audio (média et notification - dépendant du cloud)
- d’utiliser Alexa pour de la commande vocale des entités HA (ce qui peut nécessiter quelques routines coté Alexa et sera dépendant du cloud)
- d’utiliser Alexa pour ses quelques capteurs (à faire remonter dans HA donc conformément au point précédent, en sachant qu’ils ne sont pas 100% en local)
1/ Faire parler Alexa, et un peu plus…
Première étape qui ouvre de nombreuses possibilités
C’est probablement la première étape. Et ça démarre avec l’installation via HACS de Alexa Media Player.
Allez lire la doc pour voir tout ce dont Home Assistant devient capable: Wiki Alexa media player
En raccourci, cette intégration vous permet d’associer votre compte amazon à home assistant et donc de pouvoir interagir avec vos amazon echo (et autres devices alexa) comme des média players (et un peu plus).
Ceci va permettre:
- de lancer de la musique, des playlist, des radios et autre sur vos amazon echo (et vos groupes d’enceintes).
- d’avoir un retour sur le statut de vos echo et ce qui est en cour de lecture.
- de visionner comme un media player vos echo (et vos groupes d’enceintes) dans le dashboard et d’interagir avec (lecture/pause, contrôle du volume, suivant/précédant, aléatoire, affichage des titres n cour de lecture, etc…)
- de lancer des routines, des skills, etc (regardez la doc…)
- de parler à une Alexa (et donc de lui donner un ordre le cas échéant) avec une syntaxe « custom ». Tous les ordres que vous pouvez donner en vocal (y compris pour interagir avec une skill) peuvent donc être envoyés par Home assistant (y compris depuis une automatisation). Dit autrement, tout ce que vous savez dire à Alexa, désormais Home assistant sait le lui dire.
exemple de custom pour lui demander de jouer de la bonne musique dans toute la maison
Remplacez juste « joue du Queen sur le groupe partout » par ce que vous lui diriez en direct, en enlevant juste le Alexa de départ: (ouvre les volets, quelle est la météo, lance un timer durant 5 min, ajoute des croquettes sur la liste d’achat, etc.).
service: media_player.play_media
target:
entity_id: media_player.echo_dot
data:
media_content_type: custom
media_content_id: joue du Queen sur le groupe partout
- de faire parler Alexa pour des retours d’informations ou des notifications
Quelques infos supplémentaires sur les notifications via Alexa
Je n’ai pas encore réussi à envoyer des notifications au format alexa via Home Assistant (allumage de l’echo en jaune, puis on l’interroge en disant « Alexa quelles sont mes notifications? »). Ceci necessiste pour l’instant de passer par une skill qui n’a pas l’air de fonctionner en français. Il y a un fil sur le forum, mais pas de progrès depuis…
Tout ce qu’on sait faire (mais c’est déjà pratique) c’est de faire parler Alexa lorsque Home assistant le lui commande. La syntaxe classique pour envoyer un message de notification TTS (text to speech) sur un ou plusieurs echo/echo dot est la suivante:
service: notify.alexa_media
data:
message: La machine à laver est terminée
target:
- media_player.echo_1
- media_player.echo_2
- media_player.echo_dot_1
data:
type: tts
title: Annonce lavage fini
De plus, on peux personnaliser la façon dont Alexa parle en incluant des balises dans le message lui même. Ceci permet de changer la façon dont Alexa parle sans avoir besoin de faire varier le volume.
Comment modifier la façon dont Alexa parle:
Désolé pour le lien en anglais, il contient toutes les balises ssml qu’on peut intégrer dans un message tts pour ajouter des effets à Alexa en particulier la prosody et le chuchotage pour le volume. Les possibilités sont très nombreuses, ne pas hésiter à lire la doc: [traduction perso rapide en Français]
<break> ajouter une pause
<emphasis> mettre en evidence un mot
<lang> specifier la langue d'un mot
<mark> ajouter un tag dans le texte
<p> placer une pause entre paragraphes
<phoneme> utiliser la prononciation phonetique
<prosody> contrôle le volume, le débit et la hauteur de la voix
<s> ajouter une pause entre phrases
<say-as> controle sppécifique de la manière de prononcer un mot
<sub> pour les Acronymes et Abbreviations
<amazon:auto-breaths> ajout de respiration
<amazon:domain name="news"> style journaliste
<amazon:effect phonation="soft"> voix douce
<amazon:effect vocal-tract-length> contrôle du timbre de la voix
<amazon: effect name="whispered"> Chuchotage
On peut en particulier intégrer des balises ssml dans le texte du message pour changer le volume de la voix (sans toucher au volume de base de l’enceinte) par exemple:
Quelque fois il peut être utile de <prosody volume="loud"> monter le volume
pour une partie spécifique de l'annonce.</prosody>
Nous utilisons assez souvent le chuchotage pour des annonces le soir:
service: notify.alexa_media
data:
message: >-
<amazon:effect name="whispered">La machine à laver est
terminée</amazon:effect>
target:
- media_player.echo_1
- media_player.echo_2
data:
type: tts
title: Annonce lavage fini chuchotté
Ca ne change pas le volume pour le reste du temps (si on a de la musique en cours de lecture) ni ne laisse le volume « à fond » ou « au mini » pour la prochaine annonce d’Alexa…
On peut aussi utiliser le type « announce » à la place de « tts » ceci ajoute un petit son avant l’annonce:
service: notify.alexa_media
data:
title: "ma sonnette"
message: <prosody volume="loud">Il y a du monde à la porte!</prosody>
data:
method: speak
type: announce
target:
- media_player.echo_1
- de récupérer des infos issues de vos echo (le capteur de température notamment)
En savoir plus sur les infos remontées
Il faut voir la doc pour avoir la totalité, mais les plus utiles sont:
- vous pourrez avoir des sensor « next_alarm », « next_timer » et « next_reminder » sur vos echo/echo dot
- vous pouvez jouer des sons…
- si vous sélectionnez l’option « inclure les appareils connectés via echo », vous pourrez :
- retrouver et contrôler dans HA les éléments connectés directement au pont zigbee des echo
- récupérer le capteur de température des echo et echo dot récentes
2/ Remonter les éléments de Home assistant dans Alexa.
Deuxième étape qui libère le plein potentiel des echo...
Pour l’instant nous avons des haut parleur de course, que home assistant peut contrôler. Mais allons un cran plus loin.
Pour pouvoir faire de la commande vocale, il faut qu’Alexa puisse agir sur des éléments de Home Assistant pour les piloter… Pour faire ceci, plusieurs solutions:
- Nous sommes passés par le tuto des Alexiens: Tutoriel: piloter Home assistant à la voix grace à Alexa
- On peut passer par NabuCasa et la solution Home Assistant cloud.
- Mais il y a d’autres solutions sur le forum: [TUTO] intégrer des appareils (On/OFF) à Alexa
- ou encore le très prometteur pont matter: Vos devices HA dans Google Home, Alexa ou Apple Home en moins de 5 minutes!
Une fois ceci fait, on dit à Alexa: « Alexa découvre mes appareils » et les entités disponibles dans home assistant deviennent disponible dans l’appli Alexa, comme si celles ci étaient connectées à Alexa directement. Elles apparaissent dans l’application Alexa comme « connecté via Home Assistant ».
Cependant il peut être utile de faire un peu de ménage. Alexa étant plutôt là pour servir d’interface, il n’y a probablement pas intérêt à remonter TOUTES les entités HA dans Alexa (suivant les installations ça monte très vite, chez nous plus de 900 entités…).
Heureusement on peut filtrer ce qui remonte de HA vers Alexa:
Il faut donc ajouter dans le configuration.yaml (ou dans un fichier dédié):
exemple du mien:
# Configuration specifique d'Alexa via Amazon Web Service
alexa:
smart_home:
locale: fr-FR
endpoint: https://api.eu.amazonalexa.com/v3/events
client_id: amzn1.applicationxxxxxxxxxxxx
client_secret: amzn1.xxxxxxxxxxxxxxxxxx
# Filtres pour limiter ce qui remonte dans Alexa depuis HA
filter:
# inclusion uniquement des entities désirées dans Alexa
# ne pas mettre d'exclude ou alors penser à TOUT exclure
include_entities:
#volets: via Tost Box
- cover.piece_de_vie
- cover.salon
- cover.tous_les_volets
- cover.volet_cuisine
- cover.volet_de_la_chambre_de_justine
- cover.volet_de_la_chambre_de_louise
- cover.volet_de_la_chambre_de_thibault
- cover.volet_de_la_mezzanine
- cover.volet_du_bureau
- cover.volet_du_salon_apero
- cover.volet_du_salon_tv
#lumières
- light.0x385b44fffe20eb24 # sous escalier
- light.0x84b4dbfffec93621 # mezzanine
- light.0x84ba20fffe4b2581 # petite lampe
- light.ampoule_bureau # bureau
- light.inter_lumiere_garage # garage
- light.inter_lumiere_piscine # piscine
- light.inter_lumiere_terrasse # terrasse
- light.led_chambre # parents
- light.led_cuisine # cuisine
- light.led_justine # justine
- light.led_louise # louise
- light.led_thibault # thibault
- light.prise_cerisier # cerisier
- light.prise_elephants # elephants
- light.prise_lampadaire # lampadaire
# Switch presence Alexa
- switch.echo_cuisine_presence
- switch.echo_justine_presence
- switch.echo_louise_presence
- switch.echo_salon_presence
- switch.echo_thibault_presence
#Scripts
#-------
# PAC
- script.allumer_chauffage
- script.allumer_climatisation
- script.eteindre_pac
# LEDs enfants
- script.arc_en_ciel_justine
- script.disco_justine
- script.car_en_ciel_louise
- script.disco_louise
- script.arc_en_ciel_thibault
- script.disco_thibault
- script.mode_gaming_thibault
La manière de configurer les include et exclude est la même que dans le recorder: Recorder - Home Assistant
Je conseillerai plutôt de tout exclure et d’ajouter au fur et a mesure les entités utiles (celles dont on va avoir besoin avec Alexa: les entités à piloter, les scripts, peut être quelques sensors…). Chez nous on est a une quarantaines d’entités à remonter (contre >900 entités au départ…)
A partir de là on sait piloter depuis Alexa les entités qui remontent de home assistant.
- soit directement si ce sont des entités que Alexa « comprend » comme des light, des covers, des switchs, etc…
- soit via des scripts car Alexa interprète les scripts comme des scènes et peut donc activer une scène qui lancera le script HA correspondant. Désormais il est nécessaire de passer par des routines pour activer les scripts… Il faut donc créer une routine qui active la scène (le script HA) « allumer_chauffage » quand on dit « Alexa allume le chauffage », ou « Alexa lance le chauffage », ou « Alexa démarre le chauffage ».
3/ Quelques astuces supplémentaires:
Troisième étape pour aller au bout du chemin
Récupérer le capteur de présence à ultrason des echo et echo dot
Alexa media player ne peut pas directement récupérer l’info de ce « capteur » de présence. On ne peut donc pas le récupérer directement dans Home assistant. On ne peut que l’utiliser dans une routine Alexa (après avoir autorisé la détection de présence dans l’appli Alexa bien sur…).
Mais en fait on peut contourner ce problème en utilisant les routines d’Alexa pour agir sur des éléments que home assistant pourra détecter (cette logique pourrait être utile pour d’autres éléments qu’on ne saurait pas remonter, depuis des skills par exemple).
Il y a une astuce pour faire ça:
Il faut créer plusieurs entités dans home assistant pour ça:
- un switch (interrupteur) correspondant à chaque capteur
- deux routines dans Alexa, une qui allume cet interrupteur quand elle détecte un mouvement, une qui éteint l’interrupteur quand elle ne détecte plus.
- et enfin (c’est optionnel, mais pratique) un capteur de présence dans home assistant et un Template qui recopie l’état de l’interrupteur dans le capteur de présence, ce qui permet d’avoir le bon format de données…
Ca marche très bien. J’avais utilisé ça: (lien en anglais) Simple way to get Amazon Echo 4th generation ultrasound motion/presence sensors into Home Assistant - Scripts - Home Assistant Community
Créer des pièces dans l'appli Alexa
Ceci est particulièrement utile si, comme nous, vous avez plusieurs echo dans plusieurs pieces différentes. Il est alors particulièrement intéressant de créer des pièces dans l’appli Alexa, et d’indiquer l’ensemble des éléments pilotables qui s’y trouvent (lumières, switchs, volets) et les Amazon echo qui sont à l’intérieur.
Ainsi lorsqu’on dit « Alexa allume la lumière », elle n’allumera que les lumières de la piece dans laquelle se trouve l’echo qui capte la commande. C’est très naturel.
Une interface pour le media player des echo/echo dot
Je suis très fan de la carte mini media player qui est non seulement belle et customisable (apparence, raccourcis, etc…). Mais elle dispose en plus d’un champ tts (Texte à lire) permettant de taper un message d’annonce et l’envoyer sur l’echo associée.
C’est une des raisons pour ma femme d’utiliser le dashboard car elle préfère ça à la commande vocale…
Les chantiers à venir.
- le suivi energetique des entités non mesurées (Powercalc - en cours)
- le binding pour avoir du zigbee sans HA/Z2M le cas échéant (bind zigbee devices directly in Z2M)
- la refonte des notification pour les rendre plus intelligentes
- refaire les notif alexa pour avoir des dialogues (Alexa actionable notif)
- la domotisation du portail
- trouver une solution qui marche pour domotiser plus de lumières (en particulier des va et vient avec des modules sans neutre…)
- refaire le controle des volets en RTS (esp-somfy RTS)
- basculer le controle de la clim en local (en se passant du cloud mitsubishi)