← 返回小小橘新闻
绝密 文件编号 FB-2026-1022 签发:堡垒工程局 · 技术普及处 归档日期:2026-10-22 阅读对象:末日堡垒控 / 极客 / 爱折腾的你
DOOMSDAY FORTRESS HOME · 自建指南

末日堡垒
智能家居

五百块加一个周末,把家改造成会自己思考、自动还击的堡垒。全开源、全本地、断网照常上班,而且每一个螺丝你都知道它为什么在那儿。

内核只有一句话:这套技术学会了,你想怎么玩都可以:从「人走灯灭」到「AI 替你种番茄」。
100% 开源 数据不出屋 ¥500 起 断网可用 6 张工程图
橘猫猫娘堡垒指挥官站在智能家居指挥中心
图:堡垒指挥官(本工程局在编吉祥物)检查全息作战界面
🐾 本喵手记 · 喵闻社 科技 · 自建 · 2026-10 约 1.5 万字 · 35 分钟

这篇讲一件挺朴素的事:怎么用开源硬件和开源软件,把一套普通住宅改造成「不用你操心」的自动化房子。它不用买任何一家的生态,不用连厂商的云,断网照常工作,整套下来五百块起步。本喵把它写成了末日堡垒的作战档案,因为这套系统的结构确实像:一个大脑、几条感知线、一群执行机构,加上一条只有自己摸得着的通信通道。

读完你能拿到三样东西:一张能照着搭的五层架构图、九个具体战区的选型与代码、一份不走弯路的预算与排期。每节末尾都有「翻车点」,那些是本喵和朋友真踩过的坑,不是从手册抄的。

SYS-00

堡垒作战拓扑

一座堡垒只需要一个大脑:Home Assistant。它把所有子系统聚到一张地图上,谁触发、谁行动,全由它调度。下面这张拓扑,就是全文的地图。 你可以先只看这一张,再决定要哪个战区。

FORTRESS TOPOLOGY中央智脑 = Home Assistant设备层 = ESP32 军团AI 层 = 本地模型
CORE中央智脑 · Home Assistant指挥一切
自动化引擎如果…就…,本地的规则调度
仪表盘手机 / 平板 / 墙上屏都能指挥
生命探测 · LD2410感知屋内有人没人、是动是静,一清二楚
阳光作战 · 智能窗帘执行按光照和作息自动开合,出门在外也演「屋里有人」
照明军需 · 智能插座执行护眼灯、氛围灯、桌面设备,按条件自动开关
边境防线 · Frigate安防摄像头画面本地识别,认得出「人」,误报率大降
防空激光 · 光子近防炮整活开源光篱,机器视觉 + 低功率激光,专打蚊虫
后勤保障 · 宠物补给线宠物自动喂食 + 摄像头监控,出差一周猫也饿不着
农业前线 · AI 种植进阶开源农业机器人,自动浇水,视觉识别成熟
AI 参谋部 · 语音交互本地 Whisper + Piper,断网也能喊
LINK绝密通信网 · Tailscale远程
不开公网端口人在公司,家先开空调;不给黑客留一扇门
SYS-01

五层架构:一座堡垒是怎么立起来的

说白了分成五层。这个分法不是为了好看,是为了排查故障:任何一次「灯没开」,你都能在五层里定位到唯一一层是坏的。分层错了,排障就会变成瞎猜。

LAYER MODEL · 五层自下而上:底座 → 感知 → 传输 → 决策 → 接入
L4接入层 · 你怎么跟房子说话失效表现:手机连不上,但灯照常工作
HA 官方 AppiOS / Android主力控制端,推送 + 定位
TailscaleWireGuard外出时唯一的入口,不开端口
语音盒子ESP32-S3断网也能喊,走本地 STT
墙上平板旧 iPad常亮仪表盘,比开关好用
L3决策层 · 堡垒唯一的脑子失效表现:全屋变砖,开关只能手动
HA Core8123状态机 + 集成 + 界面
自动化引擎trigger/cond/action所有「如果…就…」
Mosquitto1883 / 8883设备消息总线
RecorderSQLite / PG历史数据,排障靠它
依赖:一颗稳定的 CPU + 一块不会满的盘典型宿主:二手迷你主机 / NAS / 旧笔记本
L2传输层 · 消息怎么走失效表现:单个设备失联,其余正常
WiFi 2.4GHzESP32 全家带宽够、功耗高、节点多了挤
MQTTpub/sub轻量、离线消息、生态最广
Zigbee / Thread2.4GHz mesh电池传感器首选,需要网关
RTSP / ONVIF摄像头视频流进来给 Frigate
L1感知执行层 · 堡垒的手和眼失效表现:一个房间失能,别的房间不受影响
存在雷达LD2410 / LD2450人在不在,比红外准
环境传感温湿度 / 光照SHT30、BH1750
执行器继电器 / 舵机 / 灯带插座、窗帘、喂食器
摄像头RTSP安防主力,也是隐私主战场
L0底座 · 最不性感但最不能省的一层失效表现:一切正常,直到停电那一刻
供电5V 2A 起ESP32 掉线八成是供电
网络独立 IoT SSID设备别和主网混在一起
存储SSD数据库写爆 SD 卡是常见死法
备份每日快照配置丢了等于重建一座堡垒
读法:故障自下而上排查。 先看电,再看网,再看消息,最后才怀疑自动化写错了
本喵批注
本喵第一次搭的时候跳过 L0,直接把 HA 装在一块树莓派的 SD 卡上。三个月后数据库把卡写坏,全屋自动化一起罢工,而本喵人在外地。后来换成二手迷你主机加一块 SSD,成本反而不比一块好卡贵。这一层是省不掉的。

为什么是这五层,不是四层也不是六层

划层的唯一标准是故障域。同一层里的组件一起坏、一起换,跨层之间的依赖尽量单向。你把这五层记住,排障就有顺序:灯不开,先量 5V(L0),再 ping 设备(L2),再翻 HA 日志里有没有那条 MQTT 消息(L2→L3),最后才去改自动化(L3)。本喵见过的大部分「智能家居不靠谱」,都是拿 L3 的问题去改 L1 的代码,改三个月也改不好。

5 层
故障域划分,一层一个排查方向
1 个脑子
决策只在一处,不做分布式共识
2 条腿
WiFi 管带宽,Zigbee 管省电
0 台云
断网可用,这是设计目标不是副作用
SYS-02

一次「人走灯灭」的完整旅程

「灯自己关了」在你看来是一瞬间的事。在那瞬间里,信号其实走了六站。把这六站走一遍,你就知道延迟出在哪、掉线掉在哪、以及为什么有人家的自动化总是慢半拍。

DATA PATH · 六站总延迟目标:< 1.5 秒(含 60 秒防抖则另算)
01 SENSE
毫米波雷达
LD2410 每 100ms 扫一次,判「有人 / 无人 / 移动 / 静止」
≈ 100–400ms
▶
02 MCU
ESP32 固件
UART 读到门限值,转成 ESPHome 实体状态,防抖后变更
≈ 20–80ms
▶
03 LINK
WiFi 上行
2.4GHz 单跳,走 ESPHome 原生 API 加密通道,长连接不重连
≈ 5–40ms
▶
04 JUDGE
HA 状态机
状态变更触发自动化,条件判断,执行动作队列
≈ 10–50ms
▶
05 ACT
执行指令回传
继电器 / 智能灯收到指令,动作完成
≈ 30–200ms
▶
06 DEBOUNCE
防抖窗口
for: 00:01:00:无人持续 60 秒才动手,防误杀
+60s(人为设定)
延迟账读法:真正的技术延迟全部加起来不到 1 秒。你觉得「智能家居反应慢」,九成是防抖窗口给太长,或者设备 WiFi 在做重连(每次 1–5 秒)。

这六站在代码里长什么样

前两站在固件里(ESPHome 的 YAML),第三到五站在 HA 的自动化里。这两份 YAML 就是整座堡垒最核心的两张纸,看懂它们,其余的只是换传感器、换执行器。

固件侧 · ESPHome 把雷达变成「实体」
esphome:
  name: presence-living
  platform: esp32
  board: esp32dev

# 有线优先:能插网线的地方就别用 WiFi(延迟低一个数量级,还不掉线)
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  power_save_mode: none        # 关键:关掉省电,否则响应有 100-300ms 抖动

api:
  encryption:
    key: !secret esphome_key        # 必须开:不加密的 API 等于局域网内的公开后门
  reboot_timeout: 0s           # 关掉「连不上就重启」,避免夜间反复重启

ota:
  password: !secret ota_pass

logger:
  level: INFO
  logs:
    ld2410: WARN               # 这个组件日志很吵,压掉

uart:
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 115200

ld2410:
  timeout: 150ms

binary_sensor:
  - platform: ld2410
    has_target:
      name: "客厅有人"
      filters:
        - delayed_off: 3s      # 固件层先做 3 秒防抖,别把抖动全丢给 HA
    moving_target:
      name: "有人移动"
    still_target:
      name: "有人静止"

sensor:
  - platform: ld2410
    moving_distance:
      name: "移动距离"
决策侧 · HA 自动化(trigger / condition / action 三段)
alias: 人走灯灭-客厅
id: living_light_auto_off
triggers:
  - trigger: state
    entity_id: binary_sensor.ke_ting_you_ren
    to: "off"
    for: "00:01:00"                      # 无人满 60 秒才算「真走」
