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

453 lines
16 KiB
YAML

input_boolean:
school_in_session:
name: School In Session
icon: mdi:bus-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_two_hour_delay:
name: Kallen Two Hour Delay
icon: mdi:bus-clock
kallen_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) }}"
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) }}"
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) }}"
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) }}"
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) }}"
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 %}
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 %}
lunch_menu_items:
friendly_name: Lunch Menu Items
icon_template: >
{% set week = states('sensor.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.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: 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: 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.kallen_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.kallen_school_cancelled
from: 'off'
to: 'on'
action:
- service: input_boolean.turn_off
target:
entity_id:
- input_boolean.kallen_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.kallen_two_hour_delay
- input_boolean.kallen_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