Найти в Дзене
DigitalComfort

Подключаем чат-бота и Telegram-каналы к Home Assistant

Telegram в связке с Home Assistant можно использовать для различных целей. В общем случае - это отправка из Home Assistant в Телеграм текстовых сообщений, изображений, видео и прочих файлов. Ну а практическое применение этой возможности зависит только от вашей фантазии. У меня, например, Home Assistant ведёт в Телеграме лог перемещений членов семьи по заданным локациям, хранит базу скриншотов с камер наблюдения, ведёт лог суточной температуры, хранит видеозвонки с домофона. Оригинальная инструкция по настройке есть в официальной документации Home Assistant: Для начала нам нужно создать чат-бота в Telegram. Открываем приложение и в строке поиска набираем "botfather". Из списка внимательно выбираем именно того бота, имя пользователя которого отображается как "@BotFather", это важно: В чате с BotFather нажимаем кнопку "Старт", бот при этом выдаст длиннющий список команд. Нам нужна команда /newbot. Она первая в списке, можно нажать на неё, можно ввести её в поле сообщения и отправить, а м
Оглавление

Telegram в связке с Home Assistant можно использовать для различных целей. В общем случае - это отправка из Home Assistant в Телеграм текстовых сообщений, изображений, видео и прочих файлов. Ну а практическое применение этой возможности зависит только от вашей фантазии.

У меня, например, Home Assistant ведёт в Телеграме лог перемещений членов семьи по заданным локациям, хранит базу скриншотов с камер наблюдения, ведёт лог суточной температуры, хранит видеозвонки с домофона.

Оригинальная инструкция по настройке есть в официальной документации Home Assistant:

Telegram

Создание чат-бота в Telegram

Для начала нам нужно создать чат-бота в Telegram. Открываем приложение и в строке поиска набираем "botfather". Из списка внимательно выбираем именно того бота, имя пользователя которого отображается как "@BotFather", это важно:

-2

В чате с BotFather нажимаем кнопку "Старт", бот при этом выдаст длиннющий список команд. Нам нужна команда /newbot. Она первая в списке, можно нажать на неё, можно ввести её в поле сообщения и отправить, а можно нажать кнопку "Меню" и выбрать эту команду оттуда:

-3

После этого будет предложено создать имя для вашего бота. Оно может быть любым, под этим именем будет отображаться контакт чат-бота в списке чатов в Телеграм. Вторым сообщением отправляем в BotFather придуманное имя пользователя, которое обязательно должно оканчиваться на "bot" и быть уникальным, если такое имя уже есть - вам будет предложено придумать другое. Вид имени пользователя никакого значения не имеет, для нас это просто идентификатор, который мы потом вставим в файл конфигурации Home Assistant, поэтому можно не заморачиваться с красивым написанием:

-4

В ответном сообщении BotFather выдаст ссылку на ваш новый бот вида t.me/your_user_name и токен доступа к HTTP API, который нужно сохранить в надёжном скрытном месте.

Получение идентификатора чата вашего Telegram

Кроме этого ещё потребуется идентификатор чата вашего личного аккаунта Телеграм, чтобы ваш новый бот знал, куда присылать сообщения. Это можно сделать множеством способов, но самый простой - спросить у бота GetIDs. Набираем в строке поиска в Телеграм "getidsbot", внимательно выбираем из списка бота именно с таким именем пользователя и нажимаем кнопку "Старт":

-5

Бот сразу же выдаст длинное сообщение, в конце которого будет список под заголовком "Вы", и первой строкой в этом списке после id: будет числовой идентификатор вашего чата.

Если вы хотите, чтобы Home Assistant присылал сообщения не только на ваш телефон, но и на телефоны членов вашей семьи, то на каждом из этих телефонов нужно будет проделать ту же операцию с ботом GetIDs - узнать идентификаторы чатов Телеграма на этих телефонах. В Home Assistant потом можно будет выбирать что именно и кому присылать, не обязательно присылать одни и те же уведомления всем.

Теперь всё готово для настройки интеграции "Telegram bot" в Home Assistant.

Настройка интеграции Telegram bot в Home Assistant

С помощью File Editor открываем файл configuration.yaml. Если File Editor у вас ещё не установлен, то вот моя инструкция, как это сделать:

В конец текста в файле configuration.yaml добавляем код конфигурации интеграции Телеграм бота, где в поле api_key вставляем полученный у BotFather токен, а в поле allowed_chat_ids идентификатор чата, полученный у GetIDs. Если нужно добавить несколько телефонов, то столбиком ниже на том же уровне отступа добавляем идентификаторы их чатов (не забывая про чёрточку и пробел перед каждым идентификатором):

telegram_bot:
- platform: polling
api_key: "1117774004:EABQulCACdgkQOTN3hS_5HZwSwxDlekCixr"
allowed_chat_ids:
- 44441111
- 55552222

-6

Ниже добавим код нотификатора. Подробнее об интеграции Notify я рассказывал здесь:

Один нотификатор - один телефон (для каждого пользователя создаётся свой нотификатор)

notify:
- platform: telegram
name: "sarah"
chat_id: 44441111
- platform: telegram
name: "telegram_alert"
chat_id: 55552222

-7

