Mason10198 / SkywarnPlus

Empowering Asterisk / app_rpt Nodes with Local Alert Intelligence
GNU General Public License v3.0
45 stars 3 forks source link

Won't remove weather alert #100

Closed frostyfruits closed 2 months ago

frostyfruits commented 2 months ago

ISSUE TEMPLATE This template is designed to help you report a bug with information required for you to actually be able to receive help. If you choose to ignore this template, do not provide proper files/information with your report, etc., then your issue will be ignored/closed.

Describe the bug When there is a weather alert. It does an update but once the alert is over with. It will not remove the alert notification and still plays the tail message until I reboot the node.

To Reproduce Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior A clear and concise description of what you expected to happen.

Files Please, at minimum, paste or attach the following:

# SkywarnPlus v0.7.0 Configuration File
# Author: Mason Nelson (N5LSN/WRKF394)
# Please edit this file according to your specific requirements.

# This config file is structured YAML. Please be sure to maintain the structure when editing.
# YAML is very picky about indentation. Use spaces, not tabs.

################################################################################################################################

SKYWARNPLUS:
  # Toggle SkywarnPlus operation entirely.
  Enable: true

################################################################################################################################

Asterisk:
  # List of node numbers for broadcasting alerts. Multiple nodes are specified as a list.
  # Example:
  # Nodes:
  #   - 1998
  #   - 1999
  Nodes:
  - 1825

  # Optional silence to be added to the beginning of any audio files generated by SkywarnPlus.
  # This is useful for radio systems that require additional time to key up, such as RF links.
  # Silence is specified in milliseconds.
  AudioDelay: 0

################################################################################################################################

Alerting:
  # Specify the county codes for which you want to pull weather data.
  # Find your county codes at https://alerts.weather.gov/.
  # Make sure to use county codes ONLY, NOT zone codes, otherwise you might miss out on alerts.
  # Example:
  # CountyCodes:
  #   - ARC125
  #   - ARC119
  #
  # SkywarnPlus allows adding county-specific audio indicators to each alert in the message.
  # To enable this feature, specify an audio file containing a recording of the county name in the
  # ROOT of the SOUNDS/ directory as shown in the below example. You must create these files yourself.
  # A helper script is provided in the SkywarnPlus repository to help generate these files.
  # You can manually use the same VoiceRSS API used for SkyDescribe (see below) to generate these files with a synthetic voice:
  # http://api.voicerss.org/?key=86db862d93814e7f868211c38f994898&hl=en-us&f=8khz_16bit_mono&v=Mary&src=Bucks County
  # http://api.voicerss.org/?key=1234567890QWERTY&hl=en-us&f=8khz_16bit_mono&v=John&src=Saline County
  # Example:
  # CountyCodes:
  #   - ARC125: "Saline.wav"
  #   - ARC119: "Pulaski.wav"
  CountyCodes:
  - PAC017: "Bucks.wav"
  #- PAC045: "Delaware.wav"
  - PAC091: "Montgomery.wav"
  - PAC101: "Philadelphia.wav"

  # Enable instant voice announcement when new weather alerts are issued.
  SayAlert: true

  # Enable SayAlert to "say" any alerts whose list of affected counties has changed, in addition to new alerts.
  # Only applies if more than one CountyCode is specified AND County IDs have been setup.
  SayAlertsChanged: true

  # When a change is detected, make SayAlert say ALL of the currently active alerts, not just newly detected one(s)
  SayAlertAll: false

  # Specify the WAV file in the SOUNDS/ALERTS directory to use as the alert sound effect
  AlertSound: Duncecap.wav

  # Specify a WAV file in the root of the SOUNDS directory to be appended to the end of the alert message.
  SayAlertSuffix: Duncecap.wav

  # Enable instant voice announcement when weather alerts are cleared.
  SayAllClear: true

  # Specify the WAV file in the SOUNDS/ALERTS directory to use as the all clear sound effect.
  AllClearSound: Triangles.wav

  # Specify a WAV file in the root of the SOUNDS directory to be appended to the end of the all clear message.
  SayAllClearSuffix: Triangles.wav

  # Specify the WAV file in the SOUNDS/ALERTS directory to use as the alert seperator sound effect
  AlertSeperator: Woodblock.wav

  # Enable audio tagging an alert as having "multiples" if there is more than one unique instance of that alert type
  # If enabled, and there are 2x different Severe Thunderstorm Warnings in your area, the audio will be: "Severe Thunderstorm Warning, with multiples"
  WithMultiples: true

  # Limit the maximum number of alerts to process in case of multiple alerts.
  # SkywarnPlus fetches all alerts, orders them by severity, and processes only the 'n' most severe alerts, where 'n' is the MaxAlerts value.
  MaxAlerts: 99

  # Specify an alternative path to the directory where sound files are located.
  # Default is SkywarnPlus/SOUNDS.
  SoundsPath: /usr/local/bin/SkywarnPlus/SOUNDS

  # 'TimeType' Configuration
  #
  # This setting determines the timing reference for issuing weather alerts.
  # You can choose between "onset" and "effective" time.
  #
  # 'onset': Alerts are issued based on the predicted start time of the event.
  # This means the system will only send out alerts when the events are imminent.
  # For example, even though a "Heat Advisory" can be forecasted accurately a day or two in advance,
  # the alert will only be sent close to the actual occurrence of the event.
  #
  # 'effective': Alerts are sent as soon as they are received, based on the effective time of the alert message.
  # The "effective" time is when the alert message is considered to be in effect,
  # which could be significantly earlier than the actual onset of the event.
  #
  # By using 'onset', you can ensure that alerts are relevant and timely for the recipients.
  TimeType: onset

