mirror of
https://github.com/kemenril/iR-APRSISD.git
synced 2024-09-19 23:37:39 -07:00
Minor clean-up, and added some simple but useful logging to STDOUT.
This commit is contained in:
parent
2a9c938eaa
commit
c49d6298e8
43
ir-aprsisd
43
ir-aprsisd
|
@ -137,14 +137,15 @@ urllib.request.install_opener(http)
|
||||||
#Handle connection to APRS-IS
|
#Handle connection to APRS-IS
|
||||||
def reconnect():
|
def reconnect():
|
||||||
global AIS
|
global AIS
|
||||||
|
attempt = 1
|
||||||
while True:
|
while True:
|
||||||
AIS = aprslib.IS(conf['APRS']['SSID'],passwd=conf['APRS']['Password'],port=conf['APRS']['Port'])
|
AIS = aprslib.IS(conf['APRS']['SSID'],passwd=conf['APRS']['Password'],port=conf['APRS']['Port'])
|
||||||
try:
|
try:
|
||||||
AIS.connect()
|
AIS.connect()
|
||||||
break
|
break
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("Trouble connecting to APRS-IS server.")
|
print("Connection failed. Reconnecting: " + str(attempt))
|
||||||
print(e)
|
attempt += 1
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -153,32 +154,39 @@ SSIDList = {}
|
||||||
#We'll store timestamps here
|
#We'll store timestamps here
|
||||||
lastUpdate = {}
|
lastUpdate = {}
|
||||||
|
|
||||||
|
#Packet counts here
|
||||||
|
transmitted = {}
|
||||||
|
#Last time stats() was run:
|
||||||
|
lastStats = calendar.timegm(time.gmtime())
|
||||||
|
|
||||||
|
|
||||||
#Load any preconfigured mappings
|
#Load any preconfigured mappings
|
||||||
if conf.has_section('Devices'):
|
if conf.has_section('Devices'):
|
||||||
|
print("Loading predefined SSID mappings.")
|
||||||
for device in conf['Devices'].keys():
|
for device in conf['Devices'].keys():
|
||||||
SSIDList[conf['Devices'][device]] = device.upper()
|
SSIDList[conf['Devices'][device]] = device.upper()
|
||||||
|
print("Static mapping: " + SSIDList[conf['Devices'][device]] + " -> " + device.upper())
|
||||||
|
|
||||||
|
|
||||||
#Get an SSID
|
#Get an SSID
|
||||||
#An apocryphal concern is that this will happily generate an SSID for None,
|
|
||||||
# or whatever else might get passed along to it.
|
|
||||||
# There's a record in the usual set of inReach Placemarks where this happens,
|
|
||||||
# but because the record has no extended data, no packets are ever generated
|
|
||||||
# for it. Such a record is generally not interesting and on the end of the list,
|
|
||||||
# so there has been no reason to explicitly skip it.
|
|
||||||
def getSSID(DID):
|
def getSSID(DID):
|
||||||
global lastUpdate, SSIDList, SSNum, Call
|
global lastUpdate, SSIDList, transmitted, SSNum, Call
|
||||||
|
if not DID: # Don't map None
|
||||||
|
return None
|
||||||
#If we have a Devices section, the SSID list is static.
|
#If we have a Devices section, the SSID list is static.
|
||||||
if DID not in SSIDList:
|
if DID not in SSIDList:
|
||||||
if conf.has_section('Devices'):
|
if conf.has_section('Devices'):
|
||||||
return None
|
return None
|
||||||
SSIDList[DID] = ''.join([Call,"-",str(SSNum)])
|
SSIDList[DID] = ''.join([Call,"-",str(SSNum)])
|
||||||
SSNum = SSNum + 1
|
SSNum = SSNum + 1
|
||||||
|
print("Mapping: " + DID + " -> " + SSIDList[DID])
|
||||||
#Add a timestamp on the first call
|
#Add a timestamp on the first call
|
||||||
# This prevents us from redelivering an old message, which can stay
|
# This prevents us from redelivering an old message, which can stay
|
||||||
# in the feed.
|
# in the feed.
|
||||||
if DID not in lastUpdate:
|
if DID not in lastUpdate:
|
||||||
lastUpdate[DID] = calendar.timegm(time.gmtime())
|
lastUpdate[DID] = calendar.timegm(time.gmtime())
|
||||||
|
if DID not in transmitted:
|
||||||
|
transmitted[DID] = 0
|
||||||
return SSIDList[DID]
|
return SSIDList[DID]
|
||||||
|
|
||||||
|
|
||||||
|
@ -271,7 +279,7 @@ def getEvents():
|
||||||
# float Longitude, float Altitude in feet, int float course in degrees,
|
# float Longitude, float Altitude in feet, int float course in degrees,
|
||||||
# float speed in knots, comment
|
# float speed in knots, comment
|
||||||
def sendAPRS(device, DevID, ARPreamble, tstamp, lat, long, alt, course, speed, comment):
|
def sendAPRS(device, DevID, ARPreamble, tstamp, lat, long, alt, course, speed, comment):
|
||||||
global conf
|
global conf, transmitted
|
||||||
etime = calendar.timegm(tstamp)
|
etime = calendar.timegm(tstamp)
|
||||||
|
|
||||||
#Latitude conversion
|
#Latitude conversion
|
||||||
|
@ -331,11 +339,26 @@ def sendAPRS(device, DevID, ARPreamble, tstamp, lat, long, alt, course, speed, c
|
||||||
pass
|
pass
|
||||||
#Last update in UTC
|
#Last update in UTC
|
||||||
lastUpdate[DevID] = calendar.timegm(tstamp)
|
lastUpdate[DevID] = calendar.timegm(tstamp)
|
||||||
|
transmitted[DevID] += 1
|
||||||
|
|
||||||
|
def stats():
|
||||||
|
global transmitted, lastStats
|
||||||
|
lastStats = calendar.timegm(time.gmtime())
|
||||||
|
print("----------------Packet Forwarding Summary----------------")
|
||||||
|
print("|\t" + time.strftime("%Y-%m-%d %R",time.localtime()))
|
||||||
|
print("| SSID DevID Packets forwarded")
|
||||||
|
for device in transmitted:
|
||||||
|
print("| " + getSSID(device) + "\t" + device + "\t\t" + str(transmitted[device]))
|
||||||
|
print("---------------------------------------------------------")
|
||||||
|
print()
|
||||||
|
|
||||||
#... and here is the main loop.
|
#... and here is the main loop.
|
||||||
while True:
|
while True:
|
||||||
for packet in getEvents():
|
for packet in getEvents():
|
||||||
sendAPRS(*packet) #Otherwise a list of sendAPRS args for the next packet to send.
|
sendAPRS(*packet) #Otherwise a list of sendAPRS args for the next packet to send.
|
||||||
|
if "Logstats" in conf["General"]:
|
||||||
|
if calendar.timegm(time.gmtime()) > lastStats + conf.getint("General","Logstats"):
|
||||||
|
stats()
|
||||||
time.sleep(conf.getfloat('General','Period'))
|
time.sleep(conf.getfloat('General','Period'))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
[inReach]
|
|
||||||
User = Your inReach feed user
|
|
||||||
#If this is defined, we will authenticate to the inReach service.
|
|
||||||
# If it is not, we will assume public access is ok.
|
|
||||||
#Password = Your inReach feed password, if required
|
|
||||||
|
|
||||||
# This should be the location of your KML feed.
|
|
||||||
URL = https://share.garmin.com/Feed/Share/%(User)s
|
|
||||||
|
|
||||||
[APRS]
|
|
||||||
#This SSID is used for logging into APRS-IS, and also as a base ID for
|
|
||||||
# generating callsigns for devices. The first device found will be this
|
|
||||||
# SSID, the next will be this ID + 1, and so on. If you define a [Devices]
|
|
||||||
# section, it is _only_ used for the login, and the device mapping must be
|
|
||||||
# given in full in the [Devices] section.
|
|
||||||
SSID = N0CALL
|
|
||||||
# If you don't have a password, you can use the --genpass command-line
|
|
||||||
# option to calculate it.
|
|
||||||
Password = 1234
|
|
||||||
Port = 14580
|
|
||||||
|
|
||||||
#If the separator is /, your icon will come from the primary symbol table.
|
|
||||||
# if it is \, it will draw from the secondary table.
|
|
||||||
Separator = /
|
|
||||||
#This character represents an APRS icon from the table tied to Separator.
|
|
||||||
Symbol = (
|
|
||||||
|
|
||||||
#This information is included at the end of each packet, along with some
|
|
||||||
# other data.
|
|
||||||
Comment = APRS-IS KML forwarder, by K0SIN
|
|
||||||
|
|
||||||
#Define this section if you'd like to enforce an SSID to IMEI mapping.
|
|
||||||
# It must contain all devices you want to publish. Anything without a
|
|
||||||
# mapping defined will be ignored if this section exists.
|
|
||||||
#[Devices]
|
|
||||||
#N0CALL-12 = 987654321987654
|
|
||||||
#N0CALL-15 = 987654321987656
|
|
||||||
#N0CALL-8 = 092847784398753
|
|
||||||
|
|
||||||
[General]
|
|
||||||
# KML polling interval in seconds.
|
|
||||||
Period = 300
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue