Uwolnić odkurzacz: Valetudo

W naszych domach coraz częściej spotykamy roboty sprzątające, które odwalają za nas większość brudnej roboty, i to dosłownie. Sprzęty te bardzo nam ułatwiają życie codzienne, gdyż nie musimy poświęcać czasu na codzienne odkurzanie czy mycie podłóg. Dzięki wygodnemu sterowaniu aplikacją i automatyzacji w zasadzie możemy je skonfigurować i o nich zapomnieć. Problem w tym, że nasze odkurzacze nie potrafią zapomnieć o nas. Bo który producent (szczególnie z Chin) mógłby się oprzeć możliwości pozyskaniu ogromu informacji, jeśli umieścił w naszym domu urządzenie wyposażone w cały zestaw sensorów z ciągłym dostępem do internetu?

Spis treści

Zasada działania

Część z Was może nie zdawać sobie sprawy, że nasze roboty sprzątające zwane dalej zamiennie odkurzaczami także pracują pod kontrolą Linuxa. Możemy tam pod maską znaleźć Ubuntu czy TinaLinux (zmodyfikowane OpenWRT). Zacznijmy może od zasady działania naszych robotów sprzątających. Po rozpakowaniu naszego nowego sprzętu pierwsze co robimy, to pobieramy na naszego smartfona aplikację służącą do sterowania robotem. Przy jej pomocy łączymy odkurzacz z naszym routerem, a za jego pośrednictwem z internetem. Od tej pory robot sprzątający ma nieskrępowany dostęp do naszego mieszkania, czujników i internetu. Nasz smartfon z kolei dzięki zainstalowanej karcie SIM nie musi być podłączony do naszej sieci lokalnej za wyjątkiem momentu konfiguracji. Łączność pomiędzy urządzeniami wygląda następująco: smartfon łączy się z serwerami producenta, następnie z tego serwera polecenia wysyłane są do naszego odkurzacza. Zaletą takiego rozwiązania jest to, że możemy sterować nim będąc poza domem, wadą zaś to, że w przypadku przerwy w dostawię internetu urządzenie staje się prawie bezużyteczne. A co jeśli producent celowo wyłączy lub zablokuje swój serwer? Pozostaje wyrzucić nasz stary odkurzacz. Dlaczego zatem producent nie udostępnia opcji sterowania urządzaniem po sieci lokalnej w przypadku braku internetu? Nie wiem, choć się domyślam.

schemat sterowania robotem sprzątającym

Co zbierają nasze odkurzacze?

Wszystko to, co jest technicznie możliwe. Mateusz Chrobok na swoim kanale jakiś czas temu opublikował obszerny materiał (YouTube), w którym wyjaśnia rozmiar apetytu naszych odkurzaczy. Dodam tylko pokrótce, że wysyłają one nazwy i hasła (!) naszych sieci, a także naszą lokalizację (a jakże inaczej). Dlaczego nowsze odkurzacze posiadające kamery nie miałyby wysyłać zdjęć, skoro jest to technicznie możliwe? Całość wysyłanych danych może wynosić ponad 10Gb w ciągu miesiąca, jak raportuje jeden z użytkowników na Reddicie. Do tego niektórzy producenci dodają tylne furtki pozwalające zdalnie wykonywać polecenia od Xi Jinpinga 😉 Zgadniecie którzy? Ponadto kupując odkurzacz za 1500zł spodziewamy się raczej tego, że nie powinien nam wyświetlać reklam, w końcu zapłaciliśmy za niego i to nie mało. Nic bardziej mylnego. Chociaż różni producenci już od dawna nas do tego przyzwyczajają.

Pierwszy screen przedstawia statystyki użycia danych przez robota sprzątającego od Xiaomi (źródło: wątek na reddit). Drugi screen pokazuje wyświetlającą się reklamę podczas uruchamiania aplikacji sterującej (źródło: valetudo). Trzeci screen pokazuje slajd z prezentacji przedstawiający dowód na umieszczenie tylnej furtki w oprogramowaniu odkurzacza przez Huawei (źródło: film Mateusza Chroboka na Youtube)

Czy istnieje idealne rozwiązanie w temacie oprogramowania instalowanego na naszych odkurzaczach? Wystarczy udostępnienie źródeł firmware robota przez producenta. Haha 😀 Marzenia ściętej głowy. Pozostaje nam albo zaufać danemu producentowi, albo wziąć sprawy w swoje ręce. Dla nas pierwsza opcja nie wchodzi w rachubę, więc oczywiście zajmiemy się tą drugą.

Valetudo

Valetudo to oprogramowanie pokładowe dla naszych robotów, które zastępuje nam to dostarczane przez producenta. Oczywiście jest ono otwartoźródłowe a jego kod dostępny jest na GitHubie. Jest to jednak tylko część obrazu całości. Valetudo jest tylko oprogramowaniem sterującym/zarządzającym, które „leży” na firmware urządzenia. Innymi słowy korzysta z systemu operacyjnego, firmware i sterowników wgranych przez producenta. Co prawda na potrzeby Valetudo będziemy wgrywać zmodyfikowany firmware m. in. z wykastrowaną łącznością, jednak w dalszym ciągu jest to fabryczny firmware. Valetudo zmienia jednak to co najważniejsze z naszego punktu widzenia – zarządzanie i sterowanie urządzeniem. Najlepiej zobrazować to grafiką zapożyczoną ze strony autora projektu:

