智能家居设备应当断网也能用:一套本地优先的十年实践规则
Smart home devices should work without the internet
一位智能家居实践者提出核心规则:家中关键设备必须在不联网时照常运行,全部跑在自己拥有的硬件上——ESP 板上的 Tasmota、MQTT broker 和树莓派上的 Node-RED,Alexa 只作为备用入口。
2026年10月4506 字23 分钟阅读Spencer Kittleson

AI;DR:初稿由我撰写,AI 协助我编辑和改写,最后一遍由我完成。规则、配置和演讲内容都是我自己的。
TLDR;我家里没有任何核心设备依赖厂商的服务器。即使断网,房子也能照常运转。这大约十年来一直是第一条规则,我的其他规则也都是由此衍生出来的。本文先讲这些规则,然后逐页呈现我关于家庭自动化的两场演讲。
为什么选择本地
我的 Nest 集成一直能用,直到 Google 破坏了 API。这就是我现在会预先防范的故障。演讲中还提到了几个例子:一台 Samsung 冰箱在自己的屏幕上显示 TLS 证书错误,以及一个 Camp Chef 烤架控制器需要 Wi-Fi 才能显示温度。
所有重要的东西都运行在我自己拥有的硬件上。也就是 ESP 板上的 Tasmota、一个 MQTT broker,以及 Raspberry Pi 上的 Node-RED。我确实使用了一些云服务,主要是 Alexa 和几个 AWS 服务。Alexa 只是拨动开关的另一种方式。如果它宕机了,墙壁开关和墙面仪表盘仍然可用。
规则
来自第一场演讲,在第二场中重述:
- 没有网络,也没问题。核心功能必须在断网时也能工作。Alexa 可以是一种入口,但绝不能是唯一的入口。
- 在添加新方式时,不要移除旧方式。如果有人用胶带把墙壁开关粘住,好让智能灯泡保持通电,那说明我违反了这条规则。
- 保持灵活。房间的用途会变化,人员会进出,所以一切都必须能低成本地改动。
- 检查你的自动化。我曾经有四个定时触发器同时作用于同一个花园水泵。
- 例外必须是例外。我可以打破规则,但只能出于一个六个月后我仍然认同的理由。
五年后,随着家里住的人变多,又增加了:
- 云设备需要带有日志的 API,否则就不安装。我不想在家里放一个黑盒。
- 配置集中在一个地方,而不是分散在五个厂商的应用里。
- 多种入口:应用、Alexa、二维码或 NFC 标签。
- 如果我一直在重复同样的步骤,它们就会变成例行程序。
- 设备通过 MQTT 以发布/订阅方式通信,而不是点对点。
- 除非电池能撑一年以上,否则不用电池。没人想在凌晨两点更换门传感器电池。
我被问得最多的作品是Tasmota 洒水控制器。它出现在两场演讲中,车库门方案也是如此,后者运行的时间也差不多一样长。
第一场演讲:家庭自动化

没人需要这些东西。我做这些是因为我喜欢构建在后台运行的东西,而且每个自动化都是一个小谜题,解开时会有实实在在的回报。

这是整场演讲的背景。手机、笔记本电脑、平板电脑、恒温器和门锁都在与云通信,而当你需要它们时,这些云可能在线,也可能不在线。连接性没问题。只是在插上电源之前,要清楚自己选择了什么。

大多数人从这里开始:一个恒温器、一个插座和一把锁,这是个不错的起点。每个设备都自带应用和账户。

你添加的每个设备都会落在这个三角形上的某个位置。云摄像头便宜又方便,代价是隐私。我自己刷固件的开关需要更多设置时间,作为回报,我可以把它与任何东西集成。在把设备加入购物车之前,我会先弄清楚它落在哪里。

有人(经常是我)把灯做成自动化,然后不得不用胶带把墙壁开关粘住,好让智能灯泡一直通电。如果你曾走进一个房间,发现开关毫无反应,原因就在这里。

比粘开关更好的解决办法是装一个像这样的入墙式 Wi-Fi 开关。墙壁开关照常能用,同时我也得到了一个可以自动化的接入点。它安装起来比智能插座麻烦,但没人需要重新训练自己按开关的手感。

第一条,也是我不会妥协的一条:如果断网了,我的灯仍然能亮。

家庭自动化永远没有完成的时候。房间的用途会变,人会搬进搬出,新设备也会出现。你搭建的任何东西都必须改起来成本很低。

车库降温流程从手动触发开始,并检查门是否关闭。接着它会开门、等待、打开风扇,或者如果降温已经在运行就发送通知。这是一个很小的流程,却不止一次让车库免于被烤热。

门传感器和簧片开关都把数据上报到一个转换步骤,该步骤会设置一个全局 garage-closed 标志并记录到 Grafana。下面是几个真实日子的图表:21 次开门,尖峰显示了每次发生的时间。大多数人跳过这一部分,而正是这一部分能让我不用打开应用就知道自己是否忘了关车库门。