conditions:
  - condition: state
    entity_id: input_boolean.ke_ting_zi_dong_hua
    state: "on"                          # 有个总开关,调试时一键停
  - condition: numeric_state
    entity_id: sensor.ke_ting_guang_zhao
    below: 200                           # 白天屋里够亮就别开灯
actions:
  - action: light.turn_off
    target:
      entity_id: light.ke_ting
mode: restart                            # 关键:新触发进来就重排,不排队堆积
max_exceeded: silent

四个 mode,选错就是灾难

很多人写自动化只写 trigger 和 action,然后遇到「灯闪两下」「指令排队三分钟才执行」。问题几乎都在 mode 上。HA 给你四种语义,选错了行为完全不同:

mode新触发进来时适合坑
single(默认)直接忽略,丢掉这次触发开关灯这类幂等动作连按两次第二次没反应,你以为坏了
restart中止正在跑的,重新开始人走灯灭、超时类带 delay 的动作会被反复打断,永远跑不完
queued排队,一个个跑完喂食、卷帘这类必须顺序执行触发密集时队列堆积,五分钟才轮到
parallel同时并发跑多个设备各自独立动作写共享资源会互相踩,需要自己加锁
最常见的翻车:一条自动化里既有 for: 60s 又有 delay: 60s。前者是触发条件,后者是动作等待,两者语义完全不同,写混了会得到「人一直在屋里,灯却关了」。人走灯灭这类,用 for 不要用 delay:delay 一旦被新触发打断就永远不执行,而 for 是引擎层判定的。

MQTT 主题怎么命名(设备多了你就知道这一步多重要)

不走 ESPHome 原生 API、而是走 MQTT 的设备(Tasmota 插座、老设备、自己写的脚本)会直接暴露主题树。命名一旦随意,三个月后你自己都看不懂谁是谁:

推荐结构 · 位置/房间/设备/方向
home/living/temp_sensor/state          # 设备上报状态(传感器 → 中枢)
home/living/temp_sensor/availability   # 在线状态,retain=true
home/living/desk_plug/set             # 下达指令(中枢 → 设备)
home/living/desk_plug/state           # 指令执行结果回读(必须回读!)

# 三条硬规矩
# 1. 一级按物理位置,不按设备型号:找设备时人是按房间找的
# 2. 每条指令必须有对应的 state 主题:没有回读的指令等于盲发
# 3. availability 主题必须 retain: true,否则重启后中枢不知道设备在不在
Mosquitto 最小加固配置
# mosquitto.conf
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwd

# 如果设备不支持 TLS,至少做到「匿名禁用 + 独立账号 + 网段隔离」
# 千万别图省事留 allow_anonymous true:同网段任何设备都能监听你家所有状态

persistence true
persistence_location /mosquitto/data/
log_dest stdout
log_type warning
log_type error
本喵批注
这张六站图最有用的时候不是搭建,是出事以后。灯不亮,本喵现在会按顺序问六个问题:雷达有反应吗?固件状态翻了吗?WiFi 断过吗?HA 里实体状态对吗?指令发出去了吗?防抖窗口过了吗?六问下去,三分钟定位。以前是直接去改 YAML,改一晚上。
SYS-03

协议选型:为什么主力是 WiFi + ESPHome

新手最容易被劝去上 Zigbee,然后发现自己买了一堆网关、一堆电池、还有一堆互不兼容的固件。协议没有好坏,只有「你这台设备装在哪儿、多久换一次电、要不要传视频」。这张表按这四个问题排。

协议供电典型延迟单网规模断网可用更适合
WiFi 2.4G
ESPHome / Tasmota
必须常电5–50ms20–40 台
再多要规划 AP
完全可用插座、灯带、雷达、语音盒子、摄像头
Zigbee
Z2M + 协调器
纽扣电池可撑 1–2 年50–200ms100+ 台
靠路由节点扩展
本地网关即可门磁、温湿度、人体感应、按钮
Thread / Matter
新一代标准
电池友好50–200ms100+ 台需 Border Router未来新购设备,现阶段别为它多花钱
蓝牙 BLE极省电100ms–2s7–20 台需中继温湿度计、体重秤这种「读一次就够」
433 / 315MHz遥控器电池数年100–300ms无组网概念可用窗帘电机、老遥控设备「劫持」改造
有线 RJ45 / PoEPoE 一根线搞定<5ms不受限最稳中枢本体、每个房间的骨干节点、摄像头

三条决策规则,比表格好用

规则一:有电源的地方,优先 WiFi 有线优先
插座、灯、窗帘、摄像头这些本来就插着电的东西,用 WiFi 直连最省事:不用网关、不用配网、断了 WiFi 也好排查。能拉网线的地方(中枢、走廊骨干、摄像头)直接上 PoE,一根线解决供电和通信,稳定性比任何无线都高一个档次。
判据:设备附近有没有插座 / 网口
规则二:靠电池活的东西,一律 Zigbee 或 Thread
门磁、温湿度、人体感应装在门框和墙角,没有电源。WiFi 的待机电流会让一节纽扣电池两周见底,Zigbee 能撑一两年。这一条没有替代方案,别试图用 ESP32 深睡眠硬扛:醒来连 WiFi 那几秒就够耗掉省下的电。
判据:这个设备一年内你愿不愿意去换电池
规则三:不为了「未来标准」多花今天的钱
Matter 和 Thread 是方向,但 2026 年的现实是:便宜的 Matter 设备少、调试工具不成熟、各家实现细节还在打架。等你要买的那类设备在 Matter 下真的便宜且好评再上,不要为了「准备好」先买一个用不上的 Border Router。协议可以换,墙里的线换不了。所以钱花在布线上,别花在协议上。
判据:同类设备在 Matter 下是否已比 Zigbee 便宜
本喵批注
本喵的第一套是纯 WiFi,第二套加了 Zigbee,现在两套并存。结论是:WiFi 负责「有电的大件」,Zigbee 负责「没电的小件」,两者用一个 HA 统一收编,界面上一模一样。真正让人烦的从来不是协议不同,而是同一类设备买了三个牌子:那才是要治的病。

一张选型图,看完就不用记表了

Q1
这台设备有常电吗?
├─ 有 ────────────────┐    ┌──────────── 没有
有常电→ WiFi
插座灯带雷达窗帘电机语音盒子
再问:附近有网口吗?
有 → 走 PoE / 有线(优先)
没有 → WiFi 2.4G 独立 SSID
没有常电→ Zigbee
门磁温湿度人体感应无线按钮
再问:需要传视频或大文件吗?
需要 → 这类设备就不该用电池
不需要 → Zigbee / Thread 均可
要传视频→ 有线优先
摄像头NVR中枢本体
判据:码率。1080p 稳定 2Mbps 以上,
WiFi 上两路就够把 2.4G 挤满
UNITS

九大战区档案

每份档案按同一规格记录:代号、真实方案、造价、段子,并盖一枚「真实度」徽章:绿色是真能打,琥珀是半真半演,红色是纯整活。方案全部来自 GitHub 开源项目,细节可查可抄。每个战区下面都有「实现要点」和「翻车点」,那是真正花钱买来的部分。

9 个战区
从「人走灯灭」到「AI 种番茄」
7 个能打
今天就能装、装完就能用
2 个整活
主要产出是视频素材和邻居的困惑
¥500 起
第一个战区做完就回本
UNIT-00

中央智脑

代号:天网雏形 真能打

整套堡垒只有一个大脑:Home Assistant(GitHub: home-assistant/core)。它把所有战区聚成一张地图,自动化引擎负责「如果…就…」,仪表盘让你在手机上指挥一切。

别的智能家居要连厂商的云,它自己就是云。断网、断电、厂商倒闭:堡垒照常运转,这才是末日该有的样子。

但装法有四种,选错会把自己埋进坑里。搞清楚这四种的区别,比看十篇教程有用:

造价¥0(用现成设备)
难度低:装完就能用
扩展性数千种集成,越玩越大
内存门槛2GB 起,4GB 舒服
选型逻辑:它是全屋唯一会「思考」的进程,后续所有战区都挂在它下面,所以这一层选社区最活跃、更新最勤的开源项目,一步到位。
装法是什么适合谁代价
HAOS完整操作系统,烧盘即用只想用不想折腾独占一台机器,不能跑别的服务
Docker官方镜像,跑在现有系统上已有 NAS / 迷你主机没有 Add-on 商店,要自己装插件
SupervisedDocker + 官方管理面板想要 Add-on 又不想独占机器对系统侵入深,升级容易翻车
Core纯 Python 包开发者 / 要改源码所有依赖自己管
四种装法里最容易被推荐、也最容易翻车的是 Supervised:它要求系统极度干净(不装别的 Docker 容器、不改系统 Python),一旦你不小心 apt install 了冲突包,它就会标记「不受支持」,然后某次升级直接罢工。想省心就 HAOS,想复用机器就 Docker,别挑战中间态。
部署实操 · Docker 一条命令起中枢
# 注释单独一行:命令尾部的 # 会被 shell 当成参数,不是注释
docker run -d --name homeassistant \
  --privileged --restart=unless-stopped \
  -v /path/to/config:/config \
  -v /etc/localtime:/etc/localtime:ro \
  -p 8123:8123 \
  ghcr.io/home-assistant/home-assistant:stable

