weather: - platform: template name: "Iron Nerd Weather Station" condition_template: "{{ states('weather.iron_nerd_studios') }}" temperature_template: "{{ states('sensor.pirateweather_temperature') | float }}" temperature_unit: °F humidity_template: "{{ states('sensor.pirateweather_humidity') | float }}" forecast_template: "{{ state_attr('weather.openweathermap', 'forecast') }}" pressure_template: "{{ states('sensor.kdfi_barometric_pressure') | float }}" pressure_unit: inHg wind_speed_template: "{{ states('sensor.pirateweather_wind_speed') | float }}" wind_speed_unit: mph wind_bearing_template: "{{ states('sensor.pirateweather_wind_bearing') | float }}" visibility_template: "{{ states('sensor.kdfi_visibility') | float }}" visibility_unit: mi attribution_template: "Weather data from Iron Nerd's custom weather station template" ozone_template: "{{ states('sensor.pirateweather_ozone') | float }}" precipitation_unit: in template: - binary_sensor: - name: Heat Threshold unique_id: 849a08bb-d4e6-40e9-ae42-50f7fb71b727 state: > {% set temp = states('sensor.pirateweather_temperature') | int %} {% set threshold = states('input_number.hot_day_threshold') | int %} {% if temp >= threshold %} true {% else %} false {% endif %} device_class: heat attributes: current_temp: "{{ states('sensor.pirateweather_temperature') | int }}" threshold: "{{ states('input_number.hot_day_threshold') | int }}" - name: Heat Index Threshold unique_id: aae2cd89-dde2-4557-923c-b476d1b49b88 state: > {% set feelslike = states('sensor.pirateweather_apparent_temperature') | int %} {% set threshold = states('input_number.heat_index_threshold') | int %} {% if feelslike >= threshold %} true {% else %} false {% endif %} device_class: heat attributes: current_temp: "{{ states('sensor.pirateweather_apparent_temperature') | int }}" threshold: "{{ states('input_number.heat_index_threshold') | int }}" - name: Cold Threshold unique_id: a7c97b91-6d42-433a-a96b-94e39c58d63f state: > {% set temp = states('sensor.pirateweather_temperature') | int %} {% set threshold = states('input_number.cold_day_threshold') | int %} {% if temp <= threshold %} true {% else %} false {% endif %} device_class: cold attributes: current_temp: "{{ states('sensor.pirateweather_temperature') | int }}" threshold: "{{ states('input_number.cold_day_threshold') | int }}" - name: Overnight Low Threshold unique_id: 6869e6eb-c8a6-43c8-aa4d-4d50659811b8 state: > {% set temp = states('sensor.pirateweather_temperature') | int %} {% set threshold = states('input_number.overnight_low_threshold') | int%} {% if temp <= threshold %} true {% else %} false {% endif %} device_class: cold attributes: current_temp: "{{ states('sensor.pirateweather_temperature') | int }}" threshold: "{{ states('input_number.overnight_low_threshold') | int }}" - name: Wind Chill Threshold unique_id: c734b642-b85d-465c-b3c3-aadbe4a00dc1 state: > {% set feelslike = states('sensor.pirateweather_apparent_temperature') | int %} {% set threshold = states('input_number.wind_chill_threshold') | int %} {% if feelslike <= threshold %} true {% else %} false {% endif %} device_class: cold attributes: current_temp: "{{ states('sensor.pirateweather_temperature') | int }}" threshold: "{{ states('input_number.wind_chill_threshold') | int }}" sensor: - platform: weatheralerts state: OH zone: 4 county: 39 # - platform: statistics # unique_id: b5996cb4-b715-4fc9-b3d8-98fc12c2b7dd # name: Outside Temp Average # entity_id: sensor.pirateweather_temperature # state_characteristic: average_linear # max_age: # days: 7 # - platform: statistics # unique_id: 6192c95a-8fd1-4ba0-87de-d06fdc071d6b # name: Apparent Temp Average # entity_id: sensor.pirateweather_apparent_temperature # state_characteristic: average_linear # max_age: # days: 7 # - platform: statistics # unique_id: 7b9c269c-40b7-4255-a051-2d1b7a6af017 # name: Wind Speed Average # entity_id: sensor.pirateweather_wind_speed # state_characteristic: average_linear # max_age: # days: 7 # - platform: statistics # unique_id: b43d053f-aafb-4237-a742-a2ca841498fa # name: Visibility Stats Average # entity_id: sensor.kdfi_visibility # state_characteristic: average_linear # max_age: # days: 7 # - platform: statistics # unique_id: b1206da2-fa00-4f7d-9af4-f2cf6794bd24 # name: Humidity Stats Average # entity_id: sensor.pirateweather_humidity # state_characteristic: average_linear # max_age: # days: 7 - platform: template sensors: current_forecast: friendly_name: Current Forecast unique_id: c0faea33-2ac3-40f1-8558-584c3f5d6b16 icon_template: mdi:weather-sunny value_template: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %} {{ forecast.condition }} attribute_templates: high_temp: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %} {{ forecast.temperature }} overnight_low: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %} {{ forecast.templow }} wind_bearing: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %} {{ forecast.wind_bearing }} wind_speed: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %} {{ forecast.wind_speed }} precipitation: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %} {{ forecast.precipitation }} current_forecast_detail: friendly_name: Current Forecast Detail unique_id: e5ae9864-70b5-402c-9d2f-c4d6a10085df icon_template: mdi:weather-sunny value_template: >- {%- macro getReport() -%} {{ [ 'Today in Defiance ', 'Later Today ', 'For the rest of the day ' ] | random }} expect a high of {{ states('sensor.todays_high_temp') }} {%- if states('sensor.current_forecast') == 'sunny' and is_state('binary_sensor.night','off')%} {{ [ 'and sunny. ', 'with sun. ', 'with sunny conditions prevailing. ' ] | random }} {%- elif states('sensor.current_forecast') == 'sunny' and is_state('binary_sensor.night','on') %} {{ [ 'and clear. ', 'with clear skies. ' ] | random }} {%- elif states('sensor.current_forecast') == 'clear-night' %} {{ [ 'and clear. ', 'with clear skies. ' ] | random }} {%- elif states('sensor.current_forecast') == 'rainy' %} {{ [ 'with rain. ', 'with showers. ', 'and rainy. ' ] | random }} {{ [ 'Rainfall accumulations ', 'Total Rainfall amounts ' ] | random }} near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.current_forecast') == 'snowy' %} {{ [ 'with snow. ', 'with snow showers. ' ] | random }} {{ [ 'Snowfall accumulations ', 'Total snowfall amounts ' ] | random }} near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.current_forecast') == 'snowy-rainy' %} {{ [ 'with mix preciptation possible. ', 'with snow and rain showers. ' ] | random }} Total accumulation near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.current_forecast') == 'windy' %} {{ [ 'and windy. ', 'with lots of wind. ' ] | random }} {%- elif states('sensor.current_forecast') == 'fog' %} {{ [ 'and foggy. ', 'with some fog. ' ] | random }} {% elif states('sensor.current_forecast') == 'cloudy' %} {{ [ 'with clouds. ', 'with cloudy skies. ' ] | random }} {% elif states('sensor.current_forecast') == 'partlycloudy' %} {{ [ 'with some clouds. ', 'with partly cloudy skies. ', 'with scattered clouds ' ] | random }} {%- elif states('sensor.current_forecast') == 'hail' %} {{ [ 'with severe thunderstorms possible. ', 'with hail possible. ' ] | random }} {{ [ 'Rainfall accumulations ', 'Total Rainfall amounts ' ] | random }} near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.current_forecast') == 'lightning' %} {{ [ 'with thunderstorms possible. ', 'with the potential of thunderstorms. ' ] | random }} {{ [ 'Rainfall accumulations ', 'Total Rainfall amounts ' ] | random }} near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {% endif -%} {{ [ 'Later tonight expect a low of ', 'Overnight expect a low of ' ] | random }} {{ states('sensor.tonights_low_temp') }} degrees. {%- 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()) -}} tomorrow_forecast: friendly_name: Tomorrows Forecast unique_id: a8ae26b0-ed26-4568-bb2b-f7c72707b009 icon_template: mdi:weather-sunny value_template: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[1] %} {{ forecast.condition }} attribute_templates: high_temp: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[1] %} {{ forecast.temperature }} overnight_low: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[1] %} {{ forecast.templow }} wind_bearing: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[1] %} {{ forecast.wind_bearing }} wind_speed: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[1] %} {{ forecast.wind_speed }} precipitation: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[1] %} {{ forecast.precipitation }} tomorrow_forecast_detail: friendly_name: Tomorrow Forecast Detail unique_id: 21374ed0-80d1-49ba-817d-3e93eb3865e4 icon_template: mdi:weather-sunny value_template: >- {%- macro getReport() -%} {{ [ 'Tomorrow in Defiance ', 'For the next day ', 'Tomorrow ' ] | random }} expect a high of {{ state_attr('sensor.tomorrow_forecast','high_temp') }} {%- if states('sensor.tomorrow_forecast') == 'sunny' %} {{ [ 'and sunny. ', 'with sun. ', 'with sunny conditions prevailing. ' ] | random }} {%- elif states('sensor.tomorrow_forecast') == 'rainy' %} {{ [ 'with rain. ', 'with showers. ', 'and rainy. ' ] | random }} {{ [ 'Rainfall accumulations ', 'Total Rainfall amounts ' ] | random }} near {{ state_attr('sensor.tomorrow_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.tomorrow_forecast') == 'snowy' %} {{ [ 'with snow. ', 'with snow showers. ' ] | random }} {{ [ 'Snowfall accumulations ', 'Total snowfall amounts ' ] | random }} near {{ state_attr('sensor.tomorrow_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.tomorrow_forecast') == 'snowy-rainy' %} {{ [ 'with mix preciptation possible. ', 'with snow and rain showers. ' ] | random }} Total accumulation near {{ state_attr('sensor.tomorrow_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.tomorrow_forecast') == 'windy' %} {{ [ 'and windy. ', 'with lots of wind. ' ] | random }} {%- elif states('sensor.current_forecast') == 'fog' %} {{ [ 'and foggy. ', 'with some fog. ' ] | random }} {% elif states('sensor.tomorrow_forecast') == 'cloudy' %} {{ [ 'with clouds. ', 'with cloudy skies. ' ] | random }} {% elif states('sensor.tomorrow_forecast') == 'partlycloudy' %} {{ [ 'with some clouds. ', 'with partly cloudy skies. ', 'with scattered clouds ' ] | random }} {%- elif states('sensor.tomorrow_forecast') == 'hail' %} {{ [ 'with severe thunderstorms possible. ', 'with hail possible. ' ] | random }} {{ [ 'Rainfall accumulations ', 'Total Rainfall amounts ' ] | random }} near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.current_forecast') == 'lightning' %} {{ [ 'with thunderstorms possible. ', 'with the potential of thunderstorms. ' ] | random }} {{ [ 'Rainfall accumulations ', 'Total Rainfall amounts ' ] | random }} near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {% endif -%} {{ [ ' Tomorrow night expect a low of ' ] | random }} {{ state_attr('sensor.tomorrow_forecast','overnight_low') }} degrees. {%- 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()) -}} current_conditions: friendly_name: Current Conditions unique_id: 70db7e57-08db-48b2-919b-03b5face37b9 icon_template: mdi:weather-sunny value_template: >- {%- macro getReport() -%} The Weather in Defiance {{ [ ' is ', ' is currently ' ] | random }} {{states('sensor.pirateweather_temperature')|round}} degrees {% if is_state('weather.iron_nerd_weather_station', 'rainy') %} {{ [ 'with rain. ', 'with showers. ' ] | random }} {% elif is_state('weather.iron_nerd_weather_station', 'cloudy') %} {{ [ 'with clouds. ', 'with cloudy skies. ' ] | random }} {% elif is_state('weather.iron_nerd_weather_station', 'partlycloudy') %} {{ [ 'with some clouds. ', 'with partly cloudy skies. ', 'with scatterd clouds ' ] | random }} {% elif is_state('weather.iron_nerd_weather_station', 'sunny') %} {% if is_state('sun.sun', 'above_horizon') %} {{ [ 'and sunny. ', 'with sun. ' ] | random }} {% else %} {{ [ 'and clear. ', 'with clear skies. ' ] | random }} {% endif %} {% else %} and {{ states.weather.iron_nerd_weather_station.state }} {% endif %} {%- endmacro -%} {# a macro that removes all newline characters, empty spaces, and returns formatted text #} {%- macro cleanup(data) -%} {%- for item in data.split("\n") if item | trim != "" -%} {{ item | trim }} {% endfor -%} {%- endmacro -%} {# a macro to call all macros :) #} {%- macro mother_of_all_macros() -%} {{ getReport() }} {%- endmacro -%} {# Call the macro #} {{- cleanup(mother_of_all_macros()) -}} current_conditions_detail: friendly_name: Current Conditions Detail unique_id: 2b3687d1-bdd5-4551-8c0a-05b1ff617543 icon_template: mdi:weather-sunny value_template: >- {%- macro getReport() -%} The Weather in Defiance {{ [ ' is ', ' is currently ' ] | random }} {{states('sensor.pirateweather_temperature')|round}} degrees {% if is_state('weather.iron_nerd_weather_station', 'rainy') %} {{ [ 'with rain. ', 'with showers. ' ] | random }} {% elif is_state('weather.iron_nerd_weather_station', 'cloudy') %} {{ [ 'with clouds. ', 'with cloudy skies. ' ] | random }} {% elif is_state('weather.iron_nerd_weather_station', 'partlycloudy') %} {{ [ 'with some clouds. ', 'with partly cloudy skies. ', 'with scattered clouds. ' ] | random }} {% elif is_state('weather.iron_nerd_weather_station', 'sunny') %} {% if is_state('sun.sun', 'above_horizon') %} {{ [ 'and sunny. ', 'with sun. ' ] | random }} {% else %} {{ [ 'and clear. ', 'with clear skies. ' ] | random }} {% endif %} {% else %} and {{ states.weather.iron_nerd_weather_station.state }} {% endif %} {%- if is_state('binary_sensor.night','off')%} {{ [ 'Later Today ', 'For the rest of the day ' ] | random }} expect a high of {{ states('sensor.todays_high_temp') }} {%- if states('sensor.current_forecast') == 'sunny' and is_state('binary_sensor.night','off')%} {{ [ 'and sunny. ', 'with sun. ', 'with sunny conditions prevailing. ' ] | random }} {%- elif states('sensor.current_forecast') == 'sunny' and is_state('binary_sensor.night','on') %} {{ [ 'and clear. ', 'with clear skies. ' ] | random }} {%- elif states('sensor.current_forecast') == 'clear-night' %} {{ [ 'and clear. ', 'with clear skies. ' ] | random }} {%- elif states('sensor.current_forecast') == 'rainy' %} {{ [ 'with rain. ', 'with showers. ', 'and rainy. ' ] | random }} {{ [ 'Rainfall accumulations ', 'Total Rainfall amounts ' ] | random }} near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.current_forecast') == 'snowy' %} {{ [ 'with snow. ', 'with snow showers. ' ] | random }} {{ [ 'Snowfall accumulations ', 'Total snowfall amounts ' ] | random }} near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.current_forecast') == 'snowy-rainy' %} {{ [ 'with mix preciptation possible. ', 'with snow and rain showers. ' ] | random }} Total accumulation near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.current_forecast') == 'windy' %} {{ [ 'and windy. ', 'with lots of wind. ' ] | random }} {%- elif states('sensor.current_forecast') == 'fog' %} {{ [ 'and foggy. ', 'with some fog. ' ] | random }} {% elif states('sensor.current_forecast') == 'cloudy' %} {{ [ 'with clouds. ', 'with cloudy skies. ' ] | random }} {% elif states('sensor.current_forecast') == 'partlycloudy' %} {{ [ 'with some clouds. ', 'with partly cloudy skies. ', 'with scattered clouds. ' ] | random }} {%- elif states('sensor.current_forecast') == 'hail' %} {{ [ 'with severe thunderstorms possible. ', 'with hail possible. ' ] | random }} {{ [ 'Rainfall accumulations ', 'Total Rainfall amounts ' ] | random }} near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {%- elif states('sensor.current_forecast') == 'lightning' %} {{ [ 'with thunderstorms possible. ', 'with the potential of thunderstorms. ' ] | random }} {{ [ 'Rainfall accumulations ', 'Total Rainfall amounts ' ] | random }} near {{ state_attr('sensor.current_forecast','precipitation') }} inches {{ 'possible. ' }} {% endif -%} {{ [ 'Later tonight expect a low of ', 'Overnight expect a low of ' ] | random }} {{ states('sensor.tonights_low_temp') }} degrees. {%- else -%} {{ [ 'Tonight expect a low of ', 'Overnight expect a low of ' ] | random }} {{ states('sensor.tonights_low_temp') }} degrees. {% endif %} {%- endmacro -%} {# a macro that removes all newline characters, empty spaces, and returns formatted text #} {%- macro cleanup(data) -%} {%- for item in data.split("\n") if item | trim != "" -%} {{ item | trim }} {% endfor -%} {%- endmacro -%} {# a macro to call all macros :) #} {%- macro mother_of_all_macros() -%} {{ getReport() }} {%- endmacro -%} {# Call the macro #} {{- cleanup(mother_of_all_macros()) -}} outside_pressure: friendly_name: 'Outside Pressure' unique_id: ac2944bb-e9d7-40a3-9707-ef477fd5f309 value_template: '{{ state_attr(''weather.iron_nerd_weather_station'',''pressure'') }}' unit_of_measurement: '' todays_high_temp: friendly_name: "Today's High Temp" unique_id: 532904af-940b-45cd-af8e-c69d1a9c4531 unit_of_measurement: '°F' device_class: temperature value_template: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %} {{ forecast.temperature }} tonights_low_temp: friendly_name: "Tonight's Low Temp" unique_id: 8ddc55b6-4728-4897-a32f-90be970f744b unit_of_measurement: '°F' device_class: temperature value_template: >- {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %} {{ forecast.templow }} clothing_forecast: friendly_name: "Clothing Forecast" unique_id: 8ed2684b-d0ad-402c-bc3c-340cb9b2437a value_template: >- {% if is_state('binary_sensor.overnight', 'off') %} {% set temp = states('sensor.todays_high_temp')|int %} {% else %} {% set temp = states('sensor.pirateweather_temperature')|round %} {% endif %} {%- if states('sensor.todays_high_temp')|int > 63 %} {%- if states('sensor.todays_high_temp')|int < 80 %} Nice {% elif states('sensor.todays_high_temp')|int > 90 %} Hot {% else %} Toasty {%- endif %} {% elif states('sensor.todays_high_temp')|int < 64 %} {%- if states('sensor.todays_high_temp')|int < 32 %} Freezing {% elif states('sensor.todays_high_temp')|int > 48 %} Chilly {% else %} Cold {%- endif %} {% else %} Unknown {%- endif %} clothing_forecast_detail: friendly_name: "Clothing Forecast Detail" unique_id: 13065f50-5eef-4afd-830e-2a2c87f47496 value_template: >- {%- macro getReport() -%} {% if is_state('binary_sensor.morning','on') %} Based on the forecasted high temperature, {% if is_state('sensor.clothing_forecast', 'Freezing') %} You're gonna freeze your balls off out there. so I suggest wearing long pants and a heavy coat. {% elif is_state('sensor.clothing_forecast','Cold') %} It's gonna be cold as balls today. so I suggest wearing long pants and a light jacket. {% elif is_state('sensor.clothing_forecast', 'Chilly') %} It's gonna be on the chilly side today. so I suggest wearing at least long pants. {% elif is_state('sensor.clothing_forecast', 'Nice') %} It is going to be {{ [ 'pretty nice outside. ', 'a good day to be outside. ', 'a decent day outside for once. ', 'downright tolerable outside. ', ] | random }} So I suggest wearing shorts. {% elif is_state('sensor.clothing_forecast', 'Toasty') and is_state('sensor.current_forecast', 'sunny') %} It is going to be {{ [ 'on the warm side ', ' rather warm outside ', ' almost too hot outside ', ' a little warm ', ] | random }} today, and very sunny. So I suggest wearing shorts and {{ [ 'bringing your shades, hat, and maybe some sunscreen.', 'preparing to bake under the sun.', 'getting ready to be cooked alive.', ] | random }} {% elif is_state('sensor.clothing_forecast', 'Hot') and is_state('sensor.current_forecast', 'sunny') %} It is going to be {{ [ 'so hot you will sweat your balls off', 'hotter than the sun ', 'hotter than the inside of a volcano ', ] | random }} today, and very sunny. So I suggest wearing shorts and {{ [ 'bringing your shades, hat, and maybe some sunscreen.', 'preparing to bake under the sun.', 'getting ready to be cooked alive.', ] | random }} {% elif is_state('sensor.clothing_forecast', 'Toasty') %} It is going to be {{ [ 'on the warm side ', ' 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 {{ [ 'so hot you will sweat your balls off', 'hotter than the sun ', 'hotter than the inside of a volcano ', 'hotter than hell itself ', ] | random }} today. So I suggest wearing shorts. {% else %} It is going to be {{ states('sensor.clothing_forecast') }} today so I suggest wearing shorts. {% endif %} {% if is_state('input_boolean.hot_day','on') %} Warning, today will be a very sweaty day, so please remember to stay hydrated! {% endif %} {% if is_state('input_boolean.cold_day','on') %} Warning, today will be excessively cold, please make sure all exposed skin is covered to avoid frostbite! {% endif %} {% else %} Based on the current temperature, {% if is_state('sensor.clothing_forecast', 'Freezing') %} You're gonna freeze your balls off out there. so I suggest wearing long pants and a heavy coat if you are going out. {% elif is_state('sensor.clothing_forecast','Cold') %} It is cold as balls outside. so I suggest wearing long pants and a light jacket. {% elif is_state('sensor.clothing_forecast', 'Chilly') %} It is chilly right now. so I suggest wearing at least long pants if you are going to venture outside. {% elif is_state('sensor.clothing_forecast', 'Nice') %} It is {{ [ 'pretty nice outside. ', 'a good day to be outside. ', 'a decent day outside for once. ', 'downright tolerable outside. ', ] | random }} So I suggest wearing shorts. {% elif is_state('sensor.clothing_forecast', 'Toasty') and is_state('weather.iron_nerd_weather_station','sunny') %} It is {{ [ 'on the warm side ', ' rather warm ', ' almost too hot ', ' a little warm ', ] | random }} and very sunny outside. So I suggest wearing shorts and {{ [ 'bringing your shades, hat, and maybe some sunscreen.', 'preparing to bake under the sun.', 'getting ready to be cooked alive.', ] | random }} {% elif is_state('sensor.clothing_forecast', 'Hot') and is_state('weather.iron_nerd_weather_station','sunny') %} It is {{ [ 'so hot you will sweat your balls off', 'hotter than the sun ', 'hotter than the inside of a volcano ', ] | random }} and very sunny outside. So I suggest wearing shorts and {{ [ 'bringing your shades, hat, and maybe some sunscreen.', 'preparing to bake under the sun.', 'getting ready to be cooked alive.', ] | random }} {% elif is_state('sensor.clothing_forecast', 'Toasty') %} It is {{ [ 'on the warm side ', ' rather warm ', ' almost too hot ', ' a little warm ', ] | random }} outside. So I suggest wearing shorts. {% elif is_state('sensor.clothing_forecast', 'Hot') %} It is {{ [ 'so hot you will sweat your balls off', 'hotter than the sun ', 'hotter than the inside of a volcano ', 'hotter than hell itself ', ] | random }} outside. So I suggest wearing shorts. {% else %} It is {{ states('sensor.clothing_forecast') }} right now so I suggest wearing shorts. {% endif %} {% if is_state('binary_sensor.heat_index_threshold','on') %} Warning, the heat index is {{ states('sensor.pirateweather_apparent_temperature') | float | round }} degrees right now, which is very high. So please make sure to stay hydrated! {% endif %} {% if is_state('binary_sensor.wind_chill_threshold','on') %} Warning, it currently feels like {{ states('sensor.pirateweather_apparent_temperature') | float | round }} degrees outside, so please make sure all exposed skin is covered to avoid frostbite! {% endif %} {% endif %} {% if states('sensor.thermal_comfort_simmerindex') in ['extremely_warm','danger_of_heatstroke','extreme_danger_of_heatstroke','circulatory_collapse_imminent'] %} "To reiterate, the current weather is dangerously hot! " {% endif %} {% if is_state('sensor.thermal_comfort_perception','somewhat_uncomfortable') %} "The humidity is somewhat uncomfortable outside." {% elif is_state('sensor.thermal_comfort_perception','quite_uncomfortable') %} "The humidity is very uncomfortable outside. " {% elif is_state('sensor.thermal_comfort_perception','extremely_uncomfortable') %} "The humidity outside is extremely uncomfortable and oppresive. " {% elif is_state('sensor.thermal_comfort_perception','severely_high') %} "The humidity outside is severely high, and could even be deadly for asthma related illnesses. " {% endif %} {% if is_state('sensor.thermal_comfort_frostrisk','high') %} "There is currently a high chance of frost outside. Plan accordingly! " {% elif is_state('sensor.thermal_comfort_frostrisk','probable') %} "The possibility of frost exists currently. Be prepared. " {% endif %} {%- endmacro -%} {# a macro that removes all newline characters, empty spaces, and returns formatted text #} {%- macro cleanup(data) -%} {%- for item in data.split("\n") if item | trim != "" -%} {{ item | trim }} {% endfor -%} {%- endmacro -%} {# a macro to call all macros :) #} {%- macro mother_of_all_macros() -%} {{ getReport() }} {%- endmacro -%} {# Call the macro #} {{- cleanup(mother_of_all_macros()) -}} nws_current_visibility: friendly_name: "Current Visibility" unique_id: aa6e8dab-ac22-43f2-b541-b0996522f7f7 value_template: "{{ ((state_attr('weather.iron_nerd_weather_station','visibility') | int) * 0.621371) | round }}" # current_inside_humidity: # friendly_name: "Current Inside Humidity" # unit_of_measurement: '%' # value_template: "{{ state_attr('climate.home','current_humidity') }}" # lighting_stike_count: # friendly_name: "Lightning Strike Count" # value_template: "{{ states('sensor.acurite_6045m_3078_strcnt') }}" # yesterday_rainfall_in: # friendly_name: "Yesterday Rainfall" # value_template: "{{ state_attr('sensor.daily_rainfall_in', 'last_period') }}" # previous_rainfall: # friendly_name: "Past 48h Rainfall" # value_template: "{{ states('sensor.daily_rainfall_in') | float + state_attr('sensor.daily_rainfall_in', 'last_period') | float }}" lightning_warning: friendly_name: "Lightning Warning" unique_id: 72bd76a2-ec5b-49fd-982f-ed1ec225514e value_template: >- {%- if states('sensor.blitzortung_lightning_counter') | int > 0 %} Unsafe {% else %} Safe {%- endif %} weather_alert_string: friendly_name: Weather Alert String unique_id: 66b5f020-0b5e-48ed-92a2-740d2d708b30 value_template: > {%- macro getReport() -%} {% set alerts = [ states('sensor.weatheralerts_alert_1_most_recent_active_alert'), states('sensor.weatheralerts_alert_2_most_recent_active_alert'), states('sensor.weatheralerts_alert_3_most_recent_active_alert'), states('sensor.weatheralerts_alert_4_most_recent_active_alert'), states('sensor.weatheralerts_alert_5_most_recent_active_alert'), ] %} {% set main = alerts | reject('eq','unavailable') | select('ne','Flood Warning') | join(", ") | default('') %} {% set flood = alerts | reject ('eq','unavailable') | select('eq','Flood Warning') | first | default('') %} {% if flood not in [''] and main not in [''] %} {{ main + ", " + flood }} {% elif flood not in [''] and main in [''] %} {{ flood }} {% elif main not in [''] and flood in [''] %} {{ main }} {% else %} 'None' {% endif %} {%- endmacro -%} {%- macro cleanup(data) -%} {%- for item in data.split("\n") if item | trim != "" -%} {{ item | trim }} {% endfor -%} {%- endmacro -%} {%- macro mother_of_all_macros() -%} {{ getReport() }} {%- endmacro -%} {{- cleanup(mother_of_all_macros()) -}} attribute_templates: active_alerts: "{{ states('sensor.weatheralerts_active_alerts') }}" icon_template: > {% if (states('sensor.weatheralerts_active_alerts') | int ) > 0 %} mdi:alert {% else %} mdi:alert-remove {% endif %} weather_alerts_active_corrected: friendly_name: 'Weather Alerts Active - Corrected' unique_id: e2f51da4-2271-4719-8edf-a28f76ac1e3f value_template: > {%- macro getReport() -%} {% set alerts = [ states('sensor.weatheralerts_alert_1_most_recent_active_alert'), states('sensor.weatheralerts_alert_2_most_recent_active_alert'), states('sensor.weatheralerts_alert_3_most_recent_active_alert'), states('sensor.weatheralerts_alert_4_most_recent_active_alert'), states('sensor.weatheralerts_alert_5_most_recent_active_alert'), ] %} {% set main = alerts | reject('eq','unavailable') | select('ne','Flood Warning') | list | count | int %} {% set flood = alerts | reject ('eq','unavailable') | select('eq','Flood Warning') | list | count | int %} {% set flood1 = 1 if (flood > 0) else 0 %} {{ (main + flood1) | int }} {%- endmacro -%} {%- macro cleanup(data) -%} {%- for item in data.split("\n") if item | trim != "" -%} {{ item | trim }} {% endfor -%} {%- endmacro -%} {%- macro mother_of_all_macros() -%} {{ getReport() }} {%- endmacro -%} {{- cleanup(mother_of_all_macros()) -}} icon_template: > {% if (states('sensor.weatheralerts_active_alerts') | int ) > 0 %} mdi:alert {% else %} mdi:alert-remove {% endif %} input_boolean: freeze_warning: name: Freeze Warning icon: mdi:snowflake-alert weather_alert_texts: name: Weather Alert Texts icon: mdi:message-processing lightning_warning: name: Lightning Warning icon: mdi:flash-alert tornado_alarm: name: Tornado Alarm icon: mdi:speaker-wireless tstorm_alarm: name: T-Storm Alarm icon: mdi:speaker-wireless raining: name: Raining automation: # - alias: 'record previous day rainfall' # trigger: # - platform: time # at: '23:58:00' # action: # service: mqtt.publish # data: # topic: 'house/rain/yesterday_total' # retain: true # payload: "{{ states('sensor.todays_rainfall') }}" - id: 14421478-a33c-471a-ae01-b48827f6121a alias: Forecast Low Near Freezing trigger: - platform: numeric_state entity_id: sensor.tonights_low_temp below: 35 - platform: numeric_state entity_id: sensor.pirateweather_temperature below: 35 condition: - condition: state entity_id: input_boolean.freeze_warning state: 'off' action: - service: input_boolean.turn_on entity_id: input_boolean.freeze_warning - id: 088285ec-6435-435c-a8ce-800851fb15e2 alias: Forecast Low Above Freezing trigger: - platform: numeric_state entity_id: sensor.tonights_low_temp above: 33 condition: - condition: state entity_id: input_boolean.freeze_warning state: 'on' - condition: numeric_state entity_id: sensor.tonights_low_temp above: 35 action: - service: input_boolean.turn_off entity_id: input_boolean.freeze_warning script: # refresh_weather_alert_sensors: # sequence: # - service: homeassistant.update_entity # entity_id: sensor.tornado_warning # - service: homeassistant.update_entity # entity_id: sensor.tornado_watch # - service: homeassistant.update_entity # entity_id: sensor.tstorm_warning # - service: homeassistant.update_entity # entity_id: sensor.tstorm_watch # - service: homeassistant.update_entity # entity_id: sensor.flood_warning # - service: homeassistant.update_entity # entity_id: sensor.flood_watch weather_briefing: alias: 'Weather Briefing' sequence: - service: script.speech_engine data: who: "{{ who }}" message: !include ../templates/speech/weather_briefing_full.yaml