ESPHome 漏水检测实战:40 元做出本地加远程双通道告警,两小时接线完工
2026/9/14 2:18:19 网站建设 项目流程

ESPHome 漏水检测实战:40 元做出本地加远程双通道告警,两小时接线完工

【免费下载链接】esphomeESPHome is a system to control your ESP32, ESP8266, BK72xx, RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems.项目地址: https://gitcode.com/GitHub_Trending/es/esphome

凌晨两点,手机收到 Home Assistant 推来的 ESPHome 漏水检测告警:「厨房检测到漏水」。我看了眼摄像头画面,是洗衣机排水管渗水了。整套系统就是一块 NodeMCU、一颗漏水探头、一只蜂鸣器,硬件不到 50 元,零代码,从拆箱到第一次告警成功大概两小时。装好之后它再不用人管:水渗出来,本地蜂鸣器响,手机收到推送;就算断网,现场至少还能听见动静。

三层拆解:ESPHome 漏水检测系统到底在干什么

这套系统没什么神秘成分。探头干湿与否,本质只是一根线的电平变化,ESPHome 这边把它分成三层,各干各的事:

  • 感知层:探头相当于一个"水当钥匙的开关"。干燥时输出线是高电平,被水浸到就被拉低。配置里它就是一个gpio类型的二进制传感器,组件实现在 esphome/components/binary_sensor/,标上device_class: moisture之后,前端会显示正确的图标和状态语义。
  • 决策层:不写 if-else,交给规则引擎。状态过滤(delayed_on/delayed_off)加上 on_state 动作,就是全部判断逻辑,规则语法定义在 esphome/automation.py。你只负责声明"变 ON 做什么、回 OFF 做什么"。
  • 执行层:两条独立通道。本地用 gpio 开关驱动蜂鸣器,远程用mqtt.publish把事件推到主题上。一条通道挂了,另一条还在。

漏水检测物料清单:必须 3 件,可选 2 件

先说结论:别囤货,下面这些够用。

必须件

角色物料替代方案参考价
大脑NodeMCU ESP8266(nodemcuv2)任意带 WiFi 的 ESP32约 20 元
感知数字漏水探头(带 DO 数字输出)FC-28 + 比较器模块约 8 元
执行5V 有源蜂鸣器带三极管的蜂鸣器模块约 4 元

可选件

角色物料替代方案参考价
供电5V/1A USB 电源18650 + 充电板(需配低功耗)约 10 元
扩展额外从节点多块独立板 + ESP-NOW约 15 元/个

探头一定挑带数字输出的(有 DO 引脚那种),它是现成的开关信号。纯模拟量的裸探头要多接比较器才能判断干湿,折腾程度完全不对等。

🔧 NodeMCU 接线与烧录:从裸板到上线四步走

顺序固定:接线、烧录、联网、验证。每步都有明确的通过标准,过了再进下一步。

接线:探头对 GPIO14,蜂鸣器对 GPIO5

探头 VCC、GND、DO 三根线分别接开发板的 3V3、GND、GPIO14;蜂鸣器正极接 5V,负极接 GPIO5。有源蜂鸣器工作时电流大约 20 毫安,GPIO 直接驱动没有压力,不用额外加三极管。注意这类探头的 DO 普遍是"干时高、湿时低",所以配置里要加inverted: true,后面会看到。

烧录:主配置一次写齐

下面这段定义设备名、板型、WiFi 和 MQTT 服务器,还留了一个断网时自动回退用的 AP:

esphome: name: leak-detector esp8266: board: nodemcuv2 wifi: ssid: "YourWiFi" password: "YourPassword" ap: # 断网时自动回退成热点,方便现场调试 ssid: "leak-fallback" mqtt: broker: 192.168.1.100 # 换成你家的 broker 地址

命令行侧就一句pip install esphome,之后每次改配置,esphome run leak.yaml一条命令完成编译、烧录和重启。

联网:日志里看到两条关键信息

烧完板子自动重启连网。跑一下esphome logs leak-detector,看到 WiFi 连接成功、MQTT broker 握手成功这两条,就算通过。此时 Home Assistant 里应该能看到设备本身(探头和蜂鸣器实体在下一步定义)。

上线验证:拿水试一下

这段把探头声明为水浸类二进制传感器、蜂鸣器声明为开关,500ms 和 1 秒的延迟过滤专门防误报,和前面的配置在同一个文件里,改完重烧即可:

