玩玩智能家居5:DIY水浸传感器

之前总是担心厨房水槽下水管会漏水,所以直接用雨水传感器做了一个水浸传感器,这样在漏水的时候,就可以直接收到通知,从而及时去检查并修复下水管漏水问题。

要 DIY 一个水浸传感器还是很简单的,只需要一个雨水传感器和一个 NodeMCU 就可以了。

雨水传感器

给 NodeMCU 刷上 ESPEasy,配置一个 Switch 设备,将 GPIO 设置为 NodeMCU 与雨水传感器 DO 针脚连接的 IO 就可以了。

然后再在 Domoticz 中配置好一个 Virtual Sensor,类型改为 Switch 就可以了。

报警声音

有些时候推送通知会比较慢,又或者手机不在身边,那么是否可以直接在 NodeMCU 这一端直接使用声音报警呢?这很简单,加个蜂鸣器模块,再写点代码就好了。

先给 ESPEasy 写个蜂鸣器插件,关键代码就是使用 Arduino 的 tone 函数了:

#define Plugin158_Do 262
#define Plugin158_Re 294
#define Plugin158_Mi 330
#define Plugin158_Fa 349
#define Plugin158_Sol 392
#define Plugin158_La 440
#define Plugin158_Si 494

static int Plugin158_TonesFreq[] = { Plugin158_Do, Plugin158_Re, Plugin158_Mi, Plugin158_Fa, Plugin158_Sol, Plugin158_La, Plugin158_Si };

static void Plugin158_PlayTones(int taskIndex) {
  int pin = Settings.TaskDevicePin1[taskIndex];

  char *tonesStr = "616161";

  pinMode(pin, OUTPUT);
  int len = strlen(tonesStr);
  if (Plugin158_TonesPlayingCharIndex < len) {
    char c = tonesStr[Plugin158_TonesPlayingCharIndex];
    int index = c - '0';
    if (index > 0 && index <= 7) {
      tone(pin, Plugin158_TonesFreq[index]);
    } else {
      noTone(pin);
    }
  }

  Plugin158_TonesPlayingCharIndex++;
  if (Plugin158_TonesPlayingCharIndex >= len) {
    Plugin158_TonesPlayingCharIndex = 0;
  }
}

为了能在有漏水时,马上报警,或者为了在没有网络情况不好时也能马上使用声音报警,需要在 ESPEasy 的本地规则里检测到漏水时来报警。

要实现这个功能,只需要使用 ESPEasy 的 Rules 功能,在 Rules 里检测到有漏水时,直接调用蜂鸣器插件进行报警:

on WATER#VAL=1 do
    buzzer,2,1
endon
on WATER#VAL=0 do
    buzzer,2,0
endon

更好的选择

当然,如果已经有小米网关了,可以直接购买 Aqara 水浸传感器,使用电池,方便部署,还美观 🙈。

而且小米的东西也可以不借助于 Domoticz 直接使用,可以将水浸传感器设置自动化,触发时直接使用小米网关播放警报音。

参考资料

  1. Domoticz
  2. Arduino - Tone
发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>