LA1K / LA100K / LA1UKA

A web app for controlling rotors

All our antenna rotors are accessible on the network from an RPi by use of rotctld servers. As well as enabling convenient rotor control from multiple computers and applications, it enables us to stand on top of the roof and tune the rotors while directly observing the antenna heading (useful for calibration, or for adjusting antennas to a more convenient heading during maintenance).

It turns out that this still is a rather cumbersome thing. We would need to use SSH from our cell phones to connect to a server at Samfundet, fire up a rotctl client and write stuff like P 89 0, P 89.1 0, P 89.2 0 and so on to tune to 89, 89.1 and 89.2 degrees azimuth, respectively. Add the fact that this might be during wintertime, and that our frozen fingers are not well adapted to fiddling about with cell phone keyboards in such conditions. Luckily, only our imaginations can limit what kind of clients we can build for our rotctld servers!

Our imaginations were currently limited to the idea of a cell phone app, or more precisely: a web app. What if we had a nice thing on our cell phones, with buttons we could touch to turn the rotor?

That would be nice, wouldn’t it, ØYVIND?


We had grand plans for a nice evening of hacking where we could misuse some web framework to do what we wanted. Time passed, we forgot about it, remembered it again, and before we could actually do something about it, VK5QI Mark Jessop had in the meantime actually implemented almost what we wanted using Flask in Python.

Screenshot of the rotctl web app provided by darksidelemm/rotctld-web-gui.

It exists! And it is a neat ting when you want to control a single rotor from e.g. the roof, using a cell phone. It is easy to set up and run on your local network. Running a simple Python script sets up a web server which can be accessed through a web browser.

It also sets a good basis for further development of a more specialized web app for our use cases, since the groundwork was already laid down and we could fiddle with the pieces without having to learn Flask from scratch. We forked rotctld-web-gui, and set about hacking it to fit our purposes, which mainly involved extending it to support multiple rotors and doing some modifications to the UI to suit our primary use cases.

Rotctld-web-gui with multiple rotors and some smaller rudimentary GUI changes.

As previously presented, we have a small system consisting of rotctld servers to control multiple rotors from a single Raspberry Pi. These rotctld servers are started according to a config file which defines some properties for each rotor. We simply let our rotctld-web-gui fork read the rotor settings off the same config file to populate the list of rotors it can control.

The application works well for our use, and can control all rotors quite easily. We had to expose it to the entire Samfundet network in order to make it work on our cell phones, so we have ended up running this service only when needed. This, and some other stuff like latency issues with multiple client access are things we want to look more into in the future, which is why this is still a work in progress. We’ll give an update later when we’ve polished off things a bit and had a chance to put it to more use. We’ve put the fork up at bjorgan/rotctld-web-gui. Thanks to VK5QI for putting his nice piece of software on GitHub so that we could tweak it for our needs!

Here is a video:

1 Comment

  1. Dan White

    Thanks for this (VK5QI also)!

    Added a gauge to visually show the position:

Leave a Reply

Your email address will not be published. Required fields are marked *