↩️ Назад

Мониторинг батареек Zigbee-устройств через MQTT и MariaDB

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

Делаю мониторинг батареек Zigbee-устройств через MQTT и MariaDB в своей iot системе

У меня десятки Zigbee-датчиков (движения, открытия, влажности), и я устал гадать, когда какая батарейка сядет. Решил автоматизировать проверку: раз в день скрипт смотрит в базу данных и сообщает, если заряд ниже 20%. Можно конечно их в отдельную базу данных и выводить в панели управления iot системы. Но я задолбался ее делать теперь буду максимально просто делать, все равно велосипед не создам лучше чем Homeassistent, только время потрачу ) мне проще по емаилу получить данные про устройства. Кстати если вы используете HA то там просто подписываетесь на топик battery и получаете данные с оповещением. Но я вроде как свою тему делаю )

Исходные условия

  • Zigbee2MQTT публикует данные устройств в MQTT.
  • Самописный Python-скрипт (mqtt_to_mysql.py) подписывается на zigbee2mqtt/# и сохраняет данные в MariaDB.
  • Данные хранятся в таблице sensor_data с полями: topic, value, timestamp.
  • Устройства с батарейкой (например, door_sensor) шлют JSON вида:
    {"battery":100,"contact":false,"linkquality":255,...}
  • Мой парсер автоматически создаёт подтопики, включая zigbee2mqtt/door_sensor/battery.

Что мы сделали

1. Убедились, что данные о батарейке попадают в БД

Выполнили в MariaDB:

SELECT topic, value FROM sensor_data WHERE topic LIKE '%door_sensor%';

Увидели строки:

zigbee2mqtt/door_sensor          → {"battery":100,...}
zigbee2mqtt/door_sensor/battery  → 100
  

Значит, можно читать значение напрямую из топика .../battery — без парсинга JSON.

2. Создали виртуальное окружение (обязательно на Raspberry Pi OS Bookworm)

Система запрещает ставить pip-пакеты глобально, поэтому:

python3 -m venv /home/mazzick/venv
/home/mazzick/venv/bin/pip install PyMySQL
  

3. Написали скрипт мониторинга

Скрипт делает следующее:

  • Подключается к MariaDB.
  • Ищет все топики вида zigbee2mqtt/%/battery с значением ≤20.
  • Если такие есть — записывает список в файл /home/mazzick/low_battery_alert.txt.
  • Если нет — пишет в файл «всё норм».

Сам код скрипта я уже вставил в заметку отдельно — здесь только логика.

4. Настроили запуск по расписанию

Добавили задание в cron:

crontab -e

И вставили строку:

0 9 * * * /home/mazzick/check_battery.py >> /home/mazzick/battery_check.log 2>&1

Теперь каждый день в 9:00 скрипт проверяет батарейки и обновляет файл-статус.

Почему не стали использовать email сразу?

На Raspberry Pi по умолчанию нет SMTP-сервера. Чтобы не настраивать Postfix или ssmtp, решили начать с простого — файла. Позже можно легко заменить запись в файл на отправку в Telegram/email, не трогая остальную логику.

Итог

Теперь я вижу состояние всех батареек, просто выполнив:

cat /home/mazzick/low_battery_alert.txt

А если захочу — подключу этот файл к Home Assistant, веб-панели или Telegram-боту. Главное — система работает автономно, без облаков и лишних зависимостей.

наброски скриптов. в файл точно сохраняют, мне еще надо смтп настроить, но есть вариант через смпт яндекса, надо только пароль для приложений. потом доделаю, но вроде уже рабочий вариант.


Категории:

Категории

Комментарии

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

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

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

Посетителей сегодня: 0
о блоге | карта блога

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