Merge branch 'main' of https://code.cubecraftlabs.com/overseer/Home-Assistant
This commit is contained in:
@@ -0,0 +1,90 @@
|
|||||||
|
blueprint:
|
||||||
|
name: NestQuest afternoon reminder
|
||||||
|
description: >-
|
||||||
|
Sends an afternoon nudge listing ONLY the children who still have
|
||||||
|
open quests today. Children who are present and all clear are
|
||||||
|
omitted (the nudge is for stragglers, not a roll call), children
|
||||||
|
who are not present today are omitted entirely, and the household
|
||||||
|
rollup sensors are excluded by the same present guard. When every
|
||||||
|
present child is already done the automation sends NOTHING at all:
|
||||||
|
a template condition stops the run before the notification. The
|
||||||
|
notify service is chosen by the household when importing this
|
||||||
|
blueprint — NestQuest never hard-codes a personal notify target.
|
||||||
|
domain: automation
|
||||||
|
input:
|
||||||
|
afternoon_time:
|
||||||
|
name: Afternoon time
|
||||||
|
description: Local time of day the reminder is sent.
|
||||||
|
default: "15:00"
|
||||||
|
selector:
|
||||||
|
time: {}
|
||||||
|
notify_target:
|
||||||
|
name: Notify service
|
||||||
|
description: >-
|
||||||
|
The Home Assistant notify service to call for the reminder,
|
||||||
|
for example notify.mobile_app_your_phone — a placeholder;
|
||||||
|
pick the notify service for your own device.
|
||||||
|
selector:
|
||||||
|
text: {}
|
||||||
|
send_reminder:
|
||||||
|
name: Send the reminder
|
||||||
|
description: >-
|
||||||
|
Turn off to keep the automation installed but skip the
|
||||||
|
notification entirely.
|
||||||
|
default: true
|
||||||
|
selector:
|
||||||
|
boolean: {}
|
||||||
|
|
||||||
|
mode: single
|
||||||
|
|
||||||
|
variables:
|
||||||
|
send_reminder: !input send_reminder
|
||||||
|
|
||||||
|
triggers:
|
||||||
|
- trigger: time
|
||||||
|
at: !input afternoon_time
|
||||||
|
|
||||||
|
conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ send_reminder | bool }}"
|
||||||
|
# Send nothing when every present child is already done: the guard is
|
||||||
|
# false unless at least one present child has remaining quests today.
|
||||||
|
- condition: template
|
||||||
|
value_template: |
|
||||||
|
{%- set ns = namespace(any_open=false) -%}
|
||||||
|
{%- for due in states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_due_today(_\\d+)?$') -%}
|
||||||
|
{%- if due.attributes.get('present') -%}
|
||||||
|
{%- set remaining_values = states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_remaining_today(_\\d+)?$')
|
||||||
|
| selectattr('attributes.child_id', 'eq', due.attributes.child_id)
|
||||||
|
| map(attribute='state')
|
||||||
|
| list -%}
|
||||||
|
{%- if remaining_values and (remaining_values | first | int) > 0 -%}
|
||||||
|
{%- set ns.any_open = true -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
{{- ns.any_open -}}
|
||||||
|
|
||||||
|
actions:
|
||||||
|
- action: !input notify_target
|
||||||
|
data:
|
||||||
|
title: NestQuest afternoon reminder
|
||||||
|
message: |
|
||||||
|
{%- set ns = namespace(lines=[]) -%}
|
||||||
|
{%- for due in states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_due_today(_\\d+)?$') -%}
|
||||||
|
{%- if due.attributes.get('present') -%}
|
||||||
|
{%- set remaining_values = states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_remaining_today(_\\d+)?$')
|
||||||
|
| selectattr('attributes.child_id', 'eq', due.attributes.child_id)
|
||||||
|
| map(attribute='state')
|
||||||
|
| list -%}
|
||||||
|
{%- if remaining_values and (remaining_values | first | int) > 0 -%}
|
||||||
|
{%- set line = due.attributes.child_name ~ ' still has ' ~ (remaining_values | first | int) ~ ' quest(s) open.' -%}
|
||||||
|
{%- set ns.lines = ns.lines + [line] -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
{{- ns.lines | join('\n') -}}
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
blueprint:
|
||||||
|
name: NestQuest day complete celebration
|
||||||
|
description: >-
|
||||||
|
Celebrates the moment a child clears every quest for the day: the
|
||||||
|
automation is driven by the nestquest_child_day_complete event,
|
||||||
|
which NestQuest only fires when quests were owed and all of them
|
||||||
|
are complete — a zero-quest day can never trigger this
|
||||||
|
celebration. Once-per-child-per-day dedupe: point
|
||||||
|
last_celebrated_helper at ONE input_text helper (create it under
|
||||||
|
Settings, Devices and Services, Helpers — plain text). The
|
||||||
|
automation records each celebrated child as
|
||||||
|
"<child_id>:<today>" inside that helper, and a child who
|
||||||
|
un-completes a quest and completes it again the same day is
|
||||||
|
celebrated once, not twice — while a SECOND child clearing their
|
||||||
|
day the same date is still celebrated in full. The helper is
|
||||||
|
pruned to today's entries on every celebration, so it never
|
||||||
|
grows past one entry per child per day. A helper that does not
|
||||||
|
exist yet, or has never been set, lets the first celebration
|
||||||
|
through. The notification message may use the event payload's
|
||||||
|
child_name, quests_due and quests_completed. The notify service
|
||||||
|
is chosen by the household when importing this blueprint —
|
||||||
|
NestQuest never hard-codes a personal notify target.
|
||||||
|
domain: automation
|
||||||
|
input:
|
||||||
|
notify_target:
|
||||||
|
name: Notify service
|
||||||
|
description: >-
|
||||||
|
The Home Assistant notify service to call for the celebration,
|
||||||
|
for example notify.mobile_app_your_phone — a placeholder;
|
||||||
|
pick the notify service for your own device.
|
||||||
|
selector:
|
||||||
|
text: {}
|
||||||
|
celebration_message:
|
||||||
|
name: Celebration message
|
||||||
|
description: >-
|
||||||
|
The message sent when a child clears every quest today. May
|
||||||
|
use the event payload: trigger.event.data.child_name,
|
||||||
|
trigger.event.data.quests_due and trigger.event.data.quests_completed.
|
||||||
|
default: "Legendary! {{ trigger.event.data.child_name }} cleared every quest today!"
|
||||||
|
selector:
|
||||||
|
text: {}
|
||||||
|
celebrate:
|
||||||
|
name: Send the celebration
|
||||||
|
description: >-
|
||||||
|
Turn off to keep the automation installed but skip the
|
||||||
|
notification entirely.
|
||||||
|
default: true
|
||||||
|
selector:
|
||||||
|
boolean: {}
|
||||||
|
last_celebrated_helper:
|
||||||
|
name: Last-celebrated helper
|
||||||
|
description: >-
|
||||||
|
A single input_text helper remembering which children were
|
||||||
|
already celebrated today, as "<child_id>:<date>" entries
|
||||||
|
separated by commas. The automation skips a child whose entry
|
||||||
|
for today is already stored, and rewrites the helper with only
|
||||||
|
today's entries plus the new one after each celebration.
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
filter:
|
||||||
|
- domain: input_text
|
||||||
|
|
||||||
|
mode: queued
|
||||||
|
|
||||||
|
variables:
|
||||||
|
celebrate: !input celebrate
|
||||||
|
last_celebrated_helper: !input last_celebrated_helper
|
||||||
|
|
||||||
|
triggers:
|
||||||
|
- trigger: event
|
||||||
|
event_type: nestquest_child_day_complete
|
||||||
|
|
||||||
|
conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ celebrate | bool }}"
|
||||||
|
# Once-per-child-per-day dedupe: celebrate only when THIS child has
|
||||||
|
# no equal entry for today in the helper. Entries compare as whole
|
||||||
|
# comma-separated tokens — a substring check would wrongly suppress
|
||||||
|
# child 1 after child 11 was celebrated. An unset or missing helper
|
||||||
|
# reads as '' and celebrates.
|
||||||
|
- condition: template
|
||||||
|
value_template: >-
|
||||||
|
{{ (trigger.event.data.child_id ~ ':' ~ now().strftime('%Y-%m-%d'))
|
||||||
|
not in ((states(last_celebrated_helper) or '')
|
||||||
|
.split(',')
|
||||||
|
| select('ne', '')
|
||||||
|
| list) }}
|
||||||
|
|
||||||
|
actions:
|
||||||
|
- action: !input notify_target
|
||||||
|
data:
|
||||||
|
title: NestQuest day complete
|
||||||
|
message: !input celebration_message
|
||||||
|
# Record this child's celebration, keeping only today's entries so the
|
||||||
|
# helper never outgrows its text limit and stale entries cannot block
|
||||||
|
# next week's celebrations.
|
||||||
|
- action: input_text.set_value
|
||||||
|
target:
|
||||||
|
entity_id: !input last_celebrated_helper
|
||||||
|
data:
|
||||||
|
value: >-
|
||||||
|
{%- set today = now().strftime('%Y-%m-%d') -%}
|
||||||
|
{%- set ns = namespace(entries=[]) -%}
|
||||||
|
{%- for entry in (states(last_celebrated_helper) or '').split(',') -%}
|
||||||
|
{%- if entry and entry.endswith(':' ~ today) -%}
|
||||||
|
{%- set ns.entries = ns.entries + [entry] -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
{{ (ns.entries + [trigger.event.data.child_id ~ ':' ~ today]) | join(',') }}
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
blueprint:
|
||||||
|
name: NestQuest end-of-day report
|
||||||
|
description: >-
|
||||||
|
Sends the parent an end-of-day report on how the day went. It runs
|
||||||
|
deliberately BEFORE NestQuest's midnight missed-quest sweep, so it
|
||||||
|
reads the same day's data (what is still open at report time, and
|
||||||
|
how much of the day was completed) rather than tomorrow-morning's
|
||||||
|
hindsight. Every PRESENT child gets a completion line, so the
|
||||||
|
parent always receives the day's summary; children who still owe
|
||||||
|
quests get their open count called out on that line, and children
|
||||||
|
who are not present today are omitted entirely. A child whose
|
||||||
|
remaining-count sensor is unavailable is reported with the
|
||||||
|
completion line only. By default the report is skipped when every
|
||||||
|
present child is already done — turn on send-even-when-clear to
|
||||||
|
always get the day's completion summary. The notify service is
|
||||||
|
chosen by the household when importing this blueprint — NestQuest
|
||||||
|
never hard-codes a personal notify target.
|
||||||
|
domain: automation
|
||||||
|
input:
|
||||||
|
report_time:
|
||||||
|
name: Report time
|
||||||
|
description: >-
|
||||||
|
Local time of day the report is sent — deliberately before the
|
||||||
|
midnight missed-quest sweep, so the report reads the same
|
||||||
|
day's data.
|
||||||
|
default: "20:00"
|
||||||
|
selector:
|
||||||
|
time: {}
|
||||||
|
notify_target:
|
||||||
|
name: Notify service
|
||||||
|
description: >-
|
||||||
|
The Home Assistant notify service to call for the report,
|
||||||
|
for example notify.mobile_app_your_phone — a placeholder;
|
||||||
|
pick the notify service for your own device.
|
||||||
|
selector:
|
||||||
|
text: {}
|
||||||
|
send_report:
|
||||||
|
name: Send the report
|
||||||
|
description: >-
|
||||||
|
Turn off to keep the automation installed but skip the
|
||||||
|
notification entirely.
|
||||||
|
default: true
|
||||||
|
selector:
|
||||||
|
boolean: {}
|
||||||
|
send_even_when_clear:
|
||||||
|
name: Send even when clear
|
||||||
|
description: >-
|
||||||
|
Send the report even when every present child has already
|
||||||
|
finished their quests today. When off (the default), an
|
||||||
|
all-clear day sends nothing.
|
||||||
|
default: false
|
||||||
|
selector:
|
||||||
|
boolean: {}
|
||||||
|
|
||||||
|
mode: single
|
||||||
|
|
||||||
|
variables:
|
||||||
|
send_report: !input send_report
|
||||||
|
send_even_when_clear: !input send_even_when_clear
|
||||||
|
|
||||||
|
triggers:
|
||||||
|
- trigger: time
|
||||||
|
at: !input report_time
|
||||||
|
|
||||||
|
conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ send_report | bool }}"
|
||||||
|
# Skip an all-clear day unless the household opted into
|
||||||
|
# send-even-when-clear: the guard is false only when every present
|
||||||
|
# child has a usable remaining count of zero. A MISSING or
|
||||||
|
# non-numeric remaining sensor reads as -1 and counts as open —
|
||||||
|
# a degraded state must reach the parent, not look like all-clear.
|
||||||
|
- condition: template
|
||||||
|
value_template: |
|
||||||
|
{%- set ns = namespace(any_open=false) -%}
|
||||||
|
{%- for due in states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_due_today(_\\d+)?$') -%}
|
||||||
|
{%- if due.attributes.get('present') -%}
|
||||||
|
{%- set remaining_values = states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_remaining_today(_\\d+)?$')
|
||||||
|
| selectattr('attributes.child_id', 'eq', due.attributes.child_id)
|
||||||
|
| map(attribute='state')
|
||||||
|
| list -%}
|
||||||
|
{%- if not remaining_values or (remaining_values | first | int(-1)) != 0 -%}
|
||||||
|
{%- set ns.any_open = true -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
{{- send_even_when_clear | bool or ns.any_open -}}
|
||||||
|
|
||||||
|
actions:
|
||||||
|
- action: !input notify_target
|
||||||
|
data:
|
||||||
|
title: NestQuest end-of-day report
|
||||||
|
message: |
|
||||||
|
{%- set ns = namespace(lines=[]) -%}
|
||||||
|
{%- for due in states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_due_today(_\\d+)?$') -%}
|
||||||
|
{%- if due.attributes.get('present') -%}
|
||||||
|
{%- set due_count = due.state | int -%}
|
||||||
|
{%- set completed_values = states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_completed_today(_\\d+)?$')
|
||||||
|
| selectattr('attributes.child_id', 'eq', due.attributes.child_id)
|
||||||
|
| map(attribute='state')
|
||||||
|
| list -%}
|
||||||
|
{%- set remaining_values = states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_remaining_today(_\\d+)?$')
|
||||||
|
| selectattr('attributes.child_id', 'eq', due.attributes.child_id)
|
||||||
|
| map(attribute='state')
|
||||||
|
| list -%}
|
||||||
|
{%- set completed_count = (completed_values | first | int) if completed_values else 0 -%}
|
||||||
|
{%- set remaining_count = (remaining_values | first | int) if remaining_values else none -%}
|
||||||
|
{%- if remaining_count is not none and remaining_count > 0 -%}
|
||||||
|
{%- set line = due.attributes.child_name ~ ': ' ~ remaining_count ~ ' still open (' ~ completed_count ~ '/' ~ due_count ~ ' done).' -%}
|
||||||
|
{%- else -%}
|
||||||
|
{%- set line = due.attributes.child_name ~ ': ' ~ completed_count ~ '/' ~ due_count ~ ' done.' -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- set ns.lines = ns.lines + [line] -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
{{- ns.lines | join('\n') -}}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
blueprint:
|
||||||
|
name: NestQuest morning summary
|
||||||
|
description: >-
|
||||||
|
Sends a morning notification listing what each child still owes
|
||||||
|
today. Only children whose NestQuest presence sensor is on are
|
||||||
|
included; children who are not present today are omitted entirely.
|
||||||
|
The notify service is chosen by the household when importing this
|
||||||
|
blueprint — NestQuest never hard-codes a personal notify target.
|
||||||
|
domain: automation
|
||||||
|
input:
|
||||||
|
morning_time:
|
||||||
|
name: Morning time
|
||||||
|
description: Local time of day the summary is sent.
|
||||||
|
default: "08:00"
|
||||||
|
selector:
|
||||||
|
time: {}
|
||||||
|
notify_target:
|
||||||
|
name: Notify service
|
||||||
|
description: >-
|
||||||
|
The Home Assistant notify service to call for the summary,
|
||||||
|
for example notify.mobile_app_your_phone — a placeholder;
|
||||||
|
pick the notify service for your own device.
|
||||||
|
selector:
|
||||||
|
text: {}
|
||||||
|
send_summary:
|
||||||
|
name: Send the summary
|
||||||
|
description: >-
|
||||||
|
Turn off to keep the automation installed but skip the
|
||||||
|
notification entirely.
|
||||||
|
default: true
|
||||||
|
selector:
|
||||||
|
boolean: {}
|
||||||
|
|
||||||
|
mode: single
|
||||||
|
|
||||||
|
variables:
|
||||||
|
send_summary: !input send_summary
|
||||||
|
|
||||||
|
triggers:
|
||||||
|
- trigger: time
|
||||||
|
at: !input morning_time
|
||||||
|
|
||||||
|
conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ send_summary | bool }}"
|
||||||
|
|
||||||
|
actions:
|
||||||
|
- action: !input notify_target
|
||||||
|
data:
|
||||||
|
title: NestQuest morning summary
|
||||||
|
message: |
|
||||||
|
{%- set ns = namespace(lines=[]) -%}
|
||||||
|
{%- for due in states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_due_today(_\\d+)?$') -%}
|
||||||
|
{%- if due.attributes.get('present') -%}
|
||||||
|
{%- set remaining_values = states.sensor
|
||||||
|
| selectattr('entity_id', 'search', '^sensor\\.nestquest_.*_quests_remaining_today(_\\d+)?$')
|
||||||
|
| selectattr('attributes.child_id', 'eq', due.attributes.child_id)
|
||||||
|
| map(attribute='state')
|
||||||
|
| list -%}
|
||||||
|
{%- if remaining_values -%}
|
||||||
|
{%- set remaining = remaining_values | first | int -%}
|
||||||
|
{%- if remaining > 0 -%}
|
||||||
|
{%- set line = due.attributes.child_name ~ ' owes ' ~ remaining ~ ' quest(s) today.' -%}
|
||||||
|
{%- else -%}
|
||||||
|
{%- set line = due.attributes.child_name ~ ' is all clear today (0 quests remaining).' -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- else -%}
|
||||||
|
{%- set line = due.attributes.child_name ~ "'s quest count is unavailable today." -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- set ns.lines = ns.lines + [line] -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
{%- if ns.lines -%}
|
||||||
|
{{- ns.lines | join('\n') -}}
|
||||||
|
{%- else -%}
|
||||||
|
No children present today.
|
||||||
|
{%- endif -%}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
blueprint:
|
||||||
|
name: NestQuest UniFi quest access
|
||||||
|
description: >-
|
||||||
|
One automation per child. Completely block the selected UniFi clients
|
||||||
|
after the local weekday/weekend cutoff while that child has quests
|
||||||
|
remaining TODAY. Restore network access immediately when the count
|
||||||
|
reaches zero, and at midnight even if yesterday was incomplete.
|
||||||
|
A missing or unavailable quest sensor is treated as still open after
|
||||||
|
the cutoff; verify the sensor before enabling this automation. The
|
||||||
|
selected UniFi client switches are ON when access is allowed and
|
||||||
|
OFF when blocked. Do not select infrastructure or adult devices.
|
||||||
|
domain: automation
|
||||||
|
input:
|
||||||
|
remaining_sensor:
|
||||||
|
name: Child's quests remaining today
|
||||||
|
description: Select this child's NestQuest quests remaining today sensor.
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
filter:
|
||||||
|
- integration: nestquest
|
||||||
|
domain: sensor
|
||||||
|
client_switches:
|
||||||
|
name: Child's UniFi client access switches
|
||||||
|
description: >-
|
||||||
|
Select every UniFi client access switch for this child. These
|
||||||
|
switches are ON when network access is allowed and OFF when blocked.
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
multiple: true
|
||||||
|
filter:
|
||||||
|
- integration: unifi
|
||||||
|
domain: switch
|
||||||
|
weekday_cutoff:
|
||||||
|
name: Monday-Friday cutoff
|
||||||
|
default: "18:25:00"
|
||||||
|
selector:
|
||||||
|
time: {}
|
||||||
|
weekend_cutoff:
|
||||||
|
name: Saturday-Sunday cutoff
|
||||||
|
default: "14:00:00"
|
||||||
|
selector:
|
||||||
|
time: {}
|
||||||
|
|
||||||
|
mode: restart
|
||||||
|
|
||||||
|
variables:
|
||||||
|
remaining_sensor: !input remaining_sensor
|
||||||
|
client_switches: !input client_switches
|
||||||
|
weekday_cutoff: !input weekday_cutoff
|
||||||
|
weekend_cutoff: !input weekend_cutoff
|
||||||
|
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: !input remaining_sensor
|
||||||
|
- trigger: time
|
||||||
|
at: !input weekday_cutoff
|
||||||
|
- trigger: time
|
||||||
|
at: !input weekend_cutoff
|
||||||
|
- trigger: time
|
||||||
|
at: "00:00:00"
|
||||||
|
- trigger: homeassistant
|
||||||
|
event: start
|
||||||
|
# Reconcile after missed events or a temporary UniFi outage.
|
||||||
|
- trigger: time_pattern
|
||||||
|
minutes: "/5"
|
||||||
|
|
||||||
|
conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ client_switches | count > 0 }}"
|
||||||
|
|
||||||
|
actions:
|
||||||
|
- variables:
|
||||||
|
should_block: >-
|
||||||
|
{{ now().strftime('%H:%M') >=
|
||||||
|
(weekday_cutoff[:5] if now().weekday() < 5 else weekend_cutoff[:5])
|
||||||
|
and (states(remaining_sensor) | int(-1)) != 0 }}
|
||||||
|
- repeat:
|
||||||
|
for_each: "{{ client_switches }}"
|
||||||
|
sequence:
|
||||||
|
- choose:
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: >-
|
||||||
|
{{ should_block | bool and is_state(repeat.item, 'on') }}
|
||||||
|
sequence:
|
||||||
|
- action: switch.turn_off
|
||||||
|
target:
|
||||||
|
entity_id: "{{ repeat.item }}"
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: >-
|
||||||
|
{{ not (should_block | bool) and is_state(repeat.item, 'off') }}
|
||||||
|
sequence:
|
||||||
|
- action: switch.turn_on
|
||||||
|
target:
|
||||||
|
entity_id: "{{ repeat.item }}"
|
||||||
Reference in New Issue
Block a user