Compare commits

...

2 Commits

Author SHA1 Message Date
99220e5db5 Merge branch 'main' of https://git.rzen.dev/rzen/blueprints 2025-07-04 20:22:25 +00:00
b68e9ec3d2 initial commit 2025-07-04 20:16:15 +00:00
9 changed files with 871 additions and 0 deletions

75
battery-monitor.yaml Normal file
View File

@ -0,0 +1,75 @@
blueprint:
name: Battery Monitor
description: Monitors battery levels of selected entities and exposes a low battery summary
domain: automation
input:
battery_sensors:
name: Battery Sensors
description: List of battery level sensors to monitor
selector:
entity:
domain: sensor
multiple: true
threshold:
name: Low Battery Threshold
description: Battery percentage threshold to consider "low"
default: 20
selector:
number:
min: 1
max: 100
step: 1
unit_of_measurement: "%"
notify_service:
name: Notification Service (Optional)
description: Service to call if any battery is low (e.g., notify.mobile_app_pixel)
default: ""
selector:
text:
mode: single
trigger:
- platform: time_pattern
minutes: "/30" # Check every 30 minutes
variables:
threshold: !input threshold
battery_sensors: !input battery_sensors
notify_service: !input notify_service
condition: []
action:
- variables:
low_batteries: >
{% set low = namespace(devices=[]) %}
{% for entity_id in battery_sensors %}
{% set level = states(entity_id) | int(100) %}
{% if level <= threshold %}
{% set name = state_attr(entity_id, 'friendly_name') or entity_id %}
{% set low.devices = low.devices + [name ~ ' (' ~ level ~ '%)'] %}
{% endif %}
{% endfor %}
{{ low.devices }}
- choose:
- conditions: "{{ low_batteries | length > 0 }}"
sequence:
- service: input_text.set_value
target:
entity_id: input_text.devices_with_low_battery
data:
value: "{{ low_batteries | join(', ') }}"
- condition: "{{ notify_service != '' }}"
- service: "{{ notify_service }}"
data:
message: >
Low battery detected: {{ low_batteries | join(', ') }}
default:
- service: input_text.set_value
target:
entity_id: input_text.devices_with_low_battery
data:
value: "All batteries healthy"

107
fan-management.yaml Normal file
View File

@ -0,0 +1,107 @@
blueprint:
name: Bathroom Fan Controller
description: >
Turns on the fan when any bathroom light is on (after a delay), keeps it on
after all lights are off for a specified time, and also runs the fan on a
regular cadence (e.g., every hour for 5 minutes).
domain: automation
input:
fan_entity:
name: Bathroom Fan
description: The fan to control
selector:
entity:
domain: fan
bathroom_lights:
name: Bathroom Lights
description: One or more lights in the bathroom
selector:
entity:
domain: light
multiple: true
delay_after_light_on:
name: Delay After Light On
description: Delay before turning on the fan once any light is turned on
default: 0
selector:
duration:
time_fan_stays_on_after_lights_off:
name: Duration Fan Stays On After Lights Off
description: How long the fan should stay on after all lights are off
default: 00:05:00
selector:
duration:
cadence_enabled:
name: Enable Cadence Mode
description: Enable periodic fan activation
default: true
selector:
boolean:
cadence_interval:
name: Cadence Interval
description: Time between fan activations
default: 01:00:00
selector:
duration:
cadence_duration:
name: Cadence Duration
description: How long the fan stays on during each cadence
default: 00:05:00
selector:
duration:
mode: parallel
max: 5
trigger:
- platform: state
entity_id: !input bathroom_lights
from: 'off'
to: 'on'
- platform: state
entity_id: !input bathroom_lights
to: 'off'
for: !input time_fan_stays_on_after_lights_off
- platform: time_pattern
minutes: "/5"
condition: []
action:
- choose:
- conditions:
- condition: template
value_template: >
{{ trigger.platform == 'state' and
trigger.to_state.state == 'on' }}
sequence:
- delay: !input delay_after_light_on
- service: fan.turn_on
target:
entity_id: !input fan_entity
- conditions:
- condition: template
value_template: >
{{ trigger.platform == 'state' and
trigger.to_state.state == 'off' and
expand(inputs.bathroom_lights) | selectattr('state','eq','on') | list | count == 0 }}
sequence:
- delay: !input time_fan_stays_on_after_lights_off
- service: fan.turn_off
target:
entity_id: !input fan_entity
- conditions:
- condition: template
value_template: >
{{ trigger.platform == 'time_pattern' and cadence_enabled }}
sequence:
- service: fan.turn_on
target:
entity_id: !input fan_entity
- delay: !input cadence_duration
- service: fan.turn_off
target:
entity_id: !input fan_entity

