之前老家院子比较大,传统布线成本过高,因此自制一个智能开关实现远程控制。
主控用ESP12S模块,交流变直流电源用金升阳24V的隔离电源模块,辅助电路EMI苻合CE,UL标准。
主要是ESP8266成本低,功耗也很低,待机只有0.5瓦,
全年也是0.5*24*365=4380瓦/时,也就是4.38度电,约合3块钱电费
供电采用零火双线设计,安全有保证,(单火线供电会有间歇放电风险)
继电器额定电流为10安,建议接入不超过250W的设备
引出继电器L-NC(常通),L-NO(常断),两个引脚,为输出火线
用电设备(灯)火线接L-NC(常通)为默认通电,继电器动作时为断电
用电设备(灯)火线接L-NO(常断)为默认断电,继电器动作时为通电
市电L引脚与继电器公共端连通,两个N引脚 互连通,
若原输出控制线只有一根火线时,可以只接输入端的火线和零线不用接输出端零线
输入有三个开关,
两边两个独立开关,可以自由定义,用于远程控制。
两边的LED联动对应的开关,LED亦可单独联动远端设备(建议这么做,可以显示远端设备的工作状态)。
中间的LED跟继电器状态锁定不可定义
中间一个开关绑定本地继电器输出,保证无网络下使用。
因追求低功耗,供电用了变压器开关电源占太多空间,只能装一个继电器输出了,
本地只能控制一个用电设备(灯)所以自称三开一控
实物如图
源码
substitutions:
device_name: i3o1a #设备名称
friendly_name: i3o1a
# ${friendly_name} 继电器
# ${friendly_name}_led 继电器开关指示灯
# ${friendly_name}_l_led 左边开关指示灯
# ${friendly_name}_r_led 右边开关指示灯
# ${friendly_name}_btn 中间开关按键
# ${friendly_name}_l_btn 左边开关按键
# ${friendly_name}_r_btn 右边开关按键
esphome:
name: ${friendly_name}
friendly_name: ${friendly_name}
esp8266:
board: esp01_1m
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "WvhoRbY4nJyVOca81F9/co/BcDcnIA9d/IR8MGgu3Ao=" ##连接 home assistant ,需要此密钥验证
reboot_timeout: 0s ##如果与home assistant失去连接指定时间后自动重启,0s为此功能关闭,按需求启用。建议关闭该功能
ota:
password: "99482e4de4682cfd272966428701314f" ##使用ESPHOME 插件更新固件时,需要此密钥验证
wifi:
ssid: wushi-2.4
password: ++0123--
##manual_ip: ##此设备IP地址为手动设置
##static_ip: 192.168.3.130 ##固定此设备IP地址为192.168.1.100;
##gateway: 192.168.3.1 ##路由器、网关地址;
##subnet: 255.255.255.0 ##子网掩码;
reboot_timeout: 0s ##如果WIFI失去连接指定时间后自动重启,0s为此功能关闭,按需求启用。建议关闭该功能
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "${friendly_name}" ##无法连上网络时会开启此热点
password: "AA0123bb--" ##热点密码
captive_portal:
web_server: ## web控制,添加了这2行,就可以在网页端输入ip打开设备设置页面;
port: 80
local: true
##http_request: ##启用http 功能,在失去接入HA,或者外网时,按键依然可以向指定地址发送命令
##useragent: esphome/device
light:
- platform: binary
name: "${friendly_name}"
id: ${friendly_name}
output: light1
on_turn_on:
- light.turn_on: ${friendly_name}_led
on_turn_off:
- light.turn_off: ${friendly_name}_led
- {platform: binary, name: "${friendly_name}_l_led", id: "${friendly_name}_l_led", output: light2}
- {platform: binary, name: "${friendly_name}_r_led", id: "${friendly_name}_r_led", output: light3}
- {platform: binary, name: "${friendly_name}_led", id: "${friendly_name}_led", output: light4}
output:
- {id: light1, platform: gpio, pin: GPIO15}
- {id: light2, platform: gpio, pin: GPIO13}
- {id: light3, platform: gpio, pin: GPIO12}
- {id: light4, platform: gpio, pin: GPIO14}
binary_sensor:
- platform: gpio
pin: {number: GPIO0, mode: INPUT_PULLUP, inverted: True}
name: "${friendly_name}_btn"
id: ${friendly_name}_btn
on_release:
then:
- light.toggle: ${friendly_name}
## - http_request.post: http://i3o1b.local/light/i3o1b_l_led/toggle ##启用http 功能,在失去接入HA,或者外网时,按键依然可以向指定地址发送命令
- platform: gpio
pin: {number: GPIO16, inverted: True}
name: "${friendly_name}_l_btn"
id: ${friendly_name}_l_btn
on_release:
then:
##- http_request.post: http://i3o1b.local/light/i3o1b/toggle ##启用http 功能,在失去接入HA,或者外网时,按键依然可以向指定地址发送命令
- light.toggle: ${friendly_name}_l_led
- platform: gpio
pin: {number: GPIO2, mode: INPUT_PULLUP, inverted: True}
name: "${friendly_name}_r_btn"
id: ${friendly_name}_r_btn
on_release:
then:
##- http_request.post: http://i3o1c.local/light/i3o1c/toggle ##启用http 功能,在失去接入HA,或者外网时,按键依然可以向指定地址发送命令
- light.toggle: ${friendly_name}_r_led