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 的工作插件吗?

这是我为所有想玩自己设备的新手提供的分步指南:

  1. 在 Mac 上安装 python-miio。在 Mac 的终端应用程序中输入:
    sudo pip3 install python-miio

  2. 获取您设备的型号名称(在我的例子中为“cubee.airrtc.th123e”)、IP 地址(如“192.168.1.152”)和令牌(如“b110204d86732b019d3d6axxxxb9ad3a”)。对我来说最简单的方法是将此集成用于 Home Assistant - https://github.com/AlexxIT/XiaomiGateway3

  3. 通过在 Mac 上的终端应用程序中输入以下内容来检查您的设备是否可以访问:
    miiocli -d device --ip 192.168.1.152 --token b110204d86732b019d3d6axxxxb9ad3a info
    注意 1:您需要将设备的 IP 和令牌放在这里。
    注意 2:“-d”用于调试,可以排除以获得更短的输出。
    在我的例子中,我得到了这样的信息:
    “型号:cubee.airrtc.th123e
    硬件版本:esp32
    固件版本:2.1.7”
    设备正在响应!好的!进入下一步。

  4. 在 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"**},

  5. 在这个 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 文本

  6. 将此 JSON 文本放入任何 JSON 格式化程序以使其更易于阅读。例如这里: http: //json.parser.online.fr/

  7. 您将看到一个包含服务列表的层次结构(后来用作“siid”),每个服务都有一个属性列表(“piid”):

miot_json

  1. 您需要在列表中找到您想要从设备获取并且可读的一些属性
    (在我的例子中 siid 1 没有返回值,所以您可能想要检查其他服务,如“siid 2”和其他属性)
    我想接收当前的“目标温度”。这是“siid”:2 和“piid”:5:

miot_json_temp

  1. 尝试通过在终端中输入以下内容来从您的设备获得响应:
    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 摄氏度!有用!

  2. 现在让我们尝试更改一些属性。确保它具有“写入”访问权限(查看上述 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 }]"
    新温度已在我的设备上设置,并已在米家应用程序中更新!

  3. 检查值/设置是否在实际设备上设置,然后重做第 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}]"

 

posted @ 2022-12-12 21:11  c/  阅读(2136)  评论(13编辑  收藏  举报