python-miio 入门
一、获取ip和tooken
转载链接:
https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor
二、基础通信
转载链接:
https://github.com/rytilahti/python-miio/issues/901
以下是翻译:
我能够从不受支持的设备(HeatCold 加热地板控制器 - cubee.airrtc.th123e)获取数据,并从 Mac 上的终端设置所需的参数。有人可以帮助将其转换为 Home Assistant 和 HomeKit 的工作插件吗?
这是我为所有想玩自己设备的新手提供的分步指南:
-
在 Mac 上安装 python-miio。在 Mac 的终端应用程序中输入:
sudo pip3 install python-miio
-
获取您设备的型号名称(在我的例子中为“cubee.airrtc.th123e”)、IP 地址(如“192.168.1.152”)和令牌(如“b110204d86732b019d3d6axxxxb9ad3a”)。对我来说最简单的方法是将此集成用于 Home Assistant - https://github.com/AlexxIT/XiaomiGateway3
-
通过在 Mac 上的终端应用程序中输入以下内容来检查您的设备是否可以访问:
miiocli -d device --ip 192.168.1.152 --token b110204d86732b019d3d6axxxxb9ad3a info
注意 1:您需要将设备的 IP 和令牌放在这里。
注意 2:“-d”用于调试,可以排除以获得更短的输出。
在我的例子中,我得到了这样的信息:
“型号:cubee.airrtc.th123e
硬件版本:esp32
固件版本:2.1.7”
设备正在响应!好的!进入下一步。 -
在 MIOT 设备列表中找到您的设备:
http://miot-spec.org/miot-spec-v2/instances
?status=all 我搜索“cubee.airrtc.th123e”并找到以下行:{"status":"released","model":"cubee.airrtc.th123e","version":1,"type":**"urn:miot-spec-v2:device:thermostat:0000A031:cubee-th123e:1"**},
-
在这个 url 之后复制“urn”部分: https:
//miot-spec.org/miot-spec-v2/instance
?type= 在我的例子中:https://miot-spec.org/miot-spec-v2/ instance?type=urn:miot-spec-v2:device:thermostat:0000A031:cubee-th123e:1
您将看到设备规格的未格式化 JSON 文本 -
将此 JSON 文本放入任何 JSON 格式化程序以使其更易于阅读。例如这里: http: //json.parser.online.fr/
-
您将看到一个包含服务列表的层次结构(后来用作“siid”),每个服务都有一个属性列表(“piid”):
- 您需要在列表中找到您想要从设备获取并且可读的一些属性
(在我的例子中 siid 1 没有返回值,所以您可能想要检查其他服务,如“siid 2”和其他属性)
我想接收当前的“目标温度”。这是“siid”:2 和“piid”:5:
-
尝试通过在终端中输入以下内容来从您的设备获得响应:
miiocli -d device --ip 192.168.1.152 --token b110204d86732b019d3d6axxxxb9ad3a raw_command get_properties "[{'did': 'MYDID', 'siid': 2, 'piid': 5 }]"
注意:用您的值替换 IP、令牌、siid 和 piid
我收到的响应最后一行是:
“[{'did': 'MYDID', ' siid': 2, 'piid': 5, 'code': 0, 'value': 29 }]"
这是我设备上设置的实际目标温度:29 摄氏度!有用! -
现在让我们尝试更改一些属性。确保它具有“写入”访问权限(查看上述 JSON 文件中特定 piid 的“访问”字段)。
我想设置 28 度,这里是相关命令:miiocli -d device --ip 192.168.1.152 --token b110204d86732b019d3d6axxxxb9ad3a raw_command set_properties "[{'did': 'MYDID', 'siid': 2, 'piid': 5, 'value' : 28 }]"
新温度已在我的设备上设置,并已在米家应用程序中更新! -
检查值/设置是否在实际设备上设置,然后重做第 9 步以确认设备成功返回新值。
就这样!现在您可以从终端检索和设置值。
这是我的职责。如果有人描述如何根据这些知识进一步制作 Home Assistant 插件,我会很高兴 :)
感谢作者的分享。
三、实际操作
控制 chuangmi.plug.212a01 这个插座(小米智能插座2蓝牙网关版)
注意python-miio这个库不要用命令行去装,依赖版本会错,用pycharm去添加。
from miio.device import Device
plug = Device("你的设备ip地址", "你的设备tooken")
#打开
plug.send("set_properties", [{'did': 'MYDID', 'siid': 2, 'piid': 1, 'value': True}])
#关闭
plug.send("set_properties", [{'did': 'MYDID', 'siid': 2, 'piid': 1, 'value': False}])
或者cmd下直接操作:
miiocli device --ip 你的ip --token 你的tooken raw_command set_properties "[{'did': 'MYDID', 'siid': 2, 'piid': 1, 'value': True}]"