iOS 上的米家自动化替代方案:用快捷指令 + 中转服务实现设备控制

133 天前
 19888888888x

背景与痛点

为此,我上班摸鱼写了一个 加密中转服务( Go 自托管 / Cloudflare Worker 两种版本)来代替米家 App 完成签名、Cookie 注入。快捷指令只需向中转服务发送一段 JSON ,就能在后台控制米家,包括设备控制和场景触发。


整体方案

  1. 扫码登录
    访问 /login/qrcode,用米家 App 扫码,获得
    userId / ssecurity (securityToken) / deviceId / serviceToken 四个关键参数。
  2. 快捷指令 POST
    向中转服务 POST 一段 JSON ,由服务器补齐签名后转发至 https://api.io.mi.com
  3. iOS 自动化触发
    无需米家常驻后台,快捷指令在「到达某地点 / 连接某 Wi-Fi 」等场景触发后即刻发请求。

示例请求体:

{
  "userId": "123456789",
  "serviceToken": "xxx",
  "deviceId": "abc123",
  "securityToken": "Q0eQ7tKq...", // 即 ssecurity
  "data": {
    "did": "xxx",
    "method": "set_props",
    "params": [ ["power", 1] ]
  }
}

iOS 定位坐标系坑

因此直接填写 GCJ-02 坐标会出现数百米偏差,导致自动化难以触发。
解决办法:先用快捷指令读取 GCJ-02 → 在线或本地转换为 WGS-84 ,再把转换后的坐标写到自动化里。
我做了一个快捷指令转换示例:https://www.icloud.com/shortcuts/5161a59573f248399e58a8584eb93468


代码与部署

https://gist.github.com/Zayrick/62701850c833c4051356268fa9afc3ff 其中包含一个 sever.go ( Go 版本)和 worker.js ( Cloudflare Worker 版本)

部署详情参照 gist 中的 README.md


风险警告 ⚠️

风险 说明
账号安全 扫码登录使用真实米家账号,存在被封或 Cookie 泄露风险
网络安全 中转服务需走 HTTPS ,防止中间人窃听;同时禁止公网暴露调试接口
设备权限 serviceToken/ssecurity 拥有完整设备控制权限,请加密存储
隐私泄露 服务器可访问全部家庭与设备信息,建议专号 + 内网部署

参考资料

📚 常用米家 API

操作 请求方式
读取设备属性 POST https://api.io.mi.com/app/miotspec/prop/get
设置设备属性 POST https://api.io.mi.com/app/miotspec/prop/set
执行动作 POST https://api.io.mi.com/app/miotspec/action
获取设备列表 POST https://api.io.mi.com/app/home/home_device_list
获取家庭列表 POST https://api.io.mi.com/app/v2/homeroom/gethome_merged
获取场景列表 POST https://api.io.mi.com/app/appgateway/miot/appsceneservice/AppSceneService/GetSceneList

💡 设备控制 API 查这里:https://home.miot-spec.com

免责声明:自己玩可以,别滥用,风险自负 🫡

2262 次点击
所在节点    iOS
14 条回复
Lentin
133 天前
大部分操作都可以加到 siri 里面再搭配捷径使用的吧……用得到这么折腾吗
19888888888x
133 天前
@Lentin 但是没办法做到后台,比如说锁屏情况下的自动运行🫠而且米家那个快捷指令还会有个弹窗很烦
georgex
133 天前
ha 实现不了吗
19888888888x
133 天前
@georgex 应该也可以,没深入用过🤔
wyd011011daniel
133 天前
感觉可以作为给米家用户轻量化替代,也可以接入其他设备来远程控制。

不过如果有 appletv 或者 homepod 的话我更倾向于 HA 接入苹果家庭。

再者 HA 部署之后内网穿透也一下也能类似效果。
MacsedProtoss
133 天前
你是否在找:home assistant
这才是正确的打开方式
Kaiyuan
132 天前
本地网关有类似的操作吗?
Lin0000
132 天前
我直接就是 home assistant 里面用 xiaomi home (小米官方开源插件),再接个 home bridge ,直连家庭
icestraw
132 天前
太麻烦了,还搞这些。你只需要笔记本连公网,然后随便写个 API ,用 TTS 说出指令,然后电脑旁边放一个小爱同学就可以了,用不着注入啥的,而且批量执行啥的都能搞定。
CivAx
132 天前
干得不错,但大家都在用 HA
19888888888x
132 天前
我注意到大家都在提 HomeAssistant ,我之所以没用这个因为这个需要一台内网服务器/软路由还要配合一个 homekit 音响,娃刚从学校出来实习实在没啥钱盘这些东西,只能出一个简化版本的方案
internelp
132 天前
@19888888888x 玩客云 30 元包邮,podman 启动一个 hass 即可,待机 5W 内。比你用自动化方便多了。
unneeded
132 天前
几十块买个 n1 ,跑 ha 吧,一劳永逸
gigishy
131 天前
我也觉奇怪,用 ha 不好吗?
另,那个坐标转换快捷指令,满网都是一模一样的,是你的原创?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1150813

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX