How to install an IRLP Experimental Reflector with TheLinkBox

This article explains how to build an IRLP experimental reflector with TheLinkbox. It also induces enabling codec trans-coding, Allstar connectivity, and installing a basic dashboard.

There are a lot of brains behind this and I like to give credit where credit is due. I used the references below and I primarily worked with Fred W5MGM getting the trans-coding and Allstar working and I’m hoping I documented it all correctly if I (or someone else) ever needed to replicate this in the future.

Reference:
http://75.127.13.79/TheLinkBox
http://75.127.13.79/TheLinkBox/Notes_Fred_W5MGM

I setup a server on https://virmach.com/ that was Debian 10 64bit.

Install section:

These SSH Commands Will Install TheLinkBox
cd /home
wget https://github.com/wd5m/misc/raw/master/thelinkbox-compiled-debian9.tgz
tar xvzf thelinkbox-compiled-debian9.tgz
cd /home/thelinkbox
wget http://75.127.13.79/TheLinkBox/tlb.conf

Go into the file /home/thelinkbox/tlb.conf
sudo nano /home/thelinkbox/tlb.conf
Put in your personal echolink callsign and password
Then start up the linkbox with the following command
linkbox/tlb -d -f tlb.conf

After the software is installed and working to your satisfaction
you can run it in the background with this script
sudo nano /root/start

once you are in editing the start file paste this in:

#!/bin/bash

sleep 1
echo -n "Changing Present Working Directory PWD to home"
cd /home/thelinkbox
echo "Done!"


sleep 1
echo -n "Update the timezone to central time... "
sleep 1
TZ='America/Chicago'; export TZ
echo "Done!"
sleep 1
echo -n "here is the current time and date"

date

sleep 1
echo -n "Starting up the Link Box "
linkbox/tlb -d -f tlb.conf  >&/dev/null 2>&1 &
echo "Done!"

sleep 1

echo -n "this is the end of this script - - - " 

sleep 1 

echo " good bye." 

exit

Now start at an fresh ssh command window and type
/root/start
to start your LinkBox in the background on the server (if the server reboots you must do this again).

Transcoding section:

Create the following script
cd /home/thelinkbox/scripts; sudo nano tlbevent.sh

Paste in:

#!/bin/bash
# tlbEvent script
# Set path to this script in tlb.conf as: EventScript = /home/tlb/scripts/tlbEvents
# There are many other things you can do from this script baesd on tlb events.
# See TLB documentation.
# WD5M
TLBCMD="/usr/local/bin/tlbcmd"    # path to "tlbcmd" executable
# Logging - calls to this function have been commented out.
function log {
        local LOGFILE=/home/tlb/log/messages
        local MESSAGE="TLB: $@"
        echo "${0##*/}:$MESSAGE"
        if [ -n "$LOGFILE" ]; then
                echo "`date '+%b %d %Y %T %z'` $MESSAGE" >> $LOGFILE
        fi
}
function linkit {
	# The linkit function loops through connected users and links new connection
	# Be sure to set ConfEnable = 0 in tlb.conf
	#
	THISCALL="${1}"
	var1=$(${TLBCMD} -s ..users)
	IFS=$'\n'
	for line in ${var1}
	do
		unset IFS
		set ${line}
		if [[ "${1}" == *[0-9]. ]]; then  # --> user number
			if [[ "${3}" == *K* ]]||[[ "${3}" == *x* ]]; then   # Kicked
				#log "${THISCALL} allready kicked or inactive: ${line}"
				continue        # Already kicked or inactive"
			fi
			if [[ "${2}" == "${THISCALL}" ]]; then
				#log "${THISCALL} skip same node: ${line}"
				continue        # skip same node
			fi
			if [[ "${3}" == *R* ]]; then   # Monitor enabled
				if [[ ${MONITOR} -eq 1 ]]; then # unlink when both enable monitor
					#log "unlink ${THISCALL} ${line}"
					JUNK=$(${TLBCMD} -s "..unlink ${THISCALL} ${2}")
				else
					#log "${THISCALL} link -m node: ${line}"
					JUNK=$(${TLBCMD} -s "..link -m ${THISCALL} ${2}")
				fi
			else
				#log "linking ${THISCALL} to ${2}"
				JUNK=$(${TLBCMD} -s "..link ${THISCALL} ${2}")
			fi
		fi
	done
} # end of linkit function

# ${1} = <event> see SCRIPTING.txt in tlb source.
# ${2} = <type> one of "echolink" "speakfreely" "rtp" "outbound"
# ${3} = <user>
# ${4} = <user_count>
if [ "${1}" = "connected" ]; then
	linkit "${3}"     # link to other ports
fi

exit 0

Save the file and make it executable with this command:
cd /home/thelinkbox/scripts
chmod +x tlbevent.sh

Go into /home/thelinkbox/tlbcmd.
I copied the tlbcmd file in this directory to /usr/local/bin

To test it out I typed in
/home/thelinkbox/scripts/tlbevent.sh

In /home/thelinbox/tlb.conf
On line 29 I added ConfEnable=0
On line 30 I added EventScript = /home/thelinkbox/scripts/tlbevent.sh

I changed the CompressionType on line 37 from 3 which =GSM to 5 which = ADPCM.

Rebooted the tlb machine, when it came back up started tlb connected through remote admin on my nano node using adpcm.
It transmits packets through echolink. Echolink transmits packets back through the nano node.

Verify everything is working as expected before continuing.

ASL Section:

Thsi assumes you have ASL running on another server somewhere already

Setting up Allstar (ASL not Hamvoip):
Open ports on ASL machine:
44966 as UDP
2074 as UDP

Configure your LinkBox tlb.conf like so:

###### Your personal settings ######################################
; Callsign MUST be UPPERCASE and either a link "-L" or repeater "-R" 

ConferenceCall = redacted
ConferencePass = redacted
ConferenceQth = redacted
EmailAdr = redacted

###### Echolink - no need to change these settings #################
; EchoLinkEnable = 0
ConferenceID = The Linkbox TLB
Banner = Welcome to this Echolink/IRLP conference
Banner = TLB
; Banner = This is line 3 of the Banner
MaxConferenceClients = 99
WorkingDir = /home
EnableRemoteDTMF = 0
ShowStatusInInfo = 2
DirServerHost1 = server2.echolink.org
DirServerHost2 = server3.echolink.org
DirServerHost3 = server4.echolink.org
LoginInterval = 360
StationListInterval = 600
InactiveDirTimeout = 51000
LogFileRolloverType = 1
CmdPort = 5198
ChatPort = 5199
ConfEnable = 0
EventScript = /home/thelinkbox/scripts/tlbevent.sh
BlabOffTimer = 0
###### speakfreely/IRLP - no need to change these settings #########
SF_Enable = 1
RTP_Pass = -
RTP_Port = 44966
SF_Port = 2074
SF_ReplyPort = 2074
FullDuplex = 1
CompressionType = 0     ; 5=ADPCM   3=GSM   0=Uncompressed/uLaw

In /etc/asterisk/modules make sure you make the tlb channel load. It’s set to noload as default.
Then you’ll configure the /etc/asterisk/tlb.conf to connect to the machine you have the linkbox on via ip address.

Note the astnode can be your public node or private. I setup a private in case I needed to disconnect it.

[tlb0]
call=callsign-something ; Call of the app_rpt station
port=44966              ; Start of UDP port range (this port, port + 1)
astnode=1995            ; app_rpt node associated with this instance (for incoming connections)
context=radio-secure    ; Asterisk context for incoming connections
codec=ULAW              ; Default CODEC to be used


