↩️ Назад

Категории

Перенос умный дом с Raspberry Pi 5 на Raspberry Pi 4

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

Подробная инструкция по полному клонированию системы, переносу Zigbee2MQTT, Mosquitto, веб-серверов и всех настроек.

📌 Исходные данные:
Источник: Raspberry Pi 5, Debian 12 (Bookworm), пользователь iot_user
Приёмник: Raspberry Pi 4, изначально Debian 13 (Trixie) → переустановлен на Bookworm
Zigbee-адаптер: Sonoff Zigbee 3.0 USB Dongle Plus V2

1️⃣ Подготовка целевой Raspberry Pi 4

В Raspberry Pi Imager по умолчанию сейчас предлагается Trixie (Debian 13). Нам нужен Bookworm — он спрятан в разделе Raspberry Pi OS (other).

Выбираем:

Raspberry Pi OS (other) → Raspberry Pi OS (64-bit)

При записи задаём:

— Имя хоста: iot-rasp
— Пользователь: iot_user
— Включаем SSH
— Wi-Fi (по желанию)
⚠️ Важно: Версия ОС на обеих платах должна совпадать. Иначе пакеты не встанут.

2️⃣ Сбор информации с исходной Pi (RPi 5)

Заходим на RPi 5 и сохраняем списки установленных пакетов:

# Список APT-пакетов
dpkg --get-selections | grep -v deinstall > packages.txt

# Список Python-пакетов
pip3 list --format=freeze > pip_packages.txt

# Глобальные NPM-пакеты (опционально)
npm list -g --depth=0 > npm_global_packages.txt

3️⃣ Бэкап всей системы

Скрипт для бэкапа — сохраняет все данные, которые потом можно восстановить на RPi 4.

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/tmp/backup_$DATE"
FINAL_BACKUP="/home/iot_user/backup_smart_home_$DATE.tar.gz"

mkdir -p "$BACKUP_DIR"
cd "$BACKUP_DIR" || exit

# 1. MariaDB
mysqldump -u root -p --all-databases > mysql_backup.sql 2>/dev/null

# 2. Zigbee2MQTT (путь — /home/iot_user/zigbee2mqtt)
cp -r /home/iot_user/zigbee2mqtt ./zigbee2mqtt

# 3. Mosquitto
mkdir -p ./mosquitto
cp /etc/mosquitto/mosquitto.conf ./mosquitto/
cp /etc/mosquitto/passwd ./mosquitto/ 2>/dev/null
cp /etc/mosquitto/acl ./mosquitto/ 2>/dev/null

# 4. Веб-файлы
cp -r /var/www ./www

# 5. Systemd-сервисы
mkdir -p ./systemd_services
cp /etc/systemd/system/zigbee2mqtt.service ./systemd_services/

# 6. Cron-задачи
mkdir -p ./cron_backups
crontab -l > ./cron_backups/crontab_iot_user.txt
sudo crontab -l > ./cron_backups/crontab_root.txt

# 7. Пользовательские конфиги
mkdir -p ./home_configs
cp /home/iot_user/.bashrc ./home_configs/
cp /home/iot_user/.profile ./home_configs/

# Архивируем
cd /tmp
tar -czf "$FINAL_BACKUP" "backup_$DATE"
rm -rf "$BACKUP_DIR"

echo "✅ Бэкап сохранён: $FINAL_BACKUP"

4️⃣ Перенос бэкапа на RPi 4

scp /home/iot_user/backup_smart_home_*.tar.gz iot_user@192.168.88.29:/home/iot_user/

На RPi 4 распаковываем:

cd /home/iot_user
mkdir -p /tmp/restore
tar -xzf backup_smart_home_*.tar.gz -C /tmp/restore

5️⃣ Установка пакетов на RPi 4

# Копируем списки пакетов с RPi 5
scp packages.txt pip_packages.txt iot_user@192.168.88.229:/home/iot_user/

# На RPi 4:
sudo apt update
sudo apt install -y $(cat packages.txt | cut -f1)

Python-пакеты ставим в виртуальном окружении (чтобы не сломать систему):

python3 -m venv ~/myenv
source ~/myenv/bin/activate
pip install -r pip_packages.txt
deactivate

6️⃣ Установка Node.js 22 (обязательно!)

Zigbee2MQTT требует Node.js ≥ 22.

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs

node --version  # должно быть v22.x

7️⃣ Установка Zigbee2MQTT

# Клонируем репозиторий
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R iot_user:iot_user /opt/zigbee2mqtt

cd /opt/zigbee2mqtt
npm install --production

Восстанавливаем данные из бэкапа:

sudo cp -r /tmp/restore/backup_*/zigbee2mqtt/* /opt/zigbee2mqtt/
sudo chown -R iot_user:iot_user /opt/zigbee2mqtt

8️⃣ Настройка порта для Zigbee-адаптера

Узнаём реальный ID адаптера на RPi 4:

ls -la /dev/serial/by-id/

В конфиге /opt/zigbee2mqtt/data/configuration.yaml правим порт:

serial:
  port: /dev/ttyUSB0
  adapter: ember
  baudrate: 115200
  rtscts: false

9️⃣ Systemd-сервис для Zigbee2MQTT

Создаём файл /etc/systemd/system/zigbee2mqtt.service:

[Unit]
Description=zigbee2mqtt
After=network.target mosquitto.service

[Service]
User=iot_user
Group=dialout
WorkingDirectory=/opt/zigbee2mqtt
ExecStart=/usr/bin/npm start
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=zigbee2mqtt

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable zigbee2mqtt
sudo systemctl start zigbee2mqtt
sudo systemctl status zigbee2mqtt

🔟 Восстановление остальных сервисов

Mosquitto

sudo systemctl stop mosquitto
sudo cp /tmp/restore/backup_*/mosquitto/* /etc/mosquitto/
sudo systemctl start mosquitto

Веб-файлы (Nginx)

sudo cp -r /tmp/restore/backup_*/www/* /var/www/
sudo chown -R www-data:www-data /var/www/html
sudo systemctl restart nginx

Cron-задачи

crontab /tmp/restore/backup_*/cron_backups/crontab_iot_user.txt
sudo crontab /tmp/restore/backup_*/cron_backups/crontab_root.txt

✅ Финальная проверка

# Статусы сервисов
sudo systemctl status mosquitto --no-pager
sudo systemctl status zigbee2mqtt --no-pager
sudo systemctl status nginx --no-pager

# Логи Zigbee2MQTT
sudo journalctl -u zigbee2mqtt -f --lines=30

# Веб-интерфейс
curl http://localhost:8080

# USB-адаптер
ls -l /dev/ttyUSB0

✅ Итог:
— RPi 5 и RPi 4 работают идентично
— Все Zigbee-устройства подключены и управляются
— MQTT, веб-серверы, базы данных и cron — восстановлены
⚠️ Важное замечание:
Если обе платы включены одновременно с подключёнными Zigbee-адаптерами — возможны конфликты. Используйте RPi 4 как резервную (выключенную) или отключайте адаптер.

🧠 Полезные команды

# Проверка порта Zigbee
ls -l /dev/ttyUSB*

# Перезапуск Zigbee2MQTT
sudo systemctl restart zigbee2mqtt

# Логи в реальном времени
sudo journalctl -u zigbee2mqtt -f

# Ручной запуск для отладки
cd /opt/zigbee2mqtt && npm start



Категории:

Категории

Комментарии

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

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

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

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

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