v0.2.0 initial

pull/16/head
Mason10198 3 years ago
parent 2d00e2d1d1
commit 2ed52a4dc6

@ -160,7 +160,7 @@ SkywarnPlus can use the free Pushover API to send WX alert notifications and deb
# Control Script
SkywarnPlus comes with a powerful control script (`SkyControl.py`) that can be used to enable or disable certain SkywarnPlus functions. This script is particularly useful when you want to map DTMF control codes to these functions. An added advantage is that the script provides spoken feedback upon execution, making it even more suitable for DTMF control.
SkywarnPlus comes with a powerful control script (`SkyControl.py`) that can be used to enable or disable certain SkywarnPlus functions via shell, without manually editing `config.yaml`. This script is particularly useful when you want to map DTMF control codes to these functions. An added advantage is that the script provides spoken feedback upon execution, making it even more suitable for DTMF control.
## Usage

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…
Cancel
Save

Powered by TurnKey Linux.