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
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 | 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 |