Created
June 26, 2024 00:00
-
-
Save tronikos/00ab6377a3a94b241603dab0d82765a2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
blueprint: | |
name: Energy Disaggregation | |
description: Approximate power usage of an appliance | |
domain: automation | |
input: | |
power_helper: | |
name: Input helper to store the approximate power usage | |
description: in W | |
selector: | |
entity: | |
filter: | |
- domain: input_number | |
timer_helper: | |
name: Timer to reset power to 0W | |
description: Needed in case we miss the current decrease when appliance isn't under load | |
selector: | |
entity: | |
filter: | |
- domain: timer | |
power_derivative: | |
name: power derivative | |
description: (You first need to create a derivative sensor of your power sensor) | |
selector: | |
entity: | |
filter: | |
- domain: sensor | |
integration: derivative | |
power_derivative_factor: | |
name: Power derivative factor | |
description: Factor to multiple the derivative to get W. E.g. if derivatives are in W/s over 10s, multiply by 10 | |
default: 1 | |
selector: | |
number: | |
min: 0.1 | |
max: 100.0 | |
step: 0.1 | |
mode: box | |
lower_bound: | |
name: Lower bound for power derivative | |
description: Assume appliance started if power increased by at least this | |
default: 4500 | |
selector: | |
number: | |
min: -25000 | |
max: 25000.0 | |
step: 0.1 | |
unit_of_measurement: W | |
mode: box | |
upper_bound: | |
name: Upper bound for power derivative | |
description: Assume appliance started if power increased by at most this | |
default: 5500 | |
selector: | |
number: | |
min: -25000 | |
max: 25000.0 | |
step: 0.1 | |
unit_of_measurement: W | |
mode: box | |
delay: | |
name: Delay | |
description: Time duration the current increase/decrease has to stay within the above limits | |
default: | |
seconds: 5 | |
selector: | |
duration: {} | |
trigger_variables: | |
power_derivative_factor: !input power_derivative_factor | |
trigger: | |
- platform: numeric_state | |
entity_id: !input power_derivative | |
value_template: "{{ state.state | float() * power_derivative_factor }}" | |
above: !input lower_bound | |
below: !input upper_bound | |
for: !input delay | |
- platform: numeric_state | |
entity_id: !input power_derivative | |
value_template: "{{ state.state | float() * -1 * power_derivative_factor }}" | |
above: !input lower_bound | |
below: !input upper_bound | |
for: !input delay | |
- platform: event | |
event_type: timer.finished | |
event_data: | |
entity_id: !input timer_helper | |
id: timer-finished | |
variables: | |
power_derivative: !input power_derivative | |
power_derivative_factor: !input power_derivative_factor | |
condition: [] | |
action: | |
- choose: | |
- conditions: | |
- condition: trigger | |
id: | |
- timer-finished | |
sequence: | |
- service: input_number.set_value | |
data: | |
value: 0 | |
target: | |
entity_id: !input power_helper | |
- conditions: | |
- condition: numeric_state | |
entity_id: !input power_derivative | |
value_template: "{{ state.state | float() * power_derivative_factor }}" | |
above: !input lower_bound | |
below: !input upper_bound | |
sequence: | |
- service: input_number.set_value | |
data: | |
value: >- | |
{{ states(power_derivative) | float * power_derivative_factor | float }} | |
target: | |
entity_id: !input power_helper | |
- service: timer.start | |
data: {} | |
target: | |
entity_id: !input timer_helper | |
- conditions: | |
- condition: numeric_state | |
entity_id: !input power_derivative | |
value_template: "{{ state.state | float() * power_derivative_factor * -1 }}" | |
above: !input lower_bound | |
below: !input upper_bound | |
sequence: | |
- service: input_number.set_value | |
data: | |
value: 0 | |
target: | |
entity_id: !input power_helper | |
mode: single | |
max_exceeded: silent |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment