c3225ab919
Adding additional code to immediately set the status of the garage door when the status of the fully open or fully closed sensor changes
162 lines
3.7 KiB
YAML
162 lines
3.7 KiB
YAML
esphome:
|
|
name: garage
|
|
platform: ESP8266
|
|
board: nodemcuv2
|
|
|
|
logger:
|
|
level: INFO
|
|
|
|
ota:
|
|
password: "143fd33979958ada2bb06df1622d5a4d"
|
|
|
|
wifi:
|
|
ssid: !secret ssid
|
|
password: !secret pass
|
|
fast_connect: true
|
|
|
|
mqtt:
|
|
broker: henry.int.jnf.me
|
|
username: esphome
|
|
password: esphome
|
|
topic_prefix: esphome/garage
|
|
|
|
dallas:
|
|
- pin: D7
|
|
|
|
sensor:
|
|
- platform: dallas
|
|
address: 0x7701143100966C28
|
|
name: "Freezer"
|
|
id: garage_freezer
|
|
- platform: dallas
|
|
address: 0x200114310A086F28
|
|
name: "Garage"
|
|
id: garage_temp
|
|
- platform: ultrasonic
|
|
trigger_pin: D5
|
|
echo_pin: D8
|
|
id: garage_spot_1
|
|
internal: true
|
|
- platform: ultrasonic
|
|
trigger_pin: D3
|
|
echo_pin: D4
|
|
id: garage_spot_2
|
|
internal: true
|
|
|
|
text_sensor:
|
|
- platform: template
|
|
name: "Garage Door State"
|
|
id: garage_door_state
|
|
lambda: !lambda |-
|
|
if (id(garage_door_open).state && id(garage_door_closed).state) {
|
|
return {"Error"};
|
|
} else if (id(garage_door_open).state) {
|
|
return {"Open"};
|
|
} else if (id(garage_door_closed).state) {
|
|
return {"Closed"};
|
|
} else return {"Moving"};
|
|
|
|
binary_sensor:
|
|
- platform: gpio
|
|
pin: D0
|
|
name: "Garage Door"
|
|
device_class: door
|
|
id: garage_door_open
|
|
filters:
|
|
- invert:
|
|
on_press:
|
|
then:
|
|
- lambda: |-
|
|
id(garage_door).current_operation = COVER_OPERATION_IDLE;
|
|
id(garage_door).position = COVER_OPEN;
|
|
id(garage_door_state).publish_state("Open");
|
|
on_release:
|
|
then:
|
|
- lambda: |-
|
|
id(garage_door).current_operation = COVER_OPERATION_CLOSING;
|
|
id(garage_door).publish_state();
|
|
id(garage_door_state).publish_state("Moving");
|
|
- platform: gpio
|
|
pin: D1
|
|
id: garage_door_closed
|
|
filters:
|
|
- invert:
|
|
internal: true
|
|
on_press:
|
|
then:
|
|
- lambda: |-
|
|
id(garage_door).current_operation = COVER_OPERATION_IDLE;
|
|
id(garage_door).position = COVER_CLOSED;
|
|
id(garage_door_state).publish_state("Closed");
|
|
on_release:
|
|
then:
|
|
- lambda: |-
|
|
id(garage_door).current_operation = COVER_OPERATION_OPENING;
|
|
id(garage_door).publish_state();
|
|
id(garage_door_state).publish_state("Moving");
|
|
- platform: gpio
|
|
pin: D2
|
|
name: "Side Door"
|
|
device_class: door
|
|
filters:
|
|
- invert
|
|
- delayed_off: 5s
|
|
|
|
- platform: template
|
|
name: "Left Parking Spot"
|
|
device_class: occupancy
|
|
lambda: |-
|
|
if (id(garage_spot_1).state < 2) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
- platform: template
|
|
name: "Right Parking Spot"
|
|
device_class: occupancy
|
|
lambda: |-
|
|
if (id(garage_spot_2).state < 2) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
|
|
switch:
|
|
- platform: gpio
|
|
pin:
|
|
number: D6
|
|
inverted: true
|
|
id: garage_door_switch
|
|
on_turn_on:
|
|
- delay: 500ms
|
|
- switch.turn_off: garage_door_switch
|
|
internal: true
|
|
|
|
cover:
|
|
- platform: template
|
|
name: "Garage Door"
|
|
id: garage_door
|
|
device_class: garage
|
|
lambda: !lambda |-
|
|
if (id(garage_door_open).state) {
|
|
return COVER_OPEN;
|
|
} else if (id(garage_door_closed).state) {
|
|
return COVER_CLOSED;
|
|
} else return {};
|
|
open_action:
|
|
- switch.turn_on: garage_door_switch
|
|
- delay: 3s
|
|
- if:
|
|
condition:
|
|
binary_sensor.is_on: garage_door_closed
|
|
then:
|
|
- switch.turn_on: garage_door_switch
|
|
close_action:
|
|
- switch.turn_on: garage_door_switch
|
|
- delay: 3s
|
|
- if:
|
|
condition:
|
|
binary_sensor.is_on: garage_door_open
|
|
then:
|
|
- switch.turn_on: garage_door_switch |