自动化门禁改装方案

1. 拆解门禁控制器进行走线

按键的本质就是对主板上的两个触点进行短接。如果你的门禁是按键形式的,拆开后是一个四个针脚的微动按键,那么只需要短接对角的两个触点,然后再断开,就等同于按钮的一次点按,如果有多个按钮则需要引出多跟导线。

从按键触点上引出导线后,接入一个可以远程控制的继电器模块,那么只需要控制继电器开断一次就能实现门禁按钮的点按。

虽然可以通过开发板手搓一个继电器,但是我推荐购买易微联的成品继电器模块,如果有多个按钮的话也有多路继电器可以选择,并且可以很方便的接入 Homeassistant。

购买继电器的时,市面上通常有两种继电器:一种是独立供电的(通常为 3~12V 直流或者 5V 交流),继电器通断模块控制的电路和继电器本身的供电是分开的;还有一种是 220v 输入 220v 输出的,继电器与被控电路是串联关系,继电器会控制 220V 电路的开合,这种通常用于灯具或者直接接入 220v 的家用电器使用。

选择的时候一定要选择那种继电器本身是独立供电的,否则就相当于直接将 220V 接入了门禁系统。

2. 将继电器接入 Homeassistant 实现远程控制

将易微联继电器接入 Homeassistant 很简单,搜一下 Sonoff 插件即可。如果你的门禁是单按键,那么其实到这一步已经可以结束了,只需要远程控制继电器开关一下就能实现远程开门。但是如果你有更高的需求,并且想实现后续自动感应门铃并开锁,那么就还需要一定的程序编排才能实现。

这里有两个思路:

思路一:使用 MQTT 模块创建一个按钮实体,点按按钮后会发送一条 MQTT 消息,比如 door/open。然后我们再 HA 上创建一个自动化,触发条件为接收这条消息,触发执行对继电器的打开,然后等待 200ms 后关闭继电器,这就实现了操作简化,我们不需要反复操作继电器开关,点按按钮即可。

思路二:如果你的门禁按钮过多,需要每次开门禁需要经历接通、开锁、挂断多个阶段,那么 HA 的自动化就太难编排了,最好的编排方式其实是使用 Node Red,可以实现更为灵活的自动化程序编排,参考如下:

在上面的流程中我还实现了运行状态的检测(避免重复点按操作)、操作时间的广播、在线状态的广播等。然后我们都可以在 HA 的 MQTT 模块将这些 MQTT 消息转为实例进行展示。

3. Tasmota + ESP32/8266 监控门禁响铃 实现自动化

配件:

  • ESP32 / ESP8266
  • MAX4466 麦克风模块(只提供音量大小)

接线

  • MAX4466 VCC -> ESP32/8266 3.3V
  • MAX4466 GND -> ESP32/8266 GND
  • MAX4466 OUT -> ESP32/8266 任意 ADC 引脚(8266 只有 A0 引脚是 ADC 引脚,ESP32 的推荐 GPIO32~39,不会被 Wifi 干扰)

刷入 Tasmota 固件(Tasmota 是一个支持可视化配置,不需要写代码就可以驱动 ESP 模块引脚和接收信号的固件):https://tasmota.github.io/install/

进入 Tasmota 后台,将接入的 ADC 引脚设置为 ADC Input。

进入控制台,输入如下指令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Rule1
ON ANALOG#A1>%var1% DO
Backlog
var1 %value%;
publish door/open %value%;
var2 %value%; add1 200; sub2 200;
ENDON

ON ANALOG#A1<%var2% DO
Backlog
var2 %value%;
publish door/open %value%;
var1 %value%; add1 200; sub2 200;
ENDON

指令解释:

  • Rule1 表示创建规则1;
  • ON 表示规则的触发条件,匹配条件后执行 ENDON 之前的所有语句;
  • ANALOG#A1 表示通过 ADC(模拟数值转换器)输出的模拟值1,你可以通过 status10 来查看具体输出序号和值是多少;
  • Backlog 表示执行多行指令,中间使用 ; 间隔;
  • var[x] 表示使用变量 x;
  • add[x] 表示为变量 x 加上多少数值;
  • sub[x] 表示为变量 x 减去多少数值;

这段代码连起来的意思是当 ANALOG#A1 信号发生改变时,与上一次改变的数值幅度超过 400,就发布一条 door/open 的 MQTT 指令,指令载荷为当前的信号值。

还记得我们上一步创建的