Подробная инструкция по полному клонированию системы, переносу Zigbee2MQTT, Mosquitto, веб-серверов и всех настроек.
iot_userВ 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 (по желанию)
Заходим на 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
Скрипт для бэкапа — сохраняет все данные, которые потом можно восстановить на 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"
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
# Копируем списки пакетов с 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
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
# Клонируем репозиторий
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
Узнаём реальный ID адаптера на RPi 4:
ls -la /dev/serial/by-id/
В конфиге /opt/zigbee2mqtt/data/configuration.yaml правим порт:
serial:
port: /dev/ttyUSB0
adapter: ember
baudrate: 115200
rtscts: false
Создаём файл /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
sudo systemctl stop mosquitto
sudo cp /tmp/restore/backup_*/mosquitto/* /etc/mosquitto/
sudo systemctl start mosquitto
sudo cp -r /tmp/restore/backup_*/www/* /var/www/
sudo chown -R www-data:www-data /var/www/html
sudo systemctl restart nginx
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
# Проверка порта Zigbee
ls -l /dev/ttyUSB*
# Перезапуск Zigbee2MQTT
sudo systemctl restart zigbee2mqtt
# Логи в реальном времени
sudo journalctl -u zigbee2mqtt -f
# Ручной запуск для отладки
cd /opt/zigbee2mqtt && npm start
Комментарии
Пока нет комментариев. Будьте первым!