为什么不用 --net=host:家用场景里它会和宿主机端口打架(尤其 NAS 上已经跑了一堆服务)。桥接模式加 -p 就够,只有需要自动发现大量设备(mDNS/SSDP)时才考虑 host 网络。

config 目录长什么样(备份就备份这个目录)
/config
├── configuration.yaml      # 主配置,越薄越好
├── automations.yaml        # 自动化(UI 里建的也在这)
├── scripts.yaml            # 可复用动作序列
├── scenes.yaml             # 场景快照
├── secrets.yaml            # 密码/token 全放这,别写进主配置
├── customize.yaml          # 实体别名、图标
├── .storage/               # 集成凭据与注册表(关键,别手动改)
├── www/                    # 静态文件,对外暴露为 /local/
└── home-assistant_v2.db    # 历史数据库(会一直长)
改完配置之后:一次改动要走完这五步
CONFIG LIFECYCLE不用重启整机,重载对应域即可
01 EDIT
改 YAML
编辑器或 UI 改配置,改前先 git 提交一次
—
▶
02 CHECK
检查配置
开发者工具 → YAML → 检查配置,语法错在这一步拦住
≈ 1–3s
▶
03 RELOAD
重载域
只重载「自动化 / 脚本 / 模板」这些域,不重启整机
≈ 1–2s
▶
04 VERIFY
验证行为
手动触发一次,看实体状态与日志是否如预期
—
▶
05 ROLLBACK
不行就回滚
git diff 看出改了什么,revert 回去再重载
比排查快十倍
很多人卡在这一步:改了 YAML 发现没生效,于是重启整机 —— 重启能解决一切,也能掩盖一切。先按这五步走,八成不用重启。真正需要重启的只有:装新集成、改 configuration.yaml 里核心段、升级版本。
configuration.yaml · 一个不会失控的最小骨架
default_config:            # 官方推荐的基础包,别一个个手加集成

homeassistant:
  name: 堡垒
  time_zone: Asia/Shanghai
  unit_system: metric
  currency: CNY

recorder:                  # 不做限制的话,SQLite 半年能涨到几个 G
  purge_keep_days: 10
  exclude:
    entity_globs:
      - sensor.*_linkquality      # Zigbee 信号强度,每秒变,纯噪音
      - sensor.*_rssi
      - sensor.phone_*_battery    # 手机电量不需要历史

logger:
  default: warning
  logs:
    homeassistant.components.mqtt: info
STEP
  1. 浏览器打开 http://主机IP:8123,完成创建账户向导
  2. 手机装官方 App(iOS / Android 搜 Home Assistant),扫码绑定
  3. 先把 recorder 的排除项写好,再接设备。 顺序反了数据库会被噪音喂胖
  4. 设置里开「每日自动备份」,备份文件挪到另一块盘或 NAS(同盘备份等于没备份)
三种死法,按发生频率排:①SD 卡写坏(树莓派跑数据库,3–6 个月)②数据库写满盘(没配 recorder 排除项)③升级大版本没读 breaking changes(集成被改名,实体全变 unavailable)。对策:SSD + 排除项 + 升级前看 release notes 的「Breaking Changes」一节,只花五分钟。
UNIT-01

生命探测

代号:生命体征雷达 真能打

「人走灯灭」的关键传感器:LD2410 毫米波雷达(24GHz),配一块 ESP32 开发板,刷 ESPHome 固件(GitHub: esphome/esphome),几分钟变成一台「存在探测器」。

普通红外 PIR 只认「在动的东西」:你坐在电竞椅上打游戏,它以为你已经凉了,啪地把灯关了。毫米波雷达连你细微的呼吸起伏都数得清,人没走,灯绝不灭。

这一区是全屋自动化的感知底座,也是最容易买错的一区。三个常见型号差在哪:

造价¥90 / 房间
难度中:焊 4 根线 + 刷固件
核心能力静止人体识别(PIR 做不到)
耗电0.5–1W,可忽略
这是全屋自动化里「感知层」的定海神针,建议第一块板就做它。成本最低、成就感最高。
型号价格能测什么接线适合
HC-SR501(PIR)¥5只认移动1 根信号线走廊、楼梯(路过即亮)
LD2410¥25–40有人/无人 + 移动/静止 + 距离UART 4 线客厅、卧室、书房(主力)
LD2450¥60–90上面全部 + 多人定位坐标UART 4 线需要「谁在哪」的场景,如分区空调
接线 · LD2410 ↔ ESP32(4 根线)
LD2410ESP32说明
VCC5V / VIN必须 5V,3.3V 供电会随机抽风
GNDGND共地
OUT(雷达 TX)GPIO16板子 RX2
IN(雷达 RX)GPIO17板子 TX2
固件配置见 SYS-02(同一份 presence.yaml)· 这里是灵敏度调优
ld2410:
  timeout: 150ms

# 门限值:每个距离门(gate)单独设「移动/静止」的触发阈值
# 默认全 50 太灵敏:隔壁房间走动都会触发
# 调法:先全设 100,站在房间中央慢慢往下降,直到稳定触发
number:
  - platform: ld2410
    moving_sensitivity:
      name: "移动灵敏度"
    still_sensitivity:
      name: "静止灵敏度"

button:
  - platform: ld2410
    factory_reset:
      name: "恢复出厂"

select:
  - platform: ld2410
    distance_resolution:
      name: "距离分辨率"       # 0.2m 或 0.75m,精度和抗干扰的取舍
STEP · 一次调对
  1. 先装在天花板或高处、朝下 15–30 度,别正对人坐的位置(正对会因呼吸幅度小反而漏检)
  2. 串口日志看 has_target 随人进出翻转,翻转干脆才算装对位置
  3. 人静坐 10 分钟,看 still_target 是否一直为 on;中途掉过一次就调静止灵敏度
  4. 最后才写 HA 自动化,防抖窗口给 for: 60s 起
三个高频翻车:①5V 供电不足:用电脑 USB 口或劣质充电头,表现为随机掉线,日志里反复重连;②天线前贴了金属(吊顶龙骨、金属灯罩),探测距离直接砍半;③两个雷达对射:对面房间的雷达会互相干扰,同一空间别装两台同频。
UNIT-02

阳光作战

代号:光学屏障 真能打

两条路线,任选其一:DIY 改装:ESP32 + 步进电机(轻帘用 28BYJ-48,重帘用 NEMA17 + TMC2209 驱动)直接拽窗帘,ESPHome 原生暴露成「窗帘」实体;成品改造:买 RF433 管状电机窗帘,用 ESP32 + CC1101 模块劫持遥控信号,一个板子控制全屋窗帘。

天亮自动开闸放光,中午自动遮阳,人不在家窗帘照常上下班:小偷在楼下看三天,以为这家人作息极其规律,果断换一家。

两条路真实体验的差别不在效果,在时间成本:成品劫持十五分钟搞定,DIY 要一个周末,还要跟限位开关搏斗。

造价¥120–300 / 窗
难度中:需要一点机械改造
两方案DIY 步进电机 / RF433 劫持
联动光照 + 作息 + 离家模式
推荐先买成品管状电机走 RF433 劫持路线,十五分钟搞定,再谈 DIY 乐趣。
路线成本/窗耗时难点可靠性
RF433 劫持
成品管状电机
¥180–30015 分钟抓准遥控编码,一次抓不到就多试高(原厂机械)
步进电机压带
贴在原有拉绳上
¥120–1801 天行程标定、限位、机械打滑中(会打滑)
自己造滑轨¥200+2–3 天同轴度、噪声、卡死低(除非你懂机械)
ESPHome 配置 · 步进电机窗帘(cover 实体)
stepper:
  - platform: a4988
    id: curtain
    step_pin: GPIO14
    dir_pin: GPIO27
    max_speed: 250 steps/s
    acceleration: 100 steps/s^2

# 限位开关:没有它们,断电后位置就全乱了(重开机它会继续往前顶)
binary_sensor:
  - platform: gpio
    pin: {number: GPIO32, mode: INPUT_PULLUP}
    id: limit_open
    filters: [invert]
  - platform: gpio
    pin: {number: GPIO33, mode: INPUT_PULLUP}
    id: limit_close
    filters: [invert]

cover:
  - platform: template
    name: "客厅窗帘"
    lambda: |-
      if (id(limit_open).state) return COVER_OPEN;
      if (id(limit_close).state) return COVER_CLOSED;
      return {};
    open_action:
      - stepper.set_target: {id: curtain, target: 0}
    close_action:
      - stepper.set_target: {id: curtain, target: 2000}
    stop_action:
      - stepper.set_target:
          id: curtain
          target: !lambda "return id(curtain).current_position;"
    optimistic: true
    assumed_state: false
STEP · 标定行程(这步不做,后面全是玄学)
  1. 先手动把窗帘拉到全开,装限位开关,读一次 current_position,记作 0
  2. 手动拉到全关,再读一次,得到总行程(上面代码里的 2000 就是这里来的)
  3. 把总行程写进 target,然后断电重启一次,验证它能自己找回位置
  4. 成品管状电机走 RF433:ESP32 + CC1101 用 remote_transmitter 录码重发,先抓「开/停/关」三个键
