parent
2d00e2d1d1
commit
2ed52a4dc6
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,81 @@
|
||||
#!/usr/bin/python3
|
||||
# SkyControl.py
|
||||
# A Control Script for SkywarnPlus v0.2.0
|
||||
# by Mason Nelson (N5LSN/WRKF394)
|
||||
#
|
||||
# This script allows you to change the value of specific keys in the SkywarnPlus config.yaml file.
|
||||
# It's designed to enable or disable certain features of SkywarnPlus from the command line.
|
||||
# It is case-insensitive, accepting both upper and lower case parameters.
|
||||
#
|
||||
# Usage: python3 SkyControl.py <key> <value>
|
||||
# Example: python3 SkyControl.py sayalert false
|
||||
# This will set 'SayAlert' to 'False' in the config.yaml file.
|
||||
|
||||
import sys
|
||||
import yaml
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
# Define valid keys and corresponding audio files
|
||||
VALID_KEYS = {
|
||||
"enable": {"key": "Enable", "section": "SKYWARNPLUS", "true_file": "SWP85.wav", "false_file": "SWP86.wav"},
|
||||
"sayalert": {"key": "SayAlert", "section": "Alerting", "true_file": "SWP87.wav", "false_file": "SWP88.wav"},
|
||||
"sayallclear": {"key": "SayAllClear", "section": "Alerting", "true_file": "SWP89.wav", "false_file": "SWP90.wav"},
|
||||
"tailmessage": {"key": "Enable", "section": "Tailmessage", "true_file": "SWP91.wav", "false_file": "SWP92.wav"},
|
||||
"courtesytone": {"key": "Enable", "section": "CourtesyTones", "true_file": "SWP93.wav", "false_file": "SWP94.wav"},
|
||||
"alertscript": {"key": "Enable", "section": "AlertScript", "true_file": "SWP81.wav", "false_file": "SWP82.wav"},
|
||||
"idchange": {"key": "Enable", "section": "IDChange", "true_file": "SWP83.wav", "false_file": "SWP84.wav"},
|
||||
}
|
||||
|
||||
# Get the directory of the script
|
||||
SCRIPT_DIR = Path(__file__).parent.absolute()
|
||||
|
||||
# Get the configuration file
|
||||
CONFIG_FILE = SCRIPT_DIR / "config.yaml"
|
||||
|
||||
# Check if the correct number of arguments are passed
|
||||
if len(sys.argv) != 3:
|
||||
print("Incorrect number of arguments. Please provide the key and the new value.")
|
||||
print("Usage: python3 {} <key> <value>".format(sys.argv[0]))
|
||||
sys.exit(1)
|
||||
|
||||
# The input key and value
|
||||
key, value = sys.argv[1:3]
|
||||
|
||||
# Make sure the provided key is valid
|
||||
if key not in VALID_KEYS:
|
||||
print("The provided key does not match any configurable item.")
|
||||
sys.exit(1)
|
||||
|
||||
# Make sure the provided value is either 'true', 'false' or 'toggle'
|
||||
if value not in ['true', 'false', 'toggle']:
|
||||
print("Invalid value. Please provide either 'true' or 'false' or 'toggle'.")
|
||||
sys.exit(1)
|
||||
|
||||
# Convert the input value to boolean if not 'toggle'
|
||||
if value != 'toggle':
|
||||
value = value.lower() == 'true'
|
||||
|
||||
# Load the config file
|
||||
with open(str(CONFIG_FILE), 'r') as f:
|
||||
config = yaml.safe_load(f)
|
||||
|
||||
# Check if toggle is required
|
||||
if value == 'toggle':
|
||||
current_value = config[VALID_KEYS[key]['section']][VALID_KEYS[key]['key']]
|
||||
value = not current_value
|
||||
|
||||
# Update the key in the config
|
||||
config[VALID_KEYS[key]['section']][VALID_KEYS[key]['key']] = value
|
||||
|
||||
# Save the updated config back to the file
|
||||
with open(str(CONFIG_FILE), 'w') as f:
|
||||
yaml.dump(config, f)
|
||||
|
||||
# Get the correct audio file based on the new value
|
||||
audio_file = VALID_KEYS[key]['true_file'] if value else VALID_KEYS[key]['false_file']
|
||||
|
||||
# Play the corresponding audio message on all nodes
|
||||
nodes = config['Asterisk']['Nodes']
|
||||
for node in nodes:
|
||||
subprocess.run(['/usr/sbin/asterisk', '-rx', 'rpt localplay {} {}/SOUNDS/ALERTS/{}'.format(node, SCRIPT_DIR, audio_file.rsplit(".", 1)[0])])
|
||||
@ -0,0 +1,257 @@
|
||||
# SkywarnPlus v0.2.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 the entire SkywarnPlus operation.
|
||||
# Set to 'True' to activate or 'False' to disable.
|
||||
# Example: Enable: true
|
||||
Enable: true
|
||||
|
||||
################################################################################################################################
|
||||
|
||||
Asterisk:
|
||||
# List of node numbers for broadcasting alerts. Multiple nodes are specified as a list.
|
||||
# Example:
|
||||
# Nodes:
|
||||
# - 1998
|
||||
# - 1999
|
||||
Nodes:
|
||||
- YOUR_NODE_NUMBER_HERE
|
||||
|
||||
################################################################################################################################
|
||||
|
||||
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:
|
||||
# - ARC121
|
||||
# - ARC021
|
||||
CountyCodes:
|
||||
- YOUR_COUNTY_CODE_HERE
|
||||
# Enable instant voice announcement when new weather alerts are issued.
|
||||
# Set to 'True' for enabling or 'False' for disabling.
|
||||
# Example: SayAlert: true
|
||||
SayAlert: true
|
||||
# Enable instant voice announcement when weather alerts are cleared.
|
||||
# Set to 'True' for enabling or 'False' for disabling.
|
||||
# Example: SayAllClear: true
|
||||
SayAllClear: 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:
|
||||
# Specify an alternative path to the directory where sound files are located.
|
||||
# Default is SkywarnPlus/SOUNDS.
|
||||
# SoundsPath:
|
||||
|
||||
################################################################################################################################
|
||||
|
||||
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.
|
||||
# Set 'Enable' to 'True' for enabling or 'False' for disabling.
|
||||
Enable: false
|
||||
# Specify an alternative path and filename for saving the tail message.
|
||||
# Default is SkywarnPlus/SOUNDS/wx-tail.wav.
|
||||
# TailmessagePath:
|
||||
|
||||
################################################################################################################################
|
||||
|
||||
CourtesyTones:
|
||||
# Configuration for the Courtesy Tones. Requires initial setup in RPT.CONF.
|
||||
# Set 'Enable' to 'True' for enabling or 'False' for disabling.
|
||||
Enable: false
|
||||
# Specify an alternative directory where tone files are located.
|
||||
# Default is SkywarnPlus/SOUNDS/TONES.
|
||||
# ToneDir:
|
||||
# Define the sound files for various types of courtesy tones.
|
||||
Tones:
|
||||
# Normal local courtesy tone.
|
||||
LocalCT: BOOP.ulaw
|
||||
# Normal link courtesy tone.
|
||||
LinkCT: BEEP.ulaw
|
||||
# Weather courtesy tone (both local and link).
|
||||
WXCT: WX-CT.ulaw
|
||||
# rpt.conf file's local courtesy tone.
|
||||
RptLocalCT: CT-LOCAL.ulaw
|
||||
# rpt.conf file's link courtesy tone.
|
||||
RptLinkCT: CT-LINK.ulaw
|
||||
# Define the alerts that trigger the weather courtesy tone.
|
||||
# Use a case-sensitive list. One alert per line for better readability.
|
||||
CTAlerts:
|
||||
- Hurricane Force Wind Warning
|
||||
- Severe Thunderstorm Warning
|
||||
- Tropical Storm Warning
|
||||
- Coastal Flood Warning
|
||||
- Winter Storm Warning
|
||||
- Thunderstorm Warning
|
||||
- Extreme Wind Warning
|
||||
- Storm Surge Warning
|
||||
- Dust Storm Warning
|
||||
- Avalanche Warning
|
||||
- Ice Storm Warning
|
||||
- Hurricane Warning
|
||||
- Blizzard Warning
|
||||
- Tornado Warning
|
||||
- Tornado Watch
|
||||
|
||||
################################################################################################################################
|
||||
|
||||
IDChange:
|
||||
# Configuration for Automatic ID Changing. Requires initial setup in RPT.CONF and manual creation of audio files.
|
||||
Enable: false
|
||||
# Specify an alternative directory where ID files are located.
|
||||
# Default is SkywarnPlus/SOUNDS/ID.
|
||||
# IDDir:
|
||||
# Define the sound files for normal ID and weather ID.
|
||||
IDs:
|
||||
NormalID: ID.ulaw
|
||||
WXID: WXID.ulaw
|
||||
# Define the sound file rpt.conf is looking for as normal ID.
|
||||
RptID: RPTID.ulaw
|
||||
# Define the alerts that trigger the weather ID.
|
||||
# Use a case-sensitive list. One alert per line for better readability.
|
||||
IDAlerts:
|
||||
- Hurricane Force Wind Warning
|
||||
- Severe Thunderstorm Warning
|
||||
- Tropical Storm Warning
|
||||
- Coastal Flood Warning
|
||||
- Winter Storm Warning
|
||||
- Thunderstorm Warning
|
||||
- Extreme Wind Warning
|
||||
- Storm Surge Warning
|
||||
- Dust Storm Warning
|
||||
- Avalanche Warning
|
||||
- Ice Storm Warning
|
||||
- Hurricane Warning
|
||||
- Blizzard Warning
|
||||
- Tornado Warning
|
||||
- Tornado Watch
|
||||
|
||||
################################################################################################################################
|
||||
|
||||
AlertScript:
|
||||
# Completely enable/disable AlertScript
|
||||
Enable: false
|
||||
Mappings:
|
||||
# Define the mapping of alerts to either DTMF commands or bash scripts here.
|
||||
# Wildcards (*) can be used in the ALERTS for broader matches.
|
||||
# Examples:
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# - Type: DTMF
|
||||
# Nodes:
|
||||
# - 1999
|
||||
# Commands:
|
||||
# - '*123*456*789'
|
||||
# Triggers:
|
||||
# - Tornado Warning
|
||||
# - Tornado Watch
|
||||
# Match: ALL
|
||||
#
|
||||
# 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
|
||||
#
|
||||
# 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
|
||||
#
|
||||
# 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
|
||||
#
|
||||
- Type: BASH
|
||||
Commands:
|
||||
- 'echo "Tornado Warning detected!"'
|
||||
Triggers:
|
||||
- Tornado Warning
|
||||
|
||||
################################################################################################################################
|
||||
|
||||
Pushover:
|
||||
# Configuration for Pushover integration. Pushover is a free notification service. Register at https://pushover.net/.
|
||||
Enable: false
|
||||
# Provide your user key obtained from Pushover.
|
||||
UserKey:
|
||||
# Provide the API token obtained from Pushover.
|
||||
APIToken:
|
||||
# Enable verbose messaging
|
||||
Debug: false
|
||||
|
||||
################################################################################################################################
|
||||
|
||||
Logging:
|
||||
# Enable verbose logging
|
||||
Debug: false
|
||||
# Specify an alternative log file path.
|
||||
# LogPath:
|
||||
|
||||
################################################################################################################################
|
||||
|
||||
DEV:
|
||||
# Delete cached data on startup
|
||||
CLEANSLATE: false
|
||||
# Specify the TMP directory.
|
||||
TmpDir: /tmp/SkywarnPlus
|
||||
# Enable test alert injection instead of calling the NWS API by setting 'INJECT' to 'True'.
|
||||
INJECT: false
|
||||
# List the test alerts to inject. Use a case-sensitive list. One alert per line for better readability.
|
||||
INJECTALERTS:
|
||||
- Tornado Warning
|
||||
- Tornado Watch
|
||||
- Severe Thunderstorm Warning
|
||||
Loading…
Reference in new issue