Skip to main content

用于编码和解码 APRS 数据的 Python 模块。

项目描述

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

aprs3 是一个用于编码和解码 APRS 数据的模块,用于 AX.25 或 APRS-IS。

支持的数据类型

  • 职位(职位报告

    • 压缩

    • 未压缩

    • 带时间戳

    • 数据扩展

      • 课程/速度

      • PHG

      • 随机数

      • DFS

    • 高度

  • 对象(对象报告

  • 项目(项目报告

  • 状态(状态报告

  • 留言(留言

未知数据类型将被解码为InformationField

接口

这个包提供了与 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())

同步包装器也包括在其中可能更方便的地方:

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

此外,此软件包可通过 Serial KISS 或 KISS-over-TCP 与真正的 TNC 一起使用。

  • 序列号:

    • 同步:aprs_serial = aprs.SerialKISS("/dev/ttyUSB0", 9600)

    • 异步:传输,协议 = aprs.create_serial_connection("/dev/ttyUSB0", 9600)

  • tcp:

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

    • 异步:传输,协议 = aprs.create_tcp_connection("localhost", 8001)

这些对象的使用方式与上面显示的示例相同。

对于不会自动编码/解码 APRS 数据的 KISS 传输版本,请参阅Kiss3

版本

  • 8.xx 分支是一个大型重写,包括异步功能和完整的数据包编码

以前的版本由ampledata作为aprs发布:

  • 7.xx 分支和-on 将仅适用于 Python 3.x。

  • 6.5.x 分支将是此模块的最后一个支持 Python 2.7.x 的版本

安装

使用 pip 从 pypi 安装:pip install aprs3

使用示例

示例 1:库使用 - 接收

以下示例连接到 APRS-IS 并过滤 500 英里内 46.1N、122.9W 的 APRS 帧。返回的任何帧都将发送到回调p,该回调会打印它们。

示例 1 代码

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)

示例 1 输出

W2GMD-6>APRX28,TCPIP*,qAC,APRSFI-I1:T#471,7.5,34.7,37.0,1.0,137.0,00000000

示例 2:库使用 - 发送

以下示例连接到 APRS-IS 并发送 APRS 帧。

示例 2 代码

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)

测试

通过 tox 运行 pytest:

tox

也可以看看

类似项目

资源

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

作者

Greg Albrecht W2GMD oss @ undef

http://ampledata.org/

Masen Furer KF7HVM kf7hvm @ 0x26

执照

Apache 许可证,版本 2.0。有关详细信息,请参阅许可证

decimaldegrees.py - BSD 3 条款许可证

base91.py - GPL

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

aprs3-8.0.0.post1.tar.gz (816.4 kB 查看哈希

已上传 source

内置分布

aprs3-8.0.0.post1-py3-none-any.whl (20.9 kB 查看哈希

已上传 py3