Files
Home-Assistant-Configs/packages/school.yaml

452 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
kallen_btb:
name: Kallen BTB
icon: mdi:bus-clock
two_hour_delay:
name: Two Hour Delay
icon: mdi:bus-clock
school_cancelled:
name: School Cancelled
icon: mdi:calendar-remove
kallen_alternate_pickup:
name: Kallen Alternate Pickup
icon: mdi:car
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
template:
- binary_sensor:
- name: Kallen School Tomorrow
unique_id: 73d91e2f-35b5-491c-9c8b-c6d89d67b53c
state: >-
{%- 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 %}
icon: mdi:school
- name: Kallen BTB Tomorrow
unique_id: 68d8eb9c-d96c-4c76-a8e8-23125f1162db
state: >-
{%- set test=(as_timestamp(now()) + (86400)) | timestamp_custom("%Y-%m-%d",true) %}
{% if is_state('input_boolean.school_in_session','on') %}
{{ states.calendar.kallen_school_days.attributes.end_time == test + " 16:30:00" }}
{% else %}
{{ states.calendar.kallen_school_days.attributes.start_time == test + " 08:00:00" }}
{% endif %}
- sensor:
- name: School Start Days2go
unique_id: 94a53e67-c00f-4cc7-9309-f9033a9482f9
state: >
{% from 'easy_time.jinja' import count_the_days %}
{{ count_the_days('input_datetime.school_first_day') }}
attributes:
date: "{{ state_attr('input_datetime.school_first_day','timestamp') | timestamp_custom('%B %d, %Y') }}"
unit_of_measurement: 'Days'
- name: School End Days2go
unique_id: 589c44ec-7e16-4c72-a264-cdf54de409a9
state: >
{% from 'easy_time.jinja' import count_the_days %}
{{ count_the_days('input_datetime.school_last_day') | int }}
attributes:
date: "{{ state_attr('input_datetime.school_last_day','timestamp') | timestamp_custom('%B %d, %Y') }}"
unit_of_measurement: 'Days'
- name: Vacation Days2go
unique_id: f1628d87-e58a-4d1a-8a49-a71f0a9ed3e5
state: >
{% from 'easy_time.jinja' import count_the_days %}
{% if state_attr('calendar.vacation', 'start_time') %}
{{ count_the_days('calendar.vacation','start_time') }}
{% else %}
999
{% endif %}
unit_of_measurement: 'Days'
- name: Thanksgiving Break Days2go
unique_id: 2381e9de-407b-4304-b09a-448c169bbaf2
state: >
{% from 'easy_time.jinja' import count_the_days %}
{{ count_the_days('input_datetime.thanksgiving_break_start') }}
attributes:
date: "{{ state_attr('input_datetime.thanksgiving_break_start','timestamp') | timestamp_custom('%B %d, %Y') }}"
unit_of_measurement: 'Days'
- name: Christmas Break Days2go
unique_id: 851700f7-c593-4db8-ba4f-001cbffcfc4a
state: >
{% from 'easy_time.jinja' import count_the_days %}
{{ count_the_days('input_datetime.christmas_break_start') }}
attributes:
date: "{{ state_attr('input_datetime.christmas_break_start','timestamp') | timestamp_custom('%B %d, %Y') }}"
unit_of_measurement: 'Days'
- name: Spring Break Days2go
unique_id: cec6e687-8999-4548-991c-02ba546335f5
state: >
{% from 'easy_time.jinja' import count_the_days %}
{{ count_the_days('input_datetime.spring_break_start') }}
attributes:
date: "{{ state_attr('input_datetime.spring_break_start','timestamp') | timestamp_custom('%B %d, %Y') }}"
unit_of_measurement: 'Days'
- name: School Lunch Menu Week
unique_id: 62ba9dcb-3cd3-4875-8e6f-86bebf542c37
state: >
{% if is_state('calendar.defiance_city_schools_lunch','on') %}
{{ state_attr('calendar.defiance_city_schools_lunch','message') }}
{% else %}
No Menu
{% endif %}
icon: >
{% if is_state_attr('calendar.defiance_city_schools_lunch','message','First Menu') %}
mdi:numeric-1-circle
{% elif is_state_attr('calendar.defiance_city_schools_lunch','message','Second Menu') %}
mdi:numeric-2-circle
{% elif is_state_attr('calendar.defiance_city_schools_lunch','message','Third Menu') %}
mdi:numeric-3-circle
{% elif is_state_attr('calendar.defiance_city_schools_lunch','message','Fourth Menu') %}
mdi:numeric-4-circle
{% else %}
mdi:calendar-end
{% endif %}
- name: School Lunch Menu Items
unique_id: a2cb62d7-ae9f-4bab-81c1-81f2006391b2
icon: >
{% set week = states('sensor.school_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 %}
state: >
{% from 'formatting.jinja' import cleanup %}
{%- macro getReport() -%}
{% set week = states('sensor.school_lunch_menu_week') %}
{% set dow = now().strftime('%A') %}
{% if week == 'First Menu' %}
{% if dow == 'Monday' %}
Popcorn chicken, mashed potatoes, corn, apples, corn bread, and milk.
{% elif dow == 'Tuesday' %}
Beef taco or taco salad, refried beans, spanish rice, peaches, and milk.
{% elif dow == 'Wednesday' %}
Pulled pork, steamed broccoli, tomatoes, mixed fruit, and milk.
{% elif dow == 'Thursday' %}
Beef Stroganoff, green beans, carrots, fresh fruit, bread, and milk.
{% elif dow == 'Friday' %}
Optionally, Papa Johns Pizza. Otherwise, hamburger, spinach salad, oven potatoes, applesauce, and milk.
{% endif %}
{% elif week == 'Second Menu' %}
{% if dow == 'Monday' %}
Pizza, spinach salad, tomatoes, fruit, and milk.
{% elif dow == 'Tuesday' %}
Lasagna, garlic bread, steamed cauliflower, celery, apple crisp, and milk.
{% elif dow == 'Wednesday' %}
Chicken patty, oven potatoes, broccoli, pears, and milk.
{% elif dow == 'Thursday' %}
Turkey and noodles, mashed potatoes, green beans, peaches, breadstick, and milk.
{% elif down == 'Friday' %}
Optionally, Papa Johns Pizza. Otherwise, hot dog with chili sauce, carrots, baked beans, mixed fruit, and milk.
{% endif %}
{% elif week == 'Third Menu' %}
{% if dow == 'Monday' %}
Popcorn chicken, au gratin potatoes, corn, mixed fruit, corn bread, milk.
{% elif dow == 'Tuesday' %}
Beef taco or taco salad, refried beans, spanish rice, peaches, and milk.
{% elif dow == 'Wednesday' %}
Hamburger, oven potatoes, celery, applesauce, and milk.
{% elif dow == 'Thursday' %}
Mac and cheese, steamed broccoli, tomatoes, pears, bread, and milk.
{% elif dow == 'Friday' %}
Optionally, Papa Johns Pizza. Otherwise, sloppy joe, carrots, spinach salad, fruit, and milk.
{% endif %}
{% elif week == 'Fourth Menu' %}
{% if dow == 'Monday' %}
Toasted cheese, tomato soup, mixed vegetables, fresh fruit, treat, and milk.
{% elif dow == 'Tuesday' %}
Omelet or french toast, sausage, hash browns, tomatoes, orange, and milk.
{% elif dow == 'Wednesday' %}
Bosco sticks with pizza sauce, carrots, oven potatoes, peach crisp, and milk.
{% elif dow == 'Thursday' %}
Spaghetti, broccoli, green beans, fresh fruit, breadstick, and milk.
{% elif dow == 'Friday' %}
Optionally, Papa Johns Pizza. Otherwise, hot dog, baked beans, cauliflower, applesauce, and milk.
{% endif %}
{% else %}
No menu for the current day.
{% endif %}
{%- endmacro -%}
{{- cleanup(getReport()) -}}
# - 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: '03:55:00'
action:
- if:
- condition: template
value_template: >
{% from 'time.jinja' import calendar_event_today %}
{{ calendar_event_today('calendar.kallen_school_days') }}
then:
- service: script.kallen_school_today
- service: input_boolean.turn_on
target:
entity_id: input_boolean.school_today_ran
- id: 59ae3bfe-5c58-4ff4-aaf5-7b76fd0ac442
alias: Start of School Year
initial_state: true
trigger:
- platform: template
value_template: "{{ states('sensor.school_start_days2go') | int == 1 }}"
action:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.school_in_session
- id: 05ee0f8d-5411-4486-8acf-9bfadad2b23a
alias: End of School Year
initial_state: true
trigger:
- platform: template
value_template: "{{ states('sensor.school_end_days2go') | int == -1 }}"
action:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.school_in_session
- id: 31f766d9-be1d-40bb-8c84-6cb2c57aac3c
alias: Kallen School Modifications
description: Runs when a two hour delay, cancellation, or alternate pickup is issued.
mode: restart
trigger:
- platform: state
entity_id: input_boolean.two_hour_delay
from: 'off'
to: 'on'
id: two-hour-delay
- platform: state
entity_id: input_boolean.school_cancelled
from: 'off'
to: 'on'
id: cancelled
- platform: state
entity_id: input_boolean.kallen_alternate_pickup
from: 'off'
to: 'on'
id: alternate-pickup-on
- platform: state
entity_id: input_boolean.kallen_alternate_pickup
from: 'on'
to: 'off'
id: alternate-pickup-off
action:
- if:
- condition: trigger
id: cancelled
then:
- 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_alternate_pickup
- input_boolean.kallen_school_early_release
- input_boolean.kallen_btb
- delay:
seconds: 2
- if:
- condition: and
conditions:
- condition: trigger
id: alternate-pickup-off
- condition: template
value_template: >
{% from 'time.jinja' import ct %}
{% set ct = ct() | int %}
{% set cutoff = state_attr('input_datetime.kallen_school_day_end','timestamp') | int - 3600 %}
{{ ct >= cutoff }}
then:
- stop: After cutoff
else:
- service: script.rerun_all_scheduling_morning
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:00:00"
else:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.kallen_school_day_end
data:
time: >
{% from 'time.jinja' import time_from_calendar %}
{{ time_from_calendar('calendar.kallen_school_days','end_time','set') }}
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.kallen_school_day_start
data:
time: >
{% from 'time.jinja' import time_from_calendar %}
{% if is_state('input_boolean.two_hour_delay','on') %}
{{ time_from_calendar('calendar.kallen_school_days','start_time','set','add',2) }}
{% else %}
{{ time_from_calendar('calendar.kallen_school_days','start_time','set') }}
{% endif %}
- if:
- condition: template
value_template: >
{% from 'time.jinja' import time_from_calendar %}
{% set cal = time_from_calendar('calendar.kallen_school_days','end_time','read') | trim %}
{% set current = as_timestamp(now()) %}
{% set lastday = state_attr('input_datetime.school_last_day','timestamp') %}
{{ (current > lastday) or (current <= lastday and cal == '4:30 PM') }}
then:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.kallen_btb
- service: input_boolean.turn_on
entity_id:
- input_boolean.kallen_school_today
- input_boolean.kallen_school_today_extended
- if:
- condition: template
value_template: >
{% set current = as_timestamp(now()) %}
{% set firstday = state_attr('input_datetime.school_first_day','timestamp') %}
{% set lastday = state_attr('input_datetime.school_last_day','timestamp') %}
{{ firstday <= current <= lastday }}
then:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.school_in_session
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
- input_boolean.kallen_alternate_pickup
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_school_early_release
- input_boolean.kallen_btb