Jak widać na załączonej grafice, Valetudo jest niejako nakładką na oprogramowanie producenta, która pozwala nam zarządzać urządzeniem. Zmienia ono między innymi sposób łączności naszego robota – odłącza go od serwerów producenta i pozwala nam połączyć się bezpośrednio w naszej sieci lokalnej. Dzięki temu jesteśmy w stanie połączyć się z odkurzaczem bez potrzeby instalowania dedykowanej aplikacji od producenta. Sterowanie odbywa się za pośrednictwem przeglądarki internetowej po wpisaniu lokalnego adresu urządzenia, np. 192.168.1.102 na dowolnym urządzeniu podłączonym do naszej sieci lokalnej (WIFI).

Wspierane urządzenia

Kompletna lista wspieranych urządzeń znajduje się na stronie valetudo.cloud. Głównie są to roboty od Xiaomi, Dreame, Roborock i marki pochodne. Niestety większość z nich wymaga dosyć skomplikowanych czynności w celu wgrania modyfikacji. Do tego w większości przypadków potrzebne jest urządzenie zwane Dreame Breakout. Nie będę się zagłębiał w temat, tym bardziej że jest to ponad moje umiejętności manualne. Na szczęście kilka starszych urządzeń da się zmodyfikować stosunkowo łatwo bez dodatkowych narzędzi. Mowa o:

  • Viomi V2 / V6 / SE
  • Proscenic M6 PRO
  • Xiaomi Vacuum-Mop P (tylko wersja STYJ02YM / viomi.vacuum.v7)

Są to właściwie siostrzane modele bazujące na modelu 3irobotix CRL-200S. Ogólnie polecam omijać urządzenia od Xiaomi, gdyż na naszym rynku występują prawie tylko zablokowane wersje STYTJ02YM / v8. W tym wpisie skupię się wyłącznie na wyszczególnionych wyżej robotach, gdyż potrzebujemy do nich tylko:

  • laptopa z systemem Linux wraz z zainstalowanym android-tools
  • przewód USB – microUSB .
  • (opcjonalnie) mały wkrętak krzyżakowy

Instalacja

Zaczynamy! Procedurę wgrywania Valetudo zaczynamy od poszukiwania portu microUSB w naszym robocie, następnie odblokujemy interfejs ADB (jeśli jest zablokowany), w kolejnym kroku odblokujemy uprawnienia administratora, potem wgrywamy zmodyfikowany firmware i na końcu instalujemy Valetudo.

  • szukamy złącza microUSB w naszym odkurzaczu (powinno znajdować się pod gumową zaślepką),
  • jeśli jednak go tam nie znajdziemy – nic straconego. odkręcamy 5 śrubek od pokrywy baterii, wyciągamy ją i pod spodem mamy drugi port microUSB,
