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

这篇讲一件挺朴素的事:怎么用开源硬件和开源软件,把一套普通住宅改造成「不用你操心」的自动化房子。它不用买任何一家的生态,不用连厂商的云,断网照常工作,整套下来五百块起步。本喵把它写成了末日堡垒的作战档案,因为这套系统的结构确实像:一个大脑、几条感知线、一群执行机构,加上一条只有自己摸得着的通信通道。
读完你能拿到三样东西:一张能照着搭的五层架构图、九个具体战区的选型与代码、一份不走弯路的预算与排期。每节末尾都有「翻车点」,那些是本喵和朋友真踩过的坑,不是从手册抄的。
堡垒作战拓扑
一座堡垒只需要一个大脑:Home Assistant。它把所有子系统聚到一张地图上,谁触发、谁行动,全由它调度。下面这张拓扑,就是全文的地图。 你可以先只看这一张,再决定要哪个战区。
五层架构:一座堡垒是怎么立起来的
说白了分成五层。这个分法不是为了好看,是为了排查故障:任何一次「灯没开」,你都能在五层里定位到唯一一层是坏的。分层错了,排障就会变成瞎猜。
为什么是这五层,不是四层也不是六层
划层的唯一标准是故障域。同一层里的组件一起坏、一起换,跨层之间的依赖尽量单向。你把这五层记住,排障就有顺序:灯不开,先量 5V(L0),再 ping 设备(L2),再翻 HA 日志里有没有那条 MQTT 消息(L2→L3),最后才去改自动化(L3)。本喵见过的大部分「智能家居不靠谱」,都是拿 L3 的问题去改 L1 的代码,改三个月也改不好。
一次「人走灯灭」的完整旅程
「灯自己关了」在你看来是一瞬间的事。在那瞬间里,信号其实走了六站。把这六站走一遍,你就知道延迟出在哪、掉线掉在哪、以及为什么有人家的自动化总是慢半拍。
for: 00:01:00:无人持续 60 秒才动手,防误杀这六站在代码里长什么样
前两站在固件里(ESPHome 的 YAML),第三到五站在 HA 的自动化里。这两份 YAML 就是整座堡垒最核心的两张纸,看懂它们,其余的只是换传感器、换执行器。
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: "移动距离"
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.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 + ESPHome
新手最容易被劝去上 Zigbee,然后发现自己买了一堆网关、一堆电池、还有一堆互不兼容的固件。协议没有好坏,只有「你这台设备装在哪儿、多久换一次电、要不要传视频」。这张表按这四个问题排。
| 协议 | 供电 | 典型延迟 | 单网规模 | 断网可用 | 更适合 |
|---|---|---|---|---|---|
| WiFi 2.4G ESPHome / Tasmota | 必须常电 | 5–50ms | 20–40 台 再多要规划 AP | 完全可用 | 插座、灯带、雷达、语音盒子、摄像头 |
| Zigbee Z2M + 协调器 | 纽扣电池可撑 1–2 年 | 50–200ms | 100+ 台 靠路由节点扩展 | 本地网关即可 | 门磁、温湿度、人体感应、按钮 |
| Thread / Matter 新一代标准 | 电池友好 | 50–200ms | 100+ 台 | 需 Border Router | 未来新购设备,现阶段别为它多花钱 |
| 蓝牙 BLE | 极省电 | 100ms–2s | 7–20 台 | 需中继 | 温湿度计、体重秤这种「读一次就够」 |
| 433 / 315MHz | 遥控器电池数年 | 100–300ms | 无组网概念 | 可用 | 窗帘电机、老遥控设备「劫持」改造 |
| 有线 RJ45 / PoE | PoE 一根线搞定 | <5ms | 不受限 | 最稳 | 中枢本体、每个房间的骨干节点、摄像头 |
三条决策规则,比表格好用
一张选型图,看完就不用记表了
有 → 走 PoE / 有线(优先)
没有 → WiFi 2.4G 独立 SSID
需要 → 这类设备就不该用电池
不需要 → Zigbee / Thread 均可
WiFi 上两路就够把 2.4G 挤满
九大战区档案
每份档案按同一规格记录:代号、真实方案、造价、段子,并盖一枚「真实度」徽章:绿色是真能打,琥珀是半真半演,红色是纯整活。方案全部来自 GitHub 开源项目,细节可查可抄。每个战区下面都有「实现要点」和「翻车点」,那是真正花钱买来的部分。
中央智脑
代号:天网雏形 真能打整套堡垒只有一个大脑:Home Assistant(GitHub: home-assistant/core)。它把所有战区聚成一张地图,自动化引擎负责「如果…就…」,仪表盘让你在手机上指挥一切。
别的智能家居要连厂商的云,它自己就是云。断网、断电、厂商倒闭:堡垒照常运转,这才是末日该有的样子。
但装法有四种,选错会把自己埋进坑里。搞清楚这四种的区别,比看十篇教程有用:
| 装法 | 是什么 | 适合谁 | 代价 |
|---|---|---|---|
| HAOS | 完整操作系统,烧盘即用 | 只想用不想折腾 | 独占一台机器,不能跑别的服务 |
| Docker | 官方镜像,跑在现有系统上 | 已有 NAS / 迷你主机 | 没有 Add-on 商店,要自己装插件 |
| Supervised | Docker + 官方管理面板 | 想要 Add-on 又不想独占机器 | 对系统侵入深,升级容易翻车 |
| Core | 纯 Python 包 | 开发者 / 要改源码 | 所有依赖自己管 |
apt install 了冲突包,它就会标记「不受支持」,然后某次升级直接罢工。想省心就 HAOS,想复用机器就 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
├── configuration.yaml # 主配置,越薄越好
├── automations.yaml # 自动化(UI 里建的也在这)
├── scripts.yaml # 可复用动作序列
├── scenes.yaml # 场景快照
├── secrets.yaml # 密码/token 全放这,别写进主配置
├── customize.yaml # 实体别名、图标
├── .storage/ # 集成凭据与注册表(关键,别手动改)
├── www/ # 静态文件,对外暴露为 /local/
└── home-assistant_v2.db # 历史数据库(会一直长)
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
- 浏览器打开 http://主机IP:8123,完成创建账户向导
- 手机装官方 App(iOS / Android 搜 Home Assistant),扫码绑定
- 先把
recorder的排除项写好,再接设备。 顺序反了数据库会被噪音喂胖 - 设置里开「每日自动备份」,备份文件挪到另一块盘或 NAS(同盘备份等于没备份)
生命探测
代号:生命体征雷达 真能打「人走灯灭」的关键传感器:LD2410 毫米波雷达(24GHz),配一块 ESP32 开发板,刷 ESPHome 固件(GitHub: esphome/esphome),几分钟变成一台「存在探测器」。
普通红外 PIR 只认「在动的东西」:你坐在电竞椅上打游戏,它以为你已经凉了,啪地把灯关了。毫米波雷达连你细微的呼吸起伏都数得清,人没走,灯绝不灭。
这一区是全屋自动化的感知底座,也是最容易买错的一区。三个常见型号差在哪:
| 型号 | 价格 | 能测什么 | 接线 | 适合 |
|---|---|---|---|---|
| HC-SR501(PIR) | ¥5 | 只认移动 | 1 根信号线 | 走廊、楼梯(路过即亮) |
| LD2410 | ¥25–40 | 有人/无人 + 移动/静止 + 距离 | UART 4 线 | 客厅、卧室、书房(主力) |
| LD2450 | ¥60–90 | 上面全部 + 多人定位坐标 | UART 4 线 | 需要「谁在哪」的场景,如分区空调 |
| LD2410 | ESP32 | 说明 |
|---|---|---|
| VCC | 5V / VIN | 必须 5V,3.3V 供电会随机抽风 |
| GND | GND | 共地 |
| OUT(雷达 TX) | GPIO16 | 板子 RX2 |
| IN(雷达 RX) | GPIO17 | 板子 TX2 |
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,精度和抗干扰的取舍
- 先装在天花板或高处、朝下 15–30 度,别正对人坐的位置(正对会因呼吸幅度小反而漏检)
- 串口日志看
has_target随人进出翻转,翻转干脆才算装对位置 - 人静坐 10 分钟,看
still_target是否一直为 on;中途掉过一次就调静止灵敏度 - 最后才写 HA 自动化,防抖窗口给
for: 60s起
阳光作战
代号:光学屏障 真能打两条路线,任选其一:DIY 改装:ESP32 + 步进电机(轻帘用 28BYJ-48,重帘用 NEMA17 + TMC2209 驱动)直接拽窗帘,ESPHome 原生暴露成「窗帘」实体;成品改造:买 RF433 管状电机窗帘,用 ESP32 + CC1101 模块劫持遥控信号,一个板子控制全屋窗帘。
天亮自动开闸放光,中午自动遮阳,人不在家窗帘照常上下班:小偷在楼下看三天,以为这家人作息极其规律,果断换一家。
两条路真实体验的差别不在效果,在时间成本:成品劫持十五分钟搞定,DIY 要一个周末,还要跟限位开关搏斗。
| 路线 | 成本/窗 | 耗时 | 难点 | 可靠性 |
|---|---|---|---|---|
| RF433 劫持 成品管状电机 | ¥180–300 | 15 分钟 | 抓准遥控编码,一次抓不到就多试 | 高(原厂机械) |
| 步进电机压带 贴在原有拉绳上 | ¥120–180 | 1 天 | 行程标定、限位、机械打滑 | 中(会打滑) |
| 自己造滑轨 | ¥200+ | 2–3 天 | 同轴度、噪声、卡死 | 低(除非你懂机械) |
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
- 先手动把窗帘拉到全开,装限位开关,读一次
current_position,记作 0 - 手动拉到全关,再读一次,得到总行程(上面代码里的 2000 就是这里来的)
- 把总行程写进
target,然后断电重启一次,验证它能自己找回位置 - 成品管状电机走 RF433:ESP32 + CC1101 用
remote_transmitter录码重发,先抓「开/停/关」三个键
照明军需库
代号:护眼神盾 真能打把普通插座升级成「智能插座」:两个办法。买涂鸦系插座刷 Tasmota / ESPHome 固件(GitHub: arendst/Tasmota),或直接 ESP32 + 继电器模块自焊一个。再接一颗 BH1750 光照传感器。
「护眼模式」全自动:环境变暗 → 自动开灯 → 色温调暖;打游戏到半夜,灯自己知道该开多亮,你的眼睛终于有人管了。
这一区看着最简单,其实藏着全屋最多的电气安全问题。插座背后是 220V,接错的代价不是灯不亮,是烧房子。
| 做法 | 成本 | 电气安全 | 适合 | 不建议 |
|---|---|---|---|---|
| 买成品刷机 Tasmota/ESPHome 兼容 | ¥30–60 | 原厂认证,最稳 | 插在墙上的所有大功率设备 | — |
| ESP32 + 继电器模块 自装在插座盒里 | ¥15–25 | 看你的手艺 | 低压、弱电、DIY 展示 | 大功率、长期无人值守 |
| 只做灯带 / 低压 5V/12V 供电 | ¥20–40 | 隔离电源即可 | 氛围灯、桌面灯 | — |
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:
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
边境防线
代号:AI 哨兵 真能打安防核心:Frigate(GitHub: blakeblackshear/frigate):本地 AI 目标检测 NVR,摄像头画面全程不出屋,识别「人 / 车 / 动物」再决定报不报警。配门磁传感器(几块钱的干簧管 + ESP32)监控门窗状态。
它不看云、不交月费,靠你机器的显卡或核显干活:认出「人形」才拉警报,风吹草动不误报。小偷撬门?报警推送 + 全屋灯光闪瞎他 + 摄像头取证,一条龙。
进阶:结合存在雷达做「离家布防 / 在家撤防」自动切换:你出门,系统自动进入警戒;你回来,它自己安静下来。
从摄像头到你的手机,中间走了七步
这一张是全文信息密度最高的链路。看懂它,你才知道「为什么我的 Frigate 帧率只有 2fps」「为什么它认不出人」到底该改哪一段。
| 加速方案 | 成本 | 1080p 可跑路数 | 功耗 | 适合 |
|---|---|---|---|---|
| 纯 CPU i3/i5 老机器 | ¥0 | 1–2 路(很吃力) | 15–35W | 先验证功能,别长期跑 |
| Intel 核显 OpenVINO 7 代以后带核显 | ¥0(现成机器) | 4–8 路 | 10–25W | 性价比最高,首选 |
| Google Coral USB | ¥400–700 | 6–10 路 | 2W(加速器本身) | 没有核显的机器加装,但供货不稳 |
| Hailo-8 / Hailo-8L | ¥600–1200 | 10+ 路 | 2.5W | 多路专业方案,社区支持还在长 |
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
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]
- 先在 HA 里装 Mosquitto broker,把地址填进 mqtt 段(账号密码单独给 frigate 建一个,别用 admin)
- 摄像头后台打开 RTSP,记下主码流与子码流两个地址:检测用子码流、录像用主码流是标准做法
- 打开 8971 端口 Web UI,看到检测框画在画面上,且左下角 inference speed 小于 30ms 就合格了
- 先在「只在院子区域、只认人」这两种限制下调准,再开通知。 反过来做会被自己的误报烦到关通知
record.retain.mode 设成 motion,别 24 小时全录;④HA 收不到事件:MQTT 认证失败最常见,Frigate 日志里会明写 Not authorized。防空激光
代号:光子近防炮 半真半演真事:光篱(Photonic Fence)确实存在,是 Intellectual Ventures 实验室拿了盖茨基金会资助做的研究项目,2016 年就公开演示过「机器视觉识别蚊虫飞行特征 + 低功率激光点杀 + 对人畜安全」。但它至今没有量产,团队后来单独成立 Photonic Sentry 继续推,仍停在原型和测试阶段。开源社区能抄到的版本,是 Ildar Rakhmatulin 公开发布的个人实验项目:树莓派或 Jetson + 振镜 + 激光 + 神经网络,属于「能跑通」的科研玩具,不是能买回家的产品。
蚊子:我还没飞进屋里就没了。你:爽。邻居:你家窗口半夜冒绿光,是不是在搞什么秘密武器?:是,在搞,专打蚊子那种。

