Severe Weather Alerts from the US National Weather Service

I thought I had found a way around it by requiring the alert to be on for 20mins before notifications go out; this test today lasted for 30; it had previously been 5-10

Yeah, the NWS alert system isnā€™t the most reliable system at times but it generally works pretty well and itā€™s better than nothing.

Last time I attempted to install HACS something went badly and it never worked right, do you have a link? Iā€™m having difficulty figuring out which of several I see in the long thread tot look at.

2 Likes

try the latest release to see if the new ā€œmessage typeā€ attribute meets your filtering needs.

It should be available in HACS shortly.

Just thought I would share one option I am exploringā€¦now I have to wait for a severe storm and see if I like how the addon or my sensors work.

I donā€™t know yet if ā€œzonesā€ as the addon uses or ā€œpointā€ (unsure if it accepts more than one) as I am trying would be best for my needs but something to consider for future enhancements - (exact location censored) so I can hopefully avoid alerts that regularly go out for the ā€œtipā€ of the county not affecting me.

  - platform: rest
    name: 'NWS Tornado Warning King George'
    resource: 'https://api.weather.gov/alerts/active?point=38.123,-77.123&status=actual&message_type=alert,update&event=Tornado Warning'
    method: GET
    value_template: '{{ value_json.features[0] is defined }}'
    headers:
      User-Agent: "HomeAssistant / nws_alerts_king_george; contact: [email protected]"
    scan_interval: 60

  - platform: rest
    name: 'NWS Severe Thunderstorm Warning King George'
    resource: 'https://api.weather.gov/alerts/active?point=38.123,-77.123&status=actual&message_type=alert,update&event=Severe Thunderstorm Warning'
    method: GET
    value_template: '{{ value_json.features[0] is defined }}'
    headers:
      User-Agent: "HomeAssistant / nws_alerts_king_george; contact: [email protected]"
    scan_interval: 60

  # High Winds

  - platform: rest
    name: 'NWS High Wind Warning King George'
    resource: 'https://api.weather.gov/alerts/active?point=38.123,-77.123&status=actual&message_type=alert,update&event=High Wind Warning,Extreme Wind Warning'
    method: GET
    value_template: '{{ value_json.features[0] is defined }}'
    headers:
      User-Agent: "HomeAssistant / nws_alerts_king_george; contact: [email protected]"
    scan_interval: 300

# and so on...
1 Like

Thanks for this HACS integration @finity . I did a lot of alert testing by just going to this website https://www.weather.gov/ and under the map are the various alerts that are going on at places in the country right now. When you click on the warnings or alerts at the bottom it will give you the location code where it is happening now, and you can throw that into your setup to test.

The biggest issue is differentiating the alerts - I want a Tornado warning to wake me up in the middle of the night, but not a freeze warning. I put together a Node Red flow that so far for me has been working pretty well to categorize the alerts by severity - from just an ā€œapp pushā€ for minor advisories, to Alexa blaring out and turning the lights on in the middle of the night for a Tornado warning. My setup basically has modes Home, Night, and Away that will change the way the alert comes through based on the mode. It also uses Twilio for texts, App pushes in the Home assistant app, Alexa media player for spoken notifications, and the Alexa Notify me skill that just makes the yellow ring glow. There are limits so alerts donā€™t keep going off too, and stored variables so when there are multiple alerts, and one goes away, it doesnā€™t send them all out again. Iā€™m sure the flow can be customized depending on how one wants the alerts to come through.

Import code

