Home Assistant a une appli mobile complète. Elle fait tout : dashboards, cartes, historiques, automations. Le problème, ce n’est pas ce qu’elle sait faire, c’est qu’elle n’est pas toujours à portée de main. Sur le téléphone, il faut la débloquer, l’ouvrir, attendre qu’elle se connecte, naviguer jusqu’à la bonne carte. Et sur l’ordinateur, pendant que je travaille, elle n’est tout simplement pas là : pas d’appli de bureau, juste un onglet de plus à ouvrir. Pour vérifier si une lumière est restée allumée ou lancer la scène cinéma, c’est beaucoup de friction pour une action de deux secondes.
De mon côté, j’ai presque toujours une conversation Telegram ouverte quelque part : sur l’ordinateur pendant que je travaille, sur le téléphone, sur la montre, ou dans les notifications. Alors plutôt que de me battre contre l’appli, j’ai ajouté un système de menus Telegram à côté d’elle : je tape une commande, je reçois un statut condensé avec des boutons d’action juste en dessous. Deux taps et c’est fait, depuis n’importe quel endroit où Telegram est déjà ouvert.
Pourquoi Telegram en complément, plutôt qu’une appli maison
L’idée n’est pas de remplacer Home Assistant, ni son appli, mais d’ajouter une interface plus rapide et plus disponible pour les actions qui reviennent tous les jours : vérifier que tout est fermé, allumer une lumière, couper le chauffage, lancer une scène. Telegram a trois avantages pour ça. C’est déjà ouvert en permanence sur tous mes appareils, y compris l’ordinateur où l’appli Home Assistant n’existe pas nativement, ça fonctionne aussi bien sur une montre connectée que sur un widget de notification, et l’intégration telegram_bot de Home Assistant gère tout nativement, sans serveur intermédiaire à maintenir.
L’architecture : un bot qui écoute, des scripts qui répondent
Le bot tourne en mode polling, pas en webhook : Home Assistant interroge régulièrement l’API Telegram pour récupérer les nouveaux messages, plutôt que d’exposer une URL publique qui reçoit les notifications. Plus simple à faire tourner derrière une box internet classique, pas de certificat à gérer.
Chaque commande tapée (une commande Telegram commence par un slash) déclenche un script Home Assistant dédié. Ce script fait deux choses : il assemble un message texte avec le statut condensé du domaine concerné (température, état des volets, lumières allumées, etc.), et il y attache un clavier de boutons inline, les fameux boutons qui s’affichent directement sous le message plutôt que dans le clavier du téléphone.
Quand quelqu’un tape sur un bouton, Telegram renvoie un événement que des automations Home Assistant écoutent en permanence. L’automation identifie quel bouton a été pressé, exécute l’action correspondante (toggle d’une lumière, script de scène, changement de mode), puis renvoie un petit accusé de réception, un toast qui confirme que l’action a bien été prise en compte sans renvoyer un nouveau message complet dans la conversation.
Un menu par domaine, plus un qui résume tout
J’avais déjà posé les bases de la connexion entre Home Assistant et Telegram dans un premier article sur les notifications et le contrôle à distance. Celui-ci va plus loin : c’est l’architecture complète du système de menus que j’ai construit par-dessus, avec un découpage par domaine, la réutilisation des callbacks et les pièges rencontrés en route.
Le système est découpé par domaine : climatisation, chauffage, volets, lumières, alarme, scènes, prises connectées, consommation électrique, ouvertures (serrure connectée et garage), mode absence, véhicule électrique, piscine. Chaque domaine a sa commande, son script d’envoi et ses boutons d’action propres, dans la continuité de mes automatisations Home Assistant habituelles.
À côté de ça, un menu général agrège les infos essentielles de tous les domaines en un seul message, pour un coup d’œil complet sans avoir à taper dix commandes différentes. Et un menu d’aide liste toutes les commandes disponibles, pratique quand on ne se souvient plus du nom exact.
Ces commandes sont aussi enregistrées côté API Telegram via setMyCommands. Concrètement, ça veut dire qu’elles apparaissent en autocomplétion native dès qu’on tape le slash dans l’appli Telegram, avec leur description. Pas besoin de mémoriser la liste, Telegram la propose tout seul.
Trois décisions de design qui valaient la peine
La première, c’est la réutilisation des callbacks entre menus. Un bouton « scène cinéma » existe dans le menu lumières et dans le menu scènes dédié. Plutôt que dupliquer la logique, les deux boutons pointent vers exactement le même handler d’automation. Un callback, un seul endroit où il est traité, peu importe depuis quel menu on l’a déclenché. Ça évite le classique bug où on corrige une scène dans un menu et on oublie qu’elle existe aussi ailleurs.
La deuxième concerne une action sensible : déverrouiller la porte d’entrée à distance. Ce n’est pas le genre de bouton qu’on veut voir déclenché par un tap accidentel. J’ai donc mis en place une confirmation en deux temps : le premier tap n’ouvre rien, il affiche juste un message de confirmation avec un nouveau bouton. C’est seulement le second tap qui déclenche réellement l’ouverture. Ça ajoute une friction volontaire sur la seule action du système qui a un impact physique irréversible.
La troisième, c’est le statut du véhicule électrique. Après un redémarrage du système, l’intégration ne restaure pas automatiquement les capteurs, ils repassent en état « inconnu » jusqu’à la prochaine mise à jour. Sans précaution, le message Telegram afficherait des erreurs brutes ou des valeurs vides, ce qui n’est ni lisible ni rassurant. Tous les champs du statut véhicule ont donc un fallback « n/d » : si une valeur n’est pas disponible, le message reste propre plutôt que de casser.
Router les réponses vers la bonne personne
Plusieurs membres du foyer utilisent le même bot. Chacun tape ses propres commandes depuis son propre chat Telegram, et le système répond dans la conversation de la personne qui a demandé, pas dans une conversation générique. Chaque script d’envoi transmet l’identifiant du chat d’origine, ce qui garantit que la réponse arrive au bon endroit sans qu’un membre du foyer voie les statuts déclenchés par un autre.
Si un bouton doit apparaître dans deux menus différents, résiste à l’envie de copier-coller le handler. Fais pointer les deux boutons vers le même callback. Le jour où tu modifies la logique, tu ne la modifies qu’une fois, et tu élimines d’un coup toute une catégorie de bugs de synchronisation.
Le piège YAML qui a rendu tous mes messages illisibles
Celui-là m’a fait perdre du temps bêtement. En YAML, il existe deux façons d’écrire un texte sur plusieurs lignes. Le style qui replie les retours à la ligne (chaque saut de ligne devient un simple espace) et le style qui les préserve tels quels. Ils se ressemblent à l’écriture, un simple symbole change entre les deux, mais le résultat est radicalement différent.
J’avais utilisé le mauvais style sur les messages Telegram censés afficher plusieurs lignes (température ligne 1, mode ligne 2, consigne ligne 3, etc.). Résultat : tous les sauts de ligne ont été silencieusement transformés en espaces. Pas d’erreur, pas de log, rien qui alerte. Juste des messages qui s’affichaient collés sur une seule ligne interminable et illisible, au lieu du format aéré prévu. Je ne m’en suis rendu compte qu’en relisant les messages reçus sur le téléphone, l’automation tournait sans problème de son côté. Depuis, c’est une vérification systématique sur tout nouveau message multi-lignes : le bon style de bloc, sinon le bug ne se voit qu’à la relecture.
Ce que ça change au quotidien
Ce système ne remplace pas l’appli Home Assistant, il vient s’ajouter à côté pour tout ce qui doit être disponible partout, tout de suite. Vérifier le statut de la maison, allumer une lumière, lancer une scène : tout ça se fait maintenant en tapant une commande dans une conversation déjà ouverte, sans lancer une appli dédiée. Et comme c’est du texte et des boutons, ça fonctionne aussi bien depuis l’ordinateur pendant une session de travail que depuis une montre connectée, un widget de notification ou le téléphone lui-même, là où l’appli Home Assistant reste cantonnée au mobile.
FAQ
Pourquoi un bot Telegram et pas une appli de notifications classique ?
Parce que Telegram gère nativement les boutons interactifs et l’intégration telegram_bot de Home Assistant s’en occupe sans serveur intermédiaire, contrairement à une appli maison qu’il faudrait héberger et maintenir.
Le mode polling est-il aussi fiable qu’un webhook ?
Pour un usage domestique, oui. Il évite d’exposer une URL publique et un certificat SSL, au prix d’une latence de quelques secondes tout au plus, largement acceptable pour ce type de commandes.
Comment éviter de dupliquer la logique entre plusieurs menus ?
En faisant pointer les boutons équivalents vers le même callback d’automation plutôt que de recréer un handler par menu. Un seul endroit à maintenir, quel que soit le menu d’origine.
Comment sécuriser une action irréversible comme déverrouiller une porte ?
Avec une confirmation en deux temps : le premier tap affiche un message de confirmation, seul le second déclenche réellement l’action.







