Налаштовуємо Home Assistant для роботи з Telegram
На сьогодні, Telegram є одним з найпопулярніших засобів обміну повідомленнями. Якщо ви є активним користувачем Telegram, мабуть, тоді для вас буде зручно отримувати повідомлення про стан вашого розумного будинку саме сюди. Більше того, у вас, навіть, з’явиться можливість керування прямісінько з Telegram.
Підготовка
Додамо включення в configuration.yaml окремими зовнішніми файлами
telegram_bot: !include includes/telegram.yaml
notify: !include includes/notify.yaml
Введіть в стрічці пошуку Telegram @BotFather та перейдіть до нього. Створимо бота в Telegram за допомогою @BotFather: натискаємо /newbot та вводимо назву, наприклад «testhassbot», тиснемо відправити. Другим кроком, вводимо ім’я та відправляємо. Якщо ім’я не зайняте, бачимо подібне повідомлення, інакше підберіть інше ім’я для вашого бота.

В повідомленні є посилання на створеного вами бота, можете його зберегти на майбутнє, також скопіюйте токен, він нам ще знадобиться.
Знайдіть бота @userinfobot та натисніть /start , у відповідь ви отримаєте власний telegram ID, скопіюйте його. Повторіть цю процедуру з іншими членами родини, якщо хочете щоб і вони теж могли отримувати інформацію з домашнього телеграм бота. Заповніть інформацію в файлі /config/includes/telegram.yaml отриманими раніше даними за зразком
- platform: polling
api_key: 1234567890:vVH9dL2EBpd-1ffk5b63k8dOGHMK34BGnQX #Токен
allowed_chat_ids:
- 11111111 # telegram ID, що матиме доступ до бота
- 2222222222 # telegram ID, що матиме доступ до бота
- 33333333 # telegram ID, що матиме доступ до бота
Створюємо сповіщення та даємо їм назви, для кожного члена родини в файлі /config/includes/notify.yaml
- name: telegram_dad
platform: telegram
chat_id: 11111111 # telegram ID
- name: telegram_mam
platform: telegram
chat_id: 2222222222 # telegram ID
- name: telegram_john
platform: telegram
chat_id: 33333333 # telegram ID
Перезавантажте Home Assistant.
Налаштувавши сповіщення в автоматизації, є змога відправляти повідомлення конкретному адресату

Або усім, хто підписаний на повідомлення від домашнього бота.

Додавання автоматизацій для роботи з Telegram
Створимо першу автоматизацію що діятиме при старті бота (або натисканні /start)
- id: telegram-control-pannel-start
alias: 'Telegram Control Pannel Command'
initial_state: on
trigger:
platform: event
event_type: telegram_command
event_data:
command: '/start'
action:
- service: telegram_bot.send_message
data_template:
target: '{{ trigger.event.data.user_id }}'
message: >
{{ [
"Пріветікі",
"До зірок",
"Сер, Да сер!",
"Здоровенькі були!",
"Вечір в хату!",
"Здрасть!",
"Шо такоє?",
"Паєхалі",
"хелло аміго",
"Буенос ночес!"
] | random }}
data:
inline_keyboard:
- '{{"\U0001F4A1"}} Lights:/lights, {{"\u2753"}} Status:/sstatus, {{"\u26D4"}} Security:/security'
- '{{"\U0001F6E0"}} System:/system, {{"\U0001F501"}} Ping:/ping, {{"\U0001F4CC"}} User location:/location '
- '{{"\U0001F324"}} Weather:/weather, {{"\U0001F4B5"}} Shoping :/shopinglist'
В вікні телеграм ми побачимо щось подібне

Тепер додамо ще одне правило, яке діятиме при натисканні кнопки в вікні Telegram наприклад кнопки «Weather»
- alias: 'IK - Telegram - status weather'
trigger:
platform: event
event_type: telegram_callback
event_data:
data: '/weather'
action:
- service: telegram_bot.edit_message
data_template:
message_id: 'last'
chat_id: '{{ trigger.event.data.user_id }}'
title: '{{"\U0001F324"}} *Weather*'
message: |
{{"\U0001F3E0"}} Клімат, звіт за {{ states('sensor.time_date') }}
{{"\U0001F321"}} Температура - {{ states('sensor.openweathermap_temperature') }} C
{{"\U0001F32B"}} Вологість - {{ states('sensor.openweathermap_humidity') }} %
{{"\U0001F4AA"}} Тиск - {{ (states('sensor.openweathermap_pressure')|float * 0.7500637)|round(2) }} мм рт. ст
{{"\U00002600"}} Погода - {{ states('sensor.openweathermap_weather') }}
{{"\U00002B50"}} Прогноз на сьогодні - {{ states('sensor.openweathermap_forecast_temperature') }} C
{{"\U0001F327"}} Прогноз дощу - {{ states('sensor.openweathermap_rain') }}
{{"\U0001F328"}} Прогноз снігу - {{ states('sensor.openweathermap_snow') }}
inline_keyboard:
- '{{ "\u21a9\ufe0f" }} Панель керування:/to_cp'
В такому варіанті правила автоматизації у відповідь ми отримаємо подібне повідомлення:

Тут директива service: telegram_bot.edit_message не відправляє нове повідомлення, а редагує останнє (message_id: ‘last’), відбувається це з не нав’язливим анімаційним ефектом, це повідомлення «зміниться лише в того користувача, який натискав кнопку «Weather» (chat_id: ‘{{ trigger.event.data.user_id }}’), що не відволікає інших членів вашої родини зайвими повідомленнями.
Аналогічні правила і дії можна «повісити» і на інші кнопки «панелі керування», і навіть зробити деревовидну структуру дій та команд. Після всіх налаштувань, поділіться з членами вашої родини посиланням на домашнього бота. Користуйтесь з задоволенням.

Поділіться будь ласка своїм автоматизаціями на інших кнопках (панелях):
Там де світло, статус, охорона, пінг, покупки, щоб зрозуміти, що туди своє вписати.
Або може де є ще приклади, як організувати цей простір панелей)
Маю конфіг на github, ось посилання на папку з автоматизаціями https://github.com/risozhor/ha-config/tree/master/automations
Подскажите как обновить inline_keyboard, при переключении статуса света например как у вас на видео 0:43, а то свет то переключается но чтоб это увидеть нужно вернуться на раздел назад, а потом снова войти в прежнюю вкладку переключения света
Можно ли где то глянуть весь лог автоматизаций с данного видео?
Після війни, зараз немає можливості.
Спасибо за статью, очень помогли!
Подскажите можно ли отправить фоторгафию так же через edit_message?
К сожалению нет, отправка фото делается отдельным сервисом (telegram_bot.send_photo), аналогично нельзя заменять отправленное фото на текст. Возможно ситуация изменится в будущем с выходом обновлений HA, но пока я решения не нашел.
Возможно ли делать типа подгруппы?
немогу понять возможно ли это
делаю event_type: telegram_command
далее по вложенности колбек ) – все ок
а далее хочу дальше ) но не команд ни колбек неработает (
Вопрос не совсем понятен, но в любом случае воспользуйтесь Developer Tools, если заработает там, то будет и код работать.
Доброго дня, а куди вписувати автоматизацію, цівкавить Spoiler то треба створювати окремий файл?
Добрий день! Так, краще виносити все в окремі файли, або навіть папки. У мене всі правила автоматизацій винесено в папку automations, а вже в ній для кожної кімнати чи девайсу можна створювати окремі файли, так ви швидше знайдете потрібне правило і не заплутаєтесь
посилання на папку в /config/configuration.yaml:
automation: !include_dir_merge_list automationsНазви файлів в папці значення не мають, головне щоб були написані латиницею і мали розширення .yaml
В будь-якому випадку дякую, Ви мені дуже допомогли. Код у коменті був відсутньою ланкою у розумінні матеріалів вашої статті.
Вітаю.
Поясніть як не спеціалісту.
inline_keyboard:
– ‘{{ “\u21a9\ufe0f” }} Панель керування:/to_cp’ – це куди має бути перехід? в коді такого немає…
В даному випадку бот буде “слухати” те що після знаку “:”, тобто, він має виконати команду зі слешом, тут “/to_cp”
Далі, якщо у вас є правило з таким тригером, HA виконає ту команду, яка була описана в правилі.
Наприклад:
- id: telegram-ik-to-cp alias: "Telegram Панель керування" trigger: - platform: event event_type: telegram_callback event_data: data: "/to_cp" action: - service: telegram_bot.edit_message data_template: message_id: "last" chat_id: "{{ trigger.event.data.user_id }}" title: "*Панель керування*" message: "Оберіть розділ" inline_keyboard: - '{{"\U0001F4A1"}} Lights:/lights, {{"\u2753"}} Status:/sstatus, {{"\u26D4"}} Security:/security' - '{{"\U0001F6E0"}} System:/system, {{"\U0001F501"}} Ping:/ping, {{"\U0001F4CC"}} User location:/location ' - '{{"\U0001F324"}} Weather:/weather, {{"\U0001F4B5"}} Shoping :/shopinglist'Працює! 😉
Дякую! Як тільки не крутив, не виходило.
А чи можна за допомогою telegram передавати дані в НА. У мене задача передати показники лічильників з квартири батьків в мою базу?
Теоретично можна, для цього бот повинен чекати вводу вручну. Але, чесно кажучи, досвіду такого налаштування не маю.
Можна створити input_text або input_number helper і записувати в нього повідомлення через telegram_callback