mirror of
				https://github.com/thejeffreystone/home-assistant-configuration.git
				synced 2025-10-31 10:36:54 +00:00 
			
		
		
		
	
		
			
	
	
		
			200 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
		
		
			
		
	
	
			200 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
|   | ###############################################################################
 | |||
|  | #   @author         :   Jeffrey Stone 
 | |||
|  | #   @date           :   02/19/2019
 | |||
|  | #   @package        :   NWS Alerts
 | |||
|  | #   @description    :   NWS Alerts
 | |||
|  | #   @original       :   https://github.com/Vasiley/Home-Assistant-Main/blob/master/packages/weather_alerts_nws.yaml
 | |||
|  | ###############################################################################
 | |||
|  | 
 | |||
|  | homeassistant:
 | |||
|  |   customize:
 | |||
|  |     package.node_anchors:
 | |||
|  |       customize: &customize
 | |||
|  |         package: 'weather_alerts'
 | |||
|  |     sensor.nws_alert_count:
 | |||
|  |       friendly_name: Alerts
 | |||
|  |       icon: mdi:alert-outline
 | |||
|  | 
 | |||
|  | group:
 | |||
|  |   alerts_card:
 | |||
|  |    name: Alerts
 | |||
|  |    entities:
 | |||
|  |      - sensor.nws_alerts
 | |||
|  | 
 | |||
|  | ### You first need to find either your NWS Zone ID or County ID. I’m not sure which is better but I used my Zone ID here.
 | |||
|  | ### You can find your Zone ID by going to https://alerts.weather.gov/ 7, scroll down to your state and click on the “zone list” then look for the entry for your county.
 | |||
|  | ### I recommond useing both
 | |||
|  | 
 | |||
|  | #I’ve taken much of the underlying work here and created a custom component for nws alerts sensor.
 | |||
|  | #The sensor can be created by adding the nws_alerts.py file to <config_directory>/custom_components/sensor/ and adding the following to your sensor definitions:
 | |||
|  | 
 | |||
|  | sensor:
 | |||
|  |   - platform: nws_alerts
 | |||
|  |     zone_id: 'GAZ034'
 | |||
|  | 
 | |||
|  | automation:
 | |||
|  |   - alias: 'NWS Weather Alert Pop Up Control'
 | |||
|  |     initial_state: 'on'
 | |||
|  |     trigger:
 | |||
|  |       platform: state
 | |||
|  |       entity_id: sensor.nws_alerts
 | |||
|  |     condition:
 | |||
|  |       - condition: template
 | |||
|  |         value_template: '{{states.sensor.nws_alerts.state | int > 0}}'
 | |||
|  |       - condition: template
 | |||
|  |         value_template: '{{ trigger.to_state.state|float > trigger.from_state.state|float }}'
 | |||
|  |     action:
 | |||
|  |       service: script.nws_popup_on_wx_alert
 | |||
|  |       data_template:
 | |||
|  |         title: >
 | |||
|  |           {% if states.sensor.nws_alerts.attributes.title.split(' - ')[5] is defined %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.title.split(' - ')[5] }}"
 | |||
|  |           {% elif states.sensor.nws_alerts.attributes.title.split(' - ')[4] is defined %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.title.split(' - ')[4] }}"
 | |||
|  |           {% elif states.sensor.nws_alerts.attributes.title.split(' - ')[3] is defined %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.title.split(' - ')[3] }}"
 | |||
|  |           {% elif states.sensor.nws_alerts.attributes.title.split(' - ')[2] is defined %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.title.split(' - ')[2] }}"
 | |||
|  |           {% elif states.sensor.nws_alerts.attributes.title.split(' - ')[1] is defined %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.title.split(' - ')[1] }}"
 | |||
|  |           {% else %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.title.split(' - ')[0] }}"
 | |||
|  |           {% endif %}
 | |||
|  |         message: >
 | |||
|  |           {% if states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[5] is defined %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[5] }}"
 | |||
|  |           {% elif states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[4] is defined %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[4] }}"
 | |||
|  |           {% elif states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[3] is defined %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[3] }}"
 | |||
|  |           {% elif states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[2] is defined %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[2] }}"
 | |||
|  |           {% elif states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[1] is defined %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[1] }}"
 | |||
|  |           {% else %}
 | |||
|  |             "{{ states.sensor.nws_alerts.attributes.display_desc.split('\n\n-\n\n')[0] }}"
 | |||
|  |           {% endif %}
 | |||
|  | 
 | |||
|  |   - alias: NWS Notification Weather Alert
 | |||
|  |     initial_state: 'on'
 | |||
|  |     trigger:
 | |||
|  |       platform: state
 | |||
|  |       entity_id: sensor.nws_alerts
 | |||
|  |     condition:
 | |||
|  |       - condition: template
 | |||
|  |         value_template: '{{states.sensor.nws_alerts.state | int > 0}}'
 | |||
|  |       - condition: template
 | |||
|  |         value_template: '{{ trigger.to_state.state|float > trigger.from_state.state|float }}'
 | |||
|  |     action:
 | |||
|  |       - service: notify.all_ios
 | |||
|  |         data_template:
 | |||
|  |           message: >
 | |||