################################################################################################################################

Blocking:
  # List of globally blocked events. These alerts are ignored across the entire SkywarnPlus operation.
  # Use a case-sensitive list. Wildcards can be used.
  # Example:
  # GlobalBlockedEvents:
  #   - Flood Watch
  #   - '*Statement'
  #   - '*Advisory'
  GlobalBlockedEvents:

  # List of events blocked from being announced when received. These alerts will still be added to the tail message.
  # Use a case-sensitive list.
  SayAlertBlockedEvents:

  # List of events blocked from being added to the tail message. These alerts will still be announced when received.
  # Use a case-sensitive list.
  TailmessageBlockedEvents:

################################################################################################################################

Tailmessage:
  # Configuration for the tail message functionality. Requires initial setup in RPT.CONF.

  # Enable/disable automatic tail message.
  Enable: true

  # Specify a WAV file in the root of the SOUNDS directory to be appended to the end of the tail message.
  TailmessageSuffix: Duncecap.wav

  # Enable to add county indicators to the tail message
  # County indicators must FIRST be configured in the Alerting section where county codes are defined.
  # NOTE: This can make your tail message quite long depending on how many counties you have configured.
  TailmessageCounties: true

  # Specify an alternative path and filename for saving the tail message.
  # Default is /tmp/SkywarnPlus/wx-tail.wav.
  TailmessagePath: /tmp/SkywarnPlus/wx-tail.wav

################################################################################################################################

CourtesyTones:
  # Configuration for automatic CT changing. Requires initial setup in RPT.CONF.
  # Enable/disable automatic courtesy tones.
  Enable: true

  # Directory where tone files will be read from & stored to. Modify this path to match your setup.
  # Default location is within the SkywarnPlus installation directory.
  ToneDir: /usr/local/bin/SkywarnPlus/SOUNDS/TONES

  # Define custom courtesy tones for use in different modes. This allows for dynamic response to weather alerts.
  Tones:
    # Define each courtesy tone, and which files to use for that tone in Normal and WX mode.
    ct1:
      Normal: 4up.ulaw
      WX: Duncecap.ulaw

    ct2:
      Normal: Nextel.ulaw
      WX: Duncecap.ulaw

    ct3:
      Normal: SatPass.ulaw
      WX: Apollo.ulaw

    # ct4:
    #   Normal: BlastOff.ulaw
    #   WX: Apollo.ulaw
    # ct5:
    #   Normal: BumbleBee.ulaw
    #   WX: XPError.ulaw
    # ct6:
    #   Normal: Comet.ulaw
    #   WX: Waterdrop.ulaw

  # Define the alerts that trigger the "WX" courtesy tone.
  # Use a case-sensitive list. One alert per line.
  CTAlerts:
  - Ashfall Warning
  - Avalanche Warning
  - Blizzard Warning
  - Blowing Dust Warning
  - Civil Danger Warning
  - Civil Emergency Message
  - Coastal Flood Warning
  - Dust Storm Warning
  - Earthquake Warning
  - Evacuation - Immediate
  - Extreme Wind Warning
  - Fire Warning
  - Flood Warning
  - Hazardous Materials Warning
  - Heat Advisory
  - Hurricane Force Wind Warning
  - Hurricane Warning
  - Ice Storm Warning
  - Law Enforcement Warning
  - Local Area Emergency
  - Nuclear Power Plant Warning
  - Radiological Hazard Warning
  - Severe Thunderstorm Warning
  - Shelter In Place Warning
  - Storm Surge Warning
  - Tornado Warning
  - Tornado Watch
  - Tropical Storm Warning
  - Tsunami Warning
  - Typhoon Warning
  - Volcano Warning
  - Winter Storm Warning

