Часть 1: Создаём Telegram-бота
Шаг 1: Получаем токен бота
- Откройте Telegram и найдите @BotFather
2. Отправьте команду /newbot
3. Введите имя бота (например, Farm Assistant Bot)
4. Введите username бота (оканчивается на bot, например, MyFishFarmBot или my_fish_farm_bot)
5. Сохраните токен вида: 1234567890:ABCDEFGhijKLMNopQRstUVwxyz
Шаг 2: Узнаём ваш Chat ID
- Найдите созданного бота в поиске Telegram (ссылка на чат с ботом есть в сообщении с токеном, просто кликните)
- Нажмите Start
- Напишите любое сообщение, например, id
- Перейдите по ссылке: https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates
- В ответе найдите "chat":{"id":-1001234567890} — это ваш Chat ID
- Сохраните значение рядом с токеном!
Часть 2: Настройка в Home Assistant и отправка сообщений
Шаг 1: Установка интеграции
1. В HA: Настройки → Устройства и службы → Интеграции
2. Нажмите "Добавить интеграцию", найдите "Telegram" → "Telegram Bot"
3. Выберите Polling и укажите Токен API (его мы сохраняли в первую очередь или можно зайти в чат с @BotFather и скопировать от туда)
4. Для виртуальных устройств я завел пространство "Серверная", рекомендую поступить также.
5. Заходим в Настройки → Устройства и службы → Telegram bot
6. Добавляем разрешенный ID чата (сохраняли ранее, если не сохранили, повторите действия). Будьте внимательны, бот будет принимать сообщения только из указанных чатов и будет доступен весь функционал, т. е. если через чат бота позднее будет возможность останавливать и запускать устройства, то эта возможность будет во всех разрешенных чатах.
Шаг 2: Отправляем тестовое сообщение
1. Заходим Панель разработчика → Состояния → Ищем по имени созданного датчика → Копируем его имя (начинается с sensor), которое используется системой
2. Заходим в Настройки → Автоматизация и сцены
3. Открываем Скрипты → Создать скрипт → Создать новый скрипт
4. Добавить действие → Telegram bot → Отправить сообщение
5. Ставим галку Идентификатор записи конфигурации → выбираем созданную интеграцию в выпадающем списке (она у вас будет одна) → вставляем текст (подставляем скопированное в первом пункте имя сенсора)
🌡️ ТЕМПЕРАТУРА ВОДЫ
Бассейн 1: {{ states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') | float | round(1) }}°C
5. Сохраняем → придумываем название → запускаем cскрипт
6. Ловим сообщение в телеграмм и убеждаемся, что все сделали корректно:
Шаг 3. Настройка уведомлений при выходе температуры из заданного диапазона
1. Заходим в Настройки → Автоматизация и сцены → Автоматизациии → Создать автоматизацию → Создать новую автоматизацию
2. В блоке Когда добавляем триггер (условие срабатывания)
3. Объект → Числовое состояние
4. Заполняем:
Объект - ищем сенсор с температурой воды
Нижний предел - если температура станет выше этого значения придет уведомление
В течение - уведомление придет, только если условие срабатывания будет сохраняться заданное время. Самый частый сценарий - устранения ложных срабатываний (достаточно будет 2-3-х минут), которые могут быть из-за брака датчика, скачков напряжения, рыба пыталась съесть и пр. Всегда держу в голове этот параметр, но ни разу не использовал.
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. Проверяем в обязательном порядке двумя способами (мог что-то не написать я, могли что-то некорректно указать вы, а могло выйти обновление, которое ломает автоматизацию выше и ее нужно написать по другому):
- первый способ - через три точки - запуск действия. В этом случае блок "когда" игнорируется и выполняется только "тогда", т. е. даже если температура не вышла из заданных границ, вы все равно получите уведомление в телеграмм и проверите корректность и удобство текста:
В телеграмме:
- второй - создаем реальные условия срабатывания. На превышение очень просто - берем и зажимаем датчик в кулак. Помните, что срабатывает, когда температура была ниже порогового значения, а стала выше (и наоборот), только в этом случае придет уведомление.
8. Создаем аналогично еще одну автоматизацию, но
- условия срабатывания:
- текст уведомления:
🚨 *СРАБОТАЛА АВТОМАТИЗАЦИЯ*
Температура воды пришла в норму
*Датчик:* {{ 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. В блок Когда, добавляем:
- объект → состояние → выбираем сенсор с нашим датчиком температуры и добавляем переход в указанные на скрине состояния:
- устройство → устройство → выбираем устройство для измерения температуры и в триггере выбираем "отключается":
Должно получиться так:
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 и исключить их).
В блоке Когда:
- объект → состояние → далее как на скрине:
- устройство - устройство далее как на скрине:
Должно получиться так:
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. В результате имеем следующие уведомления
- устройство недоступно:
- с датчика не приходят результаты:
- все проблемы устранены доступны и устройство и датчик (так как данных не было, а потом данные пришли, то работает и отправка сообщения с текущей температурой и оповещение об устранении проблем с самим устройством):
Шаг 5. Настройка запроса для получения текущего значения температуры в любой момент
1. Создаем еще одну автоматизацию
2. В блоке Когда выбираем Событие - Событие, Тип события - telegram_command, Данные события - command: /temp:
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, получаем в ответ текущую температуру:
Часть 3. Итог.
Мы превратили нашу систему мониторинга из пассивного наблюдателя в активного помощника, который сам сообщает о проблемах и отвечает на ваши вопросы.
Ключевые достижения:
- безопасное подключили Telegram-бота (работа только в указанных чатах)
- первые автоматизации для критических ситуаций и их устранения
- первая интерактивная команда (/temp)
Часть 4. Анонс.
В следующей статье подключим камеру, настроим еще одну интерактивную команду /photo для получения снимка с камеры и изучим возможности использования датчика движения с камеры.