############################################################################### # @author : Jeffrey Stone # @date : 02/19/2019 # @package : Weather # @description : Weather and 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 weather: # REMOVING darksky integration since API is EOL in 18 months. Migrated to NWS # - platform: darksky # api_key: !secret darksky_api # - platform: nws # api_key: !secret nws_api_key # station: klzu group: alerts_card: name: Alerts entities: - sensor.nws_alerts input_boolean: freeze_warning: name: Freeze Warning icon: mdi:snowflake-alert weather_alert_texts: name: Weather Alert Texts icon: mdi:telegram 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 ### 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 /custom_components/sensor/ and adding the following to your sensor definitions: sensor: - platform: nws_alerts zone_id: 'GAZ034,GAC135' # - platform: mqtt # name: "Back Porch" # state_topic: "house/acurite2mqtt/Acurite-6045M_3078" # unit_of_measurement: '°F' # value_template: "{{ value_json.temperature_F }}" # json_attributes_topic: "house/acurite2mqtt/Acurite-6045M_3078" # device_class: temperature # - platform: mqtt # name: "Crawlspace" # state_topic: "house/acurite2mqtt/Acurite-609TXC_73" # unit_of_measurement: '°F' # value_template: "{{ value_json.temperature_F }}" # json_attributes_topic: "house/acurite2mqtt/Acurite-609TXC_73" # device_class: temperature # - platform: mqtt # name: "Garage" # state_topic: "house/acurite2mqtt/Acurite-Tower_10968" # unit_of_measurement: '°F' # value_template: "{{ value_json.temperature_F }}" # json_attributes_topic: "house/acurite2mqtt/Acurite-Tower_10968" # device_class: temperature - platform: mqtt name: "Lightning total count" state_topic: "house/lightning/total_count" - platform: statistics name: Inside Humidity Stats entity_id: sensor.current_inside_humidity sampling_size: 500 - platform: template sensors: flood_watch: friendly_name: 'Flood Watch' value_template: >- {% if states.sensor.nws_alerts.state | int > 0 %} {% if 'Flood Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[0] or 'Flood Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[1] or 'Flood Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[2] or 'Flood Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[3] or 'Flood Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[4] or 'Flood Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[5] %} active {% endif %} {% else %} inactive {% endif %} flood_warning: friendly_name: 'Flood Warning' value_template: >- {% if states.sensor.nws_alerts.state | int > 0 %} {% if 'Flood Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[0] or 'Flood Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[1] or 'Flood Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[2] or 'Flood Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[3] or 'Flood Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[4] or 'Flood Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[5] %} active {% endif %} {% else %} inactive {% endif %} tstorm_warning: friendly_name: 'Thunderstorm Warning' value_template: >- {% if states.sensor.nws_alerts.state | int > 0 %} {% if 'Thunderstorm Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[0] or 'Thunderstorm Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[1] or 'Thunderstorm Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[2] or 'Thunderstorm Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[3] or 'Thunderstorm Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[4] or 'Thunderstorm Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[5] %} active {% endif %} {% else %} inactive {% endif %} tstorm_watch: friendly_name: 'Thunderstorm Watch' value_template: >- {% if states.sensor.nws_alerts.state | int > 0 %} {% if 'Thunderstorm Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[0] or 'Thunderstorm Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[1] or 'Thunderstorm Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[2] or 'Thunderstorm Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[3] or 'Thunderstorm Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[4] or 'Thunderstorm Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[5] %} active {% endif %} {% else %} inactive {% endif %} tornado_watch: friendly_name: 'Tornado Watch' value_template: >- {% if states.sensor.nws_alerts.state | int > 0 %} {% if 'Tornado Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[0] or 'Tornado Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[1] or 'Tornado Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[2] or 'Tornado Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[3] or 'Tornado Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[4] or 'Tornado Watch' in states.sensor.nws_alerts.attributes.title.split(' - ')[5] %} active {% endif %} {% else %} inactive {% endif %} tornado_warning: friendly_name: 'Tornado Warning' value_template: >- {% if states.sensor.nws_alerts.state | int > 0 %} {% if 'Tornado Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[0] or 'Tornado Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[1] or 'Tornado Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[2] or 'Tornado Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[3] or 'Tornado Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[4] or 'Tornado Warning' in states.sensor.nws_alerts.attributes.title.split(' - ')[5] %} active {% endif %} {% else %} inactive {% endif %} backporch_weather: friendly_name: Back Porch Weather value_template: "{{ states.sensor.acurite_6045m_3078_t.state | round}} °F / {{ states.sensor.acurite_6045m_3078_h.state }} %" garage_weather: friendly_name: Garage Weather value_template: "{{ states.sensor.acurite_tower_10968_t.state | round}} °F / {{ states.sensor.acurite_tower_10968_h.state }} %" crawlspace_weather: friendly_name: Crawlspace Weather value_template: "{{ states.sensor.acurite_609txc_73_t.state | round}} °F / {{ states.sensor.acurite_609txc_73_h.state }} %" clothing_forecast: friendly_name: "Clothing Forecast" unit_of_measurement: '' value_template: >- {%- if states('sensor.nws_daytime_temperature')|float > 63 %} {%- if states('sensor.nws_daytime_temperature')|float < 80 %} Nice {% elif states('sensor.nws_daytime_temperature')|float > 95 %} Hot {% else %} Toasty {%- endif %} {% elif states('sensor.nws_daytime_temperature')|float < 64 %} {%- if states('sensor.nws_daytime_temperature')|float < 32 %} Freezing {% elif states('sensor.nws_daytime_temperature')|float > 50 %} Chilly {% else %} Cold {%- endif %} {% else %} Unknown {%- endif %} nws_current_forecast: friendly_name: 'Current Forecast' value_template: "{{ states.weather.klzu_daynight.attributes.forecast[0].detailed_description | truncate(250, False) }}" nws_current_rain_forecast: friendly_name: 'Current Rain Chance' value_template: "{{ states.weather.klzu_daynight.attributes.forecast[0].precipitation_probability }}" unit_of_measurement: '%' nws_current_temperature: friendly_name: 'Current Temperature' value_template: "{{ states.weather.klzu_daynight.attributes.temperature }}" device_class: temperature nws_daytime_temperature: friendly_name: 'Daytime Temperature' value_template: >- {% if states.weather.klzu_daynight.attributes.forecast[0].daytime == True %} {{ states.weather.klzu_daynight.attributes.forecast[0].temperature }} {% elif states.weather.klzu_daynight.attributes.forecast[1].daytime == True %} {{ states.weather.klzu_daynight.attributes.forecast[1].temperature }} {% endif %} device_class: temperature nws_current_condition: friendly_name: 'Current Condition' value_template: "{{ states.weather.klzu_daynight.state }}" nws_current_humidity: friendly_name: 'Current Humidity' value_template: "{{ states.weather.klzu_daynight.attributes.humidity }}" nws_current_visibility: friendly_name: "Current Visability" value_template: "{{ states.weather.klzu_daynight.attributes.visibility }}" nws_current_windspeed: friendly_name: "Current Windspeed" value_template: "{{ states.weather.klzu_daynight.attributes.wind_speed }}" nws_overnight_low: friendly_name: "Overnight Low" unit_of_measurement: '' value_template: >- {% if states.weather.klzu_daynight.attributes.forecast[0].daytime == False %} {{ states.weather.klzu_daynight.attributes.forecast[0].temperature }} {% elif states.weather.klzu_daynight.attributes.forecast[1].daytime == False %} {{ states.weather.klzu_daynight.attributes.forecast[1].temperature }} {% endif %} nws_overnight_forecast: friendly_name: "Overnight Forecast" unit_of_measurement: '' value_template: >- {% if states.weather.klzu_daynight.attributes.forecast[0].daytime == False %} {{ states.weather.klzu_daynight.attributes.forecast[0].detailed_description | truncate(250, False) }} {% elif states.weather.klzu_daynight.attributes.forecast[1].daytime == False %} {{ states.weather.klzu_daynight.attributes.forecast[1].detailed_description | truncate(250, False) }} {% elif states.weather.klzu_daynight.attributes.forecast[2].daytime == False %} {{ states.weather.klzu_daynight.attributes.forecast[2].detailed_description | truncate(250, False) }} {% endif %} nws_forecast_tomorrow: friendly_name: "Forecast Tomorrow" unit_of_measurement: '' value_template: >- {%- if states.weather.klzu_daynight.attributes.forecast[1].daytime == True %} {{ states.weather.klzu_daynight.attributes.forecast[1].detailed_description | truncate(250, False) }} {% elif states.weather.klzu_daynight.attributes.forecast[2].daytime == True %} {{ states.weather.klzu_daynight.attributes.forecast[2].detailed_description | truncate(250, False) }} {%- endif %} nws_forecast_rain_tomorrow: friendly_name: "Rain Chance Tomorrow" unit_of_measurement: '%' value_template: >- {%- if states.weather.klzu_daynight.attributes.forecast[1].daytime == True %} {{ states.weather.klzu_daynight.attributes.forecast[1].precipitation_probability }} {% elif states.weather.klzu_daynight.attributes.forecast[2].daytime == True %} {{ states.weather.klzu_daynight.attributes.forecast[2].precipitation_probability }} {%- endif %} nws_forecast_tomorrow_night: friendly_name: "Forecast Tomorrow Night" unit_of_measurement: '' value_template: >- {%- if states.weather.klzu_daynight.attributes.forecast[1].daytime == True %} {{ states.weather.klzu_daynight.attributes.forecast[2].detailed_description | truncate(250, False) }} {% elif states.weather.klzu_daynight.attributes.forecast[2].daytime == True %} {{ states.weather.klzu_daynight.attributes.forecast[3].detailed_description | truncate(250, False) }} {%- endif %} nws_forecast_rain_tomorrow_night: friendly_name: "Rain Chance Tomorrow Night" unit_of_measurement: '%' value_template: >- {%- if states.weather.klzu_daynight.attributes.forecast[1].daytime == True %} {{ states.weather.klzu_daynight.attributes.forecast[2].precipitation_probability }} {% elif states.weather.klzu_daynight.attributes.forecast[2].daytime == True %} {{ states.weather.klzu_daynight.attributes.forecast[3].precipitation_probability }} {%- endif %} current_inside_humidity: friendly_name: "Current Inside Humidity" unit_of_measurement: '%' value_template: "{{ states.climate.home.attributes.current_humidity }}" lighting_stike_count: friendly_name: "Lightning Strike Count" value_template: "{{ states.sensor.back_porch_strike_count.state }}" automation: - alias: 'NWS Weather Alert Pop Up Control' 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 Weather Sensor Refresh' trigger: platform: state entity_id: sensor.nws_alerts action: - service: script.refresh_weather_alert_sensors - alias: NWS Notification Weather Alert 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 }}' - condition: state entity_id: input_boolean.weather_alert_texts state: 'on' action: - service: script.text_notify data_template: title: "Weather Alert for Anchorage House" 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 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)) and 'Warning' in states.sensor.nws_alerts.attributes.title }}" action: - service: script.speech_engine data_template: who: '{{ states.sensor.room_audio.state }}' 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 %} - service: script.twitter_notify_image data_template: tweet: '{{ [ "Anchorage House is battening down the hatches. Servere Weather is imminent. #homeassistant #weather ", "The weather outside is getting intense, so I just made a weather announcement. #homeassistant #weather ", "Anchorage House monitors the NWS for severe weather using #homeAssistant just for these occasions. Thanks for the heads up @NWSAtlanta #homeassistant #weather " ] | random }}' image: >- {{ [ "/config/www/tweet_images/lightning.jpg", "/config/www/tweet_images/lightning-bolt.jpg"] | random }} - delay: '00:00:15' - service: script.speech_engine data_template: who: main 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 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 Warning' in states.sensor.nws_alerts.attributes.title}}" action: - service: script.jarvis_alert data_template: message: "Attention!,,,Attention!,,,The National Weather Service Has issued a Tornado Warning for our area." - service: script.twitter_notify_image data_template: tweet: '{{ [ "NWS is sounding the Tornado alarm, so I am too. Anchorage House is taking cover. #homeassistant #weather ", "Anchorage House is heading to the closet because the NWS just issued a tornado warning for our area. #homeassistant #weather ", "I just activated the internal Tornado Alarm. Thanks for the heads up @NWSAtlanta #homeassistant #weather " ] | random }}' image: >- "/config/www/tweet_images/tornado.jpg" - delay: '00:00:15' - service: script.jarvis_alert 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_alert data_template: title: "Tornado Warning!" message: "The National Weather Service Has issued a Tornado Warning for our area." - service: notify.alexa_media_skylar_s_bedroom data: message: A Tornado Warning has been issued for our area. Head to the closet. data: type: tts - alias: Lightning Detected trigger: - platform: template value_template: '{{ states.sensor.acurite_6045m_3078_strcnt.state | int > states.sensor.lightning_total_count.state | int }}' condition: - condition: state entity_id: input_boolean.lightning_warning state: 'off' action: - service: script.text_notify data_template: who: "jeff" title: "Lightning Detected!" message: "Lightning has been detected within 20 miles of Anchorage House" - service: input_boolean.turn_on entity_id: input_boolean.lightning_warning - service: script.lightning_warning_audible - alias: Lightning Warning Off mode: restart trigger: - platform: template value_template: '{{ states.sensor.acurite_6045m_3078_strcnt.state | int == states.sensor.lightning_total_count.state | int }}' for: minutes: 20 condition: - condition: state entity_id: input_boolean.lightning_warning state: 'on' action: - service: script.text_notify data_template: who: "jeff" title: "Lightning Threat Over." message: "No more Lightning Strikes detected." - service: input_boolean.turn_off entity_id: input_boolean.lightning_warning - service: script.lightning_clear_audible - alias: NWS Freeze Warning 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: "{{ 'Freeze Warning' in states.sensor.nws_alerts.attributes.title}}" action: - service: input_boolean.turn_on entity_id: input_boolean.freeze_warning - alias: Forecast Low Near Freezing trigger: - platform: numeric_state entity_id: sensor.nws_overnight_low below: 35 - platform: numeric_state entity_id: sensor.nws_current_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 - alias: Forecast Low Above Freezing trigger: - platform: numeric_state entity_id: sensor.nws_overnight_low above: 33 condition: - condition: state entity_id: input_boolean.freeze_warning state: 'on' - condition: numeric_state entity_id: sensor.nws_overnight_low above: 35 action: - service: input_boolean.turn_off entity_id: input_boolean.freeze_warning - alias: Activate Tornado alarm trigger: - platform: state entity_id: input_boolean.tornado_alarm from: 'off' to: 'on' action: - service: script.turn_on entity_id: script.tornado_alarm - alias: Deactivate Tornado alarm trigger: - platform: state entity_id: input_boolean.tornado_alarm from: 'on' to: 'off' action: - service: script.turn_off entity_id: script.tornado_alarm - service: media_player.media_stop entity_id: media_player.ha_speaker script: store_lightning_count: sequence: - service: mqtt.publish data: topic: house/lightning/total_count payload_template: "{{ states.sensor.acurite_6045m_3078_strcnt.state | int }}" retain: true 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: > {% if states.sensor.nws_alerts.state != '0' %} persistent_notification.create {% endif %} data_template: notification_id: "nwswxalert" message: "{{ message }}" title: '{{ title }}' tornado_alarm: sequence: - delay: seconds: 15 - service: media_player.play_media entity_id: media_player.ha_speaker data: media_content_id: http://192.168.7.40/audio/tornado_alarm.mp3 media_content_type: "music" - delay: seconds: 110 - service: media_player.play_media entity_id: media_player.ha_speaker data: media_content_id: http://192.168.7.40/audio/tornado_alarm.mp3 media_content_type: "music" lightning_warning_audible: sequence: - condition: state entity_id: binary_sensor.day state: 'on' - service: script.twitter_notify_image data_template: tweet: '{{ [ "Did you see that flash? I did. Letting everyone know there is lightning nearby.", "When Lightning is near I notify the residents of Anchorage House to keep them safe.", "If the residents of Anchorage House didnt hear the thunder I just gave them a heads up.", "Everyone inside! If you are near Anchorage House that is. Lightning is near." ] | random }}' image: >- {{ [ "/config/www/tweet_images/lightning.jpg", "/config/www/tweet_images/lightning-bolt.jpg"] | random }} - service: script.speech_engine data_template: who: '{{ states.sensor.room_audio.state }}' message: >-

{{ [ 'I have detected lightning withing 20 miles of Anchorage House.', 'Did you see that flash? I did. Lightning is near.', 'If you didnt hear the thunder you will soon. ' ]|random }} If anyone is outside they shoudld seek shelter inside. {% if is_state('binary_sensor.garage_door', 'on') %} {{ [ 'The garage door needs to be closed. ', 'Can someone close the garage?. ', 'If you do not want the contents of the garage to get wet, you might want to close it.' ] | random }} {% endif %}

lightning_clear_audible: sequence: - condition: state entity_id: binary_sensor.day state: 'on' - service: script.speech_engine data_template: who: '{{ states.sensor.room_audio.state }}' message: >-

{{ [ 'Lightning threat appears to be over.', 'No more lightning appears to be occuring.', 'Lightning is gone.' ]|random }} It is safe to resume normal activities.

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