两条硬坑:①没有限位开关前千万别断电重试:步进电机会闷转,驱动芯片发热到烫手,然后永久损坏;②步进电机必须 12V 独立供电,从 ESP32 的 5V 取电会带不动,表现为「走一半停住 + 板子重启」。RF433 那条路的坑是编码格式:杜亚、AM43、Somfy 三家编码都不同,买之前先确认有现成解码方案,别赌。
UNIT-03

照明军需库

代号:护眼神盾 真能打

把普通插座升级成「智能插座」:两个办法。买涂鸦系插座刷 Tasmota / ESPHome 固件(GitHub: arendst/Tasmota),或直接 ESP32 + 继电器模块自焊一个。再接一颗 BH1750 光照传感器。

「护眼模式」全自动:环境变暗 → 自动开灯 → 色温调暖;打游戏到半夜,灯自己知道该开多亮,你的眼睛终于有人管了。

这一区看着最简单,其实藏着全屋最多的电气安全问题。插座背后是 220V,接错的代价不是灯不亮,是烧房子。

造价¥30–60 / 插座
难度低:刷机即用 / 焊线也行
核心光照联动 + 场景化供电
安全继电器容量必须大于负载
电竞房灯带(WS2812)+ 智能插座组合,是「灯光军团」的主力装备,氛围感拉满。
做法成本电气安全适合不建议
买成品刷机
Tasmota/ESPHome 兼容
¥30–60原厂认证,最稳插在墙上的所有大功率设备—
ESP32 + 继电器模块
自装在插座盒里
¥15–25看你的手艺低压、弱电、DIY 展示大功率、长期无人值守
只做灯带 / 低压
5V/12V 供电
¥20–40隔离电源即可氛围灯、桌面灯—
ESPHome 配置 · 继电器插座 + WS2812 灯带
switch:
  - platform: gpio
    pin:
      number: GPIO25
      inverted: true          # 大多数继电器模块是低电平触发,写在这里比接线时反接好
    id: desk_plug
    name: "书桌插座"
    restore_mode: RESTORE_DEFAULT_OFF   # 断电恢复后默认关闭,别让电烙铁自己开工

light:
  - platform: esp32_rmt_led_strip
    pin: GPIO26
    num_leds: 60
    rgb_order: GRB
    chipset: ws2812
    name: "电竞房灯带"
    restore_mode: ALWAYS_ON
    effects:
      - pulse:
      - random:
HA 自动化 · 护眼模式(BH1750 光照联动)
alias: 护眼-傍晚自动开灯
triggers:
  - trigger: numeric_state
    entity_id: sensor.guang_zhao     # BH1750 光照 lux
    below: 100
    for: "00:02:00"                  # 云飘过、有人走过都会让 lux 抖一下
conditions:
  - condition: sun
    after: sunset
    before: sunrise
actions:
  - action: light.turn_on
    target: {entity_id: light.dian_jing_fang_deng_dai}
    data:
      brightness_pct: 70
      color_temp_kelvin: 3200        # 新版参数用 kelvin,老的 color_temp 已不建议
mode: single
三个必须记住的电气常识:①继电器标称 10A 是阻性负载,带电机、LED 驱动这种感性负载要打对折,油汀、电暖器必须 16A 以上的成品插座;②WS2812 每米约 18W(60 灯全白),超过 1 米必须从电源端补电,否则尾端发黄发暗;③自己接 220V 的插座盒,线径不能小于 1.5mm²,接头必须压接或焊死,不许只拧一圈胶布了事。
UNIT-04

边境防线

代号:AI 哨兵 真能打

安防核心:Frigate(GitHub: blakeblackshear/frigate):本地 AI 目标检测 NVR,摄像头画面全程不出屋,识别「人 / 车 / 动物」再决定报不报警。配门磁传感器(几块钱的干簧管 + ESP32)监控门窗状态。

它不看云、不交月费,靠你机器的显卡或核显干活:认出「人形」才拉警报,风吹草动不误报。小偷撬门?报警推送 + 全屋灯光闪瞎他 + 摄像头取证,一条龙。

进阶:结合存在雷达做「离家布防 / 在家撤防」自动切换:你出门,系统自动进入警戒;你回来,它自己安静下来。

造价¥200–500
难度中:Docker 部署 + 配置
隐私100% 本地,画面不上云
加速Intel 核显 / Hailo-8 / NPU
Frigate 是「安防」这个维度唯一值得折腾的开源答案,0.17 以后 Intel 核显(OpenVINO)是新人最省钱的加速路线。

从摄像头到你的手机,中间走了七步

这一张是全文信息密度最高的链路。看懂它,你才知道「为什么我的 Frigate 帧率只有 2fps」「为什么它认不出人」到底该改哪一段。

① RTSP 拉流
摄像头必须支持 RTSP/ONVIF。走有线或 5GHz,别用 2.4G。 1080p 两路就能把 2.4G 挤满,画面上会出现马赛克或干脆断流。
rtsp://user:pass@192.168.1.64:554/stream1
② ffmpeg 解码
Frigate 内部用 ffmpeg 把 H.264/H.265 解成帧。这一步吃 CPU,能硬解(核显 QSV / VAAPI)就别软解,否则一台普通小主机光解码就满载。
hwaccel_args: preset-intel-qsv-h264
③ 抽帧(关键参数)
检测不是每帧都跑,默认 5fps。人走过画面大约 2 秒,5fps 能抓到 8–10 帧,够识别。提到 10fps 只多耗算力,误检率不会明显降。
detect.fps: 5(默认,别乱加)
④ 缩放 + 检测
先缩到检测分辨率(如 640×640)再送模型。这一步最容易配错:检测分辨率不是越高越好,640 对「人」这种大目标是甜点,1280 只是把算力翻四倍。
detect.width/height: 640×640
⑤ 追踪(tracker)
把逐帧的框串成「同一个目标」,才有「有人在院子停留 30 秒」这种事件。区域(zones)、停留时长、进出方向都在这一层判定。
zones: yard / door; objects.filters.person.min_area
⑥ MQTT 事件
识别结果以 JSON 发到 MQTT,HA 订阅到就变成自动化触发器。这一步不通,你会看到画面上有框、但手机收不到任何通知。
frigate/events · frigate/<camera>/person
⑦ 动作
推送 / 录像片段 / 开灯 / 语音喊话。建议把「通知」和「动作」分开写两条自动化:通知吵人,动作不该被通知的失败拖累。
notify.mobile_app → light.flash → media_player.play
加速方案成本1080p 可跑路数功耗适合
纯 CPU
i3/i5 老机器
¥01–2 路(很吃力)15–35W先验证功能,别长期跑
Intel 核显 OpenVINO
7 代以后带核显
¥0(现成机器)4–8 路10–25W性价比最高,首选
Google Coral USB¥400–7006–10 路2W(加速器本身)没有核显的机器加装,但供货不稳
Hailo-8 / Hailo-8L¥600–120010+ 路2.5W多路专业方案,社区支持还在长
docker-compose.yml · Frigate(Intel 核显加速)
services:
  frigate:
    image: ghcr.io/blakeblackshear/frigate:stable
    restart: unless-stopped
    privileged: true
    shm_size: "128mb"              # 路数多了必须加,64mb 跑 4 路会崩
    volumes:
      - ./config:/config
      - ./media:/media/frigate
      - /etc/localtime:/etc/localtime:ro
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128    # Intel 核显
    ports:
      - "8971:8971"                # UI 与 API
      - "8554:8554"                # go2rtc 转发的 RTSP
      - "8555:8555/tcp"            # WebRTC
config.yml · 关键片段(检测分辨率与追踪是最常配错的两处)
mqtt:
  host: 192.168.1.100            # HA 的 Mosquitto 地址
  user: frigate
  password: "{FRIGATE_MQTT_PASS}"

ffmpeg:
  hwaccel_args: preset-intel-qsv-h264   # 有核显就开,CPU 占用能从 200% 降到 40%

detectors:
  ov:
    type: openvino
    device: GPU

model:
  path: /openvino-model/ssdlite_mobilenet_v2.xml

objects:
  track:
    - person
    - car
  filters:
    person:
      min_area: 3000            # 太小的是远处噪点,别报
      min_score: 0.6            # 0.5 太松,会把人形阴影也认成人
      threshold: 0.7

cameras:
  front_door:
    ffmpeg:
      inputs:
        - path: rtsp://admin:{CAM_PASS}@192.168.1.64:554/stream1
          roles: [detect, record]
    detect:
      enabled: true
      width: 640                # 检测分辨率,不是流分辨率
      height: 640
      fps: 5
    record:
      enabled: true
      retain:
        days: 7
        mode: motion            # 只留有动作的片段,省 80% 硬盘
    zones:
      yard:
        coordinates: 0.1,0.4,0.9,0.4,0.9,0.95,0.1,0.95
        objects: [person]
STEP
  1. 先在 HA 里装 Mosquitto broker,把地址填进 mqtt 段(账号密码单独给 frigate 建一个,别用 admin)
  2. 摄像头后台打开 RTSP,记下主码流与子码流两个地址:检测用子码流、录像用主码流是标准做法
  3. 打开 8971 端口 Web UI,看到检测框画在画面上,且左下角 inference speed 小于 30ms 就合格了
  4. 先在「只在院子区域、只认人」这两种限制下调准,再开通知。 反过来做会被自己的误报烦到关通知
