452 lines
17 KiB
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 |