Найти в Дзене

Статья 5. Подключаем telegram bot. Превращаем Home Assistant из пассивного наблюдателя в активного помощника.

2. Отправьте команду /newbot 3. Введите имя бота (например, Farm Assistant Bot) 4. Введите username бота (оканчивается на bot, например, MyFishFarmBot или my_fish_farm_bot) 5. Сохраните токен вида: 1234567890:ABCDEFGhijKLMNopQRstUVwxyz 1. В HA: Настройки → Устройства и службы → Интеграции 2. Нажмите "Добавить интеграцию", найдите "Telegram" → "Telegram Bot" 3. Выберите Polling и укажите Токен API (его мы сохраняли в первую очередь или можно зайти в чат с @BotFather и скопировать от туда) 4. Для виртуальных устройств я завел пространство "Серверная", рекомендую поступить также. 5. Заходим в Настройки → Устройства и службы → Telegram bot 6. Добавляем разрешенный ID чата (сохраняли ранее, если не сохранили, повторите действия). Будьте внимательны, бот будет принимать сообщения только из указанных чатов и будет доступен весь функционал, т. е. если через чат бота позднее будет возможность останавливать и запускать устройства, то эта возможность будет во всех разрешенных чатах. 1. Заходим П
Оглавление

Часть 1: Создаём Telegram-бота

Шаг 1: Получаем токен бота

  1. Откройте Telegram и найдите @BotFather
-2

2. Отправьте команду /newbot

3. Введите имя бота (например, Farm Assistant Bot)

4. Введите username бота (оканчивается на bot, например, MyFishFarmBot или my_fish_farm_bot)

5. Сохраните токен вида: 1234567890:ABCDEFGhijKLMNopQRstUVwxyz

-3

Шаг 2: Узнаём ваш Chat ID

  1. Найдите созданного бота в поиске Telegram (ссылка на чат с ботом есть в сообщении с токеном, просто кликните)
  2. Нажмите Start
  3. Напишите любое сообщение, например, id
  4. Перейдите по ссылке: https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates
  5. В ответе найдите "chat":{"id":-1001234567890} — это ваш Chat ID
  6. Сохраните значение рядом с токеном!

Часть 2: Настройка в Home Assistant и отправка сообщений

Шаг 1: Установка интеграции

1. В HA: Настройки → Устройства и службы → Интеграции

2. Нажмите "Добавить интеграцию", найдите "Telegram" → "Telegram Bot"

-4

3. Выберите Polling и укажите Токен API (его мы сохраняли в первую очередь или можно зайти в чат с @BotFather и скопировать от туда)

-5

4. Для виртуальных устройств я завел пространство "Серверная", рекомендую поступить также.

5. Заходим в Настройки → Устройства и службы → Telegram bot

6. Добавляем разрешенный ID чата (сохраняли ранее, если не сохранили, повторите действия). Будьте внимательны, бот будет принимать сообщения только из указанных чатов и будет доступен весь функционал, т. е. если через чат бота позднее будет возможность останавливать и запускать устройства, то эта возможность будет во всех разрешенных чатах.

-6

Шаг 2: Отправляем тестовое сообщение

1. Заходим Панель разработчика → Состояния → Ищем по имени созданного датчика → Копируем его имя (начинается с sensor), которое используется системой

-7

2. Заходим в Настройки → Автоматизация и сцены

-8

3. Открываем Скрипты → Создать скрипт → Создать новый скрипт

-9

4. Добавить действие → Telegram bot → Отправить сообщение

-10

5. Ставим галку Идентификатор записи конфигурации → выбираем созданную интеграцию в выпадающем списке (она у вас будет одна) → вставляем текст (подставляем скопированное в первом пункте имя сенсора)

