Mój smart home opiera się o Home Assistanta wraz z Zigbee2MQTT. Dotychczas moim adapterem był Sonoff ZBDongle-P, oparty na chipie CC2652P. Ponieważ serwer z HA znajduje się w słabym miejscu, adapter był podłączony pod USB w routerze i udostępniany za pomocą ser2net
.
Ale czas idzie do przodu i nowy router nie posiada USB. W związku z posiadaniem sieci z PoE na strychu stwierdziłem – czas na zmiany. Nowym adapterem został SLZB-06M, oparty na chipie EFR32MG21.
Podpiąłem, skonfigurowałem IP, zmieniłem konfigurację w Z2M, restart i… błąd. Nie da się przywrócić backupu sieci na nowy koordynator. Większość wątków na forach doradzało sparowanie ponownie całej sieci – ale przy 30+ urządzeniach, w tym niektórych głęboko ukrytych (np. czujnik zalania pralki) szybko zwątpiłem i zacząłem szukać alternatywy. Okazuje się że da się zmigrować konfigurację, chociaż nie jest to intuicyjne.
Główną przyczyną problemów jest fakt, że Z2M nie potrafi przywrócić backupu koordynatora (tj. klucze, sparowane urządzenia itd.) na urządzenie o innym chipsecie. Objawia się to błędem w logach: Error: This open coordinator backup format not for EZSP adapter
. Natomiast dzięki Zigpy jesteśmy w stanie to zrobić ręcznie i wszystko będzie działać bez ponownego parowania wszystkich urządzeń 🙂
Zatem, nie przedłużając. Parę założeń do tego krótkiego tutorialu o migracji:
- stary adapter (Sonoff ZBDongle) udostępniony na adresie 192.168.0.10 za pomocą
ser2net
– ale nie będziemy się z nim komunikować w tym procesie - nowy adapter (SLZB-06M) na adresie 192.168.0.20, natywnie przez ethernet
- pracujemy na komputerze z dowolnym Linuksem
- używamy aktualnego Zigbee2MQTT i HA (na moment pisania tego wpisu – 2024.10)
Krok 1 – zatrzymujemy dodatek Z2M
Tutaj raczej nie jest potrzebne wielkie tłumaczenie – wchodzimy w Ustawienia, następnie Dodatki, wybieramy Zigbee2MQTT oraz naciskamy czerwony przycisk Zatrzymaj.
Krok 2 – ściągamy backup z HA
Ten krok można zrealizować dowolnym sposobem, ale ja zdecydowałem się na najprostszy, czyli użycie SCP:
$ mkdir migracja && cd migracja
$ scp root@ha.local:/homeassistant/zigbee2mqtt/coordinator_backup.json .
Krok 3 – podłączamy się do SLZB-06M
Aby dokonać tego kroku, musimy poczynić parę przygotowań. Zacznijmy od instalacji zigpy-cli
, który umożliwi nam rozmowę z naszym koordynatorem. Osobiście zrobiłem to używając Pythonowego venv
aby sobie nie śmiecić w systemie:
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install git+https://github.com/zigpy/zigpy-cli.git
Niestety, ale to narzędzie nie potrafi rozmawiać z urządzeniami po sieci – ale od czego mamy socat
! Stworzy nam on wirtualny port szeregowy, używając połączenia TCP.
$ sudo socat pty,link=/dev/ttyUSB0,raw,user=$(whoami),group=dialout,mode=777 tcp:192.168.0.20:6638
Port 6638 jest domyślny dla SLZB-06M, ale w Twoim przypadku może być inny. Również warto sprawdzić (za pomocą ls -l /dev | grep ttyUSB
) czy nie mamy innych urządzeń szeregowych na USB; tworzymy nowe, więc wybieramy niezajęty numer.
Teraz możemy użyć naszego Zigpy aby porozmawiać z koordynatorem:
$ zigpy radio ezsp /dev/ttyUSB0 info
PAN ID: 0x1A62
Extended PAN ID: dd:dd:dd:dd:dd:dd:dd:dd
Channel: 26
Channel mask: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
NWK update ID: 0
Device IEEE: 84:b4:db:ff:fe:c9:cf:e5
Device NWK: 0x0000
Network key: 01:03:05:07:09:0b:0d:0f:00:02:04:06:08:0a:0c:0d
Network key sequence: 0
Network key counter: 40961
Krok 4 – wgrywamy backup na nowy koordynator
W praktyce ten krok to połączenie kroków 2 i 3, a realizujemy to jedną, prostą komendą:
$ zigpy radio ezsp /dev/ttyUSB0 restore coordinator_backup.json
Po dłuższej chwili komenda się powinna zakończyć bez błędu.
Krok 5 – robimy ponownie backup i wgrywamy go do HA
Ponieważ Z2M nie potrafi po prostu odczytać starego backupu i go zmigrować (gdyby potrafił, to by nie było tego tutoriala), to musimy mu wgrać backup z nowego koordynatora w miejsce starego. Zatem, zacznijmy od zrobienia backupu:
$ zigpy radio ezsp /dev/ttyUSB0 backup new_backup.json
W wyniku tego kroku otrzymujemy plik new_backup.json
– który jest prawie identyczny z backupem zgranym z HA ze starego koordynatora, ale teraz Z2M nie będzie narzekać. Więc, wgrywamy go w stare miejsce, w moim przypadku znów przy użyciu SCP:
$ scp new_backup.json root@ha.local:/homeassistant/zigbee2mqtt/coordinator_backup.json
I… to wszystko! Uruchamiamy dodatek Z2M w HA i patrzymy w logi czy wszystko działa jak powinno. W moim wypadku, z nieokreślonego powodu, wypadły z sieci jedynie trzy urządzenia które musiałem sparować ponownie.