Automatisierte Anzeige von QSO-Statistiken aus Wavelog auf der Ulanzi TC001 Pixelclock mit Awtrix und io.Broker

Einleitung

Im Amateurfunk ist eine gute Dokumentation der geführten QSOs essenziell. Neben der digitalen Archivierung stellt sich für viele Funkamateure auch die Frage, wie diese Statistiken optisch ansprechend und gut sichtbar dargestellt werden können. In meinem Funkraum habe ich hierzu die „Ulanzi TC001 Pixelclock“ mit der alternativen Firmware „Awtrix“ eingesetzt. Diese ermöglicht es, diverse Daten auf einem LED-Display anzuzeigen. In diesem Artikel beschreibe ich, wie ich mit Hilfe von Wavelog, ioBroker und Awtrix eine automatische Anzeige meiner QSO-Statistiken realisiert habe.

Hardware und Software

Für die Umsetzung dieses Projekts nutze ich folgende Komponenten:

  • Ulanzi TC001 Pixelclock mit der alternativen Firmware Awtrix
  • Wavelog als Logbuchsoftware mit API-Schnittstelle
  • ioBroker als zentrale Plattform zur Datenverarbeitung
  • JavaScript-Adapter innerhalb ioBroker zur Datenabfrage und -speicherung

Anbindung von Wavelog über die API

Dank der API von Wavelog lassen sich meine Logbuchdaten automatisiert abrufen. Hierfür wird in Wavelog ein Read-Only API-Schlüssel generiert, der einen sicheren Zugriff auf die QSO-Statistiken ermöglicht. Dies geschieht über folgende Schritte:

  1. Erstellung eines API-Schlüssels in Wavelog mit Lesezugriff.
  2. Notieren der URL zur API, der eigenen Station ID (meist „1“) sowie des API-Schlüssels.
  3. Implementierung eines Skripts in ioBroker, welches die Daten zyklisch abruft.

Einbindung in ioBroker

In ioBroker habe ich eigene Datenpunkte für meine QSO-Statistiken erstellt. Diese erfassen die Gesamtzahl meiner QSOs sowie die Summen der QSOs in den Betriebsarten SSB, FM, CW, RTTY, FT8, FT4 und PSK:

javascript.0.Wavelog.totalqso
javascript.0.Wavelog.SSB_QSOs
javascript.0.Wavelog.fmqso
javascript.0.Wavelog.rttyqso
javascript.0.Wavelog.ft8ft4qso
javascript.0.Wavelog.pskqso
javascript.0.Wavelog.digiqso
javascript.0.Wavelog.cwqso

Das folgende JavaScript wird innerhalb des JavaScript-Adapters von ioBroker eingesetzt und läuft automatisch alle 10 Minuten. Das immer aktuelle Script findet sich hier auf Github.

const request = require('request');

// Wavelog API-settings
const WAVELOG_URL = "https://urlzumlogbuch.de/index.php/api/get_contacts_adif";
const API_KEY = "demoapikey";
const STATION_PROFILE_ID = "1";

