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

Uploaded Source

Built Distribution

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

Uploaded Python 3

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