Hamshack Hotline Weather Alert
Introduction
Hamshack Hotline
Hamshack Hotline (HH) is a SIP phone system set up by a group of Amateur Radio Operators (hams). There are different use cases for HH, for me it is an excuse to run a PBX at home and play with phones.
My PBX
I run an instance of FreePBX in a VM on my main server (Dell R610) FreePBX is CentOS + Asterisk + a nice web UI.
Some of what I did to build my Weather Alert extension is done from the UI and some is done by manipulating Asterisk's config files directly.
Goal
My goal was to create an extension button on my hard phones (desk sets) that would play a stream of the local NOAA Weather Radio broadcast. I wanted the LED controlled by the Busy Lamp Field (BLF) for that button to light up with a specific pattern if there is a weather alert for my area. This would give me visual indication of potential hazardous weather affecting the area, and one press access to the weather broadcast to listen to.
How-To
For this how-to I will assume you are running FreePBX, I'm on version 15.0.17.55
Set up Music On Hold (MoH), queue and extension
-
Find a weather broadcast stream
- I found mine by inspecting the player element on weatherusa.net/radio
- If a station nearby you is in the list on weatherusa.net/radio you may be able to use this link: https://radio.weatherusa.net/NWR/KIG98.mp3 substituting
KIG98
with the callsign of the NOAA station near you - NOAA doesn't release their own audio streams of broadcasts, availability of streams depends on someone setting up a listening station to record and stream the broadcast. Look around, and hopefully you can find something useful.
- Steve K4HG shares how to set up a stream useable for MoH captured directly from an rtl-sdr
- If you're having issues (no audio, errors in asterisk logs) make sure you are accessing your audio stream via HTTP not HTTPS, mpg123 appears to have trouble with HTTPS
-
Create a MoH Category
- From your FreePBX Admin page navigate to Settings > Music on Hold
- Click Add Category
- Give the Category a name
Weather
is what I chose - Choose
Custom Application
for Type - Click Submit
- Edit the newly created Category
- Input
/usr/bin/mpg123 -q -s --mono -r 8000 -f 8192 -b 1024 YOUR_STREAM
substituting your stream url forYOUR_STREAM
- Create a queue
- From your FreePBX Admin page navigate to Applications > Queues
- Click Add Queue
- Give the Queue a number and a name
- Select the MoH category you created above for 'Music On Hold Class'
- Choose 'MoH Only'
- Create an extension
- From your FreePBX Admin page navigate to Applications > Extensions > Virtual Extensions
- Click 'Add New Virtual Extension'
- Choose an unused extension number for 'User Extension', I chose
6000
- Choose a 'Display Name', I chose
WX Station
- On the Find Me/Follow Me tab chose the following options:
- Enabled: Yes
- Initial Ring Time: 0
- Ring Time: 0
- Destinations:
- Queues: QUEUE_YOU_CREATED_ABOVE
- Test
- Calling the extension you created above, you should hear the audio stream you passed in when you created the MoH Category
Edit Config Files, Create Custom Device State
- Open
/etc/asterisk/extensions_custom.conf
for editing - add the following lines:
#!bash
[ext-local-custom]
exten => UNUSED_EXTENSION,hint,Custom:DEVICE
same => 1,Goto(from-internal,ABOVE_EXTENSION,1)
Substitute: - UNUSED_EXTENSION: Another unused extension - DEVICE: Create a name for the Custom Device State - ABOVE_EXTENSION: The Extension you created in the above section
example from my PBX:
#!bash
[ext-local-custom]
exten => 101,hint,Custom:WXAlert
same => 1,Goto(from-internal,6000,1)
Install/Set-up control script
The control script queries NOAA's API for active alerts for a selected 'zone'
#!console
usage: wxalert [-h] -z ZONE -d DEVICE
optional arguments:
-h, --help show this help message and exit
-z ZONE, --zone ZONE NOAA Weather Zone
-d DEVICE, --device DEVICE
Custom device state to target
If there is an active alert it will set the state of the device passed into it with the -d
flag to an appropriate state for the highest severity of active alerts.
Source code for the control scipt can be found here
The fastest way to install the control script is to sudo pip install asterisk_wxalert
Once installed you can add an entry into the root user's crontab so the script runs regularly:
#!bash
*/5 * * * * /usr/bin/wxalert -z ZONE -d DEVICE
example from my PBX:
#!bash
*/5 * * * * /usr/bin/wxalert -z WAZ039 -d WXAlert
Your NOAA Forecast Zone can be found on this site
It will be in the form WAZ039 (2 Letter state, The letter Z, then the 3 digits from the map of your state above)
Phone Set-Up
Phone set-up will differ between phones, but for the most part, pointing one of your BLF buttons at the extension created in /etc/asterisk/extensions_custom.conf
in my case 101
should get you the desired behavior. The BLF LED will illuminate with the status set by the control script, and pressing the button will call the extension that immediately forwards to the MoH Queue.
Conclusion
Hopefully this gets you at least part of the way toward a working implementation of this system. I will treat this as a living document, and will update it based on my own experiences and feedback from anyone who tries to follow the directions. Feel free to email me at the address listed on my QRZ page, or message me on the HH Discord server.
Thanks and 73, Tyler - AG7SU