USKA Sektion Farnsburg - HB9FS

Digipeater / IGate DireWolf (Stand 2022-11-18)

zurück zu 'Technik'

DireWolf / DWXC
HB9EBV, Toni, betreibt den Digi HB9IPA. Der TNC gab den Geist auf. Als Ersatz hat Tom, HB9EYZ, einen Raspberry Pi mit dem ultimativen Sofware-TNC 'DireWolf' aufgesetzt. DireWolf wurde als Digipeater und zusätzlich als RX/TX IGate konfiguriert.
Leider verfügt DireWolf über keine Telemetrie Funktionalität. Mit der Zusatzkomponente 'KISSutil' bietet DireWolf File-Schnittstellen für RX und TX an. Die von DireWolf digipeateten Packets sind in dieser Schnittstelle aber nicht enthalten. So zusätzlich der Terminal-Datenstrom von DireWolf angezapft werden.
Diese Zusatzkomponente wurde in Python geschrieben und DWXC getauft (DireWolf Extended Capabilities):
  • Telemetrie
  • APRS Queries
  • LCD Display
Die Hardware des Software-TNCs wurde anstelle des alten TNC in den bestehenden Einschub verbaut.

Raspberry Pi + Zusatzplatinen "HB9IPA"

Aufbau


Kapselung mit Backform


Hardware
Raspberry Pi 3 Model B
USB-Soundcard
Der Raspberry hat nur einen Audio-Ausgang. Für Audio IN/OUT wird eine USB-Soundcard benötigt.
Powering DC-DC Wandler 12V --> 5V
PTT Circuit Transformer 1:1, Opto-Koppler
Connector TRX Audio + PTT werden über das Mic-Kabel geschaltet, siehe Manual Yaesu FT-212.
PTT Timeout Timer Digispark ATtiny85
Der PTT Timeout Timer läuft unabhängig vom Raspberry auf dem Digispark. Er unterbricht das PTT-Signal nach 10 Sekunden. Damit soll ein Dauerträger bei Problemen im Software-TNC vermieden werden.
LCD + Microswitch Das LCD Display zeigt rudimentäre Informationen an. Die 3 "Screens" können mit Hilfe des Microswitches angewählt werden.


Dataflow


Files
terminal-log Die Terminal Messages von DireWolf werden mit 'redirect' in ein File geschrieben.
Das File ist zwecks Schonung der SD-Card des Raspberrys im RAM-Disk abgelegt.
RX Die RX Packets von DireWolf werden von KISSutil als Files in ein Directory geschrieben.
Das Directory ist zwecks Schonung der SD-Card des Raspberrys als RAM-Disk angelegt.
TX Die TX Packets in Fileform werden von KISSutil aus einem Directory gelesen.
Das Directory ist zwecks Schonung der SD-Card des Raspberrys als RAM-Disk angelegt.
Logs Die Logs werden zwecks Schonung der SD-Card des Raspberrys auf einem USB-Stick gespeichert.


Software
Raspian "Bullseye" Der Raspberry wird "headless" betrieben, läuft somit ohne Display und ohne Keyboard. Der Zugriff erfolgt einzig über das Network (LAN/WLAN).
In eine 1. Variante wurde dazu ein Reverse SSH Tunnel eingerichtet. Später wurde als 2. Variante ZeroTier installiert. Dieses Tool vereinfacht solche Zugriffe dramatisch: die Remote Station kann direkt mit einer IP Adresse ohne Umweg über einen SSH-Server angesprochen werden. Egal, ob die Station hinter einer Firewall steht oder an 4G hängt.
DireWolf Software TNC
Als Digipeater und RX/TX Igate konfiguriert
PTT-Steuerung vie GPIO-Pin
KISSutil Clients kommunizieren mit DireWolf mit dem KISS-Protocol über TCP-Sockets. Am elegantesten wäre für Python-Clients der Einsatz der Python KISS Library von 'ampledata'. Trotz vieler Versuche und der Verwendung diverser Versionen dieser Library konnte der Socket-write nicht zum Laufen gebracht werden.
KISSutil ist ein Teil des DireWolf Packages. KISSutil kommuniziert mit DireWolf auf Socket-Level und bietet eine File-Schnittstellen für RX und TX an.
KISSutil schreibt RX-Packets von DireWolf in das RX-Directory. Pro Packet wird ein File erstellt.
KISSutil liest Files aus dem TX-Directory und schickt diese als TX-Packets telquel an DireWolf.
Python- und andere Clients verarbeiten die Files der RX- und TX-Directories.
DWXC (DireWolf Extenced Capabilities) Eigenentwicklung von Tom, HB9EYZ. Geschrieben in Python.
Telemetrie
APRS Queries
LCD Display
PTT Timeout Timer Eigenentwicklung von Tom, HB9EYZ. Geschrieben in C++ für DigiSpark (Arduino).
Das Aussenden einer APRS-Message dauert ein paar Sekunden. Das PTT-Signal wird vom Raspberry via den PTT Timeout Timer an den TRX geleitet. Die maximale PTT-Time wird durch den PTT Timeout Timer kontrolliert. Nach 10 Sekunden wird PTT auf OFF gesetzt und so ein Dauerträger auf 144.800 MHz vermieden. Der Wert ist hardcoded, könnte auch über einen externen Poti konfigurierbar gemacht werden.


