1
0
Fork 0
ha-config/esphome/front-gate.yaml

135 lines
3.5 KiB
YAML
Raw Normal View History

2022-05-11 16:41:13 +10:00
substitutions:
node_name: "front-gate"
friendly_name: "Front Gate"
esphome:
platform: ESP8266
board: esp8285
packages:
base: !include common/base.yaml
logger:
level: DEBUG
web_server:
version: 2
include_internal: true
binary_sensor:
- platform: gpio
name: "${friendly_name} Contact"
disabled_by_default: true
device_class: garage_door
id: contact
pin:
number: GPIO4
inverted: false
mode: INPUT_PULLUP
filters:
# Takes advantage of the fact that gate movement causes this GPIO pin to
# flicker (probably due to wire moving). We can use that initial change
# in state as a signal to set the cover operation. Later, when the final
# value settles (after debounces) we can set it back to idle.
- lambda: |-
if(id(gate).current_operation == CoverOperation::COVER_OPERATION_IDLE) {
id(gate).current_operation = (x ? COVER_OPERATION_CLOSING : COVER_OPERATION_OPENING);
id(gate).publish_state();
}
return x;
# during gate movement, the wire movement seems to cause the state to rapidly flicker
- delayed_on_off: 5000ms
- lambda: |-
id(gate).current_operation = COVER_OPERATION_IDLE;
id(gate).publish_state();
return x;
on_state:
then:
- cover.template.publish:
id: gate
current_operation: IDLE
- platform: gpio
pin:
number: GPIO14
mode: INPUT_PULLUP
inverted: true
name: "${friendly_name} Button"
disabled_by_default: true
on_multi_click:
- timing:
- ON for at most 1s
- OFF for at least 0.2s
then:
switch.turn_on: relay
- timing:
- ON for at least 4s
then:
button.press: restart_button # in common/base.yaml
button:
- platform: template
name: "${friendly_name} Button"
on_press:
then:
- if:
condition:
- switch.is_off: relay
then:
- switch.turn_on: relay
switch:
- platform: gpio
pin: GPIO5
name: "${friendly_name} Relay"
id: relay
disabled_by_default: true
on_turn_on:
- light.turn_on: wifi_led
- delay: 1s
- switch.turn_off: relay
- light.turn_off: wifi_led
light:
- platform: status_led
name: "${friendly_name} WiFi LED"
id: wifi_led
disabled_by_default: true
pin: GPIO12
cover:
- platform: template
id: gate
device_class: garage
name: "${friendly_name}"
lambda: "return id(contact).state ? COVER_CLOSED : COVER_OPEN;"
open_action:
- if:
condition:
and:
- switch.is_off: relay
- binary_sensor.is_on: contact # GATE IS CLOSED
- lambda: return id(gate).current_operation == COVER_OPERATION_IDLE; # GATE IS IDLE
then:
- switch.turn_on: relay
stop_action:
- if:
condition:
and:
- binary_sensor.is_on: contact
- lambda: return id(gate).current_operation != COVER_OPERATION_IDLE; # GATE IS ACTIVE
then:
- switch.turn_on: relay
close_action:
- if:
condition:
and:
- switch.is_off: relay
- binary_sensor.is_off: contact # GATE NOT CLOSED
- lambda: return id(gate).current_operation == COVER_OPERATION_IDLE; # GATE IS IDLE
then:
- switch.turn_on: relay