Home-AssistantConfig/script/voice_notify.yaml

214 lines
8.3 KiB
YAML
Executable File

######################################################################################################
###Script to send notifications to the ChromeCast Audios during normal hours and only when we are home! Call like this:
# action:
# service: script.Voice_notify
# data_template:
# value1: 'Startup: Home Assistant is Up and Running!'
# OR
# value1: "{{ trigger.to_state.state }}"
# # @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
######################################################################################################
voice_notify:
sequence:
- condition: and
conditions:
- condition: or
conditions:
- condition: state
entity_id: group.family
state: 'home'
- condition: state
entity_id: input_boolean.guest_mode
state: 'on'
- condition: or
conditions:
- condition: time
after: '09:00:00'
before: '21:30:00'
- condition: state
entity_id: input_boolean.alert_mode
state: 'on'
- condition: or
conditions:
- condition: template
value_template: >
{% if is_state('media_player.livingroomCC', 'playing') %}
false
{% elif is_state('media_player.whole_house', 'playing') %}
false
{% else %}
true
{% endif %}
- condition: state
entity_id: input_boolean.alert_mode
state: 'on'
- condition: state
entity_id: input_boolean.speech_notifications
state: 'on'
- service: switch.turn_on
entity_id: switch.living_room_amp
- service: media_player.turn_on
entity_id: media_player.livingroomCC
- service: media_player.volume_set
entity_id:
- media_player.livingroomCC
data_template:
volume_level: >
{% if now().strftime("%H")|int < 12 and now().strftime("%H")|int > 6%}
0.3
{% elif now().strftime("%H")|int > 12 and now().strftime("%H")|int < 20%}
0.55
{% else %}
0.3
{% endif %}
- service: tts.amazon_polly_say
entity_id: media_player.livingroomCC
data_template:
message: >
<speak>
{% if call_no_announcement != 1 %}
{% 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 %}
{% endif %}
{%- macro responsibilities() -%}
{%if now().strftime("%a") == 'Wed' or now().strftime("%a") == 'Sun'%}
Today is {{now().strftime("%A")}} and {{now().strftime("%A")}} is garbage day.
{%endif%}
{%if now().strftime("%a") == 'Wed'%}
Both Recycling and regular Garbage goes out. Please take out all of the garbage cans tonight.
{%endif%}
{% if now().strftime("%j")|int % 2 != 0 %}
Today is Justin's day to do the chores.
{% else %}
Today is Paige's day to do the chores.
{%endif%}
{%- endmacro -%}
{%- macro inside_weather() -%}
Inside the house, it is {{ states.climate.downstairs.attributes["current_temperature"]}} degrees with around {{states('sensor.downstairs_thermostat_humidity')}} percent humidity.
{%- endmacro -%}
{%- macro outside_weather() -%}
Outside, it is going to be {{states('sensor.dark_sky_minutely_summary')}}
{%- endmacro -%}
{# *********** This macro looks for High UV rays and lets us know if it is before 2pm #}
{%- macro uv_rays() -%}
{% if now().strftime("%H")|int > 8 and now().strftime("%H")|int < 16%}
{% if state.sensor.uv_index.states|int <= 4 %}
The U V index today will be very mild today.
{% elif states.sensor.uv_index.state|int > 4 and states.sensor.uv_index.state|int <=7 %}
The U V index will be {{states('sensor.uv_index')}} today. This is considered high.
Be sure to drink lots of water and put on suntan lotion if you will be in the sun.
{% elif states.sensor.uv_index.state|int > 7 and states.sensor.uv_index.state|int <=10 %}
The U V index will be {{states(sensor.uv_index)}} today. This is considered very high.
Be sure to drink lots of water and put on suntan lotion often today.
You could get a sunburn in about {{states('sensor.uv_burn_time')}} minutes.
{% endif %}
{{states('sensor.uv_sun_advice')}}
{% endif %}
{%- endmacro -%}
{%- macro lights_status() -%}
. There are
{% for state in states.light if state.state == 'on' -%}
{%- if loop.last -%}
{{ loop.index }}
{%- endif -%}
{%- endfor %} lights on right now.
{% set comma = joiner(', ') %} The
{% for group in states.group|groupby('state') -%}
{%- for entity in group.list if entity.state == 'on' and entity.name.split(' ')[1]|lower == 'lights' and entity.name.split(' ')[0]|lower != 'all' and entity.name.split(' ')[0]|lower != 'interior' -%}
{{ ' and' if loop.last and not loop.first else comma() }}
{{ entity.name }}
{%- endfor -%}
{%- endfor %}
{%- endmacro -%}
{% macro garage_check() %}
{% if is_state('cover.large_garage', 'open') -%}
The Large Garage Door is still open
{% endif -%}
{% if is_state('cover.small_garage', 'open') -%}
{% if is_state('cover.large_garage', 'open') -%}and
{%- endif %} The small Garage Door is still open.
{% endif %}
{%- endmacro -%}
{% macro medicine() %}
{% if is_state('input_boolean.medicine', 'off') -%}
It looks like Carlo has not taken his medicine yet. Please make sure Carlo takes his medicine now.
{% endif -%}
{%- endmacro -%}
{% macro iss() %}
{% if is_state('binary_sensor.iss', 'on') -%}
Here is something interesting. The international space station is above us now. There are {{ states.binary_sensor.iss.attributes["number_of_people_in_space"]}} people in space right now.
{{outside_weather()}}
{% endif -%}
{%- endmacro -%}
{% macro pihole() %}
{% if states.sensor.pihole_ads_blocked_today.state|int > 1000 -%}
Our internet blocking system has blocked {{states.sensor.pihole_ads_blocked_today.state}} ads today!
Happy Internet surfing!
{% endif -%}
{%- endmacro -%}
{# ********************************************* #}
{# ******** Start the Speech routines ******* #}
{# #}
{# ********************************************* #}
{{ personarriving }} {# Called from Annoucenments #}
{{ NestStatus}} {# Called from Nest when thermostats turn on #}
{% if call_inside_weather == 1 %}
{{inside_weather()}}
{%endif%}
{% if call_outside_weather == 1 %}
{{outside_weather()}}
{%endif%}
{{uv_rays()}}
{{ DoorOpened }}
{{ DoorClosed }}
{% if call_garage_check == 1 or is_state('sun.sun', 'below_horizon') %}
{{garage_check()}}
{%endif%}
{{ NewDevice}}
{% if is_state('input_boolean.lights_status', 'on') %}
{{lights_status()}}
{%endif%}
{% if call_responsibilities == 1%}
{{responsibilities()}}
{%endif%}
{% if now().strftime("%H")|int > 22 %}
{{Medicine()}}
{%endif%}
{{ value1 }}
{{ iss() }}
{{ pihole() }}
</speak>
cache: true
- service: input_boolean.turn_off
entity_id:
- input_boolean.alert_mode
- input_boolean.home_stats
- input_boolean.responsibilities
- input_boolean.lights_status