Оповещение о РО через колонки Яндекса (Ну или в целом получение сигналов в УДЯ)
В рамках данного поста рассматривается система (алгоритм) получения сигналов о РО (Ракетной опасности) в УДЯ (Умный дом Яндекс).
Предисловие. Это лишь пример. ТГ выбран в качестве доступности и простоты, так как информации о том, как получать данные из АСЦО (Автоматизированная система централизованного оповещения) в открытом доступе нет.
Принцип работы системы:
Сервис с заданной периодичностью считывает сообщения из Telegram-канала губернатора.
При появлении сообщения о РО, из текста извлекаются районы (регионы).
Из базы данных выбираются пользователи, подписанные на соответствующие районы.
Далее сервис отправляет HTTP-запросы в сторонний сервис WQTT с указанием пользователя и его устройства, которое необходимо перевести в состояние «Вкл.».
Для упрощения взаимодействия пользователя со сторонним сервисом испольуезтся Telegram-бот. Хотя это и облегчает процесс, от пользователя всё равно требуются дополнительные действия.
Суть интеграции заключается в имитации "лампочки" в сервисе WQTT, которая отображает состояние ракетной опасности:
Включено — при поступлении сигнала о ракетной опасности;
Выключено — при сигнале отбоя.
Почему WQTT? Вопрос хороший, ответ простой: он уже встроен в экосистему УДЯ и предоставляет пробный период (1 месяц) для тестирования (Можно использовать другой сервис или написать свой).
Взаимодействие пользователя с системой осуществляется через telegram бота:
Пользователь отправляет команду /start.
Бот присылает инструкцию и ожидает от пользователя токен с сайта WQTT.
Пользователь отправляет полученный токен боту.
Бот отправляет запрос к сервису для проверки токена. Если токен неверный, то бот отправляет сообщение о не корректном токене и ожидает валидный токен.
После авторизации пользователь выбирает районы, на которые хочет подписаться. Если выбранный район ещё неактивен, то выполняются два действия:
На стороне WQTT создаётся новое устройство с именем соответствующего района.
В базу данных добавляется запись, связывающая пользователя, район и идентификатор созданного устройства.
После выбора районов, пользователь нажимает на кнопку "Завершить добавление" и бот присылает дальнейшую инструкцию.
Пользователь совершает действия в соответствии с присланной инструкцией. В результате у него в УДЯ появляются устройства и сценарии (созданные вручную).
И тут мы подходим минусу (или багу) WQTT (или я не понимаю чего-то, что тоже возможно): устройства, созданные при помощи API, не синхронизируются с УДЯ. Т.е. если в WQTT включать\выключать "лампочку", то в УДЯ ничего не происходит с "лампочкой" (если в обратном порядке действовать, то все работает).
Решение простое. Необходимо на сайте WQTT открыть настройки устройства и нажать кнопку "Сохранить". После этого "Лампочка" WQTT синхронизируется с "Лампочкой" в УДЯ.
Собственно, на этом этапе взаимодействие пользователя с системой завершается.
Далее процесс полностью автоматизирован.
Вторая часть системы полностью автоматизирована.
Сервис "Мониторинг" реализован на Python с использованием библиотеки Telethon.
Telegram Bot реализован на Python с использованием библиотеки aiogram 3.x.
P.S. Самый важный момент системы это скорость реагирования на сообщения о РО. Чем быстрее придет оповещение тем лучше. Из-за этого появляются несколько нюансов при масштабирование системы:
На сайте WQTT нет информации о предельном количество HTTP запросов в ед. времени.
Периодичность считывания сообщений из каналов в Telegram. Аналогично п.1. Аккаунт могут отправить в бан :-(
P.P.S. Данный алгоритм можно использовать и для других целей, зависит от фантазии и необходимости.