Как сохранить Zigbee‑сеть при обновлении или откате прошивки координатора

Чтобы не потерять Zigbee‑сеть при обновлении/откате прошивки, нужно заранее сохранить NV/NVRAM (энергонезависимые данные) координатора и файлы вашей системы (Zigbee2MQTT или ZHA). Без этого координатор после прошивки может «стать новым», и устройства придётся переподключать.

Что именно хранится в NV/NVRAM и почему это критично

В NV/NVRAM координатор держит параметры, без которых сеть не «узнаётся» устройствами:

  • PAN ID и Extended PAN ID
  • канал сети
  • сетевой ключ (Network Key) и счётчики кадров
  • таблицы безопасности и служебные данные стека

Если прошивка выполняется с полным стиранием памяти (erase), эти данные пропадают — и сеть фактически создаётся заново.

Откат прошивки (downgrade) рискованнее обновления: у разных веток прошивок может отличаться формат NV-данных. Делайте бэкап непосредственно перед любым откатом.

Универсальный чек‑лист перед прошивкой (обновление/откат)

  1. Остановите Zigbee2MQTT или ZHA (важно освободить порт и «заморозить» состояние).
  2. Сохраните бэкапы (см. ниже для вашей системы).
  3. Зафиксируйте параметры сети (на всякий случай): channel, pan_id, ext_pan_id, network_key.
  4. Прошейте координатор.
  5. Выполните восстановление и дайте сети время «ожить» (особенно батарейным устройствам).

Держите две точки восстановления: бэкап до прошивки (чтобы вернуться) и бэкап после прошивки (если откат окажется невозможен, вы не потеряете текущее рабочее состояние).

Zigbee2MQTT: бэкап и восстановление координатора (NV) и базы устройств

В Zigbee2MQTT сохранение сети обычно упирается в три файла:

  • data/coordinator_backup.json — бэкап данных координатора (эквивалент NV на уровне поддерживаемых стеков)
  • data/database.db — база устройств/интервью/связей
  • configuration.yaml — параметры подключения и сети

1) Сохранение перед прошивкой

Остановите сервис и скопируйте файлы в безопасное место:

sudo systemctl stop zigbee2mqtt

cd /opt/zigbee2mqtt/data
cp coordinator_backup.json coordinator_backup_$(date +%Y%m%d).json
cp database.db database_$(date +%Y%m%d).db
cp ../configuration.yaml configuration_$(date +%Y%m%d).yaml

2) Восстановление после прошивки

  1. Убедитесь, что Zigbee2MQTT остановлен.
  2. Верните файлы обратно с исходными именами:
    • data/coordinator_backup.json
    • data/database.db
    • configuration.yaml (или хотя бы проверьте, что параметры сети не поменялись)
  3. Запустите Zigbee2MQTT.

Полноценное восстановление через coordinator_backup.json обычно работает для координаторов на стеках zStack (TI) и Ember. На других адаптерах восстановление может быть ограниченным — тогда заранее готовьтесь к частичному переподключению.

Home Assistant ZHA: бэкап/восстановление через интерфейс

Для ZHA самый безопасный путь — пользоваться встроенным бэкапом сети:

  • сделайте/скачайте бэкап Zigbee‑сети в настройках ZHA (раздел сетевых параметров)
  • после прошивки/замены координатора выполните восстановление/миграцию из этого бэкапа

Плюс подхода: всё делается в одном месте, без ручной работы с файлами контейнера/аддона.

Когда нужен «низкоуровневый» бэкап NV (TI ZNP)

Если вы используете координатор на TI ZNP и хотите максимально точную копию NV, можно читать/писать NVRAM через инструменты zigpy_znp:

python3 -m zigpy_znp.tools.nvram_read  /dev/ttyUSB0 -o nv_backup.json
python3 -m zigpy_znp.tools.nvram_write /dev/ttyUSB0 -i nv_backup.json

Используйте это, если обычного восстановления недостаточно или вы делаете сложную миграцию/откат.

Что бэкапить в разных сценариях

СценарийМинимум для сохранения сетиКомментарий
Zigbee2MQTT, прошивка координатораcoordinator_backup.json + database.db + configuration.yamlСохраняет сеть и список устройств
ZHA, прошивка/замена координатораБэкап сети из интерфейса ZHAПотом используйте восстановление/миграцию
Откат прошивкиВсё выше + второй бэкап «после»Помогает, если откат несовместим

Частые ошибки

  • Прошили координатор, не остановив Zigbee2MQTT/ZHA → повреждённый бэкап или «занят» порт.
  • Восстановили coordinator_backup.json, но изменили network_key/pan_id/ext_pan_id/channel в конфигурации → конфликт «конфигурация не совпадает с адаптером».
  • Ожидаете мгновенного появления всех устройств: батарейные могут выйти на связь только после пробуждения.
  • Делаете откат на сильно отличающуюся версию прошивки → старый firmware может не принять новый формат NV.

FAQ

Нужно ли переподключать устройства после прошивки?
Нет, если NV/NVRAM (или coordinator backup) восстановлены корректно и параметры сети не изменились.

Почему часть устройств «пропала» сразу после восстановления?
Часто это норма: сначала поднимаются роутеры (питаемые от сети), затем батарейные. Дайте сети время; при необходимости перезапитайте роутеры.

Можно ли восстановить сеть, если нет coordinator_backup.json?
Иногда удаётся частично (по сохранённому database.db и тем же ключам/параметрам), но чаще это заканчивается пересозданием сети и переподключением устройств.

Что важнее: database.db или coordinator_backup.json?
Для «узнавания» сети устройствами критичнее данные координатора (NV/backup). Для сохранения имён, связей и метаданных в Zigbee2MQTT важна database.db. Лучше хранить оба.