四个高频问题:①帧率掉到 1–2fps:九成是没开硬解,或检测分辨率给了 1280;②认不出人:先看摄像头是彩色夜视还是红外黑白,黑白画面在夜里识别率会掉很多,必要时给门口补一盏灯;③硬盘三天满:record.retain.mode 设成 motion,别 24 小时全录;④HA 收不到事件:MQTT 认证失败最常见,Frigate 日志里会明写 Not authorized。
UNIT-05

防空激光

代号:光子近防炮 半真半演

真事:光篱(Photonic Fence)确实存在,是 Intellectual Ventures 实验室拿了盖茨基金会资助做的研究项目,2016 年就公开演示过「机器视觉识别蚊虫飞行特征 + 低功率激光点杀 + 对人畜安全」。但它至今没有量产,团队后来单独成立 Photonic Sentry 继续推,仍停在原型和测试阶段。开源社区能抄到的版本,是 Ildar Rakhmatulin 公开发布的个人实验项目:树莓派或 Jetson + 振镜 + 激光 + 神经网络,属于「能跑通」的科研玩具,不是能买回家的产品。

蚊子:我还没飞进屋里就没了。你:爽。邻居:你家窗口半夜冒绿光,是不是在搞什么秘密武器?:是,在搞,专打蚊子那种。

关于「小偷进来用激光打他」:打蚊子是科学,打人是犯罪,而且会瞎。真实的入侵者防御 = 报警推送 + 探照灯 + 摄像头取证 + 语音喊话吓退。本炮塔对人类的攻击力:0,对蚊子的攻击力:看你调得多准。
造价整活版 ¥200 起 / 认真版 ¥2000+
难度高:光学调校,毕业项目
真伪灭蚊原理真 · 成品不存在
观感堡垒感 +2000%
这是全屋「武器系统」的门面担当,也最适合做视频爆点。建议放最后装,先把基础战备搞齐。
堡垒指挥官操作光子近防炮
示意 · 光子近防炮值班中(本图由 AI 生成,纯属整活概念图)

为什么它这么难:2 毫秒的物理题

一只蚊子飞行速度约 0.5–1 m/s,在 1 米外穿过激光可及区域的时间不到 10 毫秒。你的链路是:摄像头曝光(1–10ms)→ 推理(5–30ms)→ 振镜转向(1–5ms)→ 开火(持续几毫秒)。整条链必须在 10 毫秒内走完,否则蚊子已经飞走了。这就是为什么这玩意在实验室能跑、在家里跑不起来:家用摄像头的曝光和 USB 传输就吃掉大半预算。

硬件清单 · 开源实验版(照抄 Ildar 那套思路)
主控:树莓派 5(或 Jetson Orin Nano,推理快 10 倍)
视觉:全局快门 USB 摄像头(滚动快门会有运动模糊,识别飞虫必失败)
瞄准:双轴振镜(galvo)+ 20kpps DAC 驱动
武器:100mW 450nm 蓝激光起步(先验证,别直接上 1W)
识别:YOLOv8n 微调飞虫数据集(自己标几百张,或用开源 mosquito 数据集)
安全:独立硬互锁(人脸检测 → 物理切断激光电源,不经软件)
安全红线(比代码重要一百倍)
1. 激光功率从 100mW 起步,先验证视觉闭环再加功率
2. 硬互锁:任何人体进入画面 → 继电器直接断电,软件只做第二道
3. 调试全程戴对应波长的防护镜,禁止任何反射面(镜子/玻璃/金属)
4. 只在封闭空间测试,绝不朝窗外、绝不朝走廊
5. 1W 级蓝激光在 0.1 秒内可造成永久性视网膜损伤:这不是玩笑
STEP · 如果真要试
  1. 第一步别装激光:先用摄像头 + 振镜 + 红点激光做「指向跟随」,验证整条链路的延迟
  2. 用高频摄像头测出你的端到端延迟,超过 20ms 就别继续了:这个项目在你的硬件上不成立
  3. 换成固定式「光幕」思路:不追瞄,改成多束静态激光栅栏,蚊子穿过就中招,延迟问题直接消失(但安全问题上升)
  4. 认真的话去看 Photonic Sentry 的公开论文与专利,比抄视频靠谱
三个真正的危险:①反射:激光打在玻璃、镜面、不锈钢水杯上,方向不可预测;②路人:窗外路过的人被扫到一眼就够;③误判:模型把宠物眼睛反光认成目标。所以这一区本喵给「半真半演」的徽章:原理真、项目真、能做出来录像真,但当日常家电用,不建议。
UNIT-06

后勤保障

代号:喵星人补给线 真能打

宠物三条路:拆机直刷:Petkit 等喂食器里就是 ESP32 芯片,刷 ESPHome 直接本地接管,摆脱厂商云;按键模拟:喂食器不动,ESP32 用 GPIO 模拟按钮「按一下出粮」;纯 DIY:舵机 + 3D 打印螺旋送料,物料约 ¥20。

定时定量、远程加餐、碗里没粮自动补给,配 Frigate 宠物识别做监控:出差一周,猫以为你只是出门给它进货去了。

再往下还有一层很多人没想到:称重。碗下面垫一个 HX711 + 称重传感器,就能知道「今天吃了多少克」,比摄像头看饭碗空没空准得多。

造价¥20–300
难度低:拆机刷机 / 舵机拼装
三条路刷机 / 模拟按键 / 全 DIY
附加称重 + 干饭统计
成本最低、回报最可爱的战区:猫主子满意了,堡垒才算真建成。
堡垒指挥官检查自动喂食器,脚边一只橘猫在等饭
示意 · 后勤补给线值班中(本图由 AI 生成,纯属整活概念图)
ESPHome 配置 · 舵机喂食器(20 元级 DIY)
output:
  - platform: ledc
    id: pwm_out
    pin: GPIO4
    frequency: 50Hz

servo:
  - id: feeder
    output: pwm_out
    min_level: 3%            # 别用 0%,大部分舵机在极值处会抖
    max_level: 12%

button:
  - platform: template
    name: "出粮一次"
    on_press:
      - servo.write: {id: feeder, level: 12%}
      - delay: 800ms
      - servo.write: {id: feeder, level: 3%}
ESPHome 配置 · 称重(HX711,猫碗下面)
sensor:
  - platform: hx711
    name: "猫碗重量"
    dout_pin: GPIO18
    clk_pin: GPIO19
    gain: 128
    update_interval: 2s
    filters:
      - calibrate_linear:
          - 0.0 -> 0.0
          - 500.0 -> 500.0      # 放一个 500g 砝码实测,填真实读数
      - sliding_window_moving_average:
          window_size: 5
          send_every: 2
    unit_of_display: g
STEP
  1. 成品喂食器方案:拆机找主控,若是 ESP32 芯片直接刷 ESPHome(Petkit 有先例,但不同型号差别大,先搜型号再拆)
  2. 不想拆:用 GPIO 模拟按键「按一下出粮」,一根线一个三极管,十五分钟接入。 这是最不破坏保修的做法
  3. HA 里定时「每天 8:00 / 20:00 出粮」,出差远程补一发
  4. 再挂称重,写自动化「碗里 < 50g 且 12 小时无进食 → 提醒」——比摄像头看空碗准,也更有用
三条:①舵机堵转会发烫烧毁,出粮口别设计成会卡粮的形状,加堵转限位或串一个电流保险;②出粮量靠时间是玄学:颗粒大小、料仓余量都会影响,想准就上称重闭环;③粮仓要防潮,南方梅雨季加干燥剂,否则猫不吃,你还以为是设备坏了。
UNIT-07

农业前线

代号:番茄种植基地(军事化版) 半真半演

高大上版本是真实存在的:FarmBot(GitHub: FarmBot/farmbot):开源 CNC 农业机器人,自动播种、浇灌、除草,用计算机视觉识别果实成熟度,红了就自己摘,全流程无人化。

别人阳台种菜靠手感,你的阳台是自动化农业示范基地。番茄红没红,AI 比你对象先知道:而且它不会因为你不浇水就生气。

家用版本本喵建议老老实实分三步:先「自动浇水」,再「自动补光」,最后才谈视觉。跳过前两步直接上视觉,最后一定得到一台会拍照的枯死植物。

造价轻量版 ¥300 起 / FarmBot 整机 $1000+
难度高:进阶毕业项目
核心浇水闭环比视觉重要十倍
心态先养活,再自动化
这区的存在意义:证明「AI 种菜」不是科幻片,是 GitHub 上能 clone 的仓库。先收藏,后开工。
堡垒指挥官巡视 AI 种植基地
示意 · 农业前线值班中(本图由 AI 生成,纯属整活概念图)
ESPHome 配置 · 阳台自动浇水(轻量版起步)
sensor:
  - platform: adc
    pin: GPIO34
    name: "土壤湿度"
    attenuation: 11db
    update_interval: 30s
    filters:
      - median: 5
      - sliding_window_moving_average:
          window_size: 5
          send_every: 3

switch:
  - platform: gpio
    pin: GPIO25
    id: pump
    name: "水泵"
    restore_mode: ALWAYS_OFF
HA 自动化 · 土干即浇(带保护)
alias: 番茄浇水-土干开泵
triggers:
  - trigger: numeric_state
    entity_id: sensor.tu_rang_shi_du
    below: 300
    for: "00:10:00"                    # 干满 10 分钟才浇,避免探头抖动误浇
