V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
19888888888x
V2EX  ›  iOS

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

  •  
  •   19888888888x · 2025 年 8 月 7 日 · 2420 次点击
    这是一个创建于 157 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景与痛点

    • 米家自动化 在 iOS 上想完全后台运行,常要求 App 获得「始终定位」权限,比如连接 WiFi 自动执行操作,并且长期后台定位让我有点莫名不爽。
    • 快捷指令自动化 能在锁屏时触发,快捷指令的自动化无法调用第三方软件的功能,无法在后台执行在米家直接添加到快捷指令的场景

    为此,我上班摸鱼写了一个 加密中转服务( 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(与高德一致);
    • 「快捷指令自动化 ➜ 到达某位置」触发条件却使用 WGS-84

    因此直接填写 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 版本)

    • Go 版本(自托管 / 内网优先)
    • 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

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

    14 条回复    2025-08-09 01:44:03 +08:00
    Lentin
        1
    Lentin  
       2025 年 8 月 7 日
    大部分操作都可以加到 siri 里面再搭配捷径使用的吧……用得到这么折腾吗
    19888888888x
        2
    19888888888x  
    OP
       2025 年 8 月 7 日 via iPhone
    @Lentin 但是没办法做到后台,比如说锁屏情况下的自动运行🫠而且米家那个快捷指令还会有个弹窗很烦
    georgex
        3
    georgex  
       2025 年 8 月 7 日
    ha 实现不了吗
    19888888888x
        4
    19888888888x  
    OP
       2025 年 8 月 7 日
    @georgex 应该也可以,没深入用过🤔
    wyd011011daniel
        5
    wyd011011daniel  
       2025 年 8 月 7 日
    感觉可以作为给米家用户轻量化替代,也可以接入其他设备来远程控制。

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

    再者 HA 部署之后内网穿透也一下也能类似效果。
    MacsedProtoss
        6
    MacsedProtoss  
       2025 年 8 月 7 日 via iPhone
    你是否在找:home assistant
    这才是正确的打开方式
    Kaiyuan
        7
    Kaiyuan  
       2025 年 8 月 7 日
    本地网关有类似的操作吗?
    Lin0000
        8
    Lin0000  
       2025 年 8 月 8 日
    我直接就是 home assistant 里面用 xiaomi home (小米官方开源插件),再接个 home bridge ,直连家庭
    icestraw
        9
    icestraw  
       2025 年 8 月 8 日
    太麻烦了,还搞这些。你只需要笔记本连公网,然后随便写个 API ,用 TTS 说出指令,然后电脑旁边放一个小爱同学就可以了,用不着注入啥的,而且批量执行啥的都能搞定。
    CivAx
        10
    CivAx  
       2025 年 8 月 8 日
    干得不错,但大家都在用 HA
    19888888888x
        11
    19888888888x  
    OP
       2025 年 8 月 8 日
    我注意到大家都在提 HomeAssistant ,我之所以没用这个因为这个需要一台内网服务器/软路由还要配合一个 homekit 音响,娃刚从学校出来实习实在没啥钱盘这些东西,只能出一个简化版本的方案
    internelp
        12
    internelp  
       2025 年 8 月 8 日
    @19888888888x 玩客云 30 元包邮,podman 启动一个 hass 即可,待机 5W 内。比你用自动化方便多了。
    unneeded
        13
    unneeded  
       2025 年 8 月 8 日
    几十块买个 n1 ,跑 ha 吧,一劳永逸
    gigishy
        14
    gigishy  
       2025 年 8 月 9 日 via iPhone
    我也觉奇怪,用 ha 不好吗?
    另,那个坐标转换快捷指令,满网都是一模一样的,是你的原创?
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3762 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:58 · PVG 08:58 · LAX 16:58 · JFK 19:58
    ♥ Do have faith in what you're doing.