binary_sensor: - platform: gpio name: "厨房漏水" pin: number: GPIO14 mode: INPUT_PULLUP # 用内部上拉,外面不用再接电阻 inverted: true # 探头湿时拉低,取反后 ON 就是检测到水 device_class: moisture filters: - delayed_on: 500ms # 持续湿 500ms 才上报,滤掉飞溅 - delayed_off: 1s # 持续干 1 秒才恢复,防边缘抖动 switch: - platform: gpio name: "Alarm Buzzer" id: alarm_buzzer pin: GPIO5

验证很简单:探头泡水几秒,传感器变 ON;取出等约一秒,回到 OFF。懒得接水的话,拿杜邦线把 DO 和 GND 短一下,效果等同检测到水。两个方向都通,就算上线了。

蜂鸣器本地告警怎么写:两级策略一次配完

告警策略分两级,触发逻辑用白话说就是:如果传感器是 ON,就做这三件事;如果回到 OFF,就把蜂鸣器关掉。本地和远程是并行发出的,不互相等待:

on_state: - switch.turn_on: alarm_buzzer # 第一级:本地告警,立刻出声 - mqtt.publish: topic: home/alerts/water_leak payload: "厨房检测到漏水" # 第二级:远程推送,手机收到 - logger.log: "检测到水,本地+远程告警已触发" on_release: - switch.turn_off: alarm_buzzer

为什么本地优先?推送依赖网络,而漏水和断电断网经常结伴出现,最坏情况下只有蜂鸣器还活着。想要更吵,可以在 on_state 里加一段循环蜂鸣的 repeat 动作,我这边常亮常响已经够用了,就不展开了。

⚠️ 漏水检测踩坑实录:我实际翻过的三个车

这三个坑文档里都不写,每个都花了点时间才找出来。

抖动误报。我一开始没加任何过滤,水花溅到探头上,状态一分钟翻四次,Home Assistant 通知刷得我烦。后来发现 ESPHome 的二进制传感器自带 delayed_on 过滤,加上 500ms 之后毛刺全没了。如果你装在淋浴区那种潮湿位置,可以直接加到 1s,报警慢一点不亏。

供电不稳。我最早用了一个杂牌 5V 口同时给蜂鸣器和主控供电,蜂鸣器一响,日志里就出现 brownout 复位——WiFi 模块发射瞬间电流大,电压被拉垮了。后来换成 5V/1A 的独立电源,再没出过问题。想省钱的,至少在主控电源两端并一颗 100uF 电容。

断网兜底。我最初以为断网时推送还能靠缓存发出去,显然不能。后来加了一个 status 类型的二进制传感器:设备状态变 OFF 时,本地蜂鸣响 60 秒。逻辑就是:说不上话,至少让现场的人听见。注意 status 在开机组件未就绪时也会是 OFF,这段逻辑开机时会触发一次,可以忍,也可以加一个运行时长超过 10 分钟才允许触发的条件:

binary_sensor: - platform: status name: "Device Status" on_state: - if: condition: - binary_sensor.is_off: Device Status then: - switch.turn_on: alarm_buzzer # 断网兜底:本地告警 - delay: 60s - switch.turn_off: alarm_buzzer

进阶:从 1 个点扩到全屋

一个点只是起点,演进路径三步,不用一次做完:

  1. 单板多探头:厨房和洗衣机挨得近,就让一块板带两颗探头,配置里多写一个 gpio 二进制传感器,换个引脚号即可。
  2. 配置按房间分包:文件越来越长之后,用packages拆成每房间一个文件,主配置只负责引用,改哪里都不会互相打架:
packages: kitchen: !include kitchen_leak.yaml bathroom: !include bathroom_leak.yaml
  1. 多板无线组网:点位离得远了,就多加几块板,板间走 ESP-NOW 协议,或者干脆每块板各自上报 MQTT。再往上想电池供电,就得上低功耗加深度睡眠,定期唤醒采样,那是另一个话题,此处点到为止。

收束

又是凌晨,厨房的灯灭了。但我清楚,那根排水管再渗一次,蜂鸣器会比手机响得更早。

本文配置基于 ESPHome 2026.10 代码库验证,所用语法向下兼容 2023.12 及以上版本。

【免费下载链接】esphomeESPHome is a system to control your ESP32, ESP8266, BK72xx, RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems.项目地址: https://gitcode.com/GitHub_Trending/es/esphome

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询