1.背景
目的: 老式门禁接入hass智能家居,实现门禁智能控制
物料:
* 某宝ESP8266集成板HW-62 1个,本板集成了电源模块(输入DC 7-30V)+ESP8266+继电器一个,以下简称ESP集成板(买了很久了,这次才利用上)
* 电源适配器 12V DC 1个
软件: 已经在用HomeAssistant(版本0.105.2)(以下简称hass)
控制模块有很多选择,都是控制单元驱动继电器。NodeNUC+继电器可能是更流行的方案
ESP8266芯片为控制模块,继电器为操作模块
某宝ESP8266集成板 HW-622 是老早之前买的一直没使用,本次可以利用上
他集成了宽电压输入的电源模块、ESP8266芯片、继电器,经过万能表检查,驱动继电器工作的GPIO是GPIO4

实现原理:
ESP8266刷ESPEasy系统,连上wifi,作为MQTT客户端接入hass
继电器接门禁实现具体控制
2.门禁-室内机改装
已经确定这套老式门禁无需摘话机直接按开门按键就能开门
所以只需要短接1s开门按键就可以开门了

把开门按钮的2条线引出
这2条线就接继电器,公共端COM、常闭触点NC
很简单的电路图就不画了
3.ESPEasy
ESP8266刷ESPEasy系统
本例版本为mega-20200204
刷机教程、连接方法就不累述了,网上搜
下面列一些主要配置
3.1 Config
UnitName设置为 esp-entrance-guard
这个值重要,MQTT会用到

3.2 Controllers
MQTT加这个 Home Assistant (openHAB) MQTT
不明白的配置项保持默认值不去改动,只改动明确需要的
Enabled这个必须勾选
3.2 Hardware
本ESP集成板使用了GPIO4作为继电器的驱动IO口
ESPEasy的I2C Interface默认使用GPIO-4 GPIO-5本板就冲突了
本例改为了空闲的12、13
另外wifi信号灯本ESP集成板是GPIO2

3.3 Hardware
增加一个“Switch input – Switch”设备
名字为 Door
GPIO为 GPIO4 这个是和继电器IO连接的

勾选 Send to Controller

增加完成后

3.4 Tools高级选项
ESPEasy默认未启用Rules,需要在这里打开
Rules 启用
MQTT Retain Msg 启用
MQTT use unit name as ClientId 启用
Use NTP 启用
NTP Hostname ntp1.aliyun.com

3.5 Rules
必须在3.4节中打开Rules,才能看到本菜单
规则解释
当Door#State状态为1的时候设置启用timer1时间2s
当time1被激活的时候设置GPIO4的值为0,并在MQTT中推送GPIO为0(因为打开门禁的时候GPIO值为1)
on System#Boot do
GPIO,4,0
endon
on Door#State=1 do
timerSet,1,2
endon
on rules#timer=1 do
gpio,4,0
Publish %sysname%/gpio/4,0
endon
Publish %sysname%/gpio/4,0
这个是解决hass中复位的问题,这样上电后MQTT读取的GPIO的值为0
如果不这样做,停电后再上电,读取到MQTT中GPIO的值为1就会触发一次继电器
这样做后hass中也可以不写任何“复位开关”的自动化配置
4.HomeAssistant
switch:
- platform: mqtt
name: esp_entrance_guard
state_topic: esp-entrance-guard/Door/State
command_topic: esp-entrance-guard/gpio/4
payload_on: "1"
payload_off: "0"
state_on: "1"
state_off: "0"
optimistic: false
qos: 0
retain: true
# 界面显示中文
homeassistant:
customize:
switch.esp_entrance_guard:
friendly_name: "门禁"
展示

图解:
* 左边是hass,右边是MQTT客户端,下面是ESP集成板
* 黄灯亮代表继电器被激活
* 在对MQTT topic esp-entrance-guard/gpio/4 发送 1 继电器就被激活了
* 因为门禁开关是一个复位类型的开关,利用ESPEasy的rule脚本自动重置状态
* 图中有个错误gpio/4状态没有联动,这个问题已经解决见3.5节,解决之前录制的
小贴士
- 调试MQTT客户端推荐“MQTT Explorer”因为他能直接看到所有Topic的活动情况,从而大大提高调试效率
- 如果拿到一个未知的ESP8266集成板,不清楚这个模块和继电器如何连接的,首先还是尽量找到卖家或厂商拿到说明书。万一没说明书,用万能表的测二级管档或电阻档能自己找出来