最近做了一些折腾,花了点精力终于实现了晚上趟床上看书不用下地,直接跟小爱说一声关灯,手指机器人就能控制开关了。

效果

https://github.com/yihong0618/gitblog/assets/15976103/bb8ec3ab-5229-4e3b-a305-b20b1b8a69f7

手指机器人选购

  • 开始选用了一款射频开关的,控制不灵敏放弃
  • 之后找了款配合米家的,但是逆向蓝牙略麻烦,米家这块安全性做的不错
  • 最后选定了一款涂鸦的,可以无痛申请开发者,拿到 local token, 就它了(大家如果选用任意平台搜索涂鸦手指机器人就行)

如何操作

  • 结合 xiaogpt 使用 git clone 的方式,因为我们需要改一些代码(未来可能会做成插件)
  • 下载涂鸦 app 然后参考这个项目拿到所有的 key -> https://github.com/redphx/tuya-local-key-extractor
  • 使用这个项目设置手指机器人的蓝牙并测试 https://github.com/redphx/poc-tuya-ble-fingerbot (可能需要改一定代码,如果你想复刻出现困难可以留 comment 我来帮忙
  • 把 fingerbot 代码整合进 xiaogpt 并更改关键词
  • 搞定

By the way

我还给 miservice 加了循环播放和列表播放,下面是一些技术细节。

  • 需求来自这个 issue https://github.com/yihong0618/MiService/issues/16
  • 最困难的事如何拿到 remote url mp3 的时长,我还改写了个 js 项目 -> python https://github.com/yihong0618/remote_mp3_duration
  • 后来发现并不完美,有些 ffmpeg 转换的 mp3 需要计算 samples
  • 既然都是拿 header 去解析,但传统的 mutagen 不支持 url,那么我为啥不给支持了呢
  • 具体参考这个 commit https://github.com/yihong0618/MiService/commit/53f9262aa7a40daeaf71a0d2d8a9f2eb26348623 我们只需要最多拿前 1000 个字节也就能完成解析,也就是只需要 temp file
  • 搞定

效果:

https://github.com/yihong0618/gitblog/assets/15976103/3ceb34fc-6a02-404b-b0da-63caf1f340c3