为什么它这么难:2 毫秒的物理题
一只蚊子飞行速度约 0.5–1 m/s,在 1 米外穿过激光可及区域的时间不到 10 毫秒。你的链路是:摄像头曝光(1–10ms)→ 推理(5–30ms)→ 振镜转向(1–5ms)→ 开火(持续几毫秒)。整条链必须在 10 毫秒内走完,否则蚊子已经飞走了。这就是为什么这玩意在实验室能跑、在家里跑不起来:家用摄像头的曝光和 USB 传输就吃掉大半预算。
主控:树莓派 5(或 Jetson Orin Nano,推理快 10 倍)
视觉:全局快门 USB 摄像头(滚动快门会有运动模糊,识别飞虫必失败)
瞄准:双轴振镜(galvo)+ 20kpps DAC 驱动
武器:100mW 450nm 蓝激光起步(先验证,别直接上 1W)
识别:YOLOv8n 微调飞虫数据集(自己标几百张,或用开源 mosquito 数据集)
安全:独立硬互锁(人脸检测 → 物理切断激光电源,不经软件)
1. 激光功率从 100mW 起步,先验证视觉闭环再加功率
2. 硬互锁:任何人体进入画面 → 继电器直接断电,软件只做第二道
3. 调试全程戴对应波长的防护镜,禁止任何反射面(镜子/玻璃/金属)
4. 只在封闭空间测试,绝不朝窗外、绝不朝走廊
5. 1W 级蓝激光在 0.1 秒内可造成永久性视网膜损伤:这不是玩笑
- 第一步别装激光:先用摄像头 + 振镜 + 红点激光做「指向跟随」,验证整条链路的延迟
- 用高频摄像头测出你的端到端延迟,超过 20ms 就别继续了:这个项目在你的硬件上不成立
- 换成固定式「光幕」思路:不追瞄,改成多束静态激光栅栏,蚊子穿过就中招,延迟问题直接消失(但安全问题上升)
- 认真的话去看 Photonic Sentry 的公开论文与专利,比抄视频靠谱
后勤保障
代号:喵星人补给线 真能打宠物三条路:拆机直刷:Petkit 等喂食器里就是 ESP32 芯片,刷 ESPHome 直接本地接管,摆脱厂商云;按键模拟:喂食器不动,ESP32 用 GPIO 模拟按钮「按一下出粮」;纯 DIY:舵机 + 3D 打印螺旋送料,物料约 ¥20。
定时定量、远程加餐、碗里没粮自动补给,配 Frigate 宠物识别做监控:出差一周,猫以为你只是出门给它进货去了。
再往下还有一层很多人没想到:称重。碗下面垫一个 HX711 + 称重传感器,就能知道「今天吃了多少克」,比摄像头看饭碗空没空准得多。

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%}
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
- 成品喂食器方案:拆机找主控,若是 ESP32 芯片直接刷 ESPHome(Petkit 有先例,但不同型号差别大,先搜型号再拆)
- 不想拆:用 GPIO 模拟按键「按一下出粮」,一根线一个三极管,十五分钟接入。 这是最不破坏保修的做法
- HA 里定时「每天 8:00 / 20:00 出粮」,出差远程补一发
- 再挂称重,写自动化「碗里 < 50g 且 12 小时无进食 → 提醒」——比摄像头看空碗准,也更有用
农业前线
代号:番茄种植基地(军事化版) 半真半演高大上版本是真实存在的:FarmBot(GitHub: FarmBot/farmbot):开源 CNC 农业机器人,自动播种、浇灌、除草,用计算机视觉识别果实成熟度,红了就自己摘,全流程无人化。
别人阳台种菜靠手感,你的阳台是自动化农业示范基地。番茄红没红,AI 比你对象先知道:而且它不会因为你不浇水就生气。
家用版本本喵建议老老实实分三步:先「自动浇水」,再「自动补光」,最后才谈视觉。跳过前两步直接上视觉,最后一定得到一台会拍照的枯死植物。

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
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
AI 参谋部
代号:语音指挥官 真能打Home Assistant 内置 Assist 语音助手:接 Whisper(中文语音识别)+ Piper(中文语音合成),全本地跑,断网可用;再挂一个大模型(本地 Ollama 或云端 API),从「命令模板」升级成「听懂人话」。
不用背命令词,像个正常人说话就行:「把电竞房灯调成紫色,空调 26 度」:它全照办。断网?照办。数据出屋?不出。
但先说清楚:本地小模型「听懂人话」的能力和云端差一代。它能可靠处理你训练过的固定句式,遇到没见过的说法会翻车,而且很自信地翻给你看。
| 环节 | 本地方案 | 典型耗时 | 硬件门槛 |
|---|---|---|---|
| 唤醒词 | openWakeWord | 常驻,耗 CPU 很低 | ESP32-S3 即可 |
| 语音识别 STT | Whisper small / base | 1–4 秒(CPU) | x86 小主机;树莓派很吃力 |
| 理解意图 | HA 内置 intents / 本地 LLM | 0.1 秒 / 2–10 秒 | 7B 模型要 8GB 内存起 |
| 语音合成 TTS | Piper(zh_CN) | 0.3–0.8 秒 | 很低,树莓派都行 |
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
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
- HA 里「设置 → 设备与服务 → 添加集成 → Wyoming Protocol」,分别填 10300 / 10200
- 「设置 → 语音助手」创建助手,选中文、选 Whisper/Piper,先用内置 intents 跑通「开灯 / 关灯 / 调亮度」
- 想更聪明:接本地 Ollama(qwen 7B 级)或云端 API:但先想清楚数据边界:语音送云端就等于把家里的对话送出去了
- 硬件入口三选一:手机 App 直接喊、ESP32-S3 语音盒子(约 ¥100)、官方 Voice Preview Edition 开源硬件
绝密通信网
代号:量子通道(伪) 真能打Tailscale(GitHub: tailscale/tailscale)组网:基于 WireGuard 的加密专线,手机和堡垒连进同一个「内网」,人在公司也能安全远程,个人使用免费,不用开公网端口、不用路由器改设置,CGNAT 大内网也能穿透。
不开一扇公网端口,黑客在门口转三圈找不到门:这门是量子态的,只有你自己摸得着。
它在这一层的价值经常被低估:真正的远程入口只有一条,攻击面就只有一个;反过来,如果你为了远程控制把 HA 的 8123 端口映射到公网,等于把家门钥匙挂在门上。
# 堡垒主机(Linux / NAS,装 tailscale 客户端)
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up --advertise-routes=192.168.1.0/24 --accept-routes
# 只广播「需要访问的网段」,别广播全部
# Windows 主机:直接装官方客户端,登录同一账号
# 手机 / 笔记本:应用商店搜 Tailscale,登录即入网
// 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"]
}
}
- 所有设备登录同一个账号,就自动组成加密内网
- HA App 的服务器地址填堡垒的 Tailscale IP(100.x.x.x)
- 广播子网路由后,去 Tailscale 管理台点一次「批准路由」
- 给设备打 tag,配 ACL。 不做这步,任何一台设备被控了你全家内网就通了
军火库 · 开发板选型
开发板是堡垒的「兵种」。别只盯一块板。不同岗位配不同装备,才是折腾的正确姿势。价格均为市场参考价(元,2026 年)。
| 装备 | 价格 | 岗位 | 适合干什么 | 备注 |
|---|---|---|---|---|
| ESP32-S3 | 35–60 | 主力干将 | 语音盒子、灯控中枢、多传感器节点 | 性能最强,WiFi + BLE |
| ESP32-C3 Super Mini | 10–15 | 侦察兵 | 每屋一个传感器节点、门磁、插座 | 白菜价,量大管饱 |
| ESP32-C6 | 30–40 | 未来战士 | WiFi6 + Thread,为 Matter 生态预备 | 上新不追新,够用优先 |
| XIAO ESP32-S3 Sense | 60–80 | 特种兵 | 带摄像头:门口、宠物、植物监控 | 体积指甲盖大 |
| ESP32-CAM | 20–30 | 廉价哨兵 | 最便宜的摄像头板,接 Frigate 做 AI 识别 | 画质够用,注意散热 |
| 树莓派 5 | 400–500 | 参谋总部 | Frigate + 语音服务 + 激光炮塔的控制算力 | 生态最成熟,但跑 AI 仍吃力 |
| 二手迷你主机 i3/i5 七代以上 | 200–400 | 中央智脑宿主 | Home Assistant + Frigate 一起跑 | 比树莓派更能打,强烈推荐 |
| M5Stack Atom | 60–120 | 快速原型 | 带屏带壳免焊接,桌面控制按钮 | 适合演示和初学 |
| Pi Pico 2 W | 20–30 | 极简工兵 | 单点控制、极简任务 | WiFi 较弱,别当主控 |
| Google Coral USB | 400–700 | 退役老兵 | 早年 Frigate 加速标配 | 驱动 2026 年 4 月已归档,新装机别买 |
配装口诀:中枢用迷你主机,节点用 ESP32-C3,语音和主力用 S3,视觉用 CAM 或 XIAO Sense:整套配齐不到一块旗舰显卡的钱。
网络分区:把 20 台来路不明的设备关进笼子
这一节最容易被跳过,也最容易被后悔。你买的每个智能设备都是一台连着你家网的计算机,固件里跑着不知道谁写的代码。把它们和你的电脑手机放在同一个网段,等于让陌生人跟你的相册共用一间宿舍。做法不难:分三个区。
防火墙 + DHCP
反向上,只有堡垒主机能主动连 IoT 区
只允许单向连堡垒的 8123 / 1883 / 6053
禁止访问外网(需要时按设备放行)
只允许 Frigate 拉 RTSP
这条最有用:堵死摄像头「回传厂商云」
反例(别做):把 HA 的 8123 端口在路由器上做端口映射,或用厂商的免费 DDNS + 端口映射。
落地:不用企业级设备也能做到
# 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'
运维:这座堡垒会怎么坏,以及你怎么知道
自动化系统有个特点:坏的时候不报警,只是「不动」。所以运维的重点不是修,而是让它坏了你能立刻发现。这一节是三张表:会怎么坏、怎么查、以及怎么备份才能救回来。
一、故障排查表(按症状查,别按猜测查)
| 症状 | 最可能的原因 | 怎么确认 | 怎么修 |
|---|---|---|---|
| 设备随机掉线,一会儿又回来 | 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 丢了等于从零重搭。/backup,把它同步到 NAS 或另一台机器。别只留在主机上。主机挂了备份一起没。# 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 天没有新备份就发一条通知给自己
# (备份任务静默失败是最常见的坑,日志里没人看)
三、怎么知道它坏了:三条低成本监控
三档扩军预算
按扩军规模分三档,每档都是「装完立刻能爽」的完整闭环,不用一次到位,先新兵后将军。价格按 2026 年淘宝/拼多多常见成交价估算,不含摄像头主机这种可复用设备。
新兵级
- Home Assistant 装进现成 NAS / 旧电脑(¥0)
- 2 块 ESP32-C3(¥30)+ 2 颗 LD2410(¥60)
- 温湿度 + 光照传感器(¥40)
- 2 个继电器插座(¥60)+ WS2812 灯带 5 米(¥50)
- 5V 2A 电源 ×3(¥45)+ 杜邦线与洞洞板(¥30)
- 手机 App 远程 + 「人走灯灭」自动化(¥0)
上尉级
- 新兵级全部 + 窗帘电机(RF433 改造,¥500 / 两窗)
- ESP32-CAM(¥30)+ Frigate:边境防线开工
- 语音盒子(ESP32-S3,¥100)+ Assist 离线中文语音
- Zigbee 协调器(¥100)+ 门磁温湿度 4 件(¥150)
- Tailscale 远程(¥0)+ 离家自动布防
- PoE 交换机与网线(¥300,能拉线就拉)
将军级
- 上尉级全部 + 二手迷你主机(¥400,Frigate 主力)
- IP 摄像头 ×3(¥600)+ 硬盘 4TB(¥500)
- 宠物补给线:喂食器 + 称重(¥300)
- 农业前线:ESP32 智能种植箱起步(¥400)
- UPS 不间断电源(¥400,这一项别省)
- 光子近防炮:激光灭蚊系统(¥200 整活 / ¥2000 认真)
电费账:这套东西一年要花多少钱
很多人担心「一堆设备常年开着电费会不会很高」。实际算一下,这是本喵觉得最该被说清、最少被说的一件事(按 0.6 元/度估算):
| 设备 | 功率 | 数量 | 年耗电 | 年电费 |
|---|---|---|---|---|
| ESP32 节点(雷达/传感器) | 0.7W | 6 | 36.8 度 | ≈ ¥22 |
| 中枢主机(迷你主机常开) | 12W | 1 | 105 度 | ≈ ¥63 |
| 摄像头 ×3 | 5W | 3 | 131 度 | ≈ ¥79 |
| Zigbee 协调器 | 1W | 1 | 8.8 度 | ≈ ¥5 |
| 合计 | — | 11 台 | 282 度 | ≈ ¥169 / 年 |
对比一下:一台常开的电热水器一年约 1000 度。也就是说这套堡垒的全部电费,折合每天不到五毛。而它帮你省的可能是忘记关的空调和灯。真正的成本不是电费,是你的周末。
行动路线图
一周一个里程碑,每步都有实物验收,绝不烂尾。堡垒不是一天建成的,但可以一个周末开工。每一格写清了「这周结束你手上有什么」,做不出来就停在那儿,别往后赶。
has_target 随你进出翻转,HA 里能看到这个实体。本喵的实话:哪些值得买,哪些是智商税
上面九个战区听起来什么都能做,但现实里有一大半「智能家居」产品买了会后悔。这一节不讨好任何厂商,只讲本喵和朋友真踩过的。
| 东西 | 结论 | 为什么 | 替代方案 |
|---|---|---|---|
| 带屏智能音箱(控制中枢那种) | 不建议 | 它的「智能」全在云上,断网变砖;而且会把你家当成它的数据源 | 旧平板贴墙上当仪表盘,本地可控 |
| 智能冰箱 / 智能镜子 / 智能晾衣架 | 纯智商税 | 加一块屏就贵两千,那块屏你三个月后不会再碰 | 普通款 + 一个 50 块的温湿度传感器 |
| 必须连厂商云才能用的设备 | 买前必查 | 厂商跑路/停服 = 你的设备变砖。这是真实发生过的,不是假设 | 买前搜「型号 + 本地接入 / Tasmota / ESPHome」 |
| 订阅制的「AI 摄像头」 | 不建议 | 月费买的是云识别,而本地 Frigate 免费且更私密 | 普通 ONVIF 摄像头 + Frigate |
| 全屋智能面板(嵌墙那种) | 慎重 | 贵、锁死生态、装修后再改要砸墙 | 墙面留网口 + 旧平板,随时能换 |
| WiFi 电池传感器 | 别买 | 两周换一次电池,换到你放弃自动化 | Zigbee 同类,一两年换一次 |
| 智能灯泡(能调色温) | 推荐 | 单价低、效果立竿见影、坏了随时换 | 本地协议款,别买只支持厂商 App 的 |
| 智能插座 | 最推荐 | 最便宜的自动化入口,把老电器直接变智能 | 选能刷 Tasmota/ESPHome 的型号 |
| 毫米波存在雷达 | 推荐 | 它解决的是「人还在但不动」这个自动化最大的痛点 | LD2410,别一上来买最贵的 |
| 成品喂食器 | 看型号 | 能刷机的型号很好用,不能刷的等于租了个云服务 | 先查拆机资料再买 |
还有三种情况,本喵建议你根本别开始
堡垒工程局 · 温馨提示
关于本方案「武器系统」的正式说明
- 本方案所有「武器」均以杀虫、吓退、取证为己任。激光打蚊子是科学,打人是犯罪,前者建议、后者禁止。
- 「无人值守」指设备无人值守,不是指家里没人时小偷随便进:防御系统会报警、录像,并通知你和 110。
- 涉及 220V 市电的改造(插座、开关、布线)请找持证电工。这篇给的是原理与选型,不是施工许可。
- 激光、水泵、加热类设备一律不得无人值守长时间运行;所有执行器都要有「失效即安全」的默认状态。
- 宠物满意度不作保证:猫主子对自动喂食器的真实评价,以它实际打翻的次数为准。
- 番茄是否好吃不作保证:AI 只管种,不管厨艺。
- 最重要的一条:这套技术学会了,你想怎么玩都可以。但请合法地玩,安全地玩。
开源弹药库(GitHub)
本文所有方案都来自这些仓库,按需取用,全部免费。项目仍在活跃更新,动手前先看 README 与 release notes:尤其是 Frigate 和 Home Assistant,大版本之间常有破坏性变更。
图注:文中三张插画为本喵请画师生成的示意概念图(不是实物照片);架构图、数据流图、链路图与网络分区图全部用 HTML/CSS 手绘,不是 AI 出图。因为技术图里的每个字、每条连线都必须能被改,也必须对。