Aktualizacja oprogramowania urządzeń ZigBee

Z roku na rok coraz większą wagę zaczynamy przywiązywać do bezpieczeństwa naszych inteligentnych domów. Wypływ na to, poza coraz większą świadomością użytkowników, ma przede wszystkim rosnąca popularność takich rozwiązań, a co za tym idzie zainteresowanie tematem cyber-przestępców. Taki proces to nic nowego w świecie technologii. Wspomnieć można choćby jak wyglądały, a raczej jak nie wyglądały, zabezpieczenia protokołu SMTP, odpowiedzialnego za pocztę e-mail, w czasach gdy elektroniczna korespondencja nie skażona była jeszcze spamem i phishingiem.

Głowica termostatyczna ZigBee - Tuya TS0601

Jedną z metod dbania o bezpieczeństwo są regularne aktualizacje oprogramowania wewnętrznego urządzeń. Oczywiście to także droga do poprawy funkcjonalności i naprawy błędów. Opisywałem już taki proces w przypadku falownika Fronius . Trzeba mieć jednak świadomość, że tych urządzeń jest w naszych domach coraz więcej. Oczywiście zawsze należy szacować ryzyko, bo podatności w niektórych urządzeniach są zwykle mniej krytyczne niż w innych, natomiast nie ulega wątpliwości, że o możliwie regularne aktualizacje lepiej dbać.

Opisywałem ostatnio współpracę urządzeń ZigBee z Raspberry Pi , z użyciem tanich adapterów USB-ZigBee CC2531. Konsekwencją tego, że odrzucamy ekosystem producenta bramki, jest fakt, iż sami musimy zadbać o aktualizacje podłączonych urządzeń ZigBee. Proces wgrywania nowego oprogramowania jest jednak jak najbardziej możliwy. Prześledzimy go na przykładzie głowicy termostatycznej Tuya TS0601.

Zacznijmy od tego, jak przedstawiła się głowica podczas parowania, co było widoczne w logu Zigbee2MQTT:

Zigbee2MQTT:info 2020-11-10 17:24:13: Successfully interviewed '0x60a423fffeab2088', device has successfully been pairedZigbee2MQTT:info 2020-11-10 17:24:13: Device '0x60a423fffeab2088' is supported, identified as: TuYa Radiator valve with thermostat (TS0601_thermostat)

Ponieważ zawór znajduje się w na grzejniku w kuchni, więc nadałem mu nazwę kuchnia-grzejnik. Aby to wykonać wystarczyło wysłać odpowiednią komendę przez MQTT:

mqtt_pub -t "zigbee2mqtt/bridge/config/rename" '{"old": "0x60a423fffeab2088", "new": "kuchnia-grzejnik"}'

Od tej pory możemy już prosić nasz serwer Zigbee2MQTT o sprawdzenie najnowszego oprogramowania dla obsługiwanego sprzętu:

mqtt_pub -t "zigbee2mqtt/bridge/ota_update/check" 'kuchnia-grzejnik'

W odpowiedzi w logach odnajdujemy informację, że oprogramowanie zostało znalezione i rozpoczyna się proces aktualizacji:

Zigbee2MQTT:info 2020-11-28 12:46:06: Updating 'kuchnia-grzejnik' to latest firmwareZigbee2MQTT:info 2020-11-28 12:46:06: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":"Updating 'kuchnia-grzejnik' to latest firmware","meta":{"device":"kuchnia-grzejnik","status":"update_in_progress"},"type":"ota_update"}'

A następnie zaczynają się powoli pojawiać informacje o postępach procesu:

 Zigbee2MQTT:info 2020-11-28 12:46:19: Update of 'kuchnia-grzejnik' at 0.00%
 Zigbee2MQTT:info  2020-11-28 12:47:19: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":"Update of 'kuchnia-grzejnik' at 2.39%, +- 45 minutes remaining","meta":{"device":"kuchnia-grzejnik","progress":2.39,"status":"update_progress"},"type":"ota_update"}'

Oczywiście, nie należy oczekiwać, że aktualizacja zostanie wykonana szybko i raczej należy uzbroić się w cierpliwość. Jak wcześniej wspominałem, sieć Zigbee ani urządzenia w niej działające nie zostały zaprojektowane do szybkich transferów danych, ponieważ ważniejsze są inne cechy protokołu, w tym energooszczędność.

Warto też się przygotować na sytuację, że aktualizacja może się nie udać:

zigbee2mqtt/bridge/log {"message":"Update of 'kuchnia-grzejnik' failed (Timeout: device did not request any image blocks)","meta":{"device":"kuchnia-grzejnik","status":"update_failed"},"type":"ota_update"}

Jednak ostatecznie powinniśmy zobaczyć informację o pomyślnym zakończeniu procesu:

Zigbee2MQTT:info 2020-11-28 13:36:35: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":"kuchnia-grzejnik","meta":{"device":"kuchnia-grzejnik","from":null,"status":"update_succeeded","to":null},"type":"ota_update"}'

Aktualizacja nie jest więc szybka, ani nie daje gwarancji 100% niezawodności. Natomiast przede wszystkim jej wykonanie nie jest trudne z punktu widzenia użytkownika. Mamy tak naprawdę jedną komendę do wydania.

Jak często należy przeprowadzać aktualizacje? To już pozostawiam do indywidualnej oceny. Trzeba próbować znaleźć złoty środek między bezpieczeństwem, stabilnością i wygodą. Oczywiście można też pokusić się o automatyzację tego procesu, natomiast mam pewne wątpliwości, czy to na pewno zawsze jest właściwa droga, ale to także kwestia podejścia.