为此,我上班摸鱼写了一个 加密中转服务( Go 自托管 / Cloudflare Worker 两种版本)来代替米家 App 完成签名、Cookie 注入。快捷指令只需向中转服务发送一段 JSON ,就能在后台控制米家,包括设备控制和场景触发。
/login/qrcode,用米家 App 扫码,获得userId / ssecurity (securityToken) / deviceId / serviceToken 四个关键参数。 https://api.io.mi.com。 示例请求体:
{
"userId": "123456789",
"serviceToken": "xxx",
"deviceId": "abc123",
"securityToken": "Q0eQ7tKq...", // 即 ssecurity
"data": {
"did": "xxx",
"method": "set_props",
"params": [ ["power", 1] ]
}
}
因此直接填写 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 拥有完整设备控制权限,请加密存储 |
| 隐私泄露 | 服务器可访问全部家庭与设备信息,建议专号 + 内网部署 |
| 操作 | 请求方式 |
|---|---|
| 读取设备属性 | 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
免责声明:自己玩可以,别滥用,风险自负 🫡
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.