本帖最后由 xlsj519 于 2019-12-23 17:48 编辑
一、起因
家里装的电动窗帘,带射频遥控的。其中一个遥控功能自己坏了,只能通过手拉方式启动窗帘的电动开合。后来问卖家,卖家说可以通过窗帘电机下面的一个6针的水晶头插座引出线来,实现对电动窗帘的控制。
2-3针脚短接是开,2-4针脚短接是关,2-5针脚短接是停,要求短接一下后松开。与窗帘遥控器上的按键是一一对应的。
二、软硬件环境
(一)硬件
硬件是通过8266开发板和一个3路继电器模块实现的。通过8266分别控制3路继电器吸合,模拟按键按下从而实现对窗帘的控制。
硬件成本:
8266开发板9.9元
三路继电器8元
外加一个5V的USB电源。
硬件连接方式:
1、将继电器模块上的3路COM公共端连接起来。
2、通过一个6针水晶头的电话线将电动窗帘4根控制线引出
窗帘引出的控制线与继电器连接
2脚-----------------------继电器COM端
3脚-----------------------继电器NO1(第一个继电器的常开端)
4脚----------------------继电器NO2(第二个继电器的常开端)
5脚----------------------继电器NO3(第三个继电器的常开端)
3、使用杜邦线将8266模块与3路继电器模块进行连接
8266模块的GND-----------继电器GND
VV脚(5V电源输出)------继电器VCC
D5脚-----------------------继电器第1路输入
D6脚----------------------继电器第2路输入
D7脚----------------------继电器第3路输入
4、找个5V的USB充电器通过microUSB线给8266模块供电。
(二)软件
我是用的蜗牛星际装的PVE,然后装的黑群晖,在群晖DSM里通过DOCKER方式安装的homeassistant和MQTT。
一开始用的tasmota,通过MQTT接入HASS。DSM我设置的晚上12点至早上6点期间关机。结果DSM开机时,8266模块第一次与MQTT建立连接时,会把三个继电器都开合一次,导致窗帘自己乱动。通过在tasmoat里更改PowerOnState、PowerRetain 1等设置依然没有解决,后来决定用ESPHOME。
通过使用ESPHOME,个人感觉有几点比较方便:
一是直接接入HASS,不通过MQTT,少个环节少些问题,关键是解决了初次连接MQTT服务器时所有继电器自己吸合一次的问题。
二是第一次通过串口线刷入ESPHOME固件后,以后可以直接通过ESPHOME直接OTA升级,更改程序、调试等十分方便,不用像tasmota需要更改yaml文件,再重启HASS。
三是ESPHOME可以直接在配置文件里可以编程,有的HASS里的配置和命令直接在ESPHOME的配置里就可以实现。
三、实现方法
下面直接上ESP里的配置文件代码:
esphome:
name: ys1 #Han Chuanglian
platform: ESP8266
board: nodemcuv2
wifi:
ssid: "XXXXXX"
password: "MMMMM"
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ys1 Fallback Hotspot"
password: "XXXXXXX"
captive_portal:
# Enable logging
logger:
# Enable Home Assistant API
api:
password: "XXXXXX"
ota:
password: "XXXXXXX"
web_server:
port: 80
switch: # 组件类型:开关
# 定义D5、D6、D7分别对应三个继电器
- platform: gpio
pin: D5
id: relay1
- platform: gpio
pin: D6
id: relay2
- platform: gpio
pin: D7
id: relay3
#通过临时实体实现继电器合上0.8秒后再松开,模拟开、关、停三个按键的操作
- platform: template
name: "Curtain01_Open"
icon: "mdi:code-tags"
turn_on_action:
- switch.turn_on: relay1
- delay: 800ms
- switch.turn_off: relay1
- platform: template
name: "Curtain01_Close"
icon: "mdi:mixer"
turn_on_action:
- switch.turn_on: relay2
- delay: 800ms
- switch.turn_off: relay2
- platform: template
name: "Curtain01_Stop"
icon: "mdi:checkbox-blank"
turn_on_action:
- switch.turn_on: relay3
- delay: 800ms
- switch.turn_off: relay3
# 以下命令实现窗帘以四分之一的幅度实现分段开合。我是通过计算窗帘关闭需要的总时长,然后除以四来实现的
# 窗帘开四分之一
- platform: template
name: "Curtain01_halfOpen"
icon: "mdi:window-open"
turn_on_action:
- switch.turn_on: relay1
- delay: 800ms
- switch.turn_off: relay1
- delay: 2000ms
- switch.turn_on: relay3
- delay: 800ms
- switch.turn_off: relay3
# 窗帘关四分之一
- platform: template
name: "Curtain01_halfClose"
icon: "mdi:window-open"
turn_on_action:
- switch.turn_on: relay2
- delay: 800ms
- switch.turn_off: relay2
- delay: 2000ms
- switch.turn_on: relay3
- delay: 800ms
- switch.turn_off: relay3
#通过COVER组件使其在HASS以电动窗帘方式控制。其实不加这个也可以,上面的内容已经可以在HASS分别加上三个独立的开关了
cover:
- platform: template
name: "Han cover"
open_action:
- switch.turn_on: relay1
- delay: 800ms
- switch.turn_off: relay1
close_action:
- switch.turn_on: relay2
- delay: 800ms
- switch.turn_off: relay2
stop_action:
- switch.turn_on: relay3
- delay: 800ms
- switch.turn_off: relay3
optimistic: true
assumed_state: true
代码可能有点繁琐了,下一步精简优化下
然后在HASS里增加组件就可以了
刷ESPHOME的方法论坛里,这里就不贴上了
|