逆向 TCL 空调的 API,就为了用 Home Assistant 关个空调

2026-03-07 21:18:34 5点赞 7收藏 9评论

家里装了台 TCL 空调,作为一个 Home Assistant 重度用户,当然要把它接进去。之前用的是红外方式,缺点很明显看不了状态,只能通过室温等信息粗略判断。

逆向 TCL 空调的 API,就为了用 Home Assistant 关个空调

打开 HACS 搜了一下,还真有个 TCL 集成。装上,填账号密码——登录失败。

仔细一看,人家支持的是国际版 TCL Home App。而我用的是国内版 TCL+ 微信小程序。两套系统,完全不兼容。服务器不一样,API 不一样,认证方式不一样。国际版用邮箱密码走 AWS,国内版用微信授权走 cn.account.tcl.com。

好,那就自己来。

先搞清楚 API 长什么样

GitHub 上找到了一个国内版的 TCL HA 集成 ndwzy/tcl-ha(感谢大佬开源),翻了一遍源码,把 API 体系理清了:

  • 认证服务器:cn.account.tcl.com

  • IoT 控制服务器:io.zx.tcljd.com

  • 微信小程序 appId:wxed3f11c6ee178737

认证流程是:微信授权 → 拿到 accessToken + refreshToken → 用 refreshToken 续期。

看到这里我想,能不能绕过微信直接登录?毕竟我有手机号和密码。

于是我写了个脚本暴力探测 TCL 账号系统的所有接口。探到了 /auth/auth/login,密码登录接口确实存在。然后我试了明文密码、MD5、SHA256、Base64……全部返回账号或密码不正确。

反编译小程序代码才发现,TCL 对密码做了 RSA 加密,公钥写死在小程序包里,没有独立的获取接口。

没办法,只能走抓包这条路。

中间人代理抓微信小程序

工具选 mitmproxy,写了个 addon 脚本,自动拦截 cn.account.tcl.com 的所有响应,提取 token。

第一个坑:我日常开着 ***** 上网,关掉就断网。mitmproxy 和 Clash 抢代理端口,两个不能共存。解决方案是代理链——mitmproxy 监听 8888 端口,上游转发给 ***** 的 7897 端口:

微信 → mitmproxy(8888) → *****(7897) → 外网

第二个坑:HTTPS 中间人需要安装 CA 证书,不装的话微信直接报网络异常。

第三个坑:第一版脚本只监控了 refershToken 接口(对,TCL 把 refresh 拼成了 refersh,这个后面再说),结果什么都抓不到。后来才发现微信登录走的是 loginByAuthCode 接口,token 在那个响应里。白忙了二十分钟。

改完脚本,打开微信小程序点了一下,token 秒出。

逆向 TCL 空调的 API,就为了用 Home Assistant 关个空调

验证 API 控制能力

拿到 token 后,写脚本逐个测试 API。设置温度、切模式、调风速、控摆风、开关 ECO——全部返回 code: 200。空调也真的在响应,听到了继电器切换的声音。

完美,API 全通。

接进 Home Assistant

本以为最难的部分过了,结果 HA 这边也一堆坑。

最开始想用最简单的方案:command_line 传感器 + shell_command + YAML template climate。写好了配置,部署上去,传感器正常,能读到空调状态。但 climate 实体死活出不来——HA 的 template 集成根本不支持在 YAML 里定义 climate 实体。翻了官方文档确认,template 只支持 sensor、binary_sensor、number 这些,climate 不在列表里。

只能写 custom component。

写了一个最小的 custom_components/tcl_ac/,四个文件:manifest.json、__init__.py、const.py、climate.py。ClimateEntity 里实现状态轮询和控制指令,30 秒刷新一次。

终于,climate.tcl_kong_diao 出现在实体列表里。温度、模式、风速、摆风,全部可控。

逆向 TCL 空调的 API,就为了用 Home Assistant 关个空调

TCL,你是真的离谱

回顾整个过程,最让我无语的是 TCL 这家公司的技术水平:

第一,国内外两套完全割裂的系统。 同一个品牌,国内版和国际版的服务器、API、认证方式全都不一样。国际版的ha已经非常完善了,国内用户一点都用不上。这不是两个产品,这像是两个公司。

第二,没有任何开放接口。 2026 年了,小米官方的插件都有了,TCL 呢?什么都没有。想接入第三方平台?抓包去。

第三,API 拼写错误都不改。 refershToken——refresh 拼成 refersh。这个接口已经上线不知道多久了,到现在还是错的。说明要么没有 code review,要么没人在乎,找实习生胡写一同上线就行。

一台空调,硬件没问题,制冷制热都很好。但软件生态烂到让人想退货。

如果你也是国内版 TCL 空调用户,想接入 Home Assistant,我已经把完整方案开源了:tcl_ac_ha。抓包脚本、自定义组件、部署工具,一条龙。

https://github.com/qwqqq6/tcl_ac_ha

希望 TCL 哪天能学学怎么做一个正常的开放平台。但我不抱期望。

逆向 TCL 空调的 API,就为了用 Home Assistant 关个空调逆向 TCL 空调的 API,就为了用 Home Assistant 关个空调
展开 收起
9评论

  • 精彩
  • 最新
  • climate.tcl_kong_diao,空啥? [邪恶]

    校验提示文案

    提交
    [不说话] [不说话] [不说话]

    校验提示文案

    提交
    福建人写的吗?

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 请教一下 我是抓得燃气数据 但是Token一个小时就会过期 refreshToken还没有续期的接口 是不是没法救了

    校验提示文案

    提交
    这个接口不一样没有可比性,得看看才知道

    校验提示文案

    提交
    收起所有回复
  • 洗衣机,冰箱能不能接入??

    校验提示文案

    提交
    没设备,有就可以接

    校验提示文案

    提交
    收起所有回复
  • 这个看着不错

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
7
扫一下,分享更方便,购买更轻松