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.
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 paired
Zigbee2MQTT: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 firmware
Zigbee2MQTT: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.
Hej
Fajnie, że się da . A u mnie jak zwykle coś nie tak.
Chyba czas zrobić nową czystą instalację, bo zawsze pod górkę.
-bash: mqtt_pub: nie znaleziono polecenia
Możesz jakoś pomóc?
mqtt_pub pochodzi z https://www.npmjs.com/package/mqtt, więc najprościej zainstalować to przez npm. Ale możesz równie dobrze użyć mosquitto_pub instalując wcześniej klienty przez „apt install mosquitto-clients”. Opcje i przykładowe użycie znajdziesz w rozdziale „Test” w https://blog-techniczny.pl/2021/01/02/instalacja-i-konfiguracja-mosquitto-na-raspberry-pi/
Czyli np. zamiast:
mqtt_pub -t „zigbee2mqtt/bridge/ota_update/check” 'kuchnia-grzejnik’
używasz:
mosquitto_pub -t „zigbee2mqtt/bridge/ota_update/check” -m 'kuchnia-grzejnik’
wielkie dzięki za odpowiedź, wygląda że jest ok. choć i tak nie ma aktualizacji OTA
(Zigbee2MQTT) Device 'GarazDrzwiOtwarcie’ does not support OTA updates
Możesz napisać czy te głowice TS0601 są warte polecenia? Obecnie mam różne rozwiązania, ale z racji posiadania coraz większej ilości urządzeń Zigbee, chciałbym przejść też na głowice w tym standardzie.
Przyglądam się, testuję. Ponieważ są tanie, kupiłbym na Twoim miejscu jedną i sprawdził.