Is2axudp.py
Beschreibung
is2axudp.py ist ein Python3 Skript, um Pakete im APRS-IS Protokoll per TCP anzunehmen und in AXUDP Pakete zu wandeln. Dies ermöglicht es beispielsweise Daten einer Wetterstation mit CWOP Report (z.B. WeeWX) direkt per HF über APRS abzustrahlen, anstatt die Daten nur über das Internet an einen APRS-Server zu übermitteln. Selbstverständlich lassen sich so auch andere Daten das im APRS-IS Protokoll
Anwendungszwecke:
- Abstrahlung der Daten direkt lokal über HF
- Abstrahlung der Daten über einen entfernten APRS-Digipeater mit dxlAPRS Software
Funktionsweise
Im Beispiel die Anbindung einer Wetterstation mit WeeWX und konfiguriertem CWOP Report.
python3 is2axudp.py connection <-# is2axudp 0.1 ->user DL1NUX-14 pass 21432 vers weewx 4.2.0 <-# logresp # ->DL1NUX-14>APRS,TCPIP*:@182025z5013.81N/01059.43E_000/002g004t035r001p009P009b10250h81.weewx-4.2.0-FineOffsetUSB <~DL1NUX-14>APRS:@182025z5013.81N/01059.43E_000/002g004t035r001p009P009b10250h81.weewx-4.2.0-FineOffsetUSB
- Das Skript erzeugt einen TCP Server auf einem im Skript vorgegebenen und auch änderbaren Port.
- Die Wetterstation connected den TCP Server.
- is2axudp.py antwortet protokollgemäß mit der Softwareversion
- WeeWX sendet das APRS Loginskript mit Rufzeichen, Passcode und Softwareversion
- is2axudp.py antwortet mit einem # logresp #. Damit weiß WeeWX dass die Verbindung erfolgreich ist.
- WeeWX sendet das APRS Paket mit enthaltener TCPIP* Syntax. Das ist so definiert für Übergaben in das APRS-IS Netzwerk.
- Für die Aussendung als APRS-Paket wird durch is2axudp.py die Syntax ",TCPIP*" wieder entfernt. Es bleibt das eigentliche Rohpaket übrig.
- is2axudp.py wandelt mithilfe der wx.py von Chris OE5DXL das Paket in das AXUDP Format um.
Das somit erzeugte AXUDP Paket kann an alle kompatiblen Tools der dxlAPRS Toolchain (udpflex, afskmodem, udpbox usw.) zur Weiterverarbeitung übergeben werden.
Lokale Aussendung am gleichen Standort
Wenn die Wetterdaten vom gleichen Standort wie die Wetterstaton abgestrahlt wird, kann das Skript ohne Änderung verwendet werden. Es sind lediglich der gewünschte TCP Port einzutragen (Standard = 1234) sowie das AXUDP-Ziel (IP-Adresse und Port). Das Paket wird dann 1:1 ausgesendet.
Änderungen am Skript:
TCP Port Eingang (Standard 1234):
serversocket.bind(("0.0.0.0", 1234))
AXDUP Ausgang (Standard = IP 127.0.0.1 und Port 9032):
sendax(data,("127.0.0.1",9032),{})
Aussendung nach dem Durchlaufen des Skripts:
DL1NUX-14>APRS:@182025z5013.81N/01059.43E_000/002g004t035r001p009P009b10250h81.weewx-4.2.0-FineOffsetUSB
Das Paket kann von allen Stationen in HF-Reichweite gelesen werden. Wenn ein iGate unter den Empfängern ist, erscheint die Aussendung auch auf aprs.fi & Co. Möchte man, dass das Paket ggf. noch digipeatet wird, muss man noch den APRS-Pfad durch ein z.B. WIDE1-1 erweitern. Dies geschieht recht einfach im "replace" Abschnitt der is2axudp.py. Anstatt dass ,TCPIP* durch "nichts" ersetzt wird (quasi entfernt), kann man auch einen anderen String einfügen. Es muss aber immer ein "," (Komma - ohne Anführungszeichen) vorangestellt werden.
Original:
data = data.replace(b',TCPIP*',b'')
Änderung mit WIDE1-1 Pfad:
data = data.replace(b',TCPIP*',b',WIDE1-1')