Files
Home-Assistant-Configs/packages/custom_weather.yaml

1073 lines
47 KiB
YAML

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: >
{% if state_attr('weather.iron_nerd_studios','forecast') %}
{{ state_attr('weather.iron_nerd_studios','forecast') }}
{% elif state_attr('weather.kdfi_daynight','forecast') %}
{{ state_attr('weather.kdfi_daynight','forecast') }}
{% elif state_attr('weather.openweathermap','forecast') %}
{{ state_attr('weather.openweathermap','forecast') }}
{% else %}
{{ state_attr('weather.weatherapi_stratton_ave','forecast') }}
{% endif %}
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: "Daily weather data from Iron Nerd's custom weather station template"
ozone_template: "{{ states('sensor.pirateweather_ozone') | float }}"
precipitation_unit: in
- platform: template
name: "Iron Nerd Weather Station - Hourly"
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: >
{% if state_attr('weather.kdfi_hourly','forecast') %}
{{ state_attr('weather.kdfi_hourly', 'forecast') }}
{% else %}
{{ state_attr('weather.iron_nerd_studios_hourly','forecast') }}
{% endif %}
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: "Hourly 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 = state_attr('weather.iron_nerd_weather_station','temperature') | int %}
{% set threshold = states('input_number.hot_day_threshold') | int %}
{{ temp >= threshold }}
device_class: heat
attributes:
current_temp: "{{ state_attr('weather.iron_nerd_weather_station','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.stratton_ave_apparent_temperature') | int %}
{% set threshold = states('input_number.heat_index_threshold') | int %}
{{ feelslike >= threshold }}
device_class: heat
attributes:
current_temp: "{{ states('sensor.stratton_ave_apparent_temperature') | int }}"
threshold: "{{ states('input_number.heat_index_threshold') | int }}"
- name: Cold Threshold
unique_id: a7c97b91-6d42-433a-a96b-94e39c58d63f
state: >
{% set temp = state_attr('weather.iron_nerd_weather_station','temperature') | int %}
{% set threshold = states('input_number.cold_day_threshold') | int %}
{{ temp <= threshold }}
device_class: cold
attributes:
current_temp: "{{ state_attr('weather.iron_nerd_weather_station','temperature') | int }}"
threshold: "{{ states('input_number.cold_day_threshold') | int }}"
- name: Overnight Low Threshold
unique_id: 6869e6eb-c8a6-43c8-aa4d-4d50659811b8
state: >
{% set temp = state_attr('weather.iron_nerd_weather_station','temperature') | int %}
{% set threshold = states('input_number.overnight_low_threshold') | int%}
{{ temp <= threshold }}
device_class: cold
attributes:
current_temp: "{{ state_attr('weather.iron_nerd_weather_station','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.stratton_ave_apparent_temperature') | int %}
{% set threshold = states('input_number.wind_chill_threshold') | int %}
{{ feelslike <= threshold }}
device_class: cold
attributes:
current_temp: "{{ state_attr('weather.iron_nerd_weather_station','temperature') | int }}"
threshold: "{{ states('input_number.wind_chill_threshold') | int }}"
- name: Heat Warning
unique_id: 02b8020a-4fa1-4489-abea-bfadf82ec7e5
state: >
{% set day = states('sensor.today_corrected_high_temp') | int %}
{% set night = states('sensor.overnight_lowest_temperature') | int %}
{% set dayThreshold = states('input_number.extended_heat_threshold') | int %}
{% set nightThreshold = states('input_number.hot_overnight_threshold') | int %}
{% set hotDayThreshold = states('input_number.hot_day_threshold') | int %}
{{ (day >= dayThreshold and night >= nightThreshold) or day >= hotDayThreshold }}
device_class: heat
attributes:
trigger: >
{% set day = states('sensor.today_corrected_high_temp') | int %}
{% set night = states('sensor.overnight_lowest_temperature') | int %}
{% set dayThreshold = states('input_number.extended_heat_threshold') | int %}
{% set nightThreshold = states('input_number.hot_overnight_threshold') | int %}
{% set hotDayThreshold = states('input_number.hot_day_threshold') | int %}
{% if day >= dayThreshold and night >= nightThreshold %}
Extended Threat
{% elif day >= hotDayThreshold %}
Hot Day
{% else %}
No Trigger
{% endif %}
- name: "Lightning Warning"
unique_id: edaddfc4-f7f0-4d75-aada-a2c588afe029
state: "{{ states('sensor.blitzortung_lightning_counter') | int > 0 }}"
device_class: safety
attributes:
current_strikes: "{{ states('sensor.blitzortung_lightning_counter') | 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.stratton_ave_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 }}
friendly: >-
{% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %}
{{ forecast.condition | replace("partlycloudy","partly cloudy") }}
current_forecast_detail:
friendly_name: Current Forecast Detail
unique_id: e5ae9864-70b5-402c-9d2f-c4d6a10085df
icon_template: mdi:weather-sunny
value_template: >-
{% from 'formatting.jinja' import cleanup %}
{%- macro getReport() -%}
{{ [
'Today in Defiance ',
'Later Today ',
'For the rest of the day '
] | random }}
expect a high of {{ states('sensor.today_corrected_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.overnight_lowest_temperature') }} degrees.
{%- endmacro -%}
{{- cleanup(getReport()) -}}
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: >-
{% from 'formatting.jinja' import cleanup %}
{%- 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 -%}
{{- cleanup(getReport()) -}}
current_conditions:
friendly_name: Current Conditions
unique_id: 70db7e57-08db-48b2-919b-03b5face37b9
icon_template: mdi:weather-sunny
value_template: >-
{% from 'formatting.jinja' import cleanup %}
{%- 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 -%}
{{- cleanup(getReport()) -}}
current_conditions_detail:
friendly_name: Current Conditions Detail
unique_id: 2b3687d1-bdd5-4551-8c0a-05b1ff617543
icon_template: mdi:weather-sunny
value_template: >-
{% from 'formatting.jinja' import cleanup %}
{%- 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.early_night_mode','off')%}
{{ [
'Later Today ',
'For the rest of the day '
] | random }}
expect a high of {{ states('sensor.today_corrected_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.overnight_lowest_temperature') }} degrees.
{%- else -%}
{{ [
'Tonight expect a low of ',
'Overnight expect a low of '
] | random }}
{{ states('sensor.overnight_lowest_temperature') }} degrees.
{% endif %}
{%- endmacro -%}
{{- cleanup(getReport()) -}}
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.today_corrected_high_temp')|int %}
{% else %}
{% set temp = states('sensor.pirateweather_temperature')|round %}
{% endif %}
{%- if states('sensor.today_corrected_high_temp')|int > 63 %}
{%- if states('sensor.today_corrected_high_temp')|int < 80 %}
Nice
{% elif states('sensor.today_corrected_high_temp')|int > 90 %}
Hot
{% else %}
Toasty
{%- endif %}
{% elif states('sensor.today_corrected_high_temp')|int < 64 %}
{%- if states('sensor.today_corrected_high_temp')|int < 32 %}
Freezing
{% elif states('sensor.today_corrected_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: >-
{% from 'formatting.jinja' import cleanup %}
{%- 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.stratton_ave_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.stratton_ave_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'] %}
"I cannot stress this enough, 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 -%}
{{- cleanup(getReport()) -}}
# 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 }}"
weather_alert_string:
friendly_name: Weather Alert String
unique_id: 66b5f020-0b5e-48ed-92a2-740d2d708b30
value_template: >
{% from 'formatting.jinja' import cleanup %}
{%- 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 -%}
{{- cleanup(getReport()) -}}
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: >
{% from 'formatting.jinja' import cleanup %}
{%- 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 -%}
{{- cleanup(getReport()) -}}
icon_template: >
{% if (states('sensor.weatheralerts_active_alerts') | int ) > 0 %}
mdi:alert
{% else %}
mdi:alert-remove
{% endif %}
# Sensors to more accurately forecast the overnight temperatures
overnight_lowest_temperature:
friendly_name: 'Overnight Lowest Temperature'
unique_id: 70bdffbe-dc55-4913-af70-a37a6db2bcaa
unit_of_measurement: '°F'
value_template: >
{% set ns = namespace(temps=[]) %}
{% set x = state_attr('weather.iron_nerd_weather_station_hourly','forecast') | count %}
{% set pd = state_attr('weather.iron_nerd_weather_station_hourly','forecast') %}
{% for i in range(0,x) %}
{% set hr = as_timestamp(as_local(as_datetime(pd[i].datetime))) | timestamp_custom('%H') | int %}
{% if hr in range(21,24) or hr in range(0,8) %}
{% if as_local(as_datetime(pd[i].datetime)) == now().replace(hour=hr, minute=00, second=0, microsecond=0) + timedelta(days=0) or
as_local(as_datetime(pd[i].datetime)) == now().replace(hour=hr, minute=00, second=0, microsecond=0) + timedelta(days=1) %}
{% set ns.temps = ns.temps + [pd[i].temperature] %}
{% endif %}
{% endif %}
{% endfor %}
{{ ns.temps | min | int }}
icon_template: mdi:thermometer
rain_24hr:
friendly_name: 'Rain - 24 Hours'
unique_id: 26d2b945-f676-4c3c-8a4f-4b3b909d62dd
unit_of_measurement: 'in'
value_template: "{{ state_attr('sensor.rain_factor','day_0_rain') | float }}"
icon_template: mdi:weather-rainy
today_corrected_high_temp:
friendly_name: 'Today Corrected High Temp'
unique_id: c0c40ec1-605e-4739-a935-ac0a2937fab2
unit_of_measurement: °F
value_template: "{{ states('input_number.today_corrected_high_temp') | int }}"
icon_template: mdi:thermometer-high
input_number:
today_corrected_high_temp:
name: Today Corrected High Temp
min: -100
max: 150
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
mode: box
today_corrected_low_temp:
name: Today Corrected Low Temp
min: -100
max: 150
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
mode: box
input_boolean:
freeze_warning:
name: Freeze Warning
icon: mdi:snowflake-alert
weather_alert_texts:
name: Weather Alert Texts
icon: mdi:message-processing
tornado_alarm:
name: Tornado Alarm
icon: mdi:speaker-wireless
tstorm_alarm:
name: T-Storm Alarm
icon: mdi:speaker-wireless
raining:
name: Raining
severe_weather_mode:
name: Severe Weather Mode
icon: mdi:weather-tornado
# 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.overnight_lowest_temperature
# 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.overnight_lowest_temperature
# above: 33
# condition:
# - condition: state
# entity_id: input_boolean.freeze_warning
# state: 'on'
# - condition: numeric_state
# entity_id: sensor.overnight_lowest_temperature
# above: 35
# action:
# - service: input_boolean.turn_off
# entity_id: input_boolean.freeze_warning
automation:
- id: bae55746-c571-4a5d-88e0-8c83aea8110b
alias: Fix High Temperature
description: Gotta make up for one of a few shortcomings in Pirateweather
mode: single
trigger:
- platform: time_pattern
minutes: "/5"
condition:
- condition: template
value_template: >
{% from 'time.jinja' import ct %}
{% set ct = ct() | int %}
{{ ct <= 63900 }}
action:
- service: input_number.set_value
target:
entity_id: input_number.today_corrected_high_temp
data:
value: "{{ states('sensor.todays_high_temp') | int }}"
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