このライブラリ (およびそれに付随する cli ツールmiiocli
) は、Xiaomi の miIO および MIoT プロトコルを使用してデバイスを制御するために使用できます。
これは自主的なコミュニティ主導の取り組みであり、このライブラリでサポートされているデバイスを所有するどの企業とも提携していません。問題レポートとプルリクエストは大歓迎です。貢献を参照してください。
完全なドキュメントは python-miio.readthedocs.io で入手できます。
最新のリリースはpip
を使用してインストールできます。
pip install python-miio
あるいは、GitHub から最新の開発バージョンをインストールすることもできます。
pip install git+https://github.com/rytilahti/python-miio.git
このプロジェクトでは現在、大規模なリファクタリング作業が進行中です。最新の (MIoT) デバイスの制御に興味がある場合は、バージョン 0.6.0 がリリースされるまで、git バージョン (またはプレリリース、 pip install --pre python-miio
) を使用する必要があります。
miiocli
コマンドを使用すると、サポートされているデバイスの IP アドレスとトークンがわかっていれば、コマンド ラインからデバイスを制御できます。
トークンを取得する最も簡単な方法は、 miiocli cloud
コマンドを使用することです。このコマンドは、micloud を使用してクラウド アカウントからトークンを取得します。
miiocli cloud
Username: [email protected]
Password:
== name of the device (Device offline ) ==
Model: example.device.v1
Token: b1946ac92492d2347c6235b4d2611184
IP: 192.168.xx.xx (mac: ab:cd:ef:12:34:56)
DID: 123456789
Locale: cn
あるいは、他の入手方法についてはドキュメントを参照してください。
トークンを取得したら、デバイスの制御を開始できます。まず、 info
使用して、任意の (まだサポートされていない) デバイスから一般的な情報を取得できます。
miiocli device --ip <ip> --token <token> info
Model: rockrobo.vacuum.v1
Hardware version: MW300
Firmware version: 1.2.4_16
Supported using: RoborockVacuum
Command: miiocli roborockvacuum --ip 127.0.0.1 --token 00000000000000000000000000000000
Supported by genericmiot: True
デバイスの制御に使用する直接コマンドを提供するコマンド フィールドに注意してください。出力に記載されているように、デバイスがgenericmiot
統合によってサポートされている場合は、 miiocli genericmiot
使用してデバイスを制御することもできます。
--help
使用すると、いつでも利用可能なコマンド、サブコマンド、およびそれらのオプションに関する詳細情報を取得できます。
最新の (MIoT) デバイスのほとんどは、 genericmiot
統合によって自動的にサポートされます。内部的には、(「miot spec」) ファイルを使用して、センサー、設定、アクションなどのサポートされている機能を調べます。
このデバイス モデル固有のファイルは、 genericmiot
統合を初めて使用するときにダウンロード (およびローカルにキャッシュ) されます。
サポートされているデバイスのすべての機能は、共通コマンドのstatus
(デバイスの状態を表示する)、 set
(設定を変更する)、利用可能なアクションをリストするためのactions
、およびアクションを実行するためのcall
使用して利用できます。
実行status
現在のデバイスの状態と、受け入れられた設定値 (アクセスRW
でマーク) が表示されます。
miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 status
Service Light (light)
Switch Status (light:on, access: RW): False (<class 'bool'>, )
Brightness (light:brightness, access: RW): 60 % (<class 'int'>, min: 1, max: 100, step: 1)
Power Off Delay Time (light:off-delay-time, access: RW): 1:47:00 (<class 'int'>, min: 0, max: 120, step: 1)
設定を変更するには、設定の名前を指定する必要があります (例: 上記の例ではlight:brightness
)。
miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 set light:brightness 0
[{'did': 'light:brightness', 'siid': 2, 'piid': 3, 'code': 0}]
ほとんどのデバイスでは、次のようなアクションも提供されます。
miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 actions
Light (light)
light:toggle Toggle
light:brightness-down Brightness Down
light:brightness-up Brightness Up
これらはcall
コマンドを使用して実行できます。
miiocli genericmiot --ip 127.0.0.1 --token 00000000000000000000000000000000 call light:toggle
{'code': 0, 'out': []}
さらに使用可能なコマンドについては、 miiocli genericmiot --help
を使用してください。
この統合を使用するには、バージョン 0.6.0 がリリースされるまで git バージョンを使用する必要があることに注意してください。
古いデバイスは主に、対応するモジュール ( roborockvacuum
やfan
など) によってサポートされています。 info
コマンドは、デバイスがサポートされている場合、使用するコマンドを出力します。
--help
引数をモジュールに渡すことで、任意のモジュールで使用可能なコマンドのリストを取得できます。
$ miiocli roborockvacuum --help
Usage: miiocli roborockvacuum [OPTIONS] COMMAND [ARGS]...
Options:
--ip TEXT [required]
--token TEXT [required]
--id-file FILE
--help Show this message and exit.
Commands:
add_timer Add a timer.
..
コマンドを呼び出すたびに、デバイス モデルの検出が自動的に試行されます。状況によっては (デバイスにクラウド接続がない場合など)、この情報が利用できない場合があり、エラーが発生します。モデルを手動で定義すると、モデルの検出をスキップできます。
miiocli roborockvacuum --model roborock.vacuum.s5 --ip <ip> --token <token> start
miiocli
ツールには、デバッグ ログを有効にするために使用できる--debug
( -d
) フラグがあります。これを複数回繰り返すと (例: -dd
)、出力の冗長性を高めることができます。
最も一般的な問題に対するいくつかの解決策は、「トラブルシューティング」セクションで見つけることができます。
ご質問がある場合は、お気軽に問題を作成するか、GitHub でディスカッションを開始してください。または、マトリックス ルームをご覧ください。
このライブラリのすべての機能には、 miio
モジュールを通じてアクセスできます。個々の統合クラスを手動で初期化することもできますが、デバイス インスタンスを取得する最も簡単な方法はDeviceFactory
使用することです。
from miio import DeviceFactory
dev = DeviceFactory.create("<ip address>", "<token>")
dev.status()
これにより、デバイスに対してinfo
クエリが実行されてモデルが検出され、対応するデバイス クラスが構築されます。
次のメソッドを使用してデバイス クラスをイントロスペクトできます。
sensors()
使用してセンサーに関する情報を取得します。settings()
、変更可能な利用可能な設定に関する情報を取得します。actions()
利用可能なデバイス アクションに関する情報を返します。これらの各戻りデバイス記述子オブジェクトには、汎用インターフェイスの構築を可能にする利用可能な機能に関する必要なメタデータが含まれています。
注: 一部の統合には記述子が定義されていない場合があります。追加は簡単ですので、お気軽にご協力ください。
改善やバグ修正からドキュメントの改善まで、あらゆる種類の貢献を歓迎します。開始するための短いガイドを用意しました。
miIO/MIoT プロトコルを使用して通信するプロジェクトに取り組んでいる開発者である場合、またはこのプロジェクトに貢献したいが特定のデバイスを持っていない場合は、このプロジェクトが提供するシミュレーターを使用できます。 miiocli
ツールには、コードのテストに使用できる miIO と MIoT の両方のシンプルなシミュレーターが付属しています。
すべての MIoT デバイスはgenericmiot
統合を通じてサポートされていますが、このライブラリは次のデバイスもサポートします。
新しいデバイスのサポートや、すでにサポートされているデバイスの追加機能を追加するには、プル リクエストを自由に作成してください。
このライブラリをプロジェクトに使用している場合は、お気軽に PR を開いてここにリストしてください。
Home Assistant はこのライブラリを使用して、すぐに使用できるいくつかのプラットフォームをサポートします。プラットフォーム (括弧内) は上記の他のデバイスもサポートしている可能性があるため、このリストは不完全です。
これは、Xiaomi エコシステムに関する興味深いと思われる他のプロジェクトのリストです。関連プロジェクトをさらに投稿してください。