冬天来了,老妈也不想早起烧水了,让我用手机预约,但是米家里没有定时烹饪,我自己又总会忘记。让她自己预约,她说不会,这不就想搞的简单点,让他能够自己操作,或者不用操作,所以就有了现在这个。
0.基本信息
token
的获取,网上有很多的方法,我用的是从SQLite
里面查的。拿到令牌后就可以执行一下命令,得到养生壶的基本信息了。
获得米家养生壶基本信息
miiocli device --ip 192.168.xxx.xxx --token ff11axxxxxxxxxxx2ff info
IP
: 192.168.xxx.xxxtoken
: ff11axxxxxxxxxxx2ffModel
: chunmi.health_pot.a1Hardware version
: esp32Firmware version
: 2.1.8_0006
🏠 <—–> ☁️ <—–📱
- 手机发送指令给巴法云,控制定时器的开关
- 家中的Node-Red和应用程序分别订阅相关主题
- 如果定时任务打开,到指定时间会想巴法云推送开始烹饪的指令
- 程序收到相关指令就开始操作养生壶烹饪
其实这个比较绕了,可以直接crontab定时调用程序就行了,但是想小程序控制就绕了一圈。
1.miio获取相关信息
下面是一些miio获取的命令,可以参照一下。集体的属性要看它的文档,相关链接在文章的末尾,可以参看。
获得当前状态
miiocli -d device --ip 192.168.xxx.xxx --token ff11axxxxxxxxxxx2ff raw_command get_properties "[{'did': 'status', 'piid': 1, 'siid': 2} ]"
获得错误码
miiocli -d device --ip 192.168.xxx.xxx --token ff11axxxxxxxxxxx2ff raw_command get_properties "[{'did': 'fault', 'piid': 2, 'siid': 2} ]"
动作的参数经过多方查找和尝试,最后在python-miio的issues里面找到了正确的写法。
经过尝试,总结出了如下的命令:
开始烧水
miiocli -d device --ip 192.168.xxx.xxx --token ff11axxxxxxxxxxx2ff raw_command action "[{'did': 'start-cook', 'aiid': 1, 'siid': 2, 'in': [{'piid': 3, 'value': 4}]} ]"
取消烹饪
miiocli -d device --ip 192.168.xxx.xxx --token ff11axxxxxxxxxxx2ff raw_command action "[{'did': 'cancel-cooking', 'aiid': 2, 'siid': 2}]"
2.路由器上安装 python-miio
# 安装相关包
opkg install python3-pip
opkg install python3-dev
opkg install gcc
# 安装 python-miio
pip install python-miio
3.代码编写/调试
在路由上起一个服务,订阅巴法云上的主题来控制养生壶动作。代码就不贴了,没啥特别的。然后把定时放到Node-Red上,也可以用crontab定时,这个看自己实现方式了。但是在控制的时候运行报错,报No module named ‘_cffi_backend‘,截图如下:
网上多半说是因为没有安装 cffi
,但是实际情况是已经安装好了的,最后看找不到32位Python的_cffi_backend。如何检查共享对象的预期后缀?看了这个文章,是不是因为文件名的问题,我尝试了一下,把之前的拷贝了一份,发现可以成功运行了。
cd /tmp/mnt/sda/entware/lib/python3.9/site-packages
cp ./_cffi_backend.cpython-39-aarch64-linux-gnu.so _cffi_backend.so
find . -name "*_cffi_backend*"
|./_cffi_backend.so
|./_cffi_backend.cpython-39-aarch64-linux-gnu.so
在Node-Red中添加node-red-contrib-chronos节点,实现定时功能。小程序上实现定时器的开关。
实战了下,在早上5:30成功的烧水了,加了server酱的通知。
4.总结
这个其实很早之前就想整了,但是之前一直都没成功,后面就搁浅了。这不功夫不负苦心人,终于搞定了。所以只要坚持就是胜利啊。
参考链接
小米养生壶接入
米家miot设备接入HA
MIOTALL
chunmi.health_pot.a1
Xiaomi Miot For HomeAssistant
python-miio issues
找不到32位Python的_cffi_backend。如何检查共享对象的预期后缀?