通过API获取小米WIFI插座属性来实现自动化

/ 0评 / 2

需求是这样的,我每天都骑电瓶车上下班。但是通勤距离确实比较远,电瓶车的电不够跑两个来回,意味着我每天都得回家充电。

但是这个事情,偶尔会忘记,一旦忘记,第二天就得打车去上下班,这个费用也比较贵,而且开车是真的堵,时间非常久,经常会迟到。电瓶车才是YYDS。

我也尝试过每天晚上都提醒我充电,但是每天都提醒,人有时候会有错觉,就不知道自己到底充没充,久而久之就麻痹了,都觉得自己充了,等第二天上班的时候才发现,喔嚯,没有充。

于是我就在想,能不能想个办法,真正知道我是不是在充电,然后再提醒,这样的话,就我真正忘记的时候,才会提醒,而且我还可以通过小爱TTS来提醒,这样只要提醒了,就肯定是没有充电,就不会忘记了。

于是我就需要一个,至少能连WiFi,能监测功率的插座。

这个倒是可以自己diy,就想我之前自己做wifi继电排插一样。可以买到现成的模块。不过自己做的嘛,又丑,还不小巧。而且成本也不低。

小米倒是有一个WIFI智能插座,内置蓝牙网关,连wifi的,而且可以测试功率。

只要想办法能通过API拿到就可以了

还真的有!

首先得获取你的米家APP下设备的token和IP。可以通过这个程序获取到。https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor

可以获取到这些信息

然后你需要一个python-miio程序,直接:
pip install python-miio
具体文档可以查这里:https://github.com/rytilahti/python-miio

安装好了,就可以使用这两个指令实现开、关和查询信息了。

#开
miiocli -d device --ip YOUR_DEVICE_IP --token YOUR_DEVICE_TOKEN raw_command set_properties "[{'did': 'MYDID', 'siid': 2, 'piid': 1, 'value':False}]"
#关
miiocli -d device --ip YOUR_DEVICE_IP --token YOUR_DEVICE_TOKEN raw_command set_properties "[{'did': 'MYDID', 'siid': 2, 'piid': 1, 'value':True}]"
#查看功率
miiocli -d device --ip YOUR_DEVICE_IP --token YOUR_DEVICE_TOKEN raw_command get_properties "[{'did': 'MYDID', 'siid': 5, 'piid': 6 }]"

至于这个后面的did siid piid是啥,下面来细讲。

首先是did,你写啥都行,这个好像没有特别的影响,我也不懂写了有啥区别。

然后siid和piid的获取。首先打开这个json文件
http://miot-spec.org/miot-spec-v2/instances?status=all
这个是所有MIOT设备的信息,model对应的是你前面获取token时候获取到的的设备model
小米wifi插座2的model是chuangmi.plug.212a01

于是在这个json里面搜索,可以找到对应的type

然后打开这个链接,后面的type的参数就是上面获取到的:
https://miot-spec.org/miot-spec-v2/instance?type=urn:miot-spec-v2:device:outlet:0000A002:chuangmi-212a01:1

可以看到所有支持的指令,里面services下的iid就是siid。properties下的iid就是piid。

可以通过这个描述字段description,来看看具体你要选择的信息。

这里的value就是获取到的功率,173就是1.7瓦的样子。

最后我通过规律得知,我插上充电器,但是不插到车上,功率是2瓦以下

我插上充电器正常充电,功率是100瓦以上,大概在180瓦

如果充电充满了,依然插着,大概是大于2瓦,大概是3~5瓦的样子

我就可以通过这些信息,来判断电瓶车目前是处于什么状态了。

然后我可以在每天晚上回家以后,程序自动查询一下,然后有异常就告诉我。

发表评论

邮箱地址不会被公开。 必填项已用*标注