|  |             {% if states.sensor.nws_alerts.attributes.title.split(' - ')[5] is defined %}
 | |||
|  |               "NWS: {{ states.sensor.nws_alerts.attributes.title.split(' - ')[5] }}"
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.title.split(' - ')[4] is defined %}
 | |||
|  |               "NWS: {{ states.sensor.nws_alerts.attributes.title.split(' - ')[4] }}"
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.title.split(' - ')[3] is defined %}
 | |||
|  |               "NWS: {{ states.sensor.nws_alerts.attributes.title.split(' - ')[3] }}"
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.title.split(' - ')[2] is defined %}
 | |||
|  |               "NWS: {{ states.sensor.nws_alerts.attributes.title.split(' - ')[2] }}"
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.title.split(' - ')[1] is defined %}
 | |||
|  |               "NWS: {{ states.sensor.nws_alerts.attributes.title.split(' - ')[1] }}"
 | |||
|  |             {% else %}
 | |||
|  |               "NWS: {{ states.sensor.nws_alerts.attributes.title.split(' - ')[0] }}"
 | |||
|  |             {% endif %}
 | |||
|  | 
 | |||
|  |   - alias: NWS Announce Weather Alert
 | |||
|  |     initial_state: 'on'
 | |||
|  |     trigger:
 | |||
|  |       - platform: state
 | |||
|  |         entity_id: sensor.nws_alerts
 | |||
|  |     condition:
 | |||
|  |       condition: and
 | |||
|  |       conditions:
 | |||
|  |         - condition: template
 | |||
|  |           value_template: "{{states.sensor.nws_alerts.state | int > 0}}"
 | |||
|  |         - condition: template
 | |||
|  |           value_template: '{{ trigger.to_state.state|float > trigger.from_state.state|float }}'
 | |||
|  |         - condition: template
 | |||
|  |           value_template: "{{ (('Severe' in states.sensor.nws_alerts.attributes.title) or ('Thunderstorm' in states.sensor.nws_alerts.attributes.title) or ('Flood' in states.sensor.nws_alerts.attributes.title)) and 'Warning' in states.sensor.nws_alerts.attributes.title }}"
 | |||
|  |     action:
 | |||
|  |       - service: script.voice_notify
 | |||
|  |         data_template:
 | |||
|  |           message: >
 | |||
|  |             {% if states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] is defined %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] }}
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] is defined %}
 | |||
|  |              The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] }}
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[3] is defined %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[3] }}
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[2] is defined %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[2] }}
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[1] is defined %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[1] }}
 | |||
|  |             {% else %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[0] }}
 | |||
|  |             {% endif %}
 | |||
|  |       - delay: '00:00:15'
 | |||
|  |       - service: script.voice_notify
 | |||
|  |         data_template:
 | |||
|  |           message: >
 | |||
|  |             {% if states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] is defined %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[5] }}
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] is defined %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[4] }}
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[3] is defined %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[3] }}
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[2] is defined %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[2] }}
 | |||
|  |             {% elif states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[1] is defined %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[1] }}
 | |||
|  |             {% else %}
 | |||
|  |               The National Weather Service Has issued a {{ states.sensor.nws_alerts.attributes.spoken_desc.split('\n\n-\n\n')[0] }}
 | |||
|  |             {% endif %}
 | |||
|  | 
 | |||
|  |   - alias: NWS Announce Weather Alert for Tornado
 | |||
|  |     initial_state: 'on'
 | |||
|  |     trigger:
 | |||
|  |       - platform: state
 | |||
|  |         entity_id: sensor.nws_alerts
 | |||
|  |     condition:
 | |||
|  |       condition: and
 | |||
|  |       conditions:
 | |||
|  |         - condition: template
 | |||
|  |           value_template: "{{states.sensor.nws_alerts.state | int > 0}}"
 | |||
|  |         - condition: template
 | |||
|  |           value_template: "{{ 'Tornado' in states.sensor.nws_alerts.attributes.title and 'Warning' in states.sensor.nws_alerts.attributes.title }}"
 | |||
|  |     action:
 | |||
|  |       - service: script.alert_notify
 | |||
|  |         data_template:
 | |||
|  |           message: "Attention!,,,Attention!,,,The National Weather Service Has issued a Tornado Warning for our area."
 | |||
|  |       - delay: '00:00:15'
 | |||
|  |       - service: script.alert_notify
 | |||
|  |         data_template:
 | |||
|  |           message: "Attention!,,,Attention!,,,The National Weather Service Has issued a Tornado Warning for our area."
 | |||
|  |       - delay: '00:00:15'
 | |||
|  |       - service: input_boolean.turn_on
 | |||
|  |         entity_id: input_boolean.tornado_alarm
 | |||
|  |       - service: script.text_notify_all
 | |||
|  |         data_template:
 | |||
|  |           message: "Attention!,,,Attention!,,,The National Weather Service Has issued a Tornado Warning for our area."
 | |||
|  | 
 | |||
|  | 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_alerts.state != '0' %}
 | |||
|  |             persistent_notification.create
 | |||
|  |           {% endif %}
 | |||
|  |         data_template:
 | |||
|  |           notification_id: "nwswxalert"
 | |||
|  |           message: "{{ message }}"
 | |||
|  |           title: '{{ title }}'
 |