Module for accessing APRS-IS and parsing APRS packets
Project description
A tiny library for dealing with APRS. It can be used to connect and listen to the APRS-IS feed as well as upload. Parsing of packets is also possible, but the entire spec is not fully implemented yet. The following is supported:
normal/compressed position reports
objects
mic-e position report
messages (inc. telemetry, bulletins, etc)
base91 comment telemetry extension
altitude extension
beacons
Packets can often contain characters outside of 7-bit ASCII. aprslib.parse() will attempt to guess the charset and return unicode strings using these steps and in that order:
Attempt to decode string as utf-8
Attempt to guess the charset using chardet module (if installed), decode if confidence factor is sufficient
Finally, decode as latin-1
Install
You can grab the latest release from https://pypi.python.org/pypi/aprslib or via pip
pip install aprslib
Examples
Parsing
import aprslib
packet = aprslib.parse("M0XER-4>APRS64,TF3RPF,WIDE2*,qAR,TF3SUT-2:!/.(M4I^C,O `DXa/A=040849|#B>@\"v90!+|")
{'altitude': 12450.7752,
'comment': 'Xa',
'format': 'compressed',
'from': 'M0XER-4',
'gpsfixstatus': 1,
'latitude': 64.11987367625208,
'longitude': -19.070654142799384,
'messagecapable': False,
'path': ['TF3RPF', 'WIDE2*', 'qAR', 'TF3SUT-2'],
'raw': 'M0XER-4>APRS64,TF3RPF,WIDE2*,qAR,TF3SUT-2:!/.(M4I^C,O `DXa/A=040849|#B>@"v90!+|',
'symbol': 'O',
'symbol_table': '/',
'telemetry': {'bits': '00000000',
'seq': 215,
'vals': [2670, 176, 2199, 10, 0]},
'to': 'APRS64',
'via': 'TF3SUT-2'}
Keep in mind that this function raises exceptions if the packet format is invalid or not supported.
try:
packet = aprslib.parse("M0XER-4>APRS64,TF3RPF,WIDE2*,qAR,TF3SUT-2:!/.(M4I^C,O `DXa/A=040849|#B>@\"v90!+|")
except (aprslib.ParseError, aprslib.UnknownFormat) as exp:
pass
APRS-IS
import aprslib
def callback(packet):
print packet
AIS = aprslib.IS("N0CALL")
AIS.connect()
# by default `raw` is False, then each line is ran through aprslib.parse()
AIS.consumer(callback, raw=True)
VK2TRL>APU25N,qAR,VK3KAW:;AWARC *270052z3602.24S/14656.26E-Albury/Wodonga A.R.C. see www.awarc.org
DL1TMF-1>APRS,TCPIP*,qAS,DL1TMF:!5022.38N/01146.58E- http://www.dl1tmf.de
KF4HFE-1>S3SX9S,K4TQR-1,WIDE1,AB4KN-2*,WIDE2,qAR,W4GR-10:`r,^l\Lk/"5h}
...
The IS class makes use of the logging module. There are various levels of verbosity available for IS. The only non-standard levels are 9 (unknown format errors) and 11 (parse errors). Here is a simple example:
import aprslib
import logging
logging.basicConfig(level=logging.DEBUG) # level=10
AIS = aprslib.IS("N0CALL")
AIS.connect()
AIS.consumer(lambda x: None, raw=True)
INFO:aprslib.IS:Attempting connection to rotate.aprs.net:10152
INFO:aprslib.IS:Connected to 205.233.35.52:10152
DEBUG:aprslib.IS:Banner: # aprsc 2.0.14-g28c5a6a
INFO:aprslib.IS:Sending login information
DEBUG:aprslib.IS:Server: # logresp N0CALL unverified, server EIGHTH
INFO:aprslib.IS:Login successful (receive only)
DEBUG:aprslib.parse:Parsing: PY4MM-15>Q8U11W,PU4YRM-15*,WIDE3-2,qAR,PP2MD-1:'L.Kl #/"=h}APRS DIGI - Uberlandia - MG
DEBUG:aprslib.parse:Attempting to parse as mic-e packet
DEBUG:aprslib.parse:Parsed ok.
...
Uploading packets to APRS-IS is possible through the sendall() method in IS. The method assumes a single line/packet per call. The parameters may end with \r\n, but it’s not required.
import aprslib
# a valid passcode for the callsign is required in order to send
AIS = aprslib.IS("N0CALL", passcode="123456", port=14580)
AIS.connect()
# send a single status message
AIS.sendall("N0CALL>APRS,TCPIP*:>status text")
A passcode generation function is also provided.
CHANGES
You can find the latest changes between versions in the CHANGES file.
Docs
$ python -m pydoc aprslib
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for aprslib-0.6.39-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a14342bfd7cee2c0e2f85f1ee7891d06785061be3d57c6c4d1be4a56ac5c01bb |
|
MD5 | 309f248e9e65111aacb8bed624e8c36b |
|
BLAKE2b-256 | 3fb2acb94cc15fc625ba13a618385320ba197484c28f92038523692cb146154f |