-
-
Save ackstorm23/952a24dbf47a7e0eccd87b932b7488ce to your computer and use it in GitHub Desktop.
Home Assistant Configuration for Adding Weather Alerts from the US NWS using a REST Sensor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This will allow several functions including a persistent pop-up notification on your HA front end, a notification to whichever notify service you use (I’m using Pushbullet in this example), and, if you use another custom component (https://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639), it will also trigger an announcement to all of your Echo devices. | |
You next need to find either your NWS Zone ID or County ID. It is better to use both ID's here. | |
You can find your Zone or County ID by going to https://alerts.weather.gov/, scroll down to your state and click on the “zone list” and/or "county list" then look for the entry for your county. | |
Once you have your desired ID you create a sensor, replacing my id (INZ009, INC033) with yours. The ID is case sensitive! | |
Then when you have your ID's, enter them into the configuration below. | |
Here are all the sections required in the configuration.yaml: | |
--------------------------------- | |
sensor: | |
- platform: rest | |
resource: https://api.weather.gov/alerts/active/count | |
name: NWS Alert Count Raw | |
value_template: > | |
{% if value_json is defined and value_json.zones.INZ009 is defined %} | |
{{ value_json.zones.INZ009 }} | |
{% elif value_json is defined and value_json.zones.INC033 is defined %} | |
{{ value_json.zones.INC033 }} | |
{% else %} | |
0 | |
{% endif %} | |
headers: | |
User-Agent: Homeassistant | |
Accept: application/ld+json | |
scan_interval: 60 | |
- platform: template | |
sensors: | |
nws_alert_count_filtered: | |
friendly_name: NWS Alert Count | |
entity_id: sensor.nws_alert_count_raw | |
value_template: > | |
{% if is_state('sensor.nws_alert_count_raw', 'unavailable') or is_state('sensor.nws_alert_count_raw', 'unknown') %} | |
{{ states.sensor.nws_alert_count_filtered.state }} | |
{% else %} | |
{{ states.sensor.nws_alert_count_raw.state }} | |
{% endif %} | |
- platform: rest | |
resource: https://api.weather.gov/alerts/active?zone=INZ009,INC033 | |
name: NWS Alert Event Raw | |
value_template: > | |
{% if value_json.features[0] is defined %} | |
{{ value_json['features'][0]['properties'].event }} | |
{% else %} | |
None | |
{% endif %} | |
json_attributes: | |
- features | |
headers: | |
User-Agent: Homeassistant | |
Accept: application/geo+json | |
scan_interval: 60 | |
- platform: template | |
sensors: | |
nws_alert_event_filtered: | |
friendly_name: NWS Alert Event | |
entity_id: sensor.nws_alert_event_raw | |
value_template: > | |
{% if is_state('sensor.nws_alert_event_raw', 'unavailable') or is_state('sensor.nws_alert_event_raw', 'unknown') %} | |
{{ states.sensor.nws_alert_event_filtered.state }} | |
{% else %} | |
{{ states.sensor.nws_alert_event_raw.state }} | |
{% endif %} | |
- platform: template | |
sensors: | |
nws_alert_event_2: | |
friendly_name: NWS Alert Event 2 | |
entity_id: sensor.nws_alert_event_raw | |
value_template: > | |
{% if state_attr('sensor.nws_alert_event_raw', 'features')[1] is defined %} | |
{{ state_attr('sensor.nws_alert_event_raw', 'features')[1]['properties'].event }} | |
{% else %} | |
None | |
{% endif %} | |
nws_alert_event_3: | |
friendly_name: NWS Alert Event 3 | |
entity_id: sensor.nws_alert_event_raw | |
value_template: > | |
{% if state_attr('sensor.nws_alert_event_raw', 'features')[2] is defined %} | |
{{ state_attr('sensor.nws_alert_event_raw', 'features')[2]['properties'].event }} | |
{% else %} | |
None | |
{% endif %} | |
--------------------------------------------- | |
automation: | |
- alias: 'NWS Weather Alert Pop Up Control' | |
trigger: | |
platform: state | |
entity_id: sensor.nws_alert_count_filtered | |
condition: | |
- condition: template | |
value_template: '{{states.sensor.nws_alert_count_filtered.state | int > 0}}' | |
action: | |
service: script.nws_popup_on_wx_alert | |
- alias: NWS Notification Weather Alert | |
trigger: | |
platform: state | |
entity_id: sensor.nws_alert_count_filtered | |
condition: | |
- condition: template | |
value_template: '{{states.sensor.nws_alert_count_filtered.state | int > 0}}' | |
action: | |
- service: notify.pushbullet_notify | |
data: | |
message: "NWS: {{ states.sensor.nws_alert_event_filtered.state }}" | |
- alias: NWS Announcement Weather Alert | |
initial_state: 'on' | |
trigger: | |
- platform: state | |
entity_id: sensor.nws_alert_count_filtered | |
condition: | |
condition: and | |
conditions: | |
- condition: template | |
value_template: '{{states.sensor.nws_alert_count_filtered.state | int > 0}}' | |
- condition: template | |
value_template: "{{ (('Severe' in states.sensor.nws_alert_event_filtered.state) or ('Tornado' in states.sensor.nws_alert_event_filtered.state)) and 'Warning' in states.sensor.nws_alert_event_filtered.state }}" | |
action: | |
#- service: media_player.volume_set | |
# data: | |
# entity_id: | |
# - media_player.computer_room_dot | |
# - media_player.kitchen_dot | |
# - media_player.livingroom_dot | |
# - media_player.master_bedroom_dot | |
# volume_level: 0.9 | |
- service: media_player.alexa_tts | |
data_template: | |
entity_id: | |
- media_player.computer_room_dot | |
- media_player.kitchen_dot | |
- media_player.livingroom_dot | |
#- media_player.master_bedroom_dot | |
- media_player.garage_dot | |
- media_player.big_room_dot | |
message: "Attention!,,,Attention!,,,The National Weather Service has issued a | |
{{ states.sensor.nws_alert_event_filtered.state }} for your area. | |
It expires at {{ as_timestamp(state_attr('sensor.nws_alert_event_raw', 'features')[0].properties.expires)| timestamp_custom('%-I:%M %p on %-m-%-d-%Y') }}." | |
- delay: '00:00:10' | |
- service: media_player.alexa_tts | |
data_template: | |
entity_id: | |
- media_player.computer_room_dot | |
- media_player.kitchen_dot | |
- media_player.livingroom_dot | |
#- media_player.master_bedroom_dot | |
- media_player.garage_dot | |
- media_player.big_room_dot | |
message: "Attention!,,,Attention!,,,The National Weather Service has issued a | |
{{ states.sensor.nws_alert_event_filtered.state }} for your area. | |
It expires at {{ as_timestamp(state_attr('sensor.nws_alert_event_raw', 'features')[0].properties.expires)| timestamp_custom('%-I:%M %p on %-m-%-d-%Y') }}." | |
- alias: NWS Announcement Weather Alert 2 | |
initial_state: 'on' | |
trigger: | |
- platform: state | |
entity_id: sensor.nws_alert_count_filtered | |
condition: | |
condition: and | |
conditions: | |
- condition: template | |
value_template: '{{states.sensor.nws_alert_count_filtered.state | int > 1}}' | |
- condition: template | |
value_template: "{{ (('Severe' in states.sensor.nws_alert_event_2.state) or ('Tornado' in states.sensor.nws_alert_event_2.state)) and 'Warning' in states.sensor.nws_alert_event_2.state }}" | |
action: | |
#- service: media_player.volume_set | |
# data: | |
# entity_id: | |
# - media_player.computer_room_dot | |
# - media_player.kitchen_dot | |
# - media_player.livingroom_dot | |
# - media_player.master_bedroom_dot | |
# volume_level: 0.9 | |
- service: media_player.alexa_tts | |
data_template: | |
entity_id: | |
- media_player.computer_room_dot | |
- media_player.kitchen_dot | |
- media_player.livingroom_dot | |
#- media_player.master_bedroom_dot | |
- media_player.garage_dot | |
- media_player.big_room_dot | |
message: "Attention!,,,Attention!,,,A second severe weather alert has been issued. The National | |
Weather Service has issued a | |
{{ states.sensor.nws_alert_event_2.state }} for your area. | |
It expires at {{ as_timestamp(state_attr('sensor.nws_alert_event_raw', 'features')[1].properties.expires)| timestamp_custom('%-I:%M %p on %-m-%-d-%Y') }}." | |
- delay: '00:00:10' | |
- service: media_player.alexa_tts | |
data_template: | |
entity_id: | |
- media_player.computer_room_dot | |
- media_player.kitchen_dot | |
- media_player.livingroom_dot | |
#- media_player.master_bedroom_dot | |
- media_player.garage_dot | |
- media_player.big_room_dot | |
message: "Attention!,,,Attention!,,,A second severe weather alert has been issued. The National Weather Service has issued a | |
{{ states.sensor.nws_alert_event_2.state }} for your area. | |
It expires at {{ as_timestamp(state_attr('sensor.nws_alert_event_raw', 'features')[1].properties.expires)| timestamp_custom('%-I:%M %p on %-m-%-d-%Y') }}." | |
- alias: NWS Announcement Weather Alert for MBR | |
initial_state: 'on' | |
trigger: | |
- platform: state | |
entity_id: sensor.nws_alert_count_filtered | |
condition: | |
condition: and | |
conditions: | |
- condition: template | |
value_template: '{{states.sensor.nws_alert_count_filtered.state | int > 0}}' | |
- condition: template | |
value_template: "{{ 'Tornado' in states.sensor.nws_alert_event_filtered.state and 'Warning' in states.sensor.nws_alert_event_filtered.state }}" | |
action: | |
#- service: media_player.volume_set | |
# data: | |
# entity_id: | |
# - media_player.computer_room_dot | |
# - media_player.kitchen_dot | |
# - media_player.livingroom_dot | |
# - media_player.master_bedroom_dot | |
# volume_level: 0.9 | |
- service: media_player.alexa_tts | |
data_template: | |
entity_id: | |
- media_player.master_bedroom_dot | |
message: "Warning!,,,Warning!,,,The National Weather Service has issued a | |
{{ states.sensor.nws_alert_event_filtered.state }} for your area. | |
It expires at {{ as_timestamp(state_attr('sensor.nws_alert_event_raw', 'features')[0].properties.expires)| timestamp_custom('%-I:%M %p on %-m-%-d-%Y') }}." | |
- delay: '00:00:10' | |
- service: media_player.alexa_tts | |
data_template: | |
entity_id: | |
- media_player.master_bedroom_dot | |
message: "Warning!,,,Warning!,,,The National Weather Service has issued a | |
{{ states.sensor.nws_alert_event_filtered.state }} for your area. | |
It expires at {{ as_timestamp(state_attr('sensor.nws_alert_event_raw', 'features')[0].properties.expires)| timestamp_custom('%-I:%M %p on %-m-%-d-%Y') }}." | |
- alias: NWS Announcement Weather Alert 2 for MBR | |
initial_state: 'on' | |
trigger: | |
- platform: state | |
entity_id: sensor.nws_alert_count_filtered | |
condition: | |
condition: and | |
conditions: | |
- condition: template | |
value_template: '{{states.sensor.nws_alert_count_filtered.state | int > 1}}' | |
- condition: template | |
value_template: "{{ 'Tornado' in states.sensor.nws_alert_event_2.state and 'Warning' in states.sensor.nws_alert_event_2.state }}" | |
action: | |
#- service: media_player.volume_set | |
# data: | |
# entity_id: | |
# - media_player.computer_room_dot | |
# - media_player.kitchen_dot | |
# - media_player.livingroom_dot | |
# - media_player.master_bedroom_dot | |
# volume_level: 0.9 | |
- service: media_player.alexa_tts | |
data_template: | |
entity_id: | |
- media_player.master_bedroom_dot | |
message: "Warning!,,,Warning!,,,A second severe weather alert has been issued. The National Weather Service has issued a | |
{{ states.sensor.nws_alert_event_2.state }} for your area. | |
It expires at {{ as_timestamp(state_attr('sensor.nws_alert_event_raw', 'features')[1].properties.expires)| timestamp_custom('%-I:%M %p on %-m-%-d-%Y') }}." | |
- delay: '00:00:10' | |
- service: media_player.alexa_tts | |
data_template: | |
entity_id: | |
- media_player.master_bedroom_dot | |
message: "Warning!,,,Warning!,,,A second severe weather alert has been issued. The National Weather Service has issued a | |
{{ states.sensor.nws_alert_event_2.state }} for your area. | |
It expires at {{ as_timestamp(state_attr('sensor.nws_alert_event_raw', 'features')[1].properties.expires)| timestamp_custom('%-I:%M %p on %-m-%-d-%Y') }}." | |
--------------------------------------------------------------- | |
script: | |
nws_popup_on_wx_alert: | |
alias: NWS Weather Alert Pop Up | |
sequence: | |
## Dismiss any current alert so the UI isn't filled | |
## up with these if there are more then one. | |
## Only show the latest alert | |
- service: persistent_notification.dismiss | |
data: | |
notification_id: "nwswxalert" | |
## Create a new persistant notification in the UI for a new alert | |
- service_template: > | |
{% if states.sensor.nws_alert_event_filtered.state != 'None' %} | |
persistent_notification.create | |
{% endif %} | |
data_template: | |
notification_id: "nwswxalert" | |
message: "{{ state_attr('sensor.nws_alert_event_raw', 'features')[0].properties.description }}" | |
title: '{{ states.sensor.nws_alert_event_raw.state }}' | |
------------------------------------------------------------- | |
I created two announcements so that a minor event won't wake you nup in the middle of the night. | |
You’ll notice I repeat the announcement twice in case the first announcement doesn’t wake you up. | |
And I haven’t worked out the volume setting part yet. If anyone has any working solutions feel free to let me know. | |
The script above generates a persistent notification pop-up. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment