Forked from khenderick/automations_generic_screen_time.yaml
Created
March 26, 2025 07:20
-
-
Save fullbright/583df85d6436ac80ce4bfa48381dafc4 to your computer and use it in GitHub Desktop.
Kids screentime
This file contains hidden or 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
- id: reset_extra_screen_time | |
alias: "Reset extra screen time" | |
mode: single | |
max_exceeded: silent | |
trigger: | |
- platform: time | |
at: "00:00:00" | |
condition: | |
condition: time | |
weekday: | |
- mon | |
action: | |
- service: input_number.set_value | |
target: | |
entity_id: input_number.child_1_extra_screen_time | |
data: | |
value: >- | |
{% if states('input_number.child_1_extra_screen_time') | int(0) >= 0 %} | |
{{ min(states('input_number.child_1_extra_screen_time') | int(0), states('sensor.child_1_weekly_screen_time_remaining') | int(0)) }} | |
{% else %} | |
{{ min(0, 0 + states('input_number.child_1_extra_screen_time') | int(0) + states('sensor.weekly_screen_time') | int(0)) }} | |
{% endif %} | |
- service: input_number.set_value | |
target: | |
entity_id: input_number.child_1_correction_screen_time | |
data: | |
value: 0 | |
- service: input_number.set_value | |
target: | |
entity_id: input_number.child_2_extra_screen_time | |
data: | |
value: >- | |
{% if states('input_number.child_2_extra_screen_time') | int(0) >= 0 %} | |
{{ min(states('input_number.child_2_extra_screen_time') | int(0), states('sensor.child_2_weekly_screen_time_remaining') | int(0)) }} | |
{% else %} | |
{{ min(0, 0 + states('input_number.child_2_extra_screen_time') | int(0) + states('sensor.weekly_screen_time') | int(0)) }} | |
{% endif %} | |
- service: input_number.set_value | |
target: | |
entity_id: input_number.child_2_correction_screen_time | |
data: | |
value: 0 |
This file contains hidden or 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
- id: warn_screen_time_almost_used | |
alias: "Warn screen time almost used" | |
mode: queued | |
max_exceeded: silent | |
trigger: | |
- platform: template | |
value_template: "{{ states('sensor.child_1_screen_time_today') | float(0) * 60 + 10 >= 120 }}" | |
id: "child_1_day" | |
- platform: template | |
value_template: "{{ states('sensor.child_2_screen_time_today') | float(0) * 60 + 10 >= 120 }}" | |
id: "child_2_day" | |
- platform: template | |
value_template: > | |
{{ states('sensor.child_1_weekly_screen_time_threshold') | int(-1) > 0 and | |
states('sensor.child_1_screen_time_this_week') | int(0) + 10 >= states('sensor.child_1_weekly_screen_time_threshold') | int(0) }} | |
id: "child_1_week" | |
- platform: template | |
value_template: > | |
{{ states('sensor.child_2_weekly_screen_time_threshold') | int(-1) > 0 and | |
states('sensor.child_2_screen_time_this_week') | int(0) + 10 >= states('sensor.child_2_weekly_screen_time_threshold') | int(0) }} | |
id: "child_2_week" | |
variables: | |
names: | |
child_1_day: | |
message: "Child 1, je hebt bijna 2 uur van je schermtijd gebruikt." | |
child_1_week: | |
message: "Child 1, je hebt bijna je wekelijkse schermtijd gebruikt." | |
child_2_day: | |
message: "Child 2, je hebt bijna 2 uur van je schermtijd gebruikt." | |
child_2_week: | |
message: "Child 2, je hebt bijna je wekelijkse schermtijd gebruikt." | |
action: | |
- variables: | |
message: "{{ names[trigger.id].message }}" | |
- service: script.cloud_say | |
data: | |
entity_id: media_player.muse_living | |
message: "{{ message }}" | |
volume: 0.5 | |
language: "NL" | |
- id: warn_weekly_screen_time | |
alias: "Warn weekly screen time" | |
mode: queued | |
max_exceeded: silent | |
trigger: | |
- platform: template | |
value_template: "{{ states('sensor.child_1_screen_time_this_week') | int(0) >= states('sensor.child_1_weekly_screen_time_threshold') | int(-1) > 0 }}" | |
id: "child_1" | |
- platform: template | |
value_template: "{{ states('sensor.child_2_screen_time_this_week') | int(0) >= states('sensor.child_2_weekly_screen_time_threshold') | int(-1) > 0 }}" | |
id: "child_2" | |
variables: | |
names: | |
child_1: | |
pronunciation: "Child 1" | |
name: "Child 1" | |
child_2: | |
pronunciation: "Child 2" | |
name: "Child 2" | |
action: | |
- variables: | |
pronunciation: "{{ names[trigger.id].pronunciation }}" | |
name: "{{ names[trigger.id].name }}" | |
- service: script.cloud_say | |
data: | |
entity_id: media_player.muse_living | |
message: "{{ pronunciation }}, je schermtijd voor deze week is op." | |
volume: 0.5 | |
language: "NL" | |
- service: notify.own_devices | |
data: | |
title: "Screen time" | |
message: "{{ name }} is out of screen time" | |
data: | |
notification_icon: "mdi:television-off" | |
- id: notify_screen_time | |
alias: "Notify screen time" | |
mode: queued | |
max_exceeded: silent | |
variables: | |
names: | |
input_boolean.child_1_screen_time_active: | |
pronunciation: "Child 1" | |
name: "child_1" | |
input_boolean.child_2_screen_time_active: | |
pronunciation: "Child 2" | |
name: "child_2" | |
numbers: "{{ {0: 'nul', 1: 'een', 2: 'twee', 3: 'drie', 4: 'vier', 5: 'vijf', 6: 'zes', 7: 'zeven', 8: 'acht', 9: 'negen', 10: 'tien', 11: 'elf', 12: 'twaalf', 13: 'dertien', 14: 'veertien', 15: 'vijftien', 16: 'zestien', 17: 'zeventien', 18: 'achttien', 19: 'negentien', 20: 'twintig', 21: 'eenentwintig', 22: 'tweeëntwintig', 23: 'drieëntwintig', 24: 'vierentwintig', 25: 'vijfentwintig', 26: 'zesentwintig', 27: 'zevenentwintig', 28: 'achtentwintig', 29: 'negenentwintig', 30: 'dertig', 31: 'eenendertig', 32: 'tweeëndertig', 33: 'drieëndertig', 34: 'vierendertig', 35: 'vijfendertig', 36: 'zesendertig', 37: 'zevenendertig', 38: 'achtendertig', 39: 'negenendertig', 40: 'veertig', 41: 'eenenveertig', 42: 'tweeënveertig', 43: 'drieënveertig', 44: 'vierenveertig', 45: 'vijfenveertig', 46: 'zesenveertig', 47: 'zevenenveertig', 48: 'achtenveertig', 49: 'negenenveertig', 50: 'vijftig', 51: 'eenenvijftig', 52: 'tweeënvijftig', 53: 'drieënvijftig', 54: 'vierenvijftig', 55: 'vijfenvijftig', 56: 'zesenvijftig', 57: 'zevenenvijftig', 58: 'achtenvijftig', 59: 'negenenvijftig', 60: 'zestig', 61: 'eenenzestig', 62: 'tweeënzestig', 63: 'drieënzestig', 64: 'vierenzestig', 65: 'vijfenzestig', 66: 'zesenzestig', 67: 'zevenenzestig', 68: 'achtenzestig', 69: 'negenenzestig', 70: 'zeventig', 71: 'eenenzeventig', 72: 'tweeënzeventig', 73: 'drieënzeventig', 74: 'vierenzeventig', 75: 'vijfenzeventig', 76: 'zesenzeventig', 77: 'zevenenzeventig', 78: 'achtenzeventig', 79: 'negenenzeventig', 80: 'tachtig', 81: 'eenentachtig', 82: 'tweeëntachtig', 83: 'drieëntachtig', 84: 'vierentachtig', 85: 'vijfentachtig', 86: 'zesentachtig', 87: 'zevenentachtig', 88: 'achtentachtig', 89: 'negenentachtig', 90: 'negentig', 91: 'eenennegentig', 92: 'tweeënnegentig', 93: 'drieënnegentig', 94: 'vierennegentig', 95: 'vijfennegentig', 96: 'zesennegentig', 97: 'zevenennegentig', 98: 'achtennegentig', 99: 'negenennegentig'} }}" | |
trigger: | |
- platform: state | |
entity_id: input_boolean.child_1_screen_time_active | |
to: null | |
- platform: state | |
entity_id: input_boolean.child_2_screen_time_active | |
to: null | |
action: | |
- variables: | |
pronunciation: "{{ names[trigger.entity_id].pronunciation }}" | |
name: "{{ names[trigger.entity_id].name }}" | |
today: "{{ (states('sensor.' + name + '_screen_time_today') | float(0) * 60) | int(0) }}" | |
today_hours: "{{ today // 60 }}" | |
today_minutes: "{{ today % 60 }}" | |
remaining: "{{ states('sensor.' + name + '_weekly_screen_time_remaining') | int(0) }}" | |
remaining_hours: "{{ remaining // 60 }}" | |
remaining_minutes: "{{ remaining % 60 }}" | |
- service: script.cloud_say | |
data: | |
entity_id: media_player.muse_living | |
message: > | |
{{ pronunciation }}, | |
{%- if remaining > 0 -%} | |
je schermtijd is {{ 'gestart' if is_state(trigger.entity_id, 'on') else 'gestopt' }}. | |
{%- endif -%} | |
{%- if today > 0 -%} | |
Je hebt vandaag al | |
{%- if today_hours > 0 -%} | |
{{ ' ' }}{{ numbers[today_hours] }} uur | |
{%- endif -%} | |
{%- if today_hours > 0 and today_minutes > 0 -%} | |
{{ ' ' }}en | |
{%- endif -%} | |
{%- if today_minutes > 0 -%} | |
{{ ' ' }}{{ numbers[today_minutes] }} min{{ 'uut' if today_minutes == 1 else 'uten' }} | |
{%- endif %} gebruikt. | |
{%- endif -%} | |
{{ ' ' }}Je hebt | |
{%- if remaining <= 0 -%} | |
{{ ' ' }}geen tijd meer over deze week. | |
{%- else -%} | |
{{ ' ' }}nog | |
{%- if remaining_hours > 0 -%} | |
{{ ' ' }}{{ numbers[remaining_hours] }} uur | |
{%- endif -%} | |
{%- if remaining_hours > 0 and remaining_minutes > 0 -%} | |
{{ ' ' }}en | |
{%- endif -%} | |
{%- if remaining_minutes > 0 -%} | |
{{ ' ' }}{{ numbers[remaining_minutes] }} min{{ 'uut' if remaining_minutes == 1 else 'uten' }} | |
{%- endif %} over deze week. | |
{% endif %} | |
volume: 0.5 | |
language: "NL" | |
- if: | |
- "{{ remaining < 0 }}" | |
then: | |
- service: input_boolean.turn_off | |
target: | |
entity_id: "{{ trigger.entity_id }}" |
This file contains hidden or 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
input_number.child_1_extra_screen_time: | |
icon: "mdi:gift" | |
input_number.child_1_correction_screen_time: | |
icon: "mdi:hammer" | |
input_number.child_2_extra_screen_time: | |
icon: "mdi:gift" | |
input_number.child_2_correction_screen_time: | |
icon: "mdi:hammer" |
This file contains hidden or 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
child_1_screen_time_active: | |
name: "Child 1 is consuming screen time" | |
child_2_screen_time_active: | |
name: "Child 2 is consuming screen time" |
This file contains hidden or 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
child_1_extra_screen_time: | |
name: "Child 1 extra screen time" | |
min: -600 | |
max: 600 | |
step: 1 | |
mode: box | |
unit_of_measurement: "min" | |
child_1_correction_screen_time: | |
name: "Child 1 correction screen time" | |
min: -1500 | |
max: 1500 | |
step: 1 | |
mode: box | |
unit_of_measurement: "min" | |
child_2_extra_screen_time: | |
name: "Child 2 extra screen time" | |
min: -600 | |
max: 600 | |
step: 1 | |
mode: box | |
unit_of_measurement: "min" | |
child_2_correction_screen_time: | |
name: "Child 2 correction screen time" | |
min: -1500 | |
max: 1500 | |
step: 1 | |
mode: box | |
unit_of_measurement: "min" |
This file contains hidden or 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
- platform: history_stats | |
name: Child 1 screen time this week | |
entity_id: input_boolean.child_1_screen_time_active | |
state: "on" | |
type: time | |
start: "{{ as_timestamp(now().replace(hour=0, minute=0, second=0)) - now().weekday() * 86400 }}" | |
end: "{{ now() }}" | |
- platform: history_stats | |
name: Child 1 screen time today | |
entity_id: input_boolean.child_1_screen_time_active | |
state: "on" | |
type: time | |
start: "{{ now().replace(hour=0, minute=0, second=0) }}" | |
end: "{{ now() }}" | |
- platform: history_stats | |
name: Child 2 screen time this week | |
entity_id: input_boolean.child_2_screen_time_active | |
state: "on" | |
type: time | |
start: "{{ as_timestamp(now().replace(hour=0, minute=0, second=0)) - now().weekday() * 86400 }}" | |
end: "{{ now() }}" | |
- platform: history_stats | |
name: Child 2 screen time today | |
entity_id: input_boolean.child_2_screen_time_active | |
state: "on" | |
type: time | |
start: "{{ now().replace(hour=0, minute=0, second=0) }}" | |
end: "{{ now() }}" |
This file contains hidden or 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
- unique_id: weekly_screen_time | |
name: "Weekly screen time" | |
state: "{{ 720 if is_state('binary_sensor.school_holiday', 'on') else 360 }}" | |
- unique_id: child_1_weekly_screen_time_threshold | |
name: "Child 1 weekly screen time threshold" | |
state: "{{ states('sensor.weekly_screen_time') | int(0) + states('input_number.child_1_extra_screen_time') | int(0) }}" | |
availability: "{{ states('sensor.weekly_screen_time') | is_number() and states('input_number.child_1_extra_screen_time') | is_number() }}" | |
unit_of_measurement: "min" | |
- unique_id: child_1_corrected_screen_time_this_week | |
name: "Child 1 corrected screen time this week" | |
state: "{{ states('sensor.child_1_screen_time_this_week') | float(0) * 60 - states('input_number.child_1_correction_screen_time') | int(0) }}" | |
availability: "{{ states('sensor.child_1_screen_time_this_week') | is_number() and states('input_number.child_1_correction_screen_time') | is_number() }}" | |
unit_of_measurement: "min" | |
- unique_id: child_1_weekly_screen_time_remaining | |
name: "Child 1 weekly screen time remaining" | |
state: "{{ states('sensor.child_1_weekly_screen_time_threshold') | int(0) - states('sensor.child_1_screen_time_this_week') | int(0) }}" | |
availability: "{{ states('sensor.child_1_weekly_screen_time_threshold') | is_number() and states('sensor.child_1_screen_time_this_week') | is_number() }}" | |
unit_of_measurement: "min" | |
- unique_id: child_2_weekly_screen_time_threshold | |
name: "Child 2 weekly screen time threshold" | |
state: "{{ states('sensor.weekly_screen_time') | int(0) + states('input_number.child_2_extra_screen_time') | int(0) }}" | |
availability: "{{ states('sensor.weekly_screen_time') | is_number() and states('input_number.child_2_extra_screen_time') | is_number() }}" | |
unit_of_measurement: "min" | |
- unique_id: child_2_corrected_screen_time_this_week | |
name: "Child 2 corrected screen time this week" | |
state: "{{ states('sensor.child_2_screen_time_this_week') | float(0) * 60 - states('input_number.child_2_correction_screen_time') | int(0) }}" | |
availability: "{{ states('sensor.child_2_screen_time_this_week') | is_number() and states('input_number.child_2_correction_screen_time') | is_number() }}" | |
unit_of_measurement: "min" | |
- unique_id: child_2_weekly_screen_time_remaining | |
name: "Child 2 weekly screen time remaining" | |
state: "{{ states('sensor.child_2_weekly_screen_time_threshold') | int(0) - states('sensor.child_2_screen_time_this_week') | int(0) }}" | |
availability: "{{ states('sensor.child_2_weekly_screen_time_threshold') | is_number() and states('sensor.child_2_screen_time_this_week') | is_number() }}" | |
unit_of_measurement: "min" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment