跳到正文
Hacker News· skittleson·· 2 天前AI 评分22

智能家居设备应当断网也能用:一套本地优先的十年实践规则

Smart home devices should work without the internet

AI 导读

一位智能家居实践者提出核心规则:家中关键设备必须在不联网时照常运行,全部跑在自己拥有的硬件上——ESP 板上的 Tasmota、MQTT broker 和树莓派上的 Node-RED,Alexa 只作为备用入口。

正文 · AI 翻译

2026年10月4506 字23 分钟阅读Spencer Kittleson

下载音频

Scissors cutting an ethernet cable under the words No Internet, No Problem.
剪刀剪断网线,画面上写着“没有网络,也没问题”。

AI;DR:初稿由我撰写,AI 协助我编辑和改写,最后一遍由我完成。规则、配置和演讲内容都是我自己的。

TLDR;我家里没有任何核心设备依赖厂商的服务器。即使断网,房子也能照常运转。这大约十年来一直是第一条规则,我的其他规则也都是由此衍生出来的。本文先讲这些规则,然后逐页呈现我关于家庭自动化的两场演讲。

为什么选择本地

我的 Nest 集成一直能用,直到 Google 破坏了 API。这就是我现在会预先防范的故障。演讲中还提到了几个例子:一台 Samsung 冰箱在自己的屏幕上显示 TLS 证书错误,以及一个 Camp Chef 烤架控制器需要 Wi-Fi 才能显示温度。

所有重要的东西都运行在我自己拥有的硬件上。也就是 ESP 板上的 Tasmota、一个 MQTT broker,以及 Raspberry Pi 上的 Node-RED。我确实使用了一些云服务,主要是 Alexa 和几个 AWS 服务。Alexa 只是拨动开关的另一种方式。如果它宕机了,墙壁开关和墙面仪表盘仍然可用。

规则

来自第一场演讲,在第二场中重述:

  1. 没有网络,也没问题。核心功能必须在断网时也能工作。Alexa 可以是一种入口,但绝不能是唯一的入口。
  2. 在添加新方式时,不要移除旧方式。如果有人用胶带把墙壁开关粘住,好让智能灯泡保持通电,那说明我违反了这条规则。
  3. 保持灵活。房间的用途会变化,人员会进出,所以一切都必须能低成本地改动。
  4. 检查你的自动化。我曾经有四个定时触发器同时作用于同一个花园水泵。
  5. 例外必须是例外。我可以打破规则,但只能出于一个六个月后我仍然认同的理由。

五年后,随着家里住的人变多,又增加了:

  1. 云设备需要带有日志的 API,否则就不安装。我不想在家里放一个黑盒。
  2. 配置集中在一个地方,而不是分散在五个厂商的应用里。
  3. 多种入口:应用、Alexa、二维码或 NFC 标签。
  4. 如果我一直在重复同样的步骤,它们就会变成例行程序。
  5. 设备通过 MQTT 以发布/订阅方式通信,而不是点对点。
  6. 除非电池能撑一年以上,否则不用电池。没人想在凌晨两点更换门传感器电池。

我被问得最多的作品是Tasmota 洒水控制器。它出现在两场演讲中,车库门方案也是如此,后者运行的时间也差不多一样长。

第一场演讲:家庭自动化

Home Automation, for fun and convenience

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

Connected Everything collage of icons

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

Nest thermostat, Amazon smart plug, and Yale smart lock keypad

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

Privacy, Integration/Flexibility, and Cost triangle

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

A light switch taped on with a note reading Leave Switch On, This is BAD

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

Wemo Wi-Fi Light Switch retail box

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

No Internet, No Problem: scissors cutting an ethernet cable

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

Must Be Agile: sticky notes on a planning board

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

Node-RED flow for Garage Cool Off logic

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

Node-RED garage sensor flow feeding Grafana, plus an Opens counter and On Status chart

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

Node-RED scheduled injects feeding a Garden Water Pump node

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

Captain Jack Sparrow meme: The Rules, more of what you'd call guidelines than actual rules

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

Node-RED logo, a Phillips Hue IFTTT-style applet, and an Alexa routine editor

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

MQTT publish/subscribe diagram with a temperature sensor, broker, and two subscribers

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

Sonoff Mini Wi-Fi DIY smart switch and a Node-RED fireplace flow

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

Sprinkler controller wiring, a 3D PCB render, the Tasmota web UI, scheduled nodes, and a bare PCB layout

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

The Rules Guidelines Recap bullet list

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

Memorable Home Automations bullet list

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

Questions? Feedback!

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

第二场演讲:家庭自动化续集

Home Automation, The Sequel

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

Meme: When robots take over the world, Marvin the android saying he could calculate your chance of survival but you won't like it

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

Recap section divider

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

Connected Everything collage, reused from talk one

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

A printer-pickup note taped to a pole, a Samsung fridge showing a certificate warning, and a Camp Chef grill WiFi controller

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

The Rules bullet list recap

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

What has changed? That's why I'm here today

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

Einstein quote: We cannot solve our problems with the same thinking we used when we created them

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

Some of those problems: more foot traffic, more keys needed, longer absences, water flooding

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

Captain Jack Sparrow meme again: The Extended Rules, still guidelines

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

The Extended Rules bullet list

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

Examples section divider

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

A DIY motorized outdoor rig, a UV grow light over plant leaves, and a purple UV strip under cabinets

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

Sprinkler build collage, reused from talk one

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

A wall-mounted presence sensor, a robot vacuum on carpet, and an AirGradient air quality sensor kit with dashboard

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

Wall-mounted tablet dashboard next to a Nest thermostat set to 80

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

A large wall-mounted TV with warm backlighting glowing against the wall

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

A Schlage deadbolt with a physical key and a black touchscreen smart lock with multiple unlock methods

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

Hardware section divider

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

ESP32 D1 mini board, a dual-outlet smart plug, and a Raspberry Pi 4

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

A 100ft RGB LED strip kit, a tray of TO-220 power transistors, and relay modules with header pins

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

A resistor kit, a DIY wire and cable color kit, and an electrolytic capacitor kit

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

Software bullet list: NodeRed, Grafana, Tasmota, Telegram, Python, Javascript, Vendor specific Apps

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

Node-RED flow for the Garage tab with sensors, Tasmota topics, Telegram notifications, and light counters

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

Grafana dashboard grid with humidity, temp, dew point, pressure, gas, air quality, energy, opens, and on-status panels

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

UX section divider

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

Close-up of the wall dashboard status screen, a sheet of NFC tags with a QR code, and an Echo Dot

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

Tools section divider

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

A soldering iron and stand, a 3D printer mid-print, a digital multimeter, and a precision screwdriver kit

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

Questions? Feedback!

这就是两场演讲,相隔十多年。两者之间的规则几乎没有变化,而它们需要处理的问题清单却不断增长。

第三场演讲即将到来,这一次围绕智能体用例展开。当 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