################################################################################################################################

IDChange:
  # Configuration for Automatic ID Changing. Requires initial setup in RPT.CONF and manual creation of audio files.

  # Enable/disable automatic ID changing.
  Enable: false

  # Specify an alternative directory where ID files are located.
  # Default is SkywarnPlus/SOUNDS/ID.
  IDDir: /usr/local/bin/SkywarnPlus/SOUNDS/ID

  # Define the sound files for IDs.
  IDs:
    # Audio file to feed Asterisk as ID in "normal" mode
    NormalID: NORMALID.ulaw

    # Audio file to feed Asterisk as ID in "wx" mode
    WXID: WXID.ulaw

    # Audio file rpt.conf is looking for as ID
    RptID: RPTID.ulaw

  # Define the alerts that trigger the weather ID.
  # Use a case-sensitive list. One alert per line.
  IDAlerts:
  - Ashfall Warning
  - Avalanche Warning
  - Blizzard Warning
  - Blowing Dust Warning
  - Civil Danger Warning
  - Civil Emergency Message
  - Coastal Flood Warning
  - Dust Storm Warning
  - Earthquake Warning
  - Evacuation - Immediate
  - Extreme Wind Warning
  - Fire Warning
  - Hazardous Materials Warning
  - Hurricane Force Wind Warning
  - Hurricane Warning
  - Ice Storm Warning
  - Law Enforcement Warning
  - Local Area Emergency
  - Nuclear Power Plant Warning
  - Radiological Hazard Warning
  - Severe Thunderstorm Warning
  - Shelter In Place Warning
  - Storm Surge Warning
  - Tornado Warning
  - Tornado Watch
  - Tropical Storm Warning
  - Tsunami Warning
  - Typhoon Warning
  - Volcano Warning
  - Winter Storm Warning

################################################################################################################################

SkyDescribe:
  # SkyDescribe is a feature that allows you to request a detailed description of a weather alert.
  # VoiceRSS is a free service that SkyDescribe requires to function. You must obtain an API key from VoiceRSS.org.
  # MAKE SURE YOU VERIFY YOUR EMAIL ADDRESS WITH VOICERSS.ORG OR YOUR API KEY WILL NOT WORK.

  # API Key for VoiceRSS.org
  APIKey: XXXXXXXXXXXXXXXXXXXXXX

  # VoiceRSS language code
  Language: en-us

  # VoiceRSS speech rate. -10 is slowest, 10 is fastest.
  Speed: 1

  # VoiceRSS voice profile. See VoiceRSS.org/api/ for more information.
  Voice: Mary

  # Maximum number of words to be spoken by SkyDescribe.
  # CAUTION: Setting this value too high may cause SkyDescribe to exceed the timeout timer of your node.
  # ~130 words is around 60 seconds at Speed: 0.
  MaxWords: 150

################################################################################################################################

