77 lines
1.9 KiB
Text
77 lines
1.9 KiB
Text
substitutions:
|
|
hostname: heating-upstairs
|
|
friendly_name: Heating Upstairs
|
|
relay_on_action: turn_on_action
|
|
relay_off_action: turn_off_action
|
|
|
|
wifi:
|
|
use_address: 192.168.10.17
|
|
|
|
packages:
|
|
device: !include devices/sonoff-basic.yaml
|
|
|
|
globals:
|
|
- id: total_minutes
|
|
type: int
|
|
initial_value: "0"
|
|
- id: minutes_passed
|
|
type: int
|
|
initial_value: "0"
|
|
|
|
# Give the user a graphical control over the timeout
|
|
# See: https://esphome.io/components/number/template.html
|
|
number:
|
|
- name: "${friendly_name} Timeout"
|
|
id: timeout_length
|
|
platform: template
|
|
# TODO: maybe it's a better UX to do this in hours and minutes and do the conversion in esphome
|
|
unit_of_measurement: minutes
|
|
# Min 5 minutes
|
|
min_value: 10
|
|
# Never want it on for more than 3 hours
|
|
# 3*60 = 180
|
|
max_value: 180
|
|
initial_value: 10
|
|
step: 10
|
|
optimistic: true
|
|
|
|
sensor:
|
|
- name: "${friendly_name} Total Time"
|
|
platform: template
|
|
lambda: !lambda 'return id(total_minutes);'
|
|
unit_of_measurement: 'minutes'
|
|
accuracy_decimals: 0
|
|
- name: "${friendly_name} Elapsed Time"
|
|
platform: template
|
|
lambda: !lambda 'return id(minutes_passed);'
|
|
unit_of_measurement: 'minutes'
|
|
accuracy_decimals: 0
|
|
|
|
|
|
script:
|
|
- id: turn_on_action
|
|
then:
|
|
- logger.log: "Turn On"
|
|
- lambda: |-
|
|
id(total_minutes) = id(timeout_length).state;
|
|
id(minutes_passed) = 0;
|
|
id(tick).execute();
|
|
- id: turn_off_action
|
|
then:
|
|
- logger.log: "Turn Off"
|
|
- lambda: |-
|
|
id(relay).turn_off();
|
|
id(minutes_passed) = 0;
|
|
id(total_minutes) = 0;
|
|
- id: tick
|
|
mode: queued
|
|
then:
|
|
- delay: 1min
|
|
- logger.log: "Tick"
|
|
- lambda: |-
|
|
id(minutes_passed) += 1;
|
|
if (id(minutes_passed) >= id(total_minutes) ) {
|
|
id(turn_off_action).execute();
|
|
} else {
|
|
id(tick).execute();
|
|
}
|