Zdejmujemy ramkę rolki, odkręcamy 5 śrubek i wyjmujemy baterię bez wypinania przewodu.
  • instalujemy android-tools na naszym pececie z Linuxem:
    • Debian, Ubuntu i pochodne (np. Linux Mint): sudo apt install android-tools
    • Arch Linux i pochodne (np. Manjaro): sudo pacman android-tools
    • Fedora: sudo dnf install android-tools
  • podłączmy naszego robota przewodem USB-microUSB do peceta,
  • wykonujemy komendę:
    • adb shell
  • naszym oczom powinno się ukazać:
    • TinaLinux login:
  • jeśli jednak nie widzimy powyższego tekstu, to przechodzimy do poniższej zakładki i postępujemy według instrukcji. Jeśli wszystko idzie ok, kontynuujemy.
  • Pobieramy skrypt adb_shell (ppm -> zapisz jako),
  • musimy jeszcze zezwolić na wykonywanie pliku:
    • chmod +x adb_shell
  • po czym wpisujemy komendę:
    • adb push ./adb_shell /bin/adb_shell
  • Teraz powinniśmy uzyskać dostęp do uprawnień administratora, jako potwierdzenie powinniśmy otrzymać komunikat:
    • root@TinaLinux:/#
  • pobieramy skrypt potrzebny do wgrania zmodyfikowanego firmware: convert-robot.sh (ppm -> zapisz jako),
  • otwieramy terminal w katalogu do którego pobraliśmy skrypt,
  • nadajemy uprawnienia do wykonywania pobranego skryptu:
    • chmod +x convert-robot.sh
  • (opcjonalnie) tworzymy kopie zapasowe fabrycznego firmware na wypadek jakby coś miało się nie udać:
    • adb pull /proc/partitions
    • adb pull /dev/nanda
    • adb pull /dev/nandb
    • adb pull /dev/nandc
    • adb pull /dev/nandd
    • adb pull /dev/nande
    • adb pull /dev/nandf
    • adb pull /dev/nandg
    • adb pull /dev/nandh
    • adb pull /dev/nandi
  • pozostaje nam wgranie zmodyfikowanego firmware. W tym celu musimy wejść na stronę https://builder.dontvacuum.me/ i wygenerować obraz. Na szczęście nie musicie tego robić, możecie pobrać wygenerowany obraz przeze mnie. Będzie pasował pod warunkiem że posiadacie jeden ze wspomnianych powyżej robotów: viomi.vacuum.v6_fw.tar.gz,
  • wrzucamy pobrany firmware do katalogu /tmp naszego robota:
    • adb push viomi.vacuum.v6_fw.tar.gz /tmp/
  • pobieramy aktualną wersję Valetudo: valetudo-armv7.upx,
  • wrzucamy pobrane Valetudo do katalogu /mnt/udisk/valetudo,
    • adb push ./valetudo-armv7.upx /mnt/UDISK/valetudo
  • wrzucamy jeszcze pobrany wcześniej skrypt jako ostatni plik do naszego robota:
    • adb push ./convert-robot.sh /tmp/
  • Mamy już wszystko czego nam potrzeba, teraz wykonujemy po kolei poniższe komendy:
    • cd /tmp/
    • sh ./convert-robot.sh
    • tar xzvf ./viomi.vacuum.v6_fw.tar.gz.tar.gz
    • sh ./install.sh
  • Gratulacje! Właśnie wgrałeś do swojego odkurzacza jedyny właściwy soft 😉 Pozostało nam tylko podłączenie odkurzacza do naszej sieci bezprzewodowej. po wpisaniu w terminal adb shell naszym oczom powinien ukazać się taki widok:

BONUS: jeśli brakuje Wam polskiego głosu: polski_glos.zip (instrukcja wgrania w paczce).

Jeśli nie wykrywa nam ADB
  • pobieramy skrypt enable-adb.sh (ppm -> zapisz jako)
  • nadajemy uprawnienia do wykonywania pobranego skryptu:
    • chmod +x enable-adb.sh
  • uruchamiamy skrypt:
    • ./enable-adb.sh
    • naciskamy enter
    • skrypt się uruchomi i oczekuje na urządzenie
  • wyłączamy robot (przytrzymujemy przycisk włączania co najmniej 10 sekund)
  • podłączamy przewód do naszego robota, przytrzymujemy przycisk Home i jednocześnie podpinany USB do naszego peceta
  • Skrypt powinien automatycznie wykryć nasz odkurzacz i odblokować ADB

Konfiguracja

  • Przyciskamy jednocześnie obydwa przyciski na odkurzaczu aż usłyszymy komunikat głosowy o resetowaniu sieci,
  • Podłączamy naszego smartfona lub peceta do nowej sieci Wifi wygenerowanej przez robota (np. viomi.vacuum.v7),
  • Otwieramy przeglądarkę i wpisujemy adres: http://192.168.5.1 lub http://192.168.8.1,
  • W oknie konfiguracyjnym naszego robota wpisujemy nazwę i hasło naszej sieci Wifi,
  • Robot wyłączy swoją sieć i podłączy się do naszej,
  • Pozostało nam tylko znalezienie adresu lokalnego naszego odkurzacza. Najpewniej będzie to:
    • 192.168.1.x gdzie x może być od 1 do 255.
    • dokładny adres sprawdzimy w panelu administracyjnym naszego routera,
    • Istnieje możliwość zainstalowania aplikacji na androidzie, która pomoże nam znaleźć nasz odkurzacz w sieci: Valetudo Companion,
  • Wskazane jest aby ustawić stały adres IP dla naszego robota w panelu administracyjnym routera, w przeciwnym wypadku może się zmieniać np. co miesiąc. Poniżej na screenach pokazane jak skonfigurować stały adres IP naszego robota w zakładce DHCP w OpenWRT:

Po udanej konfiguracji tak prezentuje się interfejs na telefonie:

A tak na naszym pececie:

Podsumowanie

Starałem się jak najbardziej uprościć całą procedurę wgrywania Valetudo do naszego robota sprzątającego, jednak jestem świadom, że niektórzy początkujący mogą napotkać pewne trudności. W takim przypadku służę pomocą, wystarczy napisać komentarz pod artykułem lub na mastodonie.

Największe zalety takiego rozwiązania to odłączenie robota sprzątającego od serwerów producenta, możliwość zarządzania nim w naszej sieci lokalnej oraz sterowanie robotem z dowolnego urządzenia z zainstalowaną przeglądarką internetową.

Wady? Interfejs jest tylko w języku angielskim, brak możliwości sterowania robotem poza siecią lokalną (można uzyskać taką możliwość po dodatkowej konfiguracji).

Powodzenia z kolejnym uwolnionym sprzętem i do następnego!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *