From 5fab3e3d3666c3b4ba185808c604bec2334075a7 Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Sun, 18 Aug 2019 00:15:07 +0200 Subject: [PATCH] add igate functionality --- config_webrx.py | 9 +++++++++ csdr.py | 8 ++------ owrx/kiss.py | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/config_webrx.py b/config_webrx.py index a5cf0ad..11d8d30 100644 --- a/config_webrx.py +++ b/config_webrx.py @@ -254,3 +254,12 @@ temporary_directory = "/tmp" services_enabled = False services_decoders = ["ft8", "ft4", "wspr", "packet"] + +# === aprs igate settings === +# if you want to share your APRS decodes with the aprs network, configure these settings accordingly +aprs_callsign = "N0CALL" +aprs_igate_enabled = False +aprs_igate_server = "euro.aprs2.net" +aprs_igate_password = "" +# beacon uses the receiver_gps setting, so if you enable this, make sure the location is correct there +aprs_igate_beacon = False diff --git a/csdr.py b/csdr.py index 40348be..4aedc88 100644 --- a/csdr.py +++ b/csdr.py @@ -26,7 +26,7 @@ import signal import threading from functools import partial -from owrx.kiss import KissClient +from owrx.kiss import KissClient, DirewolfConfig from owrx.wsjt import Ft8Chopper, WsprChopper, Jt9Chopper, Jt65Chopper, Ft4Chopper import logging @@ -562,11 +562,7 @@ class dsp(object): self.direwolf_config = "{tmp_dir}/openwebrx_direwolf_{myid}.conf".format(tmp_dir=self.temporary_directory, myid=id(self)) self.direwolf_port = KissClient.getFreePort() file = open(self.direwolf_config, "w") - file.write(""" -MODEM 1200 -KISSPORT {port} -AGWPORT off - """.format(port=self.direwolf_port)) + file.write(DirewolfConfig().getConfig(self.direwolf_port)) file.close() else: self.direwolf_config = None diff --git a/owrx/kiss.py b/owrx/kiss.py index c036715..67dc319 100644 --- a/owrx/kiss.py +++ b/owrx/kiss.py @@ -2,6 +2,7 @@ import socket import time import logging import random +from owrx.config import PropertyManager logger = logging.getLogger(__name__) @@ -11,6 +12,42 @@ TFEND = 0xDC TFESC = 0xDD +class DirewolfConfig(object): + def getConfig(self, port): + pm = PropertyManager.getSharedInstance() + + config = """ +MYCALL {callsign} +MODEM 1200 +KISSPORT {port} +AGWPORT off + """.format( + port=port, + callsign=pm["aprs_callsign"], + ) + + if pm["aprs_igate_enabled"]: + config += """ +IGSERVER {server} +IGLOGIN {callsign} {password} + """.format( + server=pm["aprs_igate_server"], + callsign=pm["aprs_callsign"], + password=pm["aprs_igate_password"], + ) + + if pm["aprs_igate_beacon"]: + (lat, lon) = pm["receiver_gps"] + lat = "{0}^{1:.2f}{2}".format(int(lat), (lat - int(lat)) * 60, "N" if lat > 0 else "S") + lon = "{0}^{1:.2f}{2}".format(int(lon), (lon - int(lon)) * 60, "E" if lon > 0 else "W") + + config += """ +PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" overlay=R lat={lat} long={lon} comment="OpenWebRX APRS gateway" + """.format(lat=lat, lon=lon) + + return config + + class KissClient(object): @staticmethod def getFreePort():