Setting Up AllStarLink ASL3 and Associated Tools

11 minute read

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

  1. 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.
  2. 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 git asl3
    
  3. 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 of usbinvert

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.

Connect to Allstar Echo node: 40894 via the radio by entering *340894 to connect (and speak / echo), and *140894 to disconnect.

Allmon3 Setup

  1. Install Allmon3:
    apt install allmon3
    
  2. Configure Allmon3 settings in /etc/allmon3/allmon3.ini according to these instructions. Be sure to remove the allmon3 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.

  3. Restart services:
    systemctl restart asterisk
    systemctl start allmon3
    

Access Allmon3 at http://<your_ip_address>/allmon3.

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

  1. 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
    
  2. Configure DVSwitch:

    cd /usr/local/dvs
    ./dvs
    

    You can set modes from the dvs menu under Advanced - Configure Other Stanzas (Edit <mode>), Additional DMR Networks, and Configure 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 the Hardware Vocoder section (for example, if you have a USB ThumbDV AMBE vocoder device).

  3. 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, set Jitter=750 under [DMR Network], and set RX/TXFrequency to 433800000 under [Info]. You can also set your contact information in this file.

  4. 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).

  5. Enable and start DVSwitch services:
    systemctl enable analog_bridge mmdvm_bridge md380-emu
    systemctl start analog_bridge mmdvm_bridge md380-emu
    
  6. 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>/dvswitch/index.php.

    Note that DVSwitch cannot parse the # private call character in a tune command using the /opt/MMDVM_Bridge/dvswitch.sh tune yourbrandmeisterpasswordhere@3102.repeater.net:62031!91 format (i.e., using !9990#). Instead, run these as two commands:

    /opt/MMDVM_Bridge/dvswitch.sh tune yourbrandmeisterpasswordhere@3102.repeater.net:62031
    /opt/MMDVM_Bridge/dvswitch.sh tune '9990#'
    

    The ! format seems to work when connecting to a non-private call talkgroup; however, it should be separated for any private calls requiring a # at the end (including the 4000# unlink command.

  7. 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. I also set enabled: true under usrp in /opt/dvswitch_mode_switcher/configs/config.yml.

     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 port 3000 access. After logging in, click Networking on the left, click Edit Rules and Zones in the firewall panel, click Custom Ports, and enable port 3000 over TCP. Alternatively, I logged in over ssh and restricted access to a particular IP block (instead of adding it through the web interface, which opens the port to all IP addresses), by running:

     cat <<EOF > /usr/local/bin/nft-allow-allstarlink.sh
     #!/bin/bash
     CHAIN_NAME="filter_IN_allstarlink_allow"
     TABLE_NAME="inet firewalld"
    
     # Wait up to 30 seconds for firewalld to create the required chain
     for i in {1..30}; do
         if /usr/sbin/nft list chain $TABLE_NAME $CHAIN_NAME >/dev/null 2>&1; then
             break
         fi
         /usr/bin/sleep 1
     done
    
     # If the chain still doesn't exist, fail
     if ! /usr/sbin/nft list chain $TABLE_NAME $CHAIN_NAME >/dev/null 2>&1; then
         echo "Error: firewalld chain $CHAIN_NAME not found after timeout"
         exit 1
     fi
    
     /usr/sbin/nft add rule inet firewalld filter_IN_allstarlink_allow ip saddr <your net address>/<your subnet i.e. 24> tcp dport 3000 accept
     EOF
    
     chmod +x /usr/local/bin/nft-allow-allstarlink.sh
    
     mkdir -p /etc/systemd/system/firewalld.service.d
    
     cat <<EOF > /etc/systemd/system/firewalld.service.d/99-add-allstarlink-rules.conf
     [Service]
     ExecStartPost=/usr/local/bin/nft-allow-allstarlink.sh
     EOF
    
     systemctl daemon-reexec
    

    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!91"
       alias: Brandmeister Worldwide
    

    Again, be sure not to use the !TG suffix for private calls ending in #. Instead, configure and execute two commands to connect via a private call:

     - tgid: "yourbrandmeisterpasswordhere@3102.repeater.net:62031"
       alias: Brandmeister Master
     - tgid: "9990#"
       alias: Brandmeister Parrot Test (Connect to master first)
    

Step 4: Install and Configure Supermon

  1. 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
    
  2. Configure Supermon:
    • Edit allmon.ini and global.inc in /var/www/html/supermon/.
    • Set up .htpasswd for authentication:

      htpasswd -cB /var/www/html/supermon/.htpasswd admin
      
  3. Enable automatic database updates:

    systemctl enable asl3-update-astdb.service asl3-update-astdb.timer
    systemctl start asl3-update-astdb.timer
    
  4. Access Supermon at http://<your_ip_address>/supermon.

  5. Update supermon with /usr/local/sbin/supermonASL_latest_update

  6. 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

  1. Configure /usr/local/bin/SkywarnPlus/config.yaml file according to readme instructions.

  2. Add these lines to enable weather alert tail messages at a certain interval of activity:

    tailmessagetime=60000
    tailsquashedtime=30000
    tailmessagelist=/tmp/SkywarnPlus/wx-tail
    
  3. 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 
    
  4. 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.

To send DTMF tones to switch digital modes, servers/reflectors, and talkgroups, visit https://github.com/BillJr99/digital_link and follow the installation instructions there.

Enabling a ThumbDV AMBE Device

I have a USB vocoder, which I enabled by editing /opt/Analog_Bridge/Analog_Bridge.ini and setting:

[General]
decoderFallBack = true
userEmulator = false

[DV3000]
; address = 127.0.0.1
; rxPort = 2460
address = /dev/ttyUSB0
baud=460800
serial = true

References