DireWolf - Konfiguration
PBEACON Beacon alle 30 Minuten
DIGIPEAT Fill-in Digi. Nur WIDE1-1 werden digipeated.
IGSERVER Igate aktiviert (euro.aprs2.net)
FILTER "IG 0 t/m": von Igate to Channel 0 only "Messages"
(Data Type Indicator ":")


DWXC - DireWolf Extendec Capabilities
DWXC ist als Ergänzug zu DireWolf konzipiert. Via den DireWolf-Zusatz 'KISSutil' werden die RX- und TX-Datenströme verarbeitet. Die DireWolf-internen TX (Digipeating!) werden über das terminal-log angezapft.
Parameter für DWXC werden in einem Conf-File definiert. So können ohne Programm-Änderung Call, Location, Directories, File-Name usw. angepasst werden.
Die vielen I/O-Operationen lassen die SD-Card des Raspberrys schnell altern. Deshalb werden Work-Files als RAM-Disk zwischengespeichert. Die Log-Daten werden direkt auf einen USB-Stick geschrieben.

Telemetrie: die Header-Daten wie 'Parameter Name Message' (PARM), 'Unit/Label Message' (UNIT) und 'Equation Coefficients Message' (EQNS) werden stündlich TXed, die 'Telemetry' (T)' Packets alle 'geraden' 15 Minuten: 00, 15, 30 und 45.

APRS Queries: die Queries wurden an die 'Standard' Queries angelehnt. Helge, SA7SKY, hat diese zusammengetragen. Diese Liste enthält mehr Queries als in der APRS-Bibel APRS Protocol Reference (P77) beschrieben.

LCD: das Display dient zur Anzeige rudimentärer Daten. Diese werden auf 3 Screens angezeigt. Mit dem Microswitch können die Screens durchgeblättert werden:
Screen 0
1: RX Call / TS
2: APRS Data Idenfitier Code/Text DIR/HOP


Screen 1
1: IP
2: Uptime: nn days


Screen 2
1: Shutdown: n (seconds)
2: cancel: button


Telemetrie HB9IPA
RxDir pkt/15m: Anzahl Packets RX direkt in den letzten 15 Minuten
RxHop pkt/15m: Anzahl Packets RX via Hop in den letzten 15 Minuten
RxTot pkt/15m: Anzahl Packets RX total in den letzten 15 Minuten
RxQry pkt/15m: Anzahl Packets RX Query in den letzten 15 Minuten
TxTot pkt/15m: Anzahl Packets TX total in den letzten 15 Minuten
ExtCap Switch 1 - Extended Capabilities: 0 = off, 1 = on
PathA Switch 2 - PathAdaption: 0 = off, 1 = on
off: APRS-Queries werden mit dem konfigurierten Default-Path beantwortet.
on: APRS-Queries werden mit dem rekonstruierten Path des empfangenen Query-Packets beantwortet. Damit soll gewährleistet werden, dass die Response den Anfrager wieder erreicht.
SW 3-8 Switches 3-8 werden momentan nicht verwendet


APRS Queries
APRS Queries werden als 'Message' (Data Type Identification ":") abgesetzt, siehe APRS Protocol Reference (P71). Eine Query muss nicht Case-sensitive sein, d.h. Gross- und Kleinschrift sind möglich.
Die Query beginnt immer mit "?", gefolgt vom Query Type. Wird hinter dem Query Type ein weiteres "?" angegeben, dann wird als Response eine Kurzbeschreibung des Query Types zurückgesendet. Eventuelle Parameter sind hinter dem Query Type nach einem ";" (Semikolon) anzugeben: "Query Type;Parameter". Z.B. "APRSH;HB9EYZ-14".
Ein Query Packet muss an "HB9IPA" adressiert werden und sieht so aus: "HB9EYZ-4>APZ101,WIDE1-1::HB9BL-13 :?aprs?".

Wird z.B. APRSISCE als Client verwendet, geht das so:
- Menu 'Messages' -> 'Send Message'
- To: HB9IPA -> Chat
- Message: "?APRS"
- Send RF