四个定时触发器都指向同一个水泵节点。很容易出现五个自动化争抢一个设备的情况。我时不时会看看这个流程,问自己它们放在一起是否仍然合理。

这些规则我全都违反过很多次。它们只是指导原则。

这里有三种表达“事件进,动作出”的方式。Node-RED 是我的主要工具。Alexa 例程和 IFTTT 风格的社区小程序则覆盖了我不想从零搭建的场景。

MQTT 让各个部件保持解耦。温度传感器只管发布,不在乎谁在监听。手机和后端系统可以同时订阅同一个主题,而传感器不需要任何额外逻辑。Tasmota 那篇文章里的喷淋控制器就是基于同样的模式。

Sonoff Mini 足够小,可以藏在壁炉现有的线路里。这个流程让仪表盘或 Alexa 都能触发它。它后来进入了“令人难忘的自动化”清单,因为一个能用语音打开的假火是个很好的派对把戏。

整个喷淋系统搭建可以放在一页幻灯片里:外壳中的继电器和 ESP 模块、3D 电路板渲染图、带 BME280 传感器读数的 Tasmota 界面、向水泵供料的 Node-RED 计划,以及最终的 PCB 布局。喷淋那篇文章有完整说明,包括我为什么选择 Tasmota 而不是自定义固件。

回顾幻灯片用五行概括了整个演讲。第一条(不要在移除旧方式的同时引入新方式)我比其他几条更粗心地违反过,而且每次都后悔。最后一条让前四条保持诚实。“我当时赶时间”不算例外情况。

精彩集锦:心率过低时会闪烁的灯、下雨前会跳过浇水的洒水器、手机出现但车不在时会打开的车库门、室内花园的灯光和水、空气质量传感器触发风扇、后院景观照明、在暖色和冷色之间切换的客厅 LED 灯带、基于用电量而非厂商应用触发的洗衣机和烘干机通知、3D 打印机状态灯、空调和供暖监控,以及一路拼凑起来的一堆 AWS 服务(Alexa、Polly、S3、IoT、Cognito)。Nest 集成得到了一段悼词:“直到 Google 弄坏了 API。”每个做家庭自动化的人最终都会写下这句话。

那是第一场演讲。后来“难忘的自动化”幻灯片上的几乎所有内容都出现了新的故障模式或被替换,这就是为什么会有续集。
第二场演讲:家庭自动化续集

两场演讲之间隔了足够长的时间,我有了另一份要讨论的问题清单。

更多设备意味着更多决策是在我不参与的情况下做出的。这有点令人不安,但基本无害。

首先,快速回顾一下第一场演讲涵盖的内容。

和之前同一张幻灯片,只是现在上面多了更多图标。

其他人也都在经历这些。冰箱的智能显示屏抛出 TLS 证书错误。烧烤控制器需要 Wi-Fi 才能告诉你温度。有人在电线杆上贴了张纸条,说一台联网打印机他们忘了登出。这些都是真实设备。

这些是第一场演讲中的必须和应该规则,措辞稍微更严格了一些。我重述它们是因为部分观众没看过第一场演讲。

规则没变。它们必须经受的条件变得更苛刻了。

我最初的很多设置都假设房子里只住一个人。当这不再成立时,我不得不把单用户系统修补成多用户系统,接下来几张幻灯片就是那个过程的样子。

更多人意味着更多走动和更多需要管理的实体钥匙。更长时间的离家让任何可能在无人察觉时失效的东西风险更高。一次水淹惊吓最终让我认真对待漏水检测和存在检测。

同样的笑话,新的规则集。第一批规则是在第一年之后制定的。这些是在第五年之后制定的。

这些是本文开头的第 6 到第 11 条规则。我是在房子从一个人变成几个人之后写下它们的。

接下来是具体搭建项目,这是任何演讲中我最喜欢的部分。

一个用于户外照明的电机加 PVC 管装置、一盏夹在室内植物上的 UV 植物生长灯,以及橱柜下方的 UV 灯带用于被动消毒。每一个都解决一个小而具体的问题,而家庭自动化的价值正体现在这里。

和第一场演讲同一张洒水器幻灯片。它回来了,因为它是少数几个从不需要重写的搭建项目之一。

一个放在餐边柜上的传感器、一个无需吩咐就能打扫地板的扫地机器人,以及一个我用 CO2 传感器、颗粒物传感器和微控制器组装的 AirGradient 套件,它有自己的小仪表盘。空气质量套件是这里所有东西中最让我安心的。

这个仪表盘取代了家里比任何其他东西都多的应用。它有一个车库门开关、一个侧门解锁、一个前门锁开关、所有灯开或关、亮度滑块、咖啡吧颜色选择器,以及客厅的暖到冷滑块。它全部运行在一个安装在恒温器旁边的便宜平板上,这样没人需要翻遍五个应用。

电视背后的氛围灯光被接入同一套自动化系统,而不是单独配一个遥控器。这是一个小改动,却能大幅提升生活品质。

智能锁源于前面几页幻灯片提到的“人越多、钥匙越多”的问题。较新的锁支持密码、App、钥匙卡或机械钥匙,因此家里的每个人都能用自己习惯的方式开门。

接下来几页是零件清单,供想自己动手搭建的人参考。

ESP32 D1 mini 负责所有自定义部分。智能插座是现成的捷径,适用于我不需要自定义的场景。Pi 4 运行 Node-RED 和 Grafana。

LED 灯带用于氛围照明,功率晶体管用于更高电流的负载,小型继电器模块让微控制器能安全地切换市电电压。

清单的其余部分:各种电阻、便于日后追踪电路的颜色编码导线,以及用于平滑和定时的电容套件。

Node-RED 负责流程逻辑,Grafana 让我看清全局。Tasmota 是我自己刷写的任何设备的固件,Telegram 负责发送通知,Python 或 JavaScript 则用来填补那些无法干净地放进流程里的胶水代码。

这是当前的 garage 流程。门传感器和簧片开关将数据送入转换节点,再进入 Grafana 和一个全局关闭状态。Toggle 节点直接发布到 Tasmota 命令主题。通知分叉到 Telegram 发送器和音频提示音,一个开灯计数器在午夜重置。顶部的编辑器标签页(Lights、Sensors、Garage、Sprinkler、NFC Tags、Door Lock Security)显示出,自从第一场演讲中的单一车库降温流程以来,规模增长了多少。

当我想知道一切是否正常时,就会查看这个仪表盘。一侧是湿度、温度、露点、气压和气体读数,另一侧是能耗、开门次数和开启状态历史。我做它是因为我厌倦了靠猜。

仪表盘和 Grafana 面板对我有用。家里的其他人只想要灯亮。

这是硬件上的“多种交互方式”规则。墙上的平板是给站在旁边的人用的。NFC 标签和二维码提供了轻触即触发的快捷方式,而 Echo Dot 则是给更愿意和房子说话的人用的。

最后一部分:我用来构建和调试上述所有内容的工具。

烙铁用于永久连接,3D 打印机用于制作买不到的外壳和支架,万用表用于排查故障,精密螺丝刀套装用于对付厂商不想让你打开的設備。

