afu.tools

Home › Remote control

Your radio, in the browser

Remote control puts your radio on any screen: listen, transmit, tune, with a waterfall and every control your radio has. A small program, afu-remote, runs next to the radio and connects to afu.tools by itself. You don't need to open anything on your router.

Operate from the sofa, on holiday or from your phone. Let friends with their own callsign listen or join in on air: one operates, the others listen.

How it fits together

Four parts, two of which you set up yourself: the radio and the computer next to it.

  1. 1

    Radio

    Connected to the computer by USB. Control commands (CAT) and audio both run over it.

  2. 2

    afu-remote

    Program on the computer next to the radio, on Windows, Linux or a Raspberry Pi. It enforces the transmit protection rules, even if the network or browser drops out.

  3. 3

    afu.tools

    Sits between station and browser. The program connects by itself: no port forwarding, no fixed address, no VPN.

  4. 4

    Browser

    On a PC, tablet or phone, nothing to install. With your account you see your stations and the ones others share with you.

Without internet: on a LAN or HAMNET, afu-remote serves the control page itself (http://<Rechner>:8073/). The microphone needs https with your own certificate there. You can also operate a HAMNET-only station from afu.tools: the browser then connects to it directly.

What you operate with

Anything with an up-to-date browser. Nothing to install, no app.

PC and laptop

Windows, macOS, Linux

Chrome, Edge, Firefox or Safari. The full view with movable panels, logbook and chat in their own window too, PTT on the space bar. Firefox always plays through the default speaker, the others let you choose.

Phone

Android and iPhone (iOS)

Chrome on Android, Safari on the iPhone. Everything sits in one column, and you transmit through the phone's microphone. On the iPhone, audio plays even with the silent switch on.

Tablet

Android tablets and iPad (iPadOS)

Chrome on Android, Safari on the iPad. Several columns like on a PC; only small tablets in portrait show one column like a phone.

Control surface

Keypad or dial on the PC

A keypad with displays like the TreasLin N3 over USB (Chrome, Edge) or a learnt dial like the Ulanzi D100H: assign keys and knobs freely, with short, double, long and held presses, layers and profiles. The displays show frequency, S-meter, images or animations. PTT only while held.

TRX-Dial

M5Stack Dial over Bluetooth

Round dial with a touchscreen for frequency, tuning step, band and mode. It can never transmit. You flash the firmware from the browser: afu.tools/dial.

Which radios work

Every radio has its own driver. The control page shows exactly the controls your radio knows. What each radio can do, in Rigstudio and with the Antenna Bridge as well, is under Radios and features.

RadioCoverageControlAudioSpectrum MemoryTunerStatus
Icom IC-7100 HF, 6 m, 2 m, 70 cm USBUSB –✓ in groupsPort tested
Icom IC-7300 HF, 6 m, 4 m USBUSB ✓ with scope = true ✓built in tested
Icom IC-705 HF to 70 cm, 10 W USB, Wi-FiUSB, Wi-Fi ✓✓ in groups AH-705 tested
Icom IC-9700 2 m, 70 cm, 23 cm USB, LANUSB, LAN ✓✓ all three bands – tested
Icom IC-7610 HF, 6 m, main and sub USB, LANUSB, LAN ✓✓ built in untested test it
Icom IC-7300MK2 HF, 6 m, 4 m USB, LANUSB, LAN ✓✓ built in untested test it
Kenwood TS-590S/SG HF, 6 m USB, COMUSB –✓ 0 to 99 built in untested test it
Yaesu FT-891 HF, 6 m USBUSB –✓ 1 to 99 FC-50 untested test it
Yaesu FT-991/FT-991A HF, 6 m, 2 m, 70 cm USBUSB –✓ 1 to 99 built in untested test it
Yaesu FTDX3000 HF, 6 m USBUSB –✓ 1 to 99 built in untested test it
Yaesu FT-DX10 HF, 6 m, 4 m USBUSB –✓ 1 to 99 built in untested test it
Yaesu FT-710 HF, 6 m, 4 m USBUSB –✓ 1 to 99 built in untested test it
Yaesu FT-897/FT-897D HF, 6 m, 2 m, 70 cm CAT cableInterface –– – untested test it
Yaesu FT-857/FT-857D HF, 6 m, 2 m, 70 cm CAT cableInterface –– – untested test it
Yaesu FT-100/FT-100D HF, 6 m, 2 m, 70 cm CAT cableInterface –– – untested test it
Yaesu FTX-1 HF to 70 cm, Field and Optima USBUSB –✓✓ tested
ANAN-7000DLE MkII SDR, transmit 160 to 6 m ThetisThetis (VAC) ––✓ untested test it
R2T2 WebSDR 0 to 61 MHz, receive only own engineEngine ✓ several receivers, zoom –– tested

All radios and features compared

No radio: with model = "demo" afu-remote pretends one is connected and never transmits. Your radio is missing? Tell us which one via Report at the top. It helps most if you own it and can test it once. For untested radios the radio's page has test instructions; you send the log from the control page (Rig test panel).

Settings on the radio

Icom (IC-7100, IC-7300, IC-7300MK2, IC-705, IC-9700, IC-7610)

Control runs over CI-V, transmit over CAT. Factory defaults: IC-7100 address 0x88 at 19200 baud, IC-7300 0x94, IC-7300MK2 0xB6, IC-705 0xA4, IC-9700 0xA2, IC-7610 0x98, each at 115200 baud. Turn “CI-V USB Echo Back” off.

  • Over USB: set “DATA OFF MOD” and “DATA MOD” to USB (MENU › SET › Connectors › MOD Input), otherwise only a carrier goes out when you transmit. Set “USB SEND” and “USB Keying” to OFF.
  • Over the network (IC-705, IC-9700, IC-7610, IC-7300MK2): switch “Network Control” on, create a network user and pick “lan” in the setup. The station switches the transmit audio source itself when keying. The IC-9700 can be switched on remotely with “Network Power On”, the IC-705 can't. Close Icom's own remote control program, the radio only accepts a few connections.
  • Over a virtual COM port (network USB server, Icom's remote control program): pick the port by hand in the setup; if it's not in the list, use “Other port …” (e.g. COM12). The automatic search only asks real USB ports. If a different CI-V address answers during the test, the setup offers to use it.
  • Spectrum: automatic over the network, over USB with scope = true under [rig].
  • Memory: on the IC-7100 the station reads all five groups, on the IC-705 group 00 (more with speicher_gruppen = [0, 1]), on the IC-7610 channels 1 to 99.

More in the questions about Icom over the network.

Kenwood TS-590S/SG

Control over the USB socket (115200 baud by default) or the COM socket (9600 baud), audio over the built-in USB sound card. The setup finds the radio by itself; by hand it's model = "ts590".

  • Transmit: the station keys with TX1 (data transmit), so the audio goes out from the USB input, in SSB too. In the menu, set the audio line for data mode to USB and adjust the USB input level. If you'd rather use the microphone on the radio: ptt = "mic" under [rig].
  • Also: data mode (USB-D and so on), split via VFO B, RIT/XIT, NB, NR, beat cancel, tuner and tune, CW text, tones for FM on 10 and 6 m, power on and off.

Got a TS-590 and fancy testing? Just tell us via Report.

Yaesu (FTX-1, FT-891, FT-991, FTDX3000, FT-DX10, FT-710, FT-897, FT-857, FT-100)

FTX-1: control over the “Enhanced COM Port” (CAT-1) at 38400 baud, audio over the built-in USB sound card. For voice from the browser set “MOD SOURCE” to USB; you can do that from the control page too. Also: clarifier, DNR, contour, APF, CW memories, C4FM.

FT-891: also over the “Enhanced COM Port”, 4800 baud by default (CAT RATE, menu 05-06; the setup tries every rate). For audio from the browser set “SSB MOD SOURCE” in the menu (and the same for AM, FM, DATA) to REAR and “REAR SELECT” to USB. Also: clarifier, DNR, DNF, contour, APF, FC-50 tuner, CW text (uses keyer memory 5).

FT-991/FT-991A: like the FT-891 over the “Enhanced COM Port”, 4800 baud by default (CAT RATE, menu 031; the setup finds the radio by itself). For audio from the browser set MOD SOURCE to REAR for SSB, AM, FM and DATA. Also: 2 m and 70 cm (up to 50 W), C4FM, IPO/AMP 1/AMP 2, tuner, CW text, memories 1 to 99.

FTDX3000, FT-DX10, FT-710 and the two above: if CAT RTS ENABLE is set in the menu (the default), the radio only answers when the computer sets RTS. Since 0.2.107 afu-remote sets RTS on the Enhanced Port itself, and the search tries both. The search never opens the Standard Port (PTT and keying). If it still can't find the radio: afu-remote cat-pruefen only reads and writes everything to a file you can send back.

FT-897/FT-897D: the old Yaesu CAT of the FT-817/857/897 on the CAT/LINEAR socket (TTL, CT-62 or USB-TTL cable), 4800 baud by default (CAT RATE, menu 019), audio through an interface on the DATA socket. The cable carries frequency, mode, VFO swap, split, clarifier, duplex, CTCSS/DCS, S-meter and PO when transmitting (on the FT-897D also ALC and SWR). Levels, power, filters, CW text, memories and tuner you set on the radio. The setup doesn't search for the FT-897, pick it by hand (ft897).

FT-857/FT-857D: the same CAT, the same CAT/LINEAR socket and the same bands as the FT-897, just under its own name (ft857). The baud rate is in the CAT RATE menu, 4800 by default. Whether the FT-857 also reports ALC and SWR when transmitting is still open; otherwise you only get PO. The setup doesn't search for the FT-857 either.

FT-100/FT-100D: the old Yaesu CAT on the CAT/LINEAR socket, fixed at 4800 baud. The socket has TTL levels, so you need a CT-62 or a USB-TTL cable. Audio isn't available over USB: use a sound card interface on the DATA socket. The cable carries frequency, mode, filter, VFO A/B, split, duplex, CTCSS/DCS and the meters (S, PO, SWR, ALC). Not included: levels, power, CW text, memories, tuner (you set those on the radio). The setup doesn't search for the FT-100, pick it by hand. To check without transmitting: afu-remote ft100-pruefen.

ANAN-7000DLE MkII (Thetis)

Thetis has to be running. Control over the Thetis CAT server (Setup › Serial/Network/Midi CAT › Network, port 13013) or a virtual COM port, audio over VAC 1 with two virtual cables. Also: filter presets, NR1 to NR4, attenuator, antenna selection, CW text. Got an ANAN and fancy testing? Just tell us via Report.

R2T2 WebSDR as a receiver

The R2T2 itself runs afu-remote-linux-armv7l (under Download the program above), with the engine included: eingebaut = true on the receiver, then sudo ./afu-remote-linux-armv7l dienst sets up the service that starts at boot.

Entered as [[empfaenger]] in the configuration. Every browser fetches waterfall and audio from the engine itself; afu-remote only hands out the ticket for it. On its own (model = "keiner") the station is a WebSDR; next to a radio on the same computer its waterfall becomes a panadapter, and a click tunes the radio.

As a panadapter for another station (radio on a different computer):

  1. On the receiver, under Settings › Station › Access, create an account with the role Station and a station password, or assign it on afu.tools. The role only watches and gets priority on the receiver over everyone else.
  2. On the radio's station, under Settings › Station › External WebSDR, enter the receiver: address http://…:8073/wasserfall, plus callsign and station password of that account, bands up to 61 MHz.

The radio's station runs on https (microphone), the link to the receiver on HAMNET is plain http: in amateur radio nothing may be encrypted there. The password stays on the station.

What you can do with it

The control page is laid out like a program at the radio: the radio front at the top with frequency, levels, controls and PTT, the waterfall in the middle, and the tools around it as tabs you can drag between three docks. On a big screen everything fits in the window without scrolling.

Operating

Tuning
Mouse wheel over the digit, band keys, VFO A/B, split, RIT, lock.
Listening
12 kHz, 96 kbit/s, around 100 ms buffer. Works on mobile data too.
Transmitting
Microphone on the computer or phone, hold PTT or use the space bar, CW text, tune.
Waterfall
from the received audio, or wide from a WebSDR per band that follows the frequency.
Time machine
The last few minutes of audio and waterfall stay in the browser. Rewind, listen again, run decoders over it, save as WAV and image.
Other programs
Digimode, logging and contest programs control the station through the bridge on your computer (rigctld and Kenwood CAT), audio over a virtual cable.
Watches
“Let me know when …” the squelch opens, a beacon becomes audible or a callsign shows up on the DX cluster. Notification by push or email, with a recording if you like.
What is that?
Mark a signal in the waterfall and the page tells you what it is (CW, FT8, RTTY, SSTV, DMR, pager, OTH radar, power supply …), with an explanation and the right decoder.
Decoders
CW, RTTY, FT8/FT4 and SSTV from the audio, in the browser. Plus AX.25 and APRS at 1200 Bd (VHF), 300 Bd (HF) and 9600 Bd: packets as a list, stations with a position on the map with their APRS symbols.
Beacon clock
The 18 NCDXF/IARU beacons to the second in the waterfall, plus a “heard down to 1 W” analysis per beacon and band with a propagation map: is the band open?
Band log
One spectrum line per band every minute: waterfall over weeks, daily pattern, interfering carriers with “since when” and before/after for antenna work.
Satellites
Pick a satellite and uplink and downlink follow with Doppler correction, with a pass bar and footprint map. On the IC-9700 in satellite mode.
Decode archive
Everything the station has decoded, kept for good: when was VK last heard on 15 m, at which hour does the band open, with distance and area.
Skimmer
On the R2T2 the station decodes CW and FT8/FT4 across whole bands and reports as a node like in the Reverse Beacon Network: to the afu.tools DX cluster, PSK Reporter and the RBN.
Accessibility
Without looking: announcements for screen readers or speech output, the S-meter as pitch, keys for tuning and a spoken description of the signals in the waterfall.
Tours
Guided demos for club night: SSB versus AM, reading FT8, why 40 m is full of broadcasters in the evening. The page tunes by itself and explains.
Guest access
QR code for an info stand, school class or field day: scan and listen in, no account, for a limited time.
Listen-in link
Share a moment from the time machine: 30 s of audio, waterfall image, frequency and time as a short link, with ready-made text for an interference report.
Calendar
Book time slots, a queue instead of priority, ICS feed for your own calendar.
Scan
Bookmarks, band or range: channel by channel with squelch or S-meter, instantly in the spectrum on the R2T2 and with scope; hit list with time, level and duration.
Thunderstorm watch
DWD warnings and your own lightning sensor, adjustable stages: notify, lock transmit, disconnect the operator, disconnect the antenna, trigger switches.
Shack
Power supply, PA temperature, SWR, switches and cameras over MQTT, HTTP or the Antenna Bridge, with limits, history and alarms.
Antenna comparison (R2T2)
S/N of both antennas on the same signal, simultaneously or switched every second, with a chart and measurement log on the station.
Two antennas (R2T2)
ANT1 and ANT2 at once: diversity, stereo, noise blanking with a noise antenna and direction finding from the phase between the two.
Rotator
Via rotctld or GS-232: compass rose with a map around the station; a click, a locator (short or long path) or a DX spot turns to the great circle, satellites with az/el.
DX spots
Spots from the DX cluster as flags on the scale, coloured by rarity, one click tunes. Without pairing, the station fetches them with a free API key that stays on the station.
Controls
Filter, AGC, preamp, NB, NR, notch, power, compressor, FM with offset and tones.
Memory
Bookmarks including repeater offset and CTCSS, the radio's memory channels.

Together

Control
One operates, the others listen. Take over on request, or without an answer after two minutes. The owner asks first too, and can then take over straight away.
Sharing
Roles listener, user (may transmit) and manager for other callsigns.
Chat
for everyone at the station, in direct access too.
Logbook
Band, mode and time are pre-filled. Ends up in your account's logbook, in Wavelog too if you like. With a contest selected the panel becomes a contest logger: callsign, space, exchange, Enter; dupes, multipliers and points as you type, F1 to F8 for CW texts, band map from the DX spots, Cabrillo. The same logger without a station is at /contest-logger.
Windows
Every tab opens in its own window with ⧉, for example on a second screen.

Your station

Bands
Which bands you transmit on and with how much power at most. Applies to everyone who operates.
Station log
Who was there when and, if you want, every transmission. Stored on the station.
Updates
The page tells you what's new. Installing only happens when the owner presses the button, never while transmitting.
Audio test
Check microphone and speaker under Settings › Audio, on iPhone and iPad too.

Transmit protection on the station

The rules run in the program next to the radio, not in the browser. If the network, browser or program fails, the radio goes back to receive.

off No transmitting until you allow it
1.5 s no sign of life: key released
180 s longest single transmission
per band Bands and maximum power

You set the times in the settings file. Responsibility for transmissions stays with whoever runs the station.

How is remote control secured? Encryption, what someone would need to hijack it and what you can do yourself.

Download the program

One file, nothing else to install, no Python needed. All files are the same version.

Setup

About ten minutes, the program works out most of it by itself. The guide shows every step with pictures; if something's stuck, have a look at Questions and fixes.

  1. Create a station

    Sign in on the control page, create a station under Settings › My stations and copy the key (afr_…).

  2. Connect the radio

    Switch the radio on and plug it into the computer by USB. With the ANAN, start Thetis and switch on its CAT server (Setup › Serial/Network/Midi CAT › Network).

  3. Start the program

    Double-click: it opens the setup in the browser (http://127.0.0.1:8073/einrichtung). Pick “Station” there, paste the key, let it find the radio and sound card, test, and save at the end. No switches, no questions in the console window.

  4. Get going

    The station shows as online on the control page. Under Settings you set bands, maximum power and sharing.

Windows

  1. Put afu-remote.exe in its own folder, say C:\afu-remote, and double-click it.
  2. If Windows warns about an unknown publisher: “More info”, then “Run anyway”.
  3. For autostart, put a shortcut in shell:startup.

Linux and Raspberry Pi

  1. Make it executable and start it: chmod +x afu-remote-linux-*, then ./afu-remote-linux-aarch64.
  2. Groups for radio and audio: sudo usermod -aG dialout,audio $USER, then log in again.
  3. As a service at boot: template afu-remote.service in the source code (ExecStart=… run, Restart=always).
  4. Without a screen (R2T2, server): the console or journalctl -u afu-remote shows the LAN address and a setup code. Open it in a browser on another computer and enter the code. That only works while nothing has been set up yet.

Already set up and want it different (a station here instead of the operating computer, or the other way round)? On the station's page under Settings › Station › General, or on the bridge's page “Change setup”. A double-click always starts whatever you set up last.

Useful commands
afu-remote setup
Opens the setup in the browser, even if something is already set up.
afu-remote setup --token afr_… --auto
For scripts and services: no questions, the first radio found, transmit off.
afu-remote devices
Lists serial ports and sound cards in case the search finds nothing.
afu-remote probe
Talks to the radio for 5 seconds and shows what it reports.
afu-remote cat-pruefen
Yaesu with CP2105: on the Enhanced Port, queries at every baud rate with and without RTS what the radio answers, and writes it to cat-pruefen.txt. Never transmits.

On Linux the program is called like the downloaded file, for example ./afu-remote-linux-x86_64 setup. ALSA (libasound2) has to be there; on any system with sound it is.

Station won't come up? Support session with afu.tools

In a support session afu.tools looks at your radio together with you: you get instructions and buttons (“Start”, “Done”), afu.tools queries things on the radio, and you approve or decline every action. Transmitting is always locked, and you can end it at any time. What exactly happens

  1. Station running: on the control page under Settings › About and diagnostics › Request support. We'll get back to you and offer you the session there.
  2. Station not running: create a support key here and start afu-remote support --schluessel afs_… in a console. A page opens in the browser.

Valid for 24 hours and only once. You need to be signed in for this.

Other programs on the station computer (logging, digimodes, displays via rigctld)

Two programs on one serial port never work cleanly: sometimes the radio answers one, sometimes the other, and afu-remote then reports “radio stopped answering”. That's why afu-remote keeps the port to itself and offers the other programs what they expect (from 0.2.119, before that through a second bridge):

  • rigctld on port 4532 (“Hamlib NET rigctl”), on by default, only for this computer.
  • rotctld on port 4533 for the station's rotator (“Hamlib NET rotctl”).
  • CAT like a Kenwood TS-2000 on a virtual COM port pair or a pseudo-terminal.
  • WinKeyer for CW from contest programs (from 0.2.120); text goes to the radio as CW text.
  • Audio for digimode programs over a virtual cable; it only transmits during PTT from one of these interfaces.

Set it up in the setup or later on the control page under Settings › Station › Services › Other programs (owner and managers). Per interface: off, this computer only, or network with a list of allowed addresses and networks (IPv4, IPv6, e.g. 192.168.1.0/24 or 44.0.0.0/8 for HAMNET); everything else is rejected and goes into the station log. rigctld and rotctld know a password (Hamlib --password), but most programs can't send it. Without sign-in anyone on the list can control the radio; PTT over the network only exists if the owner explicitly allows it.

Stop your own rigctld first; the programs stay on Hamlib “NET rigctl” with 127.0.0.1:4532. Anything that only reads (say a clock with a frequency display) doesn't take control. If a program sets the frequency, it's the operator; with the same callsign as in the browser (“Acts as”) it stays one person. If someone else is currently operating remotely, the station rejects setting and PTT from the programs, reading still works. PTT only works with “Transmit allowed”.

Contest programs: CAT, OmniRig and CW over WinKeyer

Contest programs on Windows want a COM port for the radio and usually a second one for CW. Both are available on the station and in the bridge on your operating computer (from 0.2.120), each on a pair of virtual COM ports: afu-remote takes one end, the program the other.

  • CAT like a Kenwood TS-2000: frequency, mode, split, RIT and XIT, CW speed and CW text (KY). For OmniRig there's the rig file afu-remote.ini: put it in the Rigs folder, restart OmniRig, rig “afu-remote”.
  • WinKeyer (WK2 protocol): the program sends its texts as if to a real keyer, and the station's radio keys itself. Aborting in the program stops the radio immediately, and the speed from the program changes the radio's speed.

Keying via DTR/RTS isn't available: the timing couldn't be held over the link. CW text works on the Yaesu radios from the FT-891, the TS-590, the ANAN and the Icom radios; for others, request support. Step by step it's in the guide.

Editing the settings file by hand

Since version 0.2.52 you set radio, audio, transmit and operating on the page (Settings › Station › Radio, for owners and managers). afu-remote.toml only keeps what's needed before that: station key, direct access and built-in receiver engines. The program still accepts the sections below on first start and then moves them to geraet.json (backing up the old file). Restart the program after changing the file.

[rig]
model = "ic7100"        # ic7100, ic7300, ic7300mk2, ic705, ic9700, ftx1, anan7000 oder demo
port = "COM5"           # ANAN: "tcp://127.0.0.1:13013", IC-705/IC-9700 übers Netz: "lan://192.168.1.50"
baud = 19200            # FTX-1: 38400, IC-7300/705/9700: 115200
civ_address = "0x88"    # nur Icom, Werkseinstellung je Modell: IC-7300 "0x94", IC-7300MK2 "0xB6", IC-9700 "0xA2", IC-705 "0xA4"
lan_benutzer = ""       # nur übers Netz: Netzwerk-Benutzer im Gerät
lan_passwort = ""
cat_rts = "an"          # nur Yaesu mit CP2105, sonst weglassen: "an"/"aus" statt automatisch (Menü CAT RTS)
mod_umschalten = true   # nur übers Netz: Tonquelle beim Senden auf LAN/WLAN und zurück
scope = true            # IC-705/9700/7300: Spektrum des Geräts; übers Netz von selbst, über USB nur so
speicher_gruppen = [0]  # nur IC-705: welche Speichergruppen gelesen werden (00 bis 99)

[audio]
input = "USB Audio"     # Teil des Gerätenamens, siehe "afu-remote devices"; übers Netz: "lan"
output = "USB Audio"    # ANAN: "Line 1" und "Line 2" (VAC); übers Netz: "lan"

[tx]
allowed = false         # Senden aus dem Browser erst mit true
tot_s = 180             # längste einzelne Sendung
deadman_s = 1.5         # ohne Lebenszeichen vom Browser: Taste los

[control]
idle_min = 15           # Minuten ohne Befehl, dann ist die Station frei
request_s = 120         # so lange wartet eine Anfrage auf Antwort

[local]
enabled = false         # Direktzugriff im LAN/HAMNET
port = 8073
password = ""
tls = false             # https mit eigenem Zertifikat, für das Mikrofon

Chat with other station operators: the remote control topic in the Telegram group. Bugs via Report, problems with your radio via support (above). All the ways: Contact.