Je suis débutant et j’ouvre ce post pour partager mon utilisation de la messagerie telegram dans home assistant:
une utilisation via une seule entrée d’automatisation et ensuite un test sur la condition d’entrée.
Débuter avec telegram
Pour commencer, j’ai suivi le post ci dessous:
https://forum.hacf.fr/t/les-notifications-via-telegram/216
Exemple
Mais j’ai trouvé fastidieux de créer une entrée par commande comme dans l’exemple ci dessous avec trois commandes venant de Telegram:
- id: reponse_telegram
alias: Reponse initiale telegram
initial_state: true
trigger:
platform: event
event_type: telegram_command
event_data:
command: /HA
action:
- service: notify.telegram_groupe
data:
message: Que voulez-vous faire
data:
keyboard:
- /ping, /Fin
- id: reponse_Fin
alias: reponse a eteindre
initial_state: true
trigger:
platform: event
event_type: telegram_command
event_data:
command: /Fin
action:
- service: notify.telegram_groupe
data:
message: Tchao
data:
keyboard: []
- id: reponse_Fin
alias: reponse a eteindre
initial_state: true
trigger:
platform: event
event_type: telegram_command
event_data:
command: /ping
action:
- service: notify.telegram_groupe
data:
message: Pong
Modification
Donc j’ai testé, la commande suivante où
- la ligne "event_data: " est supprimée
- je teste la valeur du trigger pour déclencher des actions
- id: reponse_telegram_touttout
alias: Reponse initiale telegram
initial_state: true
trigger:
platform: event
event_type: telegram_command
action:
- service: notify.telegram_groupe
data:
message: |
Message envoyé
{{ trigger.event.data }}
Commande {{ trigger.event.data.command }}
{{ trigger.event.data.command == "/HA" }}
{% if trigger.event.data.command == "/HA" %}
la commande est reconnue /HA
{% else %}
la commande est non reconnue comme /HA
{% endif %}
data:
keyboard:
- /AllOn, /AllOff
- /ping, /Fin
- choose:
- conditions:
- condition: template
value_template: "{{ trigger.event.data.command == '/HA' }}"
sequence:
- service: notify.telegram_groupe
data:
message: commande reconnue /HA
default:
- service: notify.telegram_groupe
data:
message: commande non reconnue
Ce script permet de factoriser des actions quelque soit la commande issue de telegram.
Elles peuvent être factorisées comme ci dessus
- via les conditions sur les commandes
- condition: template
ou bien - via le template de réponse au message.
On notera dans l’exemple donné ci dessus, l’utilisation de | pour écrire du texte sur plusieurs ligne dans la réponse telegram.
En supplément, il est possible d’envoyer des arguments à une commande simplement en ajoutant du texte après la commande comme /HA bla blou qui transmet les arguments 'args': 'bla', 'blou'
.
Mais attention, les arguments sont envoyés comme un tableau de string donc si, on veut les utiliser, penser à choisir le bon élément du tableau. Par exemple:
{{ trigger.event.data.args[0] }}
Cela n’est pas visible si on utilise Telegram comme feedback car il semblerait que Telegram supprime les [] comme ci dessous:
A noter: pour trigger un événement telegram, il faut le / devant la commande.
On pourra aussi, au passage, noter les subtilités de YAML qui me font m’arracher les cheveux:
Dans le message telegram, la ligne ci dessous fonctionne parfaitement
{{ trigger.event.data.command == "/HA" }}
Mais elle donne une erreur dans la partie condition template, où il faut écrire:
{{ trigger.event.data.command == '/HA' }}
Debug
Pour aller plus loin, je conseille aux débutants de jeter un œil sur l’automatisation proposée via le « debugger ».
Il peut vraiment être très utile si on a beaucoup de choix et de conditions dans la réponse à un trigger comme ici une commande telegram.
Voilà en espérant que cela peut être utile à d’autres débutants comme moi.