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
-w604

实现原理:
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会用到

-w864

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

-w874

3.3 Hardware

增加一个“Switch input – Switch”设备

名字为 Door
GPIO为 GPIO4 这个是和继电器IO连接的
-w935

勾选 Send to Controller
-w681

增加完成后
-w1095

3.4 Tools高级选项

ESPEasy默认未启用Rules,需要在这里打开

Rules 启用
MQTT Retain Msg 启用
MQTT use unit name as ClientId 启用
Use NTP 启用
NTP Hostname ntp1.aliyun.com

-w952

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: "门禁"

展示

1581918354074087
图解:
* 左边是hass,右边是MQTT客户端,下面是ESP集成板
* 黄灯亮代表继电器被激活
* 在对MQTT topic esp-entrance-guard/gpio/4 发送 1 继电器就被激活了
* 因为门禁开关是一个复位类型的开关,利用ESPEasy的rule脚本自动重置状态
* 图中有个错误gpio/4状态没有联动,这个问题已经解决见3.5节,解决之前录制的

小贴士

  • 调试MQTT客户端推荐“MQTT Explorer”因为他能直接看到所有Topic的活动情况,从而大大提高调试效率
  • 如果拿到一个未知的ESP8266集成板,不清楚这个模块和继电器如何连接的,首先还是尽量找到卖家或厂商拿到说明书。万一没说明书,用万能表的测二级管档或电阻档能自己找出来