This is a snippet that you can use to create sensors for the day’s high and low temperature from the NWS integration: high temperature, low temperature, daytime precipitation chance, and nighttime precipitation chance.
These sensors can be used in automations for your climate control with {{ states('sensors.wx_temp_high') }}
or to be displayed on a dashboard.
It uses the Twice Daily
forecast action, so should only be ran once per day. From my experience, the forecast is generated before 6AM central time so I have this running a 6AM.
To handle situations where the NWS forecast is incorrectly formatted or unavailable, this sets a temperature of -200°F (since the coldest ever recorded is -126°F, this should be a safe number) and precipitation chances to -200%. These should be handled in whatever automations you use the temperature sensors in. I’ve included YAML of an automation to alert you of this error below.
Since you can’t create template sensors directly in the Home Assistant UI, this snippet needs to be added to your configurations.yml
file. You can edit the file directly on your server or by using the File Editor add-on or Studio Code Server add-on.
You’ll need to change weather.ktcl_daynight
to the correct entity ID for your NWS integration.
template:
- trigger:
# Run each day at 6AM
- trigger: time_pattern
hours: 6
minutes: 0
action:
- action: weather.get_forecasts
target:
# Change this to your entity ID
entity_id: weather.ktcl_daynight
data:
type: twice_daily
response_variable: wx_data
- variables:
# Change this to your entity ID
daytime: >-
{% for wx in wx_data["weather.ktcl_daynight"]["forecast"] if as_datetime(wx["datetime"]).date() == now().date() and wx["is_daytime"] %}
{{ wx }}
{% else %}
{"temperature": -200, "precipitation_probability": -200}
{% endfor %}
# Change this to your entity ID
nighttime: >-
{% for wx in wx_data["weather.ktcl_daynight"]["forecast"] if as_datetime(wx["datetime"]).date() == now().date() and not wx["is_daytime"] %}
{{ wx }}
{% else %}
{"temperature": -200, "precipitation_probability": -200}
{% endfor %}
sensor:
###
# Create high temperature sensor
###
- name: High temperature
unique_id: wx_temp_high
state: "{{ daytime.get('temperature') }}"
unit_of_measurement: °F
###
# Create low temperature sensor
###
- name: Low temperature
unique_id: wx_temp_low
state: "{{ nighttime.get('temperature') }}"
unit_of_measurement: °F
###
# Create daytime precipitation sensor
###
- name: Daytime chance of precipitation
unique_id: wx_precipitation_daytime
state: "{{ daytime.get('precipitation_probability') }}"
unit_of_measurement: "%"
###
# Create nighttime precipitation sensor
###
- name: Nighttime chance of precipitation
unique_id: wx_precipitation_nighttime
state: "{{ nighttime.get('precipitation_probability') }}"
unit_of_measurement: "%"
Outdoor Temperature Sensor
Using the daytime sensor, you can create a template sensor that returns the high (daytime) or low (nighttime) temperature.
{% if states('binary_sensor.daytime') == 'on' %}
{{ states('sensor.wx_temp_high') }}
{% else %}
{{ states('sensor.wx_temp_low') }}
{% endif %}
Error Notification Automation
This is an automation for creating a persistent notification when the weather sensors are in an error state.
alias: Notification on weather sensor error state
triggers:
- trigger: numeric_state
entity_id:
- sensor.wx_temp_high
below: -199
- trigger: numeric_state
entity_id:
- sensor.wx_temp_low
below: -199
- trigger: numeric_state
entity_id:
- sensor.wx_precipitation_daytime
below: -199
- trigger: numeric_state
entity_id:
- sensor.wx_precipitation_nighttime
below: -199
conditions: []
actions:
- action: persistent_notification.create
metadata: {}
data:
message: >-
One or more of the weather sensors from the NWS forecast are in an error
state as of {{ now().strftime('%m/%d/%Y') }}.
notification_id: wx_sensors_in_error_state
mode: single