[nodes]
1001 = W6ABC,12.34.56.78,44966      ; This one is for W6ABC at ip 12.34.56.78:44966 default CODEC
1002 = W1XYZ,11.22.33.44,1234,G726  ; This one is for W1XYZ at ip 11.22.33.44:1234 with G726 CODEC

1001 example:
1001 = KV4S-R,555.555.555.555,44966 ; direct IP address not host name.

Next use your Allmon and connect node 1001 to your astnode you defined above.

make Linkbox show IRLP stations instead of IP addresses.
/home/thelinkbox/src/conference.c change line 3025 to
bFoundCallsign = TRUE;

/home/thelinkbox/linkbox
take an attached tlb and replace the tlb file that’s in there with this one.
Make it executable.
chmod +x tlb
Reboot the linbox and then restart it.
/root/start
Irlp nodes will then show up as node numbers.

Install a very basic dashboard:
Instructions found here:
https://github.com/Russell-KV4S/TheLinkBox-Dashboard

Here is a text version in case commands or scripts are problematic copying from wordpress:

That should have everything working (LinkBox, Transcoding, Duplex, Allstar, and a dashboard).

Have fun!

[Android] Setting up a Ham Radio hotspot in the cloud (or Raspberry Pi) and accessing it with DVSwitch Mobile

There are times when you can’t always have your HT and/or hotspot with you but you want to stay in contact with a certain talk group or club.

For Android users, it’s pretty easy to setup a hotspot in the cloud or a Rasperry Pi at home and use DVSwitch Mobile to access any of the digital modes. Note: I only set mine up for DMR.

Update 01/03/2019: EA5GVK has a Raspberry Pi image that has all modes working and a script that sets everything up for details see this post: https://dvswitch.groups.io/g/main/message/4959
You can also keep up with his latest image versions here: http://ea5gvk-dmr.zigor.es he was at version 2.0 at the time of this article but he’s now on version 8 at the time of this update.

These are the manual instructions but you must follow them to the letter or you may not get audio in one or both directions:

DMR & YSF (cloud): Install Guide

All Modes (Raspberry Pi): Install Guide

While these instruction are for a Raspberry Pi the only modification I had to make for Ubuntu was change the lines that called for .armhf to .amd64. Also, be careful with copy and pasting from the PDF sometimes it adds a space in some links and they didn’t actually work so watch the screen after you do something. Give me a shout if you need help.

IRLP.StationTracking

IRLP.StationTracking gives you ability to get email notifications about status changes of your favorite IRLP stations.
The program reads data from this site: http://status.irlp.net/index.php?PSTART=9

Contact me if you have feature request or use Git and create your enhancements and merge them back in.

I recommend using Windows Task Scheduler to kick the program off on about a 5-10 minute interval.

Once you download, edit the .config file that’s along side the executable as needed (you won’t need to copy the config on future releases unless there is a structure change).
There are comments in the file that tells you how to format the entries. Here is the example file:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <appSettings>
        <!--use commas with no spaces to add more-->
        <add key="Callsigns" value="KV4S"/>
        <!--"Y" or "N" values-->
        <!--If you run this as a job or don't need to see the output then make Unattended Yes-->
        <add key="Unattended" value="N"/>
        <add key="EmailError" value="Y"/>
        <add key="StatusEmails" value="Y"/>

      <!--Email Parameters - Gmail example-->
      <dd key="EmailFrom" value="example@gmail.com"/>
      <add key="SMTPHost" value="smtp.gmail.com"/>
      <add key="SMTPPort" value="587"/>
      <add key="SMTPUser" value="example@gmail.com"/>
      <add key="SMTPPassword" value="Password"/>
    </appSettings>
</configuration>

DMR.UserDB.RadioConverter

https://github.com/Russell-KV4S/DMR.UserDB.RadioConverter


DMR.UserDB.RadioConverter is an application to download the DMR User Database from RadioID.net and Convert it to a CSV file for import into a DMR Radio.

Contact me if you would like to add more and have the file specs or use Git and create your own and merge them back in.