Beispiele
Query ?cpu
Response *cpu

Query ?dx-d
Response *dx-d



Query Output
?APRS?

?APRS
List of all queries that can be answered by this station.

*APRS?: (1/5) available queries: ?APRSO ?APRSP ?APRSD ?APRSL
*APRS?: (2/5) available queries: ?APRSS ?APRST/PING ?CPU
*APRS?: (3/5) available queries: ?APRSV/?VER/?ABOUT ?APRSH
*APRS?: (4/5) available queries: ?DX ?DX-D ?DX-H
*APRS?: (5/5) For help, add '?' to the command. ?APRSP?, ?VER? etc.
?APRSO?

?APRSO
Object query. List of all objects created by this station.

*APRSO: no objects created
?APRSP?

?APRSP
Send position

*APRSP: 4727.89N / 00745.88E Locator: JN37VL
?APRSD?

?APRSD
Stations heard directly last 1 hour (limited).

*APRSD: (1/5) HB9AW-10 (17:17Z) 48km HB9CR-4 (17:05Z) 22km *APRSD: (2/5) HB9EYW-6 (17:18Z) 18km HB9EYZ-4 (17:22Z)
*APRSD: (3/5) HB9FM-4 (17:21Z) HB9FS (17:21Z) 4km
*APRSD: (4/5) HB9IPA (17:15Z) HB9LU-12 (17:17Z) 59km
*APRSD: (5/5) HB9NF-10 (17:21Z) 87km HB9XC-4 (17:12Z) 46km
?APRSL?

?APRSL
Stations heard via hop last 1 hour (limited).

*APRSL: (1/6) DF2TB-9 (13:59Z) 42km F5INM-9 (14:00Z) 72km
*APRSL: (2/6) F5ZV-9 (14:00Z) 74km F6HOR-3 (14:00Z) 80km
*APRSL: (3/6) HB9BL-13 (14:02Z) HB9BL-14 (14:00Z)
*APRSL: (4/6) HB9DFI-7 (14:02Z) 20km HB9FHL-13(13:59Z) 77km
*APRSL: (5/6) HB9GUF-1 (14:01Z) 121km OE9MMV-9 (13:59Z) 148km
*APRSL: (6/6) OE9XMH-10(14:00Z) 159km
?APRSS?

?APRSS
Send status

*APRSS: Uptime: 45 min; heard keep time, direct: 3600 sec hop: 3600 sec
?APRST?
?PING?

?APRST
?PING
Path by which the packet was heard.


*APRST: Path to: APZ101 via: WIDE1-1
*PING: Path to: APZ101 via: WIDE1-1
?APRSV?
?VER?
?ABOUT?

?APRSV
?VER
?ABOUT
Software versions



*APRSV: DireWolf 1.6, DWXC1 0.9 (DireWolf Extended Capabilities)
*VER: DireWolf 1.6, DWXC1 0.9 (DireWolf Extended Capabilities)
*ABOUT: DireWolf 1.6, DWXC1 0.9 (DireWolf Extended Capabilities)
?CPU?

?CPU
Operating system, Uptime, CPU Temp

*CPU: Host/Kernel/OS: rpi60 5.10.63-v7+ GNU/Linux; UpTime: 57 min; CPU Temp: 41.3C
?DX?


?DX
Farest RXed stations heard during the past 2 hours.
Calls with a leading * means digipeated / hop used.

*DX: (1/5)*OE9XMH-10 14:00Z 159km 101g *OE9MMV-9 13:59Z 148km 90g
*DX: (2/5)*HB9GUF-1 14:01Z 121km 110g *F6HOR-3 14:00Z 80km 331g
*DX: (3/5)*HB9FHL-13 13:59Z 77km 116g *F5ZV-9 14:00Z 74km 288g
*DX: (4/5)*F5INM-9 14:00Z 72km 337g *DF2TB-9 13:59Z 42km 340g
*DX: (5/5)*HB9DFI-7 14:01Z 19km 68g HB9BL-14 14:00Z 1km 177g
?DX-D?



?DX-D
Farest RXed stations heard during the past 2 hours.
Output limited to 5 packets.
Only call directly heard.

*DX-D: (1/1) HB9BL-14 14:00Z 1km 177g
?DX-H?



?DX-H
Farest RXed stations heard during the past 2 hours.
Output limited to 5 packets.
Only calls heard via digis.

*DX-H: (1/5)*OE9XMH-10 14:00Z 159km 101g *OE9MMV-9 13:59Z 148km 90g
?APRSH?

?APRSH
Heard station within 18h: ?APRSH;HB9EYZ-1

*APRSH: HB9EYZ-4 heard 18 times; last: 15:00Z