AlertScript:
  # AlertScript allows you to map BASH or DTMF commands to be executed when a weather alert is detected.

  # Completely enable/disable AlertScript
  Enable: true

  # These are BASH or DTMF commands that are executed ONLY when the number of active alerts changes from ZERO to NON-ZERO.
  # Use the same format as other AlertScript mappings (see below).
  ActiveCommands:
  - Type: BASH
    Commands:
    - echo "THE NUMBER OF ACTIVE ALERTS JUST CHANGED FROM ZERO TO NON-ZERO"

  # These are BASH or DTMF commands that are executed ONLY when the number of active alerts changes from NON-ZERO to ZERO.
  # Use the same format as other AlertScript mappings (see below).
  InactiveCommands:
  - Type: BASH
    Commands:
    - echo "THE NUMBER OF ACTIVE ALERTS JUST CHANGED FROM NON-ZERO TO ZERO"

  Mappings:
    # Define the mapping of alerts to either DTMF commands or bash scripts here.
    #
    # Example 1:
    # This entry will execute the bash command 'asterisk -rx "rpt fun 1999 *123*456*789"'
    # when the alerts "Tornado Warning" AND "Tornado Watch" are detected. It will execute the
    # bash command 'asterisk -rx "rpt fun 1999 *987*654*321"' when there are no longer ANY alerts matching
    # "Tornado Warning" OR "Tornado Watch".
    #
    # - Type: DTMF
    #   Nodes:
    #     - 1999
    #   Commands:
    #     - "*123*456*789"
    #   ClearCommands:
    #     - "*987*654*321"
    #   Triggers:
    #     - Tornado Warning
    #     - Tornado Watch
    #   Match: ALL
    #
    # Example 2:
    # This entry will execute the bash command '/home/repeater/testscript.sh'
    # and the bash command '/home/repeater/saytime.sh' when an alert whose
    # title ends with "Statement" is detected.
    #
    # - Type: BASH
    #   Commands:
    #     - "/home/repeater/testscript.sh"
    #     - "/home/repeater/saytime.sh"
    #   Triggers:
    #     - "*Statement"
    #
    # Example 3:
    # This entry will execute the bash command 'asterisk -rx "rpt fun 1998 *123*456*789"'
    # and the bash command 'asterisk -rx "rpt fun 1999 *123*456*789"' when an alert
    # titled "Tornado Warning" OR "Tornado Watch" is detected.
    #
    # - Type: DTMF
    #   Nodes:
    #     - 1998
    #     - 1999
    #   Commands:
    #     - "*123*456*789"
    #   Triggers:
    #     - Tornado Warning
    #     - Tornado Watch
    #
    # Example 4:
    # This entry will execute the bash command 'asterisk -rx "rpt fun 1999 *123*456*789"'
    # and the bash command 'asterisk -rx "rpt fun 1999 *987*654*321"'
    # when an alert titled "Tornado Warning" OR "Tornado Watch" is detected.
    #
    # - Type: DTMF
    #   Nodes:
    #     - 1999
    #   Commands:
    #     - "*123*456*789"
    #     - "*987*654*321"
    #   Triggers:
    #     - Tornado Warning
    #     - Tornado Watch
    #   Match: ANY
    #
    # Example 5:
    # This is an example entry that will automatically execute SkyDescribe and
    # announce the full details of a Tornado Warning when it is detected.
    # The placeholder '{alert_title}' will be replaced with the title of the alert
    # when AlertScript executes the command.
  - Type: BASH
    Commands:
    - /usr/local/bin/SkywarnPlus/SkyDescribe.py "{alert_title}"
    Triggers:
    - "*Warning"

################################################################################################################################

Pushover:
  # Configuration for Pushover integration. Pushover is a free notification service. Register at https://pushover.net/.

  # Enable/disable Pushover integration.
  Enable: false

  # Provide your user key obtained from Pushover.
  UserKey: YOUR_USER_KEY_HERE

  # Provide the API token obtained from Pushover.
  APIToken: YOUR_API_KEY_HERE

  # Enable verbose messaging
  Debug: false

################################################################################################################################

Logging:
  # Configuration for logging.

  # Enable verbose logging
  Debug: false

  # Specify an alternative log file path.
  LogPath: /tmp/SkywarnPlus/SkywarnPlus.log

################################################################################################################################

DEV:
  # Configuration for development and testing.

  # Delete cached data on startup
  CLEANSLATE: false

  # Specify the TMP directory.
  TmpDir: /tmp/SkywarnPlus

  # Write alert titles to /tmp/AUTOSKY/warnings.txt for Supermon backwards compatibility.
  SupermonCompat: true

  # Enable test alert injection instead of calling the NWS API by setting 'INJECT' to 'True'.
  INJECT: false

  # List the test alerts to inject. Alert titles are case sensitive.
  # Optionally specify the CountyCodes and/or EndTime for each alert.
  # CountyCodes used here must be defined at the top of this configuration file.
  # Example:
  # INJECTALERTS:
  #   - Title: "Tornado Warning"
  #     CountyCodes: ["ARC119", "ARC120"]
  #   - Title: "Tornado Watch"
  #     CountyCodes: ["ARC125"]
  #     EndTime: "2023-08-01T12:00:00Z"
  #   - Title: "Severe Thunderstorm Warning"
  INJECTALERTS:
  - Title: Tornado Warning
  - Title: Tornado Watch
  - Title: Severe Thunderstorm Warning
Mason10198 commented 2 months ago

At a bare minimum, the following files must also be provided:

