Interactions/questions avec télégram

Ma question

Bonjour,
Je souhaiterais s’il est possible de poser des « questions » à HA via Télégram.
Du genre, « quelle est la météo du jour ? » Avec comme retour la météo.

Ma configuration


System Information

version core-2023.8.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.4
os_name Linux
os_version 6.1.21-v8
arch aarch64
timezone Europe/Paris
config_dir /config

Home Assistant Community StoreHome Assistant CloudHome Assistant SupervisorDashboardsRecorder___

Bonjour,

autant regarder ta page météo dans l’application Home assistant sur le tel ou il y a Télégram.

j’utilise télégram et ha, mais dans l’autre sens, une action sur HA envoi un télégram pour demander quoi faire, et suivant la réponse, HA fait une action.

1 « J'aime »

La mété était un exemple.
Mais j’aimerais mettre en plus d’autres applications (demander le statut des lumières, la température d’une pièce, les informations,…)

je peux t’aider si tu veux faire du nodered, le faisant moi même, si par contre, tu veux passer par les automation de base, je passe la main aux autres qui pourront certainement t’aiguiller.
par exemple, les remontées via nodered de mon HA sur les commandes help, bat et status :


sinon, en recherchant « telegram » dans la loupe en haut, tu trouvera ton bonheur, car plein de personne le font avec des automations de HA.
image

Intéressant le coté interaction Télégram / HA
Je disposais de cette interaction avant Discord / Jeedom et pas refait le pas aujourd’hui avec HA

Mais je voulais tester Télégram voir si plus réactif que Discord dans mon cas et voir le niveau de message type Embed comme sur Discord

Vous le donnez l’eau à la bouche :slight_smile:

Salut il y a un début de réponse ici

2 « J'aime »

Tu as etais plus vite que moi.

J’ai suivi ce tuto pour mettre en place les notifications Telegram.
Ce que j’aimerais maintenant c’est lancer une action depuis Telegram.

Je suis preneur, je ne connais pas Nodered. Mais cela semble répondre à mon besoin.

Bonjour,

voici un flow Télégram totalement opérationnel.
n’oubliez pas :

d’ajouter dans Nodered le node :
image

de déclarer votre Bot sous nodered,
image

de changer le chat_id dans la fonction message ici :
image

et le flow :

