Mason10198 / SkywarnPlus

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

Pushover #101

Closed fpcaptain closed 1 month ago

fpcaptain commented 1 month ago

Before I did the update I was getting Pushover alerts but have not received on since doing the update last month. We have had several weather alerts since then. Below is a copy and paste of my config.yaml with the registered to me info changed some. It also seems like the over the air alerts are not coming on like they were but they have came on and said clear. Maybe by looking at this you will see my error. If anything else is needed just let me know but the log and tmp folder stuff seems to be normal so I can only guess I have something not right on here.

# 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:
    - 513960

  # 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=[YOUR_API_KEY_HERE]&hl=en-us&f=8khz_16bit_mono&v=John&src=[YOUR COUNTY NAME HERE]
  # 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:
    - PAC081: LycomingCounty.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: true

  # 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:

  # 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:

  # 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: effective

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

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:

  # 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: false

  # 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: Boop.ulaw
      WX: Stardust.ulaw

    ct2:
      Normal: Beep.ulaw
      WX: Stardust.ulaw

    # ct3:
    #   Normal: NBC.ulaw
    #   WX: SatPass.ulaw

    # ct4:
    #   Normal: BlastOff.ulaw
    #   WX: Target.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
    - 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

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

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: 46466531600f43b3b600d88d544bxxxx

  # 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: John

  # 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:
    #     - 513960
    #   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:
    #     - 513960
    #     - 1999
    #   Commands:
    #     - "*941*942*943"
    #   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:
    #     - 513960
    #   Commands:
    #     - "*941*942*943"
    #     - "*987*654*321"
    #   Triggers:
    #- '*Warning'
    #- '*Watch'
    #- '*Advisory'
    #- '*Statement'
    #   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'
    - '*Watch'
    - '*Advisory'
    - '*Statement'

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

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

  # Enable/disable Pushover integration.
  Enable: true

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

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

  # 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 1 month ago

Please do not open issues without providing AT LEAST:

fpcaptain commented 1 month ago

data.json SkywarnPlus.log config.yaml wont attach so I pasted that

fpcaptain commented 1 month ago

There is a WX alert now for fog. Also I use the same for node 24222 GMRS and 513960 Ham so the node numbers may differ but the rest of the info is the same. data.json SkywarnPlus.log

Mason10198 commented 1 month ago

Error caused by improper formatting in the AlertScript section of config.yaml, which caused an exception in Python and crashed the script at the AlertScript execution, before SayAlert or Pushover was processed. Error below seen when manually executing the SkywarnPlus.py script:

  File "./SkywarnPlus.py", line 1803, in <module>
    main()
  File "./SkywarnPlus.py", line 1723, in main
    alert_script(alerts)
  File "./SkywarnPlus.py", line 1162, in alert_script
    matched_alerts = [alert for alert in new_alerts if alert in triggers]
  File "./SkywarnPlus.py", line 1162, in <listcomp>
    matched_alerts = [alert for alert in new_alerts if alert in triggers]
TypeError: argument of type 'NoneType' is not iterable

The AlertScript section of your config.yaml looks like this:

  Mappings:
    - Type: BASH
      Commands:
        - '/usr/local/bin/SkywarnPlus/SkyDescribe.py "{alert_title}"'
      Triggers:
    - '*Warning'
    - '*Watch'
    - '*Advisory'
    - '*Statement'

but needs to look like this (fix indentation):

  Mappings:
    - Type: BASH
      Commands:
        - '/usr/local/bin/SkywarnPlus/SkyDescribe.py "{alert_title}"'
      Triggers:
        - '*Warning'
        - '*Watch'
        - '*Advisory'
        - '*Statement'
fpcaptain commented 1 month ago

OK Thank you!