[{"id":"71361e1f.783d6","type":"switch","z":"af00be25.d4686","name":"Warning Severity","property":"data.attributes.title","propertyType":"msg","rules":[{"t":"regex","v":"(tornado warning)","vt":"str","case":true},{"t":"regex","v":"(thunderstorm warning)","vt":"str","case":true},{"t":"regex","v":"(warning|thunderstorm|tornado)","vt":"str","case":true},{"t":"nnull"}],"checkall":"false","repair":false,"outputs":4,"x":950,"y":60,"wires":[["818ccaca.8d3a7"],["c5a7eeaf.3e2cc8"],["c0cbd23e.0d8478"],["c0cbd23e.0d8478"]]},{"id":"e4069d42.deece","type":"alexa-notifyme","z":"af00be25.d4686","name":"","notification":"","x":1580,"y":80,"wires":[[]]},{"id":"818ccaca.8d3a7","type":"function","z":"af00be25.d4686","name":"Process Alert","func":"var w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nmsg.payload = w\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1290,"y":20,"wires":[["6a498c48.7fe76c","c4127ea3.08fd68","62713381.b49954"]]},{"id":"1ec0b5be.6458da","type":"api-current-state","z":"af00be25.d4686","name":"Full State","server":"ae531ce.a39906","version":2,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.nws_alerts","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":720,"y":60,"wires":[["71361e1f.783d6"]]},{"id":"1dd23dcf.7908ba","type":"server-state-changed","z":"af00be25.d4686","name":"NWS Alert","server":"ae531ce.a39906","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.nws_alerts","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":false,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":100,"y":120,"wires":[["1ec90bb1.4aee3c"]]},{"id":"c0cbd23e.0d8478","type":"delay","z":"af00be25.d4686","name":"Limit Notifications","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"12","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":550,"y":200,"wires":[["6bcb7b26.46c574"]]},{"id":"ba36a3d9.26aab8","type":"api-current-state","z":"af00be25.d4686","name":"Night?","server":"ae531ce.a39906","version":2,"outputs":2,"halt_if":"Night","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_select.mode","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":550,"y":80,"wires":[["1ec0b5be.6458da"],[]]},{"id":"5a81021d.18dcac","type":"api-current-state","z":"af00be25.d4686","name":"Home?","server":"ae531ce.a39906","version":2,"outputs":2,"halt_if":"Home","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_select.mode","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":520,"y":320,"wires":[["d580970f.1f91b","63233c91.5aacc4"],[]]},{"id":"6e00bd75.e9e854","type":"api-current-state","z":"af00be25.d4686","name":"Away?","server":"ae531ce.a39906","version":2,"outputs":2,"halt_if":"Away","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_select.mode","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":510,"y":600,"wires":[["d94fb547.58b388"],[]]},{"id":"22d518db.2be5a","type":"switch","z":"af00be25.d4686","name":"Warning Severity","property":"data.attributes.title","propertyType":"msg","rules":[{"t":"regex","v":"(tornado warning)","vt":"str","case":true},{"t":"regex","v":"(thunderstorm warning)","vt":"str","case":true},{"t":"regex","v":"(thunderstorm|tornado)","vt":"str","case":true},{"t":"regex","v":"(warning)","vt":"str","case":true},{"t":"nnull"}],"checkall":"false","repair":false,"outputs":5,"x":950,"y":320,"wires":[["f6925890.46951"],["36152c61.85dd5c"],["6edb4cd6.c0141c"],["bf1765f5.0d60e"],["670a342d.56ce4c"]]},{"id":"7af67eab.aab1e","type":"alexa-notifyme","z":"af00be25.d4686","name":"","notification":"","x":1620,"y":360,"wires":[[]]},{"id":"bf1765f5.0d60e","type":"function","z":"af00be25.d4686","name":"Process Alert Time","func":"function addZero(i) {\n  if (i < 10) {\n    i = \"0\" + i;\n  }\n  return i;\n}\n\nfunction convertmil(j) {\n    if (j > 12) {\n        j = j - 12\n    }\n    if (j === 0) {\n        j = j + 12\n    }\n    return j;\n}\n\nfunction ampm(k) {\n    if (k > 11) {\n        k = \" PM\"\n    }\n    if (k < 12) {\n        k = \" AM\"\n    }\n    return k;\n}\n\nvar w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nvar d = new Date();\nvar h = convertmil(d.getHours());\nvar a = ampm(d.getHours());\nvar m = addZero(d.getMinutes());\nvar e = \" issued at \"\nmsg.payload = w + e + h + \" \" + m + a;\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1210,"y":420,"wires":[["c5078b9e.b07ca8"]]},{"id":"7a4c42f7.19077c","type":"function","z":"af00be25.d4686","name":"Process Alert","func":"var w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nmsg.payload = w\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1190,"y":480,"wires":[["48eb17b6.49fc4"]]},{"id":"d580970f.1f91b","type":"api-current-state","z":"af00be25.d4686","name":"Full State","server":"ae531ce.a39906","version":2,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.nws_alerts","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":740,"y":320,"wires":[["22d518db.2be5a"]]},{"id":"c5078b9e.b07ca8","type":"delay","z":"af00be25.d4686","name":"Limit","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"6","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1390,"y":420,"wires":[["7af67eab.aab1e","6a498c48.7fe76c"]]},{"id":"740ecf27.5993a8","type":"switch","z":"af00be25.d4686","name":"Warning Severity","property":"data.attributes.title","propertyType":"msg","rules":[{"t":"regex","v":"(tornado warning)","vt":"str","case":true},{"t":"regex","v":"(thunderstorm warning)","vt":"str","case":true},{"t":"regex","v":"(thunderstorm|tornado)","vt":"str","case":true},{"t":"regex","v":"(warning)","vt":"str","case":true},{"t":"nnull"}],"checkall":"false","repair":false,"outputs":5,"x":930,"y":640,"wires":[["c982c3d.2d195c"],["b457dfa.5a8b72"],["749e86e2.a3406"],["db8133d4.84b6"],["ddea3d90.e9199"]]},{"id":"c982c3d.2d195c","type":"function","z":"af00be25.d4686","name":"Process Alert","func":"var w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nmsg.payload = w\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1170,"y":580,"wires":[["27ebbe5d.63a21a","8db8731c.47c38"]]},{"id":"b457dfa.5a8b72","type":"function","z":"af00be25.d4686","name":"Process Alert","func":"var w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nmsg.payload = w\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1170,"y":640,"wires":[["8db8731c.47c38"]]},{"id":"ddea3d90.e9199","type":"function","z":"af00be25.d4686","name":"Process Alert","func":"var w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nmsg.payload = w\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1170,"y":800,"wires":[["c28b4efa.2e248"]]},{"id":"d94fb547.58b388","type":"api-current-state","z":"af00be25.d4686","name":"Full State","server":"ae531ce.a39906","version":2,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.nws_alerts","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":700,"y":600,"wires":[["740ecf27.5993a8"]]},{"id":"c28b4efa.2e248","type":"delay","z":"af00be25.d4686","name":"Limit Notifications","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"6","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1390,"y":800,"wires":[["58b091b9.da2b8"]]},{"id":"c5a7eeaf.3e2cc8","type":"function","z":"af00be25.d4686","name":"Process Alert Time","func":"function addZero(i) {\n  if (i < 10) {\n    i = \"0\" + i;\n  }\n  return i;\n}\n\nfunction convertmil(j) {\n    if (j > 12) {\n        j = j - 12\n    }\n    if (j === 0) {\n        j = j + 12\n    }\n    return j;\n}\n\nfunction ampm(k) {\n    if (k > 11) {\n        k = \" PM\"\n    }\n    if (k < 12) {\n        k = \" AM\"\n    }\n    return k;\n}\n\nvar w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nvar d = new Date();\nvar h = convertmil(d.getHours());\nvar a = ampm(d.getHours());\nvar m = addZero(d.getMinutes());\nvar e = \" issued at \"\nmsg.payload = w + e + h + \" \" + m + a;\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1230,"y":80,"wires":[["51b6fc3d.3528ac"]]},{"id":"7f56f557.217f6c","type":"ha-wait-until","z":"af00be25.d4686","name":"Wait til 7","server":"ae531ce.a39906","version":0,"outputs":1,"entityId":"sensor.time","entityIdFilterType":"exact","property":"state","comparator":"is","value":"07:00","valueType":"str","timeout":"0","timeoutType":"num","timeoutUnits":"seconds","entityLocation":"","entityLocationType":"none","checkCurrentState":true,"blockInputOverrides":false,"x":1120,"y":200,"wires":[["d580970f.1f91b"]]},{"id":"63233c91.5aacc4","type":"change","z":"af00be25.d4686","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"reset","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":260,"wires":[["6bcb7b26.46c574","7f56f557.217f6c"]]},{"id":"7157262f.3a26e8","type":"api-call-service","z":"af00be25.d4686","name":"Weather Alert","server":"ae531ce.a39906","version":3,"debugenabled":false,"service_domain":"notify","service":"alexa_media","entityId":"","data":"{\"message\":\"Weather alert. {{payload}} \",\"data\":{\"type\":\"announce\",\"method\":\"all\"},\"target\":[\"media_player.living_room\",\"media_player.bedroom\"]}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1620,"y":260,"wires":[[]]},{"id":"c4127ea3.08fd68","type":"twilio out","z":"af00be25.d4686","twilio":"","twilioType":"sms","url":"","number":"","name":"","x":1170,"y":140,"wires":[]},{"id":"6a498c48.7fe76c","type":"twilio out","z":"af00be25.d4686","twilio":"","twilioType":"sms","url":"","number":"","name":"","x":1350,"y":140,"wires":[]},{"id":"35beaa48.8e51fe","type":"api-call-service","z":"af00be25.d4686","name":"Weather Alert","server":"ae531ce.a39906","version":3,"debugenabled":false,"service_domain":"notify","service":"alexa_media","entityId":"","data":"{\"message\":\"Weather alert. {{payload}} \",\"data\":{\"type\":\"announce\",\"method\":\"all\"},\"target\":[\"media_player.living_room\",\"media_player.bedroom\"]}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1960,"y":20,"wires":[[]]},{"id":"27ebbe5d.63a21a","type":"twilio out","z":"af00be25.d4686","twilio":"","twilioType":"sms","url":"","number":"","name":"","x":1430,"y":580,"wires":[]},{"id":"8db8731c.47c38","type":"twilio out","z":"af00be25.d4686","twilio":"","twilioType":"sms","url":"","number":"","name":"","x":1430,"y":640,"wires":[]},{"id":"21d182a2.dde4b6","type":"api-call-service","z":"af00be25.d4686","name":"App Push Weather","server":"ae531ce.a39906","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app","entityId":"","data":"{\"message\":\"{{payload}}\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1630,"y":480,"wires":[[]]},{"id":"48eb17b6.49fc4","type":"delay","z":"af00be25.d4686","name":"Limit","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"6","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1370,"y":480,"wires":[["21d182a2.dde4b6"]]},{"id":"58b091b9.da2b8","type":"api-call-service","z":"af00be25.d4686","name":"App Push Weather","server":"ae531ce.a39906","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app","entityId":"","data":"{\"message\":\"{{payload}}\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1630,"y":680,"wires":[[]]},{"id":"b47a21c4.3acd6","type":"delay","z":"af00be25.d4686","name":"Limit Notifications","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"6","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1410,"y":740,"wires":[["58b091b9.da2b8"]]},{"id":"36152c61.85dd5c","type":"function","z":"af00be25.d4686","name":"Process Alert Time","func":"function addZero(i) {\n  if (i < 10) {\n    i = \"0\" + i;\n  }\n  return i;\n}\n\nfunction convertmil(j) {\n    if (j > 12) {\n        j = j - 12\n    }\n    if (j === 0) {\n        j = j + 12\n    }\n    return j;\n}\n\nfunction ampm(k) {\n    if (k > 11) {\n        k = \" PM\"\n    }\n    if (k < 12) {\n        k = \" AM\"\n    }\n    return k;\n}\n\nvar w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nvar d = new Date();\nvar h = convertmil(d.getHours());\nvar a = ampm(d.getHours());\nvar m = addZero(d.getMinutes());\nvar e = \" issued at \"\nmsg.payload = w + e + h + \" \" + m + a;\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1210,"y":320,"wires":[["6a498c48.7fe76c","387b2f87.63aa38"]]},{"id":"223d2b7f.2d576c","type":"api-call-service","z":"af00be25.d4686","name":"Lights 100","server":"ae531ce.a39906","version":3,"debugenabled":false,"service_domain":"light","service":"turn_on","entityId":"light.bedroom_fan_light_2, light.bedroom_wall_switch_2","data":"{\"brightness_pct\":100}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1810,"y":80,"wires":[[]]},{"id":"db8133d4.84b6","type":"function","z":"af00be25.d4686","name":"Process Alert","func":"var w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nmsg.payload = w\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1170,"y":740,"wires":[["b47a21c4.3acd6"]]},{"id":"f6925890.46951","type":"function","z":"af00be25.d4686","name":"Process Alert Time","func":"function addZero(i) {\n  if (i < 10) {\n    i = \"0\" + i;\n  }\n  return i;\n}\n\nfunction convertmil(j) {\n    if (j > 12) {\n        j = j - 12\n    }\n    if (j === 0) {\n        j = j + 12\n    }\n    return j;\n}\n\nfunction ampm(k) {\n    if (k > 11) {\n        k = \" PM\"\n    }\n    if (k < 12) {\n        k = \" AM\"\n    }\n    return k;\n}\n\nvar w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nvar d = new Date();\nvar h = convertmil(d.getHours());\nvar a = ampm(d.getHours());\nvar m = addZero(d.getMinutes());\nvar e = \" issued at \"\nmsg.payload = w + e + h + \" \" + m + a;\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1210,"y":260,"wires":[["c4127ea3.08fd68","6a498c48.7fe76c","7157262f.3a26e8","7af67eab.aab1e"]]},{"id":"fea7627f.326b6","type":"inject","z":"af00be25.d4686","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":800,"wires":[["bfde1392.3b82a8"]]},{"id":"bfde1392.3b82a8","type":"template","z":"af00be25.d4686","name":"Variables?","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{ \n \"Numberofalerts\" : \"{{flow.numalerts}}\"\n}","output":"json","x":330,"y":800,"wires":[["7f4df5.5de1c20c"]]},{"id":"7f4df5.5de1c20c","type":"debug","z":"af00be25.d4686","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":530,"y":800,"wires":[]},{"id":"72dfcae5.1e8694","type":"api-current-state","z":"af00be25.d4686","name":"Num Alerts","server":"ae531ce.a39906","version":2,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.nws_alerts","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":130,"y":260,"wires":[["8a75193a.cbc4","27974268.b823c6"]]},{"id":"8ecea29f.7b96e8","type":"stoptimer","z":"af00be25.d4686","duration":"5","units":"Second","payloadtype":"num","payloadval":"0","name":"","x":160,"y":400,"wires":[["a8fbc4d1.42142"],[]]},{"id":"8a75193a.cbc4","type":"switch","z":"af00be25.d4686","name":"New Alerts?","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"gte","v":"numalerts","vt":"flow"}],"checkall":"false","repair":false,"outputs":2,"x":330,"y":320,"wires":[["71e556e9.54b418"],["ba36a3d9.26aab8","5a81021d.18dcac","6e00bd75.e9e854"]]},{"id":"a8fbc4d1.42142","type":"change","z":"af00be25.d4686","name":"Number of Alerts","rules":[{"t":"set","p":"numalerts","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":170,"y":480,"wires":[[]]},{"id":"c4eabbf5.8cf7a","type":"inject","z":"af00be25.d4686","name":"Startup","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"60","topic":"","payload":"","payloadType":"date","x":140,"y":720,"wires":[["341e2331.11fb74"]]},{"id":"341e2331.11fb74","type":"api-current-state","z":"af00be25.d4686","name":"Num Alerts","server":"ae531ce.a39906","version":2,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.nws_alerts","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":370,"y":720,"wires":[["79629ffb.0598e8"]]},{"id":"79629ffb.0598e8","type":"change","z":"af00be25.d4686","name":"Number of Alerts","rules":[{"t":"set","p":"numalerts","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":720,"wires":[[]]},{"id":"9fd358d0.88b5f8","type":"inject","z":"af00be25.d4686","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":300,"y":220,"wires":[["72dfcae5.1e8694"]]},{"id":"27974268.b823c6","type":"switch","z":"af00be25.d4686","name":"Not null?","property":"payload","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":150,"y":340,"wires":[["8ecea29f.7b96e8"]]},{"id":"6edb4cd6.c0141c","type":"function","z":"af00be25.d4686","name":"Process Alert Time","func":"function addZero(i) {\n  if (i < 10) {\n    i = \"0\" + i;\n  }\n  return i;\n}\n\nfunction convertmil(j) {\n    if (j > 12) {\n        j = j - 12\n    }\n    if (j === 0) {\n        j = j + 12\n    }\n    return j;\n}\n\nfunction ampm(k) {\n    if (k > 11) {\n        k = \" PM\"\n    }\n    if (k < 12) {\n        k = \" AM\"\n    }\n    return k;\n}\n\nvar w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nvar d = new Date();\nvar h = convertmil(d.getHours());\nvar a = ampm(d.getHours());\nvar m = addZero(d.getMinutes());\nvar e = \" issued at \"\nmsg.payload = w + e + h + \" \" + m + a;\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1210,"y":380,"wires":[["6a498c48.7fe76c","d5c42902.9f5758"]]},{"id":"749e86e2.a3406","type":"function","z":"af00be25.d4686","name":"Process Alert","func":"var w = msg.data.attributes.spoken_desc\nw = w.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nw = w.replace(/(\\-)/gm, \". \");\nmsg.payload = w\nvar newMsg =  {  \n   payload:msg.payload\n}\nreturn newMsg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1170,"y":680,"wires":[["58b091b9.da2b8"]]},{"id":"70cab0db.4ece","type":"time-range-switch","z":"af00be25.d4686","name":"","lat":"","lon":"","startTime":"20:00","endTime":"07:00","startOffset":0,"endOffset":0,"x":930,"y":200,"wires":[["7f56f557.217f6c"],["d580970f.1f91b"]]},{"id":"6bcb7b26.46c574","type":"ha-wait-until","z":"af00be25.d4686","name":"Wait til Home","server":"ae531ce.a39906","version":0,"outputs":1,"entityId":"input_select.mode","entityIdFilterType":"exact","property":"state","comparator":"is","value":"Home","valueType":"str","timeout":"0","timeoutType":"num","timeoutUnits":"seconds","entityLocation":"","entityLocationType":"none","checkCurrentState":true,"blockInputOverrides":false,"x":750,"y":200,"wires":[["70cab0db.4ece"]]},{"id":"670a342d.56ce4c","type":"switch","z":"af00be25.d4686","name":"Thunder Statement?","property":"data.attributes.spoken_desc","propertyType":"msg","rules":[{"t":"regex","v":"(thunderstorm|tornado)","vt":"str","case":true},{"t":"else"}],"checkall":"false","repair":false,"outputs":2,"x":960,"y":460,"wires":[["6edb4cd6.c0141c"],["7a4c42f7.19077c"]]},{"id":"95e4473c.4e4eb","type":"api-current-state","z":"af00be25.d4686","name":"Full State","server":"ae531ce.a39906","version":2,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.nws_alerts","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":340,"y":900,"wires":[["4ebfc08a.3d7cc"]]},{"id":"46fb30f8.cfb788","type":"inject","z":"af00be25.d4686","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":900,"wires":[["95e4473c.4e4eb"]]},{"id":"4ebfc08a.3d7cc","type":"debug","z":"af00be25.d4686","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":510,"y":900,"wires":[]},{"id":"8c2223ed.6c0ac8","type":"api-call-service","z":"af00be25.d4686","name":"Bedroom Alert On","server":"ae531ce.a39906","version":3,"debugenabled":false,"service_domain":"input_boolean","service":"turn_on","entityId":"input_boolean.bedroom_alert","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":2010,"y":80,"wires":[[]]},{"id":"e0bbd851.a46a78","type":"stoptimer","z":"af00be25.d4686","duration":"5","units":"Second","payloadtype":"num","payloadval":"0","name":"","x":1740,"y":20,"wires":[["35beaa48.8e51fe"],[]]},{"id":"5962d6f8.4c6978","type":"stoptimer","z":"af00be25.d4686","duration":"60","units":"Second","payloadtype":"num","payloadval":"0","name":"","x":1810,"y":140,"wires":[["50db5ffb.b5f298"],[]]},{"id":"50db5ffb.b5f298","type":"api-call-service","z":"af00be25.d4686","name":"Bedroom Alert Off","server":"ae531ce.a39906","version":3,"debugenabled":false,"service_domain":"input_boolean","service":"turn_off","entityId":"input_boolean.bedroom_alert","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":2030,"y":140,"wires":[[]]},{"id":"71e556e9.54b418","type":"debug","z":"af00be25.d4686","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":350,"y":120,"wires":[]},{"id":"1ec90bb1.4aee3c","type":"stoptimer","z":"af00be25.d4686","duration":"2","units":"Second","payloadtype":"num","payloadval":"0","name":"","x":140,"y":180,"wires":[["72dfcae5.1e8694"],[]]},{"id":"387b2f87.63aa38","type":"delay","z":"af00be25.d4686","name":"Limit","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"3","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1390,"y":320,"wires":[["7157262f.3a26e8","7af67eab.aab1e"]]},{"id":"51b6fc3d.3528ac","type":"delay","z":"af00be25.d4686","name":"Limit","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"3","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1410,"y":80,"wires":[["e4069d42.deece"]]},{"id":"d5c42902.9f5758","type":"delay","z":"af00be25.d4686","name":"Limit","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"6","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1390,"y":380,"wires":[["7af67eab.aab1e"]]},{"id":"62713381.b49954","type":"delay","z":"af00be25.d4686","name":"Limit","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"3","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1490,"y":20,"wires":[["e0bbd851.a46a78","223d2b7f.2d576c","5962d6f8.4c6978","8c2223ed.6c0ac8"]]},{"id":"ae531ce.a39906","type":"server","name":"Home Assistant","version":1,"legacy":false,"addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

This is awesome btw! I am going to use your NR flow. Curious what you are using the Bedroom Alert for. Can you explain?

1 Like

The bedroom alert is an input boolean I made with an automation that turns off do not disturb on the Alexa in the bedroom and sets its volume to 10 when the ā€œswitchā€ is turned on. Turning it off sets volume back to 5 and turns do not disturb back on.

I have other automations beside weather that can trigger it but you can probably do call service nodes right in Node red to do the same thing using Alexa Media Player entities. Hereā€™s the automations I have for it in Home Assistant though

alias: Bedroom alert on
description: ''
trigger:
  - platform: state
    entity_id: input_boolean.bedroom_alert
    to: 'on'
condition: []
action:
  - service: switch.turn_off
    data: {}
    entity_id: switch.bedroom_do_not_disturb_switch
  - service: media_player.volume_set
    data:
      volume_level: 1
    entity_id: media_player.bedroom
mode: single

And off

alias: Bedroom alert off
description: ''
trigger:
  - platform: state
    entity_id: input_boolean.bedroom_alert
    to: 'off'
condition: []
action:
  - service: media_player.volume_set
    data:
      volume_level: 0.5
    entity_id: media_player.bedroom
  - service: switch.turn_on
    data: {}
    entity_id: switch.bedroom_do_not_disturb_switch
mode: single
1 Like

It seems youā€™ve already got it working the way you want but just as an FYI, I have the code examples I use for differentiating alerts in the repo at github.

@finity
Finally, I was able to capture the data. I do still get test alerts.
Unfortunately the ā€œThis is a Testā€ is buried in the description. For test the type is ā€œAlertAlertā€

attribution: Data provided by Weather.gov
title: Tsunami Warning - Tsunami Warning
event_id: >-
  https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.71d7d0751a32f5aaaf1f8459b0400eed5df86808.001.1-https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.1fa001cb9ac3633f7dea41e5f4847966f7a7a14e.001.1
message_type: AlertAlert
display_desc: |-

  >
  Headline: Tsunami Warning
  Message Type: Alert
  Severity: Extreme
  Certainty: Likely
  Description: PZZ530-AKZ017>029-135-131-125-121-171-181-185-187-191-195-
  BCZ130-230-250-260-280-160-142-141-150-121-122-220-210-922-
  912-921-911-110-WAZ503-506>511-001-514>517-021-ORZ001-002-
  021-022-CAZ039>043-087-034-035-530-006-506-508-509-529-505-
  002-001-549-550-151717-
  /T.NEW.PAAQ.TS.W.9013.210715T1617Z-210715T1717Z/
  Alaska, British Columbia, Washington, Oregon and California
  coastal areas

  ...THIS_MESSAGE_IS_FOR_TEST_PURPOSES_ONLY...

  ...THIS IS A TEST TO DETERMINE TRANSMISSION TIMES INVOLVED IN THE
  DISSEMINATION OF TSUNAMI INFORMATION...


  RESPONSES ARE REQUIRED FROM
  ---------------------------
  * All Coastal Weather Forecast Offices in Alaska, Washington,
  Oregon and California

  * USAF 11th Rescue Coordination Center at Elmendorf AFB

  * California, Oregon, Washington and Alaska State Warning Points

  * Emergency Management British Columbia

  * The Pacific Storm Prediction Centre in British Columbia

  * Joint Typhoon Warning Center in Hawaii

  * U.S. Coast Guard 11th, 13th, 17th District Offices

  * U.S. Coast Guard Kodiak COMMSTA and CAMSPAC Point Reyes, CA

  * Canadian Coast Guard MCTS COMOX and/or Victoria

  * FAA Regional Operations Center in Seattle

  * All Pacific Coast Tsunamiready Community Warning Points.


  RESPONSES SHOULD INCLUDE
  ------------------------
  * Time-of-receipt
  * Agency name
  * Email address
  * Phone number


  Weather Service Offices should respond in accordance with local
  directives. All others should reply by one of the available methods
  below.


  SEND RESPONSE BY
  ----------------
  * Web - ntwc.arh.noaa.gov/commtest/index.html
  * Email address - [email protected]
  * AFTN address  - PAAQYQYX
  * AWIPS         - TMA
  * Fax           - 907-745-6071

  ...THIS_MESSAGE_IS_FOR_TEST_PURPOSES_ONLY...

  ...THIS IS A TEST TO DETERMINE TRANSMISSION TIMES INVOLVED IN THE
  DISSEMINATION OF TSUNAMI INFORMATION...
  Instruction: 

  -


  >
  Headline: Tsunami Warning
  Message Type: Alert
  Severity: Extreme
  Certainty: Likely
  Description: PZZ530-AKZ017>029-135-131-125-121-171-181-185-187-191-195-
  BCZ130-230-250-260-280-160-142-141-150-121-122-220-210-922-
  912-921-911-110-WAZ503-506>511-001-514>517-021-ORZ001-002-
  021-022-CAZ039>043-087-034-035-530-006-506-508-509-529-505-
  002-001-549-550-151717-
  /T.NEW.PAAQ.TS.W.9013.210715T1617Z-210715T1717Z/
  Alaska, British Columbia, Washington, Oregon and California
  coastal areas

  ...THIS_MESSAGE_IS_FOR_TEST_PURPOSES_ONLY...

  ...THIS IS A TEST TO DETERMINE TRANSMISSION TIMES INVOLVED IN THE
  DISSEMINATION OF TSUNAMI INFORMATION...


  RESPONSES ARE REQUIRED FROM
  ---------------------------
  * All Coastal Weather Forecast Offices in Alaska, Washington,
  Oregon and California

  * USAF 11th Rescue Coordination Center at Elmendorf AFB

  * California, Oregon, Washington and Alaska State Warning Points

  * Emergency Management British Columbia

  * The Pacific Storm Prediction Centre in British Columbia

  * Joint Typhoon Warning Center in Hawaii

  * U.S. Coast Guard 11th, 13th, 17th District Offices

  * U.S. Coast Guard Kodiak COMMSTA and CAMSPAC Point Reyes, CA

  * Canadian Coast Guard MCTS COMOX and/or Victoria

  * FAA Regional Operations Center in Seattle

  * All Pacific Coast Tsunamiready Community Warning Points.


  RESPONSES SHOULD INCLUDE
  ------------------------
  * Time-of-receipt
  * Agency name
  * Email address
  * Phone number


  Weather Service Offices should respond in accordance with local
  Instruction: 
spoken_desc: |-
  Tsunami Warning

  -

  Tsunami Warning
friendly_name: NWS Alerts
icon: mdi:alert

So you have everything you need to filter out those messages now?

is it working as expected?

I donā€™t know yet. I donā€™t think so since the NWS is not putting ā€˜testā€™ as the type. I think ā€˜alertā€™ is used for everything. As for it working as expectedā€¦If they canā€™t follow their own directions, it makes it harder for us to get the correct info. The integration works, unfortunately the NWS is not designating tests as ā€˜testā€™.

I did see a post above about using a (not) condition to see if a string of text is present (263ish); I will give that a try and probably an automation that specifically activates for tests, just so I can positively know that the other automation is filtering out tests.

I will give this a try, this text was in my test message.

    - condition: template
      value_template: "{{ ('THIS_MESSAGE_IS_FOR_TEST_PURPOSES_ONLY' not in (state_attr('sensor.nws_alerts','display_desc').split('\n\n-\n\n')[0])) }}"

I think this is a bug as the types should be a list of type per message. Since you have 2 alerts you get ā€œAlertAlertā€.

Sometimes I get ā€œAlertAlertUpdateAlertā€.

Example:

attribution: Data provided by Weather.gov
title: Flash Flood Watch - Air Quality Alert
event_id: >-
  https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2831dbbf0711d578361a151db422e686e328df83.001.1-https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4db951ea52e2897684be9bb16092e6ecd99655f0.001.1
message_type: UpdateAlert
display_desc: >-

  >

  Headline: FLASH FLOOD WATCH REMAINS IN EFFECT THROUGH THIS EVENING

  Message Type: Update

  Severity: Severe

  Certainty: Possible

  Description: The Flash Flood Watch continues for


  * A portion of south central Arizona, including the following areas,

  Apache Junction/Gold Canyon, Dripping Springs, Globe/Miami,

  Mazatzal Mountains, New River Mesa, Pinal/Superstition Mountains,

  Rio Verde/Salt River, San Carlos, Southeast Gila County, Superior

  and Tonto Basin.


  * Through this evening.


  * The potential for heavy rain continues, including many of the burn

  scar areas.

  Instruction: You should monitor later forecasts and be prepared to take action

  should Flash Flood Warnings be issued.


  -



  >

  Headline: OZONE HIGH POLLUTION ADVISORY FOR MARICOPA COUNTY INCLUDING THE
  GREATER PHOENIX AREA FRIDAY

  Message Type: Alert

  Severity: Unknown

  Certainty: Unknown

  Description: The Arizona Department of Environmental Quality in Phoenix has
  issued

  an Ozone High Pollution Advisory for the Greater Phoenix Area for

  Friday.


  This means that forecast weather conditions combined with existing

  ozone levels are expected to result in local maximum 8-hour ozone

  concentrations that pose a health risk. Adverse health effects

  increase as air quality deteriorates.


  Ozone is an air contaminant which can cause breathing difficulties

  for children, older adults, as well as persons with respiratory

  problems. A decrease in physical activity is recommended.


  If it is a regularly scheduled work day, you are urged to car pool,

  telecommute or use mass transit.


  The use of gasoline-powered equipment should be reduced or done late

  in the day.


  For details on this High Pollution Advisory for Maricopa County,

  visit the ADEQ internet site at www.azdeq.gov/forecasting or call 602-

  771-2300.

  Instruction: 
spoken_desc: >-
  FLASH FLOOD WATCH REMAINS IN EFFECT THROUGH THIS EVENING


  -


  OZONE HIGH POLLUTION ADVISORY FOR MARICOPA COUNTY INCLUDING THE GREATER
  PHOENIX AREA FRIDAY
friendly_name: NWS Alerts
icon: mdi:alert

A bug in the integration or a bug at the NWS?

Iā€™m not 100% sure, might just be a formatting bug, nothing major.

EDIT: after reviewing the code, looks like youā€™re adding the type:

Likely better to make mesage_type a list instead.

Yeah, I see that now. Thanks.

Iā€™ll get that fixed.

It shows up correctly in the display description.

@GlennHA

I just replied to your issueā€¦

1 Like

Before you make changes, you might want to review my PR :stuck_out_tongue:

So, @GlennHA and @firstof9 I have a question and would like advice.

Right now each attribute content is just a string generally separated by a dash for each of the multiple alerts.

Should I change those contents to be real list data types to make the data extraction/filtering easier in the future or should I leave them as they are (but fixing the message_type formatting)?

If I change things then it will be a breaking change for anyone using the existing format to extract data from the entity attributes (including me).

Is it worth it to maybe make the templating a little cleaner (eliminating the need for any ā€œsplit()ā€ function)?

I think most people who are using this are also likely using the examples I give in my repo for extracting data using split() and Iā€™m not sure it would really benefit anyone to make the switch.

Iā€™m not planning on changing the display description or spoken description since itā€™s fairly well formatted for readability as it is.

here is the way it will look with 4 alerts ( I cut off the rest of the display description for ease of readingā€¦):

attribution: Data provided by Weather.gov
title: Flood Warning - Flood Warning - Flood Warning - Flood Warning
event_id: https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.e0a8f1875d4c3d3cb672a8e0f94f91daf5dee704.005.1 - https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.e0a8f1875d4c3d3cb672a8e0f94f91daf5dee704.004.1 - https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.e0a8f1875d4c3d3cb672a8e0f94f91daf5dee704.001.1 - https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.e0a8f1875d4c3d3cb672a8e0f94f91daf5dee704.002.1
message_type: Update - Update - Update - Update
display_desc: 
>
Headline: The Flood Warning remains in effect
Status: Actual
Message Type: Update
Severity: Severe
...
...

Iā€™ll make the changes to the list style and once Iā€™m done iā€™ll post examples thenā€¦

And Glenn you should see I added the ā€œstatus:ā€ to the description to hopefully resolve your filtering issue.

let me know what you think.

EDIT:

I was just typing up the above before your last post and I would still like to put this out there.

Iā€™ll look at your PR to se what you recommended there.

The - is fine by me, much easier to do a split on, and then you can do a lookup on it to see if the associated title/message is an update or new alert