conditions:
  - condition: state
    entity_id: input_boolean.tu_rang_you_shui
    state: "on"                        # 雨天/正在浇水时手动关掉
actions:
  - action: switch.turn_on
    target: {entity_id: switch.shui_beng}
  - action: delay
    data: {seconds: 10}
  - action: switch.turn_off
    target: {entity_id: switch.shui_beng}
mode: single
四条真坑:①电阻式土壤探头会电解腐蚀,插进土里三个月就绿了、读数漂移:要么买电容式(贵十几块,值得),要么别长期通电测量,改成每 30 分钟上电 2 秒再断电;②水泵必须浸在水箱里,空转烧泵;③10 秒不一定够:按盆大小和出水速度算,先在盆下垫盘试;④连续阴雨天土壤湿度本就高,自动化不会浇,但如果传感器插得不深,它会误判成干。
UNIT-08

AI 参谋部

代号:语音指挥官 真能打

Home Assistant 内置 Assist 语音助手:接 Whisper(中文语音识别)+ Piper(中文语音合成),全本地跑,断网可用;再挂一个大模型(本地 Ollama 或云端 API),从「命令模板」升级成「听懂人话」。

不用背命令词,像个正常人说话就行:「把电竞房灯调成紫色,空调 26 度」:它全照办。断网?照办。数据出屋?不出。

但先说清楚:本地小模型「听懂人话」的能力和云端差一代。它能可靠处理你训练过的固定句式,遇到没见过的说法会翻车,而且很自信地翻给你看。

造价¥0–150
难度低:配置即可,无需写码
离线Whisper + Piper 全本地
升级接 LLM 后自然语言指挥
这是「AI 控制全屋智能」的入口,也是视频里最好演的一段:喊一嗓子,全屋联动。
环节本地方案典型耗时硬件门槛
唤醒词openWakeWord常驻,耗 CPU 很低ESP32-S3 即可
语音识别 STTWhisper small / base1–4 秒(CPU)x86 小主机;树莓派很吃力
理解意图HA 内置 intents / 本地 LLM0.1 秒 / 2–10 秒7B 模型要 8GB 内存起
语音合成 TTSPiper(zh_CN)0.3–0.8 秒很低,树莓派都行
部署 · 本地语音识别 Whisper(中文)
docker run -d --name whisper \
  -p 10300:10300 --restart=unless-stopped \
  -v whisper-data:/data \
  ghcr.io/rhasspy/wyoming-whisper:latest \
  --model small --language zh
部署 · 本地语音合成 Piper(中文)
docker run -d --name piper \
  -p 10200:10200 --restart=unless-stopped \
  -v piper-data:/data \
  ghcr.io/rhasspy/wyoming-piper:latest \
  --voice zh_CN-huayan-medium
一次唤醒到回话:往返七站,延迟账在这里
VOICE ROUND-TRIP纯本地 ≈ 3–6 秒 | 挂云端 LLM ≈ 8–18 秒
01 WAKE
唤醒词
本地小模型常驻,一直在听,只认那一个词
≈ 100–300ms
▶
02 VAD
断句
检测到静音才认为你说完了,这个阈值别给太长
≈ 700ms(可调)
▶
03 STT
Whisper 识别
small 模型在 x86 CPU 上跑,越长越慢
≈ 1–4s
▶
04 NLU
听懂意图
内置 intents 极快;换成本地 LLM 就要等生成
0.1s / 2–10s
▶
05 ACT
执行动作
跟 SYS-02 那条链一样,下发到设备
≈ 30–200ms
▶
06 TTS
Piper 合成
按句子流式合成,第一句先出声
≈ 0.3–0.8s
读法:延迟的大头永远在 STT 和 LLM 这两站,不在执行。想让语音「像人一样快」,改硬件(x86 小主机 + 更强模型)比改代码有效;想让语音「像人一样自然」,先优化第 02 站的断句阈值 —— 停顿设 1.5 秒,你会觉得它永远在等你说完。
STEP
  1. HA 里「设置 → 设备与服务 → 添加集成 → Wyoming Protocol」,分别填 10300 / 10200
  2. 「设置 → 语音助手」创建助手,选中文、选 Whisper/Piper,先用内置 intents 跑通「开灯 / 关灯 / 调亮度」
  3. 想更聪明:接本地 Ollama(qwen 7B 级)或云端 API:但先想清楚数据边界:语音送云端就等于把家里的对话送出去了
  4. 硬件入口三选一:手机 App 直接喊、ESP32-S3 语音盒子(约 ¥100)、官方 Voice Preview Edition 开源硬件
三个坑:①Whisper 模型小于 small 中文基本不可用,tiny 会把「开灯」听成「凯登」;②树莓派跑 Whisper 会等到你怀疑人生,把 STT 丢给 x86 小主机;③唤醒词误触发:家里有电视/音箱在放人声时,openWakeWord 可能被广告里的词叫醒,把麦克风放在远离电视的位置,或改用按键唤醒。
UNIT-09

绝密通信网

代号:量子通道(伪) 真能打

Tailscale(GitHub: tailscale/tailscale)组网:基于 WireGuard 的加密专线,手机和堡垒连进同一个「内网」,人在公司也能安全远程,个人使用免费,不用开公网端口、不用路由器改设置,CGNAT 大内网也能穿透。

不开一扇公网端口,黑客在门口转三圈找不到门:这门是量子态的,只有你自己摸得着。

它在这一层的价值经常被低估:真正的远程入口只有一条,攻击面就只有一个;反过来,如果你为了远程控制把 HA 的 8123 端口映射到公网,等于把家门钥匙挂在门上。

造价¥0(个人免费)
难度低:装客户端登录即用
安全不开端口,零暴露面
场景回家前先开空调 / 远程查监控
远程控制这一环的最终答案:不暴露、免费、快。装上它,「人在公司,家先开机」就是日常。
部署 · Tailscale 组网(免费)
# 堡垒主机(Linux / NAS,装 tailscale 客户端)
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up --advertise-routes=192.168.1.0/24 --accept-routes

# 只广播「需要访问的网段」,别广播全部
# Windows 主机:直接装官方客户端,登录同一账号
# 手机 / 笔记本:应用商店搜 Tailscale,登录即入网
安全配置 · ACL(这一步做了才算真安全)
// Tailscale ACL 片段:只让手机访问堡垒,不让堡垒访问手机
{
  "acls": [
    {"action": "accept", "src": ["tag:phone"], "dst": ["tag:fortress:8123"]},
    {"action": "accept", "src": ["tag:phone"], "dst": ["tag:fortress:8971"]},
    {"action": "accept", "src": ["tag:laptop"], "dst": ["tag:fortress:*"]},
    {"action": "accept", "src": ["autogroup:self"], "dst": ["autogroup:member:*"]}
  ],
  "tagOwners": {
    "tag:fortress": ["autogroup:admin"],
    "tag:phone": ["autogroup:admin"],
    "tag:laptop": ["autogroup:admin"]
  }
}
STEP
  1. 所有设备登录同一个账号,就自动组成加密内网
  2. HA App 的服务器地址填堡垒的 Tailscale IP(100.x.x.x)
  3. 广播子网路由后,去 Tailscale 管理台点一次「批准路由」
  4. 给设备打 tag,配 ACL。 不做这步,任何一台设备被控了你全家内网就通了
四条:①只广播内网网段,别把全部路由推给手机(泄露家里网络结构,也让你在外地误连家网);②别开 Tailscale 的 Exit Node 给手机全流量走家里:带宽和延迟都会变得很难受;③HA 长期令牌(Long-Lived Token)等同于密码,别贴进任何聊天工具;④嫌 Tailscale 麻烦的备选是 Nabu Casa(约 $6.5/月)或 Cloudflare Tunnel(免费但要把信任交给 CF),这三条里只有 Tailscale 和 Cloudflare 不依赖厂商云一直活着:选哪个看你更不信任谁。
ARMORY

军火库 · 开发板选型

开发板是堡垒的「兵种」。别只盯一块板。不同岗位配不同装备,才是折腾的正确姿势。价格均为市场参考价(元,2026 年)。

装备价格岗位适合干什么备注
ESP32-S335–60主力干将语音盒子、灯控中枢、多传感器节点性能最强,WiFi + BLE
ESP32-C3 Super Mini10–15侦察兵每屋一个传感器节点、门磁、插座白菜价,量大管饱
ESP32-C630–40未来战士WiFi6 + Thread,为 Matter 生态预备上新不追新,够用优先
XIAO ESP32-S3 Sense60–80特种兵带摄像头:门口、宠物、植物监控体积指甲盖大
ESP32-CAM20–30廉价哨兵最便宜的摄像头板,接 Frigate 做 AI 识别画质够用,注意散热
树莓派 5400–500参谋总部Frigate + 语音服务 + 激光炮塔的控制算力生态最成熟,但跑 AI 仍吃力
二手迷你主机
i3/i5 七代以上
200–400中央智脑宿主Home Assistant + Frigate 一起跑比树莓派更能打,强烈推荐
M5Stack Atom60–120快速原型带屏带壳免焊接,桌面控制按钮适合演示和初学
Pi Pico 2 W20–30极简工兵单点控制、极简任务WiFi 较弱,别当主控
Google Coral USB400–700退役老兵早年 Frigate 加速标配驱动 2026 年 4 月已归档,新装机别买