🌡️ ТЕМПЕРАТУРА ВОДЫ
Бассейн 1: {{ states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') | float | round(1) }}°C
-11

5. Сохраняем придумываем название → запускаем cскрипт

-12

6. Ловим сообщение в телеграмм и убеждаемся, что все сделали корректно:

-13

Шаг 3. Настройка уведомлений при выходе температуры из заданного диапазона

1. Заходим в Настройки → Автоматизация и сцены → Автоматизациии → Создать автоматизацию → Создать новую автоматизацию

2. В блоке Когда добавляем триггер (условие срабатывания)

-14

3. Объект → Числовое состояние

4. Заполняем:

Объект - ищем сенсор с температурой воды

Нижний предел - если температура станет выше этого значения придет уведомление

В течение - уведомление придет, только если условие срабатывания будет сохраняться заданное время. Самый частый сценарий - устранения ложных срабатываний (достаточно будет 2-3-х минут), которые могут быть из-за брака датчика, скачков напряжения, рыба пыталась съесть и пр. Всегда держу в голове этот параметр, но ни разу не использовал.

-15

5. Повторяем пункт 4, но заполняем Верхний предел, т. е. срабатывание будет, если температура упадет ниже указанного параметра.

6. Добавляем действие в блоке Тогда, аналогично п.5 для отправки тестового сообщения. Помните, что код сенсора вам необходимо заменить на ваш, тоже описано в предыдущем шаге с отправкой тестового сообщения. Сообщение отправляем следующее:

🚨 *СРАБОТАЛА АВТОМАТИЗАЦИЯ*
{% set temp = states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') | float | round(1) %}
{{ '🌡️ Температура ВЫШЕ 24°C' if temp > 24 else '🌡️ Температура НИЖЕ 18°C' }}
*Датчик:* {{ state_attr('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1', 'friendly_name') }}
*Текущее значение:* {{ temp }}°C
*Время срабатывания:* {{ now().strftime('%d.%m.%Y %H:%M:%S') }}

7. Проверяем в обязательном порядке двумя способами (мог что-то не написать я, могли что-то некорректно указать вы, а могло выйти обновление, которое ломает автоматизацию выше и ее нужно написать по другому):

- первый способ - через три точки - запуск действия. В этом случае блок "когда" игнорируется и выполняется только "тогда", т. е. даже если температура не вышла из заданных границ, вы все равно получите уведомление в телеграмм и проверите корректность и удобство текста:

-16

В телеграмме:

-17

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

8. Создаем аналогично еще одну автоматизацию, но

- условия срабатывания:

-18

- текст уведомления:

🚨 *СРАБОТАЛА АВТОМАТИЗАЦИЯ*
Температура воды пришла в норму
*Датчик:* {{ state_attr('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1', 'friendly_name') }}
*Текущее значение:* {{ states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') | float | round(1) }}°C
*Время срабатывания:* {{ now().strftime('%d.%m.%Y %H:%M:%S') }}

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

Шаг 4. Настройка уведомлений о недоступности устройства или датчика температуры

1. Создаем новую автоматизацию

2. В блок Когда, добавляем:

- объект → состояние → выбираем сенсор с нашим датчиком температуры и добавляем переход в указанные на скрине состояния:

-19

- устройство → устройство → выбираем устройство для измерения температуры и в триггере выбираем "отключается":

-20

Должно получиться так:

-21

3. В Тогда, добавляем как и ранее отправку сообщения, в тексте указываем:

📊 *ВОЗНИКЛА ПРОБЛЕМА С УСТРОЙСТВОМ*
*Устройство:*
• Имя: {{ state_attr('binary_sensor.zal_1_temperatura_vody_status_kontrollera_vody', 'friendly_name') }}
• Статус: {{ '✅ Онлайн' if is_state('binary_sensor.zal_1_temperatura_vody_status_kontrollera_vody', 'on') else '❌ Офлайн' }}
*Датчик температуры:*
• Имя: {{ state_attr('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1', 'friendly_name') }}
• Статус: {{ '✅ Активен' if states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') not in ['unknown', 'unavailable'] else '⚠️ Неизвестно' if states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') == 'unknown' else '❌ Отключен' }}

4. Как и ранее также добавляем автоматизацию, которая отправит сообщение при исправлении проблемы (также время начала проблемы и времени ее завершения поможет при поиске причины проблем с датчиком, а если мы имеем дело с ложными кратковременными срабатываниями, то можно добавить В течение Шаг 3, пункт 4 и исключить их).

В блоке Когда:

- объект → состояние → далее как на скрине:

-22

- устройство - устройство далее как на скрине:

-23

Должно получиться так:

-24

5. В блоке тогда все как обычно, текст следующий:

📊 *УСТРАНЕНА ПРОБЛЕМА С УСТРОЙСТВОМ*
*Устройство:*
• Имя: {{ state_attr('binary_sensor.zal_1_temperatura_vody_status_kontrollera_vody', 'friendly_name') }}
• Статус: {{ '✅ Онлайн' if is_state('binary_sensor.zal_1_temperatura_vody_status_kontrollera_vody', 'on') else '❌ Офлайн' }}
*Датчик температуры:*
• Имя: {{ state_attr('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1', 'friendly_name') }}
• Статус: {{ '✅ Активен' if states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') not in ['unknown', 'unavailable'] else '⚠️ Неизвестно' if states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') == 'unknown' else '❌ Отключен' }}

6. В результате имеем следующие уведомления

- устройство недоступно:

-25

- с датчика не приходят результаты:

-26

- все проблемы устранены доступны и устройство и датчик (так как данных не было, а потом данные пришли, то работает и отправка сообщения с текущей температурой и оповещение об устранении проблем с самим устройством):

-27

Шаг 5. Настройка запроса для получения текущего значения температуры в любой момент

1. Создаем еще одну автоматизацию

2. В блоке Когда выбираем Событие - Событие, Тип события - telegram_command, Данные события - command: /temp:

-28

3. В блоке Тогда все как обычно, текст следующий:

*Датчик:* {{ state_attr('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1', 'friendly_name') }}
*Текущее значение:* {{ states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') | float | round(1) }}°C

4. Отправляем в чат текст /temp, получаем в ответ текущую температуру:

-29

Часть 3. Итог.

Мы превратили нашу систему мониторинга из пассивного наблюдателя в активного помощника, который сам сообщает о проблемах и отвечает на ваши вопросы.

Ключевые достижения:

- безопасное подключили Telegram-бота (работа только в указанных чатах)

- первые автоматизации для критических ситуаций и их устранения

- первая интерактивная команда (/temp)

Часть 4. Анонс.

В следующей статье подключим камеру, настроим еще одну интерактивную команду /photo для получения снимка с камеры и изучим возможности использования датчика движения с камеры.