Once your contest station grows bigger and you add more antennas to turn, it becomes quite annoying to move around the physical rotator controllers between the operating positions inside the shack. Desperate for a better solution, I developed a server software that provides access to the Rotators through the network. Now all rotators can be controlled either directly through Win-Test, TCP socket, or through a Web-Interface.

Server Application

During my last project DXHeat.com I learned how to write server-side Javascript with Node.js. Node.js is the server-side implementation of Google’s V8 Javascript engine. Javascript is non-blocking which has the advantage that you don’t have to care about Threads and parallel processes. Within the big ecosystem of Node.js, I found a suitable module for accessing serial ports. Everything else (TCP, UDP servers) comes with the Node.js core libraries.

Rotators & USB

At ED1R, all our rotators are connected to EA4TX’s superb ARS control units. Besides providing a slick User Interface, ARS also provides a USB interface.

Server Hardware

We stuffed into an old Pentium 4 server two PCI cards which offer 4 USB ports each. Due to RF interferences in earlier contests, we bought high-quality, double-shielded USB cables from Lindy. We choose Ubuntu 14.04 as the operating system. Since Node.js is cross-platform, I’m sure that the application could also run under Windows. But why bother, Ubuntu is a great and free Operating System.


I tried to keep the software as modular as possible. Through a config file, an arbitrary amount of Rotators (/dev/ttys) can be specified. On application start, each rotator will be registered within the network and a TCP port is opened. I wrote a small Library that broadcasts UDP messages in the Win-Test format so that the rotators automatically appear within each Win-Test Instance. Communication with the Web-Interface is handled through a Websocket, using socket.io. Since fault tolerance was very important (e.g. RF interferences), the software can detect a non-responsive rotator, remove it, and load it, once it becomes again available without affecting the other rotators. Find below an example of our configuration file.

GUI Applications & Integration

I wrote a small Web Application that allows to conveniently change the antenna direction by point&click on the compass rose. The yellow arrow represents your PRESET and disappears, once the rotator (red) has reached the desired heading. Since we have distributed our antennas on several towers, it was also important to see at a glance where the remaining antennas are heading to. All graphical parts were done using HTML5 canvas. Communication from the Web-App with the server is done through the client library of socket.io. Again, fault tolerance is built-in. If a rotator fails, the button & compass rose of the affected rotator just disappear until the rotator becomes available again.

Source Code

I published the software under the GPL license. The source code with installation instructions is available on my Github Profile. Feel free to fork it! The software has been written for Mac OS and Ubuntu systems. But it should be possible to run the code with small modifications also on other Linux distributions and Windows. It works like a charm on Raspberry Pi devices!


Finally, we are now able at ED1R to control all antennas conveniently from any of our 5 operating positions without moving the bulky Yaesu control units anymore. The GUI application shows you immediately the heading direction of all our antennas. Thanks to the Win-Test integration, it has never been so easy to rotate our antennas. By typing in a callsign and pressing CTRL-F12, the antenna now moves directly into your QSO partner’s direction.