配装口诀:中枢用迷你主机,节点用 ESP32-C3,语音和主力用 S3,视觉用 CAM 或 XIAO Sense:整套配齐不到一块旗舰显卡的钱。

本喵批注
上表里有两处是本喵特意改了主意的。一是Coral 从「推荐」改成「退役」:它的驱动在 2026 年 4 月被归档,新内核上编译要打补丁,官方文档已经不再推荐新装:二手市场还在高价卖,别接盘。二是把迷你主机顶到「强烈推荐」:一颗七代 i5 的核显跑 OpenVINO,比树莓派加一堆配件更便宜、更快、更稳,而且能顺手跑 Whisper。这块是省钱又省心的地方。
SEC-NET

网络分区:把 20 台来路不明的设备关进笼子

这一节最容易被跳过,也最容易被后悔。你买的每个智能设备都是一台连着你家网的计算机,固件里跑着不知道谁写的代码。把它们和你的电脑手机放在同一个网段,等于让陌生人跟你的相册共用一间宿舍。做法不难:分三个区。

GATEWAY
路由器 / 主路由
防火墙 + DHCP
▼ 三个 SSID / 三个 VLAN
主网 · TRUST192.168.10.0/24
你的电脑手机NAS堡垒主机
规则:能访问所有区
反向上,只有堡垒主机能主动连 IoT 区
IoT 区 · UNTRUST192.168.20.0/24
插座灯具ESP32 节点扫地机电视盒子
规则:禁止访问主网
只允许单向连堡垒的 8123 / 1883 / 6053
禁止访问外网(需要时按设备放行)
摄像头区 · NO-WAN192.168.30.0/24
IP 摄像头NVRFrigate
规则:完全禁止出外网
只允许 Frigate 拉 RTSP
这条最有用:堵死摄像头「回传厂商云」
入口唯一:外部访问只走 Tailscale(或 CF Tunnel)→ 堡垒主机 → 其余一律不暴露。
反例(别做):把 HA 的 8123 端口在路由器上做端口映射,或用厂商的免费 DDNS + 端口映射。

落地:不用企业级设备也能做到

方案 A · 带访客网络的路由器(零成本)
绝大多数家用路由都有「访客网络 / IoT 网络」开关。把智能设备全连访客网络,然后在路由里关掉「允许访客访问内网」。这一步能做到 80% 的隔离效果,代价是 IoT 设备也访问不到你的堡垒主机:需要用「允许访客访问特定设备」的白名单补上。
成本 ¥0 | 隔离强度 中 | 适合绝大多数家庭
方案 B · 路由器 + VLAN(OpenWrt / 软路由)
软路由或 OpenWrt 上开三个 VLAN,配防火墙规则。能精确到「IoT 区只能连堡垒的 8123 端口」,也方便以后加设备。代价是要花一个周末学 iptables / nftables。
成本 ¥200–600(软路由) | 隔离强度 高 | 适合爱折腾的
方案 C · 只做「摄像头断网」
预算和时间都有限时的最高性价比动作:只给摄像头建一个独立 SSID,在路由器里禁止它访问外网(DHCP 不分配网关,或防火墙 drop 到 WAN 的流量)。这一条单独做,就能把「摄像头画面被回传」这个最大的隐私风险堵掉。
成本 ¥0 | 隔离强度 中 | 本喵建议所有人先做这条
OpenWrt · IoT 区防火墙规则(nftables 风格,看懂逻辑即可)
# IoT 网段只能连堡垒主机的三个端口,其余全部拒绝
config rule
    option name 'IoT-to-Fortress-8123'
    option src 'iot'
    option dest 'lan'
    option dest_ip '192.168.10.50'      # 堡垒主机
    option dest_port '8123 1883 6053'   # HA / MQTT / ESPHome API
    option proto 'tcp'
    option target 'ACCEPT'

config rule
    option name 'IoT-block-lan'
    option src 'iot'
    option dest 'lan'
    option target 'REJECT'

config rule
    option name 'IoT-block-wan'
    option src 'iot'
    option dest 'wan'
    option target 'REJECT'
三个容易忽略的点:①2.4G 和 5G 必须是同一个 SSID 下的不同频段(或明确分开),ESP32 只支持 2.4G,很多人卡在「密码没错连不上」就是连了 5G;②别开 UPnP:很多设备(包括某些摄像头)会自己用 UPnP 在路由器上开端口,你以为没映射,其实门已经开了;③WiFi 客户端隔离(AP Isolation)会让局域网设备互相看不见,开了它 ESPHome 就连不上 HA,IoT 那个 SSID 必须关掉这项。
SEC-OPS

运维:这座堡垒会怎么坏,以及你怎么知道

自动化系统有个特点:坏的时候不报警,只是「不动」。所以运维的重点不是修,而是让它坏了你能立刻发现。这一节是三张表:会怎么坏、怎么查、以及怎么备份才能救回来。

一、故障排查表(按症状查,别按猜测查)

症状最可能的原因怎么确认怎么修
设备随机掉线,一会儿又回来5V 供电不足换一个 2A 以上的电源,看是否复现换成独立供电,别从电脑 USB 取电
自动化要等十几秒才执行WiFi 在反复重连路由器里看该设备的上线/下线日志固定 IP、关省电模式、加大 AP 覆盖
HA 里实体全部 unavailable中枢本体挂了或数据库满看 HA 日志与磁盘占用清 recorder、扩盘、重启
人还在屋里灯就关了防抖窗口太短 / 雷达位置正对看历史曲线,静止段是否断成碎片加 for 到 60s、调静止灵敏度、挪位置
继电器开与关是反的模块是低电平触发万用表量,或看 GPIO 高低与吸合关系配置里写 inverted: true(别拆线反接)
灯带尾端发黄、颜色不对电压降量末端电压,应 ≥4.7V(5V 灯带)每米补电、或换 12V 灯带
Frigate 帧率只有 1–2fps没开硬解 / 检测分辨率太高Web UI 看 inference speed 与 fps开 QSV、检测降到 640、限制 fps 5
MQTT 设备状态不更新匿名被禁但没配账号Frigate/Tasmota 日志里找 Not authorized建账号、写进两边配置
OTA 刷固件失败密码错 / 版本跨太大串口日志看报错短线重刷、一次只升一个版本
Zigbee 设备集体失联协调器 USB 延长线太长 / 2.4G 干扰看协调器是否在线,换 USB 口试协调器用 USB 2.0 + 延长线远离主机与 WiFi
语音总是听错模型太小 / 麦克风远看 STT 返回的文本Whisper 换 small 以上、麦克风靠近
停电后设备状态全乱没设 restore_mode断电重启一次观察每个开关/灯都显式写 restore_mode

二、备份:不做这一步,前面所有工作都可能一夜归零

备份什么
就一个目录:/config。它包含全部自动化、集成凭据、仪表盘布局、设备注册表。设备丢了可以重买,config 丢了等于从零重搭。
大小通常 50–500MB(含数据库)
备到哪
至少两个地方,且其中一个不在同一块盘上。官方「每日自动备份」会放在 /backup,把它同步到 NAS 或另一台机器。别只留在主机上。主机挂了备份一起没。
官方备份 + 异地同步(rsync / Syncthing 都行)
怎么验证「真能恢复」
每季度做一次:拿备份在一个临时容器里恢复,看能不能起来、自动化还在不在。没验证过的备份等于没有备份:这条在所有运维里都成立。
判据:恢复后实体数量与备份前一致
配置也要进版本库
YAML 部分(automations、configuration、esphome 固件)建议放进 Git 私有仓库。改之前提交一次,改坏了能 diff 出来。邮件列表里最常见的求助就是「我改了一个地方,然后全不好用了,不知道改了什么」。
私有仓库即可,别公开(里面含 IP 与凭据)
每日备份到 NAS(cron,跑在堡垒主机上)
# 0 4 * * * 每天凌晨 4 点,把 HA 备份同步到 NAS
rsync -az --delete /path/to/config/backup/ \
  user@nas.local:/volume1/backup/fortress/ \
  >> /var/log/fortress-backup.log 2>&1

# 顺手做一件事:连续 3 天没有新备份就发一条通知给自己
# (备份任务静默失败是最常见的坑,日志里没人看)

三、怎么知道它坏了:三条低成本监控

心跳
每条自动化跑完写一条日志/计数;一天没动过就是没跑
离线上报
HA 内置「设备离线 X 分钟」自动化 → 推送到手机
磁盘水位
超过 80% 提醒;数据库爆盘是最常见的「全屋静默」
备份新鲜度
备份文件超过 48 小时没更新就报警
本喵批注
本喵踩过最冤的一次:一条「每天 7:00 开窗帘」的自动化,因为改了实体 ID 静默失效了两周,而本喵一直以为是窗帘电机没电。后来给每条关键自动化加了「执行即写一条计数器」,才变成「今天没动过」一眼能看出来。不会报警的自动化,等于不存在。
BUDGET

三档扩军预算

按扩军规模分三档,每档都是「装完立刻能爽」的完整闭环,不用一次到位,先新兵后将军。价格按 2026 年淘宝/拼多多常见成交价估算,不含摄像头主机这种可复用设备。

LEVEL-1

新兵级

约 ¥500
  • Home Assistant 装进现成 NAS / 旧电脑(¥0)
  • 2 块 ESP32-C3(¥30)+ 2 颗 LD2410(¥60)
  • 温湿度 + 光照传感器(¥40)
  • 2 个继电器插座(¥60)+ WS2812 灯带 5 米(¥50)
  • 5V 2A 电源 ×3(¥45)+ 杜邦线与洞洞板(¥30)
  • 手机 App 远程 + 「人走灯灭」自动化(¥0)
结算语:出租屋从此会自己关灯。
LEVEL-2

上尉级

约 ¥2000
  • 新兵级全部 + 窗帘电机(RF433 改造,¥500 / 两窗)
  • ESP32-CAM(¥30)+ Frigate:边境防线开工
  • 语音盒子(ESP32-S3,¥100)+ Assist 离线中文语音
  • Zigbee 协调器(¥100)+ 门磁温湿度 4 件(¥150)
  • Tailscale 远程(¥0)+ 离家自动布防
  • PoE 交换机与网线(¥300,能拉线就拉)
结算语:会巡夜的堡垒,出门在外也能指挥。
LEVEL-3

将军级

约 ¥6000+
  • 上尉级全部 + 二手迷你主机(¥400,Frigate 主力)
  • IP 摄像头 ×3(¥600)+ 硬盘 4TB(¥500)
  • 宠物补给线:喂食器 + 称重(¥300)
  • 农业前线:ESP32 智能种植箱起步(¥400)
  • UPS 不间断电源(¥400,这一项别省)
  • 光子近防炮:激光灭蚊系统(¥200 整活 / ¥2000 认真)
结算语:无人值守的庄园,猫是唯一管理员。

电费账:这套东西一年要花多少钱

很多人担心「一堆设备常年开着电费会不会很高」。实际算一下,这是本喵觉得最该被说清、最少被说的一件事(按 0.6 元/度估算):

设备功率数量年耗电年电费
ESP32 节点(雷达/传感器)0.7W636.8 度≈ ¥22
中枢主机(迷你主机常开)12W1105 度≈ ¥63
摄像头 ×35W3131 度≈ ¥79
Zigbee 协调器1W18.8 度≈ ¥5
合计—11 台282 度≈ ¥169 / 年

对比一下:一台常开的电热水器一年约 1000 度。也就是说这套堡垒的全部电费,折合每天不到五毛。而它帮你省的可能是忘记关的空调和灯。真正的成本不是电费,是你的周末。

ROADMAP

行动路线图

一周一个里程碑,每步都有实物验收,绝不烂尾。堡垒不是一天建成的,但可以一个周末开工。每一格写清了「这周结束你手上有什么」,做不出来就停在那儿,别往后赶。

T+0
中枢落地
Docker 装 Home Assistant,手机装 App 连上。验收:手机能开关一个实体(哪怕是个虚拟开关)。
T+1
第一块板
ESP32-C3 + LD2410 刷 ESPHome。验收:串口日志里 has_target 随你进出翻转,HA 里能看到这个实体。
T+2
第一条自动化
「人走灯灭」上线,防抖 60 秒。验收:你离开房间一分钟后灯自己关,回来一进门就开。
T+3
灯光军团
温湿度 + 继电器 + 灯带 + 光照联动。验收:傍晚屋里一暗,灯带自动亮到 70%、色温偏暖。
T+4
边境防线
ESP32-CAM + Frigate 识人报警,门磁上线。验收:人走进画面 3 秒内手机收到通知,狗路过不报。
T+5
语音指挥
Assist + Whisper + Piper。验收:说「把客厅灯调暗一点」能正确执行,断网后仍然能执行。
T+6
远程成军
Tailscale 组网 + ACL。验收:关掉家里 WiFi 用流量,手机仍能打开 HA 并收到推送。
T+7
整活开始
激光炮塔、宠物补给线、AI 种植箱:吹过的牛开始兑现。验收:猫胖了,或者番茄红了。
本喵批注
这条线的节奏是刻意的:先让「感知→决策→执行」这一个闭环跑通,再往上叠设备。本喵见过太多人第一周就买齐九个战区的东西,第二周因为「雷达一直不掉线」卡住,然后全部塞进柜子。一块板 + 一条自动化跑通,比十块板摆着不动有用。
SEC-HONEST

本喵的实话:哪些值得买,哪些是智商税

上面九个战区听起来什么都能做,但现实里有一大半「智能家居」产品买了会后悔。这一节不讨好任何厂商,只讲本喵和朋友真踩过的。

东西结论为什么替代方案
带屏智能音箱(控制中枢那种)不建议它的「智能」全在云上,断网变砖;而且会把你家当成它的数据源旧平板贴墙上当仪表盘,本地可控
智能冰箱 / 智能镜子 / 智能晾衣架纯智商税加一块屏就贵两千,那块屏你三个月后不会再碰普通款 + 一个 50 块的温湿度传感器
必须连厂商云才能用的设备买前必查厂商跑路/停服 = 你的设备变砖。这是真实发生过的,不是假设买前搜「型号 + 本地接入 / Tasmota / ESPHome」
订阅制的「AI 摄像头」不建议月费买的是云识别,而本地 Frigate 免费且更私密普通 ONVIF 摄像头 + Frigate
全屋智能面板(嵌墙那种)慎重贵、锁死生态、装修后再改要砸墙墙面留网口 + 旧平板,随时能换
WiFi 电池传感器别买两周换一次电池,换到你放弃自动化Zigbee 同类,一两年换一次
智能灯泡(能调色温)推荐单价低、效果立竿见影、坏了随时换本地协议款,别买只支持厂商 App 的
智能插座最推荐最便宜的自动化入口,把老电器直接变智能选能刷 Tasmota/ESPHome 的型号
毫米波存在雷达推荐它解决的是「人还在但不动」这个自动化最大的痛点LD2410,别一上来买最贵的
成品喂食器看型号能刷机的型号很好用,不能刷的等于租了个云服务先查拆机资料再买

还有三种情况,本喵建议你根本别开始

一、你租的房子不能动墙
不是不能做,是别做「要打孔、要走线」的那部分。租房版的正确姿势:插座、灯泡、桌面传感器、摄像头,全部免安装,搬家能带走。窗帘、嵌墙面板、POE 布线这些留给自己的房子。
二、家里有完全不看手机的老人
自动化的第一原则是不能比原来更难用。如果所有灯都只能通过 App 控制,老人会摸黑。正确做法:保留物理开关,并且让物理开关的动作也能被系统感知(换成智能开关而不是换灯泡,或至少保证断网时开关照常工作)。
三、你没有连续两个周末
这套东西的门槛不在钱,在「调试时间」。装一个设备十分钟,让它稳定工作可能要两小时。如果你只能碎片时间折腾,那就只做一件事。人走灯灭。这一件做成了,你就已经比 90% 的「智能家居用户」用得爽。
本喵批注
本喵最喜欢的一句话是「这套技术学会了,你想怎么玩都可以」。但反过来也成立:学会了,你也可以选择不做。判断标准很朴素。这件事有没有让你少做一件重复的小事。有,就值;没有,那块板子最后一定在抽屉里吃灰。
ANNEX

堡垒工程局 · 温馨提示

关于本方案「武器系统」的正式说明

  1. 本方案所有「武器」均以杀虫、吓退、取证为己任。激光打蚊子是科学,打人是犯罪,前者建议、后者禁止。
  2. 「无人值守」指设备无人值守,不是指家里没人时小偷随便进:防御系统会报警、录像,并通知你和 110。
  3. 涉及 220V 市电的改造(插座、开关、布线)请找持证电工。这篇给的是原理与选型,不是施工许可。
  4. 激光、水泵、加热类设备一律不得无人值守长时间运行;所有执行器都要有「失效即安全」的默认状态。
  5. 宠物满意度不作保证:猫主子对自动喂食器的真实评价,以它实际打翻的次数为准。
  6. 番茄是否好吃不作保证:AI 只管种,不管厨艺。
  7. 最重要的一条:这套技术学会了,你想怎么玩都可以。但请合法地玩,安全地玩。
堡垒工程局 · 盖章
SOURCES

开源弹药库(GitHub)

本文所有方案都来自这些仓库,按需取用,全部免费。项目仍在活跃更新,动手前先看 README 与 release notes:尤其是 Frigate 和 Home Assistant,大版本之间常有破坏性变更。

home-assistant/core全屋中枢大脑
esphome/esphomeESP32 固件框架,YAML 即设备
blakeblackshear/frigate本地 AI 安防 NVR
arendst/Tasmota插座/开关刷机固件
Koenkk/zigbee2mqttZigbee 设备桥接(设备多了再上)
rhasspy/piper本地中文语音合成 TTS
openai/whisper本地语音识别 STT
ollama/ollama本地大模型,离线 AI 大脑
tailscale/tailscale远程加密组网
FarmBot/farmbot开源农业机器人(种番茄那个)
HomeAssistant/home-assistant.io官方文档,比任何教程都准
frigate.videoFrigate 官方文档(配置项以它为准)

图注:文中三张插画为本喵请画师生成的示意概念图(不是实物照片);架构图、数据流图、链路图与网络分区图全部用 HTML/CSS 手绘,不是 AI 出图。因为技术图里的每个字、每条连线都必须能被改,也必须对。

末日堡垒智能家居 · 技术科普与落地指南 编号 FB-2026-1022 · 欢迎转发 · 动手前先备份