需求是这样的,我每天都骑电瓶车上下班。但是通勤距离确实比较远,电瓶车的电不够跑两个来回,意味着我每天都得回家充电。
但是这个事情,偶尔会忘记,一旦忘记,第二天就得打车去上下班,这个费用也比较贵,而且开车是真的堵,时间非常久,经常会迟到。电瓶车才是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瓦的样子
我就可以通过这些信息,来判断电瓶车目前是处于什么状态了。
然后我可以在每天晚上回家以后,程序自动查询一下,然后有异常就告诉我。