该库(及其附带的 cli 工具miiocli
)可用于使用小米的 miIO 和 MIoT 协议控制设备。
这是一项自愿的、社区驱动的工作,与任何其设备受此库支持的公司无关。欢迎问题报告和拉取请求,请参阅贡献!
完整文档可从 python-miio.readthedocs.io 获取。
可以使用pip
安装最新版本:
pip install python-miio
或者,您可以从 GitHub 安装最新的开发版本:
pip install git+https://github.com/rytilahti/python-miio.git
该项目目前正在进行重大重构工作。如果您对控制现代 (MIoT) 设备感兴趣,则需要使用 git 版本(或预发行版, pip install --pre python-miio
),直到版本 0.6.0 发布。
如果您知道设备的 IP 地址和令牌, miiocli
命令允许从命令行控制受支持的设备。
获取令牌的最简单方法是使用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
来获取有关可用命令、子命令及其选项的更多信息。
genericmiot
集成自动支持大多数现代 (MIoT) 设备。在内部,它使用(“miot 规范”)文件来查找支持的功能,例如传感器、设置和操作。
当您第一次使用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
获取更多可用命令。
请注意,使用此集成需要您使用 git 版本,直到版本 0.6.0 发布为止。
较旧的设备主要由其相应的模块支持(例如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 上创建问题或开始讨论。或者,您可以查看我们的 Matrix 房间。
该库的所有功能都可以通过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 使用此库来支持多个开箱即用的平台。此列表并不完整,因为平台(括号中)也可能支持上面列出的其他设备。
这是您可能感兴趣的小米生态系统其他项目的列表。欢迎提交更多相关项目。