165
hvac-failure-monitor.yaml Normal file
View File

@ -0,0 +1,165 @@
blueprint:
name: HVAC Failure Monitor
description: >
Detects HVAC underperformance and hard failure by monitoring temperature trends when heating or cooling is active.
Uses differential between setpoint and outdoor temp to dynamically adjust expectations.
domain: automation
input:
thermostat:
name: Thermostat
description: The climate entity to monitor (must support hvac_action and setpoint attributes).
selector:
entity:
domain: climate
heating_temp_sensors:
name: Heating Temperature Sensors
description: One or more temperature sensors to monitor during heating (e.g. upstairs).
default: []
selector:
target:
entity:
domain: sensor
device_class: temperature
cooling_temp_sensors:
name: Cooling Temperature Sensors
description: One or more temperature sensors to monitor during cooling (e.g. downstairs).
default: []
selector:
target:
entity:
domain: sensor
device_class: temperature
outdoor_sensor:
name: Outdoor Temperature Source
description: Outdoor temperature source (e.g. from a weather entity).
selector:
entity:
domain: weather
monitoring_interval:
name: Monitoring Interval (minutes)
description: How long after HVAC starts to evaluate temperature change.
default: 20
selector:
number:
min: 5
max: 120
unit_of_measurement: minutes
mode: slider
notify_target:
name: Notification Target
description: Who to notify on potential HVAC failure (e.g. mobile app).
default: []
selector:
target:
entity:
domain: notify
mode: single
trigger:
- platform: state
entity_id: !input thermostat
attribute: hvac_action
to:
- heating
- cooling
variables:
thermostat: !input thermostat
heating_temp_sensors: !input heating_temp_sensors
cooling_temp_sensors: !input cooling_temp_sensors
outdoor_sensor: !input outdoor_sensor
interval: !input monitoring_interval
hvac_action: "{{ state_attr(thermostat, 'hvac_action') }}"
direction: >
{{ 'rising' if hvac_action == 'heating' else 'falling' }}
selected_sensors: >
{{ heating_temp_sensors if hvac_action == 'heating' else cooling_temp_sensors }}
condition: []
action:
- variables:
indoor_start: >
{{ expand(selected_sensors) | map(attribute='state') | map('float') | select('defined') | list | average }}
- delay:
minutes: "{{ interval }}"
- variables:
indoor_now: >
{{ expand(selected_sensors) | map(attribute='state') | map('float') | select('defined') | list | average }}
outdoor_now: >
{{ state_attr(outdoor_sensor, 'temperature') | float }}
setpoint: >
{{ state_attr(thermostat, 'temperature') | float }}
delta: >
{{ abs(setpoint - outdoor_now) }}
required_rate: >
{% set d = delta %}
{{ [0.01, [0.10, 0.10 - (d * 0.004)] | min] | max }}
observed_rate: >
{{ ((indoor_now - indoor_start) / interval) | round(3) }}
trend_ok: >
{% if direction == 'rising' %}
{{ observed_rate >= required_rate }}
{% else %}
{{ observed_rate <= -required_rate }}
{% endif %}
hard_failure: >
{% if direction == 'rising' %}
{{ observed_rate < 0 }}
{% else %}
{{ observed_rate > 0 }}
{% endif %}
hvac_state_icon: >
{% if hard_failure %}
mdi:close-circle-outline
{% elif not trend_ok %}
mdi:alert-circle-outline
{% else %}
mdi:check-circle-outline
{% endif %}
hvac_state_text: >
{% if hard_failure %}
HVAC Failure
{% elif not trend_ok %}
Possible HVAC underperformance
{% else %}
Normal operation
{% endif %}
- choose:
- conditions: "{{ not trend_ok }}"
sequence:
- choose:
- conditions: "{{ notify_target | length > 0 }}"
sequence:
- service: notify.{{ notify_target }}
data:
message: >
HVAC '{{ hvac_action }}' action for {{ interval }} minutes showed ineffective operation.
Indoor temp started at: {{ indoor_start }}°, now: {{ indoor_now }}°
Outdoor temp: {{ outdoor_now }}°
Setpoint: {{ setpoint }}°
Required rate: {{ required_rate }}°/min
Observed rate: {{ observed_rate }}°/min
Status: {{ hvac_state_text }} {{ hvac_state_icon }}
default:
- service: persistent_notification.create
data:
title: HVAC Alert
message: >
HVAC '{{ hvac_action }}' action for {{ interval }} minutes showed ineffective operation.
Indoor temp started at: {{ indoor_start }}°, now: {{ indoor_now }}°
Outdoor temp: {{ outdoor_now }}°
Setpoint: {{ setpoint }}°
Required rate: {{ required_rate }}°/min
Observed rate: {{ observed_rate }}°/min
Status: {{ hvac_state_text }} {{ hvac_state_icon }}

