В прошлой заметке я показал, как отправлять email-уведомления через «служебный» топик в базе данных — без прямой зависимости от MQTT. Сегодня расширим эту систему: добавим Telegram, сохранив ту же простую архитектуру.
Цель — чтобы любая часть моей IoT-системы могла сказать: «нужно уведомить», а диспетчер сам решит — по email, в Telegram или ещё куда.
Идея: один топик — несколько каналов
Вместо отдельных топиков вроде _alerts/email и _alerts/telegram я решил использовать один общий топик:
zigbee2mqtt/_alerts
А внутри сообщения указывать, куда и что отправлять. Например:
{
"channel": "telegram",
"text": "🚨 Протечка в ванной!"
}
или
{
"channel": "email",
"subject": "Низкая батарейка",
"body": "Датчик двери разряжен до 9%."
}
Теперь достаточно одного скрипта, который читает этот топик и маршрутизирует сообщения в нужный канал.
Почему так лучше?
- ✅ Не нужно создавать новый топик под каждый новый канал.
- ✅ Легко добавить Signal, Discord, Pushover — просто расширив логику.
- ✅ Вся конфигурация — в одном месте.
- ✅ IOT-логика остаётся простой: «записать JSON в _alerts» — и всё.
_alerts/email. Но если планируете развивать систему — лучше сразу заложить гибкость.
Как это работает технически
- Ваша логика (скрипт, триггер, правило) вставляет в таблицу
sensor_dataзапись:INSERT INTO sensor_data (topic, value) VALUES ('zigbee2mqtt/_alerts', '{"channel":"telegram","text":"Тревога!"}'); - Раз в 1–2 минуты запускается универсальный
alert_dispatcher.py. - Он читает все новые записи из
zigbee2mqtt/_alerts, определяет канал и вызывает соответствующий обработчик. - После отправки запись удаляется (или помечается).
Поддерживаемые каналы (на старте)
- email — через локальный SMTP (sendmail/postfix)
- telegram — через Bot API (требуется токен и chat_id)
Остальные — легко добавить позже.
Скрипт-диспетчер с поддержкой Telegram
Вот улучшенная версия alert_dispatcher.py, которая умеет работать с несколькими каналами.
Требования
- Python 3.6+
- Библиотеки:
pymysql,requests(для Telegram) - Локальный SMTP (для email)
- Telegram-бот (создаётся через @BotFather)
Настройка Telegram
- Создайте бота через
@BotFather— получите токен вида123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. - Напишите боту любое сообщение (например,
/start). - Получите chat_id — можно через запрос:
В ответе будетcurl "https://api.telegram.org/bot<ТОКЕН>/getUpdates""chat":{"id":123456789,...}.
Комментарии
Пока нет комментариев. Будьте первым!