Skip to main content

Python module for encoding and decoding APRS data.

Project description

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

Project details


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

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.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page