
这两天把家里的中央空调接进了 Home Assistant,顺手也接进了 Apple Home。
一开始不是为了搞空调。
我本来在折腾路由器,打开弱电箱的时候,又看到了那个空调网关。之前一直知道它在那儿,但没仔细看过。那天才发现它有个 LAN 口。
接上以后没有马上变成“智能家居项目”。它甚至不在路由器的正常设备列表里。
我一开始盯上了一个 192.168.31.60,看着很像,端口也有点像。但拔掉网关以后它还在线。好吧,错了。
后面看侧标,型号是 BroadLink / 博联 BL-LAN-AC.GW1。GitHub 上能搜到一些中弘 / BroadLink 中央空调网关的资料,常见说法是 UDP 43708 发现,TCP 9999 控制。
但真正找到它,是在路由器上抓包。
它自己从 192.168.5.251:43708 往广播地址发包。payload 里还有 27 0f,也就是 9999。
问题就很朴素了。它拿着一个静态的 192.168.5.251,跟我家 LAN 不在一个网段。
进 Web UI,把它改成 DHCP,才终于出现在 192.168.31.229。
然后又绕了一下。TCP 9999 看起来最像正路,连接也能建,但状态拿不到。最后能用的反而是它页面里那套 CGI API:
GET /cgi-bin/api.html?f=17&p=0 读状态GET /cgi-bin/api.html?f=18... 控制开关、模式、温度、风速admin,空密码curl --http0.9是的,--http0.9。很有家电网关的那种克系质感。
读出来以后,四台内机就是书房、主卧、客厅、次卧。
我先让 Codex 写了一个本地 helper:tools/ac_gateway.py。能读状态,也能发控制。再把它收进 MUCAA 的 home-ac-control skill。
这个 skill 主要是防止乱改。比如我只说“把客厅开到 26 度”,它会先读状态,只改客厅、温度和开关,其他模式、风向都保留。
还有个小坑:网关在空调关着的时候也可能报告“高风”。如果开机时直接沿用,可能一启动就是最大风。所以现在从关到开,除非我明确说风速,否则默认自动风。
命令行跑通以后,又做了一个手机控制页,部署在 NAS 上。没做得特别复杂,能看状态、调温度、切模式、设自动化和定时。
后面才是 Home Assistant。
HA 跑在 NAS 的 Docker 里。这里也没继续找现成插件,直接写了一个 custom climate platform,底层还是调这台 BroadLink 网关的 CGI API。于是 HA 里多了四个 climate entity,再通过 HomeKit Bridge 暴露给 Apple Home。
再往后,又顺手把小米设备也接进了 Home Assistant。Xiaomi Home integration、OAuth redirect、dashboard、灯和传感器,基本也都是跟 Codex 一边聊一边扣出来的