Категории
Мониторинг батареек Zigbee-устройств через MQTT и MariaDB
10.01.2026 | из категории: 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-боту. Главное — система работает автономно, без облаков и лишних зависимостей.
наброски скриптов. в файл точно сохраняют, мне еще надо смтп настроить, но есть вариант через смпт яндекса, надо только пароль для приложений. потом доделаю, но вроде уже рабочий вариант.