Other than simply executing the Application you can control what CSV files are created for the type(s) of radio you have. Simple edit the .config file located with the executable and use Y/N to manipulate the application.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
  <appSettings>
    <add key="URL" value="https://www.radioid.net/static/users.json"/>
    <!--Set this to "Y" if you are scheduling this to run and don't need the console window to stay open.-->
    <add key="Unattended" value="N"/>
    <!--Y/N value only-->
    <add key="AnyTone" value="Y"/>
    <add key="TYT-UV" value="Y"/>
    <!--Manually filter your csv to just under 10k until I or someone builds something for filtering.-->
    <add key="GD-77" value="Y"/>
  </appSettings>
</configuration>

Since this is a console application you can use Windows Task Scheduler to run this in the backgroud on a schedule of your choosing.

The CSV files are writen to the same location as the executable named:

AnyTone_Users.csv
GD-77_Users.csv
TYT-UV_Users.csv

Use your radios CPS to import and write to your radio.

My 20th Amateur Radio Anniversary

January 21st 2019 marked my 20th year in Amateur Radio!

My interest in Amateur Radio started years before. I had got a police scanner for Christmas one year. Before I had a list of stuff to program i hit search just to see what i could hear. The first thing it picked up was the 145.350 KX4I repeater in Tuscaloosa, of coarse at the time i had not clue what it was. I just hear people chit chatting on there. Over the next few months i continued to listen and learned quite a bit from the hams that talked on that repeater.

I found other repeaters to listen to over time time and had a great time. I also found out I had a relative who was a Ham and I got up with him to find out more about the hobby. Leland Hartley WR4O, came to visit and he showed me his 2 meter radio. He had a custom mic on it that was a an old style Telephone handle that had a PTT on the hand grip. I was fascinated.

I still didn’t get my license right away. I don’t really remember any specific reason that made me start wanting my license after so many years of listening.

It wasn’t until I had completed a year of college. I had just finished a fall semester of 1998 and was going to have a few weeks off when I started studying for the Technician (entry level) class. At the time there were 6 license classes. A month later after talking with some other Radio operators I was ready to take the test. One Friday night the Tuscaloosa Amateur Radio club was giving a test session so I drove up to some church just before the Northport bridge on HWY 69. I got to meet some of the Hams that I heard on my scanner over the past few years. The test was easy because i was really prepared! I think I only missed one or two questions. Over the next week I checked qrz.com to see if my license had been granted. I don’t remember exactly when but it finally showed up and my callsign was KG4BQK. I ended up getting a mobile radio the Yaesu FT-2500M which I used a long time prior to my HF rig. After that I dedicated it for APRS for several year but currently not using it. I’m thinking of making it the radio for an Allstar Simplex node but I’m early in the investigation of that now. I had a lot of fun programming in the repeaters I used to listen to and getting to finally join in on what everyone was talking about. One of my favorite things to do was check into the AICN link net. At this time the AICN was a link system that covered the entire state of Alabama. The system is no longer around at least in that form.

When I graduated college in 2001 and was on a 5 month job search, I took the opportunity to upgrade. The license classes had changed so now there were only 3 licence classes. I got my General and Extra almost back to back. Studying for 5 WPM morse code was a difficult thing for me. I was very opposed to having to know such an archaic means of communication just to get a higher license class. What funny is once i got into it i really enjoyed morse code. I easily passed the code portion and the question pools weren’t that difficult either. I got a yaesu FT-100D for HF communications. At a ham fest I got a paddle and I used CW a few times on the air. I ended up applying for my current callsign KV4S because I wanted a short callsign to reflect all my hard work!

The rest is history! The next couple years I got interested in SKYWARN and now I’m active with the ALERT group in Birmingham. They assist the National Weather Service in getting storm reports from spotters in the field.

I’ve gotten into the digital modes and run personal nodes as well all of which I talk about on this site!

73,
Russell Thomas, KV4S