Категории

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

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

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

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