Даже если вы не живёте в стране, которая активно борется с детищем Павла Дурова, но активно используете Telegram в своей инфраструктуре домашней автоматизации, всегда полезно узнать как можно раньше о том, что сервис по тем или иным причинам прекратил свою работу и ваш бот больше вам не бот.
Статья подразумевает, что вы уже сходили на поклон к BotFather, настроили бота Telegram и знаете, где взять API токен.
Создаём сенсор Telegram API
Создадим простой файл скрипта telegram_health.sh
, который будет возвращать нужный нам результат:
|
|
Где XXXXX:YYYYY - это API token, полученный при создании бота. Файл можно проверить в любом окружении Linux, запустив команду
|
|
Если всё сделано правильно, скрипт должен нам ответитьonline
.
Socks Proxy
Если ваш телеграм работает через Socks Proxy, в строку вызова curl выше можно добавить адрес этой прокси, например, так:
|
|
вариант с паролем:
|
|
Копируем скрипт в Hass.io
Теперь нам надо определиться, куда мы скопируем наш скрипт. Я предлагаю просто создать папку scripts внутри директории config и скопировать его туда. Это решение будет работать как с hassos, так и с hassio, установленным любым способом. Ещё один плюс - мы можем спокойно редактировать этот файл аналогично тому, как мы редактируем конфиги Hass.io
Создаём сенсор
Добавляем в раздел sensors:
файла configuration.yaml
следующие строки:
|
|
Проверяем, что всё работает
Заходим в список наших сущностей (иконка <> в левом нижнем углу, набираем в фильтре telegram
) и видим наш замечательный сенсор в статусе online
:
Проверить его работу достаточно просто - по умолчанию сенсор обновляется каждую минуту, достаточно отредактировать telegram_health.sh
так, чтобы API нас отругал (например, заменить один символ в токене) и статус сенсора в течение минуты должен измениться на offline
:
Создаём автоматизацию для уведомления
Использовать Telegram для уведомления о прекращении его работы не получится по понятным причинам, поэтому нам нужно выбрать другой канал нотификаций. Я решил выбрать html5 push нотификации, которые замечательно работают на платформах Windows и Андроид и точно не поддерживаются на iOS.
Квест по настройке, включающий в себя подтверждения владения доменом, от имени которого отправляются нотификации, пересказывать не буду, но оно того стоило. Теперь любое устройство, на котором открыт браузер Chrome или Firefox может выступать получателем таких сообщений, достаточно открыть веб-интерфейс Home Assistant и активировать переключатель push нотификаций:
На Android устройстве браузер может быть закрыт, уведомление всё равно придёт. Ходят слухи, что такого же поведения можно добиться в Google Chrome для Windows, установив хотя бы одно расширение, требующее прав для работы в фоновом режиме (background
), но я не проверял, так как браузер у меня и так всегда открыт.
Создадим пару автоматизаций, которые будут отправлять на все устройства сообщение о недоступности Telegram и (sic!) удалять это сообщение, когда сервис окажется онлайн.
|
|
Здесь мы используем специальное свойство tag
, позволяющее управлять конкретной нотификацией, которую мы отправили ранее. Например, закрыть её.
Вот так это выглядит на экране компьютера:
Вместо заключения
Сделать сенсор доступности API Telegram оказалось несложно. Нужно заметить, что он не отреагирует, если ваш бот вдруг испустит дух, но будет фиксировать только доступность API Telegram. Понятно, что у технологии html5 push есть свои ограничения, тут каждый может выбрать резервный канал нотификаций, подходящий ему. Остаётся только пожелать, чтобы данный сенсор нам никогда не понадобился.