Preferably, you would enable debugging mode and recreate the issue before providing the log file.

frostyfruits commented 2 months ago
2024-05-06 17:24:21,586 INFO Data file does not exist, assuming first run.
2024-05-06 17:24:21,586 INFO Initializing data file
2024-05-06 17:24:21,587 INFO Initializing CT files
2024-05-06 17:24:21,588 INFO ChangeCT: Updated ct3 to normal mode with tone SatPass.ulaw
2024-05-06 17:24:21,589 INFO ChangeCT: Updated ct1 to normal mode with tone 4up.ulaw
2024-05-06 17:24:21,590 INFO ChangeCT: Updated ct2 to normal mode with tone Nextel.ulaw
2024-05-06 17:24:21,590 INFO Initializing Tailmessage file
2024-05-06 17:24:21,957 INFO No change in alerts.
2024-05-06 17:24:21,958 INFO Current alerts: None.
2024-05-06 18:23:59,270 INFO Added: Tornado Warning for [Bucks]
2024-05-06 18:23:59,271 INFO Added: Severe Thunderstorm Warning for [Bucks, Montgomery, Philadelphia]
2024-05-06 18:23:59,271 INFO Added: Tornado Watch for [Montgomery, Philadelphia]
2024-05-06 18:23:59,275 INFO ChangeCT: Updated ct2 to wx mode with tone Duncecap.ulaw
2024-05-06 18:23:59,276 INFO ChangeCT: Updated ct3 to wx mode with tone Apollo.ulaw
2024-05-06 18:23:59,277 INFO ChangeCT: Updated ct1 to wx mode with tone Duncecap.ulaw
2024-05-06 18:23:59,278 INFO Executing Active BASH Command: echo "THE NUMBER OF ACTIVE ALERTS JUST CHANGED FROM ZERO TO NON-ZERO"
2024-05-06 18:23:59,286 INFO AlertScript: Executing BASH command: /usr/local/bin/SkywarnPlus/SkyDescribe.py "Tornado Warning"
2024-05-06 18:24:03,987 INFO AlertScript: Executing BASH command: /usr/local/bin/SkywarnPlus/SkyDescribe.py "Severe Thunderstorm Warning"
2024-05-06 18:24:08,981 INFO Broadcasting alert on node 1825
2024-05-06 18:24:44,609 INFO Built new tailmessage
2024-05-06 18:25:33,418 INFO Removed: Tornado Warning for [Bucks]
2024-05-06 18:25:33,419 INFO Removed: Severe Thunderstorm Warning for [Bucks, Montgomery, Philadelphia]
2024-05-06 18:25:33,419 INFO Removed: Tornado Watch for [Montgomery, Philadelphia]
2024-05-06 18:25:33,420 INFO Alerts cleared
2024-05-06 18:27:58,122 INFO No change in alerts.
2024-05-06 18:27:58,122 INFO Current alerts: None.
{
    "ct": "wx",
    "last_sayalert": [],
    "id": null,
    "alertscript_alerts": [
        "Tornado Warning",
        "Severe Thunderstorm Warning"
    ],
    "last_alerts": [],
    "active_alerts": [
        "Tornado Warning",
        "Tornado Watch",
        "Severe Thunderstorm Warning"
    ]
}
Mason10198 commented 2 months ago

It looks like the issue you are experiencing is due to improper configuration. I am going to assume that you have the following options enabled and specified by accident, as there are no sound files located in these locations by default. Notice that all of the following options ask you to specify a sound file in the ROOT of the sounds directory, which is /usr/local/bin/SkywarnPlus/SOUNDS/, but you are attempting to specify sound files that are located in /usr/local/bin/SkywarnPlus/SOUNDS/TONES/. Please correct the following configuration options and try again.

As a general comment, these options are intended for special use cases only and almost always left blank. Are you trying to use these options to change the default sound effects in SkywarnPlus? If so, that is not what these options are for.

  # Specify a WAV file in the root of the SOUNDS directory to be appended to the end of the alert message.
  SayAlertSuffix: Duncecap.wav
  # Specify a WAV file in the root of the SOUNDS directory to be appended to the end of the all clear message.
  SayAllClearSuffix: Triangles.wav
  # Specify a WAV file in the root of the SOUNDS directory to be appended to the end of the tail message.
  TailmessageSuffix: Duncecap.wav
frostyfruits commented 2 months ago

I removed them from the file and everything is working now. I have both those sounds in the root sounds directory. I appreciate your help!!