Files
Home-Assistant-Configs/packages/school.yaml
Tony Stork f5b8390ec1 School cancel and delay entities back to generalized form
No need for them to be individualized since all schools in the same district follow the same calls...
2023-03-09 18:07:14 -05:00

466 lines
17 KiB
YAML

input_boolean:
school_in_session:
name: School In Session
icon: mdi:bus-school
kallen_at_school:
name: Kallen at School
icon: mdi:school
kallen_school_today:
name: Kallen School Today
icon: mdi:bus-school
kallen_school_early_release:
name: Kallen School Early Release
icon: mdi:bus-school
kallen_school_today_extended:
name: Kallen School Today Extended
icon: mdi:bus-school
two_hour_delay:
name: Kallen Two Hour Delay
icon: mdi:bus-clock
school_cancelled:
name: Kallen School Cancelled
icon: mdi:calendar-remove
kallen_band_practice:
name: Kallen Band Practice
icon: mdi:trumpet
input_datetime:
school_first_day:
name: First Day of School
has_date: true
has_time: false
icon: mdi:calendar
school_last_day:
name: Last Day of School
has_date: true
has_time: false
icon: mdi:calendar
thanksgiving_break_start:
name: Thanksgiving Break
has_date: true
has_time: false
icon: mdi:calendar-start
christmas_break_start:
name: Christmas Break
has_date: true
has_time: false
icon: mdi:calendar-start
spring_break_start:
name: Spring Break
has_date: true
has_time: false
icon: mdi:calendar-start
kallen_school_day_start:
name: School Day Start
has_date: false
has_time: true
icon: mdi:clock-start
kallen_school_day_end:
name: School Day End
has_date: false
has_time: true
icon: mdi:clock-end
kallen_school_day_start_reminder:
name: School Day Start Reminder
has_date: false
has_time: true
icon: mdi:clock-alert
kallen_school_day_end_reminder:
name: School Day End Reminder
has_date: false
has_time: true
icon: mdi:clock-alert
sensor:
- platform: template
sensors:
school_start_days2go:
value_template: "{{ ((state_attr('input_datetime.school_first_day', 'timestamp')-as_timestamp(now())) | int /60/1440) | round(0) }}"
attribute_templates:
date: "{{ state_attr('input_datetime.school_first_day','timestamp') | timestamp_custom('%B %d, %Y') }}"
unit_of_measurement: 'Days'
school_end_days2go:
value_template: "{{ ((state_attr('input_datetime.school_last_day', 'timestamp')-as_timestamp(now())) | int /60/1440) | round(0) }}"
attribute_templates:
date: "{{ state_attr('input_datetime.school_last_day','timestamp') | timestamp_custom('%B %d, %Y') }}"
unit_of_measurement: 'Days'
vacation_days2go:
value_template: >
{% if state_attr('calendar.vacation', 'start_time') %}
{{ ((as_timestamp(strptime(state_attr('calendar.vacation', 'start_time'), '%Y-%m-%d'))-as_timestamp(now())) | int /60/1440) | round(0) }}
{% else %}
999
{% endif %}
unit_of_measurement: 'Days'
thanksgiving_break_days2go:
value_template: "{{ ((state_attr('input_datetime.thanksgiving_break_start', 'timestamp')-as_timestamp(now())) | int /60/1440) | round(0) }}"
attribute_templates:
date: "{{ state_attr('input_datetime.thanksgiving_break_start','timestamp') | timestamp_custom('%B %d, %Y') }}"
unit_of_measurement: 'Days'
christmas_break_days2go:
value_template: "{{ ((state_attr('input_datetime.christmas_break_start', 'timestamp')-as_timestamp(now())) | int /60/1440) | round(0) }}"
attribute_templates:
date: "{{ state_attr('input_datetime.christmas_break_start','timestamp') | timestamp_custom('%B %d, %Y') }}"
unit_of_measurement: 'Days'
spring_break_days2go:
value_template: "{{ ((state_attr('input_datetime.spring_break_start', 'timestamp')-as_timestamp(now())) | int /60/1440) | round(0) }}"
attribute_templates:
date: "{{ state_attr('input_datetime.spring_break_start','timestamp') | timestamp_custom('%B %d, %Y') }}"
unit_of_measurement: 'Days'
kallen_school_tomorrow:
unique_id: 0a1b81bc-2080-4006-b0f1-270af904d411
friendly_name: 'Kallen School Tomorrow'
value_template: >-
{%- set test=(as_timestamp(now())+ (86400)) | timestamp_custom("%Y-%m-%d",true) %}
{% if states.calendar.kallen_school_days.attributes.start_time == test + " 09:00:00" %}
on
{% elif states.calendar.kallen_school_days.attributes.start_time == test + " 08:00:00" %}
on
{% else %}
off
{% endif %}
kallen_band_tomorrow:
unique_id: 2906baeb-98ec-4215-8043-e223f2759ed7
friendly_name: 'Kallen Band Tomorrow'
value_template: >-
{%- set test=(as_timestamp(now())+ (86400)) | timestamp_custom("%Y-%m-%d",true) %}
{% if states.calendar.kallen_school_days.attributes.start_time == test + " 08:00:00" %}
on
{% else %}
off
{% endif %}
kallen_lunch_menu_week:
friendly_name: Lunch Menu Week
value_template: >
{% if is_state('calendar.elementary_school_lunch','on') %}
{{ state_attr('calendar.elementary_school_lunch','message') }}
{% else %}
No Menu
{% endif %}
icon_template: >
{% if is_state_attr('calendar.elementary_school_lunch','message','First Menu') %}
mdi:numeric-1-circle
{% elif is_state_attr('calendar.elementary_school_lunch','message','Second Menu') %}
mdi:numeric-2-circle
{% elif is_state_attr('calendar.elementary_school_lunch','message','Third Menu') %}
mdi:numeric-3-circle
{% elif is_state_attr('calendar.elementary_school_lunch','message','Fourth Menu') %}
mdi:numeric-4-circle
{% else %}
mdi:calendar-end
{% endif %}
kallen_lunch_menu_items:
friendly_name: Lunch Menu Items
icon_template: >
{% set week = states('sensor.kallen_lunch_menu_week') %}
{% if week == 'First Menu' %}
mdi:numeric-1-circle
{% elif week == 'Second Menu' %}
mdi:numeric-2-circle
{% elif week == 'Third Menu' %}
mdi:numeric-3-circle
{% elif week == 'Fourth Menu' %}
mdi:numeric-4-circle
{% else %}
mdi:calendar-end
{% endif %}
value_template: >
{%- macro getReport() -%}
{% set week = states('sensor.kallen_lunch_menu_week') %}
{% set dow = now().strftime('%A') %}
{% if week == 'First Menu' %}
{% if dow == 'Monday' %}
Sloppy Joe, tomatoes or dip, green beans, mixed fruit, and milk.
{% elif dow == 'Tuesday' %}
Beef, taco salad, refried beans, spanish rice, peaches, and milk.
{% elif dow == 'Wednesday' %}
Optionally, Papa Johns Pizza. Otherwise, pulled pork, steamed broccoli, carrots, apples, and milk.
{% elif dow == 'Thursday' %}
Beef Stroganoff, steamed cauliflower, cucumbers, fresh fruit, and milk.
{% elif dow == 'Friday' %}
Hamburger, spinach salad, oven potatoes, applesauce, and milk.
{% endif %}
{% elif week == 'Second Menu' %}
{% if dow == 'Monday' %}
Popcorn chicken, mashed potatoes, corn, pears, bread, and milk.
{% elif dow == 'Tuesday' %}
Lasagna, garlic bread, celery, tomatoes, apple crisp, and milk.
{% elif dow == 'Wednesday' %}
Optionally, Papa Johns Pizza. Otherwise, hot ham and cheese, spinach salad, broccoli, fresh fruit, and milk.
{% elif dow == 'Thursday' %}
Turkey and noodles, mashed potatoes, carrots, peaches, bread, and milk.
{% elif down == 'Friday' %}
Hot dog with chili sauce, oven potatoes, backed beans, mixed fruit, and milk.
{% endif %}
{% elif week == 'Third Menu' %}
{% if dow == 'Monday' %}
Bosco sticks with pizza sauce, black bean salad, oven potatoes, peach crisp, and milk.
{% elif dow == 'Tuesday' %}
Toasted cheese, tomato soup, mixed vegetables, fresh fruit, treat, and milk.
{% elif dow == 'Wednesday' %}
Optionally, Papa Johns Pizza. Otherwise, popcorn chicken, mashed potatoes, carrots, apples, corn bread, and milk.
{% elif dow == 'Thursday' %}
Spaghetti, broccoli, green beans, fresh fruit, breadsticks, and milk.
{% elif dow == 'Friday' %}
Cold cut sub, spinach salad, tomatoes, pears, and milk.
{% endif %}
{% elif week == 'Fourth Menu' %}
{% if dow == 'Monday' %}
Chicken patty, baked beans, celery, mixed fruit, and milk.
{% elif dow == 'Tuesday' %}
Omelet or french toast, sausage, hash browns, tomatoes, orange, and milk.
{% elif dow == 'Wednesday' %}
Optionally, Papa Johns Pizza. Otherwise, hamburger, green beans, cauliflower, apple crisp, and milk.
{% elif dow == 'Thursday' %}
Mac and cheese, steamed broccoli, carrots, pears, bread, and milk.
{% elif dow == 'Friday' %}
Hot dog, spinach salad, oven potatoes, fresh fruit, and milk.
{% endif %}
{% else %}
No menu for the current day.
{% endif %}
{%- endmacro -%}
{# a macro that removes all newline characters, empty spaces, and returns formatted text #}
{%- macro cleanup(data) -%}
{%- for item in data.split("\n") if item | trim != "" -%}
{{ item | trim }} {% endfor -%}
{%- endmacro -%}
{# a macro to call all macros :) #}
{%- macro mother_of_all_macros() -%}
{{ getReport() }}
{%- endmacro -%}
{# Call the macro #}
{{- cleanup(mother_of_all_macros()) -}}
# - platform: rest
# resource: https://raw.githubusercontent.com/tm24fan8/Home-Assistant-Configs/master/packages/json_data/school.json
# name: School Lunch
# scan_interval: 14400
# value_template: >
# {% set today = now().month ~ '/' ~ now().day %}
# {% set lunch = value_json.MENU.static[ today ] %}
# {%- if lunch %}
# {{ lunch }}
# {% else %}
# Nothing
# {%- endif %}
- platform: rest
resource: https://raw.githubusercontent.com/tm24fan8/Home-Assistant-Configs/master/packages/json_data/school.json
name: School Event
scan_interval: 14400
value_template: >
{% set today = now().month ~ '/' ~ now().day %}
{% set event = value_json.EVENTS.static[ today ] %}
{%- if event %}
{{ event }}
{% else %}
Nothing
{%- endif %}
automation:
- id: e1cb2d02-0423-11eb-adc1-0242ac120002
alias: Kallen School today
initial_state: true
trigger:
- platform: time
at: '04:00:10'
condition:
- condition: template
value_template: >
{%- if as_timestamp(strptime(state_attr('calendar.kallen_school_days', 'start_time'), '%Y-%m-%d %H:%M:%S')) | timestamp_custom("%Y-%m-%d") == now().strftime("%Y-%m-%d") %}
true
{%- endif -%}
action:
- service: script.kallen_school_today
- id: b9028665-401c-4de3-8f13-1099160b011f
alias: Kallen School Reset
initial_state: true
trigger:
- platform: time
at: input_datetime.kallen_school_day_end
id: day_end
- platform: time
at: 00:00
id: midnight
action:
- if:
- condition: trigger
id: day_end
then:
- service: script.kallen_school_reset
- if:
- condition: trigger
id: midnight
then:
- service: script.kallen_school_reset_late
- id: 05ee0f8d-5411-4486-8acf-9bfadad2b23a
alias: End of School Year
initial_state: true
trigger:
- platform: time
at: input_datetime.school_last_day
condition:
- condition: state
entity_id: input_boolean.school_in_session
state: 'on'
action:
- service: script.turn_on
entity_id: script.school_year_over
- id: 068c20ee-23ba-4cd5-af31-dcfff7bdbfed
alias: Kallen Two Hour Delay
initial_state: true
trigger:
- platform: state
entity_id: input_boolean.two_hour_delay
from: 'off'
to: 'on'
action:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.kallen_band_practice
- delay:
hours: 0
minutes: 0
seconds: 2
milliseconds: 0
- service: script.kallen_scheduling_morning
- delay:
hours: 0
minutes: 0
seconds: 2
milliseconds: 0
- service: script.house_scheduling_morning
- delay:
hours: 0
minutes: 0
seconds: 2
milliseconds: 0
- service: script.master_bedroom_scheduling_morning
mode: single
- id: f8ecfc73-cb78-42b6-9b21-e17ef1e72741
alias: Kallen School Cancelled
initial_state: true
trigger:
- platform: state
entity_id: input_boolean.school_cancelled
from: 'off'
to: 'on'
action:
- service: input_boolean.turn_off
target:
entity_id:
- input_boolean.two_hour_delay
- input_boolean.kallen_school_today
- input_boolean.kallen_school_early_release
- input_boolean.kallen_school_today_extended
- input_boolean.kallen_at_school
- input_boolean.kallen_band_practice
- delay:
hours: 0
minutes: 0
seconds: 2
milliseconds: 0
- service: script.kallen_scheduling_morning
- delay:
hours: 0
minutes: 0
seconds: 2
milliseconds: 0
- service: script.house_scheduling_morning
- delay:
hours: 0
minutes: 0
seconds: 2
milliseconds: 0
- service: script.master_bedroom_scheduling_morning
mode: single
script:
kallen_school_today:
alias: 'Kallen School Today'
sequence:
- if:
- condition: state
entity_id: calendar.kallen_early_release
state: "on"
then:
- service: input_boolean.turn_on
entity_id: input_boolean.kallen_school_early_release
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.kallen_school_day_end
data:
time: "14:30:00"
else:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.kallen_school_day_end
data:
time: >
{{ as_timestamp(strptime(state_attr('calendar.kallen_school_days','end_time'), '%Y-%m-%d %H:%M:%S')) | timestamp_custom("%H:%M") }}
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.kallen_school_day_start
data:
time: >
{{ as_timestamp(strptime(state_attr('calendar.kallen_school_days','start_time'), '%Y-%m-%d %H:%M:%S')) | timestamp_custom("%H:%M") }}
- service: input_boolean.turn_on
entity_id:
- input_boolean.kallen_school_today
- input_boolean.kallen_school_today_extended
- service: script.turn_on
entity_id: script.school_in_session
- delay:
seconds: 1
- if:
- condition: template
value_template: >
{{ state_attr('input_datetime.kallen_school_day_start','timestamp') == 28800 }}
then:
- service: input_boolean.turn_on
entity_id: input_boolean.kallen_band_practice
kallen_school_reset:
alias: 'Kallen School Reset'
sequence:
- service: input_boolean.turn_off
entity_id:
- input_boolean.kallen_school_today
- input_boolean.two_hour_delay
- input_boolean.school_cancelled
kallen_school_reset_late:
alias: 'Kallen School Reset Late'
sequence:
- service: input_boolean.turn_off
entity_id:
- input_boolean.kallen_school_today_extended
- input_boolean.kallen_band_practice
- input_boolean.kallen_school_early_release
school_in_session:
alias: 'School In Session'
sequence:
- condition: state
entity_id: input_boolean.school_in_session
state: 'off'
- service: input_boolean.turn_on
entity_id: input_boolean.school_in_session
school_year_over:
alias: 'School Year Over'
sequence:
- condition: state
entity_id: input_boolean.school_in_session
state: 'on'
- condition: template
value_template: >
{{ states('input_datetime.school_last_day') == now().strftime("%Y-%m-%d") }}
- service: input_boolean.turn_off
entity_id: input_boolean.school_in_session