// Function for retrieving and processing data
function runScript() {
    const options = {
        url: WAVELOG_URL,
        method: "POST",
        json: true,
        body: {
            key: API_KEY,
            station_id: STATION_PROFILE_ID,
            fetchfromid: 0
        }
    };

    request(options, (error, response, body) => {
        if (error) {
            console.error("Error in API query:", error);
            return;
        }

        if (!body || !body.adif) {
            console.error("Error: No ADIF data received.");
            return;
        }

        const adifData = body.adif;

        // Count all QSOs 
        const totalQso = (adifData.match(/<CALL:/g) || []).length;

        // Count SSB-QSOs 
        const ssbCount = (adifData.match(/<MODE:\d+>SSB/g) || []).length;

        // Count FM-QSOs 
        const fmCount = (adifData.match(/<MODE:\d+>FM/g) || []).length;

        // Count RTTY-QSOs zählen
        const rttyCount = (adifData.match(/<MODE:\d+>RTTY/g) || []).length;

        // Count FT4 & FT8 QSOs summed up
        const ft4ft8Count = ((adifData.match(/<MODE:\d+>FT8/g) || []).length) + 
                            ((adifData.match(/<MODE:\d+>FT4/g) || []).length);

        // Count PSK-QSOs 
        const pskCount = (adifData.match(/<MODE:\d+>PSK/g) || []).length;

         // Count CW-QSOs 
        const cwCount = (adifData.match(/<MODE:\d+>CW/g) || []).length;

        // Count JS8-QSOs 
        const cwCount = (adifData.match(/<MODE:\d+>JS8/g) || []).length;


        // Count Digimode-QSOs  (all digital Modes)
        const digiModes = ["FT8", "FT4", "PSK", "RTTY", "JT65", "JS8","JT9", "OLIVIA", "CONTESTI", "ROS"];
        let digiCount = 0;

        digiModes.forEach(mode => {
            digiCount += (adifData.match(new RegExp(`<MODE:\\d+>${mode}`, "g")) || []).length;
        });

        console.log(`Total QSOs: ${totalQso}, SSB: ${ssbCount}, FM: ${fmCount}, RTTY: ${rttyCount}, FT8+FT4: ${ft4ft8Count}, PSK: ${pskCount}, CW: ${cwCount}, JS8: ${js8Count}, Digi: ${digiCount}`);

        // Write values in io.Broker datapoints
        setState("javascript.0.Wavelog.totalqso", totalQso, true);
        setState("javascript.0.Wavelog.SSB_QSOs", ssbCount, true);
        setState("javascript.0.Wavelog.fmqso", fmCount, true);
        setState("javascript.0.Wavelog.rttyqso", rttyCount, true);
        setState("javascript.0.Wavelog.ft8ft4qso", ft4ft8Count, true);
        setState("javascript.0.Wavelog.pskqso", pskCount, true);
        setState("javascript.0.Wavelog.digiqso", digiCount, true);
        setState("javascript.0.Wavelog.cwqso", cwCount, true);
        setState("javascript.0.Wavelog.js8qso", cwCount, true);

    });
}

// Start Skript automatically
runScript();

// Automatic repeat interval (every 10 minutes)
schedule("*/10 * * * *", function () {
    runScript();
});

Dieses Skript ruft die aktuellen QSO-Statistiken von Wavelog ab und speichert sie in den zuvor erstellten Datenpunkten in ioBroker.

Das erstellte Javascript im Javascript-Editor.
Die Datenpunkte wurden mit den QSO-Summen gefüllt.

Visualisierung auf der Awtrix-Uhr

Der ioBroker bietet einen Awtrix-Adapter, mit dem die Daten aus den erstellten Datenpunkten auf die Ulanzi TC001 Pixelclock übertragen werden können. Hier kann definiert werden:

  • Welche Werte angezeigt werden sollen
  • Textfarbe und Darstellungszeit
  • Symbole und Hintergrundanimationen

Beispielsweise kann die Darstellung so konfiguriert werden, dass die Gesamtzahl der QSOs sowie die Summen pro Betriebsart rollierend auf dem Display erscheinen. Hier die Konfiguration für die Anzeige des Datenpunktes „javascript.0.Wavelog.totalqso“


Fazit

Mit dieser Lösung habe ich eine komfortable und automatisierte Anzeige meiner QSO-Statistiken realisiert. Die Kombination aus Wavelog, ioBroker und der Awtrix-Uhr ermöglicht eine einfache Visualisierung direkt im Shack. Dieses Setup kann leicht angepasst und erweitert werden, z. B. um weitere Betriebsarten oder eine Filterung nach Band. So bleibt der Funkbetrieb nicht nur gut dokumentiert, sondern er wird auch optisch ansprechend präsentiert.

2044

2044