119
indication.yaml Normal file
View File

@ -0,0 +1,119 @@
blueprint:
name: HS-WD200+ LED State Indicator
description: Set a specific LED on a HomeSeer WD200+ dimmer based on entity state.
domain: automation
input:
target_device:
name: HS-WD200+ Device
selector:
device:
integration: zwave_js
monitored_entity:
name: Entity to Monitor
selector:
entity: {}
expected_state:
name: State to Match
description: Select a common state or enter a custom one below.
selector:
select:
options:
- "on"
- "off"
- "home"
- "away"
- "cool"
- "heat"
- "idle"
- "open"
- "closed"
- "locked"
- "unlocked"
custom_expected_state:
name: Custom State (optional)
description: Use this if the expected state is not in the list above.
default: ""
selector:
text: {}
led_number:
name: LED Number
selector:
select:
options:
- label: "LED 1 (Top)"
value: "1"
- label: "LED 2"
value: "2"
- label: "LED 3"
value: "3"
- label: "LED 4"
value: "4"
- label: "LED 5"
value: "5"
- label: "LED 6"
value: "6"
- label: "LED 7 (Bottom)"
value: "7"
led_color:
name: LED Color
selector:
select:
options:
- label: "Off"
value: "0"
- label: "Red"
value: "1"
- label: "Green"
value: "2"
- label: "Blue"
value: "3"
- label: "Magenta"
value: "4"
- label: "Yellow"
value: "5"
- label: "Cyan"
value: "6"
- label: "White"
value: "7"
blink_mode:
name: Blink Mode
selector:
select:
options:
- label: "Solid"
value: "0"
- label: "Fast Blink"
value: "1"
- label: "Slow Blink"
value: "2"
mode: single
trigger:
- platform: state
entity_id: !input monitored_entity
action:
- variables:
actual_state: "{{ states[ (input.monitored_entity) ].state }}"
target_state: >
{{ iif(input.custom_expected_state | length > 0, input.custom_expected_state, input.expected_state) }}
matched: "{{ actual_state == target_state }}"
- variables:
color: "{{ iif(matched, (input.led_color | int(0)), 0) }}"
blink: "{{ iif(matched, (input.blink_mode | int(0)), 0) }}"
led_value: "{{ (color * 16) + blink }}"
led_param: "{{ 20 + (input.led_number | int(1)) }}"
- service: zwave_js.set_config_parameter
target:
device_id: !input target_device
data:
parameter: "{{ led_param }}"
value: "{{ led_value }}"

View File

@ -0,0 +1,90 @@
blueprint:
name: Multi-Tap Scene Controller (Zooz & HomeSeer)
description: >
Control lights or switches based on single, double, or triple tap
up/down events from a Z-Wave switch (e.g., Zooz or HomeSeer).
domain: automation
input:
master_device:
name: Master Device(s)
selector:
device:
multiple: true
slave_entities:
name: Slave Lights or Switches
selector:
target:
entity:
domain:
- light
- switch
tap_types:
name: Tap Type(s)
selector:
select:
multiple: true
options:
- KeyPressed
- KeyPressed2x
- KeyPressed3x
tap_up:
name: Trigger on Tap Up?
default: true
selector:
boolean: {}
tap_down:
name: Trigger on Tap Down?
default: true
selector:
boolean: {}
trigger:
- platform: event
event_type: zwave_js_value_notification
variables:
tap_types: !input tap_types
tap_up: !input tap_up
tap_down: !input tap_down
master_device_ids: !input master_device
condition:
- condition: template
value_template: >
{% set evt = trigger.event.data %}
{{ evt.command_class_name == 'Central Scene' and
evt.value in tap_types and
(
(tap_up and evt.property_key == 0) or
(tap_down and evt.property_key == 1)
) and
evt.device_id in master_device_ids }}
action:
- choose:
- conditions:
- condition: template
value_template: "{{ trigger.event.data.property_key == 0 }}"
sequence:
- service: homeassistant.turn_on
target: !input slave_entities
- conditions:
- condition: template
value_template: "{{ trigger.event.data.property_key == 1 }}"
sequence:
- service: homeassistant.turn_off
target: !input slave_entities
# Optional: Log the event data for troubleshooting
- service: system_log.write
data:
message: >
Multi-Tap Triggered: {{ trigger.event.data }}
level: info
mode: single

83
multi-tap-automation.yaml Normal file
View File

@ -0,0 +1,83 @@
blueprint:
name: Multi-Tap Scene Controller
description: >
Control lights or switches based on single, double, or triple tap
up/down events from a Z-Wave switch (e.g., Zooz or HomeSeer).
domain: automation
input:
master_device:
name: Master Device(s)
selector:
device:
multiple: true
slave_entities:
name: Slave Lights or Switches
selector:
target:
entity:
domain:
- light
- switch
tap_types:
name: Tap Type(s)
selector:
select:
multiple: true
options:
- KeyPressed
- KeyPressed2x
- KeyPressed3x
tap_up:
name: Trigger on Tap Up?
default: true
selector:
boolean: {}
tap_down:
name: Trigger on Tap Down?
default: true
selector:
boolean: {}
trigger:
- platform: event
event_type: zwave_js_value_notification
variables:
tap_types: !input tap_types
tap_up: !input tap_up
tap_down: !input tap_down
master_device_ids: !input master_device
condition:
- condition: template
value_template: >
{% set evt = trigger.event.data %}
{{ evt.command_class_name == 'Central Scene' and
evt.value in tap_types and
(
(tap_up and evt.property_key_name == '001') or
(tap_down and evt.property_key_name == '002')
) and
evt.device_id in master_device_ids }}
action:
- choose:
- conditions:
- condition: template
value_template: "{{ trigger.event.data.property_key_name == '001' }}"
sequence:
- service: homeassistant.turn_on
target: !input slave_entities
- conditions:
- condition: template
value_template: "{{ trigger.event.data.property_key_name == '002' }}"
sequence:
- service: homeassistant.turn_off
target: !input slave_entities
mode: single

80
power-monitoring.yaml Normal file
View File