[{"id":"401ffa1a872dac4d","type":"tab","label":"Test Telegram","disabled":false,"info":"","env":[]},{"id":"706a7404ebbd160f","type":"telegram command","z":"401ffa1a872dac4d","name":"Télégram Commande help","command":"help","description":"","registercommand":false,"language":"","scope":"default","bot":"b97e9b6fa2a7f268","strict":false,"hasresponse":true,"useregex":false,"removeregexcommand":false,"outputs":2,"x":170,"y":120,"wires":[["9c7335ea393b150c"],[]]},{"id":"9c7335ea393b150c","type":"function","z":"401ffa1a872dac4d","name":"Message","func":"msg.method = \"sendMessage\";\nvar helpMessage = \"commandes :\\r\\n\";\nhelpMessage += \"help: ce message\\r\\n\";\nhelpMessage += \"status: état alarme\\r\\n\";\nhelpMessage += \"bat: état batteries\\r\\n\";\nmsg.payload = {\n    chatId: VOTRE_CHAT_ID,\n    sentMessageId: 111,\n    type: 'message',\n    content: helpMessage,\n};\nreturn msg;","outputs":1,"timeout":"","noerr":1,"initialize":"","finalize":"","libs":[],"x":480,"y":120,"wires":[["07b9a500d5f671b2"]]},{"id":"1c4e68f7ec336554","type":"telegram command","z":"401ffa1a872dac4d","name":"Télégram Commande bat","command":"bat","description":"","registercommand":false,"language":"","scope":"default","bot":"b97e9b6fa2a7f268","strict":false,"hasresponse":true,"useregex":false,"removeregexcommand":false,"outputs":2,"x":170,"y":220,"wires":[["1c2541bc85bfb996"],[]]},{"id":"1c2541bc85bfb996","type":"api-current-state","z":"401ffa1a872dac4d","name":"Nombre de batteries low","server":"2c5088ebae4d463e","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.nombre_batteries_low","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"nb_bat_decharge","propertyType":"msg","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":450,"y":220,"wires":[["e01a1f6f4913ce98"]]},{"id":"e01a1f6f4913ce98","type":"switch","z":"401ffa1a872dac4d","name":"Statuts Batteries Low","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"gte","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":700,"y":220,"wires":[["d781790922df60a6"],["26f3c8d7de65e01c"]]},{"id":"d781790922df60a6","type":"function","z":"401ffa1a872dac4d","name":"Message","func":"msg.method = \"sendMessage\";\nmsg.payload = {\n    chatId: VOTRE_CHAT_ID,\n    sentMessageId: 111,\n    type: 'message',\n    content: \"Toutes les batteries sont OK\",\n};\nreturn msg;","outputs":1,"timeout":"","noerr":1,"initialize":"","finalize":"","libs":[],"x":920,"y":180,"wires":[["07b9a500d5f671b2"]]},{"id":"26f3c8d7de65e01c","type":"function","z":"401ffa1a872dac4d","name":"Message","func":"msg.method = \"sendMessage\";\nvar helpMessage = \"Attention - Nb de batteries déchargées : \";\nhelpMessage += msg.nb_bat_decharge;\nmsg.payload = {\n    chatId: VOTRE_CHAT_ID,\n    sentMessageId: 111,\n    type: 'message',\n    content: helpMessage,\n};\nreturn msg;","outputs":1,"timeout":"","noerr":1,"initialize":"","finalize":"","libs":[],"x":920,"y":240,"wires":[["07b9a500d5f671b2"]]},{"id":"07b9a500d5f671b2","type":"telegram sender","z":"401ffa1a872dac4d","name":"","bot":"b97e9b6fa2a7f268","haserroroutput":false,"outputs":1,"x":1210,"y":120,"wires":[[]]},{"id":"b97e9b6fa2a7f268","type":"telegram bot","botname":"MON_BOT","usernames":"","chatids":"","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksprotocol":"socks5","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","botpath":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":false},{"id":"2c5088ebae4d463e","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

mais j’avais déjà donné un exemple ici :
https://forum.hacf.fr/t/dialoguer-avec-votre-maison-via-telegram-et-integrations-ha/12597/63

après, il y a peut etre plus simple, mais cela fait longtemps que cela fonctionne chez moi.

@Lapinou59 J’ai ajouté le Node configurer avec mon Token et ID de chats.
J’ai réussi à envoyer un message avec des paramètres de services et d’entités (en gros, à envoyer la météo suite à une demande) suite à la réception d’une commande dans Télégram.
Pour pousser plus loin, je souhaiterais que Télégram me réponde par un « poll » et exécuter des actions différentes en fonction des réponses.
Pour cela, j’ai réussi à faire répondre par des boutons cliquables, mais je ne sais pas comment récupérer la valeur répondue pour ensuite lancer des actions différentes.

regarde l’exemple que j’ai donné dans le lien, il y a un exemple de questions/réponses

J’ai beaucoup de mal à comprendre le code partagé.
Il doit aller où et comment est-il formaté ?

le code est formaté comme un flow nodered, il ne faut pas le lire directement, mais l’importer dans nodered et il va te recréer le flow.
menu de droite en haut, importer
image

et tu auras ce fow dans nodeRed

les triangles rouge sont la ou tu dois faire la conf que j’ai mentionné plus haut., sans oublier de définir ton Télégram dans les nodes aux 2 extrémités

J’ai réussi à importer le flux.
Par contre, je n’arrive pas du tout à avoir les interactions qui fonctionnent.
J’ai configuré avec mon bot télégram.
Mais après, mon bot ne répond plus, même à une simple interaction commande→réponse simple.

J’ai ce message d’erreur : Logger: homeassistant.components.telegram_bot.polling
Source: components/telegram_bot/polling.py:34
Integration: Telegram bot
First occurred: 10:35:46 (116 occurrences)
Last logged: 11:39:13

Update « None » caused error: « Conflict: terminated by other getUpdates request; make sure that only one bot instance is running »

ton bot est défini ailleurs dans d’autres automations ?
car il te dit de regarder si tu n’as qu’une seule instance de bot telegram qui tourne actuellement…:« make sure that only one bot instance is running »,

Bien vu, j’avais des automations avec le bot telegram d’actifs. J’ai donc désactivé ces automations.
Si, je comprends bien, je peux créer plusieurs flux NodeRed avec le bot telegram mais pas des flux NodeRed et des automations, le tout utilisant le bot. C’est soit l’un soit l’autre.

Dans ma fonction message, j’ai le contenu suivant :

msg.method = "sendMessage";
var helpMessage = "La météo au travail est ";
helpMessage += msg.condition += msg.text += msg.temperature;
msg.payload = {
    chatId: 511626576,
    sentMessageId: 111,
    type: 'message',
    content: helpMessage,
};
return msg;

Comment je peux mélanger du contenu de variable avec du texte fixe ? Pour avoir un résultat du type : La météo est $conditions pour une température de $temperature

si tu as importé mon flow, tu as un exemple dedans.
image

Merci pour l’aide.
Voici mon flux qui me donne la météo à la maison ou au travail en fonction de mon choix.


Avec le message type :

msg.method = "sendMessage";
var helpMessage = "La météo au travail est ";
helpMessage += msg.condition;
helpMessage += " pour une température de "
helpMessage += msg.temperature
helpMessage += "°C, avec un ressenti de ";
helpMessage += msg.temperature_ressentie;
helpMessage += "°C";
msg.payload = {
    chatId: XxXxX,
    sentMessageId: 111,
    type: 'message',
    content: helpMessage,
};
return msg;

Ça se rapproche petit à petit de ce que je souhaite.
Je souhaiterais savoir s’il est possible de déclencher les actions avec des synonymes ou des mots ressemblants, des phrases. Par exemple « quelle est la météo du jour » ou « quel est le temps »
Mais voulant utiliser par la suite une tablette pour contrôler le tout, il faut que ce soit plus des boutons cliquables que tu texte à renseigner.