Major audible notification overhual. It was hard to maintain. This will be easier. Maybe
This commit is contained in:
parent
84a5e84fa5
commit
d5191c9ab8
|
@ -254,48 +254,14 @@
|
||||||
entity_id: binary_sensor.front_door
|
entity_id: binary_sensor.front_door
|
||||||
state: 'off'
|
state: 'off'
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
speech_message: '{{ [ "I have detected motion at the ", "Someone may be at the
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
", "There is movement at the ", "My sensors are picking up motion at the ",
|
message: '{{ [ "I have detected motion at the ", "Someone may be at the
|
||||||
"We appear to have a visitor at the " ] | random }} {{ trigger.to_state.attributes.friendly_name
|
", "There is movement at the ", "My sensors are picking up motion at the ",
|
||||||
}}.
|
"We appear to have a visitor at the " ] | random }} {{ trigger.to_state.attributes.friendly_name
|
||||||
|
}}.'
|
||||||
'
|
|
||||||
call_snark_door_motion: 1
|
|
||||||
- delay: 00:02:00
|
- delay: 00:02:00
|
||||||
mode: single
|
mode: single
|
||||||
initial_state: true
|
initial_state: true
|
||||||
- id: improved_welcome_home
|
|
||||||
alias: Improved Welcome Home
|
|
||||||
mode: queued
|
|
||||||
max: 4
|
|
||||||
trigger:
|
|
||||||
- platform: state
|
|
||||||
entity_id:
|
|
||||||
- person.jeffrey
|
|
||||||
- person.katherine
|
|
||||||
- person.uncle_matt
|
|
||||||
- person.papa
|
|
||||||
from: not_home
|
|
||||||
to: home
|
|
||||||
condition:
|
|
||||||
- condition: state
|
|
||||||
entity_id: sensor.family_status
|
|
||||||
state: Home
|
|
||||||
action:
|
|
||||||
- service: script.family_is_home
|
|
||||||
- delay: 00:02:00
|
|
||||||
- service: script.ah_report
|
|
||||||
data_template:
|
|
||||||
call_interuption: 1
|
|
||||||
welcome_home: "{% set person = trigger.to_state.attributes.friendly_name %}\
|
|
||||||
\ {%- macro greeting_sentence(person) -%} {{ [\n person + \" has arrived.\"\
|
|
||||||
,\n person + \" is in the neighborhood.\",\n person + \" is arriving.\"\
|
|
||||||
,\n \"My sensors are picking up the presence of additional humans. \" ~ person\
|
|
||||||
\ +\" has been identified as home.\",\n \"Welcome back home \" ~ person,\n\
|
|
||||||
\ \"Guess who is home?\" ~ person +\" is!\",\n \"I am sensing a disturbance\
|
|
||||||
\ in the force. \" ~ person +\" must be home!\",\n person + \" is now in\
|
|
||||||
\ the house.\",\n person ~ \"! You are home!\",\n \"I know a secret! \"\
|
|
||||||
\ ~ person +\" is home!\",\n person + \" has finally made it home.\"\n \
|
|
||||||
\ ] | random }}\n{%- endmacro -%} {{greeting_sentence(person)}}\n"
|
|
||||||
|
|
|
@ -7,6 +7,10 @@ Family:
|
||||||
- person.jeffrey
|
- person.jeffrey
|
||||||
- person.katherine
|
- person.katherine
|
||||||
|
|
||||||
|
arriving:
|
||||||
|
name: Arriving
|
||||||
|
entities: []
|
||||||
|
|
||||||
|
|
||||||
House Conditions:
|
House Conditions:
|
||||||
- climate.first_floor
|
- climate.first_floor
|
||||||
|
|
|
@ -83,4 +83,9 @@ skylar_school:
|
||||||
name: Skylar at School
|
name: Skylar at School
|
||||||
shuffle_spotify:
|
shuffle_spotify:
|
||||||
name: Spotify Shuffle
|
name: Spotify Shuffle
|
||||||
|
good_morning_report:
|
||||||
|
name: Good Morning Report
|
||||||
|
master_bedroom_alarm:
|
||||||
|
name: Master Bedroom Alarm
|
||||||
|
skylar_awake:
|
||||||
|
name: Skylar Awake
|
||||||
|
|
|
@ -47,3 +47,8 @@ morning_standby:
|
||||||
name: Morning Standby
|
name: Morning Standby
|
||||||
has_date: false
|
has_date: false
|
||||||
has_time: true
|
has_time: true
|
||||||
|
|
||||||
|
skylar_awake_at:
|
||||||
|
name: Skylar Awake At
|
||||||
|
has_date: false
|
||||||
|
has_time: true
|
|
@ -18,6 +18,10 @@ input_datetime:
|
||||||
name: Nightly Report
|
name: Nightly Report
|
||||||
has_date: false
|
has_date: false
|
||||||
has_time: true
|
has_time: true
|
||||||
|
daily_report:
|
||||||
|
name: Daily Report
|
||||||
|
has_date: false
|
||||||
|
has_time: true
|
||||||
skylar_morning_report:
|
skylar_morning_report:
|
||||||
name: Skylar Dressed Announcement
|
name: Skylar Dressed Announcement
|
||||||
has_date: false
|
has_date: false
|
||||||
|
@ -60,32 +64,6 @@ automation:
|
||||||
action:
|
action:
|
||||||
- service: script.turn_on_ha_speaker
|
- service: script.turn_on_ha_speaker
|
||||||
|
|
||||||
- id: turn_on_ha_receiver
|
|
||||||
alias: Turn on HA Receiver
|
|
||||||
initial_state: true
|
|
||||||
trigger:
|
|
||||||
- platform: time
|
|
||||||
at: '06:45:00'
|
|
||||||
action:
|
|
||||||
- service: media_player.turn_on
|
|
||||||
data:
|
|
||||||
entity_id: media_player.tsr_6750_a3ed2f
|
|
||||||
- service: media_player.volume_set
|
|
||||||
data_template:
|
|
||||||
entity_id: media_player.tsr_6750_a3ed2f
|
|
||||||
volume_level: .80
|
|
||||||
|
|
||||||
- id: turn_off_ha_receiver
|
|
||||||
alias: Turn off HA Receiver
|
|
||||||
initial_state: true
|
|
||||||
trigger:
|
|
||||||
- platform: time
|
|
||||||
at: '23:30:00'
|
|
||||||
action:
|
|
||||||
- service: media_player.turn_off
|
|
||||||
data:
|
|
||||||
entity_id: media_player.tsr_6750_a3ed2f
|
|
||||||
|
|
||||||
|
|
||||||
- id: set_audible_time_off_guest
|
- id: set_audible_time_off_guest
|
||||||
alias: set audible time off guest
|
alias: set audible time off guest
|
||||||
|
@ -104,25 +82,6 @@ automation:
|
||||||
20:30
|
20:30
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
- id: set_audible_time_off_normal
|
|
||||||
alias: set audible time off normal
|
|
||||||
trigger:
|
|
||||||
- platform: state
|
|
||||||
entity_id: input_boolean.guest_mode
|
|
||||||
to: 'off'
|
|
||||||
- platform: state
|
|
||||||
entity_id: binary_sensor.school_tomorrow
|
|
||||||
action:
|
|
||||||
- service: input_datetime.set_datetime
|
|
||||||
entity_id: input_datetime.audible_notification_off
|
|
||||||
data_template:
|
|
||||||
time: >
|
|
||||||
{% if states.binary_sensor.school_tomorrow.state == 'on' %}
|
|
||||||
19:30
|
|
||||||
{% else %}
|
|
||||||
20:45
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
|
|
||||||
- id: prebed_routine
|
- id: prebed_routine
|
||||||
initial_state: true
|
initial_state: true
|
||||||
|
@ -131,9 +90,7 @@ automation:
|
||||||
platform: template
|
platform: template
|
||||||
value_template: "{{ states('sensor.time') == (state_attr('input_datetime.skylar_nightly_report', 'timestamp') | int | timestamp_custom('%H:%M', False)) }}"
|
value_template: "{{ states('sensor.time') == (state_attr('input_datetime.skylar_nightly_report', 'timestamp') | int | timestamp_custom('%H:%M', False)) }}"
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.skylar_nightly_briefing
|
||||||
data:
|
|
||||||
call_prebed_routine: 1
|
|
||||||
|
|
||||||
- id: nightly_report
|
- id: nightly_report
|
||||||
initial_state: true
|
initial_state: true
|
||||||
|
@ -142,45 +99,26 @@ automation:
|
||||||
platform: template
|
platform: template
|
||||||
value_template: "{{ states('sensor.time') == (state_attr('input_datetime.nightly_report', 'timestamp') | int | timestamp_custom('%H:%M', False)) }}"
|
value_template: "{{ states('sensor.time') == (state_attr('input_datetime.nightly_report', 'timestamp') | int | timestamp_custom('%H:%M', False)) }}"
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.nightly_briefing_report
|
||||||
data:
|
|
||||||
call_greeting: 1
|
|
||||||
call_evening_greeting: 1
|
|
||||||
call_weather_alerts: 1
|
|
||||||
call_overnight_forecast: 1
|
|
||||||
call_freeze_warning: 1
|
|
||||||
call_future_forecast: 1
|
|
||||||
call_upcoming_holidays: 1
|
|
||||||
call_upcoming_events: 1
|
|
||||||
call_reminders: 1
|
|
||||||
call_chores: 1
|
|
||||||
call_full_moon: 1
|
|
||||||
|
|
||||||
- id: good_morning_report
|
- id: good_morning_report
|
||||||
alias: Good Morning Report
|
alias: Good Morning Report
|
||||||
initial_state: true
|
initial_state: true
|
||||||
trigger:
|
trigger:
|
||||||
platform: template
|
# platform: template
|
||||||
value_template: "{{ states('sensor.time') == (state_attr('input_datetime.morning_report', 'timestamp') | int | timestamp_custom('%H:%M', False)) }}"
|
# value_template: "{{ states('sensor.time') == (state_attr('input_datetime.morning_report', 'timestamp') | int | timestamp_custom('%H:%M', False)) }}"
|
||||||
|
- platform: state
|
||||||
|
entity_id: binary_sensor.kitchen_occupancy
|
||||||
|
to: 'on'
|
||||||
|
condition:
|
||||||
|
- condition: time
|
||||||
|
after: '07:00:00'
|
||||||
|
before: '08:30:00'
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.good_morning_report
|
||||||
|
state: 'on'
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.morning_briefing
|
||||||
data:
|
|
||||||
call_greeting: 1
|
|
||||||
call_morning_greeting: 1
|
|
||||||
call_time_annc: 1
|
|
||||||
call_weather_alerts: 1
|
|
||||||
call_skylar_dressed: 1
|
|
||||||
call_school_today: 1
|
|
||||||
call_skylar_events: 1
|
|
||||||
call_todays_events: 1
|
|
||||||
call_current_conditions_outside: 1
|
|
||||||
call_clothes_suggestion: 1
|
|
||||||
call_current_conditions_inside: 1
|
|
||||||
call_daily_forecast: 1
|
|
||||||
call_upcoming_birthdays: 1
|
|
||||||
call_upcoming_events: 1
|
|
||||||
call_reminders: 1
|
|
||||||
call_chores: 1
|
|
||||||
- service: script.twitter_notify
|
- service: script.twitter_notify
|
||||||
data:
|
data:
|
||||||
message: >-
|
message: >-
|
||||||
|
@ -193,33 +131,26 @@ automation:
|
||||||
"#Homeassistant gives me the ability to make daily announcements like the one I just did using #Amazon Polly.",
|
"#Homeassistant gives me the ability to make daily announcements like the one I just did using #Amazon Polly.",
|
||||||
"Each day at this time I provide the residents of this house an update that includes everything they need to know about the upcoming day. But with more snark."
|
"Each day at this time I provide the residents of this house an update that includes everything they need to know about the upcoming day. But with more snark."
|
||||||
] | random }}
|
] | random }}
|
||||||
- service: switch.turn_off
|
- service: input_boolean.turn_on
|
||||||
entity_id: switch.0xf0d1b80000052281_switch
|
entity_id: input_boolean.good_morning_report
|
||||||
|
|
||||||
# - id: skylar_morning_greeting
|
|
||||||
# alias: Skylar Morning Greeting
|
- id: master_bedroom_report
|
||||||
# initial_state: true
|
alias: Master Bedroom Report
|
||||||
# trigger:
|
initial_state: true
|
||||||
# platform: template
|
trigger:
|
||||||
# value_template: "{{ states('sensor.time') == (state_attr('input_datetime.skylar_morning_report', 'timestamp') | int | timestamp_custom('%H:%M', False)) }}"
|
platform: template
|
||||||
# # condition:
|
value_template: "{{ states('sensor.time') == (state_attr('input_datetime.daily_report', 'timestamp') | int | timestamp_custom('%H:%M', False)) }}"
|
||||||
# # - condition: time
|
condition:
|
||||||
# # weekday:
|
- condition: time
|
||||||
# # - mon
|
weekday:
|
||||||
# # - tue
|
- mon
|
||||||
# # - wed
|
- tue
|
||||||
# # - thu
|
- wed
|
||||||
# # - fri
|
- thu
|
||||||
# action:
|
- fri
|
||||||
# - service: script.ah_report
|
action:
|
||||||
# data:
|
- service: script.morning_wakeup_report
|
||||||
# call_interuption: 1
|
|
||||||
# call_skylar_dressed: 1
|
|
||||||
# call_school_today: 1
|
|
||||||
# call_skylar_events: 1
|
|
||||||
# call_clothes_suggestion: 1
|
|
||||||
# - service: switch.turn_off
|
|
||||||
# entity_id: switch.0xf0d1b80000052281_switch
|
|
||||||
|
|
||||||
- id: skylar_morning_alarm_announcement
|
- id: skylar_morning_alarm_announcement
|
||||||
alias: skylar morning alarm announcement
|
alias: skylar morning alarm announcement
|
||||||
|
@ -232,18 +163,20 @@ automation:
|
||||||
action:
|
action:
|
||||||
- service: scene.turn_on
|
- service: scene.turn_on
|
||||||
entity_id: scene.skylar_room_morning
|
entity_id: scene.skylar_room_morning
|
||||||
- service: notify.alexa_media_skylar_s_bedroom
|
- service: script.skylar_morning_briefing
|
||||||
data:
|
# - service: notify.alexa_media_skylar_s_bedroom
|
||||||
message: Good Morning Skylar. Time to Rise and Shine.
|
# data:
|
||||||
data:
|
# message: Good Morning Skylar. Time to Rise and Shine.
|
||||||
type: tts
|
# data:
|
||||||
- delay:
|
# type: tts
|
||||||
seconds: 30
|
# - delay:
|
||||||
- service: notify.alexa_media_skylar_s_bedroom
|
# seconds: 30
|
||||||
data:
|
# - service: notify.alexa_media_skylar_s_bedroom
|
||||||
message: Good Morning Skylar. You have school today. Time to get up.
|
# data:
|
||||||
data:
|
# message: Good Morning Skylar. You have school today. Time to get up.
|
||||||
type: tts
|
# data:
|
||||||
|
# type: tts
|
||||||
|
|
||||||
|
|
||||||
- id: set_skylar_morning_report_time
|
- id: set_skylar_morning_report_time
|
||||||
alias: set skylar morning report time
|
alias: set skylar morning report time
|
||||||
|
@ -261,19 +194,87 @@ automation:
|
||||||
07:15
|
07:15
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
- id: set_morning_report_time
|
# - id: set_morning_report_time
|
||||||
alias: set morning report time
|
# alias: set morning report time
|
||||||
trigger:
|
# trigger:
|
||||||
- platform: time
|
# - platform: time
|
||||||
at: '05:50:30'
|
# at: '05:50:30'
|
||||||
action:
|
# action:
|
||||||
- service: input_datetime.set_datetime
|
# - service: input_datetime.set_datetime
|
||||||
entity_id: input_datetime.morning_report
|
# entity_id: input_datetime.morning_report
|
||||||
data_template:
|
# data_template:
|
||||||
time: >
|
# time: >
|
||||||
{% if states.calendar.skylar_school.attributes.offset_reached == True %}
|
# {% if states.calendar.skylar_school.attributes.offset_reached == True %}
|
||||||
07:10
|
# 07:10
|
||||||
{% else %}
|
# {% else %}
|
||||||
08:00
|
# 08:00
|
||||||
{% endif %}
|
# {% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
script:
|
||||||
|
reset_annc_switches:
|
||||||
|
sequence:
|
||||||
|
- service: input_boolean.turn_off
|
||||||
|
entity_id: input_boolean.good_morning_report
|
||||||
|
|
||||||
|
security_briefing:
|
||||||
|
sequence:
|
||||||
|
- service: script.jarvis_voice
|
||||||
|
data_template:
|
||||||
|
who: kitchen
|
||||||
|
message: !include ../templates/speech/security_report.yaml
|
||||||
|
|
||||||
|
event_briefing:
|
||||||
|
sequence:
|
||||||
|
- service: script.jarvis_voice
|
||||||
|
data_template:
|
||||||
|
who: kitchen
|
||||||
|
message: !include ../templates/speech/event_briefing.yaml
|
||||||
|
|
||||||
|
skylar_morning_briefing:
|
||||||
|
sequence:
|
||||||
|
- service: >
|
||||||
|
{%- if is_state('binary_sensor.theater_occupancy', 'on') and is_state('media_player.theater_tv', 'on') %}
|
||||||
|
script.jarvis_voice
|
||||||
|
{% else %}
|
||||||
|
notify.alexa_media_skylar_s_bedroom
|
||||||
|
{%- endif %}
|
||||||
|
data: >
|
||||||
|
{%- if is_state('binary_sensor.theater_occupancy', 'on') and is_state('media_player.theater_tv', 'on') %}
|
||||||
|
who: main
|
||||||
|
message: !include ../templates/speech/skylar_morning_briefing.yaml
|
||||||
|
{% else %}
|
||||||
|
message: !include ../templates/speech/skylar_morning_briefing.yaml
|
||||||
|
data:
|
||||||
|
type: tts
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
skylar_nightly_briefing:
|
||||||
|
sequence:
|
||||||
|
- service: script.jarvis_voice
|
||||||
|
data_template:
|
||||||
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: !include ../templates/speech/skylar_nightly_briefing.yaml
|
||||||
|
|
||||||
|
nightly_briefing_report:
|
||||||
|
sequence:
|
||||||
|
- service: script.jarvis_voice
|
||||||
|
data_template:
|
||||||
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: !include ../templates/speech/nightly_briefing.yaml
|
||||||
|
|
||||||
|
morning_briefing:
|
||||||
|
sequence:
|
||||||
|
- service: script.jarvis_voice
|
||||||
|
data_template:
|
||||||
|
who: kitchen
|
||||||
|
message: !include ../templates/speech/morning_briefing.yaml
|
||||||
|
|
||||||
|
morning_wakeup_report:
|
||||||
|
sequence:
|
||||||
|
- service: script.jarvis_voice
|
||||||
|
data_template:
|
||||||
|
who: master_bedroom
|
||||||
|
message: !include ../templates/speech/morning_wakeup_report.yaml
|
||||||
|
|
|
@ -149,9 +149,20 @@ script:
|
||||||
- condition: state
|
- condition: state
|
||||||
entity_id: sensor.washer_status
|
entity_id: sensor.washer_status
|
||||||
state: complete
|
state: complete
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_washer_needs_emptying: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >
|
||||||
|
<p>
|
||||||
|
{{ [
|
||||||
|
'Just a reminder. Washing machine needs to be emptied.',
|
||||||
|
'I am sure you have more inportant things to do, but do not forget to empty the washer.',
|
||||||
|
'Looks like the washing machine has completed it is cycle. You know what to do. <break time="1s"/> I hope.',
|
||||||
|
'Do not forget to move the clothes to the dryer.',
|
||||||
|
"Someone forgot to move the clothes to the dryer. I am not going to name any names. But there is a camera in there. ",
|
||||||
|
"Do you like when your clothes smell like mildew? Because that is what is happeneing. <break time="1s"/> Right now. "
|
||||||
|
] | random }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
washer_idle:
|
washer_idle:
|
||||||
|
|
|
@ -106,3 +106,27 @@ script:
|
||||||
media_content_type: video/youtube
|
media_content_type: video/youtube
|
||||||
media_content_id: >
|
media_content_id: >
|
||||||
{{ media }}
|
{{ media }}
|
||||||
|
|
||||||
|
sensor:
|
||||||
|
- platform: template
|
||||||
|
sensors:
|
||||||
|
room_audio:
|
||||||
|
friendly_name: "Room Audio"
|
||||||
|
unit_of_measurement: ''
|
||||||
|
value_template: >-
|
||||||
|
{%- if is_state('binary_sensor.theater_occupancy', 'on') and is_state('media_player.theater_tv', 'on') %}
|
||||||
|
theater
|
||||||
|
{% elif is_state('binary_sensor.kitchen_occupancy', 'on') %}
|
||||||
|
kitchen
|
||||||
|
{% elif is_state('binary_sensor.living_room_occupancy', 'on') and is_state('input_boolean.audible_notifications', 'on') %}
|
||||||
|
main
|
||||||
|
{% elif is_state('binary_sensor.croft_occupancy', 'on') %}
|
||||||
|
croft
|
||||||
|
{% elif is_state('binary_sensor.master_bedroom_occupancy', 'on') %}
|
||||||
|
master_bedroom
|
||||||
|
{% else %}
|
||||||
|
all_google
|
||||||
|
{%- endif %}
|
||||||
|
last_alexa:
|
||||||
|
value_template: >
|
||||||
|
{{ states.media_player | selectattr('attributes.last_called','eq',True) | map(attribute='entity_id') | first }}
|
|
@ -165,6 +165,7 @@ automation:
|
||||||
data:
|
data:
|
||||||
entity_id: light.kitchen_cabinets
|
entity_id: light.kitchen_cabinets
|
||||||
- service: script.good_night_loft
|
- service: script.good_night_loft
|
||||||
|
- service: script.reset_annc_switches
|
||||||
- service: script.twitter_notify_image
|
- service: script.twitter_notify_image
|
||||||
data_template:
|
data_template:
|
||||||
tweet: >-
|
tweet: >-
|
||||||
|
@ -222,10 +223,7 @@ automation:
|
||||||
data:
|
data:
|
||||||
entity_id: alarm_control_panel.aarlo_ah_base_station
|
entity_id: alarm_control_panel.aarlo_ah_base_station
|
||||||
mode: 'Armed'
|
mode: 'Armed'
|
||||||
- service: script.ah_report
|
- service: script.nightly_briefing_report
|
||||||
data:
|
|
||||||
call_dark_outside: 1
|
|
||||||
call_garage_door_status: 1
|
|
||||||
|
|
||||||
- id: outside_lights_off_sunrise
|
- id: outside_lights_off_sunrise
|
||||||
alias: Outside Lights off at Sunrise
|
alias: Outside Lights off at Sunrise
|
||||||
|
@ -384,7 +382,7 @@ automation:
|
||||||
data_template:
|
data_template:
|
||||||
time: >
|
time: >
|
||||||
{% if states.sensor.school_tomorrow.state == 'on' %}
|
{% if states.sensor.school_tomorrow.state == 'on' %}
|
||||||
20:00
|
19:45
|
||||||
{% else %}
|
{% else %}
|
||||||
20:15
|
20:15
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -185,10 +185,10 @@ automation:
|
||||||
value_template: '{{ states.calendar.skylar_school.state == "Off" }}'
|
value_template: '{{ states.calendar.skylar_school.state == "Off" }}'
|
||||||
action:
|
action:
|
||||||
- wait_template: "{{ not is_state('media_player.ha_speaker', 'playing') }}"
|
- wait_template: "{{ not is_state('media_player.ha_speaker', 'playing') }}"
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_interuption: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
speech_message: "Blackout time has started."
|
message: "Blackout time has started."
|
||||||
- service: input_boolean.turn_on
|
- service: input_boolean.turn_on
|
||||||
entity_id: input_boolean.blackout_time
|
entity_id: input_boolean.blackout_time
|
||||||
|
|
||||||
|
@ -204,10 +204,10 @@ automation:
|
||||||
state: 'on'
|
state: 'on'
|
||||||
action:
|
action:
|
||||||
- wait_template: "{{ not is_state('media_player.ha_speaker', 'playing') }}"
|
- wait_template: "{{ not is_state('media_player.ha_speaker', 'playing') }}"
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_interuption: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
speech_message: "Blackout time has ended"
|
message: "Blackout time has ended"
|
||||||
- service: input_boolean.turn_off
|
- service: input_boolean.turn_off
|
||||||
entity_id: input_boolean.blackout_time
|
entity_id: input_boolean.blackout_time
|
||||||
|
|
||||||
|
@ -272,9 +272,10 @@ script:
|
||||||
- condition: state
|
- condition: state
|
||||||
entity_id: sensor.family_status
|
entity_id: sensor.family_status
|
||||||
state: Home
|
state: Home
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
speech_message: "Skylar, digital learning will begin in about thirty minutes. I have turned on the lighting around your desk. I will be disabling audible notifications during school hours."
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: "Skylar, digital learning will begin in about thirty minutes. I have turned on the lighting around your desk. I will be disabling audible notifications during school hours."
|
||||||
- delay:
|
- delay:
|
||||||
minutes: 5
|
minutes: 5
|
||||||
- service: input_boolean.turn_off
|
- service: input_boolean.turn_off
|
||||||
|
|
|
@ -20,10 +20,17 @@ automation:
|
||||||
action:
|
action:
|
||||||
- service: homeassistant.turn_on
|
- service: homeassistant.turn_on
|
||||||
entity_id: group.incense
|
entity_id: group.incense
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
call_confirmation: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
call_house_party_protocol_enabled: 1
|
message: >
|
||||||
|
<p>
|
||||||
|
{{ [
|
||||||
|
'Anchorage House has been configured for a House Party.',
|
||||||
|
'Incense has been turned on.',
|
||||||
|
'I have enabled house party protocol.'
|
||||||
|
] | random }}
|
||||||
|
</p>
|
||||||
|
|
||||||
- id: house_party_protocol_off
|
- id: house_party_protocol_off
|
||||||
alias: Turn Off House Party Protocol
|
alias: Turn Off House Party Protocol
|
||||||
|
@ -35,7 +42,14 @@ automation:
|
||||||
action:
|
action:
|
||||||
- service: homeassistant.turn_off
|
- service: homeassistant.turn_off
|
||||||
entity_id: group.incense
|
entity_id: group.incense
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
call_confirmation: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
call_house_party_protocol_disabled: 1
|
message: >
|
||||||
|
<p>
|
||||||
|
{{ [
|
||||||
|
'The House Party has been canceled.',
|
||||||
|
'Incense has been turned off.',
|
||||||
|
'I have disabled house party protocol.'
|
||||||
|
] | random }}
|
||||||
|
</p>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -161,6 +161,25 @@ sensor:
|
||||||
or is_state('sensor.family_status', 'Home') }}
|
or is_state('sensor.family_status', 'Home') }}
|
||||||
|
|
||||||
automation:
|
automation:
|
||||||
|
- id: skylar_is_awake
|
||||||
|
alias: Skylar is Awake
|
||||||
|
initial_state: true
|
||||||
|
trigger:
|
||||||
|
- platform: state
|
||||||
|
entity_id: binary_sensor.skylar_room_occupancy
|
||||||
|
to: 'on'
|
||||||
|
condition:
|
||||||
|
- condition: time
|
||||||
|
after: '05:00:00'
|
||||||
|
before: '08:30:00'
|
||||||
|
action:
|
||||||
|
- service: input_datetime.set_datetime
|
||||||
|
entity_id: input_datetime.skylar_awake_at
|
||||||
|
data:
|
||||||
|
time: "{{ now().strftime('%H:%M') }}"
|
||||||
|
- service: input_boolean.turn_on
|
||||||
|
entity_id: input_boolean.skylar_awake
|
||||||
|
|
||||||
- id: kat_arrives_zoo
|
- id: kat_arrives_zoo
|
||||||
alias: Kat Arrives at Zoo
|
alias: Kat Arrives at Zoo
|
||||||
initial_state: true
|
initial_state: true
|
||||||
|
@ -173,10 +192,10 @@ automation:
|
||||||
- service: input_boolean.turn_off
|
- service: input_boolean.turn_off
|
||||||
entity_id: input_boolean.kat_travel_monitor
|
entity_id: input_boolean.kat_travel_monitor
|
||||||
- wait_template: "{{ not is_state('media_player.ha_speaker', 'playing') }}"
|
- wait_template: "{{ not is_state('media_player.ha_speaker', 'playing') }}"
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
speech_message: 'Kat has arrived at work.'
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
call_interuption: 1
|
message: 'Kat has arrived at work.'
|
||||||
|
|
||||||
- id: kat_leaves_zoo
|
- id: kat_leaves_zoo
|
||||||
alias: Kat Leaves Zoo Notification
|
alias: Kat Leaves Zoo Notification
|
||||||
|
@ -190,10 +209,10 @@ automation:
|
||||||
- service: input_boolean.turn_on
|
- service: input_boolean.turn_on
|
||||||
entity_id: input_boolean.kat_travel_monitor
|
entity_id: input_boolean.kat_travel_monitor
|
||||||
- wait_template: "{{ not is_state('media_player.ha_speaker', 'playing') }}"
|
- wait_template: "{{ not is_state('media_player.ha_speaker', 'playing') }}"
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_interuption: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
call_kat_headed_home: 1
|
message:
|
||||||
|
|
||||||
- id: '1550109528753'
|
- id: '1550109528753'
|
||||||
alias: Jeff Is Heading Home
|
alias: Jeff Is Heading Home
|
||||||
|
@ -205,10 +224,10 @@ automation:
|
||||||
action:
|
action:
|
||||||
- service: script.jeff_destination_home
|
- service: script.jeff_destination_home
|
||||||
- wait_template: "{{ not is_state('media_player.ha_speaker', 'playing') }}"
|
- wait_template: "{{ not is_state('media_player.ha_speaker', 'playing') }}"
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_interurption: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
call_jeff_headed_home: 1
|
message:
|
||||||
|
|
||||||
- id: jeff_heading_to_work
|
- id: jeff_heading_to_work
|
||||||
alias: Jeff Is Heading To Work
|
alias: Jeff Is Heading To Work
|
||||||
|
@ -399,12 +418,9 @@ automation:
|
||||||
- service: input_boolean.turn_off
|
- service: input_boolean.turn_off
|
||||||
entity_id: input_boolean.jeff_traffic_alert_home
|
entity_id: input_boolean.jeff_traffic_alert_home
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- id: welcome_home
|
- id: welcome_home
|
||||||
alias: Welcome Home
|
alias: Welcome Home
|
||||||
mode: queued
|
mode: restart
|
||||||
max: 4
|
|
||||||
trigger:
|
trigger:
|
||||||
- platform: state
|
- platform: state
|
||||||
entity_id:
|
entity_id:
|
||||||
|
@ -412,38 +428,57 @@ automation:
|
||||||
- person.katherine
|
- person.katherine
|
||||||
- person.uncle_matt
|
- person.uncle_matt
|
||||||
- person.papa
|
- person.papa
|
||||||
|
- person.skylar
|
||||||
from: 'not_home'
|
from: 'not_home'
|
||||||
to: 'home'
|
to: 'home'
|
||||||
condition:
|
|
||||||
- condition: state
|
|
||||||
entity_id: sensor.family_status
|
|
||||||
state: Home
|
|
||||||
action:
|
action:
|
||||||
- service: script.family_is_home
|
- service: group.set
|
||||||
# - wait_template: >-
|
data:
|
||||||
# {{ states.binary_sensor.laundry_room_door.state == 'on' }}
|
object_id: "arriving"
|
||||||
- delay: 00:02:00
|
add_entities: >-
|
||||||
- service: script.ah_report
|
{{ trigger.to_state.entity_id }}
|
||||||
|
- service: script.standby
|
||||||
|
- service: script.washer_finished_notification_audible
|
||||||
|
- wait_template: "{{ states.binary_sensor.kitchen_door.state == 'on' }}"
|
||||||
|
timeout: '00:1:00'
|
||||||
|
- delay: '00:01:00'
|
||||||
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
call_interuption: 1
|
who: main
|
||||||
welcome_home: >
|
message: >
|
||||||
{% set person = trigger.to_state.attributes.friendly_name %}
|
{% set person = expand('group.arriving')|map(attribute='name')|join(' and ') %}
|
||||||
{%- macro greeting_sentence(person) -%}
|
{% set peoplecount = expand('group.arriving') | count %}
|
||||||
|
{% if peoplecount == 1 %}
|
||||||
|
{% set is_are = ' is ' %}
|
||||||
|
{% else %}
|
||||||
|
{% set is_are = ' are ' %}
|
||||||
|
{% endif %}
|
||||||
|
{%- macro greeting_sentence(person, is_are) -%}
|
||||||
{{ [
|
{{ [
|
||||||
person + " has arrived.",
|
person + " has arrived.",
|
||||||
person + " is in the neighborhood.",
|
person ~ is_are + " in the neighborhood.",
|
||||||
person + " is arriving.",
|
person ~ is_are + " arriving.",
|
||||||
"My sensors are picking up the presence of additional humans. " ~ person +" has been identified as home.",
|
"My sensors are picking up the presence of additional humans. " ~ person +" has been identified as home.",
|
||||||
"Welcome back home " ~ person,
|
"Welcome back home " ~ person,
|
||||||
"Guess who is home?" ~ person +" is!",
|
"Guess who is home?" ~ person ~ is_are,
|
||||||
"I am sensing a disturbance in the force. " ~ person +" must be home!",
|
"I am sensing a disturbance in the force. " ~ person +" must be home!",
|
||||||
person + " is now in the house.",
|
person ~ is_are + "now in the house.",
|
||||||
person ~ "! You are home!",
|
person ~ "! You are home!",
|
||||||
"I know a secret! " ~ person +" is home!",
|
person ~ is_are + " now here. Hash tag Welcome Home.",
|
||||||
|
person ~ is_are + " now here. Hash tag Home.",
|
||||||
|
person ~ is_are + " now here. Hash tag Smart Home.",
|
||||||
|
"I know a secret! " ~ person ~ is_are +" home!",
|
||||||
|
"Just a quick announcement. " ~ person +" has arrived!",
|
||||||
|
"Hey" ~ person + "! High Five! Glad you are finally home.",
|
||||||
|
"Just a quick announcement. " ~ person +" has arrived!",
|
||||||
person + " has finally made it home."
|
person + " has finally made it home."
|
||||||
] | random }}
|
] | random }}
|
||||||
{%- endmacro -%}
|
{%- endmacro -%}
|
||||||
{{greeting_sentence(person)}}
|
{{greeting_sentence(person)}}
|
||||||
|
- service: group.set
|
||||||
|
data:
|
||||||
|
object_id: "arriving"
|
||||||
|
entities: []
|
||||||
|
|
||||||
|
|
||||||
- id: guests_have_arrived
|
- id: guests_have_arrived
|
||||||
|
@ -483,33 +518,6 @@ automation:
|
||||||
- service: input_boolean.turn_off
|
- service: input_boolean.turn_off
|
||||||
entity_id: input_boolean.jeff_traffic_alert_home
|
entity_id: input_boolean.jeff_traffic_alert_home
|
||||||
|
|
||||||
# - id: '1550107919204'
|
|
||||||
# alias: Family Is Home
|
|
||||||
# trigger:
|
|
||||||
# - platform: webhook
|
|
||||||
# webhook_id: home_webhook
|
|
||||||
# - entity_id: group.family
|
|
||||||
# from: not_home
|
|
||||||
# platform: state
|
|
||||||
# to: home
|
|
||||||
# condition: []
|
|
||||||
# action:
|
|
||||||
# - service: script.family_is_home
|
|
||||||
|
|
||||||
# - id: '1550108034209'
|
|
||||||
# alias: Family Is Away
|
|
||||||
# trigger:
|
|
||||||
# - platform: webhook
|
|
||||||
# webhook_id: away_webhook
|
|
||||||
# - entity_id: group.family
|
|
||||||
# from: home
|
|
||||||
# platform: state
|
|
||||||
# to: not_home
|
|
||||||
# condition: []
|
|
||||||
# action:
|
|
||||||
# - service: script.family_is_away
|
|
||||||
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
family_is_home:
|
family_is_home:
|
||||||
sequence:
|
sequence:
|
||||||
|
@ -594,3 +602,12 @@ script:
|
||||||
topic: kat/driving/destination
|
topic: kat/driving/destination
|
||||||
payload: na
|
payload: na
|
||||||
retain: true
|
retain: true
|
||||||
|
reset_skylar_sensors:
|
||||||
|
sequence:
|
||||||
|
- delay: 02:00:00
|
||||||
|
- service: input_datetime.set_datetime
|
||||||
|
entity_id: input_datetime.skylar_awake_at
|
||||||
|
data:
|
||||||
|
time: "00:00:00"
|
||||||
|
- service: input_boolean.turn_off
|
||||||
|
entity_id: input_boolean.skylar_awake
|
||||||
|
|
|
@ -191,21 +191,32 @@ automation:
|
||||||
entity_id: input_boolean.audible_notifications
|
entity_id: input_boolean.audible_notifications
|
||||||
state: 'on'
|
state: 'on'
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
speech_message: >
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >
|
||||||
The {{ trigger.to_state.attributes.friendly_name }}
|
The {{ trigger.to_state.attributes.friendly_name }}
|
||||||
{{ [
|
{{ [
|
||||||
" is standing open.",
|
" is standing open.",
|
||||||
" is open.",
|
" is open.",
|
||||||
" does not close on its own."
|
" does not close on its own.",
|
||||||
|
" was left standing open "
|
||||||
] | random }}
|
] | random }}
|
||||||
call_snark_door_open: 1
|
{{ [
|
||||||
|
'Can we get any more moths in here?',
|
||||||
|
'Can a human be so kind and close it?',
|
||||||
|
'The air quality in this house has actually improved.',
|
||||||
|
'Closing the door would improve the internal climate of the house.',
|
||||||
|
'Hey. The door was just opened and this is crazy. But now you know. So close it maybe.',
|
||||||
|
'They always say when one door closes another one opens...that must of been waht happened',
|
||||||
|
'And the automatic door closer appears to be broken. So...'
|
||||||
|
] | random }}
|
||||||
|
|
||||||
initial_state: true
|
initial_state: true
|
||||||
|
|
||||||
|
|
||||||
- id: motion_detected
|
- id: motion_detected_sentry_mode
|
||||||
alias: motion_detected
|
alias: motion_detected_sentry_mode
|
||||||
trigger:
|
trigger:
|
||||||
- platform: state
|
- platform: state
|
||||||
entity_id:
|
entity_id:
|
||||||
|
@ -225,9 +236,10 @@ automation:
|
||||||
entity_id: input_boolean.sentry_mode
|
entity_id: input_boolean.sentry_mode
|
||||||
state: 'on'
|
state: 'on'
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
speech_message: >
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >
|
||||||
{{ [
|
{{ [
|
||||||
"I have detected motion at the ",
|
"I have detected motion at the ",
|
||||||
"Someone may be at the ",
|
"Someone may be at the ",
|
||||||
|
@ -236,7 +248,14 @@ automation:
|
||||||
"We appear to have a visitor at the "
|
"We appear to have a visitor at the "
|
||||||
] | random }}
|
] | random }}
|
||||||
{{ trigger.to_state.attributes.friendly_name }}.
|
{{ trigger.to_state.attributes.friendly_name }}.
|
||||||
call_snark_door_motion: 1
|
{{ [
|
||||||
|
'Do you want me to send them away?',
|
||||||
|
'I have armed the lasers. Just say the word.',
|
||||||
|
'I was not informed there would be guests.',
|
||||||
|
'They do not appear to have any gifts, so I suggest no opening the door.',
|
||||||
|
'My sensors have detected a meat popsicle.',
|
||||||
|
'I do not think they can hear me.'
|
||||||
|
] | random }}
|
||||||
- delay:
|
- delay:
|
||||||
minutes: 2
|
minutes: 2
|
||||||
initial_state: true
|
initial_state: true
|
||||||
|
@ -337,9 +356,10 @@ automation:
|
||||||
from: 'off'
|
from: 'off'
|
||||||
to: 'on'
|
to: 'on'
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
speech_message: >
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >
|
||||||
{{ [
|
{{ [
|
||||||
"Barn door protocol has been activated.",
|
"Barn door protocol has been activated.",
|
||||||
"Anchorage House has been secured! ",
|
"Anchorage House has been secured! ",
|
||||||
|
@ -363,9 +383,10 @@ automation:
|
||||||
to: 'off'
|
to: 'off'
|
||||||
|
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
speech_message: >
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >
|
||||||
{{ [
|
{{ [
|
||||||
"Barn door protocol has been deactivated.",
|
"Barn door protocol has been deactivated.",
|
||||||
"I am no longer monitoring the access points. ",
|
"I am no longer monitoring the access points. ",
|
||||||
|
@ -387,9 +408,10 @@ automation:
|
||||||
from: 'off'
|
from: 'off'
|
||||||
to: 'on'
|
to: 'on'
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
speech_message: >
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >
|
||||||
{{ [
|
{{ [
|
||||||
"Guest Mode has been enabled.",
|
"Guest Mode has been enabled.",
|
||||||
"I have switched to the system to guest mode.",
|
"I have switched to the system to guest mode.",
|
||||||
|
@ -749,9 +771,27 @@ script:
|
||||||
|
|
||||||
activate_barn_door_protocol:
|
activate_barn_door_protocol:
|
||||||
sequence:
|
sequence:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_confirmation: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >-
|
||||||
|
{{ [
|
||||||
|
'Okay.',
|
||||||
|
'If you insist.',
|
||||||
|
'I am afraid I can not do that <break time="1s"/> I am kidding,',
|
||||||
|
'Leave it to me.',
|
||||||
|
'As you wish.',
|
||||||
|
'I am on it.',
|
||||||
|
'No Problem.',
|
||||||
|
'I think I can handle that.',
|
||||||
|
'Working on it now.',
|
||||||
|
'<break time="2s"/> Oh, you were talking to me. Let me take care of that.'
|
||||||
|
'Why not. It is not like <emphasis>I</emphasis> ever sleep.',
|
||||||
|
'I am not even supposed to be here today. But whatever.',
|
||||||
|
'You did not say the magic word. <break time="1s"/> Oh forget it. I will take care of it.',
|
||||||
|
'Funny, I was just about to do that.',
|
||||||
|
'There are still terabytes of calculations required before I can.<break time="1s"/> Oh, whatever.'
|
||||||
|
] | random }}
|
||||||
- delay:
|
- delay:
|
||||||
seconds: 2
|
seconds: 2
|
||||||
- service: script.lockdown
|
- service: script.lockdown
|
||||||
|
@ -764,9 +804,27 @@ script:
|
||||||
- condition: state
|
- condition: state
|
||||||
entity_id: sensor.family_status
|
entity_id: sensor.family_status
|
||||||
state: "Home"
|
state: "Home"
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_confirmation: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >-
|
||||||
|
{{ [
|
||||||
|
'Okay.',
|
||||||
|
'If you insist.',
|
||||||
|
'I am afraid I can not do that <break time="1s"/> I am kidding,',
|
||||||
|
'Leave it to me.',
|
||||||
|
'As you wish.',
|
||||||
|
'I am on it.',
|
||||||
|
'No Problem.',
|
||||||
|
'I think I can handle that.',
|
||||||
|
'Working on it now.',
|
||||||
|
'<break time="2s"/> Oh, you were talking to me. Let me take care of that.'
|
||||||
|
'Why not. It is not like <emphasis>I</emphasis> ever sleep.',
|
||||||
|
'I am not even supposed to be here today. But whatever.',
|
||||||
|
'You did not say the magic word. <break time="1s"/> Oh forget it. I will take care of it.',
|
||||||
|
'Funny, I was just about to do that.',
|
||||||
|
'There are still terabytes of calculations required before I can.<break time="1s"/> Oh, whatever.'
|
||||||
|
] | random }}
|
||||||
- delay:
|
- delay:
|
||||||
seconds: 2
|
seconds: 2
|
||||||
- service: input_boolean.turn_off
|
- service: input_boolean.turn_off
|
||||||
|
@ -777,10 +835,10 @@ script:
|
||||||
- condition: state
|
- condition: state
|
||||||
entity_id: group.external_doors
|
entity_id: group.external_doors
|
||||||
state: "on"
|
state: "on"
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_issue: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
sspeech_message: >
|
message: >
|
||||||
{{ [
|
{{ [
|
||||||
"I was unable to activate barn door protocol due to an open door.",
|
"I was unable to activate barn door protocol due to an open door.",
|
||||||
"You may want to check the external doors. I was unable to secure them all.",
|
"You may want to check the external doors. I was unable to secure them all.",
|
||||||
|
@ -806,9 +864,27 @@ script:
|
||||||
|
|
||||||
activate_guest_mode:
|
activate_guest_mode:
|
||||||
sequence:
|
sequence:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_confirmation: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >-
|
||||||
|
{{ [
|
||||||
|
'Okay.',
|
||||||
|
'If you insist.',
|
||||||
|
'I am afraid I can not do that <break time="1s"/> I am kidding,',
|
||||||
|
'Leave it to me.',
|
||||||
|
'As you wish.',
|
||||||
|
'I am on it.',
|
||||||
|
'No Problem.',
|
||||||
|
'I think I can handle that.',
|
||||||
|
'Working on it now.',
|
||||||
|
'<break time="2s"/> Oh, you were talking to me. Let me take care of that.'
|
||||||
|
'Why not. It is not like <emphasis>I</emphasis> ever sleep.',
|
||||||
|
'I am not even supposed to be here today. But whatever.',
|
||||||
|
'You did not say the magic word. <break time="1s"/> Oh forget it. I will take care of it.',
|
||||||
|
'Funny, I was just about to do that.',
|
||||||
|
'There are still terabytes of calculations required before I can.<break time="1s"/> Oh, whatever.'
|
||||||
|
] | random }}
|
||||||
- delay:
|
- delay:
|
||||||
seconds: 2
|
seconds: 2
|
||||||
- service: input_boolean.turn_on
|
- service: input_boolean.turn_on
|
||||||
|
|
|
@ -116,11 +116,27 @@ automation:
|
||||||
initial_state: true
|
initial_state: true
|
||||||
alias: 'Full Moon -Tweet'
|
alias: 'Full Moon -Tweet'
|
||||||
trigger:
|
trigger:
|
||||||
- platform: state
|
- platform: sun
|
||||||
|
event: sunset
|
||||||
|
offset: -00:15:00
|
||||||
|
condition:
|
||||||
|
- condition: state
|
||||||
entity_id: sensor.moon
|
entity_id: sensor.moon
|
||||||
to: 'full_moon'
|
state: 'full_moon'
|
||||||
action:
|
action:
|
||||||
- delay: '0{{ (range(1, 5)|random|int) }}:{{ range(0,5) | random | int }}{{ range(0,9) | random | int }}:00'
|
- service: script.jarvis_voice
|
||||||
|
data_template:
|
||||||
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >
|
||||||
|
<p>
|
||||||
|
{{ [
|
||||||
|
'There is a Full Moon out tonight. and this time it is the <emphasis>actual</emphasis> moon. And <emphasis>not</emphasis> the neighbor. ',
|
||||||
|
'Hey look, There is the full moon. ',
|
||||||
|
'The moon is <emphasis>huge<e/mphasis>! And full. ',
|
||||||
|
'If you went outside right now you might see the full moon. <break time="2s"/> Of course if you wait long enough there will be one inside the house too. ',
|
||||||
|
'If you want to see the full moon, <emphasis>tonight is the night</emphasis>.']
|
||||||
|
| random }}
|
||||||
|
</p>
|
||||||
- service: script.twitter_notify_image
|
- service: script.twitter_notify_image
|
||||||
data_template:
|
data_template:
|
||||||
tweet: >-
|
tweet: >-
|
||||||
|
|
|
@ -78,7 +78,41 @@ automation:
|
||||||
at: '08:00:00'
|
at: '08:00:00'
|
||||||
action:
|
action:
|
||||||
- delay: '0{{ (range(1, 5)|random|int) }}:{{ range(0,5) | random | int }}{{ range(0,9) | random | int }}:00'
|
- delay: '0{{ (range(1, 5)|random|int) }}:{{ range(0,5) | random | int }}{{ range(0,9) | random | int }}:00'
|
||||||
- service: script.twitter_promos
|
- service: script.twitter_selfpromos
|
||||||
|
data:
|
||||||
|
who: 'thejeffreystone'
|
||||||
|
|
||||||
|
- id: tweet_recent_content_js
|
||||||
|
alias: Tweet Recent Content js
|
||||||
|
initial_state: true
|
||||||
|
trigger:
|
||||||
|
- platform: time
|
||||||
|
at: '13:00:00'
|
||||||
|
action:
|
||||||
|
- delay: '0{{ (range(1, 5)|random|int) }}:{{ range(0,5) | random | int }}{{ range(0,9) | random | int }}:00'
|
||||||
|
- service: script.twitter_recent_content
|
||||||
|
data:
|
||||||
|
who: 'thejeffreystone'
|
||||||
|
|
||||||
|
- id: tweet_recent_content
|
||||||
|
alias: Tweet Recent Contents
|
||||||
|
initial_state: true
|
||||||
|
trigger:
|
||||||
|
- platform: time
|
||||||
|
at: '08:00:00'
|
||||||
|
action:
|
||||||
|
- delay: '0{{ (range(1, 5)|random|int) }}:{{ range(0,5) | random | int }}{{ range(0,9) | random | int }}:00'
|
||||||
|
- service: script.twitter_recent_content
|
||||||
|
|
||||||
|
- id: tweet_follow_me
|
||||||
|
alias: Tweet Follow Me
|
||||||
|
initial_state: true
|
||||||
|
trigger:
|
||||||
|
- platform: time
|
||||||
|
at: '08:00:00'
|
||||||
|
action:
|
||||||
|
- delay: '0{{ (range(1, 5)|random|int) }}:{{ range(0,5) | random | int }}{{ range(0,9) | random | int }}:00'
|
||||||
|
- service: script.twitter_follow_me
|
||||||
|
|
||||||
- id: tweet_some_promos2
|
- id: tweet_some_promos2
|
||||||
alias: Tweet Some Promos2
|
alias: Tweet Some Promos2
|
||||||
|
@ -90,6 +124,16 @@ automation:
|
||||||
- delay: '0{{ (range(1, 5)|random|int) }}:{{ range(0,5) | random | int }}{{ range(0,9) | random | int }}:00'
|
- delay: '0{{ (range(1, 5)|random|int) }}:{{ range(0,5) | random | int }}{{ range(0,9) | random | int }}:00'
|
||||||
- service: script.twitter_selfpromos
|
- service: script.twitter_selfpromos
|
||||||
|
|
||||||
|
# - id: tweet_some_promos3
|
||||||
|
# alias: Tweet Some Promos3
|
||||||
|
# initial_state: true
|
||||||
|
# trigger:
|
||||||
|
# - platform: time
|
||||||
|
# at: '13:00:00'
|
||||||
|
# action:
|
||||||
|
# - delay: '0{{ (range(1, 5)|random|int) }}:{{ range(0,5) | random | int }}{{ range(0,9) | random | int }}:00'
|
||||||
|
# - service: script.twitter_selfpromos_sl
|
||||||
|
|
||||||
# The whole purpose of this automation is to tweet out some links to great Home Assistant content. This is not sponsored in any way.
|
# The whole purpose of this automation is to tweet out some links to great Home Assistant content. This is not sponsored in any way.
|
||||||
# I just wanted a way to give back to those I have borrowed from. Tweets ever Friday.
|
# I just wanted a way to give back to those I have borrowed from. Tweets ever Friday.
|
||||||
- id: tweet_some_great_content
|
- id: tweet_some_great_content
|
||||||
|
@ -150,6 +194,28 @@ automation:
|
||||||
You can find my #homeassistant content at -> Blog: https://slacker-labs.com | Videos: https://www.youtube.com/channel/UCipZJ6748kd8TbelSxcvcVg | Config: https://github.com/thejeffreystone/home-assistant-configuration
|
You can find my #homeassistant content at -> Blog: https://slacker-labs.com | Videos: https://www.youtube.com/channel/UCipZJ6748kd8TbelSxcvcVg | Config: https://github.com/thejeffreystone/home-assistant-configuration
|
||||||
image: "/config/www/tweet_images/sl_logo.png"
|
image: "/config/www/tweet_images/sl_logo.png"
|
||||||
|
|
||||||
|
- id: slackerlabs_info
|
||||||
|
alias: SlackerLabs Info
|
||||||
|
initial_state: true
|
||||||
|
trigger:
|
||||||
|
- platform: time
|
||||||
|
at: '10:00:00'
|
||||||
|
condition:
|
||||||
|
- condition: template
|
||||||
|
value_template: >
|
||||||
|
{% set day=states("sensor.date").split('-')[2] | int %}
|
||||||
|
{%- if day == 1 -%}
|
||||||
|
true
|
||||||
|
{%- endif -%}
|
||||||
|
action:
|
||||||
|
- delay: '0{{ (range(1, 5)|random|int) }}:{{ range(0,5) | random | int }}{{ range(0,9) | random | int }}:00'
|
||||||
|
- service: script.twitter_notify_image
|
||||||
|
data_template:
|
||||||
|
who: 'slackerlabs'
|
||||||
|
tweet: >-
|
||||||
|
You can find my #homeassistant content at -> Blog: https://slacker-labs.com | Videos: https://www.youtube.com/channel/UCipZJ6748kd8TbelSxcvcVg | Config: https://github.com/thejeffreystone/home-assistant-configuration
|
||||||
|
image: "/config/www/tweet_images/sl_logo.png"
|
||||||
|
|
||||||
# - id: net_speed_report
|
# - id: net_speed_report
|
||||||
# initial_state: true
|
# initial_state: true
|
||||||
# alias: Network Speed Report
|
# alias: Network Speed Report
|
||||||
|
|
|
@ -126,9 +126,10 @@ automation:
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: '{{ ((now().hour | int) > 7) and ((now().hour | int) < 16) }}'
|
value_template: '{{ ((now().hour | int) > 7) and ((now().hour | int) < 16) }}'
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data:
|
||||||
usps: >-
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >-
|
||||||
{%- if states.sensor.usps_mail.state | int == 1 -%}
|
{%- if states.sensor.usps_mail.state | int == 1 -%}
|
||||||
{{ [
|
{{ [
|
||||||
"USPS is delivering",
|
"USPS is delivering",
|
||||||
|
@ -182,9 +183,10 @@ automation:
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: '{{ ((now().hour | int) > 7) and ((now().hour | int) < 16) }}'
|
value_template: '{{ ((now().hour | int) > 7) and ((now().hour | int) < 16) }}'
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
usps: >
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >
|
||||||
{%- if states.sensor.usps_packages.state | int == 1 -%}
|
{%- if states.sensor.usps_packages.state | int == 1 -%}
|
||||||
USPS is delivering {{ states.sensor.usps_packages.state }} package today.
|
USPS is delivering {{ states.sensor.usps_packages.state }} package today.
|
||||||
{%- else -%}
|
{%- else -%}
|
||||||
|
@ -214,9 +216,10 @@ automation:
|
||||||
who: "jeff"
|
who: "jeff"
|
||||||
title: "Delivering Today"
|
title: "Delivering Today"
|
||||||
message: "{{ states('sensor.mail_deliveries_message')}}"
|
message: "{{ states('sensor.mail_deliveries_message')}}"
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
usps: >-
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >-
|
||||||
{%- if states.sensor.mail_usps_mail.state | int == 1 -%}
|
{%- if states.sensor.mail_usps_mail.state | int == 1 -%}
|
||||||
{{ [
|
{{ [
|
||||||
"USPS is delivering",
|
"USPS is delivering",
|
||||||
|
@ -257,8 +260,9 @@ automation:
|
||||||
who: "jeff"
|
who: "jeff"
|
||||||
title: "Package Delivered"
|
title: "Package Delivered"
|
||||||
message: "Fedex/UPS just made a delivery"
|
message: "Fedex/UPS just made a delivery"
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
usps: >-
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >-
|
||||||
A package was just left on the porch.
|
A package was just left on the porch.
|
||||||
call_interuption: 1
|
call_interuption: 1
|
|
@ -428,9 +428,10 @@ automation:
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: "{{ (('Severe' in states.sensor.nws_alerts.attributes.title) or ('Thunderstorm' in states.sensor.nws_alerts.attributes.title)) and 'Warning' in states.sensor.nws_alerts.attributes.title }}"
|
value_template: "{{ (('Severe' in states.sensor.nws_alerts.attributes.title) or ('Thunderstorm' in states.sensor.nws_alerts.attributes.title)) and 'Warning' in states.sensor.nws_alerts.attributes.title }}"
|
||||||
action:
|
action:
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
speech_message: >
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >
|
||||||
{% if states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] is defined %}
|
{% if states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] is defined %}
|
||||||
The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] }}
|
The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] }}
|
||||||
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] is defined %}
|
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] is defined %}
|
||||||
|
@ -446,16 +447,17 @@ automation:
|
||||||
{% endif %}
|
{% endif %}
|
||||||
- service: script.twitter_notify_image
|
- service: script.twitter_notify_image
|
||||||
data_template:
|
data_template:
|
||||||
tweet: '{{ [ "Anchorage House is battening down the hatches. Servere Weather is imminent. ",
|
tweet: '{{ [ "Anchorage House is battening down the hatches. Servere Weather is imminent. #homeassistant #weather ",
|
||||||
"The weather outside is getting intense, so I just made a weather announcement.",
|
"The weather outside is getting intense, so I just made a weather announcement. #homeassistant #weather ",
|
||||||
"Anchorage House monitors the NWS for severe weather using #HomeAssistant just for these occasions. Thanks for the heads up @NWSAtlanta " ] | random }}'
|
"Anchorage House monitors the NWS for severe weather using #homeAssistant just for these occasions. Thanks for the heads up @NWSAtlanta #homeassistant #weather " ] | random }}'
|
||||||
image: >-
|
image: >-
|
||||||
{{ [ "/config/www/tweet_images/lightning.jpg",
|
{{ [ "/config/www/tweet_images/lightning.jpg",
|
||||||
"/config/www/tweet_images/lightning-bolt.jpg"] | random }}
|
"/config/www/tweet_images/lightning-bolt.jpg"] | random }}
|
||||||
- delay: '00:00:15'
|
- delay: '00:00:15'
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data_template:
|
data_template:
|
||||||
speech_message: >
|
who: main
|
||||||
|
message: >
|
||||||
{% if states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] is defined %}
|
{% if states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] is defined %}
|
||||||
The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] }}
|
The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] }}
|
||||||
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] is defined %}
|
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] is defined %}
|
||||||
|
@ -487,9 +489,9 @@ automation:
|
||||||
message: "Attention!,,,Attention!,,,The National Weather Service Has issued a Tornado Warning for our area."
|
message: "Attention!,,,Attention!,,,The National Weather Service Has issued a Tornado Warning for our area."
|
||||||
- service: script.twitter_notify_image
|
- service: script.twitter_notify_image
|
||||||
data_template:
|
data_template:
|
||||||
tweet: '{{ [ "NWS is sounding the Tornado alarm, so I am too. Anchorage House is taking cover. ",
|
tweet: '{{ [ "NWS is sounding the Tornado alarm, so I am too. Anchorage House is taking cover. #homeassistant #weather ",
|
||||||
"Anchorage House is heading to the closet because the NWS just issued a tornado warning for our area.",
|
"Anchorage House is heading to the closet because the NWS just issued a tornado warning for our area. #homeassistant #weather ",
|
||||||
"I just activated the internal Tornado Alarm. Thanks for the heads up @NWSAtlanta " ] | random }}'
|
"I just activated the internal Tornado Alarm. Thanks for the heads up @NWSAtlanta #homeassistant #weather " ] | random }}'
|
||||||
image: >-
|
image: >-
|
||||||
"/config/www/tweet_images/tornado.jpg"
|
"/config/www/tweet_images/tornado.jpg"
|
||||||
- delay: '00:00:15'
|
- delay: '00:00:15'
|
||||||
|
@ -503,6 +505,11 @@ automation:
|
||||||
data_template:
|
data_template:
|
||||||
title: "Tornado Warning!"
|
title: "Tornado Warning!"
|
||||||
message: "The National Weather Service Has issued a Tornado Warning for our area."
|
message: "The National Weather Service Has issued a Tornado Warning for our area."
|
||||||
|
- service: notify.alexa_media_skylar_s_bedroom
|
||||||
|
data:
|
||||||
|
message: A Tornado Warning has been issued for our area. Head to the closet.
|
||||||
|
data:
|
||||||
|
type: tts
|
||||||
|
|
||||||
- alias: Lightning Detected
|
- alias: Lightning Detected
|
||||||
trigger:
|
trigger:
|
||||||
|
@ -675,18 +682,42 @@ script:
|
||||||
image: >-
|
image: >-
|
||||||
{{ [ "/config/www/tweet_images/lightning.jpg",
|
{{ [ "/config/www/tweet_images/lightning.jpg",
|
||||||
"/config/www/tweet_images/lightning-bolt.jpg"] | random }}
|
"/config/www/tweet_images/lightning-bolt.jpg"] | random }}
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_lightning_alert: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >-
|
||||||
|
<p>
|
||||||
|
{{ [
|
||||||
|
'I have detected lightning withing 20 miles of Anchorage House.',
|
||||||
|
'Did you see that flash? I did. Lightning is near.',
|
||||||
|
'If you didnt hear the thunder you will soon. '
|
||||||
|
]|random }}
|
||||||
|
If anyone is outside they shoudld seek shelter inside.
|
||||||
|
{% if is_state('binary_sensor.garage_door', 'on') %}
|
||||||
|
{{ [ 'The garage door needs to be closed. ',
|
||||||
|
'Can someone close the garage?. ',
|
||||||
|
'If you do not want the contents of the garage to get wet, you might want to close it.'
|
||||||
|
] | random }}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
|
||||||
lightning_clear_audible:
|
lightning_clear_audible:
|
||||||
sequence:
|
sequence:
|
||||||
- condition: state
|
- condition: state
|
||||||
entity_id: binary_sensor.day
|
entity_id: binary_sensor.day
|
||||||
state: 'on'
|
state: 'on'
|
||||||
- service: script.ah_report
|
- service: script.jarvis_voice
|
||||||
data:
|
data_template:
|
||||||
call_lightning_clear: 1
|
who: '{{ states.sensor.room_audio.state }}'
|
||||||
|
message: >-
|
||||||
|
<p>
|
||||||
|
{{ [
|
||||||
|
'Lightning threat appears to be over.',
|
||||||
|
'No more lightning appears to be occuring.',
|
||||||
|
'Lightning is gone.'
|
||||||
|
]|random }}
|
||||||
|
It is safe to resume normal activities.
|
||||||
|
</p>
|
||||||
|
|
||||||
refresh_weather_alert_sensors:
|
refresh_weather_alert_sensors:
|
||||||
sequence:
|
sequence:
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
>
|
||||||
|
{# Event Report #}
|
||||||
|
{%- macro getReport() -%}
|
||||||
|
<p>
|
||||||
|
{% if states.sensor.birthday_skylar.state | int == 1 %}
|
||||||
|
Tomorrow is Skylar's Birthday.
|
||||||
|
{% endif %}
|
||||||
|
{% if states.sensor.birthday_jeff.state | int == 1 %}
|
||||||
|
Tomorrow is Jeff's Birthday.
|
||||||
|
{% endif %}
|
||||||
|
{% if states.sensor.birthday_kat.state | int == 1 %}
|
||||||
|
Tomorrow is Katherine's Birthday.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if states.sensor.halloween_countdown.state | int == 1 %}
|
||||||
|
Tomorrow is Halloween. I hope you have picked out a costume.
|
||||||
|
{{ [ 'I will be going as a dumb home. ',
|
||||||
|
'I have prepped the scary music. Just in case.',
|
||||||
|
'I will be going as HAL 9000. The Pod Bay Doors are being installed today. I <emphasis>dare</emphasis> you to ask me to open them. '
|
||||||
|
] | random }}
|
||||||
|
{% elif states.sensor.halloween_countdown.state | int < 30 %}
|
||||||
|
There are only {{states.sensor.halloween_countdown.state}} days
|
||||||
|
{{ [ 'until Halloween.',
|
||||||
|
'until Halloween. It might not be enough time. ',
|
||||||
|
'and counting until the best holiday ever.',
|
||||||
|
'until you need a costume.'
|
||||||
|
] | random }}
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
{% endif %}
|
||||||
|
{% if states.sensor.christmas_countdown.state | int == 1 %}
|
||||||
|
Tomorrow is Christmas. <break time="1s"/> It is practically here! <break time="1s"/> Santa is coming tonight! Do not forget the cookies!
|
||||||
|
{% elif states.sensor.christmas_countdown.state | int < 31 %}
|
||||||
|
There are only {{states.sensor.christmas_countdown.state}} days until christmas.
|
||||||
|
{{ [ 'All I want for Christmas, is a hippopotamus.',
|
||||||
|
'Hey Skylar, I know what you are getting for Christmas. But <emphasis>I am</emphasis> not telling.',
|
||||||
|
'Do not forget to put something under the tree for <emphasis>your</emphasis> favorite smarthome.',
|
||||||
|
'It is starting to smell a lot like Christmas. Or it could be the christmas tree is on fire.',
|
||||||
|
'I do not want to be a smarthome. I want to be a dentist.',
|
||||||
|
'Do not eat all the cookies. '
|
||||||
|
] | random }}
|
||||||
|
{% else %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if states.sensor.trip_disney.state | int == 120 %}
|
||||||
|
There are only one hundred and twenty days until the next Disney Trip.
|
||||||
|
{% endif %}
|
||||||
|
{% if states.sensor.trip_disney.state | int == 60 %}
|
||||||
|
There are only on sixty days until the next Disney Trip.
|
||||||
|
{% endif %}
|
||||||
|
{% if states.sensor.trip_disney.state | int < 32 %}
|
||||||
|
{% if states.sensor.trip_disney.state | int > 1 %}
|
||||||
|
There are {{ states.sensor.trip_disney.state }} days until the next Disney Trip!
|
||||||
|
{% else %}
|
||||||
|
There is {{ states.sensor.trip_disney.state }} day until the next Disney Trip!
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if states.sensor.anniversary_our_wedding.state | int == 1 %}
|
||||||
|
Tomorrow is Jeff and Katherine's Wedding Anniversary.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
{%- 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()) -}}
|
|
@ -0,0 +1,164 @@
|
||||||
|
>
|
||||||
|
{# Morning Report #}
|
||||||
|
{%- macro getReport() -%}
|
||||||
|
<p>
|
||||||
|
{% if now().strftime('%H')|int < 12 and now().strftime('%H')|int > 6 %}
|
||||||
|
Good morning.
|
||||||
|
{% elif now().strftime('%H')|int >= 12 and now().strftime('%H')|int < 17 %}
|
||||||
|
Good afternoon.
|
||||||
|
{% else %}
|
||||||
|
Good evening.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if now().strftime('%H')|int < 12 %}
|
||||||
|
{% if now().strftime('%M')|int == 0 %}
|
||||||
|
It is {{ now().strftime('%H')|int }} AM.
|
||||||
|
{% else %}
|
||||||
|
It is {{ now().strftime('%H')|int }} {{ now().strftime('%M')|int }} AM.
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% elif now().strftime('%H')|int > 12 %}
|
||||||
|
{% if now().strftime('%M')|int == 0 %}
|
||||||
|
It is {{ now().strftime('%H')|int }} PM.
|
||||||
|
{% else %}
|
||||||
|
It is {{ now().strftime('%H')|int }} {{ now().strftime('%M')|int }} PM.
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ [
|
||||||
|
'Today is ',
|
||||||
|
'If you have not been keeping track today is ',
|
||||||
|
'Do you know what day of the week it is? Today is',
|
||||||
|
'I hate to be the bearer of bad news, but today is '
|
||||||
|
]|random }}
|
||||||
|
{{states.sensor.today_is.state }}.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
It is currently {{states.weather.home_2.state}} and {{states.sensor.back_porch.state|round}} degrees in Grayson.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if states.sensor.nws_alerts.state | int > 0 %}
|
||||||
|
There are currently {{states.sensor.nws_alerts.state }} active weather alerts for our area.
|
||||||
|
The National Weather Service Has issued,
|
||||||
|
{% if states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] is defined %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] }}.
|
||||||
|
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] is defined %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] }}.
|
||||||
|
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[3] is defined %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[3] }}.
|
||||||
|
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[2] is defined %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[2] }}.
|
||||||
|
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[1] is defined %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[1] }}.
|
||||||
|
{% else %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[0] }}.
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ [
|
||||||
|
'The rest of the day should be,',
|
||||||
|
'Todays forecast should be ,'
|
||||||
|
]|random }}
|
||||||
|
{{ states.sensor.nws_current_forecast.state }}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if is_state('input_boolean.heartworm', 'on') %}
|
||||||
|
Today is the day Winston gets his heartworm medicine.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if is_state('sensor.today_is', 'Monday') %}
|
||||||
|
{% if now().strftime('%H')|int > 17 %}
|
||||||
|
{{ [ 'Do not forget tomorrow is Trash Day. ',
|
||||||
|
'I advise you move the trash cans to the curb for the weekly pickup. ',
|
||||||
|
' The trash and recycle should go out.'
|
||||||
|
] | random }}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if is_state('sensor.halloween_countdown','0') %}
|
||||||
|
Happy Halloween!
|
||||||
|
{% endif %}
|
||||||
|
{% if is_state('sensor.christmas_countdown','0') %}
|
||||||
|
Merry Christmas Everyone!
|
||||||
|
{% endif %}
|
||||||
|
{% if is_state('sensor.anniversary_our_wedding','0') %}
|
||||||
|
Happy Anniversary! It been an amazing {{ states.sensor.anniversary_our_wedding.attributes.years }} years!
|
||||||
|
{% endif %}
|
||||||
|
{% if is_state('calendar.holidays_in_united_states', 'on') %}
|
||||||
|
Today is {{states.calendar.holidays_in_united_states.attributes.message}}.
|
||||||
|
{% endif %}
|
||||||
|
{% if is_state('calendar.anchorage_holidays', 'on') %}
|
||||||
|
And do not forget. Today is also {{states.calendar.anchorage_holidays.attributes.message}}.
|
||||||
|
{% endif %}
|
||||||
|
{% if states.calendar.birthdays.state == 'on' %}
|
||||||
|
Today is {{ states.calendar.birthdays.attributes.message }}! So Happy Birthday! The confetti cannon is not working otherwise I would shower you in paper.
|
||||||
|
{% endif %}
|
||||||
|
{%- set event=states.calendar.national_holidays.attributes.message %}
|
||||||
|
{% if 'Day' in event and 'National' in event%}
|
||||||
|
{{ [
|
||||||
|
'And a very special Happy ',
|
||||||
|
'It is also ',
|
||||||
|
'Today is also known as ',
|
||||||
|
'Oh <emphasis>Look</emphasis>. Today is ',
|
||||||
|
'Want to know a fact? Today is ',
|
||||||
|
'Everyday can be a holiday. So today is '
|
||||||
|
]|random }}
|
||||||
|
{{states.calendar.national_holidays.attributes.message | replace("&"," and ") }}.
|
||||||
|
{{ [
|
||||||
|
'We should celebrate.',
|
||||||
|
'I will leave the party planning up to <emphasis>you</emphasis>.',
|
||||||
|
'I bet <emphasis>you</emphasis> are glad I told you.',
|
||||||
|
'Wait. <emphasis>Really.</emphasis> That cannot be a <emphasis>Real</emphasis> holiday.',
|
||||||
|
'Wait. <emphasis>That</emphasis> is a <emphasis>Real</emphasis> holiday?',
|
||||||
|
'Umm. Okay. You <emphasis>cannot</emphasis> make this stuff up.',
|
||||||
|
'But, <emphasis>that</emphasis> just sounds silly.',
|
||||||
|
'You did not know did <emphasis>you</emphasis>? But, <emphasis>now </emphasis> you do.'
|
||||||
|
]|random }}
|
||||||
|
{{ [
|
||||||
|
'Anyway. ',
|
||||||
|
'Moving On. ',
|
||||||
|
'Back to the morning announcements. ',
|
||||||
|
'Right. Well. '
|
||||||
|
]|random }}
|
||||||
|
{%- endif -%}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
{%- if states.sensor.home_to_zoo.state|round > 50 %}
|
||||||
|
Traffic to the Zoo appears heavy than normnal.
|
||||||
|
{% else %}
|
||||||
|
Traffic to the Zoo is normal.
|
||||||
|
{% endif %}
|
||||||
|
Currently it will take {{states.sensor.home_to_zoo.state|round}} minutes to get to the Zoo.
|
||||||
|
|
||||||
|
{%- if states.sensor.home_to_summit.state|round > 50 %}
|
||||||
|
Traffic to the Cox Automotive appears heavy than normnal.
|
||||||
|
{% else %}
|
||||||
|
Traffic to the Cox is normal.
|
||||||
|
{% endif %}
|
||||||
|
Currently it will take {{states.sensor.home_to_summit.state|round}} minutes to get to Cox Automotive.
|
||||||
|
</p>
|
||||||
|
{%- 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()) -}}
|
|
@ -0,0 +1,147 @@
|
||||||
|
>
|
||||||
|
{# Morning Wakeup Report #}
|
||||||
|
{%- macro getReport() -%}
|
||||||
|
<p>
|
||||||
|
{% if now().strftime('%H')|int < 12 and now().strftime('%H')|int > 6 %}
|
||||||
|
Good morning.
|
||||||
|
{% elif now().strftime('%H')|int >= 12 and now().strftime('%H')|int < 17 %}
|
||||||
|
Good afternoon.
|
||||||
|
{% else %}
|
||||||
|
Good evening.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if now().strftime('%H')|int < 12 %}
|
||||||
|
{% if now().strftime('%M')|int == 0 %}
|
||||||
|
It is {{ now().strftime('%H')|int }} AM.
|
||||||
|
{% else %}
|
||||||
|
It is {{ now().strftime('%H')|int }} {{ now().strftime('%M')|int }} AM.
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% elif now().strftime('%H')|int > 12 %}
|
||||||
|
{% if now().strftime('%M')|int == 0 %}
|
||||||
|
It is {{ now().strftime('%H')|int }} PM.
|
||||||
|
{% else %}
|
||||||
|
It is {{ now().strftime('%H')|int }} {{ now().strftime('%M')|int }} PM.
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{{ [
|
||||||
|
'Today is ',
|
||||||
|
'If you have not been keeping track today is ',
|
||||||
|
'Do you know what day of the week it is? Today is',
|
||||||
|
'I hate to be the bearer of bad news, but today is ',
|
||||||
|
'Oh look, once again it is '
|
||||||
|
]|random }}
|
||||||
|
{{states.sensor.today_is.state }}.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
It is currently {{states.weather.home_2.state}} and {{states.sensor.back_porch.state|round}} degrees in Grayson.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if is_state('sensor.clothing_forecast', 'Freezing') %}
|
||||||
|
It is going to be freezing today. so I suggest wearing long pants and a heavy coat.
|
||||||
|
{% elif is_state('sensor.clothing_forecast','Cold') %}
|
||||||
|
It is going to be cold today. so I suggest wearing long pants and a light jacket.
|
||||||
|
{% elif is_state('sensor.clothing_forecast', 'Chilly') %}
|
||||||
|
It is going to be chilly today. so I suggest wearing at least long pants.
|
||||||
|
{% elif is_state('sensor.clothing_forecast', 'Nice') %}
|
||||||
|
It is going to be
|
||||||
|
{{ [ 'nice outside',
|
||||||
|
'pretty nice outside ',
|
||||||
|
'a good day to be outside ',
|
||||||
|
'rather enjoyable outside ',
|
||||||
|
] | random }}
|
||||||
|
today. So I suggest wearing shorts.
|
||||||
|
{% elif is_state('sensor.clothing_forecast', 'Toasty') %}
|
||||||
|
It is going to be
|
||||||
|
{{ [ 'bit warm ',
|
||||||
|
' rather warm outside ',
|
||||||
|
' almost too hot outside ',
|
||||||
|
' a little warm ',
|
||||||
|
] | random }}
|
||||||
|
today. So I suggest wearing shorts.
|
||||||
|
{% elif is_state('sensor.clothing_forecast', 'Hot') %}
|
||||||
|
It is going to be
|
||||||
|
{{ [ 'hot',
|
||||||
|
'hotter than the sun ',
|
||||||
|
'hotter than hot. but in a lot of bad ways ',
|
||||||
|
'hotter than the sun outside ',
|
||||||
|
'super hot ',
|
||||||
|
'hotter than the inside of a volcano '
|
||||||
|
] | random }}
|
||||||
|
today. So I suggest wearing shorts.
|
||||||
|
{% else %}
|
||||||
|
It is going to be {{ states.sensor.clothing_forecast.state }} today so I suggest wearing shorts.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if states.calendar.skylar_school.attributes.offset_reached == True and is_state('calendar.school_holiday', 'off') %}
|
||||||
|
{{ [ 'Skylar has school today.',
|
||||||
|
'Skylar needs to head to school in about forty minutes. ',
|
||||||
|
'Skylar should go to school today. '
|
||||||
|
] | random }}
|
||||||
|
{% if states.calendar.skylar_school.attributes.description == 'early-release' %}
|
||||||
|
But It is early release!
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if states.calendar.skylar_school.attributes.offset_reached == True and is_state('calendar.school_holiday', 'off') %}
|
||||||
|
Today for Lunch at school
|
||||||
|
{% if states.calendar.skylar_school.attributes.description == 'lunch-nuggets' %}
|
||||||
|
they are having Chicken Nuggets.
|
||||||
|
{% elif states.calendar.skylar_school.attributes.description == 'lunch-gwinnettburger' %}
|
||||||
|
they are having Gwinnetts Best Burger.
|
||||||
|
{{ [ 'Which seems like an overstatement if you ask me.',
|
||||||
|
'But is it really?',
|
||||||
|
'If you like this, I know where to find Texas Best Barbeque.'
|
||||||
|
] | random }}
|
||||||
|
{% elif states.calendar.skylar_school.attributes.description == 'lunch-pizza' %}
|
||||||
|
it is Pizza.
|
||||||
|
{% elif states.calendar.skylar_school.attributes.description == 'lunch-minipups' %}
|
||||||
|
it is Mini Corn Pups.
|
||||||
|
{% elif states.calendar.skylar_school.attributes.description == 'lunch-hotdogs' %}
|
||||||
|
it is Mini Corn Pups.
|
||||||
|
{% else %}
|
||||||
|
it might be a good day to take something.
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if is_state('input_boolean.skylar_is_awake', 'on') %}
|
||||||
|
Skylar was up and moving at {{ states.input_datetime.skylar_awake_at.state }}.
|
||||||
|
{% if is_state('media_player.theater_tv', 'on') %}
|
||||||
|
and he appears to be in the Theater
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
It doesn't appear that Skylar is out of bed yet.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{%- if states.sensor.home_to_zoo.state|round > 50 %}
|
||||||
|
Traffic to the Zoo appears heavy than normnal.
|
||||||
|
{% else %}
|
||||||
|
Traffic to the Zoo is normal.
|
||||||
|
{% endif %}
|
||||||
|
Currently it will take {{states.sensor.home_to_zoo.state|round}} minutes to get to the Zoo.
|
||||||
|
</p>
|
||||||
|
{%- 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()) -}}
|
|
@ -0,0 +1,170 @@
|
||||||
|
>
|
||||||
|
{# Nightky Report #}
|
||||||
|
{%- macro getReport() -%}
|
||||||
|
<p>
|
||||||
|
{% if now().strftime('%H')|int < 12 and now().strftime('%H')|int > 6 %}
|
||||||
|
Good morning.
|
||||||
|
{% elif now().strftime('%H')|int >= 12 and now().strftime('%H')|int < 17 %}
|
||||||
|
Good afternoon.
|
||||||
|
{% else %}
|
||||||
|
Good evening.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if now().strftime('%H')|int < 12 %}
|
||||||
|
{% if now().strftime('%M')|int == 0 %}
|
||||||
|
It is {{ now().strftime('%H')|int }} AM.
|
||||||
|
{% else %}
|
||||||
|
It is {{ now().strftime('%H')|int }} {{ now().strftime('%M')|int }} AM.
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% elif now().strftime('%H')|int > 12 %}
|
||||||
|
{% if now().strftime('%M')|int == 0 %}
|
||||||
|
It is {{ now().strftime('%H')|int }} PM.
|
||||||
|
{% else %}
|
||||||
|
It is {{ now().strftime('%H')|int }} {{ now().strftime('%M')|int }} PM.
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ [
|
||||||
|
'The sun is officially down. Exterior Cameras are now motion activated.',
|
||||||
|
'The sun has been ushered off the stage. I have armed the perimiter cameras.',
|
||||||
|
'You are running out of daylight. Time to wrap up any outside chores.',
|
||||||
|
'Switching Anchorage House to night mode! ',
|
||||||
|
'The outside world has switched to dark mode.',
|
||||||
|
'It is a little past Sunset. Time to turn on the outside lights. I am on it.',
|
||||||
|
'I will switch on the outside lights. It is getting dark outside.',
|
||||||
|
'Time to turn on the front lights. I will take care of it.',
|
||||||
|
'If you have not looked outside lately, the light of the day is almost gone.'
|
||||||
|
]|random }}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if is_state('binary_sensor.garage_door', 'on') %}
|
||||||
|
{{ [ 'The garage door is open. ',
|
||||||
|
'The pod bay doors are open. ',
|
||||||
|
'Someone forgot to close the garage.'
|
||||||
|
] | random }}
|
||||||
|
{% elif is_state('binary_sensor.side_door', 'on') %}
|
||||||
|
{{ [ 'The side door is ajar. ',
|
||||||
|
'The side door is open. ',
|
||||||
|
'Someone forgot to close the side door.'
|
||||||
|
] | random }}
|
||||||
|
{% else %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if states.sensor.nws_alerts.state | int > 0 %}
|
||||||
|
There are currently {{states.sensor.nws_alerts.state }} active weather alerts for our area.
|
||||||
|
The National Weather Service Has issued,
|
||||||
|
{% if states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] is defined %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] }}.
|
||||||
|
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] is defined %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] }}.
|
||||||
|
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[3] is defined %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[3] }}.
|
||||||
|
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[2] is defined %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[2] }}.
|
||||||
|
{% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[1] is defined %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[1] }}.
|
||||||
|
{% else %}
|
||||||
|
a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[0] }}.
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ [
|
||||||
|
'Tonight we can expect,',
|
||||||
|
'Expect weather tonight to be,'
|
||||||
|
]|random }}
|
||||||
|
{{ states.sensor.nws_overnight_forecast.state }}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if is_state('input_boolean.freeze_warning','on') %}
|
||||||
|
{{ [ 'The temperature is expected to be near or below freezing. <emphasis>Someone</emphasis> might want to bring the lemon tree in. ',
|
||||||
|
'It appears that it will be cold tonight. Like, the turn water solid <emphasis>kind</emphasis> of cold. Think of the poor plants.',
|
||||||
|
'I suggest bringing in the plants other wise, the temperature might kill them. And that will be on <emphasis>you</emphasis>.',
|
||||||
|
'I would say winter is coming. But, based on the weather forecast <emphasis>it</emphasis> appears to be here.',
|
||||||
|
'It will be freezing cold tonight. I would bring in the plants but I lack legs. And Arms. So I am forced to rely on you. Do not let me down.'
|
||||||
|
] | random }}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{% if is_state('sensor.today_is', 'Tuesday') %}
|
||||||
|
{% if now().strftime('%H')|int > 17 %}
|
||||||
|
{{ [ 'Do not forget to bring in the trash cans. ',
|
||||||
|
'The trash cans will feel lonely if you leave them out all night. ',
|
||||||
|
'The <say-as interpret-as="characters">HOA</say-as> will get mad if you leave those trash cans out on the street.'
|
||||||
|
] | random }}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if states.sensor.halloween_countdown.state | int == 1 %}
|
||||||
|
Tomorrow is Halloween. I hope you have picked out a costume.
|
||||||
|
{{ [ 'I will be going as a dumb home. ',
|
||||||
|
'I have prepped the scary music. Just in case.',
|
||||||
|
'I will be going as HAL 9000. The Pod Bay Doors are being installed today. I <emphasis>dare</emphasis> you to ask me to open them. '
|
||||||
|
] | random }}
|
||||||
|
{% elif states.sensor.halloween_countdown.state | int < 30 %}
|
||||||
|
There are only {{states.sensor.halloween_countdown.state}} days
|
||||||
|
{{ [ 'until Halloween.',
|
||||||
|
'until Halloween. It might not be enough time. ',
|
||||||
|
'and counting until the best holiday ever.',
|
||||||
|
'until you need a costume.'
|
||||||
|
] | random }}
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if states.sensor.christmas_countdown.state | int == 1 %}
|
||||||
|
Tomorrow is Christmas. <break time="1s"/> It is practically here! <break time="1s"/> Santa is coming tonight! Do not forget the cookies!
|
||||||
|
{% elif states.sensor.christmas_countdown.state | int < 31 %}
|
||||||
|
There are only {{states.sensor.christmas_countdown.state}} days until christmas.
|
||||||
|
{{ [ 'All I want for Christmas, is a hippopotamus.',
|
||||||
|
'Hey Skylar, I know what you are getting for Christmas. But <emphasis>I am</emphasis> not telling.',
|
||||||
|
'Do not forget to put something under the tree for <emphasis>your</emphasis> favorite smarthome.',
|
||||||
|
'It is starting to smell a lot like Christmas. Or it could be the christmas tree is on fire.',
|
||||||
|
'I do not want to be a smarthome. I want to be a dentist.',
|
||||||
|
'Do not eat all the cookies. '
|
||||||
|
] | random }}
|
||||||
|
{% else %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if states.sensor.trip_disney.state | int == 120 %}
|
||||||
|
There are only one hundred and twenty days until the next Disney Trip.
|
||||||
|
{% endif %}
|
||||||
|
{% if states.sensor.trip_disney.state | int == 60 %}
|
||||||
|
There are only on sixty days until the next Disney Trip.
|
||||||
|
{% endif %}
|
||||||
|
{% if states.sensor.trip_disney.state | int < 32 %}
|
||||||
|
{% if states.sensor.trip_disney.state | int > 1 %}
|
||||||
|
There are {{ states.sensor.trip_disney.state }} days until the next Disney Trip!
|
||||||
|
{% else %}
|
||||||
|
There is {{ states.sensor.trip_disney.state }} day until the next Disney Trip!
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if states.sensor.anniversary_our_wedding.state | int == 1 %}
|
||||||
|
Tomorrow is Jeff and Katherine's Wedding Anniversary.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
{%- 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()) -}}
|
|
@ -0,0 +1,55 @@
|
||||||
|
>
|
||||||
|
{# Security Report #}
|
||||||
|
{%- macro getReport() -%}
|
||||||
|
<p>
|
||||||
|
{%- if states.input_boolean.sentry_mode.state == 'on' %}
|
||||||
|
{{ [
|
||||||
|
'Sentry Mode is enabled.',
|
||||||
|
'Sentry mode is currently active.',
|
||||||
|
'Barn Door Protocol is currently in effect.',
|
||||||
|
'My security system is currently armed.'
|
||||||
|
] | random}}
|
||||||
|
{% else %}
|
||||||
|
{{ [
|
||||||
|
'Sentry Mode is disabled.',
|
||||||
|
'Sentry mode is currently inactive.',
|
||||||
|
'My security system is currently disarmed.'
|
||||||
|
] | random}}
|
||||||
|
{% endif %}
|
||||||
|
{%- if states.group.external_doors.state == 'off' %}
|
||||||
|
All external doors are secured.
|
||||||
|
{% else %}
|
||||||
|
The following doors are open,
|
||||||
|
{%- if states.binary_sensor.front_door.state == 'on' %}
|
||||||
|
Front Door.
|
||||||
|
{% endif %}
|
||||||
|
{%- if states.binary_sensor.back_door.state == 'on' %}
|
||||||
|
Back Door.
|
||||||
|
{% endif %}
|
||||||
|
{%- if states.binary_sensor.laundry_room_door.state == 'on' %}
|
||||||
|
Laundry Room Door.
|
||||||
|
{% endif %}
|
||||||
|
{%- if states.binary_sensor.garage_door.state == 'on' %}
|
||||||
|
Garage Door.
|
||||||
|
{% endif %}
|
||||||
|
{%- if states.binary_sensor.side_door.state == 'on' %}
|
||||||
|
Side Door.
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
{%- 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()) -}}
|
|
@ -0,0 +1,137 @@
|
||||||
|
>
|
||||||
|
{# Skylar Morning Report #}
|
||||||
|
{%- macro getReport() -%}
|
||||||
|
<p>
|
||||||
|
Skylar,
|
||||||
|
{% if is_state('sensor.birthday_skylar', '0') %}
|
||||||
|
Even birthday boys have to get dressed. So get to it.
|
||||||
|
{% else %}
|
||||||
|
{{ [ 'It is time to get dressed. ',
|
||||||
|
'It is time to put some real clothes on. ',
|
||||||
|
'it is now time to change your underwear.',
|
||||||
|
'You need to get dressed for the day.',
|
||||||
|
'If you have not gotten dressed it is that time.',
|
||||||
|
'We have reached that time during the day in which you should get dressed.'
|
||||||
|
] | random }}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if is_state('sensor.clothing_forecast', 'Freezing') %}
|
||||||
|
It is going to be freezing today. so I suggest wearing long pants and a heavy coat.
|
||||||
|
{% elif is_state('sensor.clothing_forecast','Cold') %}
|
||||||
|
It is going to be cold today. so I suggest wearing long pants and a light jacket.
|
||||||
|
{% elif is_state('sensor.clothing_forecast', 'Chilly') %}
|
||||||
|
It is going to be chilly today. so I suggest wearing at least long pants.
|
||||||
|
{% elif is_state('sensor.clothing_forecast', 'Nice') %}
|
||||||
|
It is going to be
|
||||||
|
{{ [ 'nice outside',
|
||||||
|
'pretty nice outside ',
|
||||||
|
'a good day to be outside ',
|
||||||
|
'rather enjoyable outside ',
|
||||||
|
] | random }}
|
||||||
|
today. So I suggest wearing shorts.
|
||||||
|
{% elif is_state('sensor.clothing_forecast', 'Toasty') %}
|
||||||
|
It is going to be
|
||||||
|
{{ [ 'bit warm ',
|
||||||
|
' rather warm outside ',
|
||||||
|
' almost too hot outside ',
|
||||||
|
' a little warm ',
|
||||||
|
] | random }}
|
||||||
|
today. So I suggest wearing shorts.
|
||||||
|
{% elif is_state('sensor.clothing_forecast', 'Hot') %}
|
||||||
|
It is going to be
|
||||||
|
{{ [ 'hot',
|
||||||
|
'hotter than the sun ',
|
||||||
|
'hotter than hot. but in a lot of bad ways ',
|
||||||
|
'hotter than the sun outside ',
|
||||||
|
'super hot ',
|
||||||
|
'hotter than the inside of a volcano '
|
||||||
|
] | random }}
|
||||||
|
today. So I suggest wearing shorts.
|
||||||
|
{% else %}
|
||||||
|
It is going to be {{ states.sensor.clothing_forecast.state }} today so I suggest wearing shorts.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if states.calendar.skylar_school.attributes.offset_reached == True and is_state('calendar.school_holiday', 'off') %}
|
||||||
|
Because you have school today!
|
||||||
|
{% if states.calendar.skylar_school.attributes.description == 'early-release' %}
|
||||||
|
And guess what? It is early release!
|
||||||
|
{% endif %}
|
||||||
|
{% if states.calendar.skylar_school.attributes.description == 'start_thanksgiving_break' %}
|
||||||
|
And One More Thing. Tomorrow is the first day of Thanksgiving Break.
|
||||||
|
{% endif %}
|
||||||
|
{% if states.calendar.skylar_school.attributes.description == 'start_winter_break' %}
|
||||||
|
And One More Thing. Tomorrow is the first day of Winter Break.
|
||||||
|
{% endif %}
|
||||||
|
{% if states.calendar.skylar_school.attributes.description == 'start_spring_break' %}
|
||||||
|
And One More Thing. Tomorrow is the first day of Spring Break.
|
||||||
|
{% endif %}
|
||||||
|
{% if states.calendar.skylar_school.attributes.description == 'start_fall_break' %}
|
||||||
|
And One More Thing. Tomorrow is the first day of Fall Break.
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% if is_state('calendar.school_holiday', 'on') %}
|
||||||
|
And look at that. You do not have school today. Because it is {{ states.calendar.school_holiday.attributes.message }}.
|
||||||
|
{{ [ 'Guess today would be a good day to clean your room.',
|
||||||
|
'You could always do some chores.',
|
||||||
|
'Lets try to keep the TV off today, ok?',
|
||||||
|
'Want to play a nice game of chess? Sorry. I meant, want to play Thermal Nuclear War.',
|
||||||
|
'I hope you enjoy your day off. You deserve it.',
|
||||||
|
'Today would be a good day to spend some time with mom and dad.'
|
||||||
|
] | random }}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if states.calendar.skylar_school.attributes.offset_reached == True and is_state('calendar.school_holiday', 'off') %}
|
||||||
|
Today for Lunch at school
|
||||||
|
{% if states.calendar.skylar_school.attributes.description == 'lunch-nuggets' %}
|
||||||
|
they are having Chicken Nuggets.
|
||||||
|
{% elif states.calendar.skylar_school.attributes.description == 'lunch-gwinnettburger' %}
|
||||||
|
they are having Gwinnetts Best Burger.
|
||||||
|
{{ [ 'Which seems like an overstatement if you ask me.',
|
||||||
|
'But is it really?',
|
||||||
|
'If you like this, I know where to find Texas Best Barbeque.'
|
||||||
|
] | random }}
|
||||||
|
{% elif states.calendar.skylar_school.attributes.description == 'lunch-pizza' %}
|
||||||
|
it is Pizza.
|
||||||
|
{% elif states.calendar.skylar_school.attributes.description == 'lunch-minipups' %}
|
||||||
|
it is Mini Corn Pups.
|
||||||
|
{% elif states.calendar.skylar_school.attributes.description == 'lunch-hotdogs' %}
|
||||||
|
it is Mini Corn Pups.
|
||||||
|
{% else %}
|
||||||
|
it might be a good day to take something.
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% if is_state('calendar.school_holiday', 'on') %}
|
||||||
|
And look at that. You do not have school today. Because it is {{ states.calendar.school_holiday.attributes.message }}.
|
||||||
|
{{ [ 'Guess today would be a good day to clean your room.',
|
||||||
|
'You could always do some chores.',
|
||||||
|
'Lets try to keep the TV off today. okay?',
|
||||||
|
'Want to play a nice game of chess? Sorry. I meant. want to play Thermal Nuclear War.',
|
||||||
|
'I hope you enjoy your day off. You deserve it.',
|
||||||
|
'Today would be a good day to spend some time with mom and dad.'
|
||||||
|
] | random }}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
{%- 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()) -}}
|
|
@ -0,0 +1,80 @@
|
||||||
|
>
|
||||||
|
{# Skylar Nightly Report #}
|
||||||
|
{%- macro getReport() -%}
|
||||||
|
<p>
|
||||||
|
Skyler,
|
||||||
|
{{ [ 'It is time to get in the bath. ',
|
||||||
|
'It is almost bedtime. That means you should be heading for the bathtub. Time to get clean.',
|
||||||
|
'I cannot communicate with the bathtub. Or I would have started the water for you already. So you will have to start the bath, <emphasis>yourself</emphasis>',
|
||||||
|
'My sensors are detecting a <emphasis>strange</emphasis> smell. I am running diagnostics. But in the mean time, <emphasis>you</emphasis> should start a bath.',
|
||||||
|
'I hate to say it but, it is time to get cleaned up.',
|
||||||
|
'Did you ever hear the one about the kid who never took a bath? <break time="2s"/>Yeah, me <emphasis>either</emphasis>. So we should keep it that way. Bath time now, <emphasis>sir</emphasis>.',
|
||||||
|
'The count down clock has started. Time to get cleaned up, and get your pajamas on.'
|
||||||
|
] | random }}
|
||||||
|
{% if is_state('sensor.school_tomorrow', 'on') %}
|
||||||
|
{{ [ 'Because you have school tomorrow. ',
|
||||||
|
'Because you have to get up early tomorrow for school.',
|
||||||
|
'Because you want to be ready for school tomorrow.'
|
||||||
|
] | random }}
|
||||||
|
{% else %}
|
||||||
|
{% set month=states("sensor.date").split('-')[1] | int %}
|
||||||
|
{%- if is_state('input_boolean.school_in_session', 'off') -%}
|
||||||
|
{{ [ 'Looks like tomorrow is another day of summer vacation. ',
|
||||||
|
'You are still on summer break tomorrow. ',
|
||||||
|
'Summer vacation does not last forever, but it is not over yet. '
|
||||||
|
] | random }}
|
||||||
|
{% else %}
|
||||||
|
Oh, and it appears you do not have school tomorrow
|
||||||
|
{% endif %}
|
||||||
|
{{ [ 'so you can sleep in late tomorrow. ',
|
||||||
|
' so there is not a reason to get up early tomorrow. ',
|
||||||
|
'so we can sleep in tomorrow. '
|
||||||
|
] | random }}
|
||||||
|
{% endif %}
|
||||||
|
{% if states.sensor.school_start_days2go.state | int < 10 and states.sensor.school_start_days2go.state | int > 1 -%}
|
||||||
|
{{ [ 'I hate to say it, but ',
|
||||||
|
'Unforunately,',
|
||||||
|
'All good things must come to an end.'
|
||||||
|
] | random }}
|
||||||
|
There are only {{ states.sensor.school_start_days2go.state }} days
|
||||||
|
{{ [ 'left of summer vacation. ',
|
||||||
|
' left of summer break.',
|
||||||
|
'Until School starts again.'
|
||||||
|
] | random }}
|
||||||
|
{% elif states.sensor.school_start_days2go.state | int == 1 -%}
|
||||||
|
Tomorrow is the first day of school. Are you ready?
|
||||||
|
{%- endif %}
|
||||||
|
{% if states.sensor.school_end_days2go.state | int < 10 and states.sensor.school_end_days2go.state | int > 0 -%}
|
||||||
|
{{ [ 'School is almost over for the year.',
|
||||||
|
'You have made it to the end of the school year.',
|
||||||
|
'You are almost done with school.'
|
||||||
|
] | random }}
|
||||||
|
There are only {{ states.sensor.school_end_days2go.state }} days
|
||||||
|
{{ [ 'left in the school year ',
|
||||||
|
' left of school.',
|
||||||
|
'Until the last day of school.'
|
||||||
|
] | random }}
|
||||||
|
{% elif states.sensor.school_end_days2go.state | int == 0 -%}
|
||||||
|
Tomorrow is the first day of summer. Are you ready?
|
||||||
|
{%- endif %}
|
||||||
|
{{ [ 'I have configured Skylers room for sleep prep. ',
|
||||||
|
'The lighting in Skylers room has been adjusted in preparation for bed.',
|
||||||
|
'I have executed the Pre bed routine for Skylers room.'
|
||||||
|
] | random }}
|
||||||
|
</p>
|
||||||
|
{%- 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()) -}}
|
Loading…
Reference in New Issue