@ -0,0 +1,80 @@
blueprint:
name: Power Spike Logger
description: >
Logs significant power spikes (positive or negative) from an energy meter, typically used to identify when major appliances are turned on or off.
domain: automation
input:
phase1_power:
name: Phase 1 Power Sensor
selector:
entity:
domain: sensor
phase2_power:
name: Phase 2 Power Sensor
selector:
entity:
domain: sensor
total_power:
name: Total Power Sensor
selector:
entity:
domain: sensor
delta_power:
name: Power Delta Sensor
selector:
entity:
domain: sensor
spike_threshold:
name: Spike Threshold (W)
description: Minimum power change (positive or negative) to trigger logging
default: 1500
selector:
number:
min: 100
max: 10000
unit_of_measurement: W
mode: box
log_target:
name: Notification or Log Target
description: Where to send spike logs (e.g., notify.persistent_notification)
default: []
selector:
target:
entity:
domain: notify
trigger:
- platform: numeric_state
entity_id: !input delta_power
above: !input spike_threshold
- platform: template
value_template: >
{% set threshold = states('input_number.spike_threshold') | float(1500) %}
{% set delta = states(input('delta_power')) | float(0) %}
{{ delta < (0 - threshold) }}
condition:
- condition: template
value_template: >
{{ states(input('total_power')) | float(0) > 1000 }}
variables:
phase1: "{{ states(input('phase1_power')) }}"
phase2: "{{ states(input('phase2_power')) }}"
total: "{{ states(input('total_power')) }}"
delta: "{{ states(input('delta_power')) }}"
time: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
action:
- service: notify.persistent_notification
data:
title: "Power Spike Detected"
message: >
Power spike at {{ time }}:\n
Phase 1: {{ phase1 }} W\n
Phase 2: {{ phase2 }} W\n
Total: {{ total }} W\n
Δ: {{ delta }} W
mode: queued

77
simulated-presence.yaml Normal file
View File

@ -0,0 +1,77 @@
blueprint:
name: Simulated Presence - Random Lights
description: >
Randomly toggles lights when a thermostat attribute equals a specified value
and it's nighttime (sun below horizon).
domain: automation
input:
lights:
name: Light Entities
description: Select the lights to simulate presence
selector:
entity:
domain: light
multiple: true
thermostat:
name: Thermostat Entity
description: The climate entity to check for the specified attribute
selector:
entity:
domain: climate
attribute_name:
name: Thermostat Attribute
description: Attribute of the thermostat to check (e.g., preset_mode)
default: preset_mode
selector:
text:
expected_value:
name: Expected Attribute Value
description: The value that triggers this automation (e.g., away_indefinitely)
default: away_indefinitely
selector:
text:
interval:
name: Randomization Interval (minutes)
description: How often to randomly toggle lights
default: 10
selector:
number:
min: 1
max: 60
unit_of_measurement: minutes
mode: restart
trigger:
- platform: state
entity_id: sun.sun
to: "below_horizon"
condition:
- condition: template
value_template: >
{{ state_attr(thermostat, attribute_name) == expected_value }}
action:
- repeat:
while:
- condition: state
entity_id: sun.sun
state: "below_horizon"
- condition: template
value_template: >
{{ state_attr(thermostat, attribute_name) == expected_value }}
sequence:
- variables:
selected_lights: "{{ lights | random }}"
- service: >
{{ ['light.turn_on', 'light.turn_off'] | random }}
target:
entity_id: "{{ selected_lights }}"
- delay:
minutes: !input interval

75
state-opposite.yaml Normal file
View File

@ -0,0 +1,75 @@
blueprint:
name: Opposite State Synchronizer
description: >
Keeps two entities in opposite states. If entity 1 turns on, entity 2 turns off, and vice versa.
domain: automation
input:
entity_1:
name: Entity 1
selector:
entity:
domain:
- light
- switch
entity_2:
name: Entity 2
selector:
entity:
domain:
- light
- switch
trigger:
- platform: state
entity_id: !input entity_1
id: entity_1
- platform: state
entity_id: !input entity_2
id: entity_2
condition: []
action:
- choose:
- conditions:
- condition: trigger
id: entity_1
- condition: state
entity_id: !input entity_1
state: "on"
sequence:
- service: homeassistant.turn_off
target:
entity_id: !input entity_2
- conditions:
- condition: trigger
id: entity_1
- condition: state
entity_id: !input entity_1
state: "off"
sequence:
- service: homeassistant.turn_on
target:
entity_id: !input entity_2
- conditions:
- condition: trigger
id: entity_2
- condition: state
entity_id: !input entity_2
state: "on"
sequence:
- service: homeassistant.turn_off
target:
entity_id: !input entity_1
- conditions:
- condition: trigger
id: entity_2
- condition: state
entity_id: !input entity_2
state: "off"
sequence:
- service: homeassistant.turn_on
target:
entity_id: !input entity_1
mode: single