Several years ago, I read an article about creating a Ham Radio Repeater for the Allstarlink network running on a Raspberry Pi single board computer. The part that really intrigued me this project is that you could build it for next to nothing. At some point in time, the repeater because unusable to me and I just didn’t get it up and running again.
Part of the issue with this setup, is although it did work, it did not quite work the way that I wanted it to. A couple of times, I would try to rebuild the node, but I could not quite remember the little tweaks that you needed to make to get it running. The Baofeng radio, which I purchased for about $14, was so cheap that once you started the hardware modifications outlined by hamcoip.org, it was just annoying to use and troubleshoot. I had a issue with the radio was only answering every other transmission which was weird as could be, and it would not respond in anyway to the DTMF signals set to it. Last, but not least, the whole setup if just disjointed. Both the radio and the Universal Radio Interface (URI) are physically larger than that raspberry pi computer and the entire setup just sat on a shelf in the rack.
The Allstarlink Network
The AllstarLink network is a global system that connects amateur radio operators using Voice over Internet Protocol (VoIP) technology, enabling seamless communication across geographically dispersed locations. It leverages the Asterisk open-source PBX software to link radio nodes, which are typically comprised of a computer or single-board device like a Raspberry Pi, a radio interface, and a transceiver. These nodes allow ham radio operators to connect their radios to the internet, facilitating communication between repeaters, individual radios, or even non-radio users via software clients. AllstarLink supports a variety of communication modes, including simplex, duplex, and repeater operations, and provides features like autopatch, remote base operation, and integration with other VoIP systems such as Echolink and DMR, making it a versatile platform for amateur radio enthusiasts.
Operationally, AllstarLink works by assigning each node a unique node number, which acts as an address within the network. Users can connect nodes by issuing DTMF (dual-tone multi-frequency) commands through their radios or by using software interfaces to establish links between nodes or entire networks of nodes. The system routes audio packets over the internet using the Asterisk software, which handles call routing, conferencing, and node management. This allows, for example, a ham radio operator in New York to connect with another in London or to link multiple repeaters for wide-area communication. The open-source nature of AllstarLink encourages community development, with users contributing to software improvements and maintaining a decentralized, resilient network that supports both local and global ham radio communication.
Solving and understanding the problem
In an effort to get my AllStarLink Node working again, I installed Debian 12 on an old computer. Eventually, I would like to pick up a 2U Rack Mount Server Cabinet and install everything into that chassis. This is physically the same computer which I use to run HomeAssistant. I followed the directions to setup the AllStarLink Repository and followed a few online video. There are a ton of online videos and articles to do accomplish this task, however, the end result was the same for me. My radio was only responding to every other transmission and DTMF signals were not being seen by asterisk.

