Facebook   youtube   RSS

Aktualizacja: 2020-01-14

Sterowanie Xiaomi Air Purifier 2S skryptami w Python


Wstęp

xiaomi air purifier 2s 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).

mi home
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.

xiaomi db token
Przeglądanie bazy danych miio2.db pobranej ze smartfona

 

xiaomi db token

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.

Wyślij komentarz