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

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

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

Author

Masen Furer KF7HVM kf7hvm@0x26.net

Originally By

Greg Albrecht W2GMD oss@undef.net

http://ampledata.org/

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.0a3.tar.gz (816.2 kB view details)

Uploaded Source

Built Distribution

aprs3-8.0.0a3-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

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

Hashes for aprs3-8.0.0a3.tar.gz
Algorithm Hash digest
SHA256 8e9c98c2854f78ff653b99fd76df6475bc74f081d625763d1859e0ca2ca054f2
MD5 e005b9ceca6ad891ba9d359d1788e519
BLAKE2b-256 a65f4d773c49631d3bf16788fe5f5f9ce11276730574dda63e09ed51d6a56182

See more details on using hashes here.

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

Hashes for aprs3-8.0.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 911a8cecb5419c10c43e86d3165fd3d97ee85807bb48296907f8c6d9fb8a9604
MD5 b9072bb654dc58afe33e2049d5acf22c
BLAKE2b-256 0e617e630aa8ff4a40d501300c5fef02313fe50bbed771b824501c990848dbe2

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