I finally found the trick after rereading the hamvoip.org article. Although there are about 115 files located in the /etc/asterisk directory, for my setup I only need to worry about two of them, and in each there are only a few lines which need to be modified.
As directed by numerous tutorials and setup my node. Out of the box, it did not work quite right.
The output of the Interace Tune CLI is as follows:
The key settings which allowed me to move forward was setting the value carrierfrom=usb in the file simpleusb.conf file in the /etc/asterisk directory. From the hamvoip.org page
CAUTION – this radio uses carrierfrom=usb which means that the COS line goes high with signal. If you disconnect (or maybe even turn off) the 888 transceiver from the USB FOB there is a good chance the COS line will float to a high value and trigger valid COS and hang up a channel if you are in a connected state. Never disconnect or turn off the transceiver when you are connected to other nodes. In addition if the 888 is running from the battery inserted in its charger the battery will eventually fail on a busy channel. The charger puts out less then the TX load. When this happens the COS will go high and hang a channel if connected. It is NOT a good idea to run the 888 from a stock battery and charger as a node radio. – Hamvoip.org
Once I made this setting, communication between the radio and asterisk was bidirectional. I could finally tune the radio and was up and running. Here are to relevant settings from my /etc/asterisk/simpleusb.conf. Lines in Bold may be significant to your node when configured with the Baofeng 888 and URIx.
;!
;! Automatically generated configuration file
;! Filename: simpleusb.conf (/etc/asterisk/simpleusb.conf)
;! Generator: chan_simpleusb
;! Creation Date: Thu Sep 4 19:09:28 2025
;!
;***************************************************
;******** Template-tized simpleusb.conf ********
;***************************************************
; Note to editors: set tabs to 4 space characters. No wrap to keep comments neat.
; vim: tabstop=4
;
; SimpleUSB channel driver Configuration File
;
;;;;; New to ASL3 ;;;;;
;;;;; The SimpleUSB "tune" settings have moved to ;;;;;
;;;;; this file. The simpleusb_tune_usb_1999.conf ;;;;;
;;;;; file is no longer used. ;;;;;
; If you are going to use this channel driver, you MUST enable it in modules.conf
; change:
; noload => chan_simpleusb.so
; CM1xx USB Cards with Radio Interface Channel Driver (No DSP)
; noload => res_usbradio.so ; Required for both simpleusb and usbradio
; to:
; load => chan_simpleusb.so ; CM1xx USB Cards with Radio Interface Channel Driver (No DSP)
; load => res_usbradio.so ; Required for both simpleusb and usbradio
[general]
;------------------------------ JITTER BUFFER CONFIGURATION --------------------------
; jbenable = yes
; Enables the use of a jitterbuffer on the receiving side of an
; simpleusb channel. Defaults to "no". An enabled jitterbuffer will
; be used only if the sending side can create and the receiving
; side can not accept jitter. The simpleusb channel can't accept jitter,
; thus an enabled jitterbuffer on the receive simpleusb side will always
; be used if the sending side can create jitter.
; jbmaxsize = 200
; Max length of the jitterbuffer in milliseconds.
; jbresyncthreshold = 1000
; Jump in the frame timestamps over which the jitterbuffer is
; resynchronized. Useful to improve the quality of the voice, with
; big jumps in/broken timestamps, usually sent from exotic devices
; and programs. Defaults to 1000.
; jbimpl = fixed
; Jitterbuffer implementation, used on the receiving side of an simpleusb
; channel. Two implementations are currently available - "fixed"
; (with size always equals to jbmax-size) and "adaptive" (with
; variable size, actually the new jb of IAX2). Defaults to fixed.
; jblog = no
; Enables jitterbuffer frame logging. Defaults to "no".
;-----------------------------------------------------------------------------------
[node-main](!)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; Template for all your SimpleUSB nodes ;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eeprom = 0 ; EEPROM installed: 0,1
; 0 = no (default)
; 1 = yes
hdwtype = 0 ; Leave this set to 0 for USB sound fobs designed for app_rpt
; or modified cmxxx sound fobs.
; 1 is for Dingotel/Sph interfaces.
; 2 is for NHC interfaces.
; 3 is for a custom interface.
; Receiver parameters
rxboost = yes
;rxboost = no
; no = 20db attenuator inserted, yes = 20db attenuator removed
; Set to yes for additional gain if using a low-level receiver output
; CM119B devices are hard coded to rxboost 20dB attenuator removed
carrierfrom = usb
;carrierfrom = usbinvert
; no,usb,usbinvert
; no - no carrier detection at all
; usb - from the COR line on the USB sound fob (Active high)
; usbinvert - from the inverted COR line on the USB sound fob (Active low)
; pp - from parallel port (Active high)
; ppinvert - from the inverted parallel port (Active low)
ctcssfrom = usbinvvert
;ctcssfrom = usbinvert
; no,usb,usbinvert
; no - CTCSS decoding, system will be carrier squelch
; usb - CTCSS decoding using input from USB sound fob (Active high)
; usbinvert - from the inverted CTCSS line on the USB sound fob (Active low)
; pp - from parallel port (Active high)
; ppinvert - from the inverted parallel port (Active low)
deemphasis = no
; enable de-emphasis (input from discriminator)
plfilter = yes
; enable PL filter
rxondelay = 200
; Number of 20mSec intervals following the release of PTT.
; Uncomment and/or adjust for simplex nodes to eliminate "Ping Ponging"
; or "Relay Racing". A positive value here will instruct the usbradio
; driver to ignore the COR line for a specified number of 20mSec
; intervals following the release of PTT. Use this ONLY on simplex
; nodes, and leave commented out for repeaters or other full duplex nodes.
txoffdelay = 0
; Ignore the receiver for a specified number of 20 millisecond
; intervals after the transmitter unkeys.
; This is useful when setting up a half-duplex link with an existing
; repeater, where you need to ignore the repeater's hangtime.
; Transmitter parameters
txmixa = voice ; Left channel output (A): no,voice
; no - Do not output anything
; voice - output voice only
txmixb = no ; Right channel output (B): no,voice
; no - Do not output anything
; voice - output voice only
invertptt = no ; Invert PTT: no,yes
; no - ground to transmit
; yes - open to transmit
preemphasis = no ; Perform standard 6db/octave pre-emphasis
; pager = no
; no,a,b (e.g. pager = b means "put the normal repeat audio on channel A, and the ; pager audio on channel B")
; duplex3 = 0 ; duplex 3 gain setting (0 to disable)
clipledgpio = 1
; Enable ADC Clip Detect feature to use a GPIO output (0 to disable).
; Supports URI Clip LED by setting a GPIO (if available) high for 500mS
; when clipping detected. Value = GPIO# to use (GPIO1 recommended)
legacyaudioscaling = no
; If yes, continue to do raw audio sample scaling and clipping, resulting in Tx
; audio levels increasing
; by 0.78dB and Rx audio levels increasing by 0-1.5dB. Should be set to no unless
; you have an existing
; node with precisely adjusted audio levels and are unable to adjust them. This
; parameter and associated
; scaling/clipping code will be deleted once existing installs have been able to
; verify their audio levels
;;; End of node-main template
#tryinclude "custom/simpleusb.conf"
#tryinclude "custom/simpleusb/*.conf"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;; Configure your nodes here ;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Note: there is no need to duplicate entire settings. Only
; place settings that are different than the template.
;
; Note: the device string is automatically found when the
; USB setting "devstr=" is empty.
;
; Note: the interface "tune" settings will be added to the
; per-node settings (below).
[42527](node-main)
ctcssfrom = usb
rxondelay = 0
;;;;; Tune settings ;;;;;
devstr = 3-5:1.0
rxmixerset = 800
txmixbset = 950
txmixaset = 950
Here are to relevant settings from my /etc/asterisk/rpt.conf. Lines in Bold may be significant to your node when configured with the Baofeng 888 and URIx. Towards the top of the file, there is an entry as follows.
42527 = radio@127.0.0.1/42527,NONE
Down at the very bottom of /etc/asterisk/rpt.conf are the entries for the node specifically.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;; Configure your nodes here ;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Note: there is no need to duplicate entire settings. Only
; place settings that are different than the template.
;
;;;;;;;;;;;;;;;;;;; Your node settings here ;;;;;;;;;;;;;;;;;;;
[42527](node-main)
statpost_url = http://stats.allstarlink.org/uhandler
idrecording = |iN7JLR
duplex = 1
hangtime = 400
rxchannel = SimpleUSB/42527
devstr
Contained within the file /etc/asterisk/simpleusb.conf is an short entry “devstr”, which seems to be a key to my issues with the setup. This entry seems to be a mapping the the USB interface for the DMK URIx. The development notes inside of the file state:
; Note: the device string is automatically found when the
; USB setting "devstr=" is empty
On my Debian 12 PC, this was not true. When devstr is empty, asterisk would not connect to the radio. Additionally, the green LED on the URI would be solid green as opposed to blinking. The good people at AllStarLink provide a utility to find this device.
root@marconi:/home/jim# asl-find-sound
3-5:1.0 --> 0d8c:013a C-Media Electronics Inc.
On my system, the URI would move around and become remapped to a different address. I have seen even when I am not moving the USB connections around.
- 2-5:1.0 –> 0d8c:013a C-Media Electronics Inc.
- 3-5:1.0 –> 0d8c:013a C-Media Electronics Inc.
Moving Forward
So, where do i go from here? Well, for the first time is a long while, I have my AllstarLink node working after a fashion. I am still just tweaking it and making a few connections to the WinSystem.org repeater network.
I have a list of modifications I want to install and improvements to be made which included:
- Update the node to Full Duplex
- Update the node radios
- Fixing the roaming USB addresses
- Complete implementation of Allmon3
- Mount computer in a 2U rack mount cabinet
- Fix / Improve the Squelch crash at the end of transmission.
- I also might play around with adding some automations into HomeAssistant, but we shall see.
At the end of the day, I am really happy I finally got AllStarLink working and look forward to continued improvements and just having fun.