GB7EAT – first light

The plan is to start small and build up from there, so this is the starting position:

Hardware

  • Raspberry Pi 4 (I could have used a 3B but I had a Pi 4 sitting doing nothing).
  • Digirig Mobile audio adapter.
  • Tait 8115 25W Mobile Radio.
  • Antenna – initially just my shack 2m/70cm co-linear in the back garden.
  • PSU, cables, etc.

This is pretty much as simple as you can get; a computer to run the software; an audio adapter to convert digital signals to audio; and a radio+antenna.

Software

Again, as simple as I can get to begin with. I’m using the Direwolf sound card modem to start off with.

Configuration

I started by installing the stock bookworm-lite edition of the Raspberry Pi OS – which is a slightly adapted version of Debian. I don’t need the graphical desktop as I’m more used to interacting with Linux via the console.

As with the Remote Shack, I created a dedicated Zerotier network to which the node and my home Mac are connected. The Zerotier “SNOPAC” network uses the address space 192.168.192.0/24 and m5kvk-5 has the address 192.168.192.3. It is this network that I use for all remote access rather than the local VLAN address. That way, if the node is moved to a different location – and LAN – it will still have the same IP address.

The second step was to bootstrap the node using debops so that it had a known configuration. I then re-ran debops to install XRPi and Direwolf and configure them to run as systemd services under tmux.

The reason for this is that neither XRPi nor Direwolf are daemons, so they need to be run from a console. By running them in tmux windows, I can run them simultaneously and access them remotely.

The code for doing this was fairly simple: A systemd service unit that runs a script

[Unit]
StartLimitIntervalSec=5
Description=XRpi service
After=network.target
StartLimitIntervalSec=0

[Service]
Type=forking
Restart=unless-stopped
RestartSec=5
User=pi
WorkingDirectory=/home/pi/xrpi
ExecStart=/home/pi/xrpi/start_xrpi.sh

[Install]
WantedBy=multi-user.target

And the script /home/pi/xrpi/start_xrpi.sh

#!/usr/bin/bash
#
/usr/bin/tmux new -d -s xrpi
/usr/bin/tmux send-keys -t xrpi:0 '/home/pi/xrpi/xrpi64v504m-bullseye' ENTER

The pair of files for Direwolf are similar.

direwolf.conf

This file configures direwolf. Mine is pretty simple:

ADEVICE plughw:3,0
#
CHANNEL 0
MYCALL GB7EAT-5
MODEM 1200
PTT /dev/ttyUSB0 RTS
#
AGWPORT 8000
KISSPORT 8001
#
# Transmit FX25 instead of AX25
#
FX25TX 1
#
# How likely are we to Tx?
#
PERSIST 63
# 
# How often do we check?
#
SLOTTIME 12
#
# How many tries do we try to send a frame before giving up?
#
RETRY 5
#
# How long do we wait for a reply?
#
FRACK 3
#
# How many frames will we send before we wait for an acknowledgement
#
MAXFRAME 4
#
# How long should packets be?
#
PACLEN 128
#
# How long do we allow for PTT to take effect
#
DWAIT 0
#
# How long (10ms) to let the Tx stabilise
#
TXDELAY 30
#
# How do we wait at the end before dropping Tx
#
TXTAIL 15

The line ADEVICE plughw:3,0 tells direwolf the address of the digirig mobile, and comes from running the command: aplay -l To get the card (3) and device (0) of the dgirig.

XROUTER.CFG

This is the main config file for XRPi. This is the version after I applied for and was allocated GB7EAT:

# XROUTER.CFG - Main Configuration file for XRPi / XRLin
#
# This file is read only when the program boots.
#
#===================================================================
#
#       Primary Identity for AX25 & NetRom.
#
NODECALL=GB7EAT-5
NODEALIAS=EATON1
#
#       QTH
#
QTH=St Neots, Cambs, UK, IO92uf
LOCATOR=IO92uf
#
#       Console operations.
#
CONSOLECALL=M5KVK
#
#       Chat server.
#
CHATCALL=GB7EAT-8
CHATALIAS=EATCHT
CHATQUAL=100
#
#        PMS
#
PMSTYPE=4
PMSCALL=GB7EAT-2
PMSALIAS=EATBBS
PMSQUAL=120
PMSHADDR=.#22.GBR.EU
#
#       "Connection text", sent to anyone connecting to the alias
#
CTEXT
M5KVK Test Node chat server
Type '?' for list of commands.
***
#
# This text is the response to the 'I' command
#
INFOTEXT
XRPi Packet Router, St Neots, Cambs, UK, IO92uf
Sysop: Gareth M5KVK (M5KVK@GB7EAT.#22.GBR.EU)
To connect to the BBS, use the command: BBS
Comments/reports.queries to: M5KVK
Website: https://m5kvk.org/packet/gb7eat
***
#
#
#       This ID message is sent every IDINTERVAL.
#
IDTEXT
!5213.72N/00016.79W XRPi EATON (GB7EAT-5), 44.33.3.152, Chat=GB7EAT-8/EATCHT
***
#
# Port used to access Telnet
#
TELNETPORT=8023
# =====================================================================
# Interface definitions - These MUST precede any port definitions
# =====================================================================
#
INTERFACE=1
  TYPE=AGW
  MTU=256
ENDINTERFACE
#
# =====================================================================
# Port definitions. Each one begins with PORT and ends with ENDPORT
# =====================================================================
#
PORT=1
  ID=(FSK) 144.950MHz 1200Bd TESTING
  INTERFACENUM=2
  CHANNEL=A
  MHEARD=50
ENDPORT

Note that I am using the direwolf modem in AGW emulation. This appears to be the most stable method.

Conclusion

So, I have GB7EAT operational on 144.950MHz.

On the To-DO list are connections to the rest of the network, replacement of the direwolf modem with a NinoTNC, connection to AMPRnet and addition of a high speed 70cms link.

Also on the list for longer term exploration are a move of the node to a better physical location, and addition of higher speed links.

Building the test node with Ansible and Debops

Ansible and Debops

I spent some of my early professional years doing what is now known as ‘DevOps’. As well as developing software for data communications products like X.25 Packet Switched Nodes, I also developed test harnesses, build tools etc. Thus, I have always been drawn to tools that ease the process of building, configuring and managing software devices.

I came across Ansible some years ago and adopted it for my personal needs (I stopped developing software professionally about 25 years ago, but still ‘tinker’). Therefore it was natural that I would seek to leverage Ansible when building a packet node.

More recently, I came across Debops, which is a suite of ansible playbooks focused on the management of secure Debian-based Linux environments. This includes the Raspberry Pi that I intend to use as the hardware platform for the nodes.

The reason for this sidebar is that I have chosen to create Ansible Roles for each of the software components and distribute them as an Ansible Collection. By using Ansible to manage the node, I can ‘cookie-cutter’ additional nodes and manage their configuration centrally.

NB: The AWX Project is a trademark of Red Hat, Inc., used with permission

Getting back into Packet Radio

Background

Way back in the 80’s and 90’s I used to be very active on packet radio. I had a well-equipped shack in the good location (VHF-wise) and had links on VHF and UHF (70 cm and 23 cm).

As always, of course, life got in the way and I had to pack (sorry) all the packet stuff away. Then I moved to a new location down by the river here in St Neots with ridges on the west and north sides. The result is very poor VHF/UHF. I can get into my local repeaters – GB3OV and GB3PI – but that’s about it.

I’d pretty much forgotten about packet until I got involved with OARC during the COVID Lockdown. OARC has a very active Discord server with two channels devoted to packet radio. The result was a re-awakening of my interest and hence – eventually – this project.

What am I trying to do?

If you look at the Packet Link Map, you can clearly see that St Neots is in a bit of a desert as far as RF links are concerned. Apart from GB7BED, there’s nothing in VHF or UHF range, so the idea is to put something up that will serve the local HAM community and extend the UK Packet Network.

I’ll start with a test node that has local 1200 BPS access on VHF and Internet links to the rest of the network. Once this proves the concept, I’ll build a second node that will (hopefully) be located in a better location. If this is successful, I’ll add a 70cm 9600 BPS link and maybe an HF 300 BPS link. The latter will most likely be delivered via my Remote Shack

Updated Photographs of the remote shack

Here are some updated photographs of the remote shack.

Outer Cabinet
Outer Cabinet location

This is a general view of the outer cabinet at the farm. Yes, it is on a slight slope.

Inner Cabinet
Inner Cabinet

With the outer doors and lid open, you can see the inner cabinet in its bubble-wrap blanket.

Inner Cabinet

With the inner doors open you can see the internal layout.

Inner Cabinet Detail

On the bottom floor is the radio’s power supply, the UPS and the cabinet heater. Above that is the control board with all the electronics; and above that the Flex.

Antenna
Antenna

A not particularly interesting picture of the antenna; showing the fiberglass mast and the ATU board with ATU and the box containing the power take-off for the ATU.

Not shown in this picture is the antenna disconnect.

Remote station update

I realize that it’s been some time since I updated this blog.

The project is still active, but has been suspended due to the weather.

  • The station is running nicely in my back garden
  • The site has been surveyed and is suitable
  • The hold-up is the antenna:
    • It’s going up in the trees
    • I decided to wait until the leaves were off the trees
    • By that time, the weather was appalling and ground too boggy to walk over.

I’ve had to postpone until the weather improves. Unfortunately, I will be overseas for several months, so we’re looking at June.

I’ll need to go with a simpler antenna and revise later.

Setting up a Remote Station – part 13 The Installed Station

The main image shows the installed station – but still in the garden. The top shelf has the Flex 6400 on it, the middle shelf the control system and the bottom has the UPS and power supplies. Hopefully, this will cut down on noise induction.

This image shows the control board before being installed in the cabinet.

Top left is the ancillaries board with an input jack from the ancillary 12V PSU, a couple of Power Poles to feed other 12V devices, the ESP8266 running ESPHome and code for the environmental sensors – an on-board Temp/Humidity sensor for the internal cabinet, and two 1-wire temperature sensors that will be placed in the space between the two cabinets and outside. On the far right is the Teltonika RUT951 router. In the picture it has its internal aerials on, but in the field it will have the 4G antennas and one of the wi-fi antennas connected to external antennas.

Below that is:

  • The Sonoff 4ch switch which controls the Remote On/Off and PTT on the Flex, and the 12V power to the remote auto ATU (not shown)
  • The Geekom Mini IT8 Windows PC
  • The Netgear Ethernet switch, and
  • The Raspberry Pi4 in its smart Argon One case.

Not shown in this image are any power leads. Also not shown in this image, but visible in the main one, are the two Tapo wi-fi switches that control the mains input to the main 12V PSU and the PC’s PSU. The switches are on the middle shelf in case the wi-fi doesn’t penetrate to the bottom shelf. I’m going to try them in the bottom today.

The station is now built, but I’m going to leave it in the garden for a week or so to accumulate sensor readings so I can decide if I need to add forced cooling. It will be located against a north facing wall, so won’t get any direct sun. It’s in a similar north-facing position in the garden, but will get a bit of early morning and late afternoon sun for the next week or so.

Setting up a Remote Station – Part 11 Screenshots

I thought I’d add some screenshots of what the control UI looks like.

The one above shows the main screen with the various controls on it. Only two need to be touched in normal circumstances: the Radio Control button and the Windows PC button. These both kick off automations that sequence through turning things on or off – they don’t control things directly.

At the top of the screen are a number of tell-tales that indicate the state of various components, plus basic propagation information.

You can also see the lightning detector and some elementary status info. if Blitzortung reports lightning within 25km, a script runs that sends a Pushover alert, waits a couple of minutes and then kicks off the Radio Power Off script as if the user had tapped the Radio Control button.

Lastly you can see the state of the ATU, you can toggle the Lock function on the ATU to disabled the auto-tune function, and see whether it is tuned or not.

 

This image shows more comprehensive propagation info.

 

Lastly, you have a screen with some system status information.

There are more screens accessible via the side menu bar, but these three cover 90% of what’s needed. I’ve seen some remote control screens that are, in my opinion, far too crowded with irrelevant information. All that does is hide important information and controls and overwhelm the user with noise. (again, my opinion).

incidentally, all these screens are produced using the standard controls provided with Home Assistant, plus some useful ham-related plugins (e.g. Blitzortung and HF Propogation)

Setting up a Remote Station – Part 10 Overview of the Final System

Hopefully the image above should help to understand what the station consists of. The station comprises:

  • a 240V network with the UPS at its core and feeding:
    • two Tapo switches (one for the PC and one for the Radio PSU);
    • the permanently-on auxiliary 12V PSU that powers the Sonoff, network switch and the ATU controller; and,
    • the permanently-on PSUs for the Router and the Pi-based Station Controller.
  • A mixed wired and WiFi network connecting most devices.
  • The main Radio PSU – Flex – ATU – Antenna Disconnect RF chain.
  • The Sonoff that switches the Flex on and off and operates the PTT when needed.
  • The Pi-based Station Controller running Home Assistant.
  • The Windows 10 PC used for digital modes.

I hope this all make sense.

Moving on, the station has been operating from my home QTH for some time now whilst I scout out a suitable remote location. I’m glad to say that a local farmer has agreed to let me site the station on their land. The only downside is that the station needs to be outside, so I now need to source a suitable IP65 or IP66 (but ventilated) wall-mounted cabinet to house it all in. Not easy to find!

For the antenna, there is a convenient line of trees close by and a 10m high barn; to which they have agreed I can mount a 20m pole to be one end of the doublet antenna I intend to use – the other end being one of the trees. With luck I’ll be able to erect a decent doublet at 20m off the ground and fed by balanced feeder from the SG-230; which will be mounted 2-3m off the ground at a convenient location midway between the ends of the doublet – probably somewhere on the wall of the aforementioned barn. I’ll use a 12V combiner to feed power to the ATU and the antenna disconnect unit.

Setting up a Remote Station – Part 9 Nearly Complete

Let me start with an apology. This site has been off the air for some weeks due to a server move initiated by my hosting provider. They gave me plenty of warning, but unfortunately the move took place whilst I was away and unable to react. Hopefully all is well now.

Nearly complete

It’s been some time since I last posted on this topic because I have been away on an extended trip. However, I’m back now and am now very nearly (hopefully) at the point where I can move the completed station to its new location. Since the last update, I’ve been able to:

  • Resolve the networking issue I grappled with in the previous post by adding an intermediate Ethernet switch.
  • Rebuilt the Station Control Computer to run Home Assistant on its preferred operating system – Home Assistant OS. HAOS is a stripped down Linux built using BuildRoot: which is optimized for embedded devices.
  • As a consequence, I’ve also migrated a couple of the additional systemd services I used before, to use Home Assistant Addons, viz: The code to monitor the UPS, the code to monitor the Pi, and the code to control the fan in the Argon40 case I am using. For the UPS, I am now using NUT rather than APCUPSD. This forced me to change the code in the Windows PC as well.
  • I’ve also added integrations to display the current RF conditions and provide warnings of any local thunderstorms.

My main tasks still outstanding are:

  • To source an auto-disconnect for the antennas.
  • To build a 12V injector to feed power to the SG-230 ATU that will be located at the base of the antenna.
  • To enable the MQTT service on the router, so it can report status to Home Assistant
  • To work on the Home Assistant dashboard that will be used to control everything.
  • Develop automations to disconnect the antennas and power off the ATU if lightning is detected close by, or when the radio is off.

Once I have fixed the final location I can also:

  • Decide on what is needed to house everything, which will also let,
  • Lay everything out on a plywood base board,
  • Finalise cable lengths and source screened cables for everything.

So, actually there’s quite a lot still to do.

In the next post, I’ll summarize where we are and include some diagrams that should hopefully make everything clearer.