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