iOS 上的米家自动化替代方案:用快捷指令 + 中转服务实现设备控制 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
19888888888x
V2EX    iOS

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

  •  
  •   19888888888x 65 天前 1834 次点击
    这是一个创建于 65 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景与痛点

    • 米家自动化 在 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  
       65 天前
    大部分操作都可以加到 siri 里面再搭配捷径使用的吧……用得到这么折腾吗
    19888888888x
        2
    19888888888x  
    OP
       65 天前 via iPhone
    @Lentin 但是没办法做到后台,比如说锁屏情况下的自动运行而且米家那个快捷指令还会有个弹窗很烦
    georgex
        3
    georgex  
       65 天前
    ha 实现不了吗
    19888888888x
        4
    19888888888x  
    OP
       65 天前
    @georgex 应该也可以,没深入用过
    wyd011011daniel
        5
    wyd011011daniel  
       65 天前
    感觉可以作为给米家用户轻量化替代,也可以接入其他设备来远程控制。

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

    再者 HA 部署之后内网穿透也一下也能类似效果。
    MacsedProtoss
        6
    MacsedProtoss  
       65 天前 via iPhone
    你是否在找:home assistant
    这才是正确的打开方式
    Kaiyuan
        7
    Kaiyuan  
       65 天前
    本地网关有类似的操作吗?
    Lin0000
        8
    Lin0000  
       65 天前
    我直接就是 home assistant 里面用 xiaomi home (小米官方开源插件),再接个 home bridge ,直连家庭
    icestraw
        9
    icestraw  
       65 天前
    太麻烦了,还搞这些。你只需要笔记本连公网,然后随便写个 API ,用 TTS 说出指令,然后电脑旁边放一个小爱同学就可以了,用不着注入啥的,而且批量执行啥的都能搞定。
    CivAx
        10
    CivAx  
       64 天前
    干得不错,但大家都在用 HA
    19888888888x
        11
    19888888888x  
    OP
       64 天前
    我注意到大家都在提 HomeAssistant ,我之所以没用这个因为这个需要一台内网服务器/软路由还要配合一个 homekit 音响,娃刚从学校出来实习实在没啥钱盘这些东西,只能出一个简化版本的方案
        12
    internelp  
       64 天前
    @19888888888x 玩客云 30 元包邮,podman 启动一个 hass 即可,待机 5W 内。比你用自动化方便多了。
    unneeded
        13
    unneeded  
       64 天前
    几十块买个 n1 ,跑 ha 吧,一劳永逸
    gigishy
        14
    gigishy  
       64 天前 via iPhone
    我也觉奇怪,用 ha 不好吗?
    另,那个坐标转换快捷指令,满网都是一模一样的,是你的原创?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2180 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 00:50 PVG 08:50 LAX 17:50 JFK 20:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86