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
File details
Details for the file aprslib-0.6.37.tar.gz.
File metadata
- Download URL: aprslib-0.6.37.tar.gz
- Upload date:
- Size: 22.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b32bcb029d4e4c008c3f20aa0af82906ee506c5bd05883579f33f820548a220
|
|
| MD5 |
14295c2917c47219f7e5e1214aeecb43
|
|
| BLAKE2b-256 |
63fc0f40ccd457ddaed3a2e2d97c8c87021590f084f360935a133cab1cc7535c
|