> {%- macro alert_battery_levels() -%} {%- for item in states if 'battery_level' in item.attributes and item.attributes.battery_level | int > 0 and item.attributes.battery_level | float <= 10.0 %} {{- item.attributes.friendly_name}} battery is less than 10 percent. {%- endfor %} {%- endmacro %} {# Birthday notifications #} {%- macro birthday_countdown(name, days2go) -%} {%if days2go != 'unknown' %} {%- if days2go |int == 0 -%} Today is {{name}}'s Birthday!. Happy Birthday to you, my dear {{name}}!!!. {%- elif days2go |int == 1 -%} Tomorrow is {{name}}'s Birthday! HURRAY!!! {%- elif days2go |int > 1 and days2go |int <= 10 -%} {{name}}'s Birthday is in {{days2go}} days! HURRAY!!! {%- endif -%} {%- endif -%} {%- endmacro -%} {%- macro tesla_status() -%} {% if states("sensor.tesla_model_3_5yj3e1ea8jf010610_range_sensor") != "unknown" %} {%- if (states('sensor.tesla_model_3_5yj3e1ea8jf010610_range_sensor') | int) | round(0) < 75 and (states('sensor.tesla_model_3_5yj3e1ea8jf010610_range_sensor') | int) | round(0) > 0 -%} Attention!. Your Tesla car battery is at {{ states('sensor.tesla_model_3_5yj3e1ea8jf010610_battery_sensor') }} percent. and you can only drive about {{ (states('sensor.tesla_model_3_5yj3e1ea8jf010610_range_sensor') | int) | round(0) }} miles. Please charge your car if you want to go anywhere. {%- endif -%} {% endif %} {%- endmacro -%} {# USPS mail notifications - only when I have 1 or more mails #} {%- macro USPS() -%} {% if now().hour | int <= 16 %} {%- if states("sensor.usps_mail") != "unknown" -%} {% if states('sensor.usps_mail') | int > 0 -%} {%- if states('sensor.usps_mail') | int == 1 -%} USPS is going to deliver {{ states('sensor.usps_mail') }} mail today. {%- else -%} USPS is going to deliver {{ states('sensor.usps_mail') }} mails today. {%- endif -%} {%- endif -%} {%- endif -%} {%- if states("sensor.usps_packages") != "unknown" -%} {%- if states('sensor.usps_packages') | int > 0 -%} {%- if states('sensor.usps_packages') | int == 1 -%} USPS is going to deliver {{ states('sensor.usps_packages') }} package today. {%- else -%} USPS is going to deliver {{ states('sensor.usps_packages') }} packages today. {%- endif -%} {%- endif -%} {%- endif -%} {% endif %} {%- endmacro -%} {# Calendar notifications #} {%- macro calendar_reminder() -%} {% set days2NextEvent = 0 %} {% if state_attr('calendar.suresh_kalavala', 'start_time') != None and state_attr('calendar.suresh_kalavala', 'message') != None %} {% if now().year == strptime(states.calendar.suresh_kalavala.attributes.start_time, '%Y-%m-%d %H:%M:%S').year %} {% set days2NextEvent = strptime(states.calendar.suresh_kalavala.attributes.start_time, '%Y-%m-%d %H:%M:%S').strftime('%j') | int - (now().strftime('%j') | int) %} {% else %} {% set days2NextEvent = strptime((now().year ~ "-12-31 12:02:05"), '%Y-%m-%d %H:%M:%S').strftime('%j') | int - (now().strftime('%j') | int) + (strptime(states.calendar.suresh_kalavala.attributes.start_time, '%Y-%m-%d %H:%M:%S').strftime('%j') | int) -%} {% endif -%} {% if days2NextEvent <= states('input_number.calendar_remind_before_days') | int %} Your next event. {{ states.calendar.suresh_kalavala.attributes.message }} . starts {% if days2NextEvent == 0 | int %} today at {{ strptime(states.calendar.suresh_kalavala.attributes.start_time, '%Y-%m-%d %H:%M:%S').strftime('%I:%M %p') }}. {% elif days2NextEvent == 1 %} tomorrow at {{ strptime(states.calendar.suresh_kalavala.attributes.start_time, '%Y-%m-%d %H:%M:%S').strftime('%I:%M %p') }}. {% elif days2NextEvent == 2 %} day after tomorrow {{ strptime(states.calendar.suresh_kalavala.attributes.start_time, '%Y-%m-%d %H:%M:%S').strftime('%A') }} at {{ strptime(states.calendar.suresh_kalavala.attributes.start_time, '%Y-%m-%d %H:%M:%S').strftime('%I:%M %p') }}. {% else %} in {{ days2NextEvent }} days. {% endif %} {% endif %} {% endif %} {%- endmacro -%} {# Indian Holidays notifications #} {%- macro IndianHolidays() -%} {% set days2NextEvent = 0 %} {% if state_attr('calendar.holidays_in_india', 'start_time') != None and state_attr('calendar.holidays_in_india', 'message') != None %} {% if now().year == strptime(states.calendar.holidays_in_india.attributes.start_time, '%Y-%m-%d %H:%M:%S').year %} {% set days2NextEvent = strptime(states.calendar.holidays_in_india.attributes.start_time, '%Y-%m-%d %H:%M:%S').strftime('%j') | int - (now().strftime('%j') | int) %} {% else %} {% set days2NextEvent = strptime((now().year ~ "-12-31 12:02:05"), '%Y-%m-%d %H:%M:%S').strftime('%j') | int - (now().strftime('%j') | int) + (strptime(states.calendar.holidays_in_india.attributes.start_time, '%Y-%m-%d %H:%M:%S').strftime('%j') | int) -%} {% endif -%} {% if days2NextEvent <= (states('input_number.calendar_remind_before_days') | int) %} {% if days2NextEvent == 0 | int %} Today is {{ states.calendar.holidays_in_india.attributes.message | replace(".", "")}}. {%- elif days2NextEvent == 1 %} Tomorrow is {{ states.calendar.holidays_in_india.attributes.message | replace(".", "")}}. {%- elif days2NextEvent == 2 -%} {{ states.calendar.holidays_in_india.attributes.message | replace(".", "") }}. is day after tomorrow. {%- else -%} {{ states.calendar.holidays_in_india.attributes.message | replace(".", "") }}. is in {{ days2NextEvent }} days. {%- endif -%} {%- endif %} {%- endif %} {%- endmacro -%} {# USA Holidays notifications #} {%- macro USHolidays() -%} {% set days2NextEvent = 0 %} {% if state_attr('calendar.holidays_in_united_states', 'start_time') != None and state_attr('calendar.holidays_in_united_states', 'message') != None %} {% if now().year == strptime(states.calendar.holidays_in_united_states.attributes.start_time, '%Y-%m-%d %H:%M:%S').year %} {% set days2NextEvent = strptime(states.calendar.holidays_in_united_states.attributes.start_time, '%Y-%m-%d %H:%M:%S').strftime('%j') | int - (now().strftime('%j') | int) %} {% else %} {% set days2NextEvent = strptime((now().year ~ "-12-31 12:02:05"), '%Y-%m-%d %H:%M:%S').strftime('%j') | int - (now().strftime('%j') | int) + (strptime(states.calendar.holidays_in_united_states.attributes.start_time, '%Y-%m-%d %H:%M:%S').strftime('%j') | int) -%} {% endif -%} {% if days2NextEvent <= (states('input_number.calendar_remind_before_days') | int) %} {% if days2NextEvent == 0 | int %} Today is {{ states.calendar.holidays_in_united_states.attributes.message | replace(".", "")}}. {%- elif days2NextEvent == 1 %} Tomorrow is {{ states.calendar.holidays_in_united_states.attributes.message | replace(".", "")}}. {%- elif days2NextEvent == 2 -%} {{ states.calendar.holidays_in_united_states.attributes.message | replace(".", "")}} is day after tomorrow. {%- else -%} {{ states.calendar.holidays_in_united_states.attributes.message | replace(".", "")}} is in {{ days2NextEvent }} days. {%- endif -%} {%- endif %} {%- endif %} {%- endmacro -%} {# Only notify when high levels of UV #} {%- macro uv_levels() -%} {%- set uv = states('sensor.current_uv_index') | int -%} {%- if uv >= 6 and uv <= 7 -%} Current UV index is high. Please be careful outdoors. {%- elif uv >= 8 and uv <= 10 -%} Current UV index is very high. It is not advised to go out. {%- elif uv >= 11 -%} Current UV index is extremely high. It is highly advised to stay indoors. {%- endif -%} {%- endmacro -%} {# weather summary #} {%- macro weather_update() -%} {%- if states('sensor.dark_sky_minutely_summary') |lower != "unknown" -%} {%- if '.' in states('sensor.dark_sky_minutely_summary') -%} It is going to be {{ states('sensor.dark_sky_minutely_summary') |replace("min.", "minutes") -}}. {%- else -%} It is going to be {{ states('sensor.dark_sky_minutely_summary') }}. {%- endif -%} {%- endif -%} {%- if states('sensor.dark_sky_apparent_temperature') | lower != "unknown" -%} Outside temperature is {{ states('sensor.dark_sky_apparent_temperature') | round(0) }} degrees. {%- endif -%} {%- if states('sensor.cold_flu_forecasted_average') | float > 8.0 %} Cold and Flu index is High. Please take extra caution!. {%- endif -%} {%- endmacro -%} {# Only notify pollen levels in spring #} {%- macro pollen_levels() -%} {% if states('sensor.season') | lower == "spring" %} Pollen level for today is {{ state_attr('sensor.allergy_index_today', 'rating') | replace("/", " to " ) -}}. {%- if states('sensor.allergy_index_tomorrow') | float > 7.0 -%} Tomorrow's pollen levels are going to be Medium to High. {%- endif -%} {% endif %} {%- endmacro -%} {# Drone Flying Weather #} {%- macro drone_weather() -%} {% if states('binary_sensor.good_weather_to_fly_drones')| lower == "on" and states('device_tracker.life360_suresh') == "home" and states('sun.sun') == "above_horizon" %} It is now a great weather to fly drone outside. {% endif %} {%- endmacro -%} {# Check for low humidity levels in autumn, winter and high levels during rest of the year #} {# exclude weather service humidity sensors 'pws' from the loop #} {%- macro humidity_status() -%} {%- if states('sensor.season') | lower == "autumn" or states('sensor.season') | lower == "winter" %} {%- if states('sensor.dining_room_thermostat_humidity') | int < 30 -%} Home humidity is less than 30%. {%- endif -%} {% else %} {%- if states('sensor.dining_room_thermostat_humidity') | default(0) | int > 60 -%} Home humidity is more than 60%. {%- endif -%} {%- endif -%} {%- endmacro -%} {# a macro that removes all newline characters, empty spaces, and returns formatted text #} {%- macro cleanup(data) -%} {%- for item in data.split("\n") if item | trim != "" -%} {{ item | trim }} {% endfor -%} {%- endmacro -%} {# a macro to call all macros :) #} {%- macro mother_of_all_macros() -%} It is {{ now().strftime("%I:%M %p") }}. {{ USHolidays() }} {{ weather_update() }} {{ pollen_levels() }} {{ uv_levels() }} {{ humidity_status() }} {{ calendar_reminder() }} {{ IndianHolidays() }} {{ alert_battery_levels() }} {{ USPS() }} {{ tesla_status() }} {{ drone_weather() }} {{ birthday_countdown("Mallika", states('input_label.mallika_birthday_days2go')) }} {{ birthday_countdown("Srinika", states('input_label.srinika_birthday_days2go')) }} {{ birthday_countdown("Hasika", states('input_label.hasika_birthday_days2go')) }} {%- endmacro -%} {# Call the macro #} {{- cleanup(mother_of_all_macros()) -}}