用 AI 搭一个会照顾人的家
目录
我想要的智能家居,得能处理一些很小的事:洗衣机洗好了,提醒一声;有人在睡觉,就先别说;出门几分钟拿个快递,回来不用再欢迎一遍。单独看都不难,真要写成自动化,才发现每句话后面都有好几个条件。
我家的 Home Assistant 现在跑着十几条这样的自动化,大多是我提需求,Claude Code 帮我写的,用的是 Opus 5.5。给它接好读取设备和历史记录的工具后,它能查实体、写配置,也能回头检查为什么某次提醒没响。最省心的是出了问题还能接着改,不必每次从文档里重新找起。
日常开灯、关阀和播报,仍然由网关或 Home Assistant 按规则执行,不需要每次都问大模型。AI 主要帮我把这些规则搭起来,另外也接了一个随时能查家里状态的助手。下面记的是我家这套配置,以及住进去以后才发现的几个问题。
先分清每件事由谁来做
截至写这篇文章时,家里接入了 117 台设备,其中 105 台来自米家。Home Assistant 里有 3825 个实体。一个开关、一项温度读数、一个运行状态都可能各占一个实体,并不是又买了几千台设备。
最开始要定下来的,是哪些事交给米家,哪些事交给 Home Assistant。我的分法是:按开关亮灯、漏水关阀这些要反应快、断外网也得工作的,放在米家网关本地;跨品牌和判断条件多的,放在 Home Assistant;远程访问统一走 Tailscale。
- 设备1床头三开开关「已转无线」:按键只发信号,灯一直通电
- 米家网关2本地联动单击右键 → 执行「主卧明亮模式」
- 设备3主卧筒灯亮。全程不出家门,HA 不参与
- 设备1存在筒灯毫米波感应到人,且环境光低于 100 lux
- 米家网关2本地联动打开玄关灯和壁灯
- Home Assistant3回家判断同一个「有人」也送到 HA:六个条件都满足,才算回家
- 云与外网4米家云把生成好的欢迎词发给小爱音箱
- 设备5小爱音箱「晚上好,欢迎回家!……」
- 设备1水浸卫士六只里任意一只报浸水或淋水
- 米家网关2本地联动立刻关闭钻石阀门控制器,切断进水总阀
- Home Assistant3紧急播报等 10 秒核实阀门状态,插队到播报队列最前面
- 云与外网4米家云临时关勿扰、取消静音、音量至少六成
- 设备5小爱音箱每分钟报一次,地面干了才停
- 设备1洗衣机洗涤阶段变成「结束」
- 云与外网2海尔云状态经海尔云同步出来
- Home Assistant3海尔集成自动化:07:30–22:30 才播,30 分钟内只播一次
- 云与外网4米家云转给小爱音箱
- 设备5小爱音箱「洗衣机洗好了」;一小时没人去生活阳台,再提醒一次
- 设备1玄关开关单击右键
- 米家网关2离家场景一次操作 63 个设备:关灯、关新风、关 6 台空调
- 设备3摄像头同时打开,录像定时备份到 J4125 的硬盘
- 云与外网1Muse「冰箱门关好了吗?家里现在几度?」
- 云与外网2TailscaleMuse 的虚拟机是 tailnet 里的一台设备,通过直连或中继访问家里
- Home Assistant3HA API用专属令牌读取实体状态
- 云与外网4Muse把状态整理成简短回答
高频、对延迟敏感的动作,交给米家网关本地跑。
外网断了断网、HA 宕机都照常
同一个信号可以同时走两条路:网关管「开灯」,HA 管「说什么」。
外网断了灯照常亮,问候不说
关阀放在本地执行,语音通知另走一条路。
外网断了关阀照常,只是不会说话
米家之外的品牌,靠 HA 把它们和米家设备接到一起。
外网断了不播
能在米家里完成的场景,就别绕道 HA。
外网断了网关本地执行的动作仍可用;摄像头和备份要单独验证
家里不需要公网 IP,助手也能远程查询状态。
外网断了家里断网就问不到
网络:有线打底,旁路由补位
灯偶尔不听话,可以再按一下;家里几十台设备时不时离线,就很难分清是自动化写错了,还是网络出了问题。所以装修时,我先把网线铺好。
线怎么走
每个房间都预埋了网线,装修时统一换成了超六类线。Wi-Fi 交给有线回程的 AP,不用无线中继。封墙后再换线麻烦,点位和走线值得提前多想一遍。
- 入户:光猫负责拨号,出两根线。一根进锐捷网关的 WAN 口,家里的 IPv4 都从这里走;另一根直接接到 J4125 的一个空网口,只给 IPv6 用,原因在后面。
- 主路由和 AC:锐捷 RG-EG209MG-P。家里设备的地址、网关都由它发,自带 PoE 口,AP 用一根网线就能供电和联网,也由它统一管理。
- AP:客厅一台 RG-EAP272(MG) 吸顶 AP,主卧、次卧各一台,都是 Wi-Fi 7。在用的米家中枢网关也放在客厅电视附近。家里走动时的切换目前比较顺,但漫游效果也取决于终端和覆盖情况。
- 电竞房:预留两个网口,主机走有线。
- 机柜:放在玄关鞋柜里,有 J4125、Mac mini、锐捷网关和一台备用的小米中枢网关。鞋柜空间小,PDU 排插、短网线和散热都得一起安排。
设备从锐捷拿到地址,网关也是锐捷。IPv4 流量经 AP、锐捷、光猫出去,J4125 不在这条路上。
电视的网关和 DNS 都改成 J4125。从电视到 J4125 这一段,锐捷只当交换机;OpenClash 分流后,国内直连,YouTube、Netflix 走代理,再交回锐捷出去。
光猫只给了一个 /64 前缀,锐捷又不会中继。J4125 用单独的网口直连光猫,把这个前缀中继进家里,设备自己生成公网 IPv6 地址,进出都经过 J4125。
旁路由的好处:它重启、升级或者被我折腾坏了,家里照样能上网、看影音库。停掉的是代理、IPv6、Home Assistant 和从外面连回家。
J4125:一台小主机,几份差事
为什么要多这一台机器,是两个现实条件逼出来的。一是公网 IPv4 很难拿到:宽带出口在运营商级 NAT 后面,外面主动连不进来,找运营商要公网 IP 也不一定给。二是光猫的超级管理员密码在运营商手里,改不了桥接,路由器自己拨不了号;IPv6 那边,光猫也只在自己的 LAN 口给出一个前缀。锐捷对这两件事都帮不上忙,这些活就落到了 J4125 身上。
J4125 是一台用赛扬 J4125(四核,处理器功耗约 10 瓦)的软路由小主机,带四个 Intel 2.5G 网口,装的是 iStoreOS(基于 OpenWrt)。它在家里当旁路由:地址固定在家庭网段里,自己的网关指向锐捷,不接管全屋的 DHCP。设备默认仍然从锐捷拿地址和网关,想用它的功能再单独指过去。
它身上的活不少:
- 代理:跑 OpenClash,fake-ip 模式,国内直连,其余按规则分流。需要的设备把网关和 DNS 改成 J4125,就能透明代理;不方便改网关的,在应用里填它的 HTTP/SOCKS 端口。J4125 自己的流量也走代理,所以 Tailscale 要单独放行,后面会说到。
- IPv6 中继:把光猫下发的 IPv6 前缀带进家里,下一节细说。
- Tailscale 子网路由:把家里的网段发布出去,在外面也能访问没装客户端的设备。
- Home Assistant:用 Docker 跑,米家、海尔两套集成和所有自动化都在这里。
- 录像备份:外挂一块 1 TB 的监控盘,开 SMB 给米家摄像头做定时备份。
电视用得最多。在电视的网络设置里改成手动 IP,网关和 DNS 都填 J4125,YouTube、Netflix 的 App 就能直接打开,不用在电视上装任何代理软件。几个细节:
- DNS 必须一起改。 fake-ip 模式靠 J4125 的 DNS 把域名换成一个内部的假地址,流量到了网关才知道该交给代理。只改网关不改 DNS,流量认不出来。
- 别让电视走 IPv6 绕过去。 家里有了 IPv6,但 OpenClash 只代理 IPv4。它的 DNS 不返回 IPv6 地址,电视就只会用 IPv4 连这些网站。
- 屏蔽 QUIC。 YouTube 默认用基于 UDP 的 QUIC,我在 OpenClash 里把它屏蔽了,App 会退回 TCP,走代理更稳。
- Netflix 看节点。 它会识别代理和机房 IP,能不能看、能看哪个地区的片库,取决于节点出口的 IP,和家里怎么配关系不大。
旁路由的好处是出了事影响小。J4125 重启、升级或者被我改坏了,家里照样能上网、看影音库,停掉的只是代理、IPv6、Home Assistant 和远程访问。坏处也在这里:这么多事都压在一台小主机上,改它之前我都会先备份配置;人不在家时远程改网络,还会先放一个超时自动回滚的脚本,免得失联了只能跑回去。
IPv6:绕开主路由
运营商开通 IPv6 以后,光猫拨号拿到前缀,但只在自己的 LAN 口通告一个 /64。超管不在我手里,没法在光猫上打开前缀委派(DHCPv6-PD),试着改前缀长度也直接报错。/64 已经是 SLAAC 能用的最小网段,没法再切一块给锐捷后面的网络,剩下的办法只有两种:NAT66,或者把这个 /64 原样中继进家里。锐捷不支持中继,NAT66 也配不起来,只好让 J4125 绕开它:
- 单独拉一根线。 J4125 拿出一个网口,不放进家里的网桥,直接接光猫的空 LAN 口。IPv4 照旧走锐捷,这根线只管 IPv6。
- 三项都设成中继。 用 OpenWrt 自带的 odhcpd,把 RA、DHCPv6、NDP 都设成 relay:光猫那一侧是上游,家里这一侧是下游。手机、电脑用 SLAAC 自己生成公网 IPv6 地址,不需要 NAT。
- 上游口别要地址。 接光猫的那个口要设
accept_ra=2,并且不向光猫申请 DHCPv6 地址(reqaddress none),否则光猫每四十秒回一次No Binding,连接来回掉。accept_ra要写进 sysctl 配置,不然重启后中继就失效了。
这一路踩的坑:
- 开通不等于生效。 运营商说后台开好了,装维上门当场测还是不通;光猫断电重启三分钟后,一下全通了。遇到“说开了但不通”,先重拨再下结论。
- 新设备有一段慢热期。 中继要先学到设备的地址,出站才通。我见过一台电脑拿到地址后等了约十分钟才能上网,这段时间里别急着改配置。
- 前缀会变。 光猫重拨后十几分钟里,前缀换过好几次才稳定,下次重拨还会再变。所以别拿 IPv6 地址做固定的域名解析。
- 主路由自己的 IPv6 关掉了。 锐捷 WAN 口的 IPv6 开着时,J4125 自己的 IPv6 回程出过异常,关掉以后恢复。具体成因没完全查清,现在就让它保持关闭。
- IPv6 要单独看防火墙。 IPv4 有运营商 NAT 挡着,外面主动连不进来;IPv6 没有这层。刚打通时,J4125 上一个本该只在内网用的服务端口,一度能从公网直接访问,后来关掉了入站放行。现在接光猫那一侧默认拒绝入站。
打通 IPv6 最大的收益在 Tailscale。IPv4 这边,锐捷没开 UPnP 或 NAT-PMP,运营商 NAT 映射出去的端口又隔几分钟就变,打洞经常失败,只能走中继。有了 IPv6,手机在外面用蜂窝网络时也能和家里直连,老房子的路由器和 J4125 之间直连约 6 毫秒。
路由器配置也踩过一次坑:AI 用逆向接口改 DNS 后,当晚网络出了故障。这件事让我把“路由器只读”写进了后来的使用规矩。
设备:先看能不能进米家
我选设备时优先看米家,主要是想少维护几套平台。常用的开关、灯、传感器都能在这里找到,再通过小米官方的 xiaomi_home 集成接入 Home Assistant。不过,能进米家不等于所有功能都能带进 Home Assistant,买之前还得查具体型号和需要的实体。官方说明也列出了兼容范围。
我家大部分设备走的是米家的蓝牙 Mesh 2.0,开关、温控器、阀门控制器都是。它们不连 Wi-Fi,直接和中枢网关通信,常电的设备还能互相转发信号。配合网关本地执行的自动化,宽带断了,按开关照样亮灯,场景照样能跑,漏水照样关阀;停掉的只是在外面用手机遥控、让小爱播报这类要走云端的功能。中枢网关也因此成了全屋最关键的一台设备,好在家里还留着一台备用的。
下面是我家的选型和当时的购入价或询价,部分来自闲鱼,不能当作现在的统一报价。
| 用途 | 我的选型 | 当时价格 |
|---|---|---|
| 米家网关 | 小米中枢网关 ×2(一台在用,一台备用) | 约 300 元/台 |
| 墙面控制 | 小米智能中控屏 ×2,自带人体存在感应 | 约 300–370 元/台 |
| 开关 | 领普蓝牙 Mesh 智能开关,在闲鱼收了一批 | 二手单开 48、双开 58、三开 68 元 |
| 空调接入 | 中弘 B19SE 中央空调控制器 | 558 元 |
| 温控面板 | YOOMI 三合一温控器 MESH2.0 ×5,替换原来的老面板 | 约 224 元/个 |
| 漏水关阀 | 钻石阀门控制器 Mesh2.0 + 小米水浸卫士 2 ×6 | 阀门 105–153 元,水浸约 60 元/只 |
| 存在感应 | 领普人体存在筒射灯、领普 ES3 人体存在传感器 | 视型号 |
| 播报 | 小米智能音箱 Pro | 视渠道 |
| 空气净化 | 米家空气净化器 6 Pro,带 PM2.5 和甲醛检测 | 视渠道 |
| 室外安防 | 小米智能室外摄像机 4 Pro + 64 GB TF 卡 | 404 + 98 元 |
| 主机 | J4125 小主机、Mac mini | 视配置 |
其中有几处,光看设备清单不太容易明白。
老中央空调要分两步接。 原来的线控面板接不进米家。我用中弘 B19SE 控制器接到空调通信总线上,让 6 台室内机出现在米家里;再用 YOOMI 三合一温控器替换墙上的老面板,同时管空调、地暖和新风。这套能不能用,要先确认空调品牌、机型和协议都在兼容范围内。面板上的“空调开关”会直接控制室内机,测试时不能当成一个无关紧要的虚拟按钮。
智能灯要一直有电。 领普开关的按键可以设成“已转无线”:按键只发信号,不再直接切断灯的电源,再由米家自动化决定做什么。我家主卧门口的三开,三个键分别对应“睡觉”“温馨”“明亮”。这样关灯以后,灯还在线,下次场景调用才能找到它。代价是按键控制也依赖网关和联动正常工作。
漏水关阀这笔钱花得值。 六只水浸卫士放在厨房、洗碗机下、洗衣机下、两个卫生间和阳台,任意一只报警,就由米家网关在本地关掉进水总阀。传感器加阀门不到 600 元,安装后要实际测一次报警能不能带动关阀。
海尔洗衣机、烘干机和冰箱则通过 HACS 里的海尔集成接入,天气接和风天气。这些跨平台的数据,留给 Home Assistant 处理。
米家和 Home Assistant 怎么分工
我家米家里有 42 条自动化,执行方式都标着“网关本地执行”:开关按键对应的灯和场景、天黑时的人体感应亮灯,以及漏水关阀。比如玄关要同时满足有人、环境光低于 100 lux 才亮灯。这些不依赖外网或 Home Assistant,但设备供电和本地通信还是要正常。
Home Assistant 主要补三件事:
- 跨品牌联动。 海尔洗衣机洗好了,让小爱音箱说一声。
- 组合多个条件。 判断“全屋刚才没人,现在有人回来”,要一起看传感器、灯和时间。
- 把入口放到一起。 首页面板直接调用米家里的离家、观影、就餐等手动场景,场景内容仍在米家维护。我家的“离家”涉及 63 个设备,包括灯、新风、6 台空调和室外摄像头,不必在两边各写一遍。
米家增删设备后,还要在 xiaomi_home 的“配置 → 更新设备列表”里同步;面板里引用的实体也可能需要调整。我会让 AI 对照设备清单和实体注册表,把这些遗漏找出来。
自动化写好以后,还得过日子试
下面这些是 Home Assistant 里实际在跑的规则。温度阈值和播报时间按我家的设备、作息设置,换一家需要重新调。
| 类别 | 自动化 | 触发和限制 |
|---|---|---|
| 安全 | 漏水报警 | 全天有效;打破勿扰、取消静音、音量至少六成,每分钟一轮,传感器恢复后停止 |
| 安全 | 冰箱门没关 | 任一门开超过 2 分钟 |
| 安全 | 冰箱冷藏、冷冻温度异常 | 冷藏高于 8 度或冷冻高于 −12 度,持续 20 分钟;夜里发现的等到 7:30 再确认一次 |
| 家务 | 洗衣机洗好了、干衣机烘好了 | 07:30–22:30 才播,30 分钟内只播一次 |
| 家务 | 衣服忘了取 | 洗好一小时,仍没有取衣迹象;筒门状态不可靠,改用生活阳台有人活动作为替代信号 |
| 家务 | 洗涤剂、柔顺剂、过滤器提醒 | 延后 20 秒,免得和“洗好了”撞在一起;12 小时内只播一次 |
| 家务 | 每周电池检查 | 每周六上午十点;全部正常就不播 |
| 问候 | 回家问候 | 06:30–23:30 内,六个条件全部满足才说,两小时内只说一次 |
| 问候 | 工作日早安 | 避开法定假日;昨晚有人在家、早上第一次走出卧室时播报,附带天气提醒 |
| 记录 | 扫地机开始清扫、洗衣待取 | 不出声,只记时间,供问候语引用 |
| 巡检 | 漏水和冰箱门 | 每 5 分钟和每次重启后检查,补上可能漏掉的报警 |
播报还得排队。小爱音箱收到新文字会立刻切换,连发两句时,第二句会把第一句掐断。我把所有消息交给同一个脚本:普通消息排队,漏水这类紧急消息可以打断它。脚本按每字 0.3 秒、外加 3 秒估算一句话要说多久,再发下一句。这只是估时,并不能保证音箱真的播完了。
洗衣机的状态不一定可信
最初,“衣服忘了取”的规则靠筒门开关判断。实际洗过一次后,查历史才发现:筒门一直报“关”,开门取衣也没变;洗完后的状态判断也没有按预期触发,所以该有的提醒没响。
后来让 AI 分开改了两处:用洗涤阶段判断是否洗完,用生活阳台的人体存在传感器推测有没有人取衣。去过阳台当然不等于取过衣服,这个替代办法会漏提醒,但比盯着一个从来不变的筒门状态实用。自动化里的实体名字看起来再准确,也得和真实动作对一次。
进门不一定是回家
书房、电竞房、厨房、餐厅和阳台没有人体存在传感器,生活阳台有。“全屋无人”没法直接读一个值,只能综合已有的信号推断。
- 时间在 06:30–23:30 之间18:40
- 两小时内没问候过是
- 玄关此前 30 分钟没人离开 10 小时
- 其余人体传感器都没人都没人,且 30 分钟没变化
- 各房间的灯都关着都关着
- 音箱没在播放是
傍晚好,欢迎回家!洗衣机洗好了,衣服记得取出来。累了一天,先坐下歇会儿。
我把灯也算进判断:书房虽然没有传感器,灯亮着时就先当有人。可如果那个人没开灯,规则仍可能误判。图里选“书房没开灯”,就能看到它一边发现不了人,一边照常说欢迎。这是目前还在的盲区。
重启也会影响判断。Home Assistant 重启后,实体的状态时间戳可能集中刷新,不能拿来直接算离家时长。现在检测到相关时间戳都挤在三分钟内,就跳过“这么快就回来啦”这类依赖时长的话。
问候语也是 AI 帮忙写的程序在拼:按时段选开头,再补一两件相关的事,比如洗好的衣服、天气或周末。两个人的生日、农历节日和节气也放了进去,节气和节日预先算到 2030 年;最近说过的 45 句话会被记下来,尽量避免天天重复。这里没有每次调用大模型现场写词。
家庭影音:发链接入库
影音库跑在 Mac mini 上的 Emby,文件放在两块硬盘里。写这篇时有 273 部电影、28 部剧,共 2251 集。客厅电视用 Emby 客户端,手机和电脑在外面通过 Tailscale 访问。
入库流程也让 AI 帮我接了起来。现在把网盘分享链接发给它,说“入库”,后面按这几步走:
- 读取分享内容,结合 Sonarr(剧集)或 Radarr(电影)确认作品和集数;
- 转存到自己的网盘,用 alist 提供 WebDAV 访问;
- 用 rclone 增量下载,我这里开会员后通常是每秒 30–36 MB;
- 交给 Sonarr 或 Radarr 重命名、归档到对应硬盘;
- 通知 Emby 刷新,刮削海报和简介。
导入时遇到过两个问题。我这套外部下载流程用 DownloadedEpisodesScan 没能完成认领,后来改用 ManualImport。网盘里的番剧还经常只有 01.mkv 这样的文件名,得先核对季度和集数,再映射成 S01E01,不能只靠文件顺序猜。
我给入库流程定的默认规则是:已有文件就跳过,不删除、不替换。 画质升级要单独提出,再确认覆盖范围,免得整理片库时把旧版本顺手删了。
电视端也有个小插曲。TCL 电视上的 Emby 客户端(2.5.03g)第一次能登录,退出再进却一直转圈,提示“无效用户名和密码”。让 AI 在 J4125 上抓包后,没看到 App 发出登录请求,于是顺着自动登录去查。把启动方式改成“当前用户登录”后恢复了。至少这次,问题不在密码。
Tailscale:从外面连回家
我家的宽带没有公网 IPv4,出口在运营商级 NAT 后面,单靠 DDNS 和路由器端口映射没法从外面连进来。我用 Tailscale 把手机、电脑和家里的主机接到同一张私有网络里,不必把 Home Assistant、Emby 或路由器后台直接开放到公网。
http://<Mac 的 tailnet 地址>:8096手机和 Mac mini 都在 tailnet 里,Emby App 填 Mac 的 Tailscale 地址就行。能打洞就点对点直连;打不通,就走自建的成都 DERP 中继。我这里到中继的延迟约十毫秒,看片还得看带宽。
http://<J4125 的 tailnet 地址>:8123Home Assistant App 填 J4125 的 Tailscale 地址。不需要把 HA 的服务端口映射到公网,访问受 tailnet 策略限制。
https://<J4125>.<tailnet>.ts.net:8443锐捷网关没法装 Tailscale,请求先到 J4125,再经局域网转给它。J4125 上用 Tailscale Serve 套一层 HTTPS,证书自动签发,只有 tailnet 里的设备能打开。
http://<J4125 的 tailnet 地址>:8123/api/statesMuse 跑在 Meta 的云端虚拟机里,装上 Tailscale 后就是 tailnet 里的一台设备。它目前经中继连回家,再用 HA 的长期令牌读状态。
各自广播自己的网段老房子的红米 AX6000 也装了 Tailscale。两端发布不重叠的网段,配置转发、接受路由和访问规则后才能互访。我这里测到的 IPv6 直连延迟约 6 毫秒。
我家是这样接的:
- 先让主机入网。 手机、电脑、Mac mini、J4125 都装 Tailscale,老房子的红米 AX6000 也装上。
- 给装不了客户端的设备留一条路。 J4125 开启 IP 转发后,用
tailscale set --advertise-routes=192.168.110.0/24发布家里的网段,在管理后台批准路由,并配置访问规则。客户端还要接受这条路由,Linux 客户端尤其要检查。具体步骤见子网路由文档。 - 直连不通时用国内中继。 我这里连官方 DERP 的延迟偏高,于是在成都的云服务器上自建了一个。我的网络到它大约十毫秒,这个数跟所在地和线路有关,远程看片还得看带宽。
- 给管理入口配 HTTPS。 路由器后台用自签证书,入口是
https://<机器名>.<tailnet>.ts.net:8443。在 J4125 上执行tailscale serve --bg --https=8443 https+insecure://<路由器局域网地址>:443,Serve 会签发正规证书并反代过去。官方示例多是代理本机端口,但填局域网地址我这里实测可用。访问范围仍受 tailnet 策略限制。
改 Tailscale 的单项设置,我用 tailscale set。tailscale up 在漏写已有参数时会提示,并给出包含旧设置的命令;--reset 才是显式重置未指定设置的选项。命令说明里有这个区别。
如果还跑着 Clash,DNS 和代理规则也要一起看:
- OpenClash(路由器上):Tailscale 的连接要避免被透明代理绕走,相关域名要能正常解析。我遇到过代理节点故障后,Tailscale 已有连接还通,控制面却断了四天多才发现。
- Clash Verge(Mac 上):fake-ip 模式曾把
*.ts.net解析到 198.18 开头的假地址。我在fake-ip-filter里加了+.ts.net,并把这类域名交给 Tailscale 的 DNS100.100.100.100解析;前提是本机 Tailscale 已经连上。
随时查家里状态的 AI
配置自动化时我用 Claude Code,出门后想随口查家里,则接了 Muse。Meta 在 2026 年 9 月发布的这个助手运行在独立的云端虚拟机里,关掉 App 后也能继续做事。
我在 Muse 的虚拟机里装了 Tailscale,让它连到 Home Assistant;再创建一枚单独命名为 muse 的长期访问令牌,便于以后找到并撤销。给它常用实体的说明后,就可以问“冰箱门关好了吗”“洗衣机洗完了吗”,它通过 REST API 查状态,再把结果整理成一句话。出差时,也可以另外安排定时查询和汇报。
这里有个容易混淆的地方:写上“只读”,不代表令牌就只有读取权限。 长期令牌沿用所属账号的权限,普通用户也能控制实体;令牌叫 muse 只是便于管理,不会自动给它加上权限限制。Home Assistant 权限文档区分了普通用户和只读权限。
Tailscale 访问规则可以把它能连接的目标缩到 J4125 的 8123 端口,但读状态和控制设备都经过这个端口。长期指令里的“不要控制空调、地暖、门锁”只能约束行为,不能替代接口权限。要真正做到只读,还需要验证过的只读授权,或在中间加一层只暴露指定状态的接口,并阻断它直连 Home Assistant。这是下一步需要收紧的地方,当前这套直连令牌的做法还没有做到。
另外,查询结果会进入 Muse 的云端环境。Tailscale 保护的是连接过程,并不意味着家里的状态始终留在本地。
让 AI 动手的几条规矩
AI 帮我省了不少配置时间,也误操作过。一次测试温控器,客厅中央空调以制冷模式开了 37 秒;另一次用逆向接口改路由器 DNS,只复刻了网页“保存”按钮的一部分动作,当晚整网告警,第二天逐台重置 AP 才恢复。后一次的因果还没完全查清,不能断言就是它改坏了,但我不想再这样试一次。
现在我按操作会影响什么、出错后能不能恢复,给它划了几条规矩。
- 改配置前留备份。 Home Assistant 配置改完要跑
check_config,确认退出状态和输出,再重载;校验通过以后,还要看实际有没有按预期运行。 - 测试会动到设备的操作,先问人。 即使只是对已关闭的地暖再发一次“关闭”,也要留意会不会连带触发别的动作。
- 夜里不测试。 21:45 到次日 7:30,不开灯、不出声、不执行会改变状态的场景。这个时间是给调试设的,比日常提醒更严格。
- 密码由人自己输入。 AI 可以帮忙打开页面,登录这一步留给我。
- 路由器只读。 现有脚本只保留读取接口,也要求它不另写脚本绕过。只要它还握着管理权限,这就仍是一条操作约定,不能当作技术隔离。
- 把故障原因和改法记下来。 新会话未必带着上次的上下文,下次开工先读笔记,能少走一些弯路。
用了一阵的真实感受
Tailscale 确实好用。 没有公网 IP,也不用折腾端口映射和 DDNS,装上客户端就能从外面连回家。打通 IPv6 以后,手机在外面多数时候能直连,偶尔走中继也够用。现在出门看片、改配置、让 Muse 查家里,都靠它。
锐捷的 AC 加 AP 也确实好用。 做工扎实,Wi-Fi 7 跑得快,管理界面现代、专业,哪台 AP 带了几台设备、信号怎么样,一眼就能看清。不过没必要按官方价买,闲鱼上有代理商出货,都是全新的,便宜不少。
住着舒服,比多几个功能重要
这套系统里,有些功能是我特意没加的:摄像头认出人车不播,扫地机扫完不播,也不另做一套每天定时念天气的早报。家务提醒大多放在 07:30 到 22:30,回家问候有自己的时间段和判断条件。漏水则随时报警。时间表还会继续调,免得提醒本身变成麻烦。
最大的感慨还是 AI。以前不懂的、嫌复杂的、不敢动的,比如 IPv6 中继、带一串条件的自动化、抓包查电视为什么登不上,现在都能交给它,而且做得比我自己动手更细、更周全。但我也确实不像以前那样清楚每一行配置。所以备份要留着,改动要能查,实际效果还得自己验收。洗衣机报错状态、人在书房没开灯,这些问题都不是看一遍代码就能发现的。
现在我最满意的,是洗完衣服偶尔能被提醒一下,晚上有人睡觉时家里能安静下来。至于它还能多聪明,等这些小事先稳定做好再说。