Skip to main content
https://github.com/python-aprs/aprs3/actions/workflows/pytest.yml/badge.svg

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 aprs 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 aprs

with aprs.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:
    # block until 1 frame is available and print repr
    print(repr(aprs_tcp.read(
        callback=lambda f: print(f),
        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 = aprs.SerialKISS("/dev/ttyUSB0", 9600)

    • async: transport, protocol = aprs.create_serial_connection("/dev/ttyUSB0", 9600)

  • tcp:

    • sync: aprs_kiss_tcp = aprs.TCPKISS("localhost", 8001)

    • async: transport, protocol = aprs.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 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 aprs

def p(x): print(x)

with aprs.TCP(command='filter r/46.1/-122.9/500') as aprs_tcp:
    # callback can be passed to read()
    aprs_tcp.read(callback=p)

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 aprs

frame = aprs.APRSFrame.from_str('KF7HVM-2>APRS:>Test from aprs!')

with aprs.TCP(user='W2GMD', passcode='12345') as a:
    a.write(frame)

Testing

Run pytest via tox:

tox

See Also

Similar Projects

  • apex by Jeffrey Phillips Freeman (WI2ARD). Next-Gen APRS Protocol. (based on this Module! :)

  • 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

Github: https://github.com/python-aprs/aprs3

Authors

Greg Albrecht W2GMD oss@undef.net

http://ampledata.org/

Masen Furer KF7HVM kf7hvm@0x26.net

License

Apache License, Version 2.0. See LICENSE for details.

decimaldegrees.py - BSD 3-clause License

base91.py - GPL

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aprs3-8.0.0.post1.tar.gz (816.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aprs3-8.0.0.post1-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

Details for the file aprs3-8.0.0.post1.tar.gz.

File metadata

  • Download URL: aprs3-8.0.0.post1.tar.gz
  • Upload date:
  • Size: 816.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.4

File hashes

Hashes for aprs3-8.0.0.post1.tar.gz
Algorithm Hash digest
SHA256 9557481647e00da9c78764708aff8c59d93925a615fdced9f85af0a4d15045f1
MD5 ddcc3d85453221e6604fdbc03f1ad266
BLAKE2b-256 fd4e664000643ca752befc686efb7465f9aec5f55de18eb547b37275ad64510c

See more details on using hashes here.

File details

Details for the file aprs3-8.0.0.post1-py3-none-any.whl.

File metadata

  • Download URL: aprs3-8.0.0.post1-py3-none-any.whl
  • Upload date:
  • Size: 20.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.4

File hashes

Hashes for aprs3-8.0.0.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 bb79c5aa3e238d05f7a1686bf8a16ce5f0c055bacc40b848ddd2b9d1afc79079
MD5 2b805f68397f479ef1f034d36e14fb9e
BLAKE2b-256 e441d26236c8ec51f0d26439113b489d86da1250b2aa90ee7418bd9e8a413dcf

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

8.0.0.post1 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page