Web-Interface für Rotoren
Mit der Zeit ist unsere Conteststation ED1R gewachsen. Wir haben inzwischen 5 Masten mit zahlreichen fest ausgerichteten und drehbaren Antennen. Im Shack haben wir momentan 4 feste Stationen. Da die Steuergeräte der Rotoren aber an einem festen Platz installiert sind war das Drehen der Antennen immer recht umständlich. Für fast jeden Multi musste man aufstehen oder die Aufmerksamkeit des OPs gewinnen, welcher gerade bei den Steuergeräten saß. Deshalb musste eine neue Lösung her.
Da wir inzwischen die Station von ED1R auch recht aktiv im Remote Betrieb nutzen, sollten die Rotoren auch aus der Ferne steuerbar sein. Es ergaben sich damit folgende Anforderungen:
- Steuerung aller Rotoren über ein Web Interface durch eine beliebige Zahl von Benutzern.
- Unterstützung einer Beliebigen Anzahl von Rotoren welche lediglich in einem Konfigurationsfile eingetragen werden
- Steuerung aller Rotoren direkt aus Win-Test (CTRL-F12)
- Fehlertoleranz; Sollte ein Rotor ausfallen (oder durch Einstrahlung via USB nicht mehr ansprechbar sein), darf dieser die restlichen funktionierenden Rotoren nicht beeinflussen.
Server Anwendung
Abgeleitet von den Anforderungen ergab sich eine Server / Client Architektur. Bei der Server Software habe ich mich für Node.JS entschieden. Node.JS ist ein relativ neues, serverseitiges Javascript Framework welches ein breites Ökosystem mitbringt. Im Speziellen gab es bereits eine Bibliothek welche die Kommunikation mit seriellen Schnittstellen übernimmt. Für die Kommunikation mit Win-Test, welche auf UDP basiert, musste ich eine kleine Bibliothek schreiben welche zum einen auf Rotor Kommandos hört und zum anderen im Sekundentakt die aktuelle Position der Rotoren im Win-Test Netzwerk aktualisiert. Obwohl Node.Js sowohl unter Windows, als auch unter Linux läuft, habe ich mich auf Linux (Ubuntu) konzentriert. Nicht zuletzt weil fast jeder ARM Mini Computer (z.B. Raspberry Pi) von den meisten Linux Distributionen inzwischen unterstützt wird.
Unterstützte Rotoren
Bei ED1R verwenden wir ausschließlich Yaesu Rotoren welche durch ARS Interfaces von EA4TX gesteuert werden. Die ARS Interfaces sind über USB an den Antennenserver (Raspberry Pi) angeschlossen. Pablo, EA4TX hat in seinen ARS Interfaces das Yaesu Protokol implementiert, so daß momentan sowohl ARS als auch native Yaesu Rotoren mit USB Anschluss unterstützt werden. Eine Ergänzung um weitere Protokollen sollte jedoch relativ einfach sein.
Client Anwendung
Die Web-Applikation ist ebenfalls in Javascript / HTML geschrieben. Wird die Seite im Browser aufgerufen (bei uns z.B. http://rotators.local.ed1r) wird eine kontinuierliche Verbindung mit der Server aufgebaut. Hierfür kommen die noch relativ neuen „Websockets“ zum Einsatz. Dies ist für den Benutzer allerdings komplett transparent. Im Web Interface werden dem Benutzer alle verfügbaren Rotoren angezeigt. Eine kleine Kompassrose für jeden Rotor erlaubt es die Richtung von allen Rotoren auf einen Blick zu sehen. Anhand eines Buttons wird der gewünschte Rotor ausgewählt. Nun kann in der großen Kompassrose per Click die Richtung gesetzt werden. Neben der aktuellen IST-Position des Rotors wird auch die SOLL-Position angezeigt, bis der Rotor bei der gewünschten Himmelsrichtung angekommen ist.
Lizenz & Sourcecode
Die Software habe ich unter die GPL Lizenz gestellt. Auf https://github.com/dh1tw/arsctl liegt der gut dokumentierte Sourcecode mit Installationsanleitung. Die GPL Lizenz erlaubt ausdrücklich das Forken und Modifizieren des Sourcecodes! Javascript ist relativ einfach zu erlernen.
Resumé
Die beschriebene Software ist nun seit fast einem Jahr bei ED1R erfolgreich im Einsatz. In Contesten haben sich die Win-Test Integration und das Web Interface bewährt. Inzwischen werden die Antennen im Contest viel häufiger gedreht als zuvor. Erkennt Win-Test das eingegeben Rufzeichen, so dreht sich die Antenne mit CTRL-F12 (Short Path) oder ALT-F12 die Antenne in die exakte Richtung. Die fehleranfällige Applikation wtRotators wird nicht mehr benötigt. Der Langzeittest hast beweisen, dass die Serversoftware auch über mehrere Wochen hinweg stabil auf unserem Raspberry Pi läuft. Wir können bei ED1R nun von überall aus, egal von welcher Station im Shack, oder welchem Ort der Welt (Remote) unsere Antennen drehen.