这就是两场演讲,相隔十多年。两者之间的规则几乎没有变化,而它们需要处理的问题清单却不断增长。
第三场演讲即将到来,这一次围绕智能体用例展开。当 AI 智能体成为拨动开关的那一方时,同样的规则依然适用,而且我预计还会出现一些新规则。
读者告诉我的
我在 LinkedIn 上分享了“没有互联网,没问题”这条规则,并询问大家在设备中发现的最无意义的互联网依赖是什么。几十个人回复了。一个 Hacker News 帖子又补充了更多。以下是反馈。
人人都有
大多数例子都是被 App、账户或服务器锁住的基本功能:
- 一台冰箱因为厂商手机 App 的 bug 而无法调节温度。
- 一台电视在断网时甚至无法切换输入源,另一台则必须先登录才能当作普通 HDMI 显示器使用。一位读者的旧智能电视应用已失效,但仍能作为普通电视使用——设备就该这样失效。
- 一个供暖系统,其应用在本地网络中无法使用。
- 一个厨房排风扇和一台洗碗机,即使你通过 Home Assistant 控制它们,也需要联网。
- 一个无法在隔离网络上设置的智能插座。
- 降噪耳机永远在搜索蓝牙设备,因此你无法直接开启降噪功能。
- 合成器和 MIDI 键盘首次使用或固件更新时需要云登录。
- 一个肉类温度计只能通过其应用工作,并在公司倒闭后停止工作。
那个肉类温度计最让我困扰。硬件比公司活得久,却还是不能用了。
读者补充的规则
- 离线优先,联网仅作附加功能。设备应能独立完成其主要工作。
- 将每个第三方依赖视为风险。API 会变化,因此要规划本地回退方案或明确的降级模式。一位移动开发者也是这么做的:核心操作离线或从缓存工作,只有附加功能才等待连接。
- 决定哪些功能必须离线可用。我的答案是开关设备、温度和安全控制,以及任何访客无需学习应用就必须使用的东西。正如一位读者所说,如果访客没有应用账户就无法打开某样东西或调节温度,那这个设计就是失败的。
- 对我前两条规则的更严格版本:所有核心功能在 Wi-Fi 或自动化服务器关闭时仍能工作,智能功能绝不能剥夺非智能功能。墙壁开关应直接控制灯光,并允许自动化翻转它。只向自动化发送请求的开关不合格。那位读者说我的洒水控制器也不符合这个标准。他们找到的唯一一款具有本地 API 且设备本身可完全控制的洒水控制器是 RainMachine,但它已经不存在了。
- 丢弃东西时要清理。先从你的账户中移除已连接的打印机。一个被遗弃的联网设备可能成为攻击者的 easy way in。
实用建议
- 使用本地协议。一位读者推荐使用 Zigbee 和 Z-Wave 而非 Wi-Fi,因为不需要云的开关往往年复一年表现一致。另一位读者使用 Zigbee 来连接那些没有互联网就无法设置的智能插座。
- 让 LLM 寻找固件。一位读者购买能完成任务的最便宜硬件,忽略抱怨应用的评论,并在到货后向 LLM 询问本地优先的自定义固件。这对他们的开关、恒温器、空气质量监测器、温度计和窗户风扇都有效。他们本会为开箱即本地的硬件多付约 2.5 倍的价格。
- 旧款 Nest 恒温器有出路。No Longer Evil 是适用于 Nest 第一代和第二代恒温器的开源固件。
- 智能电视可以被驯服。重置电视并永不将其连接到网络,输入问题就消失了。
- 远程访问是保持本地的代价。我在路由器上使用 Tailscale,并让各个设备不加入 tailnet。一位读者在 OpenWrt 上运行 OpenVPN,虽然有效但感觉笨重,现在正在尝试 Tailscale。
- 有一个空白需要填补。一位读者愿意为预构建的、开放的“兼容一切”的 Raspberry Pi 镜像(带 MQTT)付费。DietPi 和 OpenWrt 接近且占用空间小,但你需要一些理解才能上手。另一位想要一个随房子提供的枢纽,就像热水器或路由器。Home Assistant 销售的枢纽硬件接近这一点。
- 维修权是更大的斗争。读者们提到了维修权运动和像 FULU 基金会这样的组织,它们致力于阻止企业把你购买的东西锁在外面。
反方观点
联网确实有实际用途。联网的肉类温度计让你在牛排烹饪时观看比赛。同一位读者还遇到过烤箱在烹饪中途决定更新其软件的情况。一位读者指出了这一切背后的商业模式:企业宁愿卖给你服务,而不是产品。另一位读者预计,远离联网设备的转变将源于对韧性的担忧,而非消费者的抱怨,因为足够多的联网家庭会成为一个目标。还有一位读者完全跳过联网家电,只让电脑和手机保持在线。
我用过的设备
(本节包含亚马逊联盟链接。如果你通过它们购买,我可能会赚取少量佣金,而不会给你带来额外费用。)
这些是我家庭自动化搭建中的部件,按项目分组。
洒水控制器
| 设备 | 用途 | 购买 |
|---|---|---|
| HiLetgo ESP8266 NodeMCU 开发板(3 块装) | 运行 Tasmota 的 Wi-Fi 微控制器 | 亚马逊 |
| SSD1306 OLED 屏幕 | 洒水器状态的状态显示 | 亚马逊 |
| Inkbird SSR-40DA 固态继电器 | 切换 24 VAC 洒水阀 | 亚马逊 |
| BME280 传感器 | 温度、湿度和气压 | 亚马逊 |
| 24 VAC 电源 | 为洒水阀供电 | 亚马逊 |
灯、开关和插座
| 设备 | 用途 | 购买 |
|---|---|---|
| Martin Jerry 智能调光开关(预刷 Tasmota) | 开箱即运行 Tasmota 的墙壁灯开关 | 亚马逊 |
| Martin Jerry 湿度风扇开关 | 湿度太高时运行浴室风扇 | 亚马逊 |
| Sonoff S31 智能插座 | 有线调制解调器的电源看门狗 | 亚马逊 |
| 串口转 USB 适配器 | 将 ESP8266 连接到你的 PC 以刷写 Tasmota | 亚马逊 |
车库门
| 设备 | 用途 | 购买 |
|---|---|---|
| Raspberry Pi 3 | 运行 Docker 和 Web API | 亚马逊 |
| SunFounder 2 通道 5V 继电器模块 | 模拟按钮按下以切换门 | 亚马逊 |
| LiftMaster 有线控制面板(78LM,替代 41A5273-1) | 绕过防篡改接线 | 亚马逊 |
房屋周围
| 设备 | 用途 | 购买 |
|---|---|---|
| GL.iNet Flint 2 路由器(GL-MT6000) | 运行 OpenWrt 和本地 MQTT 代理 | 亚马逊 |
| 廉价平板电脑 | 挂在墙上作为仪表板 | 亚马逊 |
| Lefant 机器人吸尘器 | 清洁地板 | 亚马逊 |
来源:Hacker News · docodethatmatters.com