Категории

Умные уведомления через MySQL: добавляем Telegram

15.01.2026 | Статья из категории: IOT умный дом

В прошлой заметке я показал, как отправлять email-уведомления через «служебный» топик в базе данных — без прямой зависимости от MQTT. Сегодня расширим эту систему: добавим Telegram, сохранив ту же простую архитектуру.

Цель — чтобы любая часть моей IoT-системы могла сказать: «нужно уведомить», а диспетчер сам решит — по email, в Telegram или ещё куда.

Идея: один топик — несколько каналов

Вместо отдельных топиков вроде _alerts/email и _alerts/telegram я решил использовать один общий топик:

zigbee2mqtt/_alerts

А внутри сообщения указывать, куда и что отправлять. Например:

{
  "channel": "telegram",
  "text": "🚨 Протечка в ванной!"
}

или

{
  "channel": "email",
  "subject": "Низкая батарейка",
  "body": "Датчик двери разряжен до 9%."
}

Теперь достаточно одного скрипта, который читает этот топик и маршрутизирует сообщения в нужный канал.

Почему так лучше?

Совет: Если вы используете только один канал — можно оставить старый подход с _alerts/email. Но если планируете развивать систему — лучше сразу заложить гибкость.

Как это работает технически

  1. Ваша логика (скрипт, триггер, правило) вставляет в таблицу sensor_data запись:
    INSERT INTO sensor_data (topic, value)
    VALUES ('zigbee2mqtt/_alerts', '{"channel":"telegram","text":"Тревога!"}');
  2. Раз в 1–2 минуты запускается универсальный alert_dispatcher.py.
  3. Он читает все новые записи из zigbee2mqtt/_alerts, определяет канал и вызывает соответствующий обработчик.
  4. После отправки запись удаляется (или помечается).

Поддерживаемые каналы (на старте)

Остальные — легко добавить позже.

Скрипт-диспетчер с поддержкой Telegram

Вот улучшенная версия alert_dispatcher.py, которая умеет работать с несколькими каналами.

Требования

Настройка Telegram

  1. Создайте бота через @BotFather — получите токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11.
  2. Напишите боту любое сообщение (например, /start).
  3. Получите chat_id — можно через запрос:
    curl "https://api.telegram.org/bot<ТОКЕН>/getUpdates"
    В ответе будет "chat":{"id":123456789,...}.

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0


кто я | о блоге

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA