У меня десятки 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-боту. Главное — система работает автономно, без облаков и лишних зависимостей.
наброски скриптов. в файл точно сохраняют, мне еще надо смтп настроить, но есть вариант через смпт яндекса, надо только пароль для приложений. потом доделаю, но вроде уже рабочий вариант.
Комментарии
Пока нет комментариев. Будьте первым!