Sterowanie Xiaomi Air Purifier 2S skryptami w Python
Wstęp
Xiaomi Air Purifier jest domowym oczyszczaczem powietrza eliminującym z pomieszczenia (zależnie od zastosowanego filtra) pyły PM2,5 a także formaldehyd, pyłki roślin i inne. Wyposażony jest w bezprzewodową kartę sieciową łączącą się z domową siecią WiFi. Dostarczona przez producenta aplikacja Mi Home umożliwia sterowanie urządzeniami tego producenta (kamery, oczyszczacze powietrza, autonomiczne odkurzacze i żarówki) ze smartfona.
Artykuł zawiera opis sposobu nawiązania komunikacji z urządzeniem firmy Xiaomi z poziomu własnej aplikacji napisanej w języku Python na przykładzie Xiaomi AirPurifier 2S.
Uzyskanie tokenu urządzenia
Głównym utrudnieniem w nawiązaniu komunikacji z produktem firmy Xiaomi jest uzyskanie unikalnego tokenu urządzenia.
Token ma postać: eda121111c9e7562f455df3e47a2d5fb
Niestety w chwili pisania tego artykułu nie jest on dostępny ani z poziomu aplikacji Mi Home, ani po zalogowaniu w serwisie Mi Account. Spotkałem się natomiast z informacją, że tokeny możliwe są do uzyskania w panelu sterowania Mi Gateway w przypadku, gdy urządzenia uzyskują dostęp do sieci za jego pośrednictwem.
Nowe wersje aplikacji Mi Home zainstalowane na smartfonie nie zapisują danych w pamięci smartfona a wysyłają je do chmury. Należy zatem zainstalować na smartfonie z systemem Android starą wersję aplikacji Mi Home a następnie pobrać ze smartfona zapisane przez aplikację dane (w tym owy token).
Pierwszą czynnością jaką należy wykonać na smartfonie jest włączenie trybu dewelopera, co otwiera szereg możliwości niedostępnych z poziomu zwykłego użytkownika. Stare wersje Androida mają domyślnie włączoną ową funkcjonalność, lecz już na Android KitKat (4.4.2) wymagana okazała się być samodzielna aktywacja.
Należy wejść w: ustawienia -> informacje o telefonie
Następnie odszukujemy pole zawierające numer kompilacji i klikamy w niego siedem razy.
Operacja ta powoduje włączenie trybu dewelopera.
Należy wejść w: ustawienia -> opcje dla programistów
Zaznaczmy opcję “Debugowanie USB”.
Od tej chwili możliwa jest komunikacja między systemem Android a komputerem stacjonarnym przez port USB, zdalna instalacja aplikacji, przeglądanie plików systemowych itp. Szereg potrzebnych operacji wykonywanych na smartfonie będzie uruchamiany z komputera stacjonarnego z systemem operacyjnym Linux Debian (lub Ubuntu).
Aplikacja Mi Home 5.0.19
Operacja instalacji aplikacji Mi Home w wersji 5.0.19 na smartfonie jak i pobranie tokenów urządzeń przez nią zgromadzonych została zautomatyzowana i udostępniam ją w postaci skryptów.
Po pobraniu przygotowanej paczki zawierającej niezbędne aplikacje należy wypakować archiwum, które zawiera:
– android-platform-tools – jest zestawem narzędzi dla deweloperów Androida, mimo iż do realizacji tego zadania wystarczy program adb (Android Debug Bridge), pozostawiłem również pozostałe narzędzia między innymi: fastboot i systrace
– apk – folder zawiera aplikację Mi Home w wersji 5.0.19, która zostanie zainstalowana na smartfonie
– databases – folder będzie kopią bazy danych stworzonej na smartfonie przez aplikację Mi Home
– install.sh – skrypt instalujący niezbędne pakiety dla systemu operacyjnego (sqlitebrowser)
– install_mihome.sh – skrypt instalujący Mi Home na smartfonie
– get_tokens.sh – skrypt pobierający ze smartfona tokeny urządzeń firmy Xiaomi i otwierający je w programie sqlitebrowser.
W pierwszej kolejności należy zalogować się w konsoli systemu Linux Debian/Ubuntu jako root a następnie uruchomić plik:
./install.sh
Następnie po podłączeniu smartfona (z włączoną już opcją debugowania USB) należy uruchomić skrypt:
./install_mihome.sh
Po wydaniu tego polecenia na komputerze należy śledzić komunikaty na smartfonie i podjąć stosowne działania w celu zezwolenia na instalację tego programu.
Zainstalowaną aplikację Mi Home na smartfonie należy uruchomić, logując się do już posiadanego konta, bądź utworzyć nowe i dodać swoje urządzenia domowe firmy Xiaomi.
Po dodaniu urządzeń, gdy są one widoczne w aplikacji można pobrać ich listę ze smartfona na komputer wywołując skrypt:
./get_tokens.sh
Spowoduje to otwarcie aplikacji sqlitebrowser w której możliwym będzie odszukanie zarówno adresu IP urządzenia jak i jego tokenu.
Przeglądanie bazy danych miio2.db pobranej ze smartfona
Podgląd tokenu urządzenia w bazie danych miio2.db pobranej ze smartfona
Komunikacja z Xiaomi Air Purifier 2S skryptem Python
Posiadając tokeny urządzeń możliwe jest sterowanie programem napisanym w Python (zalecana wersja wyższa od 3.7, wersja 2.7 nie jest wspierana), przykładowo realizującą owo zadanie jest biblioteka python-miio. Pełni ona funkcję interfejsu do komunikacji z urządzeniami firmy Xiaomi, używającymi protokołu miIO.
W chwili pisania artykułu biblioteka wspiera obsługę następujących urządzeń:
– Xiaomi Mi Robot Vacuum V1, S5, M1S
– Xiaomi Mi Home Air Conditioner Companion
– Xiaomi Mi Air Purifier
– Xiaomi Aqara Camera
– Xiaomi Mijia 360 1080p
– Xiaomi Mijia STYJ02YM (Viomi)
– Xiaomi Mi Smart WiFi Socket
– Xiaomi Chuangmi Plug V1 (1 Socket, 1 USB Port)
– Xiaomi Chuangmi Plug V3 (1 Socket, 2 USB Ports)
– Xiaomi Smart Power Strip V1 and V2 (WiFi, 6 Ports)
– Xiaomi Philips Eyecare Smart Lamp 2
– Xiaomi Philips RW Read (philips.light.rwread)
– Xiaomi Philips LED Ceiling Lamp
– Xiaomi Philips LED Ball Lamp (philips.light.bulb)
– Xiaomi Philips LED Ball Lamp White (philips.light.hbulb)
– Xiaomi Philips Zhirui Smart LED Bulb E14 Candle Lamp
– Xiaomi Philips Zhirui Bedroom Smart Lamp
– Xiaomi Universal IR Remote Controller (Chuangmi IR)
– Xiaomi Mi Smart Pedestal Fan V2, V3, SA1, ZA1, ZA3, ZA4, P5
– Xiaomi Mi Air Humidifier V1, CA1, CB1, MJJSQ
– Xiaomi Mi Water Purifier (podstawowa obsługa: włączanie/wyłączanie)
– Xiaomi PM2.5 Air Quality Monitor V1, B1, S1
– Xiaomi Smart WiFi Speaker
– Xiaomi Mi WiFi Repeater 2
– Xiaomi Mi Smart Rice Cooker
– Xiaomi Smartmi Fresh Air System VA2 (zhimi.airfresh.va2), T2017 (dmaker.airfresh.t2017)
– Yeelight lights (podstawowa obsługa, polecane użycie biblioteki python-yeelight)
– Xiaomi Mi Air Dehumidifier
– Xiaomi Tinymu Smart Toilet Cover
– Xiaomi 16 Relays Module
– Xiaomi Xiao AI Smart Alarm Clock
Przed instalacją biblioteki w systemie należy doinstalować ewentualnie brakujące pakiety:
apt install python-construct python-click python-cryptography python-zeroconf python-attrs python-pytz python-appdirs python-tqdm python-netifaces
Następnie po pobraniu biblioteki python-miio i jej rozpakowaniu należy wejść z poziomu terminala root do folderu w którym znajduje się pobrana biblioteka i wykonać polecenie:
python3.7 setup.py build
a następnie
python3.7 setup.py install
Od tej chwili możliwym staje się “import miio” w skrypcie programu napisanego w Python.
Przykładowy skrypt pobierający informacje o jakości powietrza, temperaturze itp. z Xiaomi Air Purifier
import miio
d = miio.airpurifier.AirPurifier(ip=”10.0.0.3″, token=”eda121111c9e7562f455df3e47a2d5fb”, start_id=0, debug=0, lazy_discover=True)
d.status()
Odnośniki
Android_mipack – skrypty uruchamiane na komputerze instalujące Mi Home 5.0.19 i pobierające bazę danych z Androida.
Instalator Python-miio Dokumentacja Python-miio – biblioteka dla Python będąca interfejsem do obsługi urządzeń Xiaomi
Mi Home w wersji 5.0.19 – aplikacja dla smartfona obsługująca urządzenia Xiaomi. Wersja zapisująca tokeny urządzeń w bazie danych na smartfonie.