Compare commits
10 Commits
2025.9.3
...
2de7d82e20
| Author | SHA1 | Date | |
|---|---|---|---|
|
2de7d82e20
|
|||
|
83c3c10a5a
|
|||
|
f7ac1b915b
|
|||
|
1d3398752e
|
|||
|
837ed779c9
|
|||
|
bc3a58875d
|
|||
|
3c018a922b
|
|||
|
10188d553a
|
|||
|
341200deb0
|
|||
|
b930cb28b5
|
@@ -1 +1 @@
|
||||
2025.9.3
|
||||
2025.10.1
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -68,6 +68,7 @@
|
||||
**jsconfig*
|
||||
.markdownlint.json
|
||||
**test.jinja
|
||||
**.ha_run.lock
|
||||
|
||||
# exceptions
|
||||
!/www/bubble/
|
||||
@@ -4646,39 +4646,41 @@
|
||||
- id: '1710611198911'
|
||||
alias: Kallen Meds Handler
|
||||
description: Handles the scheduling of medication reminders for Kallen
|
||||
trigger:
|
||||
- platform: time_pattern
|
||||
minutes: /30
|
||||
triggers:
|
||||
- minutes: /30
|
||||
id: trigger30
|
||||
alias: Every 30 minutes
|
||||
- platform: time
|
||||
at: input_datetime.kallen_morning_meds_notify
|
||||
trigger: time_pattern
|
||||
- at: input_datetime.kallen_morning_meds_notify
|
||||
id: morning-notify
|
||||
alias: Morning Notify
|
||||
- platform: time
|
||||
at: input_datetime.kallen_night_meds_notify
|
||||
trigger: time
|
||||
- at: input_datetime.kallen_night_meds_notify
|
||||
id: night-notify
|
||||
alias: Night Notify
|
||||
- platform: state
|
||||
entity_id:
|
||||
trigger: time
|
||||
enabled: false
|
||||
- entity_id:
|
||||
- input_boolean.kallen_morning_meds_taken
|
||||
to: 'on'
|
||||
id: boolean-morning
|
||||
alias: Morning Taken
|
||||
from: 'off'
|
||||
- platform: state
|
||||
entity_id:
|
||||
trigger: state
|
||||
- entity_id:
|
||||
- input_boolean.kallen_night_meds_taken
|
||||
id: boolean-night
|
||||
alias: Night Taken
|
||||
from: 'off'
|
||||
to: 'on'
|
||||
condition:
|
||||
trigger: state
|
||||
enabled: false
|
||||
conditions:
|
||||
- condition: state
|
||||
entity_id: input_boolean.kallen_overnight
|
||||
state: 'off'
|
||||
alias: Kallen is not staying the night elsewhere
|
||||
action:
|
||||
actions:
|
||||
- alias: Routing
|
||||
choose:
|
||||
- conditions:
|
||||
@@ -4693,10 +4695,10 @@
|
||||
state: 'on'
|
||||
alias: Morning meds reminder needed
|
||||
then:
|
||||
- service: script.kallen_morning_meds
|
||||
metadata: {}
|
||||
- metadata: {}
|
||||
data: {}
|
||||
alias: Run morning meds notification script
|
||||
action: script.kallen_morning_meds
|
||||
- alias: Check night reminder switch
|
||||
if:
|
||||
- condition: state
|
||||
@@ -4704,10 +4706,10 @@
|
||||
state: 'on'
|
||||
alias: Night meds reminder needed
|
||||
then:
|
||||
- service: script.kallen_night_meds
|
||||
metadata: {}
|
||||
- metadata: {}
|
||||
data: {}
|
||||
alias: Run night meds notification script
|
||||
action: script.kallen_night_meds
|
||||
alias: Every 30 minutes
|
||||
- conditions:
|
||||
- condition: and
|
||||
@@ -4719,16 +4721,16 @@
|
||||
state: 'off'
|
||||
alias: Morning Notify
|
||||
sequence:
|
||||
- service: input_boolean.turn_on
|
||||
metadata: {}
|
||||
- metadata: {}
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_boolean.kallen_morning_meds_reminder
|
||||
alias: Activate morning reminders
|
||||
- service: script.kallen_morning_meds
|
||||
metadata: {}
|
||||
action: input_boolean.turn_on
|
||||
- metadata: {}
|
||||
data: {}
|
||||
alias: Run morning meds notification script
|
||||
action: script.kallen_morning_meds
|
||||
- conditions:
|
||||
- condition: and
|
||||
conditions:
|
||||
@@ -4741,22 +4743,21 @@
|
||||
alias: Night Notify
|
||||
sequence:
|
||||
- alias: Activate night reminders
|
||||
service: input_boolean.turn_on
|
||||
metadata: {}
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_boolean.kallen_night_meds_reminder
|
||||
- service: script.kallen_night_meds
|
||||
metadata: {}
|
||||
action: input_boolean.turn_on
|
||||
- metadata: {}
|
||||
data: {}
|
||||
alias: Run night meds notification script
|
||||
action: script.kallen_night_meds
|
||||
- conditions:
|
||||
- condition: trigger
|
||||
id: boolean-morning
|
||||
alias: Morning Taken
|
||||
sequence:
|
||||
- service: input_datetime.set_datetime
|
||||
target:
|
||||
- target:
|
||||
entity_id: input_datetime.kallen_morning_meds_taken
|
||||
data:
|
||||
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0)
|
||||
@@ -4764,27 +4765,27 @@
|
||||
|
||||
'
|
||||
alias: Set time morning meds were taken
|
||||
- service: input_boolean.turn_off
|
||||
metadata: {}
|
||||
action: input_datetime.set_datetime
|
||||
- metadata: {}
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_boolean.kallen_morning_meds_reminder
|
||||
alias: Deactivate morning reminders
|
||||
- service: script.text_notify
|
||||
metadata: {}
|
||||
action: input_boolean.turn_off
|
||||
- metadata: {}
|
||||
data:
|
||||
type: alert
|
||||
who: kallen
|
||||
message: clear_notification
|
||||
tag: kallen-left-meds
|
||||
alias: Clear kallen-left-meds notification tag
|
||||
action: script.text_notify
|
||||
- conditions:
|
||||
- condition: trigger
|
||||
id: boolean-night
|
||||
alias: Night Taken
|
||||
sequence:
|
||||
- service: input_datetime.set_datetime
|
||||
target:
|
||||
- target:
|
||||
entity_id: input_datetime.kallen_night_meds_taken
|
||||
data:
|
||||
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0)
|
||||
@@ -4792,20 +4793,21 @@
|
||||
|
||||
'
|
||||
alias: Set time night meds were taken
|
||||
action: input_datetime.set_datetime
|
||||
- alias: Deactivate night reminders
|
||||
service: input_boolean.turn_off
|
||||
metadata: {}
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_boolean.kallen_night_meds_reminder
|
||||
- service: script.text_notify
|
||||
metadata: {}
|
||||
action: input_boolean.turn_off
|
||||
- metadata: {}
|
||||
data:
|
||||
type: alert
|
||||
who: kallen
|
||||
message: clear_notification
|
||||
tag: kallen-left-meds
|
||||
alias: Clear kallen-left-meds notification tag
|
||||
action: script.text_notify
|
||||
mode: parallel
|
||||
max: 12
|
||||
- id: '1711657679853'
|
||||
|
||||
@@ -300,18 +300,6 @@ influxdb:
|
||||
- binary_sensor.people_present
|
||||
- weather.iron_nerd_weather_station
|
||||
- weather.ashland_weather_station
|
||||
- sensor.circle_k
|
||||
- sensor.kroger
|
||||
- sensor.kecks
|
||||
- sensor.the_barn
|
||||
- sensor.the_big_fish
|
||||
- sensor.speedway
|
||||
- sensor.meijer
|
||||
- sensor.ridis
|
||||
- sensor.marathon_cleveland_avenue
|
||||
- sensor.south_side_shell
|
||||
- sensor.east_side_shell
|
||||
- sensor.shell_ottawa_avenue
|
||||
- sensor.current_lights_on
|
||||
- binary_sensor.early_night_mode
|
||||
- input_boolean.give_me_darkness
|
||||
@@ -484,18 +472,6 @@ prometheus:
|
||||
- binary_sensor.people_present
|
||||
- weather.iron_nerd_weather_station
|
||||
- weather.ashland_weather_station
|
||||
- sensor.circle_k
|
||||
- sensor.kroger
|
||||
- sensor.kecks
|
||||
- sensor.the_barn
|
||||
- sensor.the_big_fish
|
||||
- sensor.speedway
|
||||
- sensor.meijer
|
||||
- sensor.ridis
|
||||
- sensor.marathon_cleveland_avenue
|
||||
- sensor.south_side_shell
|
||||
- sensor.east_side_shell
|
||||
- sensor.shell_ottawa_avenue
|
||||
- sensor.current_lights_on
|
||||
- binary_sensor.early_night_mode
|
||||
- input_boolean.give_me_darkness
|
||||
|
||||
@@ -1,39 +1,3 @@
|
||||
sensor.ridis:
|
||||
device_class: monetary
|
||||
|
||||
sensor.kecks:
|
||||
device_class: monetary
|
||||
|
||||
sensor.circle_k:
|
||||
device_class: monetary
|
||||
|
||||
sensor.the_big_fish:
|
||||
device_class: monetary
|
||||
|
||||
sensor.meijer:
|
||||
device_class: monetary
|
||||
|
||||
sensor.south_side_shell:
|
||||
device_class: monetary
|
||||
|
||||
sensor.kroger:
|
||||
device_class: monetary
|
||||
|
||||
sensor.marathon_cleveland_avenue:
|
||||
device_class: monetary
|
||||
|
||||
sensor.speedway:
|
||||
device_class: monetary
|
||||
|
||||
sensor.shell_ottawa_avenue:
|
||||
device_class: monetary
|
||||
|
||||
sensor.the_barn:
|
||||
device_class: monetary
|
||||
|
||||
sensor.east_side_shell:
|
||||
device_class: monetary
|
||||
|
||||
sensor.local_minimum_gas_price:
|
||||
device_class: monetary
|
||||
|
||||
|
||||
@@ -268,7 +268,7 @@ script:
|
||||
- light.living_room_overhead
|
||||
- service: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.living_room_studio_selected_scene
|
||||
entity_id: input_text.living_room_selected_scene
|
||||
data:
|
||||
value: Alert
|
||||
# Define variable for restoration of the current scene if the backup is not needed
|
||||
|
||||
@@ -25,24 +25,36 @@ input_boolean:
|
||||
tony_ibuprofen_active:
|
||||
name: Tony Ibuprofen Active
|
||||
icon: mdi:medication
|
||||
tony_ibuprofen_reminder:
|
||||
name: Tony Ibuprofen Reminder
|
||||
icon: mdi:medication
|
||||
tony_ibuprofen_taken:
|
||||
name: Tony Ibuprofen Taken
|
||||
icon: mdi:medication
|
||||
tony_tylenol_active:
|
||||
name: Tony Tylenol Active
|
||||
icon: mdi:medication
|
||||
tony_tylenol_reminder:
|
||||
name: Tony Tylenol Reminder
|
||||
icon: mdi:medication
|
||||
tony_tylenol_taken:
|
||||
name: Tony Tylenol Taken
|
||||
icon: mdi:medication
|
||||
tony_custom_meds_tracker_p1:
|
||||
name: Tony Custom Meds Tracker P1
|
||||
icon: mdi:medication
|
||||
tony_custom_meds_reminder_p1:
|
||||
name: Tony Custom Meds Reminder P1
|
||||
icon: mdi:medication
|
||||
tony_custom_meds_taken_p1:
|
||||
name: Tony Custom Meds Taken P1
|
||||
icon: mdi:medication
|
||||
tony_custom_meds_tracker_p2:
|
||||
name: Tony Custom Meds Tracker P2
|
||||
icon: mdi:medication
|
||||
tony_custom_meds_reminder_p2:
|
||||
name: Tony Custom Meds Reminder P2
|
||||
icon: mdi:medication
|
||||
tony_custom_meds_taken_p2:
|
||||
name: Tony Custom Meds Taken P2
|
||||
icon: mdi:medication
|
||||
|
||||
151
scripts.yaml
151
scripts.yaml
@@ -1733,21 +1733,38 @@ tony_morning_meds:
|
||||
entity_id: counter.tony_morning_meds_reminder_count
|
||||
above: 2
|
||||
then:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
- alias: Generate snarky reminder
|
||||
action: ai_task.generate_data
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tony to take his morning meds. Use a maximum of two lines.
|
||||
Be snarky, because at this point he's been reminded {{ remindCount }}
|
||||
times.
|
||||
instructions: Remind Tony to take his morning meds. Use a maximum of two
|
||||
lines. Be snarky, because at this point this is reminder number {{ remindCount
|
||||
}}.
|
||||
task_name: Tony Morning Medication Reminder Snarky
|
||||
entity_id: ai_task.google_ai_task
|
||||
structure:
|
||||
notification_text:
|
||||
description: The text to send in the notification to Tony's phone
|
||||
required: true
|
||||
selector:
|
||||
text:
|
||||
response_variable: response
|
||||
alias: Generate snarky reminder
|
||||
else:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
- alias: Generate reminder
|
||||
action: ai_task.generate_data
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tony to take his morning meds. Use a maximum of two lines.
|
||||
instructions: Remind Tony to take his morning meds. Use a maximum of two
|
||||
lines.
|
||||
task_name: Tony Morning Medication Reminder
|
||||
entity_id: ai_task.google_ai_task
|
||||
structure:
|
||||
notification_text:
|
||||
description: The text to send in the notification to Tony's phone
|
||||
required: true
|
||||
selector:
|
||||
text:
|
||||
response_variable: response
|
||||
alias: Generate reminder
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
@@ -1760,7 +1777,7 @@ tony_morning_meds:
|
||||
who: tony
|
||||
type: alert
|
||||
title: Morning Meds
|
||||
message: '{{ response.text }}'
|
||||
message: '{{ response.data.notification_text }}'
|
||||
tag: tony-morning-meds
|
||||
actions:
|
||||
- action: TONY_MORNING_MEDS_TAKEN
|
||||
@@ -1782,11 +1799,11 @@ tony_morning_meds:
|
||||
state: home
|
||||
alias: If Tony is home
|
||||
then:
|
||||
- data:
|
||||
- alias: Send TTS notification
|
||||
data:
|
||||
who: common_areas
|
||||
type: alert
|
||||
message: '{{ response.text }}'
|
||||
alias: Send TTS notification
|
||||
message: '{{ response.data.notification_text }}'
|
||||
action: script.speech_engine
|
||||
else:
|
||||
- delay:
|
||||
@@ -2044,21 +2061,38 @@ tony_afternoon_meds:
|
||||
entity_id: counter.tony_afternoon_meds_reminder_count
|
||||
above: 2
|
||||
then:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
- alias: Generate snarky reminder
|
||||
action: ai_task.generate_data
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tony to take his afternoon meds. Use a maximum of two lines.
|
||||
Be snarky, because at this point he's been reminded {{ remindCount }}
|
||||
times.
|
||||
instructions: Remind Tony to take his afternoon meds. Use a maximum of two
|
||||
lines. Be snarky, because at this point this is reminder number {{ remindCount
|
||||
}}.
|
||||
task_name: Tony Afternoon Medication Reminder Snarky
|
||||
entity_id: ai_task.google_ai_task
|
||||
structure:
|
||||
notification_text:
|
||||
description: The text to send in the notification to Tony's phone
|
||||
required: true
|
||||
selector:
|
||||
text:
|
||||
response_variable: response
|
||||
alias: Generate snarky reminder
|
||||
else:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
- alias: Generate reminder
|
||||
action: ai_task.generate_data
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tony to take his afternoon meds. Use a maximum of two lines.
|
||||
instructions: Remind Tony to take his afternoon meds. Use a maximum of two
|
||||
lines.
|
||||
task_name: Tony Afternoon Medication Reminder
|
||||
entity_id: ai_task.google_ai_task
|
||||
structure:
|
||||
notification_text:
|
||||
description: The text to send in the notification to Tony's phone
|
||||
required: true
|
||||
selector:
|
||||
text:
|
||||
response_variable: response
|
||||
alias: Generate reminder
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
@@ -2071,7 +2105,7 @@ tony_afternoon_meds:
|
||||
who: tony
|
||||
type: alert
|
||||
title: Afternoon Meds
|
||||
message: '{{ response.text }}'
|
||||
message: '{{ response.data.notification_text }}'
|
||||
tag: tony-afternoon-meds
|
||||
actions:
|
||||
- action: TONY_AFTERNOON_MEDS_TAKEN
|
||||
@@ -2093,11 +2127,11 @@ tony_afternoon_meds:
|
||||
state: home
|
||||
alias: If Tony is home
|
||||
then:
|
||||
- data:
|
||||
- alias: Send TTS notification
|
||||
data:
|
||||
who: common_areas
|
||||
type: alert
|
||||
message: '{{ response.text }}'
|
||||
alias: Send TTS notification
|
||||
message: '{{ response.data.notification_text }}'
|
||||
action: script.speech_engine
|
||||
else:
|
||||
- delay:
|
||||
@@ -3099,21 +3133,38 @@ tina_morning_meds:
|
||||
entity_id: counter.tina_morning_meds_reminder_count
|
||||
above: 2
|
||||
then:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
- alias: Generate snarky reminder
|
||||
action: ai_task.generate_data
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tina to take her morning meds. Use a maximum of two lines.
|
||||
Be snarky, because at this point she's been reminded {{ remindCount }}
|
||||
times.
|
||||
instructions: Remind Tina to take her morning meds. Use a maximum of two
|
||||
lines. Be snarky, because at this point this is reminder number {{ remindCount
|
||||
}}.
|
||||
task_name: Tina Morning Medication Reminder Snarky
|
||||
entity_id: ai_task.google_ai_task
|
||||
structure:
|
||||
notification_text:
|
||||
description: The text to send in the notification to Tina's phone
|
||||
required: true
|
||||
selector:
|
||||
text:
|
||||
response_variable: response
|
||||
alias: Generate snarky reminder
|
||||
else:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
- alias: Generate reminder
|
||||
action: ai_task.generate_data
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tina to take her morning meds. Use a maximum of two lines.
|
||||
instructions: Remind Tina to take her morning meds. Use a maximum of two
|
||||
lines.
|
||||
task_name: Tina Morning Medication Reminder
|
||||
entity_id: ai_task.google_ai_task
|
||||
structure:
|
||||
notification_text:
|
||||
description: The text to send in the notification to Tina's phone
|
||||
required: true
|
||||
selector:
|
||||
text:
|
||||
response_variable: response
|
||||
alias: Generate reminder
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
@@ -3124,7 +3175,7 @@ tina_morning_meds:
|
||||
who: tina
|
||||
type: alert
|
||||
title: Morning Meds
|
||||
message: '{{ response.text }}'
|
||||
message: '{{ response.data.notification_text }}'
|
||||
tag: tina-morning-meds
|
||||
actions:
|
||||
- action: TINA_MORNING_MEDS_TAKEN
|
||||
@@ -3184,21 +3235,37 @@ tina_night_meds:
|
||||
entity_id: counter.tina_night_meds_reminder_count
|
||||
above: 2
|
||||
then:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
- alias: Generate snarky reminder
|
||||
action: ai_task.generate_data
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tina to take her night meds. Use a maximum of two lines.
|
||||
Be snarky, because at this point she's been reminded {{ remindCount }}
|
||||
times.
|
||||
instructions: Remind Tina to take her night meds. Use a maximum of two lines.
|
||||
Be snarky, because at this point this is reminder number {{ remindCount
|
||||
}}.
|
||||
task_name: Tina Night Medication Reminder Snarky
|
||||
entity_id: ai_task.google_ai_task
|
||||
structure:
|
||||
notification_text:
|
||||
description: The text to send in the notification to Tina's phone
|
||||
required: true
|
||||
selector:
|
||||
text:
|
||||
response_variable: response
|
||||
alias: Generate snarky reminder
|
||||
else:
|
||||
- action: google_generative_ai_conversation.generate_content
|
||||
- alias: Generate reminder
|
||||
action: ai_task.generate_data
|
||||
metadata: {}
|
||||
data:
|
||||
prompt: Remind Tina to take her night meds. Use a maximum of two lines.
|
||||
instructions: Remind Tina to take her night meds. Use a maximum of two lines.
|
||||
task_name: Tina Night Medication Reminder
|
||||
entity_id: ai_task.google_ai_task
|
||||
structure:
|
||||
notification_text:
|
||||
description: The text to send in the notification to Tina's phone
|
||||
required: true
|
||||
selector:
|
||||
text:
|
||||
response_variable: response
|
||||
alias: Generate reminder
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
@@ -3209,7 +3276,7 @@ tina_night_meds:
|
||||
who: tina
|
||||
type: alert
|
||||
title: Night Meds
|
||||
message: '{{ response.text }}'
|
||||
message: '{{ response.data.notification_text }}'
|
||||
tag: tina-night-meds
|
||||
actions:
|
||||
- action: TINA_NIGHT_MEDS_TAKEN
|
||||
|
||||
@@ -464,3 +464,51 @@
|
||||
map(attribute='attributes.friendly_name') |
|
||||
list %}
|
||||
{{ uptimekuma | join(', ') }}
|
||||
- name: Media Server Viewer Health
|
||||
unique_id: 51154ade-255e-4dcd-9b89-66910fcc1331
|
||||
unit_of_measurement: '%'
|
||||
icon: mdi:movie
|
||||
state: >
|
||||
{% set total = states.binary_sensor |
|
||||
selectattr('entity_id','in',label_entities('media_server')) |
|
||||
selectattr('entity_id','in',label_entities('viewer')) |
|
||||
list | count | int %}
|
||||
{% set up = states.binary_sensor |
|
||||
selectattr('entity_id','in',label_entities('media_server')) |
|
||||
selectattr('entity_id','in',label_entities('viewer')) |
|
||||
selectattr('state','eq','on') |
|
||||
list | count | int %}
|
||||
{{ ((up / total) * 100) | round(0) }}
|
||||
attributes:
|
||||
services_down: >
|
||||
{% set down = states.binary_sensor |
|
||||
selectattr('entity_id','in',label_entities('media_server')) |
|
||||
selectattr('entity_id','in',label_entities('viewer')) |
|
||||
selectattr('state','eq','off') |
|
||||
map(attribute='attributes.friendly_name') |
|
||||
list %}
|
||||
{{ down | join(', ') }}
|
||||
- name: Media Server Downloaders Health
|
||||
unique_id: f27867fe-700f-45bc-9e6b-8b1ee74cb724
|
||||
unit_of_measurement: '%'
|
||||
icon: mdi:tray-arrow-down
|
||||
state: >
|
||||
{% set total = states.binary_sensor |
|
||||
selectattr('entity_id','in',label_entities('media_server')) |
|
||||
selectattr('entity_id','in',label_entities('downloader')) |
|
||||
list | count | int %}
|
||||
{% set up = states.binary_sensor |
|
||||
selectattr('entity_id','in',label_entities('media_server')) |
|
||||
selectattr('entity_id','in',label_entities('downloader')) |
|
||||
selectattr('state','eq','on') |
|
||||
list | count | int %}
|
||||
{{ ((up / total) * 100) | round(0) }}
|
||||
attributes:
|
||||
services_down: >
|
||||
{% set down = states.binary_sensor |
|
||||
selectattr('entity_id','in',label_entities('media_server')) |
|
||||
selectattr('entity_id','in',label_entities('downloader')) |
|
||||
selectattr('state','eq','off') |
|
||||
map(attribute='attributes.friendly_name') |
|
||||
list %}
|
||||
{{ down | join(', ') }}
|
||||
Reference in New Issue
Block a user