Здесь в поле "name" можно задать любое имя для нотификатора, по этому имени мы будем искать нотификатор при написании автоматизаций. В поле "chat_id" вписываем всё тот же идентификатор чата Телеграм для данного пользователя (телефона).

Сохраняем изменения. Проверяем правильность конфигурации (меню Панель разработчика -> YAML -> Проверить конфигурацию) и перезапускаем Home Assistant.

Проверка работоспособности чат-бота

В приложении Telegram нажимаем на ссылку вида t.me/your_user_name, которую нам выдал BotFather, чтобы открыть чат с вашим новым чат-ботом. И нажимаем там кнопку "Старт".

В Home Assistant открываем меню Панель разработчика -> Действия, в поле "Действие" начинаем вводить имя нужного нам нотификатора, и затем выбираем его из списка (в моём случае это имя "telegram_alert"). В поле "Message" вводим любой текст сообщения и нажимаем кнопку "Выполнить действие":

-8

Сообщение должно прийти в чат бота:

-9

Если всё получилось, то теперь можно пользоваться Телеграмом, как ещё одним источником уведомлений от умного дома. Любая автоматизация может содержать действие отправки уведомления в Телеграм. Естественно, что текст сообщения может содержать шаблоны, чтобы извлекать полезные данные из умного дома.

Пример автоматизации с сообщением-шаблоном

Например, у меня есть автоматизация, которая раз в сутки в 10 утра отправляет в Телеграм информацию о минимальной и максимальной температуре с уличного датчика температуры на даче. В течение суток два вспомогательных объекта input_number с помощью отдельной автоматизации запоминают текущее минимальное и максимальное значение температуры, а два вспомогательных объекта input_datetime запоминают моменты времени обновления этих экстремумов. В 10 утра срабатывает автоматизация отправки сообщения в Телеграм. При этом само сообщение собирается с помощью шаблона: "{{ min_t }}° ({{ min_time }}), {{ max_t }}° ({{ max_time }})" и включает в себя как значения минимальной и максимальной температуры, так и моменты времени их фиксации:

-10

В Телеграм я получаю вот такой посуточный лог температуры на даче:

-11

Создание отдельных каналов Telegram для публикации уведомлений из Home Assistant

В примере с логом температуры (выше) отправка сообщений идёт не в чат бота, а в чат отдельно созданного канала специально для лога температуры, чтобы не смешивать эти данные с другими сообщениями умного дома. Для этого нужно создать в Телеграме канал и получить идентификатор этого канала с помощью бота GetIDs. Каналов можно создать столько, сколько нужно, и в каждый из них присылать какие-то свои виды уведомлений и настроить свои звуковые оповещения.

Открыв приложение Телеграм на телефоне, нажимаем на круглую синюю кнопку с карандашиком и выбираем "Создать канал". Нажимаем кнопку "Создать канал". Вводим название канала и нажимаем галочку. Выбираем тип канала - "Частный канал" и снова нажимаем галочку.

После этого нам нужно добавить в подписчики канала нашего телеграм-бота. Просто так кнопкой "Добавить подписчиков" это не сделать - бота нет в списке. Нужно полностью ввести имя его пользователя в строке "Поиск людей", тогда он будет найден:

-12

Нажимаем на найденного бота и подтверждаем назначение его администратором, права оставляем какие есть по умолчанию, нажимаем галочку.

Теперь нужно узнать идентификатор вновь созданного канала. Для этого отправляем в канал любое сообщение, а затем пересылаем это сообщение в чат бота GetIDs, и бот выдаст ответ, в котором под списком данных "Вы" будет список данных "Исходный чат":

-13

Этот идентификатор нам и нужен (поле id:). Обратите внимание на знак минуса, он обязателен, это признак идентификаторов всех каналов. Вместе с минусом его и нужно забивать в конфигурацию Home Assistant.

Берём этот идентификатор и вставляем его в конфигурацию интеграции Telegram bot в файле configuration.yaml, просто добавив ещё одну строку в список разрешённых идентификаторов:

telegram_bot:
- platform: polling
api_key: "1117774004:EABQulCACdgkQOTN3hS_5HZwSwxDlekCixr"
allowed_chat_ids:
- 44441111
- 55552222
- -1002332723326

И создаём ещё один нотификатор для этого канала:

notify:
- platform: telegram
name: "sarah"
chat_id: 44441111
- platform: telegram
name: "telegram_alert"
chat_id: 55552222
- platform: telegram
name: "telegram_channel"
chat_id: -1002332723326

Сохраняем изменения. Проверяем правильность конфигурации (меню Панель разработчика -> YAML -> Проверить конфигурацию) и перезапускаем Home Assistant.

Точно так же проверяем отправку уведомлений в канал, выбрав теперь соответствующий нотификатор (у меня это "telegram_channel"):

-14

Выполняем действие, теперь сообщение пришло уже в канал:

-15

Таким образом можно разделять потоки уведомлений от умного дома по разным каналам. Какие-то каналы оставить только для себя, администратора умного дома, а на какие-то можно подписать членов семьи, если им будет полезна та или иная информация. Например, моя супруга подписана на канал с логом температуры на даче, чтобы следить за заморозками. Удобно.