Setting Up AllStarLink ASL3 and Associated Tools
Published:
This guide walks you through installing and configuring AllStarLink (ASL3) along with several helpful management tools and utilities:
- allscan
- supermon
- allmon3
- skywarn plus
- dvswitch
- digital_link
- alltune
Step 1: Install ASL3
- Prepare the Raspberry Pi:
- Download and install the Raspberry Pi Imager.
- Select Lite 64-bit OS and configure username, password, and enable SSH.
- Flash the microSD card and boot the Raspberry Pi.
- Install ASL3:
sudo -s apt update && apt upgrade cd /tmp wget https://repo.allstarlink.org/public/asl-apt-repos.deb12_all.deb dpkg -i asl-apt-repos.deb12_all.deb apt update apt install asl3
- Configure ASL3:
- Run the ASL configuration menu:
asl-menu
- Adjust node settings as needed and save.
- For my setup, I set CTCSS From to
usb
instead ofusbinvert
- Run the ASL configuration menu:
Access ASL3 at http://<your_ip_address>:9090
.
Step 2: Configure ASL3 Components
SimpleUSB Configuration
Edit the simpleusb.conf
file to set up your hardware interface:
nano /etc/asterisk/simpleusb.conf
Configure Audio Levels
Restart Asterisk and test the setup:
asterisk -r
rpt fun <your_node_number> *355553
Speak into the microphone and adjust the audio settings so that the meter just touches the 5kHz level. Disconnect when done with:
rpt fun <your_node_number> *155553
To set the audio transmit level, edit /etc/asterisk/simpleusb.conf
and set the rxmixerset
value. I went with a value around 650
, such that running asterisk -rvvv
(after restarting asterisk) and rpt debug level 7
decodes and displays DTMF codes being sent and audio levels “just about right” or at least just a bit low when testing on node 55553
. I found that setting the audio level to the “just about right” setting caused the DTMF tones to be oversaturated and fail to decode, so I adjusted this to a slightly lower value.
Test AllStarLink Connection
Connect to Allstar Echo node: 40894
via the radio by entering *340894
to connect (and speak / echo), and *140894
to disconnect.
Allmon3 Setup
- Install Allmon3:
apt install allmon3
Configure Allmon3 settings in
/etc/allmon3/allmon3.ini
according to these instructions. Be sure to remove theallmon3
user account and add an admin password:Update passwords:
allmon3-passwd --delete allmon3 allmon3-passwd admin
Uncomment / set account and
manager.conf
secret for node 1999.- Restart services:
systemctl restart asterisk systemctl start allmon3
Access Allmon3 at http://<your_ip_address>/allmon3
.
Echolink Setup
Edit the following files to configure Echolink: /etc/asterisk/echolink.conf
and /etc/asterisk/modules.conf
.
In /etc/asterisk/modules.conf
, add or uncomment this line: load => chan_echolink.so
. If there is a similar line with noload =>
, comment that out.
In /etc/asterisk/echolink.conf, add your AllStarLink node number and set your personal EchoLink information.
Load the Echolink module and restart Asterisk:
systemctl restart asterisk
Test by connecting to *33009999
(EchoLink echo test 9999); then *13009999
to disconnect. To connect to an EchoLink node, dial *33
followed by a 6 digit EchoLink node number. If the node number is fewer than 6 digits long, prepend the node number with enough zeroes to make a 6 digit number. For example, EchoLink node 9999
is entered as 009999
.
Step 3: Install and Configure DVSwitch
Install DVSwitch:
wget http://dvswitch.org/bookworm chmod +x bookworm ./bookworm apt update apt install dvswitch-server apt install php-cgi libapache2-mod-php8.2
Configure DVSwitch:
cd /usr/local/dvs ./dvs
You can set modes from the
dvs
menu underAdvanced - Configure Other Stanzas (Edit <mode>)
,Additional DMR Networks
, andConfigure Favorite TG
. Additionally, you may be able to set up DV3000 USB as the vocoder here if available for D-Star support under the initial setup menu, in theHardware Vocoder
section (for example, if you have a USB ThumbDV AMBE vocoder device).Edit configuration files as needed: In
/opt/Analog_Bridge/Analog_Bridge.ini
, under[USRP]
, set:txPort = 32001 ; Transmit USRP frames on this port rxPort = 34001 ; Listen for USRP frames on this port usrpAudio AUDIO_USE_GAIN usrpGain = 3.00 tlvAudio = AUDIO_USE_GAIN
In
/opt/MMDVM_Bridge/MMDVM_Bridge.ini
, setJitter=750
under[DMR Network]
, and setRX/TXFrequency
to433800000
under[Info]
. You can also set your contact information in this file.Set up private node
1999
in ASL3 to bridge to DVSwitch:sudo asl-menu
Under
Node Settings - AllStar Node Settings - Add Node
with the following parameters: node number 1999, “None of the Above”, “Radio Interface USRP”, and “Duplex Type 0 / Half”.Test by connecting/disconnecting to node 1999 in allmon3. You must connect your ASL node to 1999 before using DVSwitch. You can dial
*31999
to do this (and*11999
to disconnect).- Enable and start DVSwitch services:
systemctl enable analog_bridge mmdvm_bridge md380-emu systemctl start analog_bridge mmdvm_bridge md380-emu
Test DVSwitch:
/opt/MMDVM_Bridge/dvswitch.sh mode YSF /opt/MMDVM_Bridge/dvswitch.sh tune parrot.ysfreflector.de:42020
In general, you can connect to any mode and endpoint via:
/opt/MMDVM_Bridge/dvswitch.sh mode {DMR|NXDN|P25|YSF|DSTAR} # Set Analog_Bridge digital mode /opt/MMDVM_Bridge/dvswitch.sh tune <tg> # Tune to specific TG number/Reflector
Don’t forget to connect to node 1999 either through DTMF tones, or through allmon3. You can change digital modes using the web interface at
http://<your_ip_address>/index.php
.Enable DVSwitch Mode Switcher Frontend:
sudo apt update && sudo apt upgrade && sudo apt install git nodejs git clone https://github.com/firealarmss/dvswitch_mode_switcher.git cd dvswitch_mode_switcher
Follow the instructions in dvswitch_mode_switcher-README.md.txt within the above repository.
cd /opt/dvswitch_mode_switcher cp debian/dvswitch_mode_switcher.service /etc/systemd/system/dvswitch_mode_switcher.service systemctl daemon-reload systemctl enable dvswitch_mode_switcher.service systemctl start dvswitch_mode_switcher.service
Then, log onto the ASL3 Cockpit at
http://<your_ip_address>:9090
to update the firewall to allow port3000
access. After logging in, clickNetworking
on the left, clickEdit Rules and Zones
in the firewall panel, clickCustom Ports
, and enable port3000
overTCP
.Access the portal via
http://<your_ip_address>:3000
. Again, be sure to connect to node 1999 first! You can edit your favorite digital talkgroups by editing the/opt/dvswitch_mode_switcher/configs/tg_alias.yml
file. For example:- tgid: "yourbrandmeisterpasswordhere@3102.repeater.net:62031!4000" alias: Brandmeister Unlink
Step 4: Install and Configure Supermon
Install Supermon:
cd /usr/local/sbin wget "http://2577.asnode.org:43856/supermonASL_fresh_install" -O supermonASL_fresh_install chmod +x supermonASL_fresh_install ./supermonASL_fresh_install
- Configure Supermon:
- Edit
allmon.ini
andglobal.inc
in/var/www/html/supermon/
. Set up
.htpasswd
for authentication:htpasswd -cB /var/www/html/supermon/.htpasswd admin
- Edit
Enable automatic database updates:
systemctl enable asl3-update-astdb.service asl3-update-astdb.timer systemctl start asl3-update-astdb.timer
Access Supermon at
http://<your_ip_address>/supermon
.Update supermon with
/usr/local/sbin/supermonASL_latest_update
- Edit
/var/www/html/supermon/almon.ini
to modify the top menu. For example, you can add links to all the URLs from the tools in this document for easy access.
Step 5: Configure Skywarn Plus
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Mason10198/SkywarnPlus/main/swp-install)"
Configuration
Configure
/usr/local/bin/SkywarnPlus/config.yaml
file according to readme instructions.Add these lines to enable weather alert tail messages at a certain interval of activity:
tailmessagetime=60000 tailsquashedtime=30000 tailmessagelist=/tmp/SkywarnPlus/wx-tail
Add to root crontab:
* * * * * /usr/bin/python3 /usr/local/bin/SkywarnPlus/ASL3_Supermon_Workaround.py * * * * * /usr/local/bin/SkywarnPlus/SkywarnPlus.py * * * * * chown -R asterisk:asterisk /tmp/SkywarnPlus
Follow these instructions to add time and weather hourly announcements. Add or modify your root crontab as follows:
00 00-23 * * * /usr/bin/perl /usr/local/sbin/saytime.pl 19320 62933 > /dev/null
Allscan
Follow these instructions.
sudo apt update; sudo apt install php unzip -y
cd ~
wget 'https://raw.githubusercontent.com/davidgsd/AllScan/main/AllScanInstallUpdate.php'
chmod 755 AllScanInstallUpdate.php
sudo ./AllScanInstallUpdate.php
Edit /etc/php/8.2/cli/php.ini
and uncomment extension=pdo_sqlite
and extension=sqlite3
.
Test at http://<your-ip-address>/allscan
(set up initial user). You can now use allscan to connect/disconnect instead of allmon3 or DTMF.
Edit favorite nodes at /var/www/html/supermon/favorites.ini
:
label[] = "Label"
cmd[] = "rpt cmd %node% ilink 3 <node number>"
label[] = "Echolink Label"
cmd[] = "rpt cmd %node% ilink 3 3<0 prepadded 6 digit node number>"
Alltune
Follow the instructions at the download provided here. Extract the web files to /var/www/html/alltune
and access at http://<your-ip-address>/alltune
.
IAX Configuration
You can access your AllStarNode from an Android device or other IAX connection by adding the following stanza to /etc/asterisk/iax.conf
:
[iaxclient] ; Connect from iax client (Zoiper...)
type = friend ; Notice type here is friend <--------------
context = iax-client ; Context to jump to in extensions.conf
auth = md5
secret = your-secret-password-here
host = dynamic
disallow = all
allow = ulaw
allow = adpcm
allow = gsm
transfer = no
requirecalltoken=no ; to allow all connections
;calltokenoptional=0.0.0.0/0.0.0.0 ; to connect from a particular IP address
And add this in the /etc/asterisk/extensions.conf
file:
[iax-client] ; for IAX VoIP clients.
exten => ${NODE},1,Ringing()
same => n,Wait(10)
same => n,Answer()
same => n,Set(CALLSIGN=${CALLERID(name)})
same => n,NoOp(Caller ID name is ${CALLSIGN})
same => n,NoOp(Caller ID number is ${CALLERID(number)})
same => n,GotoIf(${ISNULL(${CALLSIGN})}?hangit)
same => n,Playback(rpt/connected-to&rpt/node)
same => n,SayDigits(${NODE})
same => n,rpt(${NODE}|P|${CALLSIGN}-P)
same => n(hangit),NoOp(No Caller ID Name)
same => n,Playback(connection-failed)
same => n,Wait(1)
same => n,Hangup
You can then configure DroidStar by adding the following in the Hosts
section: IAX <your node number> <your node IP address> 4569 iaxclient your-secret-password-here
, and choose your node under the IAX
hosts section on the main tab. You might have to update your databases and hosts with the buttons under Settings
prior to use. Once connected, you can issue DTMF codes to connect/disconnect, and use the PTT button to transmit.
Digital Link DTMF Tuning
Installation and Configuration
Clone this repository to your AllStar node /opt
directory, via:
cd /opt
git clone https://github.com/BillJr99/digital_link
Within the digital_link
directory, there is a minimal amount of configuration. Copy the file switch_modes.conf.sample
to switch_modes.conf
, and create as many sections as you like. Some modes do not need all the fields, and these are set to NA in the template. The modemaster
defines the first two DTMF tones one will send to link to that mode and master. For example, 12
will select the TGIF network on DMR, since 1
represents DMR, and 2
represents TGIF. Ensure that all masters within the same mode have the same first modemaster
digit: for example, all DMR networks should have a first modemaster
digit of 1
, and all D-STAR networks should have a first modemaster
digit of 2
. The actual digit is your choice, as long as you do not select 0
for the mode or the master digit (these are reserved for unlinking). Set the mode
to DMR
, D-STAR
, YSF
, NXDN
, or P25
as appropriate, as well as the host, port, and password, if applicable.
Within digital_link.sh
, set your AllStar node number and linked digital node (i.e., 1999
) for NODE_ID
and LINKED_NODE_ID
, respectively.
Finally, ensure that /opt/digital_link/dvswitch_links.log
is owned by the asterisk
user, and that the digital_link.sh
script is executable:
sudo touch dvswitch_links.log
sudo chown asterisk:asterisk dvswitch_links.log
chmod a+x digital_link.sh
switch_modes.conf Example
[DMR_BrandMeister]
modemaster=11
mode=DMR
url=3102.master.brandmeister.network
port=62031
password=PASSWORD
type=NA
[DMR_TGIF]
modemaster=12
mode=DMR
url=tgif.network
port=62031
password=PASSWORD
type=NA
[DMR_DMRPLUS]
modemaster=13
mode=DMR
url=45.79.197.51
port=55555
password=PASSWORD
type=NA
[DSTAR_REF]
modemaster=21
mode=D-STAR
url=NA
port=NA
password=NA
type=REF
[DSTAR_XLX]
modemaster=22
mode=D-STAR
url=NA
port=NA
password=NA
type=XLX
[DSTAR_DCS]
modemaster=23
mode=D-STAR
url=NA
port=NA
password=NA
type=DCS
[DSTAR_XRF]
modemaster=24
mode=D-STAR
url=NA
port=NA
password=NA
type=XRF
[YSF_PARROT]
modemaster=31
mode=YSF
url=register.ysfreflector.de
port=42020
password=NA
type=NA
[YSF_USALINK]
modemaster=32
mode=YSF
url=americalink.hamfm.com
port=42000
password=NA
type=NA
[YSF_KCWIDE]
modemaster=33
mode=YSF
url=ysf.kansascitywide.com
port=42000
password=NA
type=NA
[NXDN]
modemaster=41
mode=NXDN
url=NA
port=NA
password=NA
type=NA
[P25]
modemaster=51
mode=P25
url=NA
port=NA
password=NA
type=NA
Mapping to Asterisk
You can assign a dialplan to Asterisk so that the DTMF tones for a given code pattern will be forwarded to this script. I used AA
as my entry code, and recommend choosing the same two-digit/character sequence. This is important because the rpt.conf
will read and consume the first digit, and then pass the remaining to the dialplan. The second digit allows the dialplan to match the rest of the string, in case you have other dialplan patterns in place. This resulting string (starting with a single A
) is passed to the script for parsing.
/etc/asterisk/rpt.conf
Modify rpt.conf
under the [functions]
section by adding the following line (replace A
with the DTMF tone you’d like to match to run the script):
A = autopatchup,context=digital_link,noct=1,farenddisconnect=1,dialtime=60000,quiet=1
/etc/asterisk/extensions.conf
Modify extensions.conf
by adding the following stanza (again, replace _A.
with _@.
, where @
is the DTMF tone you used in rpt.conf
above):
[digital_link]
; Match extensions explicitly ending with D
exten => _A.,1,GotoIf($["${EXTEN:-1}"="D"]?ends_with_D:normal)
; If it ends with D, replace the last character with #
exten => _A.,n(ends_with_D),System(/opt/digital_link/digital_link.sh ${EXTEN:0:-1}#)
exten => _A.,n,Hangup
; If it does not end with D, process normally
exten => _A.,n(normal),System(/opt/digital_link/digital_link.sh ${EXTEN})
exten => _A.,n,Hangup
Usage
Assuming you used A
to start the autopatch
and for the exten
rules above, you can send the following DTMF tones to your AllStarLink node to activate DVSwitch, change/unlink modes, and change/unlink talkgroups. All commands will begin with *AA
. The first A
is provided to Asterisk, the second A
is matched by the autopatch extension rules, and the entire string starting with (and including) the second A
is passed to the digital_link.sh
script and parsed.
*AA <mode digit> <master> <optional TG> <optional D key>
<mode digit>
: The mode digit is the first digit inswitch_modes.conf
that corresponds to themodemaster
of the master and/or talkgroup you wish to connect to. For example, DMR corresponds to1
, and D-STAR corresponds to2
in the template provided byswitch_modes.conf
.<master>
: The master digit is the second digit inswitch_modes.conf
that corresponds to themodemaster
of the master and/or talkgorup you wish to connect to. For example, Brandmeister corresponds to1
and TGIF corresponds to2
for DMR, and REF corresponds to1
and XLX corresponds to2
for D-STAR.<TG>
: The talkgroup you wish to connect to; for example, 9999. This can be omitted if there is no specific talkgroup on the master being connected to (i.e., when using YSF). On D-STAR, this is the numeric component, so to connect toREF030C
, one would press the digit corresponding toREF
for the<master>
digit previously, and then enter030C
.<optional D key>
: Sending theD
DTMF tone at the end of the command indicates that a private call should be made on DMR, or to link to theEcho
repeater on D-STAR. This is translated to a#
character and passed to DVSwitch as either a escaped#
character, or as theE
echo tone on D-STAR, as appropriate.
Linking
The first time you issue one of these commands, Asterisk will unlink from any connected nodes other than your digital-analog bridge node (i.e., 1999
), and link to your digital-analog bridge node if it wasn’t already linked.
Examples
These examples assume the stock configuration in digital_link.sh
, with spaces added to the commands for clarity (note that the entire set of tones is entered as a single transmission):
- Connect to REF030C on D-STAR:
*AA 21 030C
- Connect to REF001E on D-STAR:
*AA 21 001D
- Connect to 9990 (Private call) on DMR Brandmeister:
*AA 11 9990D
- Connect to TG 91 on DMR Brandmeister:
*AA 11 91
- Connect to Parrot on YSF:
*AA 31
- Connect to AmericaLink on YSF:
*AA 32
- Connect to TG 101 on DMR TGIF:
*AA 12 101
Unlinking
When you switch modes, the unlink command for the current mode is issued. You can force an unlink by entering *AA 0
. If you wish to unlink from the current digital mode and also unlink from your digital-analog bridge node entirely on AllStar, you can enter *AA 00
.
References
- DVSwitch Installation Guide
- Supermon for ASL3
- DVSwitch Mode Changer
- ASL3 Installation Guide by Ham Radio and Networking
- ASL3 Installation Video by Ham Radio and Networking on Youtube
- Ham Radio Crusader Youtube Channel for Information on ASL3, DVSwitch, Supermon, SkywarnPlus, and more
- Installing Supermon on ASL3
- DVSwitch Installation
- Allmon3 and EchoLink on ASL3 by Ham Radio and Networking on Youtube
- DVSwitch and ClearNode on AllStar by Ham Radio and Networking on Youtube
- DVSwitch on AllStarLink 3 by Ham Radio and Networking on Youtube
- DVSwitch Server Part 1 and Part 2 by Ham Radio Crusader on Youtube
- ASL3 Cockpit Firewall
- SkywarnPlus on ASL3 by Ham Radio Crusader
- Supermon 7.4+ on ASL3 by Ham Radio Crusader
- Supermon for ASL3
- Time and Weather Announcements on SkywarnPlus by Ham Radio Crusader
- AllScan Setup Instructions
- Alltune