Tuto : dialoguer avec votre maison via Telegram (et integrations HA)

Telegram est une solution de choix pour recevoir des notifications de sa maison.

Par exemple :

  • « Vous partez alors que la fenêtre du salon est restée ouverte »
  • « Le taux de CO2 est trop fort et il faut aérer le salon »
  • « Une consommation anormale d’eau a été détectée cette nuit »
  • « La température du congélateur est trop élevée. »
  • « Pas de consommation électrique de la pompe de la piscine. Vérifier son bon fonctionnement »

Mais il est également très intéressant de pouvoir répondre à ces notifications pour déclencher une ou des actions via des boutons sous le message.
image

@jybi89 a proposé pour cela un excellent tuto en utilisant Node-Red : Node-RED - Votre BOT Telegram vous pose des questions

Node-Red est très puissant et est un véritable couteau suisse. Mais personnellement je réserve Node-red à des utilisations très spécifiques, pour une gestion de flux par exemple. Je préfère pour une majorité de cas l’utilisation des automatisations HA, plus standard, plus simple à maintenir et à partager, parfaitement historisée, facile à recopier tout ou partiellement, permettant de passer à des blueprint si besoin de généraliser. Cela se fait en échange d’un petit investissement sur YAML au départ.
Mon conseil est de commencer une automatisation avec l’éditeur graphique pour avoir la bonne syntaxe, pour de l’éditer en YAML pour le maintenir et le compléter.

Le choix Node-Red versus Automatisations est quasi religieux et chaque solution a ses avantages et inconvénients. Ce n’est pas le sujet de l’article.

Je vous propose donc ici un petit tuto pour implémenter simplement telegram avec les automatisations de HA.

J’utilise cela depuis longtemps, et l’exemple proposé ici est la demande de fermeture du volet de la piscine quant l’air est plus froid que l’eau (cela permet de garder l’eau chaude et éviter l’évaporation).

1. Installer un bot Telegram

La première chose est de créer dans Telegram son « bot » Maison et obtenir un token et un ID.
Ensuite dans HA : vous implémentez Telegram en utilisant l’intégration Telegram. Puis vous créez une notification que vous pouvez utiliser de manière standard dans vos automatisations et scripts.

Voici un exemple de code à recopier dans configuration.yaml pour réaliser cela. Personellement, ayant une configuration très conséquente, je déplace ce code dans un package notification.yaml que j’inclus dans le fichier configuration.

# Configuration Telegram
telegram_bot:
  - platform: polling
    api_key: !secret telegram_token
    allowed_chat_ids:
      - !secret id_telegram_maison

# Configuration notification
notify:
  - name: telegram_maison
    platform: telegram
    chat_id: !secret id_telegram_maison

ID et token fournis par Telegram sont à mettre dans le fichier secret.

# Telegram
telegram_token: 999999999999999999999999999
id_telegram_maison: 999999999999999999

Pour plus de détails sur comment créer le BOT dans Telegram, je vous renvoie à l’excellent tuto de @McFly

2. Utilisation des notifications

L’utilisation se fait juste en appelant le service notify.telegram_maison dans vos scripts et automatisations.

Il ne faut pas hésiter à transmettre des données dans vos messages, par exemple ici la température de l’eau de l’air.

trigger: []
condition: []
action:
  - service: notify.message_warning_groupe
    data:
      message: >-
        Merci de fermer le volet.
        Température eau : {{states('sensor.fibaro_piscine_temperature_eau')}} °C
        Température abri : {{states('sensor.fibaro_piscine_temperature_abri')}} °C

Il est aussi possible de rajouter une image, typiquement issue d’un snap d’une de vos caméras. Par exemple ici l’intérieur du poulailler pour vérifier que nos poules sont bien couchées quand la porte se ferme (ma femme adore cette fonction :slight_smile: ).

image

trigger: []
condition: []
action:
  service: notify.telegram_maison
  data:
    message: Coucou des poulettes : porte bien fermée
    data:
      photo:
        - file: /media/poules/snap.jpg

3. Rajout de boutons d’action après le message

Reprenons notre exemple :
image

Pour afficher les boutons, c’est très simple : il suffit de rajouter dans la section data du message la section inline_board avec libellé:/event à déclencher. Dans notre cas, les événements piscine_ferme et piscine_ignore_ferme seront déclenchés si respectivement un des boutons est pressé.

trigger: []
condition: []
action:
  - service: notify.message_warning_groupe
    data:
      message: >-
        Merci de fermer le volet....
      data:
        inline_keyboard:
          - Ignore:/piscine_ignore_ferme, Ferme volet:/piscine_ferme

4. Traitement des actions des boutons

Il faut créer 2 automatisations qui se déclenchent pour respectivement chaque événement piscine_ferme ou piscine_ignore_ferme et exécute une action en conséquence.

Par exemple, voici l’automatisation pour traiter l’événement de demande de fermeture :

alias: 'Piscine : fermeture par telegram'
description: Traite la réponse de demande de fermeture du volet par telegram
trigger:
  - platform: event
    event_type: telegram_callback
    event_data:
      command: /piscine_ferme
action:
  - service: cover.close_cover
    target:
      entity_id: cover.ipx800_volet_piscine
    data: {}

5. Confirmation que l’action a été bien effectuée

Une fois le bouton cliqué, il ne reste plus qu’à supprimer la barre de boutons, et confirmer à l’utilisateur que la demande d’action a été bien prise en compte.
image

Pour cela, on rajoute à l’automatisation précédente quelques lignes :

alias: 'Piscine : fermeture par telegram'
description: Traite la réponse de demande de fermeture du volet par telegram
trigger:
  - platform: event
    event_type: telegram_callback
    event_data:
      command: /piscine_ferme
action:
  - service: cover.close_cover
    target:
      entity_id: cover.ipx800_volet_piscine
    data: {}
  - service: telegram_bot.edit_replymarkup
    data:
      message_id: last
      chat_id: '{{ trigger.event.data.chat_id }}'
      inline_keyboard: null
  - service: notify.message_warning_groupe
    data:
      message: Volet piscine fermé.
initial_state: true
mode: single

Pour l’événement cancel, On répond juste « ok » et on supprime les boutons.

alias: 'Piscine : ignorer demande fermeture telegram'
description: Enlève bouton et réactive l'alerte sur fermeture
trigger:
  - platform: event
    event_type: telegram_callback
    event_data:
      command: /piscine_ignore_ferme
action:
  - service: input_boolean.turn_on
    target:
      entity_id: input_boolean.piscine_flag_fermeture_volet_actif
    data: {}
  - service: telegram_bot.answer_callback_query
    data:
      callback_query_id: '{{ trigger.event.data.id }}'
      message: Ok
  - service: telegram_bot.edit_replymarkup
    data:
      message_id: last
      chat_id: '{{ trigger.event.data.chat_id }}'
      inline_keyboard: null
mode: single

Voila, vous pouvez maintenant « dialoguer » avec votre maison via telegram, en intégrant potentiellement des données et des photos :slight_smile:

N’hésitez pas à partager les choses originales ou amusantes vous auriez automatisé :+1:

4 « J'aime »

Merci pour ce tuto,

j’utilise télégram en mode basique pour le moment, c’est a dire recevoir une image de caméra ou un texte, je pensais ajouter des actions avec du dialogue, c’est une bonne approche pour le faire.

1 « J'aime »

Salut

j’ajoute ici mon post sur telegram et la factorisation de toute les réponses sous une seule automatisation.

1 « J'aime »

Merci pour ce tuto, ça va être bien pratique :wink:

1 « J'aime »