Python module for encoding and decoding APRS data.
Project description
aprs3 is a module for encoding and decoding APRS data for use with AX.25 or APRS-IS.
Supported Data Types
Position (PositionReport)
Compressed
Uncompressed
w/ Timestamp
Data Extension
Course / Speed
PHG
RNG
DFS
Altitude
Object (ObjectReport)
Item (ItemReport)
Status (StatusReport)
Message (Message)
Unknown data types will be decoded as InformationField.
Interfaces
This package supplies async methods for interacting with APRS-IS:
import asyncio from aprs3 import create_aprsis_connection async def main(): transport, protocol = create_aprsis_connection( host="noam.aprs2.net", port=14580, user="KF7HVM", passcode="-1", # use a real passcode for TX command='filter r/46.1/-122.9/500', ) async for frame in protocol.read(): print(frame) if __name__ == "__main__": asyncio.run(main())
Synchronous wrappers are also included where that may be more convenient:
from pprint import pformat import attrs import aprs3 with aprs3.TCP( host="noam.aprs2.net", port=14580, user="KF7HVM", passcode="-1", # use a real passcode for TX command='filter r/46.1/-122.9/500', ) as aprs_tcp: # optional callback can be set on the protocol object aprs_tcp.protocol.callback = lambda f: print(f) # block until 1 frame is available and print repr print(repr(aprs_tcp.read(min_frames=1)[0])) # block until 3 frames are available and print decoded form for frame in aprs_tcp.read(min_frames=3): print(pformat(attrs.asdict(frame)))
Additionally, this package may be used with real TNCs via Serial KISS or KISS-over-TCP.
serial:
sync: aprs_serial = aprs3.SerialKISS("/dev/ttyUSB0", 9600)
async: transport, protocol = aprs3.create_serial_connection("/dev/ttyUSB0", 9600)
tcp:
sync: aprs_kiss_tcp = aprs3.TCPKISS("localhost", 8001)
async: transport, protocol = aprs3.create_tcp_connection("localhost", 8001)
These objects are used in the same way as the sample shown above.
For versions of the KISS transports which do NOT automatically encode/decode APRS data, see kiss3.
Versions
8.x.x branch is a large rewrite as aprs3, including async functionality and full packet encoding.
Previous versions were released by ampledata as aprs:
7.x.x branch and-on will be Python 3.x ONLY.
6.5.x branch will be the last version of this Module that supports Python 2.7.x
Installation
Install from pypi using pip: pip install aprs3
Usage Examples
Example 1: Library Usage - Receive
The following example connects to APRS-IS and filters for APRS frames within 500 miles of 46.1N, 122.9W. Any frames returned are sent to the callback p, which prints them.
Example 1 Code
import aprs3 def p(x): print(x) with aprs3.TCP(command='filter r/46.1/-122.9/500') as aprs_tcp: # callback can be set on the protocol object aprs_tcp.protocol.callback = p aprs_tcp.read()
Example 1 Output
W2GMD-6>APRX28,TCPIP*,qAC,APRSFI-I1:T#471,7.5,34.7,37.0,1.0,137.0,00000000
Example 2: Library Usage - Send
The following example connects to APRS-IS and sends an APRS frame.
Example 2 Code
import aprs3 frame = aprs3.APRSFrame.from_str('KF7HVM-2>APRS:>Test from aprs3!') with aprs3.TCP(user='W2GMD', passcode='12345') as a: a.write(frame)
Testing
Run pytest via tox:
tox
See Also
Python kiss3 Module Library for interfacing-to and encoding-for various KISS Interfaces.
Forked from ampledata/kiss
Python aprs3 Module Library for sending, receiving and parsing APRS Frames to and from multiple Interfaces
Forked from ampledata/aprs
Python APRS Gateway Uses Redis PubSub to run a multi-interface APRS Gateway.
dirus Dirus is a daemon for managing a SDR to Dire Wolf interface. Manifests that interface as a KISS TCP port.
Similar Projects
apex by Jeffrey Phillips Freeman (WI2ARD). Next-Gen APRS Protocol.
aprslib by Rossen Georgiev. A Python APRS Library with build-in parsers for several Frame types.
aprx by Matti & Kenneth. A C-based Digi/IGate Software for POSIX platforms.
dixprs by HA5DI. A Python APRS project with KISS, digipeater, et al., support.
APRSDroid by GE0RG. A Java/Scala Android APRS App.
YAAC by KA2DDO. A Java APRS Client.
Ham-APRS-FAP by aprs.fi: A Perl APRS Parser.
Dire Wolf by WB2OSZ. A C-Based Soft-TNC for interfacing with sound cards. Can present as a KISS interface!
Source
Copyright
Copyright 2022 Masen Furer and Contributors
Copyright 2017 Greg Albrecht and Contributors
Automatic Packet Reporting System (APRS) is Copyright Bob Bruninga WB4APR wb4apr@amsat.org
fcs.py - Copyright (c) 2013 Christopher H. Casebeer. All rights reserved.
decimaldegrees.py - Copyright (C) 2006-2013 by Mateusz Łoskot <mateusz@loskot.net>
License
Apache License, Version 2.0. See LICENSE for details.
decimaldegrees.py - BSD 3-clause License
base91.py - GPL
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
File details
Details for the file aprs3-8.0.0a3.tar.gz
.
File metadata
- Download URL: aprs3-8.0.0a3.tar.gz
- Upload date:
- Size: 816.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8e9c98c2854f78ff653b99fd76df6475bc74f081d625763d1859e0ca2ca054f2 |
|
MD5 | e005b9ceca6ad891ba9d359d1788e519 |
|
BLAKE2b-256 | a65f4d773c49631d3bf16788fe5f5f9ce11276730574dda63e09ed51d6a56182 |
File details
Details for the file aprs3-8.0.0a3-py3-none-any.whl
.
File metadata
- Download URL: aprs3-8.0.0a3-py3-none-any.whl
- Upload date:
- Size: 21.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 911a8cecb5419c10c43e86d3165fd3d97ee85807bb48296907f8c6d9fb8a9604 |
|
MD5 | b9072bb654dc58afe33e2049d5acf22c |
|
BLAKE2b-256 | 0e617e630aa8ff4a40d501300c5fef02313fe50bbed771b824501c990848dbe2 |