mirror of
https://github.com/CeeWeasel/fresh-home.git
synced 2026-08-10 02:50:12 -04:00
spelling mistakes mostly
This commit is contained in:
@@ -13,7 +13,7 @@ trigger:
|
||||
- input_boolean.home_occupied
|
||||
- binary_sensor.front_room_occupied
|
||||
to: 'off'
|
||||
for: '00:05:00'
|
||||
for: '00:15:00'
|
||||
|
||||
# - platform: time_pattern
|
||||
# minutes: "/5"
|
||||
|
||||
@@ -179,7 +179,7 @@ sensors:
|
||||
# delay_off:
|
||||
# seconds: 30
|
||||
# icon_template: mdi:washing-machine
|
||||
# availability_template: "{{ states('sensor.pm_laundry_plug_w') not in ['unkown', 'unavailable'] }}"
|
||||
# availability_template: "{{ states('sensor.pm_laundry_plug_w') not in ['unknown', 'unavailable'] }}"
|
||||
# value_template: "{{ states('sensor.pm_laundry_plug_w')|float(default=0) >= states('input_number.washing_machine_on')|float(default=0) }}"
|
||||
# attribute_templates:
|
||||
# model_number: 'WF45R6100AW/US'
|
||||
@@ -187,14 +187,13 @@ sensors:
|
||||
# power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}"
|
||||
# target: "{{ states('input_number.washing_machine_on') | float(default=0)}}"
|
||||
|
||||
|
||||
# tumble_dryer:
|
||||
# unique_id: binary-sensor-tumble-dryer
|
||||
# friendly_name: Tumble Dryer
|
||||
# delay_off:
|
||||
# seconds: 30
|
||||
# icon_template: mdi:tumble-dryer
|
||||
# availability_template: "{{ states('sensor.pm_dryer_w') not in ['unkown', 'unavailable'] }}"
|
||||
# availability_template: "{{ states('sensor.pm_dryer_w') not in ['unknown', 'unavailable'] }}"
|
||||
# value_template: "{{ states('sensor.pm_dryer_w')|float(default=0) >= states('input_number.tumble_dryer_on')|float(default=0) }}"
|
||||
# attribute_templates:
|
||||
# model_number: 'DVE45R6100W/A3'
|
||||
@@ -210,7 +209,7 @@ sensors:
|
||||
# delay_off:
|
||||
# seconds: 30
|
||||
# icon_template: mdi:dishwasher
|
||||
# availability_template: "{{ states('sensor.pm_dishwasher_w') not in ['unkown', 'unavailable'] }}"
|
||||
# availability_template: "{{ states('sensor.pm_dishwasher_w') not in ['unknown', 'unavailable'] }}"
|
||||
# value_template: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}"
|
||||
# attribute_templates:
|
||||
# model_number: 'MDB6769PAS1'
|
||||
@@ -226,20 +225,19 @@ sensors:
|
||||
value_template: "{{ states('sensor.pm_stove_w') | float(default=0) > states('input_number.stove_on') | float(default=0) }}"
|
||||
icon_template: mdi:stove
|
||||
attribute_templates:
|
||||
model_number: 'WFE505W0JS3'
|
||||
serial_number: 'RB4659869'
|
||||
model_number: "WFE505W0JS3"
|
||||
serial_number: "RB4659869"
|
||||
power: "{{ states('sensor.pm_stove_w') | float(default=0)}}"
|
||||
oven_temperature: "{{ iif(is_state('sensor.oven_temperature', 'unavailable'), 'unavailable', states('sensor.oven_temperature') | float(default=0)) }}"
|
||||
|
||||
|
||||
microwave:
|
||||
unique_id: binary-sensor-microwave
|
||||
friendly_name: Microwave
|
||||
value_template: "{{ states('sensor.pm_microwave_plug_w') | float(default=0) > states('input_number.microwave_on') | float(default=0) }}"
|
||||
icon_template: mdi:microwave
|
||||
attribute_templates:
|
||||
model_number: 'testmodel'
|
||||
serial_number: 'testserial'
|
||||
model_number: "testmodel"
|
||||
serial_number: "testserial"
|
||||
power: "{{ states('sensor.pm_microwave_plug_w') | float(default=0)}}"
|
||||
|
||||
furnace:
|
||||
@@ -248,8 +246,8 @@ sensors:
|
||||
value_template: "{{ states('sensor.pm_furnace_w') | float(default=0) > states('input_number.furnace_on') | float(default=0) }}"
|
||||
icon_template: mdi:radiator
|
||||
attribute_templates:
|
||||
model_number: 'testmodel'
|
||||
serial_number: 'testserial'
|
||||
model_number: "testmodel"
|
||||
serial_number: "testserial"
|
||||
power: "{{ states('sensor.pm_furnace_w') | float(default=0)}}"
|
||||
|
||||
heat_pump:
|
||||
@@ -258,8 +256,8 @@ sensors:
|
||||
value_template: "{{ states('sensor.pm_heat_pump_w') | float(default=0) > states('input_number.heat_pump_on') | float(default=0) }}"
|
||||
icon_template: mdi:air-filter
|
||||
attribute_templates:
|
||||
model_number: 'testmodel'
|
||||
serial_number: 'testserial'
|
||||
model_number: "testmodel"
|
||||
serial_number: "testserial"
|
||||
power: "{{ states('sensor.pm_heat_pump_w') | float(default=0)}}"
|
||||
|
||||
sump_pump:
|
||||
@@ -268,8 +266,8 @@ sensors:
|
||||
value_template: "{{ states('sensor.pm_sump_pump_plug_w') | float(default=0) > states('input_number.sump_pump_on') | float(default=0) }}"
|
||||
icon_template: mdi:pump
|
||||
attribute_templates:
|
||||
model_number: 'testmodel'
|
||||
serial_number: 'testserial'
|
||||
model_number: "testmodel"
|
||||
serial_number: "testserial"
|
||||
power: "{{ states('sensor.pm_sump_pump_plug_w') | float(default=0)}}"
|
||||
|
||||
something_open_hvac_on:
|
||||
@@ -371,7 +369,6 @@ sensors:
|
||||
{{ 'false' }}
|
||||
{% endif %}
|
||||
|
||||
|
||||
# Moved to temperature_management.yaml
|
||||
# Is it more than 5 degrees warmer outside?
|
||||
# warmer_outside:
|
||||
@@ -396,7 +393,6 @@ sensors:
|
||||
# {{ 'false' }}
|
||||
# {% endif %}
|
||||
|
||||
|
||||
is_dark:
|
||||
unique_id: templatebinarysensor.is_dark
|
||||
friendly_name: Is Dark
|
||||
@@ -410,11 +406,11 @@ sensors:
|
||||
is_daylight:
|
||||
unique_id: templatebinarysensor.is_daylight
|
||||
friendly_name: Is Daylight
|
||||
value_template: "{{ states('sensor.front_porch_light_level') | int(0) >= states('input_number.is_daylight') | int(0) }}"
|
||||
value_template: "{{ states('sensor.front_porch_light_level') | int(0) >= states('input_number.is_daylight') | int(0) }}"
|
||||
|
||||
garage_open_nobody_home:
|
||||
unique_id: templatebinarysensor.garage_open_nobody_home
|
||||
friendly_name: 'Garage Open Nobody Home'
|
||||
friendly_name: "Garage Open Nobody Home"
|
||||
value_template: >-
|
||||
{% if is_state('cover.garage_door', 'open') %}
|
||||
{% if is_state('input_boolean.home_occupied', 'off') %}
|
||||
@@ -704,7 +700,7 @@ sensors:
|
||||
|
||||
take_trash_out:
|
||||
unique_id: templatesensor.take_trash_out
|
||||
friendly_name: 'Take Trash Out'
|
||||
friendly_name: "Take Trash Out"
|
||||
icon_template: mdi:trash-can
|
||||
value_template: "{{ is_state('calendar.trash_schedule','on') or state_attr('calendar.trash_schedule','offset_reached') and is_state('input_boolean.trash_out','off') }}"
|
||||
|
||||
@@ -753,4 +749,4 @@ sensors:
|
||||
value_template: "{{is_state('binary_sensor.kitchen_fridge_door_contact','on') }}"
|
||||
icon_template: mdi:fridge-variant
|
||||
delay_on:
|
||||
minutes: 3
|
||||
minutes: 3
|
||||
|
||||
@@ -1,42 +1,42 @@
|
||||
template:
|
||||
- binary_sensor:
|
||||
- name: Dishwasher
|
||||
unique_id: templatebinarysensor.dishwasher
|
||||
icon: mdi:dishwasher
|
||||
delay_on: "{{states('input_number.dishwasher_delay_on') | float(default=0) }}"
|
||||
delay_off: "{{states('input_number.dishwasher_delay_off') | float(default=0) }}"
|
||||
availability: "{{ states('sensor.pm_dishwasher_w') not in ['unkown', 'unavailable'] }}"
|
||||
attributes:
|
||||
model_number: 'MDB6769PAS1'
|
||||
serial_number: 'F24407234'
|
||||
power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.dishwasher_on') | float(default=0)}}"
|
||||
state: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}"
|
||||
- name: Dishwasher
|
||||
unique_id: templatebinarysensor.dishwasher
|
||||
icon: mdi:dishwasher
|
||||
delay_on: "{{states('input_number.dishwasher_delay_on') | float(default=0) }}"
|
||||
delay_off: "{{states('input_number.dishwasher_delay_off') | float(default=0) }}"
|
||||
availability: "{{ states('sensor.pm_dishwasher_w') not in ['unknown', 'unavailable'] }}"
|
||||
attributes:
|
||||
model_number: "MDB6769PAS1"
|
||||
serial_number: "F24407234"
|
||||
power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.dishwasher_on') | float(default=0)}}"
|
||||
state: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}"
|
||||
|
||||
- sensor:
|
||||
- name: Dishwasher
|
||||
unique_id: templatesensor_dishwasher
|
||||
state: >
|
||||
{% if is_state('binary_sensor.dishwasher','on')%}
|
||||
running
|
||||
{% elif is_state('binary_sensor.dishwasher','off') and is_state('input_boolean.empty_dishwasher','on') %}
|
||||
pending
|
||||
{% else %}
|
||||
idle
|
||||
{% endif %}
|
||||
icon: >
|
||||
{% if is_state('sensor.dishwasher','idle') %}
|
||||
mdi:dishwasher-off
|
||||
{% elif is_state('sensor.dishwasher','pending') %}
|
||||
mdi:dishwasher-alert
|
||||
{% else %}
|
||||
mdi:dishwasher
|
||||
{% endif %}
|
||||
attributes:
|
||||
model_number: 'MDB6769PAS1'
|
||||
serial_number: 'F24407234'
|
||||
power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.dishwasher_on') | float(default=0)}}"
|
||||
- name: Dishwasher
|
||||
unique_id: templatesensor_dishwasher
|
||||
state: >
|
||||
{% if is_state('binary_sensor.dishwasher','on')%}
|
||||
running
|
||||
{% elif is_state('binary_sensor.dishwasher','off') and is_state('input_boolean.empty_dishwasher','on') %}
|
||||
pending
|
||||
{% else %}
|
||||
idle
|
||||
{% endif %}
|
||||
icon: >
|
||||
{% if is_state('sensor.dishwasher','idle') %}
|
||||
mdi:dishwasher-off
|
||||
{% elif is_state('sensor.dishwasher','pending') %}
|
||||
mdi:dishwasher-alert
|
||||
{% else %}
|
||||
mdi:dishwasher
|
||||
{% endif %}
|
||||
attributes:
|
||||
model_number: "MDB6769PAS1"
|
||||
serial_number: "F24407234"
|
||||
power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.dishwasher_on') | float(default=0)}}"
|
||||
|
||||
input_boolean:
|
||||
empty_dishwasher:
|
||||
@@ -46,7 +46,7 @@ input_boolean:
|
||||
input_number:
|
||||
dishwasher_on:
|
||||
# was 4
|
||||
name: 'Dishwasher On'
|
||||
name: "Dishwasher On"
|
||||
icon: mdi:dishwasher
|
||||
min: 0
|
||||
max: 1000
|
||||
@@ -55,7 +55,7 @@ input_number:
|
||||
unit_of_measurement: W
|
||||
|
||||
dishwasher_off:
|
||||
name: 'Dishwasher Off'
|
||||
name: "Dishwasher Off"
|
||||
icon: mdi:dishwasher-off
|
||||
min: 0
|
||||
max: 1000
|
||||
@@ -64,7 +64,7 @@ input_number:
|
||||
unit_of_measurement: W
|
||||
|
||||
dishwasher_delay_on:
|
||||
name: 'Dishwasher Delay On'
|
||||
name: "Dishwasher Delay On"
|
||||
icon: mdi:clock
|
||||
min: 0
|
||||
max: 900
|
||||
@@ -73,7 +73,7 @@ input_number:
|
||||
|
||||
dishwasher_delay_off:
|
||||
# was 600
|
||||
name: 'Dishwasher Delay Off'
|
||||
name: "Dishwasher Delay Off"
|
||||
icon: mdi:clock-alert
|
||||
min: 0
|
||||
max: 900
|
||||
@@ -87,84 +87,84 @@ automation:
|
||||
- id: dishwasher_off
|
||||
platform: state
|
||||
entity_id: binary_sensor.dishwasher
|
||||
from: 'on'
|
||||
to: 'off'
|
||||
from: "on"
|
||||
to: "off"
|
||||
|
||||
- id: dishwasher_on
|
||||
platform: state
|
||||
entity_id: binary_sensor.dishwasher
|
||||
from: 'off'
|
||||
to: 'on'
|
||||
from: "off"
|
||||
to: "on"
|
||||
|
||||
- id: door_open
|
||||
platform: state
|
||||
entity_id: binary_sensor.dishwasher_door_contact
|
||||
from: 'off'
|
||||
to: 'on'
|
||||
from: "off"
|
||||
to: "on"
|
||||
for:
|
||||
seconds: 5
|
||||
|
||||
condition: []
|
||||
action:
|
||||
- choose:
|
||||
- alias: "Dishwasher is running. No need to empty it yet"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: dishwasher_on
|
||||
- alias: "Dishwasher is running. No need to empty it yet"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: dishwasher_on
|
||||
|
||||
- condition: state
|
||||
entity_id: input_boolean.empty_dishwasher
|
||||
state: 'on'
|
||||
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Empty Dishwasher - Load Started
|
||||
entity_id: automation.empty_dishwasher
|
||||
message: Dishwasher just turned on. Turning off input_boolean in case it got left on
|
||||
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
- condition: state
|
||||
entity_id: input_boolean.empty_dishwasher
|
||||
state: "on"
|
||||
|
||||
- alias: "Dishwasher finished while door was shut"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: dishwasher_off
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Empty Dishwasher - Load Started
|
||||
entity_id: automation.empty_dishwasher
|
||||
message: Dishwasher just turned on. Turning off input_boolean in case it got left on
|
||||
|
||||
- condition: state
|
||||
entity_id: binary_sensor.dishwasher_door_contact
|
||||
state: 'off'
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.empty_dishwasher
|
||||
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Empty Dishwasher - Load finished
|
||||
entity_id: automation.empty_dishwasher
|
||||
message: Dishwasher just turned off while the door was shut. Assuming dishes need to be put away
|
||||
- alias: "Dishwasher finished while door was shut"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: dishwasher_off
|
||||
|
||||
- service: homeassistant.turn_on
|
||||
target:
|
||||
entity_id: input_boolean.empty_dishwasher
|
||||
- condition: state
|
||||
entity_id: binary_sensor.dishwasher_door_contact
|
||||
state: "off"
|
||||
|
||||
- alias: "Door was opened for 30 seconds while dishwasher was off"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: door_open
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Empty Dishwasher - Load finished
|
||||
entity_id: automation.empty_dishwasher
|
||||
message: Dishwasher just turned off while the door was shut. Assuming dishes need to be put away
|
||||
|
||||
- condition: state
|
||||
entity_id: binary_sensor.dishwasher
|
||||
state: 'off'
|
||||
- service: homeassistant.turn_on
|
||||
target:
|
||||
entity_id: input_boolean.empty_dishwasher
|
||||
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Empty Dishwasher - Dishes put away
|
||||
entity_id: automation.empty_dishwasher
|
||||
message: Dishwasher door was opened while the dishwasher was off. Assuming dishes don't need to be put away.
|
||||
- alias: "Door was opened for 30 seconds while dishwasher was off"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: door_open
|
||||
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.empty_dishwasher
|
||||
- condition: state
|
||||
entity_id: binary_sensor.dishwasher
|
||||
state: "off"
|
||||
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Empty Dishwasher - Dishes put away
|
||||
entity_id: automation.empty_dishwasher
|
||||
message: Dishwasher door was opened while the dishwasher was off. Assuming dishes don't need to be put away.
|
||||
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.empty_dishwasher
|
||||
|
||||
mode: single
|
||||
|
||||
@@ -1,83 +1,83 @@
|
||||
template:
|
||||
- trigger:
|
||||
- platform: state
|
||||
entity_id:
|
||||
- sensor.pm_dryer_w
|
||||
- input_number.tumble_dryer_delay_on
|
||||
- input_number.tumble_dryer_delay_off
|
||||
not_to:
|
||||
- "unknown"
|
||||
- "unavailable"
|
||||
- platform: state
|
||||
entity_id:
|
||||
- sensor.pm_dryer_w
|
||||
- input_number.tumble_dryer_delay_on
|
||||
- input_number.tumble_dryer_delay_off
|
||||
not_to:
|
||||
- "unknown"
|
||||
- "unavailable"
|
||||
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
id: "reload"
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
id: "reload"
|
||||
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
binary_sensor:
|
||||
- name: Tumble Dryer
|
||||
unique_id: binary-sensor-tumble-dryer
|
||||
delay_on: "{{states('input_number.tumble_dryer_delay_on') | float(default=0)}}"
|
||||
delay_off: "{{states('input_number.tumble_dryer_delay_off') | float(default=0)}}"
|
||||
icon: mdi:tumble-dryer
|
||||
availability: "{{ states('sensor.pm_dryer_w') not in ['unkown', 'unavailable'] }}"
|
||||
attributes:
|
||||
model_number: 'DVE45R6100W/A3'
|
||||
serial_number: '0AY95BBM605793X'
|
||||
power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}"
|
||||
state: "{{ states('sensor.pm_dryer_w')|float(default=0) >= states('input_number.tumble_dryer_on')|float(default=0) }}"
|
||||
- name: Tumble Dryer
|
||||
unique_id: binary-sensor-tumble-dryer
|
||||
delay_on: "{{states('input_number.tumble_dryer_delay_on') | float(default=0)}}"
|
||||
delay_off: "{{states('input_number.tumble_dryer_delay_off') | float(default=0)}}"
|
||||
icon: mdi:tumble-dryer
|
||||
availability: "{{ states('sensor.pm_dryer_w') not in ['unknown', 'unavailable'] }}"
|
||||
attributes:
|
||||
model_number: "DVE45R6100W/A3"
|
||||
serial_number: "0AY95BBM605793X"
|
||||
power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}"
|
||||
state: "{{ states('sensor.pm_dryer_w')|float(default=0) >= states('input_number.tumble_dryer_on')|float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.pm_dryer_w
|
||||
not_to:
|
||||
- "unknown"
|
||||
- "unavailable"
|
||||
- platform: state
|
||||
entity_id: input_number.tumble_dryer_delay_on
|
||||
not_to:
|
||||
- "unknown"
|
||||
- "unavailable"
|
||||
- platform: state
|
||||
entity_id: input_number.tumble_dryer_delay_off
|
||||
not_to:
|
||||
- "unknown"
|
||||
- "unavailable"
|
||||
- platform: state
|
||||
entity_id: sensor.pm_dryer_w
|
||||
not_to:
|
||||
- "unknown"
|
||||
- "unavailable"
|
||||
- platform: state
|
||||
entity_id: input_number.tumble_dryer_delay_on
|
||||
not_to:
|
||||
- "unknown"
|
||||
- "unavailable"
|
||||
- platform: state
|
||||
entity_id: input_number.tumble_dryer_delay_off
|
||||
not_to:
|
||||
- "unknown"
|
||||
- "unavailable"
|
||||
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
id: "reload"
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
id: "reload"
|
||||
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
sensor:
|
||||
- name: Tumble Dryer
|
||||
unique_id: templatesensor_tumble_dryer
|
||||
state: >
|
||||
{% if is_state('binary_sensor.tumble_dryer','on') %}
|
||||
running
|
||||
{% elif is_state('binary_sensor.tumble_dryer','off') and is_state('input_boolean.fold_clothes','on') %}
|
||||
pending
|
||||
{% else %}
|
||||
idle
|
||||
{% endif %}
|
||||
icon: >
|
||||
{% if is_state('sensor.tumble_dryer','idle') %}
|
||||
mdi:tumble-dryer-off
|
||||
{% elif is_state('sensor.tumble_dryer','pending') %}
|
||||
mdi:tumble-dryer-alert
|
||||
{% else %}
|
||||
mdi:tumble-dryer
|
||||
{% endif %}
|
||||
attributes:
|
||||
model_number: 'DVE45R6100W/A3'
|
||||
serial_number: '0AY95BBM605793X'
|
||||
power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}"
|
||||
- name: Tumble Dryer
|
||||
unique_id: templatesensor_tumble_dryer
|
||||
state: >
|
||||
{% if is_state('binary_sensor.tumble_dryer','on') %}
|
||||
running
|
||||
{% elif is_state('binary_sensor.tumble_dryer','off') and is_state('input_boolean.fold_clothes','on') %}
|
||||
pending
|
||||
{% else %}
|
||||
idle
|
||||
{% endif %}
|
||||
icon: >
|
||||
{% if is_state('sensor.tumble_dryer','idle') %}
|
||||
mdi:tumble-dryer-off
|
||||
{% elif is_state('sensor.tumble_dryer','pending') %}
|
||||
mdi:tumble-dryer-alert
|
||||
{% else %}
|
||||
mdi:tumble-dryer
|
||||
{% endif %}
|
||||
attributes:
|
||||
model_number: "DVE45R6100W/A3"
|
||||
serial_number: "0AY95BBM605793X"
|
||||
power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}"
|
||||
|
||||
input_boolean:
|
||||
fold_clothes:
|
||||
@@ -87,7 +87,7 @@ input_boolean:
|
||||
input_number:
|
||||
tumble_dryer_on:
|
||||
# was 10
|
||||
name: 'Tumble Dryer On'
|
||||
name: "Tumble Dryer On"
|
||||
icon: mdi:tumble-dryer
|
||||
min: 0
|
||||
max: 1000
|
||||
@@ -96,7 +96,7 @@ input_number:
|
||||
unit_of_measurement: W
|
||||
|
||||
tumble_dryer_off:
|
||||
name: 'Tumble Dryer Off'
|
||||
name: "Tumble Dryer Off"
|
||||
icon: mdi:tumble-dryer-off
|
||||
min: 0
|
||||
max: 1000
|
||||
@@ -105,7 +105,7 @@ input_number:
|
||||
unit_of_measurement: W
|
||||
|
||||
tumble_dryer_delay_on:
|
||||
name: 'Tumble Dryer Delay On'
|
||||
name: "Tumble Dryer Delay On"
|
||||
icon: mdi:clock
|
||||
min: 0
|
||||
max: 900
|
||||
@@ -114,7 +114,7 @@ input_number:
|
||||
|
||||
tumble_dryer_delay_off:
|
||||
# was 10
|
||||
name: 'Tumble Dryer Delay Off'
|
||||
name: "Tumble Dryer Delay Off"
|
||||
icon: mdi:clock-alert
|
||||
min: 0
|
||||
max: 900
|
||||
@@ -128,88 +128,87 @@ automation:
|
||||
- id: tumble_dryer_off
|
||||
platform: state
|
||||
entity_id: binary_sensor.tumble_dryer
|
||||
from: 'on'
|
||||
to: 'off'
|
||||
from: "on"
|
||||
to: "off"
|
||||
|
||||
- id: tumble_dryer_on
|
||||
platform: state
|
||||
entity_id: binary_sensor.tumble_dryer
|
||||
from: 'off'
|
||||
to: 'on'
|
||||
from: "off"
|
||||
to: "on"
|
||||
|
||||
- id: door_open
|
||||
platform: state
|
||||
entity_id: binary_sensor.tumble_dryer_door_contact
|
||||
from: 'off'
|
||||
to: 'on'
|
||||
from: "off"
|
||||
to: "on"
|
||||
for:
|
||||
seconds: 5
|
||||
|
||||
condition: []
|
||||
action:
|
||||
- choose:
|
||||
- alias: "Dryer is running. No need to fold clothes yet"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: tumble_dryer_on
|
||||
- alias: "Dryer is running. No need to fold clothes yet"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: tumble_dryer_on
|
||||
|
||||
- condition: state
|
||||
entity_id: input_boolean.fold_clothes
|
||||
state: 'on'
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Fold Clothes - Load started
|
||||
entity_id: automation.fold_clothes
|
||||
message: Dryer turned on. No need to fold clothes yet. Turning off input_boolean in case it got left on
|
||||
|
||||
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
- condition: state
|
||||
entity_id: input_boolean.fold_clothes
|
||||
state: "on"
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Fold Clothes - Load started
|
||||
entity_id: automation.fold_clothes
|
||||
message: Dryer turned on. No need to fold clothes yet. Turning off input_boolean in case it got left on
|
||||
|
||||
- alias: "Dryer finished while door was shut"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: tumble_dryer_off
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.fold_clothes
|
||||
|
||||
- condition: state
|
||||
entity_id: binary_sensor.tumble_dryer_door_contact
|
||||
state: 'off'
|
||||
- alias: "Dryer finished while door was shut"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: tumble_dryer_off
|
||||
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Fold Clothes - Load finished
|
||||
entity_id: automation.fold_clothes
|
||||
message: Dryer just turned off. Assuming clothes need to be folded
|
||||
- condition: state
|
||||
entity_id: binary_sensor.tumble_dryer_door_contact
|
||||
state: "off"
|
||||
|
||||
- service: homeassistant.turn_on
|
||||
target:
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Fold Clothes - Load finished
|
||||
entity_id: automation.fold_clothes
|
||||
message: Dryer just turned off. Assuming clothes need to be folded
|
||||
|
||||
- service: homeassistant.turn_on
|
||||
target:
|
||||
entity_id: input_boolean.fold_clothes
|
||||
|
||||
- alias: "Door was opened while dryer was off"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: door_open
|
||||
|
||||
- condition: state
|
||||
entity_id: binary_sensor.tumble_dryer
|
||||
state: "off"
|
||||
|
||||
- condition: state
|
||||
entity_id: input_boolean.fold_clothes
|
||||
state: "on"
|
||||
|
||||
- alias: "Door was opened while dryer was off"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: door_open
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Fold Clothes - Clothes folded
|
||||
entity_id: automation.fold_clothes
|
||||
message: Door was opened while dryer was off. Assuming clothes are now folded
|
||||
|
||||
- condition: state
|
||||
entity_id: binary_sensor.tumble_dryer
|
||||
state: 'off'
|
||||
|
||||
- condition: state
|
||||
entity_id: input_boolean.fold_clothes
|
||||
state: 'on'
|
||||
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Fold Clothes - Clothes folded
|
||||
entity_id: automation.fold_clothes
|
||||
message: Door was opened while dryer was off. Assuming clothes are now folded
|
||||
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.fold_clothes
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.fold_clothes
|
||||
|
||||
mode: single
|
||||
|
||||
@@ -1,42 +1,42 @@
|
||||
template:
|
||||
- binary_sensor:
|
||||
- name: Washing Machine
|
||||
unique_id: templatebinarysensor.washing_machine
|
||||
delay_on: "{{states('input_number.washing_machine_delay_on') | float(default=0)}}"
|
||||
delay_off: "{{states('input_number.washing_machine_delay_off') | float(default=0)}}"
|
||||
icon: mdi:washing-machine
|
||||
availability: "{{ states('sensor.pm_laundry_plug_w') not in ['unkown', 'unavailable'] }}"
|
||||
attributes:
|
||||
model_number: 'WF45R6100AW/US'
|
||||
serial_number: '01FY57AM802740X'
|
||||
power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.washing_machine_on') | float(default=0)}}"
|
||||
state: "{{ states('sensor.pm_laundry_plug_w')|float(default=0) >= states('input_number.washing_machine_on')|float(default=0) }}"
|
||||
- name: Washing Machine
|
||||
unique_id: templatebinarysensor.washing_machine
|
||||
delay_on: "{{states('input_number.washing_machine_delay_on') | float(default=0)}}"
|
||||
delay_off: "{{states('input_number.washing_machine_delay_off') | float(default=0)}}"
|
||||
icon: mdi:washing-machine
|
||||
availability: "{{ states('sensor.pm_laundry_plug_w') not in ['unknown', 'unavailable'] }}"
|
||||
attributes:
|
||||
model_number: "WF45R6100AW/US"
|
||||
serial_number: "01FY57AM802740X"
|
||||
power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.washing_machine_on') | float(default=0)}}"
|
||||
state: "{{ states('sensor.pm_laundry_plug_w')|float(default=0) >= states('input_number.washing_machine_on')|float(default=0) }}"
|
||||
|
||||
- sensor:
|
||||
- name: Washing Machine
|
||||
unique_id: templatesensor_washing_machine
|
||||
state: >
|
||||
{% if is_state('binary_sensor.washing_machine','on') %}
|
||||
running
|
||||
{% elif is_state('binary_sensor.washing_machine','off') and is_state('input_boolean.swap_laundry','on') %}
|
||||
pending
|
||||
{% else %}
|
||||
idle
|
||||
{% endif %}
|
||||
icon: >
|
||||
{% if is_state('sensor.washing_machine','idle') %}
|
||||
mdi:washing-machine-off
|
||||
{% elif is_state('sensor.washing_machine','pending') %}
|
||||
mdi:washing-machine-alert
|
||||
{% else %}
|
||||
mdi:washing-machine
|
||||
{% endif %}
|
||||
attributes:
|
||||
model_number: 'WF45R6100AW/US'
|
||||
serial_number: '01FY57AM802740X'
|
||||
power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.washing_machine_on') | float(default=0)}}"
|
||||
- name: Washing Machine
|
||||
unique_id: templatesensor_washing_machine
|
||||
state: >
|
||||
{% if is_state('binary_sensor.washing_machine','on') %}
|
||||
running
|
||||
{% elif is_state('binary_sensor.washing_machine','off') and is_state('input_boolean.swap_laundry','on') %}
|
||||
pending
|
||||
{% else %}
|
||||
idle
|
||||
{% endif %}
|
||||
icon: >
|
||||
{% if is_state('sensor.washing_machine','idle') %}
|
||||
mdi:washing-machine-off
|
||||
{% elif is_state('sensor.washing_machine','pending') %}
|
||||
mdi:washing-machine-alert
|
||||
{% else %}
|
||||
mdi:washing-machine
|
||||
{% endif %}
|
||||
attributes:
|
||||
model_number: "WF45R6100AW/US"
|
||||
serial_number: "01FY57AM802740X"
|
||||
power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}"
|
||||
target: "{{ states('input_number.washing_machine_on') | float(default=0)}}"
|
||||
|
||||
input_boolean:
|
||||
swap_laundry:
|
||||
@@ -46,7 +46,7 @@ input_boolean:
|
||||
input_number:
|
||||
washing_machine_on:
|
||||
# was 5
|
||||
name: 'Washing Machine On'
|
||||
name: "Washing Machine On"
|
||||
icon: mdi:washing-machine
|
||||
min: 0
|
||||
max: 20
|
||||
@@ -55,7 +55,7 @@ input_number:
|
||||
unit_of_measurement: W
|
||||
|
||||
washing_machine_off:
|
||||
name: 'Washing Machine Off'
|
||||
name: "Washing Machine Off"
|
||||
icon: mdi:washing-machine-off
|
||||
min: 0
|
||||
max: 20
|
||||
@@ -64,7 +64,7 @@ input_number:
|
||||
unit_of_measurement: W
|
||||
|
||||
washing_machine_delay_on:
|
||||
name: 'Washing Machine Delay On'
|
||||
name: "Washing Machine Delay On"
|
||||
icon: mdi:clock
|
||||
min: 0
|
||||
max: 900
|
||||
@@ -73,7 +73,7 @@ input_number:
|
||||
|
||||
washing_machine_delay_off:
|
||||
# was 10
|
||||
name: 'Washing Machine Delay Off'
|
||||
name: "Washing Machine Delay Off"
|
||||
icon: mdi:clock-alert
|
||||
min: 0
|
||||
max: 900
|
||||
@@ -87,86 +87,86 @@ automation:
|
||||
- id: washing_machine_off
|
||||
platform: state
|
||||
entity_id: binary_sensor.washing_machine
|
||||
from: 'on'
|
||||
to: 'off'
|
||||
from: "on"
|
||||
to: "off"
|
||||
|
||||
- id: washing_machine_on
|
||||
platform: state
|
||||
entity_id: binary_sensor.washing_machine
|
||||
from: 'off'
|
||||
to: 'on'
|
||||
from: "off"
|
||||
to: "on"
|
||||
|
||||
- id: door_open
|
||||
platform: state
|
||||
entity_id: binary_sensor.washing_machine_door_contact
|
||||
from: 'off'
|
||||
to: 'on'
|
||||
from: "off"
|
||||
to: "on"
|
||||
for:
|
||||
seconds: 5
|
||||
|
||||
condition: []
|
||||
action:
|
||||
- choose:
|
||||
- alias: "Washing machine is running. No need to swap laundry yet"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: washing_machine_on
|
||||
- alias: "Washing machine is running. No need to swap laundry yet"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: washing_machine_on
|
||||
|
||||
- condition: state
|
||||
entity_id: input_boolean.swap_laundry
|
||||
state: 'on'
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Swap Laundry - Load started
|
||||
entity_id: automation.swap_laundry
|
||||
message: Washing machine is running. No need to swap laundry yet. Turning off input_boolean.swap_laundry, in case it was left on
|
||||
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
- condition: state
|
||||
entity_id: input_boolean.swap_laundry
|
||||
state: "on"
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Swap Laundry - Load started
|
||||
entity_id: automation.swap_laundry
|
||||
message: Washing machine is running. No need to swap laundry yet. Turning off input_boolean.swap_laundry, in case it was left on
|
||||
|
||||
- alias: "Washing machine finished while door was shut"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: washing_machine_off
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.swap_laundry
|
||||
|
||||
- condition: state
|
||||
entity_id: binary_sensor.washing_machine_door_contact
|
||||
state: 'off'
|
||||
- alias: "Washing machine finished while door was shut"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: washing_machine_off
|
||||
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Swap Laundry - Load needs to be swapped
|
||||
entity_id: automation.swap_laundry
|
||||
message: Washing machine turned off while the door was shut. Assuming that a load needs to be swapped
|
||||
- service: homeassistant.turn_on
|
||||
target:
|
||||
- condition: state
|
||||
entity_id: binary_sensor.washing_machine_door_contact
|
||||
state: "off"
|
||||
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Swap Laundry - Load needs to be swapped
|
||||
entity_id: automation.swap_laundry
|
||||
message: Washing machine turned off while the door was shut. Assuming that a load needs to be swapped
|
||||
- service: homeassistant.turn_on
|
||||
target:
|
||||
entity_id: input_boolean.swap_laundry
|
||||
|
||||
- alias: "Door was opened while washing machine was off"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: door_open
|
||||
|
||||
- condition: state
|
||||
entity_id: binary_sensor.washing_machine
|
||||
state: "off"
|
||||
|
||||
- condition: state
|
||||
entity_id: input_boolean.swap_laundry
|
||||
state: "on"
|
||||
|
||||
- alias: "Door was opened while washing machine was off"
|
||||
conditions:
|
||||
- condition: trigger
|
||||
id: door_open
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Swap Laundry - Load swapped
|
||||
entity_id: automation.swap_laundry
|
||||
message: Door was opened while washing machine was off. Assuming a load just got swapped
|
||||
|
||||
- condition: state
|
||||
entity_id: binary_sensor.washing_machine
|
||||
state: 'off'
|
||||
|
||||
- condition: state
|
||||
entity_id: input_boolean.swap_laundry
|
||||
state: 'on'
|
||||
|
||||
sequence:
|
||||
- service: logbook.log
|
||||
data_template:
|
||||
name: Swap Laundry - Load swapped
|
||||
entity_id: automation.swap_laundry
|
||||
message: Door was opened while washing machine was off. Assuming a load just got swapped
|
||||
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.swap_laundry
|
||||
- service: homeassistant.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.swap_laundry
|
||||
|
||||
mode: single
|
||||
|
||||
@@ -247,7 +247,7 @@ template:
|
||||
unique_id: "custom_sensor.sprinkler_total_rain_fallen_plus_expected"
|
||||
icon: mdi:weather-pouring
|
||||
unit_of_measurement: mm
|
||||
availability: "{{ states('sensor.sprinkler_recent_rain_precipitation') not in ['unkown', 'unavailable'] }}"
|
||||
availability: "{{ states('sensor.sprinkler_recent_rain_precipitation') not in ['unknown', 'unavailable'] }}"
|
||||
state: >
|
||||
{{ (states('sensor.sprinkler_recent_rain_precipitation') | float + states('sensor.sprinkler_total_expected_precipitation') | float(default=100.0) ) | round(2) }}
|
||||
|
||||
@@ -293,12 +293,12 @@ template:
|
||||
icon: mdi:clock
|
||||
unit_of_measurement: seconds
|
||||
availability: >
|
||||
{{ states('sensor.opensprinkler_water_level') not in ['unkown', 'unavailable'] and
|
||||
states('input_number.front_yard_station_minutes') not in ['unkown', 'unavailable'] and
|
||||
states('input_number.east_side_station_minutes') not in ['unkown', 'unavailable'] and
|
||||
states('input_number.back_yard_station_minutes') not in ['unkown', 'unavailable'] and
|
||||
states('input_number.west_side_station_minutes') not in ['unkown', 'unavailable'] and
|
||||
states('input_number.sprinkler_repeat_program_amount') not in ['unkown', 'unavailable'] }}
|
||||
{{ states('sensor.opensprinkler_water_level') not in ['unknown', 'unavailable'] and
|
||||
states('input_number.front_yard_station_minutes') not in ['unknown', 'unavailable'] and
|
||||
states('input_number.east_side_station_minutes') not in ['unknown', 'unavailable'] and
|
||||
states('input_number.back_yard_station_minutes') not in ['unknown', 'unavailable'] and
|
||||
states('input_number.west_side_station_minutes') not in ['unknown', 'unavailable'] and
|
||||
states('input_number.sprinkler_repeat_program_amount') not in ['unknown', 'unavailable'] }}
|
||||
state: >
|
||||
{{ states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.front_yard_station_minutes") | multiply(60)) | float(default=0) +
|
||||
states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.east_side_station_minutes") | multiply(60)) | float(default=0) +
|
||||
@@ -352,22 +352,22 @@ template:
|
||||
device_class: moisture
|
||||
delay_off:
|
||||
minutes: 15
|
||||
# availability: "{{ states('sensor.rain_quarter_hourly_precipitation') not in ['unkown', 'unavailable'] }}"
|
||||
# availability: "{{ states('sensor.rain_quarter_hourly_precipitation') not in ['unknown', 'unavailable'] }}"
|
||||
# state: >
|
||||
# {{ states('sensor.rain_quarter_hourly_precipitation') | float(default=0) > 0.0 }}
|
||||
availability: "{{ states('binary_sensor.is_raining') not in ['unkown', 'unavailable'] }}"
|
||||
availability: "{{ states('binary_sensor.is_raining') not in ['unknown', 'unavailable'] }}"
|
||||
state: >
|
||||
{{ states('binary_sensor.is_raining') }}
|
||||
|
||||
- trigger:
|
||||
# - platform: homeassistant
|
||||
# event: start
|
||||
# - platform: homeassistant
|
||||
# event: start
|
||||
|
||||
# - platform: time
|
||||
# at: '01:00:00'
|
||||
# - platform: time
|
||||
# at: '01:00:00'
|
||||
|
||||
# - platform: state
|
||||
# entity_id: input_boolean.sprinkler_is_winterized
|
||||
# - platform: state
|
||||
# entity_id: input_boolean.sprinkler_is_winterized
|
||||
|
||||
binary_sensor:
|
||||
- name: "Sprinkler: In Season"
|
||||
@@ -378,37 +378,28 @@ template:
|
||||
# - trigger:
|
||||
# - platform: homeassistant
|
||||
# event: start
|
||||
|
||||
# - platform: time
|
||||
# at: '01:00:00'
|
||||
|
||||
# - platform: state
|
||||
# entity_id: input_boolean.sprinkler_is_winterized
|
||||
|
||||
# - platform: event
|
||||
# event_type: event_template_reloaded
|
||||
# id: "reload"
|
||||
|
||||
# binary_sensor:
|
||||
# - name: "Sprinkler: Should Winterize"
|
||||
# unique_id: "custom_binary_sensor.sprinkler_should_winterize"
|
||||
# device_class: problem
|
||||
# state: "{{ iif(is_state('binary_sensor.sprinkler_in_season', 'off'), iif(is_state('input_boolean.sprinkler_is_winterized', 'off'), 'on', 'off'), 'off') }}"
|
||||
|
||||
# - trigger:
|
||||
# - platform: homeassistant
|
||||
# event: start
|
||||
|
||||
# - platform: time
|
||||
# at: '01:00:00'
|
||||
|
||||
# - platform: state
|
||||
# entity_id: input_boolean.sprinkler_is_winterized
|
||||
|
||||
# - platform: event
|
||||
# event_type: event_template_reloaded
|
||||
# id: "reload"
|
||||
|
||||
# binary_sensor:
|
||||
# - name: "Sprinkler: Should Dewinterize"
|
||||
# unique_id: "custom_binary_sensor.sprinkler_should_dewinterize"
|
||||
@@ -444,7 +435,6 @@ automation:
|
||||
data:
|
||||
message: "{{now().strftime('%Y-%m-%d')}}T{{now().strftime('%H:%M:%S.%f')}},{{states('sensor.ecowitt_wh40_21917_precipitation')}},{{states('binary_sensor.is_raining')}},{{state_attr('binary_sensor.is_raining','sample_count')}},{{state_attr('binary_sensor.is_raining','sample_duration')}},{{state_attr('binary_sensor.is_raining','min_gradient')}},{{state_attr('binary_sensor.is_raining','gradient')}}"
|
||||
|
||||
|
||||
- alias: "Log Soil Moisture"
|
||||
id: 362fbc8d-64f1-47dd-a686-e460e9c18690
|
||||
trigger:
|
||||
@@ -503,7 +493,7 @@ automation:
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.sun_next_dawn
|
||||
condition: "{{ states('sensor.sun_next_dawn') not in ['unkown', 'unavailable'] }}"
|
||||
condition: "{{ states('sensor.sun_next_dawn') not in ['unknown', 'unavailable'] }}"
|
||||
action:
|
||||
- service: input_datetime.set_datetime
|
||||
target:
|
||||
@@ -532,7 +522,7 @@ automation:
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.is_raining
|
||||
to: 'on'
|
||||
to: "on"
|
||||
|
||||
condition:
|
||||
condition: or
|
||||
|
||||
@@ -178,12 +178,12 @@ automation:
|
||||
- platform: event
|
||||
event_type: automation_reloaded
|
||||
|
||||
condition: []
|
||||
condition:
|
||||
- "{{ states('camera.frigate_cam14') not in ['unknown', 'unavailable'] }}"
|
||||
# - alias: "The input_boolean controlling the cycling of cam14 is on"
|
||||
# condition: state
|
||||
# entity_id: input_boolean.cycle_cam14
|
||||
# state: "on"
|
||||
|
||||
# - alias: "No people or animals detected by Frigate for the last 5 seconds"
|
||||
# condition: state
|
||||
# entity_id: binary_sensor.frigate_cam14_all_occupancy
|
||||
@@ -192,7 +192,6 @@ automation:
|
||||
# hours: 0
|
||||
# minutes: 0
|
||||
# seconds: 5
|
||||
|
||||
# # Either the camera isn't looking at the deck
|
||||
# # or the camera is looking at the deck and the deck motion sensor has been off for at least 30 seconds
|
||||
# # or the camera is looking at the deck and the patio door has been closed for at least 30 seconds
|
||||
@@ -245,39 +244,39 @@ automation:
|
||||
while: "{{ is_state('input_boolean.cycle_cam14', 'on') }}"
|
||||
sequence:
|
||||
- choose:
|
||||
# If the camera is looking at the deck and the deck motion sensor is on, then wait 5 seconds.
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_select.camera14_preset
|
||||
state: Deck
|
||||
- condition: state
|
||||
entity_id: binary_sensor.deck_motion
|
||||
state: 'on'
|
||||
sequence:
|
||||
- service: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.camera14_status
|
||||
data:
|
||||
value: "Deck"
|
||||
- delay: 5
|
||||
|
||||
# If a person is not found, cycle to the next preset, then wait 30 seconds.
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: "{{ is_state('binary_sensor.frigate_cam14_person_occupancy','off') }}"
|
||||
sequence:
|
||||
- service: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.camera14_status
|
||||
data:
|
||||
value: "Cycling"
|
||||
- service: input_select.select_next
|
||||
data:
|
||||
cycle: true
|
||||
target:
|
||||
# If the camera is looking at the deck and the deck motion sensor is on, then wait 5 seconds.
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_select.camera14_preset
|
||||
state: Deck
|
||||
- condition: state
|
||||
entity_id: binary_sensor.deck_motion
|
||||
state: "on"
|
||||
sequence:
|
||||
- service: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.camera14_status
|
||||
data:
|
||||
value: "Deck"
|
||||
- delay: 5
|
||||
|
||||
- delay: 30
|
||||
# If a person is not found, cycle to the next preset, then wait 30 seconds.
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: "{{ is_state('binary_sensor.frigate_cam14_person_occupancy','off') }}"
|
||||
sequence:
|
||||
- service: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.camera14_status
|
||||
data:
|
||||
value: "Cycling"
|
||||
- service: input_select.select_next
|
||||
data:
|
||||
cycle: true
|
||||
target:
|
||||
entity_id: input_select.camera14_preset
|
||||
|
||||
- delay: 30
|
||||
|
||||
# If a person is found, check if the person is still present every 5 seconds
|
||||
default:
|
||||
@@ -312,6 +311,8 @@ automation:
|
||||
entity_id: sensor.frigate_cam14_all_count
|
||||
below: 2
|
||||
|
||||
- "{{ states('camera.frigate_cam14') not in ['unknown', 'unavailable'] }}"
|
||||
|
||||
action:
|
||||
# We don't need to turn off cycling the back yard camera.
|
||||
# - service: input_boolean.turn_off
|
||||
@@ -331,14 +332,11 @@ automation:
|
||||
entity_id: input_select.camera14_preset
|
||||
|
||||
# the Cycle cam 14 automation already checks if something is detected. All we need to do is force cam14 to look at the deck
|
||||
|
||||
# - delay: "00:00:05"
|
||||
|
||||
# - repeat:
|
||||
# while: "{{ is_state('binary_sensor.frigate_cam14_all_occupancy', 'on')}}"
|
||||
# sequence:
|
||||
# - delay: "00:00:05"
|
||||
|
||||
# - service: input_boolean.turn_on
|
||||
# target:
|
||||
# entity_id: input_boolean.cycle_cam14
|
||||
@@ -406,6 +404,9 @@ automation:
|
||||
platform: state
|
||||
entity_id: input_button.cam14_ptz_preset_10
|
||||
|
||||
condition:
|
||||
- "{{ states('camera.frigate_cam14') not in ['unknown', 'unavailable'] }}"
|
||||
|
||||
action:
|
||||
- choose:
|
||||
- conditions: >
|
||||
@@ -486,6 +487,10 @@ automation:
|
||||
event: start
|
||||
- platform: time_pattern
|
||||
minutes: /10
|
||||
|
||||
condition:
|
||||
- "{{ states('camera.frigate_cam14') not in ['unknown', 'unavailable'] }}"
|
||||
|
||||
action:
|
||||
- choose:
|
||||
- conditions:
|
||||
@@ -552,7 +557,7 @@ template:
|
||||
- binary_sensor:
|
||||
- name: Deck Person Occupancy
|
||||
unique_id: templatebinarysensor.deck_person_occupancy
|
||||
availability: "{{ states('binary_sensor.possible_deck_person_occupancy') not in ['unkown', 'unavailable'] }}"
|
||||
availability: "{{ states('binary_sensor.possible_deck_person_occupancy') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ is_state('binary_sensor.possible_deck_person_occupancy','on') and is_state('input_select.camera14_preset','Deck') }}"
|
||||
icon: >
|
||||
{% if is_state('binary_sensor.deck_person_occupancy','on') %}
|
||||
@@ -563,14 +568,14 @@ template:
|
||||
|
||||
- name: Deck Animal Motion
|
||||
unique_id: templatebinarysensor.deck_animal_occupancy
|
||||
availability: "{{ states('binary_sensor.possible_deck_animal_occupancy') not in ['unkown', 'unavailable'] }}"
|
||||
availability: "{{ states('binary_sensor.possible_deck_animal_occupancy') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ is_state('binary_sensor.possible_deck_animal_occupancy','on') and is_state('input_select.camera14_preset','Deck') }}"
|
||||
icon: mdi:bird
|
||||
|
||||
- sensor:
|
||||
- name: Deck Person Count
|
||||
unique_id: templatesensor.deck_person_count
|
||||
availability: "{{ states('sensor.possible_deck_person_count') not in ['unkown', 'unavailable'] }}"
|
||||
availability: "{{ states('sensor.possible_deck_person_count') not in ['unknown', 'unavailable'] }}"
|
||||
unit_of_measurement: objects
|
||||
state: >
|
||||
{% if is_state('input_select.camera14_preset','Deck') %}
|
||||
@@ -582,7 +587,7 @@ template:
|
||||
|
||||
- name: Deck Animal Count
|
||||
unique_id: templatesensor.deck_animal_count
|
||||
availability: "{{ states('sensor.possible_deck_animal_count') not in ['unkown', 'unavailable'] }}"
|
||||
availability: "{{ states('sensor.possible_deck_animal_count') not in ['unknown', 'unavailable'] }}"
|
||||
unit_of_measurement: objects
|
||||
state: >
|
||||
{% if is_state('input_select.camera14_preset','Deck') %}
|
||||
|
||||
@@ -1,51 +1,51 @@
|
||||
template:
|
||||
# Watch Done Charging
|
||||
# Watch Done Charging
|
||||
- trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.ticwatch_pro_3_gps_charger_type
|
||||
- platform: state
|
||||
entity_id: sensor.ticwatch_pro_3_gps_charger_type
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.ticwatch_pro_3_gps_battery_level
|
||||
- platform: state
|
||||
entity_id: sensor.ticwatch_pro_3_gps_battery_level
|
||||
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
id: "reload"
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
id: "reload"
|
||||
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
binary_sensor:
|
||||
- name: Clint's Watch Done Charging
|
||||
unique_id: templatebinarysensor.clints_watch_done_charging
|
||||
icon: mdi:battery-charging-100
|
||||
availability: "{{ states('sensor.ticwatch_pro_3_gps_battery_level') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.ticwatch_pro_3_gps_battery_level')|int(default=0) >= states('input_number.clints_watch_charged')|int(default=0) and is_state('sensor.ticwatch_pro_3_gps_charger_type','ac') }}"
|
||||
- name: Clint's Watch Done Charging
|
||||
unique_id: templatebinarysensor.clints_watch_done_charging
|
||||
icon: mdi:battery-charging-100
|
||||
availability: "{{ states('sensor.ticwatch_pro_3_gps_battery_level') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.ticwatch_pro_3_gps_battery_level')|int(default=0) >= states('input_number.clints_watch_charged')|int(default=0) and is_state('sensor.ticwatch_pro_3_gps_charger_type','ac') }}"
|
||||
|
||||
# Watch Done Charging
|
||||
# Watch Done Charging
|
||||
- trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.ticwatch_pro_3_gps_charger_type
|
||||
- platform: state
|
||||
entity_id: sensor.ticwatch_pro_3_gps_charger_type
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.ticwatch_pro_3_gps_battery_level
|
||||
- platform: state
|
||||
entity_id: sensor.ticwatch_pro_3_gps_battery_level
|
||||
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
id: "reload"
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
id: "reload"
|
||||
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
binary_sensor:
|
||||
- name: Clint's Watch Needs to Charge
|
||||
unique_id: templatebinarysensor.clints_watch_needs_to_charge
|
||||
icon: mdi:battery-20
|
||||
availability: "{{ states('sensor.ticwatch_pro_3_gps_battery_level') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.ticwatch_pro_3_gps_battery_level')|int(default=0) <= states('input_number.clints_watch_low')|int(default=0) and is_state('sensor.ticwatch_pro_3_gps_charger_type','none') }}"
|
||||
- name: Clint's Watch Needs to Charge
|
||||
unique_id: templatebinarysensor.clints_watch_needs_to_charge
|
||||
icon: mdi:battery-20
|
||||
availability: "{{ states('sensor.ticwatch_pro_3_gps_battery_level') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.ticwatch_pro_3_gps_battery_level')|int(default=0) <= states('input_number.clints_watch_low')|int(default=0) and is_state('sensor.ticwatch_pro_3_gps_charger_type','none') }}"
|
||||
|
||||
input_number:
|
||||
clints_watch_charged:
|
||||
name: 'Clints Watch Charged'
|
||||
name: "Clints Watch Charged"
|
||||
icon: mdi:battery
|
||||
min: 0
|
||||
max: 100
|
||||
@@ -53,9 +53,9 @@ input_number:
|
||||
mode: box
|
||||
|
||||
clints_watch_low:
|
||||
name: 'Clints Watch Low'
|
||||
name: "Clints Watch Low"
|
||||
icon: mdi:battery-20
|
||||
min: 0
|
||||
max: 100
|
||||
step: 1
|
||||
mode: box
|
||||
mode: box
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
template:
|
||||
- binary_sensor:
|
||||
- name: 'HACS Update Available'
|
||||
unique_id: binary_sensor.hacs_update_available
|
||||
icon: mdi:alpha-c-box
|
||||
state: "{{ states('sensor.hacs') | float(default=0) > 0 }}"
|
||||
availability: "{{ states('sensor.hacs') not in ['unkown', 'unavailable'] }}"
|
||||
- name: "HACS Update Available"
|
||||
unique_id: binary_sensor.hacs_update_available
|
||||
icon: mdi:alpha-c-box
|
||||
state: "{{ states('sensor.hacs') | float(default=0) > 0 }}"
|
||||
availability: "{{ states('sensor.hacs') not in ['unknown', 'unavailable'] }}"
|
||||
|
||||
@@ -11,15 +11,15 @@ notify:
|
||||
|
||||
template:
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.dreambox_lastactive
|
||||
- platform: state
|
||||
entity_id: sensor.dreambox_lastactive
|
||||
|
||||
binary_sensor:
|
||||
- name: DreamBox Recently Active
|
||||
unique_id: templatebinarysensor.dreambox_recently_active
|
||||
icon: mdi:desktop-tower-monitor
|
||||
#availability: "{{ states('sensor.dreambox_lastactive') not in ['unkown', 'unavailable'] }}"
|
||||
state: " {{ iif( states('sensor.dreambox_lastactive') == 'unknown' or is_state('sensor.dreambox_lastactive', 'unavailable'), false, as_timestamp(now()) - as_timestamp(states('sensor.dreambox_lastactive'),0) < 180 or is_state('sensor.dreambox_usernotification','Busy'))}}"
|
||||
- name: DreamBox Recently Active
|
||||
unique_id: templatebinarysensor.dreambox_recently_active
|
||||
icon: mdi:desktop-tower-monitor
|
||||
#availability: "{{ states('sensor.dreambox_lastactive') not in ['unknown', 'unavailable'] }}"
|
||||
state: " {{ iif( states('sensor.dreambox_lastactive') == 'unknown' or is_state('sensor.dreambox_lastactive', 'unavailable'), false, as_timestamp(now()) - as_timestamp(states('sensor.dreambox_lastactive'),0) < 180 or is_state('sensor.dreambox_usernotification','Busy'))}}"
|
||||
|
||||
@@ -3,7 +3,6 @@ notify:
|
||||
platform: hass_agent_notifier
|
||||
resource: !secret dreamsurface_hassagent
|
||||
|
||||
|
||||
mqtt:
|
||||
light:
|
||||
- name: "DreamSurface: Screen Brightness"
|
||||
@@ -13,7 +12,7 @@ mqtt:
|
||||
brightness_command_topic: "homeassistant/light/HASSAGENT/dreamsurface_monitor_brightness/action"
|
||||
brightness_command_template: "%PROGRAMFILES(X86)%\\Monitorian\\Monitorian.exe /set {{ value }}"
|
||||
brightness_scale: 100
|
||||
on_command_type: 'brightness'
|
||||
on_command_type: "brightness"
|
||||
icon: mdi:monitor-shimmer
|
||||
|
||||
# media_player:
|
||||
@@ -24,15 +23,15 @@ mqtt:
|
||||
|
||||
template:
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.dreamsurface_lastactive
|
||||
- platform: state
|
||||
entity_id: sensor.dreamsurface_lastactive
|
||||
|
||||
binary_sensor:
|
||||
- name: DreamSurface Recently Active
|
||||
unique_id: templatebinarysensor.dreamsurface_recently_active
|
||||
icon: mdi:tablet
|
||||
#availability: "{{ states('sensor.dreamsurface_lastactive') not in ['unkown', 'unavailable'] }}"
|
||||
state: " {{ iif( states('sensor.dreamsurface_lastactive') == 'unknown' or is_state('sensor.dreamsurface_lastactive', 'unavailable'), false, as_timestamp(now()) - as_timestamp(states('sensor.dreamsurface_lastactive'),0) < 180 or is_state('sensor.dreamsurface_usernotification','Busy'))}}"
|
||||
- name: DreamSurface Recently Active
|
||||
unique_id: templatebinarysensor.dreamsurface_recently_active
|
||||
icon: mdi:tablet
|
||||
#availability: "{{ states('sensor.dreamsurface_lastactive') not in ['unknown', 'unavailable'] }}"
|
||||
state: " {{ iif( states('sensor.dreamsurface_lastactive') == 'unknown' or is_state('sensor.dreamsurface_lastactive', 'unavailable'), false, as_timestamp(now()) - as_timestamp(states('sensor.dreamsurface_lastactive'),0) < 180 or is_state('sensor.dreamsurface_usernotification','Busy'))}}"
|
||||
|
||||
@@ -18,7 +18,7 @@ template:
|
||||
unique_id: "custom_binary_sensor.hvac_aux"
|
||||
icon: mdi:fire
|
||||
device_class: running
|
||||
availability: "{{ states('climate.thermostat') not in ['unkown', 'unavailable'] }}"
|
||||
availability: "{{ states('climate.thermostat') not in ['unknown', 'unavailable'] }}"
|
||||
state: >
|
||||
{% if 'aux' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %}
|
||||
|
||||
@@ -41,7 +41,7 @@ template:
|
||||
unique_id: "custom_binary_sensor.hvac_fan"
|
||||
icon: mdi:fan
|
||||
device_class: running
|
||||
availability: "{{ states('climate.thermostat') not in ['unkown', 'unavailable'] }}"
|
||||
availability: "{{ states('climate.thermostat') not in ['unknown', 'unavailable'] }}"
|
||||
state: >
|
||||
{% if 'fan' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %}
|
||||
|
||||
@@ -64,6 +64,6 @@ template:
|
||||
unique_id: "custom_binary_sensor.hvac_heatpump"
|
||||
icon: mdi:hvac
|
||||
device_class: running
|
||||
availability: "{{ states('climate.thermostat') not in ['unkown', 'unavailable'] }}"
|
||||
availability: "{{ states('climate.thermostat') not in ['unknown', 'unavailable'] }}"
|
||||
state: >
|
||||
{% if 'heatPump' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %}
|
||||
{% if 'heatPump' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %}
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
# TODO
|
||||
# Update to account for new get_weather_forcats BS a
|
||||
|
||||
template:
|
||||
# - binary_sensor:
|
||||
# - name: Precipitation Likely Soon
|
||||
# unique_id: templatebinarysensor.precipitation_likely_soon
|
||||
# icon: mdi:weather-rainy
|
||||
# availability: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability')|float(default=0) >= 50.0 }}"
|
||||
|
||||
# - name: Precipitation Likely
|
||||
# unique_id: templatebinarysensor.precipitation_likely
|
||||
# icon: mdi:weather-rainy
|
||||
# availability: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability')|float(default=0) >= 50.0 }}"
|
||||
|
||||
- trigger:
|
||||
- platform: time_pattern
|
||||
hours: /1
|
||||
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
id: "reload"
|
||||
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
action:
|
||||
- service: weather.get_forecasts
|
||||
data:
|
||||
type: daily
|
||||
target:
|
||||
entity_id: weather.forecast_home
|
||||
response_variable: daily
|
||||
|
||||
- service: weather.get_forecasts
|
||||
data:
|
||||
type: hourly
|
||||
target:
|
||||
entity_id: weather.forecast_home
|
||||
response_variable: hourly
|
||||
|
||||
binary_sensor:
|
||||
- name: "Impending Rain"
|
||||
unique_id: templatebinarysensor.impending_rain
|
||||
availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}"
|
||||
icon: mdi:weather-rainy
|
||||
# This looks too far into the future. Cutting it down a bit
|
||||
state: >-
|
||||
{%- set totalprecipitation = 0 | float -%}
|
||||
{%- set upcoming_precipitation = 0 | float -%}
|
||||
{%- set ns = namespace() -%}
|
||||
{%- set ns.totalprecipitation = 0 -%}
|
||||
{%- for daypart in range(0, 8) -%}
|
||||
{%- set precipitation = hourly['weather.forecast_home'].forecast[daypart].precipitation -%}
|
||||
{%- set wind_speed = hourly['weather.forecast_home'].forecast[daypart].wind_speed -%}
|
||||
{% if wind_speed > states('input_number.wind_speed_blowing_rain') |float(default=0) %}
|
||||
{%- set upcoming_precipitation = precipitation -%}
|
||||
{%- endif -%}
|
||||
{%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%}
|
||||
{%- endfor %}
|
||||
{{ ns.totalprecipitation / 100 | float | round(0) > 0.99 }}
|
||||
|
||||
sensor:
|
||||
- name: "Sprinkler: Total Expected Precipitation"
|
||||
unique_id: "custom_sensor.sprinkler_total_expected_precipitation"
|
||||
icon: mdi:weather-pouring
|
||||
unit_of_measurement: mm
|
||||
availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}"
|
||||
state: >
|
||||
{%- set totalprecipitation = 0 | float -%}
|
||||
{%- set upcoming_precipitation = 0 | float -%}
|
||||
{%- set ns = namespace() -%}
|
||||
{%- set ns.totalprecipitation = 0 -%}
|
||||
{%- for daypart in range(0, 5) -%}
|
||||
{%- set precipitation = daily['weather.forecast_home'].forecast[daypart].precipitation * 25.4 -%}
|
||||
{%- set upcoming_precipitation = precipitation -%}
|
||||
{%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%}
|
||||
{%- endfor %}
|
||||
{{ ns.totalprecipitation | float | round(0) }}
|
||||
|
||||
- name: "Today's Low Temperature"
|
||||
unique_id: templatesensor.templow_today
|
||||
unit_of_measurement: °F
|
||||
availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ daily['weather.forecast_home'].forecast[0].templow }}"
|
||||
|
||||
- name: "Today's High Temperature"
|
||||
unique_id: templatesensor.temphigh_today
|
||||
unit_of_measurement: °F
|
||||
availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ daily['weather.forecast_home'].forecast[0].temperature}}"
|
||||
|
||||
# - name: "Today's Chance of Precipitation"
|
||||
# unique_id: templatesensor.precip_chance_today
|
||||
# icon: mdi:cloud-percent
|
||||
# unit_of_measurement: '%'
|
||||
# availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ daily['weather.forecast_home'].forecast[0].precipitation_probability}}"
|
||||
|
||||
- name: "Tomorrow's Low Temperature"
|
||||
unique_id: templatesensor.templow_tomorrow
|
||||
unit_of_measurement: °F
|
||||
availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ daily['weather.forecast_home'].forecast[1].templow}}"
|
||||
|
||||
- name: "Tomorrow's High Temperature"
|
||||
unique_id: templatesensor.temphigh_tomorrow
|
||||
unit_of_measurement: °F
|
||||
availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ daily['weather.forecast_home'].forecast[1].temperature}}"
|
||||
# - name: "Tomorrow's Chance of Precipitation"
|
||||
# unique_id: templatesensor.precip_chance_tomorrow
|
||||
# icon: mdi:cloud-percent
|
||||
# unit_of_measurement: '%'
|
||||
# availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ daily['weather.forecast_home'].forecast[1].precipitation_probability}}"
|
||||
@@ -1,13 +1,13 @@
|
||||
template:
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: input_number.blue_room_light_level_trigger
|
||||
- platform: state
|
||||
entity_id: input_number.blue_room_light_level_trigger
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.blue_room_multisensor_illuminance
|
||||
- platform: state
|
||||
entity_id: sensor.blue_room_multisensor_illuminance
|
||||
|
||||
binary_sensor:
|
||||
- name: "Blue Room Naturally Lit"
|
||||
@@ -29,14 +29,14 @@ template:
|
||||
trigger: "{{ states('input_number.blue_room_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: input_number.computer_area_light_level_trigger
|
||||
- platform: state
|
||||
entity_id: input_number.computer_area_light_level_trigger
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.computer_area_multisensor_illuminance
|
||||
- platform: state
|
||||
entity_id: sensor.computer_area_multisensor_illuminance
|
||||
|
||||
binary_sensor:
|
||||
- name: "Computer Area Naturally Lit"
|
||||
@@ -58,14 +58,14 @@ template:
|
||||
trigger: "{{ states('input_number.computer_area_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: input_number.deck_light_level_trigger
|
||||
- platform: state
|
||||
entity_id: input_number.deck_light_level_trigger
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.deck_light_level
|
||||
- platform: state
|
||||
entity_id: sensor.deck_light_level
|
||||
|
||||
binary_sensor:
|
||||
- name: "Deck Naturally Lit"
|
||||
@@ -87,23 +87,23 @@ template:
|
||||
trigger: "{{ states('input_number.deck_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: input_number.dining_room_light_level_trigger
|
||||
- platform: state
|
||||
entity_id: input_number.dining_room_light_level_trigger
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.dining_room_multisensor_illuminance
|
||||
to:
|
||||
- platform: state
|
||||
entity_id: sensor.dining_room_multisensor_illuminance
|
||||
to:
|
||||
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
|
||||
binary_sensor:
|
||||
- name: "Dining Room Naturally Lit"
|
||||
unique_id: templatebinarysensor_diningroomnaturallylit
|
||||
availability: "{{ states('sensor.dining_room_multisensor_illuminance') not in ['unkown', 'unavailable'] }}"
|
||||
availability: "{{ states('sensor.dining_room_multisensor_illuminance') not in ['unknown', 'unavailable'] }}"
|
||||
delay_on:
|
||||
seconds: 3
|
||||
delay_off:
|
||||
@@ -121,14 +121,14 @@ template:
|
||||
trigger: "{{ states('input_number.dining_room_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: input_number.entryway_light_level_trigger
|
||||
- platform: state
|
||||
entity_id: input_number.entryway_light_level_trigger
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.entryway_light_level
|
||||
- platform: state
|
||||
entity_id: sensor.entryway_light_level
|
||||
|
||||
binary_sensor:
|
||||
- name: "Entryway Naturally Lit"
|
||||
@@ -150,14 +150,14 @@ template:
|
||||
trigger: "{{ states('input_number.entryway_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: input_number.front_porch_light_level_trigger
|
||||
- platform: state
|
||||
entity_id: input_number.front_porch_light_level_trigger
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.front_porch_light_level
|
||||
- platform: state
|
||||
entity_id: sensor.front_porch_light_level
|
||||
|
||||
binary_sensor:
|
||||
- name: "Front Porch Naturally Lit"
|
||||
@@ -179,14 +179,14 @@ template:
|
||||
trigger: "{{ states('input_number.front_porch_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: input_number.front_room_light_level_trigger
|
||||
- platform: state
|
||||
entity_id: input_number.front_room_light_level_trigger
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.front_room_light_level
|
||||
- platform: state
|
||||
entity_id: sensor.front_room_light_level
|
||||
|
||||
binary_sensor:
|
||||
- name: "Front Room Naturally Lit"
|
||||
@@ -208,14 +208,14 @@ template:
|
||||
trigger: "{{ states('input_number.front_room_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: input_number.garage_overhead_light_level_trigger
|
||||
- platform: state
|
||||
entity_id: input_number.garage_overhead_light_level_trigger
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.garage_multisensor_illuminance
|
||||
- platform: state
|
||||
entity_id: sensor.garage_multisensor_illuminance
|
||||
|
||||
binary_sensor:
|
||||
- name: "Garage Naturally Lit"
|
||||
@@ -237,14 +237,14 @@ template:
|
||||
trigger: "{{ states('input_number.garage_overhead_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: input_number.great_room_light_level_trigger
|
||||
- platform: state
|
||||
entity_id: input_number.great_room_light_level_trigger
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.great_room_multisensor_illuminance
|
||||
- platform: state
|
||||
entity_id: sensor.great_room_multisensor_illuminance
|
||||
|
||||
binary_sensor:
|
||||
- name: "Great Room Naturally Lit"
|
||||
@@ -266,14 +266,14 @@ template:
|
||||
trigger: "{{ states('input_number.great_room_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id: input_number.kitchen_light_level_trigger
|
||||
- platform: state
|
||||
entity_id: input_number.kitchen_light_level_trigger
|
||||
|
||||
- platform: state
|
||||
entity_id: sensor.kitchen_multisensor_illuminance
|
||||
- platform: state
|
||||
entity_id: sensor.kitchen_multisensor_illuminance
|
||||
|
||||
binary_sensor:
|
||||
- name: "Kitchen Naturally Lit"
|
||||
@@ -295,13 +295,13 @@ template:
|
||||
trigger: "{{ states('input_number.kitchen_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id:
|
||||
- input_number.master_bedroom_light_level_trigger
|
||||
- sensor.master_bedroom_multisensor_illuminance
|
||||
- platform: state
|
||||
entity_id:
|
||||
- input_number.master_bedroom_light_level_trigger
|
||||
- sensor.master_bedroom_multisensor_illuminance
|
||||
|
||||
binary_sensor:
|
||||
- name: "Master Bedroom Naturally Lit"
|
||||
@@ -323,13 +323,13 @@ template:
|
||||
trigger: "{{ states('input_number.master_bedroom_light_level_trigger') | float(default=0) }}"
|
||||
|
||||
- trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
|
||||
- platform: state
|
||||
entity_id:
|
||||
- input_number.nursery_light_level_trigger
|
||||
- sensor.nursery_multisensor_illuminance
|
||||
- platform: state
|
||||
entity_id:
|
||||
- input_number.nursery_light_level_trigger
|
||||
- sensor.nursery_multisensor_illuminance
|
||||
|
||||
binary_sensor:
|
||||
- name: "Nursery Naturally Lit"
|
||||
@@ -433,4 +433,4 @@ input_number:
|
||||
icon: mdi:brightness-auto
|
||||
min: 0
|
||||
max: 50000
|
||||
mode: box
|
||||
mode: box
|
||||
|
||||
@@ -1,127 +1,127 @@
|
||||
# TODO
|
||||
# Update to account for new get_weather_forcats BS a
|
||||
# # TODO
|
||||
# # Update to account for new get_weather_forcats BS a
|
||||
|
||||
template:
|
||||
- binary_sensor:
|
||||
- name: Precipitation Likely Soon
|
||||
unique_id: templatebinarysensor.precipitation_likely_soon
|
||||
icon: mdi:weather-rainy
|
||||
availability: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability')|float(default=0) >= 50.0 }}"
|
||||
# template:
|
||||
# - binary_sensor:
|
||||
# - name: Precipitation Likely Soon
|
||||
# unique_id: templatebinarysensor.precipitation_likely_soon
|
||||
# icon: mdi:weather-rainy
|
||||
# availability: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability')|float(default=0) >= 50.0 }}"
|
||||
|
||||
- name: Precipitation Likely
|
||||
unique_id: templatebinarysensor.precipitation_likely
|
||||
icon: mdi:weather-rainy
|
||||
availability: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability')|float(default=0) >= 50.0 }}"
|
||||
# - name: Precipitation Likely
|
||||
# unique_id: templatebinarysensor.precipitation_likely
|
||||
# icon: mdi:weather-rainy
|
||||
# availability: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability')|float(default=0) >= 50.0 }}"
|
||||
|
||||
- trigger:
|
||||
# - trigger:
|
||||
|
||||
- platform: time_pattern
|
||||
hours: /1
|
||||
# - platform: time_pattern
|
||||
# hours: /1
|
||||
|
||||
- platform: event
|
||||
event_type: event_template_reloaded
|
||||
id: "reload"
|
||||
# - platform: event
|
||||
# event_type: event_template_reloaded
|
||||
# id: "reload"
|
||||
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
# - platform: homeassistant
|
||||
# event: start
|
||||
|
||||
action:
|
||||
- service: weather.get_forecasts
|
||||
data:
|
||||
type: daily
|
||||
target:
|
||||
entity_id: weather.openweathermap_daily
|
||||
response_variable: daily
|
||||
# action:
|
||||
# - service: weather.get_forecasts
|
||||
# data:
|
||||
# type: daily
|
||||
# target:
|
||||
# entity_id: weather.openweathermap_daily
|
||||
# response_variable: daily
|
||||
|
||||
- service: weather.get_forecasts
|
||||
data:
|
||||
type: hourly
|
||||
target:
|
||||
entity_id: weather.openweathermap_hourly
|
||||
response_variable: hourly
|
||||
# - service: weather.get_forecasts
|
||||
# data:
|
||||
# type: hourly
|
||||
# target:
|
||||
# entity_id: weather.openweathermap_hourly
|
||||
# response_variable: hourly
|
||||
|
||||
binary_sensor:
|
||||
- name: "Impending Rain"
|
||||
unique_id: templatebinarysensor.impending_rain
|
||||
availability: "{{ states('weather.openweathermap_hourly') not in ['unkown', 'unavailable'] }}"
|
||||
icon: mdi:weather-rainy
|
||||
# This looks too far into the future. Cutting it down a bit
|
||||
state: >-
|
||||
{%- set totalprecipitation = 0 | float -%}
|
||||
{%- set upcoming_precipitation = 0 | float -%}
|
||||
{%- set ns = namespace() -%}
|
||||
{%- set ns.totalprecipitation = 0 -%}
|
||||
{%- for daypart in range(0, 8) -%}
|
||||
{%- set precipitation = hourly['weather.openweathermap_hourly'].forecast[daypart].precipitation -%}
|
||||
{%- set wind_speed = hourly['weather.openweathermap_hourly'].forecast[daypart].wind_speed -%}
|
||||
{%- set precipitation_probability = hourly['weather.openweathermap_hourly'].forecast[daypart].precipitation_probability %}
|
||||
# binary_sensor:
|
||||
# - name: "Impending Rain"
|
||||
# unique_id: templatebinarysensor.impending_rain
|
||||
# availability: "{{ states('weather.openweathermap_hourly') not in ['unknown', 'unavailable'] }}"
|
||||
# icon: mdi:weather-rainy
|
||||
# # This looks too far into the future. Cutting it down a bit
|
||||
# state: >-
|
||||
# {%- set totalprecipitation = 0 | float -%}
|
||||
# {%- set upcoming_precipitation = 0 | float -%}
|
||||
# {%- set ns = namespace() -%}
|
||||
# {%- set ns.totalprecipitation = 0 -%}
|
||||
# {%- for daypart in range(0, 8) -%}
|
||||
# {%- set precipitation = hourly['weather.openweathermap_hourly'].forecast[daypart].precipitation -%}
|
||||
# {%- set wind_speed = hourly['weather.openweathermap_hourly'].forecast[daypart].wind_speed -%}
|
||||
# {%- set precipitation_probability = hourly['weather.openweathermap_hourly'].forecast[daypart].precipitation_probability %}
|
||||
|
||||
{% if precipitation_probability > 0 -%}
|
||||
{% if wind_speed > states('input_number.wind_speed_blowing_rain') |float(default=0) %}
|
||||
{%- set upcoming_precipitation = precipitation * precipitation_probability -%}
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%}
|
||||
{%- endfor %}
|
||||
{{ ns.totalprecipitation / 100 | float | round(0) > 0.99 }}
|
||||
# {% if precipitation_probability > 0 -%}
|
||||
# {% if wind_speed > states('input_number.wind_speed_blowing_rain') |float(default=0) %}
|
||||
# {%- set upcoming_precipitation = precipitation * precipitation_probability -%}
|
||||
# {%- endif -%}
|
||||
# {%- endif -%}
|
||||
# {%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%}
|
||||
# {%- endfor %}
|
||||
# {{ ns.totalprecipitation / 100 | float | round(0) > 0.99 }}
|
||||
|
||||
sensor:
|
||||
- name: "Sprinkler: Total Expected Precipitation"
|
||||
unique_id: "custom_sensor.sprinkler_total_expected_precipitation"
|
||||
icon: mdi:weather-pouring
|
||||
unit_of_measurement: mm
|
||||
availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}"
|
||||
state: >
|
||||
{%- set totalprecipitation = 0 | float -%}
|
||||
{%- set upcoming_precipitation = 0 | float -%}
|
||||
{%- set ns = namespace() -%}
|
||||
{%- set ns.totalprecipitation = 0 -%}
|
||||
{%- for daypart in range(0, 8) -%}
|
||||
{%- set precipitation = daily['weather.openweathermap_daily'].forecast[daypart].precipitation * 25.4 -%}
|
||||
{%- set precipitation_probability = daily['weather.openweathermap_daily'].forecast[daypart].precipitation_probability / 100 %}
|
||||
{% if precipitation_probability >0 -%}
|
||||
{%- set upcoming_precipitation = precipitation * precipitation_probability -%}
|
||||
{%- endif -%}
|
||||
{%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%}
|
||||
{%- endfor %}
|
||||
{{ ns.totalprecipitation | float | round(0) }}
|
||||
# sensor:
|
||||
# - name: "Sprinkler: Total Expected Precipitation"
|
||||
# unique_id: "custom_sensor.sprinkler_total_expected_precipitation"
|
||||
# icon: mdi:weather-pouring
|
||||
# unit_of_measurement: mm
|
||||
# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}"
|
||||
# state: >
|
||||
# {%- set totalprecipitation = 0 | float -%}
|
||||
# {%- set upcoming_precipitation = 0 | float -%}
|
||||
# {%- set ns = namespace() -%}
|
||||
# {%- set ns.totalprecipitation = 0 -%}
|
||||
# {%- for daypart in range(0, 8) -%}
|
||||
# {%- set precipitation = daily['weather.openweathermap_daily'].forecast[daypart].precipitation * 25.4 -%}
|
||||
# {%- set precipitation_probability = daily['weather.openweathermap_daily'].forecast[daypart].precipitation_probability / 100 %}
|
||||
# {% if precipitation_probability >0 -%}
|
||||
# {%- set upcoming_precipitation = precipitation * precipitation_probability -%}
|
||||
# {%- endif -%}
|
||||
# {%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%}
|
||||
# {%- endfor %}
|
||||
# {{ ns.totalprecipitation | float | round(0) }}
|
||||
|
||||
- name: "Today's Low Temperature"
|
||||
unique_id: templatesensor.templow_today
|
||||
unit_of_measurement: °F
|
||||
availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ daily['weather.openweathermap_daily'].forecast[0].templow }}"
|
||||
# - name: "Today's Low Temperature"
|
||||
# unique_id: templatesensor.templow_today
|
||||
# unit_of_measurement: °F
|
||||
# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ daily['weather.openweathermap_daily'].forecast[0].templow }}"
|
||||
|
||||
- name: "Today's High Temperature"
|
||||
unique_id: templatesensor.temphigh_today
|
||||
unit_of_measurement: °F
|
||||
availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ daily['weather.openweathermap_daily'].forecast[0].temperature}}"
|
||||
# - name: "Today's High Temperature"
|
||||
# unique_id: templatesensor.temphigh_today
|
||||
# unit_of_measurement: °F
|
||||
# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ daily['weather.openweathermap_daily'].forecast[0].temperature}}"
|
||||
|
||||
- name: "Today's Chance of Precipitation"
|
||||
unique_id: templatesensor.precip_chance_today
|
||||
icon: mdi:cloud-percent
|
||||
unit_of_measurement: '%'
|
||||
availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ daily['weather.openweathermap_daily'].forecast[0].precipitation_probability}}"
|
||||
# - name: "Today's Chance of Precipitation"
|
||||
# unique_id: templatesensor.precip_chance_today
|
||||
# icon: mdi:cloud-percent
|
||||
# unit_of_measurement: '%'
|
||||
# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ daily['weather.openweathermap_daily'].forecast[0].precipitation_probability}}"
|
||||
|
||||
- name: "Tomorrow's Low Temperature"
|
||||
unique_id: templatesensor.templow_tomorrow
|
||||
unit_of_measurement: °F
|
||||
availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ daily['weather.openweathermap_daily'].forecast[1].templow}}"
|
||||
# - name: "Tomorrow's Low Temperature"
|
||||
# unique_id: templatesensor.templow_tomorrow
|
||||
# unit_of_measurement: °F
|
||||
# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ daily['weather.openweathermap_daily'].forecast[1].templow}}"
|
||||
|
||||
- name: "Tomorrow's High Temperature"
|
||||
unique_id: templatesensor.temphigh_tomorrow
|
||||
unit_of_measurement: °F
|
||||
availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ daily['weather.openweathermap_daily'].forecast[1].temperature}}"
|
||||
# - name: "Tomorrow's High Temperature"
|
||||
# unique_id: templatesensor.temphigh_tomorrow
|
||||
# unit_of_measurement: °F
|
||||
# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ daily['weather.openweathermap_daily'].forecast[1].temperature}}"
|
||||
|
||||
- name: "Tomorrow's Chance of Precipitation"
|
||||
unique_id: templatesensor.precip_chance_tomorrow
|
||||
icon: mdi:cloud-percent
|
||||
unit_of_measurement: '%'
|
||||
availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ daily['weather.openweathermap_daily'].forecast[1].precipitation_probability}}"
|
||||
# - name: "Tomorrow's Chance of Precipitation"
|
||||
# unique_id: templatesensor.precip_chance_tomorrow
|
||||
# icon: mdi:cloud-percent
|
||||
# unit_of_measurement: '%'
|
||||
# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}"
|
||||
# state: "{{ daily['weather.openweathermap_daily'].forecast[1].precipitation_probability}}"
|
||||
|
||||
@@ -33,6 +33,8 @@ automation:
|
||||
state: "on"
|
||||
|
||||
action:
|
||||
- service: notify.pixel_7_coordinates
|
||||
- service: notify.send_message
|
||||
target:
|
||||
entity_id: notify.pixel_7_coordinates
|
||||
data:
|
||||
message: "{{now().strftime('%Y-%m-%d')}}T{{now().strftime('%H:%M:%S.%f')}},{{states('device_tracker.pixel_7')}},{{state_attr('device_tracker.pixel_7','latitude')}},{{state_attr('device_tracker.pixel_7','longitude')}}"
|
||||
@@ -15,243 +15,242 @@ input_number:
|
||||
|
||||
template:
|
||||
- binary_sensor:
|
||||
# This is ON when it is warmer outside than it is inside, as defined by input_number.warmer_outside_difference_trigger
|
||||
- name: Warmer Outside
|
||||
unique_id: templatebinarysensor.warmer_outside
|
||||
icon: mdi:sun-snowflake-variant
|
||||
device_class: heat
|
||||
delay_on:
|
||||
seconds: 15
|
||||
delay_off:
|
||||
seconds: 15
|
||||
availability: "{{ (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}"
|
||||
state: "{{ iif(states('sensor.outdoors_mean_temperature') | float(default=0) - states('input_number.warmer_outside_difference_trigger') | float(default=0) > states('sensor.upstairs_mean_temperature') | float(default=0) ) }}"
|
||||
attributes:
|
||||
indoors: "{{ states('sensor.upstairs_mean_temperature') | float(default=0) }}"
|
||||
outdoors: "{{ states('sensor.outdoors_mean_temperature') | float(default=0) }}"
|
||||
trigger: "{{ states('input_number.warmer_outside_difference_trigger') | float(default=0) }}"
|
||||
# This is ON when it is warmer outside than it is inside, as defined by input_number.warmer_outside_difference_trigger
|
||||
- name: Warmer Outside
|
||||
unique_id: templatebinarysensor.warmer_outside
|
||||
icon: mdi:sun-snowflake-variant
|
||||
device_class: heat
|
||||
delay_on:
|
||||
seconds: 15
|
||||
delay_off:
|
||||
seconds: 15
|
||||
availability: "{{ (states('sensor.upstairs_mean_temperature') not in ['unknown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unknown', 'unavailable']) }}"
|
||||
state: "{{ iif(states('sensor.outdoors_mean_temperature') | float(default=0) - states('input_number.warmer_outside_difference_trigger') | float(default=0) > states('sensor.upstairs_mean_temperature') | float(default=0) ) }}"
|
||||
attributes:
|
||||
indoors: "{{ states('sensor.upstairs_mean_temperature') | float(default=0) }}"
|
||||
outdoors: "{{ states('sensor.outdoors_mean_temperature') | float(default=0) }}"
|
||||
trigger: "{{ states('input_number.warmer_outside_difference_trigger') | float(default=0) }}"
|
||||
|
||||
# This is ON when it is cooler outside than it is inside, as defined by input_number.cooler_outside_difference_trigger
|
||||
- name: Cooler Outside
|
||||
unique_id: templatebinarysensor.cooler_outside
|
||||
icon: mdi:sun-snowflake-variant
|
||||
device_class: cold
|
||||
delay_on:
|
||||
seconds: 15
|
||||
delay_off:
|
||||
seconds: 15
|
||||
availability: "{{ (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}"
|
||||
state: "{{ iif(states('sensor.outdoors_mean_temperature') | float(default=0) + states('input_number.cooler_outside_difference_trigger') | float(default=0) < states('sensor.upstairs_mean_temperature') | float(default=0) ) }}"
|
||||
attributes:
|
||||
indoors: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}"
|
||||
outdoors: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
trigger: "{{ states('input_number.cooler_outside_difference_trigger') | float(default=0) }}"
|
||||
# This is ON when it is cooler outside than it is inside, as defined by input_number.cooler_outside_difference_trigger
|
||||
- name: Cooler Outside
|
||||
unique_id: templatebinarysensor.cooler_outside
|
||||
icon: mdi:sun-snowflake-variant
|
||||
device_class: cold
|
||||
delay_on:
|
||||
seconds: 15
|
||||
delay_off:
|
||||
seconds: 15
|
||||
availability: "{{ (states('sensor.upstairs_mean_temperature') not in ['unknown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unknown', 'unavailable']) }}"
|
||||
state: "{{ iif(states('sensor.outdoors_mean_temperature') | float(default=0) + states('input_number.cooler_outside_difference_trigger') | float(default=0) < states('sensor.upstairs_mean_temperature') | float(default=0) ) }}"
|
||||
attributes:
|
||||
indoors: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}"
|
||||
outdoors: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
trigger: "{{ states('input_number.cooler_outside_difference_trigger') | float(default=0) }}"
|
||||
|
||||
# This is ON when the temperature outside is hotter than the temp_high configured as part of the climate platform
|
||||
- name: Too Hot Outside
|
||||
unique_id: templatebinarysensor.too_hot_outside
|
||||
icon: mdi:weather-sunny
|
||||
device_class: heat
|
||||
delay_on:
|
||||
seconds: 15
|
||||
delay_off:
|
||||
seconds: 15
|
||||
availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}"
|
||||
state: "{{states('sensor.outdoors_mean_temperature') | float(default=0) > states('sensor.hvac_target_temp_high') | float(default=0) - (states('input_number.warmer_outside_difference_trigger') | float(default=0) / 2) }}"
|
||||
attributes:
|
||||
outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}"
|
||||
# This is ON when the temperature outside is hotter than the temp_high configured as part of the climate platform
|
||||
- name: Too Hot Outside
|
||||
unique_id: templatebinarysensor.too_hot_outside
|
||||
icon: mdi:weather-sunny
|
||||
device_class: heat
|
||||
delay_on:
|
||||
seconds: 15
|
||||
delay_off:
|
||||
seconds: 15
|
||||
availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unknown', 'unavailable']) }}"
|
||||
state: "{{states('sensor.outdoors_mean_temperature') | float(default=0) > states('sensor.hvac_target_temp_high') | float(default=0) - (states('input_number.warmer_outside_difference_trigger') | float(default=0) / 2) }}"
|
||||
attributes:
|
||||
outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}"
|
||||
|
||||
# This is ON when the thermostat is hotter than the temp_high configured as part of the climate platform
|
||||
- name: Too Hot Inside
|
||||
unique_id: templatebinarysensor.too_hot_inside
|
||||
icon: mdi:weather-sunny
|
||||
device_class: heat
|
||||
availability: "{{ (states('sensor.hvac_target_temp_high') not in ['unkown', 'unavailable']) and (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) }}"
|
||||
state: "{{states('sensor.upstairs_mean_temperature') | float(default=0) > states('sensor.hvac_target_temp_high') | float(default=(state_attr('climate.thermostat','temperature') |float(default=0))) - 1.0 }}"
|
||||
attributes:
|
||||
upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}"
|
||||
target_temp_high: "{{ states('sensor.hvac_target_temp_high') | float(default=0)}}"
|
||||
target_temperature: "{{ state_attr('climate.thermostat','temperature') |float(default=0) }}"
|
||||
# This is ON when the thermostat is hotter than the temp_high configured as part of the climate platform
|
||||
- name: Too Hot Inside
|
||||
unique_id: templatebinarysensor.too_hot_inside
|
||||
icon: mdi:weather-sunny
|
||||
device_class: heat
|
||||
availability: "{{ (states('sensor.hvac_target_temp_high') not in ['unknown', 'unavailable']) and (states('sensor.upstairs_mean_temperature') not in ['unknown', 'unavailable']) }}"
|
||||
state: "{{states('sensor.upstairs_mean_temperature') | float(default=0) > states('sensor.hvac_target_temp_high') | float(default=(state_attr('climate.thermostat','temperature') |float(default=0))) - 1.0 }}"
|
||||
attributes:
|
||||
upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}"
|
||||
target_temp_high: "{{ states('sensor.hvac_target_temp_high') | float(default=0)}}"
|
||||
target_temperature: "{{ state_attr('climate.thermostat','temperature') |float(default=0) }}"
|
||||
|
||||
# This is ON when the temperature outside is colder than the temp_low configured as part of the climate platform
|
||||
- name: Too Cold Outside
|
||||
unique_id: templatebinarysensor.too_cold_outside
|
||||
icon: mdi:snowflake
|
||||
device_class: cold
|
||||
delay_on:
|
||||
seconds: 15
|
||||
delay_off:
|
||||
seconds: 15
|
||||
availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}"
|
||||
state: "{{states('sensor.outdoors_mean_temperature') | float(default=0) < states('sensor.hvac_target_temp_low') | float(default=0) - (states('input_number.cooler_outside_difference_trigger') | float(default=0) ) }}"
|
||||
attributes:
|
||||
outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}"
|
||||
# This is ON when the temperature outside is colder than the temp_low configured as part of the climate platform
|
||||
- name: Too Cold Outside
|
||||
unique_id: templatebinarysensor.too_cold_outside
|
||||
icon: mdi:snowflake
|
||||
device_class: cold
|
||||
delay_on:
|
||||
seconds: 15
|
||||
delay_off:
|
||||
seconds: 15
|
||||
availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unknown', 'unavailable']) }}"
|
||||
state: "{{states('sensor.outdoors_mean_temperature') | float(default=0) < states('sensor.hvac_target_temp_low') | float(default=0) - (states('input_number.cooler_outside_difference_trigger') | float(default=0) ) }}"
|
||||
attributes:
|
||||
outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}"
|
||||
|
||||
# This is ON when the thermostat is hotter than the temp_high configured as part of the climate platform
|
||||
- name: Too Cold Inside
|
||||
unique_id: templatebinarysensor.too_cold_inside
|
||||
icon: mdi:snowflake
|
||||
device_class: cold
|
||||
availability: "{{ (states('sensor.hvac_target_temp_low') not in ['unkown', 'unavailable']) and (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) }}"
|
||||
state: "{{states('sensor.upstairs_mean_temperature') | float(default=0) < states('sensor.hvac_target_temp_low') | float(default=(state_attr('climate.thermostat','temperature') |float(default=0))) + 1.0 }}"
|
||||
attributes:
|
||||
upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}"
|
||||
target_temp_low: "{{ states('sensor.hvac_target_temp_low') | float(default=0)}}"
|
||||
target_temperature: "{{ state_attr('climate.thermostat','temperature') |float(default=0) }}"
|
||||
# This is ON when the thermostat is hotter than the temp_high configured as part of the climate platform
|
||||
- name: Too Cold Inside
|
||||
unique_id: templatebinarysensor.too_cold_inside
|
||||
icon: mdi:snowflake
|
||||
device_class: cold
|
||||
availability: "{{ (states('sensor.hvac_target_temp_low') not in ['unknown', 'unavailable']) and (states('sensor.upstairs_mean_temperature') not in ['unknown', 'unavailable']) }}"
|
||||
state: "{{states('sensor.upstairs_mean_temperature') | float(default=0) < states('sensor.hvac_target_temp_low') | float(default=(state_attr('climate.thermostat','temperature') |float(default=0))) + 1.0 }}"
|
||||
attributes:
|
||||
upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}"
|
||||
target_temp_low: "{{ states('sensor.hvac_target_temp_low') | float(default=0)}}"
|
||||
target_temperature: "{{ state_attr('climate.thermostat','temperature') |float(default=0) }}"
|
||||
|
||||
# This is ON when either the garage door or the exterior garage door is open while the inner garage door is open
|
||||
- name: Inner Garage Door Open to Outside
|
||||
unique_id: templatebinarysensor.inner_garage_door_open_to_outside
|
||||
device_class: door
|
||||
availability: "{{ (states('binary_sensor.inner_garage_door') not in ['unkown', 'unavailable']) and (states('binary_sensor.garage_door') not in ['unkown', 'unavailable']) and (states('binary_sensor.outer_garage_door') not in ['unkown', 'unavailable']) }}"
|
||||
state: >-
|
||||
{% if is_state('binary_sensor.inner_garage_door', 'on') %}
|
||||
{% if is_state('binary_sensor.garage_door', 'on') or is_state('binary_sensor.outer_garage_door', 'on') %}
|
||||
{{'true'}}
|
||||
# This is ON when either the garage door or the exterior garage door is open while the inner garage door is open
|
||||
- name: Inner Garage Door Open to Outside
|
||||
unique_id: templatebinarysensor.inner_garage_door_open_to_outside
|
||||
device_class: door
|
||||
availability: "{{ (states('binary_sensor.inner_garage_door') not in ['unknown', 'unavailable']) and (states('binary_sensor.garage_door') not in ['unknown', 'unavailable']) and (states('binary_sensor.outer_garage_door') not in ['unknown', 'unavailable']) }}"
|
||||
state: >-
|
||||
{% if is_state('binary_sensor.inner_garage_door', 'on') %}
|
||||
{% if is_state('binary_sensor.garage_door', 'on') or is_state('binary_sensor.outer_garage_door', 'on') %}
|
||||
{{'true'}}
|
||||
{% else %}
|
||||
{{'false'}}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{'false'}}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{'false'}}
|
||||
{% endif %}
|
||||
|
||||
# This is ON when an exterior door or window has been left open for more than 10 minutes
|
||||
- name: Something Open
|
||||
unique_id: templatebinarysensor.something_open
|
||||
icon: mdi:door-open
|
||||
device_class: opening
|
||||
state: "{{ iif(is_state('binary_sensor.patio_door_contact', 'on') or is_state('group.my_exterior_windows', 'on') or is_state('binary_sensor.front_door_contact', 'on') or is_state('binary_sensor.inner_garage_door_open_to_outside', 'on')) }}"
|
||||
# This is ON when an exterior door or window has been left open for more than 10 minutes
|
||||
- name: Something Open
|
||||
unique_id: templatebinarysensor.something_open
|
||||
icon: mdi:door-open
|
||||
device_class: opening
|
||||
state: "{{ iif(is_state('binary_sensor.patio_door_contact', 'on') or is_state('group.my_exterior_windows', 'on') or is_state('binary_sensor.front_door_contact', 'on') or is_state('binary_sensor.inner_garage_door_open_to_outside', 'on')) }}"
|
||||
|
||||
- name: Something Open Too Warm or Cold
|
||||
unique_id: templatebinarysensor.something_open_too_warm_or_cold
|
||||
device_class: problem
|
||||
delay_on:
|
||||
minutes: 2
|
||||
state: >-
|
||||
{% if is_state('binary_sensor.something_open','on') %}
|
||||
{% if is_state('binary_sensor.too_cold_inside','on') and is_state('binary_sensor.cooler_outside', 'on') and is_state('binary_sensor.getting_warmer_outside', 'off') %}
|
||||
{{'true'}}
|
||||
{% elif is_state('binary_sensor.too_hot_inside','on') and is_state('binary_sensor.warmer_outside', 'on') and is_state('binary_sensor.getting_cooler_outside', 'off') %}
|
||||
{{'true'}}
|
||||
- name: Something Open Too Warm or Cold
|
||||
unique_id: templatebinarysensor.something_open_too_warm_or_cold
|
||||
device_class: problem
|
||||
delay_on:
|
||||
minutes: 2
|
||||
state: >-
|
||||
{% if is_state('binary_sensor.something_open','on') %}
|
||||
{% if is_state('binary_sensor.too_cold_inside','on') and is_state('binary_sensor.cooler_outside', 'on') and is_state('binary_sensor.getting_warmer_outside', 'off') %}
|
||||
{{'true'}}
|
||||
{% elif is_state('binary_sensor.too_hot_inside','on') and is_state('binary_sensor.warmer_outside', 'on') and is_state('binary_sensor.getting_cooler_outside', 'off') %}
|
||||
{{'true'}}
|
||||
{% else %}
|
||||
{{'false'}}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{'false'}}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{'false'}}
|
||||
{% endif %}
|
||||
attributes:
|
||||
outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}"
|
||||
target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}"
|
||||
target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}"
|
||||
getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}"
|
||||
too_hot_inside: "{{ states('binary_sensor.too_hot_inside') }}"
|
||||
warmer_outside: "{{ states('binary_sensor.warmer_outside') }}"
|
||||
too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}"
|
||||
getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}"
|
||||
too_cold_inside: "{{ states('binary_sensor.too_cold_inside') }}"
|
||||
cooler_outside: "{{ states('binary_sensor.cooler_outside') }}"
|
||||
too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}"
|
||||
attributes:
|
||||
outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}"
|
||||
target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}"
|
||||
target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}"
|
||||
getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}"
|
||||
too_hot_inside: "{{ states('binary_sensor.too_hot_inside') }}"
|
||||
warmer_outside: "{{ states('binary_sensor.warmer_outside') }}"
|
||||
too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}"
|
||||
getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}"
|
||||
too_cold_inside: "{{ states('binary_sensor.too_cold_inside') }}"
|
||||
cooler_outside: "{{ states('binary_sensor.cooler_outside') }}"
|
||||
too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}"
|
||||
|
||||
- name: Need to Open Something Too Warm or Cold
|
||||
unique_id: templatebinarysensor.need_to_open_something_too_warm_or_cold
|
||||
device_class: problem
|
||||
# delay_on:
|
||||
# minutes: 5
|
||||
state: >-
|
||||
{% if is_state('binary_sensor.something_open','off') %}
|
||||
{% if is_state('binary_sensor.too_cold_inside','off') and is_state('binary_sensor.too_hot_inside','off') and is_state('binary_sensor.too_cold_outside','off') and is_state('binary_sensor.too_hot_outside','off') %}
|
||||
{{'true'}}
|
||||
- name: Need to Open Something Too Warm or Cold
|
||||
unique_id: templatebinarysensor.need_to_open_something_too_warm_or_cold
|
||||
device_class: problem
|
||||
# delay_on:
|
||||
# minutes: 5
|
||||
state: >-
|
||||
{% if is_state('binary_sensor.something_open','off') %}
|
||||
{% if is_state('binary_sensor.too_cold_inside','off') and is_state('binary_sensor.too_hot_inside','off') and is_state('binary_sensor.too_cold_outside','off') and is_state('binary_sensor.too_hot_outside','off') %}
|
||||
{{'true'}}
|
||||
{% else %}
|
||||
{{'false'}}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{'false'}}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{'false'}}
|
||||
{% endif %}
|
||||
attributes:
|
||||
outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}"
|
||||
target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}"
|
||||
target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}"
|
||||
getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}"
|
||||
too_hot_inside: "{{ states('binary_sensor.too_hot_inside') }}"
|
||||
warmer_outside: "{{ states('binary_sensor.warmer_outside') }}"
|
||||
too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}"
|
||||
getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}"
|
||||
too_cold_inside: "{{ states('binary_sensor.too_cold_inside') }}"
|
||||
cooler_outside: "{{ states('binary_sensor.cooler_outside') }}"
|
||||
too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}"
|
||||
|
||||
attributes:
|
||||
outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}"
|
||||
target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}"
|
||||
target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}"
|
||||
getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}"
|
||||
too_hot_inside: "{{ states('binary_sensor.too_hot_inside') }}"
|
||||
warmer_outside: "{{ states('binary_sensor.warmer_outside') }}"
|
||||
too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}"
|
||||
getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}"
|
||||
too_cold_inside: "{{ states('binary_sensor.too_cold_inside') }}"
|
||||
cooler_outside: "{{ states('binary_sensor.cooler_outside') }}"
|
||||
too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}"
|
||||
|
||||
- sensor:
|
||||
- name: Outdoor Temperature Gradient
|
||||
unique_id: templatesensor.outdoor_temperature_gradient
|
||||
state: "{{ (state_attr('binary_sensor.getting_warmer_outside','gradient') | float(default=0) * 10000) | round(2)}}"
|
||||
availability: "{{ (states('binary_sensor.getting_warmer_outside') not in ['unkown', 'unavailable']) }}"
|
||||
icon: mdi:sun-thermometer
|
||||
state_class: measurement
|
||||
unit_of_measurement: p
|
||||
attributes:
|
||||
outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}"
|
||||
target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}"
|
||||
getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}"
|
||||
warmer_outside: "{{ states('binary_sensor.warmer_outside') }}"
|
||||
too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}"
|
||||
getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}"
|
||||
cooler_outside: "{{ states('binary_sensor.cooler_outside') }}"
|
||||
too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}"
|
||||
- name: Outdoor Temperature Gradient
|
||||
unique_id: templatesensor.outdoor_temperature_gradient
|
||||
state: "{{ (state_attr('binary_sensor.getting_warmer_outside','gradient') | float(default=0) * 10000) | round(2)}}"
|
||||
availability: "{{ (states('binary_sensor.getting_warmer_outside') not in ['unknown', 'unavailable']) }}"
|
||||
icon: mdi:sun-thermometer
|
||||
state_class: measurement
|
||||
unit_of_measurement: p
|
||||
attributes:
|
||||
outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}"
|
||||
target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}"
|
||||
target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}"
|
||||
getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}"
|
||||
warmer_outside: "{{ states('binary_sensor.warmer_outside') }}"
|
||||
too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}"
|
||||
getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}"
|
||||
cooler_outside: "{{ states('binary_sensor.cooler_outside') }}"
|
||||
too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}"
|
||||
|
||||
- name: HVAC Target Temp Low
|
||||
unique_id: templatesensor_hvac_target_temp_low
|
||||
state: "{{state_attr('climate.thermostat','target_temp_low')}}"
|
||||
availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}"
|
||||
device_class: temperature
|
||||
unit_of_measurement: "°F"
|
||||
attributes:
|
||||
hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}"
|
||||
preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}"
|
||||
climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}"
|
||||
- name: HVAC Target Temp Low
|
||||
unique_id: templatesensor_hvac_target_temp_low
|
||||
state: "{{state_attr('climate.thermostat','target_temp_low')}}"
|
||||
availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) }}"
|
||||
device_class: temperature
|
||||
unit_of_measurement: "°F"
|
||||
attributes:
|
||||
hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}"
|
||||
preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}"
|
||||
climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}"
|
||||
|
||||
- name: HVAC Target Temp High
|
||||
unique_id: templatesensor_hvac_target_temp_high
|
||||
state: "{{state_attr('climate.thermostat','target_temp_high')}}"
|
||||
availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}"
|
||||
device_class: temperature
|
||||
unit_of_measurement: "°F"
|
||||
attributes:
|
||||
hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}"
|
||||
preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}"
|
||||
climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}"
|
||||
- name: HVAC Target Temp High
|
||||
unique_id: templatesensor_hvac_target_temp_high
|
||||
state: "{{state_attr('climate.thermostat','target_temp_high')}}"
|
||||
availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) }}"
|
||||
device_class: temperature
|
||||
unit_of_measurement: "°F"
|
||||
attributes:
|
||||
hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}"
|
||||
preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}"
|
||||
climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}"
|
||||
|
||||
- name: HVAC Target Temperature
|
||||
unique_id: templatesensor_hvac_target_temperature
|
||||
state: "{{state_attr('climate.thermostat','temperature')}}"
|
||||
availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}"
|
||||
device_class: temperature
|
||||
unit_of_measurement: "°F"
|
||||
attributes:
|
||||
hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}"
|
||||
preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}"
|
||||
climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}"
|
||||
- name: HVAC Target Temperature
|
||||
unique_id: templatesensor_hvac_target_temperature
|
||||
state: "{{state_attr('climate.thermostat','temperature')}}"
|
||||
availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) }}"
|
||||
device_class: temperature
|
||||
unit_of_measurement: "°F"
|
||||
attributes:
|
||||
hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}"
|
||||
preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}"
|
||||
climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}"
|
||||
|
||||
- name: HVAC Current Temperature
|
||||
unique_id: templatesensor_hvac_current_temperature
|
||||
icon: mdi:fan-clock
|
||||
state: "{{state_attr('climate.thermostat','current_temperature')}}"
|
||||
availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}"
|
||||
device_class: temperature
|
||||
unit_of_measurement: "°F"
|
||||
attributes:
|
||||
hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}"
|
||||
preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}"
|
||||
climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}"
|
||||
- name: HVAC Current Temperature
|
||||
unique_id: templatesensor_hvac_current_temperature
|
||||
icon: mdi:fan-clock
|
||||
state: "{{state_attr('climate.thermostat','current_temperature')}}"
|
||||
availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) }}"
|
||||
device_class: temperature
|
||||
unit_of_measurement: "°F"
|
||||
attributes:
|
||||
hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}"
|
||||
preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}"
|
||||
climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}"
|
||||
|
||||
- name: HVAC Fan Min On Time
|
||||
unique_id: templatesensor_hvac_fan_min_on_time
|
||||
state: "{{state_attr('climate.thermostat','fan_min_on_time')}}"
|
||||
availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}"
|
||||
device_class: duration
|
||||
unit_of_measurement: min
|
||||
- name: HVAC Fan Min On Time
|
||||
unique_id: templatesensor_hvac_fan_min_on_time
|
||||
state: "{{state_attr('climate.thermostat','fan_min_on_time')}}"
|
||||
availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) }}"
|
||||
device_class: duration
|
||||
unit_of_measurement: min
|
||||
|
||||
@@ -43,183 +43,182 @@ utility_meter:
|
||||
|
||||
template:
|
||||
- sensor:
|
||||
- unique_id: templatebinarysensor.hourly_energy_non_summer_cost
|
||||
name: Hourly Energy Non-Summer Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.hourly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.hourly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.hourly_energy_non_summer_cost
|
||||
name: Hourly Energy Non-Summer Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.hourly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.hourly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.hourly_energy_summer_peak_cost
|
||||
name: Hourly Energy Summer Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.hourly_energy_summer_peak') not in ['unknown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.hourly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.hourly_energy_summer_peak_cost
|
||||
name: Hourly Energy Summer Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.hourly_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.hourly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.hourly_energy_summer_non_peak_cost
|
||||
name: Hourly Energy Summer Non-Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.hourly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.hourly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.hourly_energy_summer_non_peak_cost
|
||||
name: Hourly Energy Summer Non-Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.hourly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.hourly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.daily_energy_non_summer_cost
|
||||
name: Daily Energy Non-Summer Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.daily_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.daily_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.daily_energy_non_summer_cost
|
||||
name: Daily Energy Non-Summer Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.daily_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.daily_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.daily_energy_summer_peak_cost
|
||||
name: Daily Energy Summer Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.daily_energy_summer_peak') not in ['unknown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.daily_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.daily_energy_summer_peak_cost
|
||||
name: Daily Energy Summer Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.daily_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.daily_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.daily_energy_summer_non_peak_cost
|
||||
name: Daily Energy Summer Non-Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.daily_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.daily_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.daily_energy_summer_non_peak_cost
|
||||
name: Daily Energy Summer Non-Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.daily_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.daily_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.weekly_energy_non_summer_cost
|
||||
name: Weekly Energy Non-Summer Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.weekly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.weekly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.weekly_energy_non_summer_cost
|
||||
name: Weekly Energy Non-Summer Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.weekly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.weekly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.weekly_energy_summer_peak_cost
|
||||
name: Weekly Energy Summer Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.weekly_energy_summer_peak') not in ['unknown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.weekly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.weekly_energy_summer_peak_cost
|
||||
name: Weekly Energy Summer Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.weekly_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.weekly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.weekly_energy_summer_non_peak_cost
|
||||
name: Weekly Energy Summer Non-Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.weekly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.weekly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.weekly_energy_summer_non_peak_cost
|
||||
name: Weekly Energy Summer Non-Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.weekly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.weekly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.monthly_energy_non_summer_cost
|
||||
name: Monthly Energy Non-Summer Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.monthly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.monthly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.monthly_energy_non_summer_cost
|
||||
name: Monthly Energy Non-Summer Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.monthly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.monthly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.monthly_energy_summer_peak_cost
|
||||
name: Monthly Energy Summer Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.monthly_energy_summer_peak') not in ['unknown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.monthly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.monthly_energy_summer_peak_cost
|
||||
name: Monthly Energy Summer Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.monthly_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.monthly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.monthly_energy_summer_non_peak_cost
|
||||
name: Monthly Energy Summer Non-Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.monthly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.monthly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.monthly_energy_summer_non_peak_cost
|
||||
name: Monthly Energy Summer Non-Peak Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.monthly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.monthly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.hourly_energy_total_cost
|
||||
name: Hourly Energy Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.hourly_energy_non_summer_total_cost') not in ['unknown', 'unavailable'] and states('sensor.hourly_energy_summer_non_peak_total_cost') not in ['unknown', 'unavailable'] and states('sensor.hourly_energy_summer_peak_total_cost') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.hourly_energy_non_summer_total_cost')|float(default=0) + states('sensor.hourly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.hourly_energy_summer_peak_total_cost')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.hourly_energy_total_cost
|
||||
name: Hourly Energy Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.hourly_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.hourly_energy_non_summer_total_cost')|float(default=0) + states('sensor.hourly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.hourly_energy_summer_peak_total_cost')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.daily_energy_total_cost
|
||||
name: Daily Energy Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.daily_energy_non_summer_total_cost') not in ['unknown', 'unavailable'] and states('sensor.daily_energy_summer_non_peak_total_cost') not in ['unknown', 'unavailable'] and states('sensor.daily_energy_summer_peak_total_cost') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.daily_energy_non_summer_total_cost')|float(default=0) + states('sensor.daily_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.daily_energy_summer_peak_total_cost')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.daily_energy_total_cost
|
||||
name: Daily Energy Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.daily_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.daily_energy_non_summer_total_cost')|float(default=0) + states('sensor.daily_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.daily_energy_summer_peak_total_cost')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.weekly_energy_total_cost
|
||||
name: Weekly Energy Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.weekly_energy_non_summer_total_cost') not in ['unknown', 'unavailable'] and states('sensor.weekly_energy_summer_non_peak_total_cost') not in ['unknown', 'unavailable'] and states('sensor.weekly_energy_summer_peak_total_cost') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.weekly_energy_non_summer_total_cost')|float(default=0) + states('sensor.weekly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.weekly_energy_summer_peak_total_cost')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.weekly_energy_total_cost
|
||||
name: Weekly Energy Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.weekly_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.weekly_energy_non_summer_total_cost')|float(default=0) + states('sensor.weekly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.weekly_energy_summer_peak_total_cost')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.monthly_energy_total_cost
|
||||
name: Monthly Energy Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: "$"
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.monthly_energy_non_summer_total_cost') not in ['unknown', 'unavailable'] and states('sensor.monthly_energy_summer_non_peak_total_cost') not in ['unknown', 'unavailable'] and states('sensor.monthly_energy_summer_peak_total_cost') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.monthly_energy_non_summer_total_cost')|float(default=0) + states('sensor.monthly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.monthly_energy_summer_peak_total_cost')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.monthly_energy_total_cost
|
||||
name: Monthly Energy Total Cost
|
||||
device_class: monetary
|
||||
state_class: total
|
||||
unit_of_measurement: '$'
|
||||
icon: mdi:currency-usd
|
||||
availability: "{{ states('sensor.monthly_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.monthly_energy_non_summer_total_cost')|float(default=0) + states('sensor.monthly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.monthly_energy_summer_peak_total_cost')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.hourly_energy_total
|
||||
name: Hourly Energy Total
|
||||
device_class: energy
|
||||
state_class: total
|
||||
unit_of_measurement: kWh
|
||||
icon: mdi:flash
|
||||
availability: "{{ states('sensor.hourly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.hourly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.hourly_energy_summer_peak') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.hourly_energy_non_summer')|float(default=0) + states('sensor.hourly_energy_summer_non_peak')|float(default=0) + states('sensor.hourly_energy_summer_peak')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.hourly_energy_total
|
||||
name: Hourly Energy Total
|
||||
device_class: energy
|
||||
state_class: total
|
||||
unit_of_measurement: kWh
|
||||
icon: mdi:flash
|
||||
availability: "{{ states('sensor.hourly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_peak') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.hourly_energy_non_summer')|float(default=0) + states('sensor.hourly_energy_summer_non_peak')|float(default=0) + states('sensor.hourly_energy_summer_peak')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.daily_energy_total
|
||||
name: Daily Energy Total
|
||||
device_class: energy
|
||||
state_class: total
|
||||
unit_of_measurement: kWh
|
||||
icon: mdi:flash
|
||||
availability: "{{ states('sensor.daily_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.daily_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.daily_energy_summer_peak') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.daily_energy_non_summer')|float(default=0) + states('sensor.daily_energy_summer_non_peak')|float(default=0) + states('sensor.daily_energy_summer_peak')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.daily_energy_total
|
||||
name: Daily Energy Total
|
||||
device_class: energy
|
||||
state_class: total
|
||||
unit_of_measurement: kWh
|
||||
icon: mdi:flash
|
||||
availability: "{{ states('sensor.daily_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_peak') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.daily_energy_non_summer')|float(default=0) + states('sensor.daily_energy_summer_non_peak')|float(default=0) + states('sensor.daily_energy_summer_peak')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.weekly_energy_total
|
||||
name: Weekly Energy Total
|
||||
device_class: energy
|
||||
state_class: total
|
||||
unit_of_measurement: kWh
|
||||
icon: mdi:flash
|
||||
availability: "{{ states('sensor.weekly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.weekly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.weekly_energy_summer_peak') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.weekly_energy_non_summer')|float(default=0) + states('sensor.weekly_energy_summer_non_peak')|float(default=0) + states('sensor.weekly_energy_summer_peak')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.weekly_energy_total
|
||||
name: Weekly Energy Total
|
||||
device_class: energy
|
||||
state_class: total
|
||||
unit_of_measurement: kWh
|
||||
icon: mdi:flash
|
||||
availability: "{{ states('sensor.weekly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_peak') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.weekly_energy_non_summer')|float(default=0) + states('sensor.weekly_energy_summer_non_peak')|float(default=0) + states('sensor.weekly_energy_summer_peak')|float(default=0) }}"
|
||||
|
||||
- unique_id: templatebinarysensor.monthly_energy_total
|
||||
name: Monthly Energy Total
|
||||
device_class: energy
|
||||
state_class: total
|
||||
unit_of_measurement: kWh
|
||||
icon: mdi:flash
|
||||
availability: "{{ states('sensor.monthly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_peak') not in ['unkown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.monthly_energy_non_summer')|float(default=0) + states('sensor.monthly_energy_summer_non_peak')|float(default=0) + states('sensor.monthly_energy_summer_peak')|float(default=0) }}"
|
||||
- unique_id: templatebinarysensor.monthly_energy_total
|
||||
name: Monthly Energy Total
|
||||
device_class: energy
|
||||
state_class: total
|
||||
unit_of_measurement: kWh
|
||||
icon: mdi:flash
|
||||
availability: "{{ states('sensor.monthly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.monthly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.monthly_energy_summer_peak') not in ['unknown', 'unavailable'] }}"
|
||||
state: "{{ states('sensor.monthly_energy_non_summer')|float(default=0) + states('sensor.monthly_energy_summer_non_peak')|float(default=0) + states('sensor.monthly_energy_summer_peak')|float(default=0) }}"
|
||||
|
||||
@@ -34,14 +34,14 @@ cards:
|
||||
|
||||
|
||||
- type: weather-forecast
|
||||
entity: weather.openweathermap_hourly
|
||||
entity: weather.forecast_home
|
||||
name: Next 5 Hours
|
||||
show_current: true
|
||||
show_forecast: true
|
||||
forecast_type: hourly
|
||||
|
||||
- type: weather-forecast
|
||||
entity: weather.openweathermap_daily
|
||||
entity: weather.forecast_home
|
||||
name: Next 5 Days
|
||||
show_current: true
|
||||
show_forecast: true
|
||||
|
||||
@@ -201,7 +201,7 @@ cards:
|
||||
Good morning, {{user}}!
|
||||
{%endif%}
|
||||
secondary: |-
|
||||
Today should be {{states('sensor.openweathermap_daily_forecast_condition')}}, with a high of {{states('sensor.openweathermap_daily_forecast_temperature')|float(0)|round(0)}} and a low of {{states('sensor.openweathermap_daily_forecast_temperature_low')|float(0)|round(0)}}.
|
||||
Today should be {{states('weather.forecast_home')}}, with a high of {{states('sensor.temphigh_today')|float(0)|round(0)}} and a low of {{states('sensor.templow_today')|float(0)|round(0)}}.
|
||||
- type: vertical-stack
|
||||
cards:
|
||||
- type: horizontal-stack
|
||||
|
||||
@@ -1,17 +1,12 @@
|
||||
type: vertical-stack
|
||||
cards:
|
||||
- type: conditional
|
||||
conditions:
|
||||
- entity: binary_sensor.precipitation_likely
|
||||
state: 'on'
|
||||
card:
|
||||
type: iframe
|
||||
url: >-
|
||||
https://embed.windy.com/embed2.html?lat=42.534&lon=-85.842&detailLat=42.439&detailLon=-85.838&width=650&height=450&zoom=9&level=surface&overlay=radar&product=radar&menu=&message=&marker=&calendar=now&pressure=&type=map&location=coordinates&detail=&metricWind=default&metricTemp=default&radarRange=-1
|
||||
aspect_ratio: 75%
|
||||
# show_state: false
|
||||
# show_name: false
|
||||
# camera_view: live
|
||||
# type: picture-entity
|
||||
# entity: camera.wunderground_radar
|
||||
# camera_image: camera.wunderground_radar
|
||||
- type: iframe
|
||||
url: >-
|
||||
https://embed.windy.com/embed2.html?lat=42.534&lon=-85.842&detailLat=42.439&detailLon=-85.838&width=650&height=450&zoom=9&level=surface&overlay=radar&product=radar&menu=&message=&marker=&calendar=now&pressure=&type=map&location=coordinates&detail=&metricWind=default&metricTemp=default&radarRange=-1
|
||||
aspect_ratio: 75%
|
||||
# show_state: false
|
||||
# show_name: false
|
||||
# camera_view: live
|
||||
# type: picture-entity
|
||||
# entity: camera.wunderground_radar
|
||||
# camera_image: camera.wunderground_radar
|
||||
|
||||
+13
-13
@@ -9,7 +9,7 @@ badges:
|
||||
alignment: center
|
||||
chips:
|
||||
- type: weather
|
||||
entity: weather.openweathermap_daily
|
||||
entity: weather.forecast_home
|
||||
show_conditions: true
|
||||
show_temperature: true
|
||||
tap_action:
|
||||
@@ -774,16 +774,16 @@ badges:
|
||||
- "extremely_uncomfortable"
|
||||
- "severely_high"
|
||||
|
||||
- type: entity-filter
|
||||
entities:
|
||||
- entity: sensor.openweathermap_hourly_forecast_precipitation_probability
|
||||
name: Precip %
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /details-yml/weather
|
||||
state_filter:
|
||||
- operator: ">"
|
||||
value: 30
|
||||
# - type: entity-filter
|
||||
# entities:
|
||||
# - entity: sensor.openweathermap_hourly_forecast_precipitation_probability
|
||||
# name: Precip %
|
||||
# tap_action:
|
||||
# action: navigate
|
||||
# navigation_path: /details-yml/weather
|
||||
# state_filter:
|
||||
# - operator: ">"
|
||||
# value: 30
|
||||
|
||||
- type: entity-filter
|
||||
entities:
|
||||
@@ -1524,13 +1524,13 @@ cards:
|
||||
camera_entity: camera.mail_usps_camera
|
||||
|
||||
- type: custom:hourly-weather
|
||||
entity: weather.openweathermap_hourly
|
||||
entity: weather.forecast_home
|
||||
icons: true
|
||||
name: ""
|
||||
hide_hours: false
|
||||
|
||||
- type: custom:clock-weather-card
|
||||
entity: weather.openweathermap_daily
|
||||
entity: weather.forecast_home
|
||||
weather_icon_type: fill
|
||||
time_format: 12
|
||||
date_pattern: DDDD
|
||||
|
||||
Reference in New Issue
Block a user