1
0
mirror of https://github.com/craigerl/aprsd.git synced 2025-07-31 12:52:24 -04:00

Compare commits

...

11 Commits

Author SHA1 Message Date
e5662b95f8 Build > python 3.10 2024-09-16 11:58:54 -04:00
a6f84e42bc retagged v3.4.1 in prep for release 2024-09-16 11:46:53 -04:00
e3ab6e7f59 No limit on change log commits 2024-09-16 11:45:27 -04:00
af3d741833 Rebuild ChangeLog 2024-09-16 11:44:37 -04:00
b172c6dbde Fixed pep8 with packet_list
Small python issue with a pop8 violation.
2024-09-16 11:36:49 -04:00
9d3f45ac30 Updated requirements
for dev and runtime
2024-09-16 11:36:00 -04:00
49e8a622a7 added m2r package to dev requirements
Since we need m2r for converting the ChangeLog.md to rst
added the m2r package for doing that only for the dev requirements
2024-09-16 11:34:00 -04:00
92cb92f89c Update base docs
This patch updates some of the docs files for 3.4.x
2024-09-16 11:33:26 -04:00
37415557b5 Updated Makefile to build Changelog
this patch updates the way we build the changelog
to use the npm auto-changelog
2024-09-16 11:31:29 -04:00
5ebbb52a2c Renamed Changelog 2024-09-16 11:21:01 -04:00
673b34c78b Use auto-changelog to generate changelog
Since we removed pbr, which also generates the changelog,
we had to find a solution for generating the changelog.
The best solution was to use the npm package auto-changelog

https://github.com/CookPete/auto-changelog
2024-09-16 10:56:54 -04:00
22 changed files with 2819 additions and 2213 deletions

View File

@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
python-version: ["3.9", "3.10", "3.11"] python-version: ["3.10", "3.11"]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}

View File

@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
python-version: ["3.9", "3.10", "3.11"] python-version: ["3.10", "3.11"]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}

1063
ChangeLog

File diff suppressed because it is too large Load Diff

1167
ChangeLog.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -22,9 +22,14 @@ dev: venv ## Create a python virtual environment for development of aprsd
run: venv ## Create a virtual environment for running aprsd commands run: venv ## Create a virtual environment for running aprsd commands
docs: dev changelog: dev
npm i -g auto-changelog
auto-changelog -l false -o ChangeLog.md
docs: changelog
m2r --overwrite ChangeLog.md
cp README.rst docs/readme.rst cp README.rst docs/readme.rst
cp Changelog docs/changelog.rst mv ChangeLog.rst docs/changelog.rst
tox -edocs tox -edocs
clean: clean-build clean-pyc clean-test clean-dev ## remove all build, test, coverage and Python artifacts clean: clean-build clean-pyc clean-test clean-dev ## remove all build, test, coverage and Python artifacts
@ -54,7 +59,7 @@ clean-dev:
test: dev ## Run all the tox tests test: dev ## Run all the tox tests
tox -p all tox -p all
build: test ## Make the build artifact prior to doing an upload build: test changelog ## Make the build artifact prior to doing an upload
$(VENV)/pip install twine $(VENV)/pip install twine
$(VENV)/python3 -m build $(VENV)/python3 -m build
$(VENV)/twine check dist/* $(VENV)/twine check dist/*

View File

@ -37,7 +37,7 @@ class PacketList(objectstore.ObjectStoreMixin):
self._total_rx += 1 self._total_rx += 1
self._add(packet) self._add(packet)
ptype = packet.__class__.__name__ ptype = packet.__class__.__name__
if not ptype in self.data["types"]: if ptype not in self.data["types"]:
self.data["types"][ptype] = {"tx": 0, "rx": 0} self.data["types"][ptype] = {"tx": 0, "rx": 0}
self.data["types"][ptype]["rx"] += 1 self.data["types"][ptype]["rx"] += 1
@ -47,7 +47,7 @@ class PacketList(objectstore.ObjectStoreMixin):
self._total_tx += 1 self._total_tx += 1
self._add(packet) self._add(packet)
ptype = packet.__class__.__name__ ptype = packet.__class__.__name__
if not ptype in self.data["types"]: if ptype not in self.data["types"]:
self.data["types"][ptype] = {"tx": 0, "rx": 0} self.data["types"][ptype] = {"tx": 0, "rx": 0}
self.data["types"][ptype]["tx"] += 1 self.data["types"][ptype]["tx"] += 1

View File

@ -0,0 +1,37 @@
aprsd.client.drivers package
============================
Submodules
----------
aprsd.client.drivers.aprsis module
----------------------------------
.. automodule:: aprsd.client.drivers.aprsis
:members:
:undoc-members:
:show-inheritance:
aprsd.client.drivers.fake module
--------------------------------
.. automodule:: aprsd.client.drivers.fake
:members:
:undoc-members:
:show-inheritance:
aprsd.client.drivers.kiss module
--------------------------------
.. automodule:: aprsd.client.drivers.kiss
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: aprsd.client.drivers
:members:
:undoc-members:
:show-inheritance:

View File

@ -0,0 +1,69 @@
aprsd.client package
====================
Subpackages
-----------
.. toctree::
:maxdepth: 4
aprsd.client.drivers
Submodules
----------
aprsd.client.aprsis module
--------------------------
.. automodule:: aprsd.client.aprsis
:members:
:undoc-members:
:show-inheritance:
aprsd.client.base module
------------------------
.. automodule:: aprsd.client.base
:members:
:undoc-members:
:show-inheritance:
aprsd.client.factory module
---------------------------
.. automodule:: aprsd.client.factory
:members:
:undoc-members:
:show-inheritance:
aprsd.client.fake module
------------------------
.. automodule:: aprsd.client.fake
:members:
:undoc-members:
:show-inheritance:
aprsd.client.kiss module
------------------------
.. automodule:: aprsd.client.kiss
:members:
:undoc-members:
:show-inheritance:
aprsd.client.stats module
-------------------------
.. automodule:: aprsd.client.stats
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: aprsd.client
:members:
:undoc-members:
:show-inheritance:

View File

@ -1,29 +0,0 @@
aprsd.clients package
=====================
Submodules
----------
aprsd.clients.aprsis module
---------------------------
.. automodule:: aprsd.clients.aprsis
:members:
:undoc-members:
:show-inheritance:
aprsd.clients.kiss module
-------------------------
.. automodule:: aprsd.clients.kiss
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: aprsd.clients
:members:
:undoc-members:
:show-inheritance:

21
docs/apidoc/aprsd.log.rst Normal file
View File

@ -0,0 +1,21 @@
aprsd.log package
=================
Submodules
----------
aprsd.log.log module
--------------------
.. automodule:: aprsd.log.log
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: aprsd.log
:members:
:undoc-members:
:show-inheritance:

View File

@ -4,6 +4,14 @@ aprsd.packets package
Submodules Submodules
---------- ----------
aprsd.packets.collector module
------------------------------
.. automodule:: aprsd.packets.collector
:members:
:undoc-members:
:show-inheritance:
aprsd.packets.core module aprsd.packets.core module
------------------------- -------------------------
@ -12,6 +20,14 @@ aprsd.packets.core module
:undoc-members: :undoc-members:
:show-inheritance: :show-inheritance:
aprsd.packets.log module
------------------------
.. automodule:: aprsd.packets.log
:members:
:undoc-members:
:show-inheritance:
aprsd.packets.packet\_list module aprsd.packets.packet\_list module
--------------------------------- ---------------------------------

View File

@ -44,14 +44,6 @@ aprsd.plugins.ping module
:undoc-members: :undoc-members:
:show-inheritance: :show-inheritance:
aprsd.plugins.query module
--------------------------
.. automodule:: aprsd.plugins.query
:members:
:undoc-members:
:show-inheritance:
aprsd.plugins.time module aprsd.plugins.time module
------------------------- -------------------------

View File

@ -1,29 +0,0 @@
aprsd.rpc package
=================
Submodules
----------
aprsd.rpc.client module
-----------------------
.. automodule:: aprsd.rpc.client
:members:
:undoc-members:
:show-inheritance:
aprsd.rpc.server module
-----------------------
.. automodule:: aprsd.rpc.server
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: aprsd.rpc
:members:
:undoc-members:
:show-inheritance:

View File

@ -7,13 +7,13 @@ Subpackages
.. toctree:: .. toctree::
:maxdepth: 4 :maxdepth: 4
aprsd.clients aprsd.client
aprsd.cmds aprsd.cmds
aprsd.conf aprsd.conf
aprsd.log aprsd.log
aprsd.packets aprsd.packets
aprsd.plugins aprsd.plugins
aprsd.rpc aprsd.stats
aprsd.threads aprsd.threads
aprsd.utils aprsd.utils
aprsd.web aprsd.web
@ -29,14 +29,6 @@ aprsd.cli\_helper module
:undoc-members: :undoc-members:
:show-inheritance: :show-inheritance:
aprsd.client module
-------------------
.. automodule:: aprsd.client
:members:
:undoc-members:
:show-inheritance:
aprsd.exception module aprsd.exception module
---------------------- ----------------------
@ -77,14 +69,6 @@ aprsd.plugin\_utils module
:undoc-members: :undoc-members:
:show-inheritance: :show-inheritance:
aprsd.stats module
------------------
.. automodule:: aprsd.stats
:members:
:undoc-members:
:show-inheritance:
aprsd.wsgi module aprsd.wsgi module
----------------- -----------------

View File

@ -0,0 +1,29 @@
aprsd.stats package
===================
Submodules
----------
aprsd.stats.app module
----------------------
.. automodule:: aprsd.stats.app
:members:
:undoc-members:
:show-inheritance:
aprsd.stats.collector module
----------------------------
.. automodule:: aprsd.stats.collector
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: aprsd.stats
:members:
:undoc-members:
:show-inheritance:

View File

@ -28,6 +28,14 @@ aprsd.threads.log\_monitor module
:undoc-members: :undoc-members:
:show-inheritance: :show-inheritance:
aprsd.threads.registry module
-----------------------------
.. automodule:: aprsd.threads.registry
:members:
:undoc-members:
:show-inheritance:
aprsd.threads.rx module aprsd.threads.rx module
----------------------- -----------------------
@ -36,6 +44,14 @@ aprsd.threads.rx module
:undoc-members: :undoc-members:
:show-inheritance: :show-inheritance:
aprsd.threads.stats module
--------------------------
.. automodule:: aprsd.threads.stats
:members:
:undoc-members:
:show-inheritance:
aprsd.threads.tx module aprsd.threads.tx module
----------------------- -----------------------

File diff suppressed because it is too large Load Diff

View File

@ -10,32 +10,38 @@ ____________________
`APRSD <http://github.com/craigerl/aprsd>`_ is a Ham radio `APRS <http://aprs.org>`_ message command gateway built on python. `APRSD <http://github.com/craigerl/aprsd>`_ is a Ham radio `APRS <http://aprs.org>`_ message command gateway built on python.
APRSD listens on amateur radio aprs-is network for messages and respond to them.
It has a plugin architecture for extensibility. Users of APRSD can write their own
plugins that can respond to APRS-IS messages.
You must have an amateur radio callsign to use this software. APRSD gets What is APRSD
messages for the configured HAM callsign, and sends those messages to a =============
list of plugins for processing. There are a set of core plugins that APRSD is a python application for interacting with the APRS network and providing
provide responding to messages to check email, get location, ping, APRS services for HAM radio operators.
time of day, get weather, and fortune telling as well as version information
of aprsd itself. APRSD currently has 4 main commands to use.
* server - Connect to APRS and listen/respond to APRS messages
* webchat - web based chat program over APRS
* send-message - Send a message to a callsign via APRS_IS.
* listen - Listen to packets on the APRS-IS Network based on FILTER.
Each of those commands can connect to the APRS-IS network if internet connectivity
is available. If internet is not available, then APRS can be configured to talk
to a TCP KISS TNC for radio connectivity.
Please `read the docs`_ to learn more! Please `read the docs`_ to learn more!
.. contents:: :local:
APRSD Overview Diagram APRSD Overview Diagram
====================== ======================
.. image:: https://raw.githubusercontent.com/craigerl/aprsd/master/docs/_static/aprsd_overview.svg?sanitize=true .. image:: https://raw.githubusercontent.com/craigerl/aprsd/master/docs/_static/aprsd_overview.svg?sanitize=true
Typical use case Typical use case
================ ================
APRSD's typical use case is that of providing an APRS wide service to all HAM
radio operators. For example the callsign 'REPEAT' on the APRS network is actually
an instance of APRSD that can provide a list of HAM repeaters in the area of the
callsign that sent the message.
Ham radio operator using an APRS enabled HAM radio sends a message to check Ham radio operator using an APRS enabled HAM radio sends a message to check
the weather. An APRS message is sent, and then picked up by APRSD. The the weather. An APRS message is sent, and then picked up by APRSD. The
APRS packet is decoded, and the message is sent through the list of plugins APRS packet is decoded, and the message is sent through the list of plugins
@ -46,55 +52,6 @@ callsigns to look out for. The watch list can notify you when a HAM callsign
in the list is seen and now available to message on the APRS network. in the list is seen and now available to message on the APRS network.
Current list of built-in plugins
======================================
::
└─> aprsd list-plugins
🐍 APRSD Built-in Plugins 🐍
┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Plugin Name ┃ Info ┃ Type ┃ Plugin Path ┃
┡━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ AVWXWeatherPlugin │ AVWX weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.AVWXWeatherPlugin │
│ EmailPlugin │ Send and Receive email │ RegexCommand │ aprsd.plugins.email.EmailPlugin │
│ FortunePlugin │ Give me a fortune │ RegexCommand │ aprsd.plugins.fortune.FortunePlugin │
│ LocationPlugin │ Where in the world is a CALLSIGN's last GPS beacon? │ RegexCommand │ aprsd.plugins.location.LocationPlugin │
│ NotifySeenPlugin │ Notify me when a CALLSIGN is recently seen on APRS-IS │ WatchList │ aprsd.plugins.notify.NotifySeenPlugin │
│ OWMWeatherPlugin │ OpenWeatherMap weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.OWMWeatherPlugin │
│ PingPlugin │ reply with a Pong! │ RegexCommand │ aprsd.plugins.ping.PingPlugin │
│ QueryPlugin │ APRSD Owner command to query messages in the MsgTrack │ RegexCommand │ aprsd.plugins.query.QueryPlugin │
│ TimeOWMPlugin │ Current time of GPS beacon's timezone. Uses OpenWeatherMap │ RegexCommand │ aprsd.plugins.time.TimeOWMPlugin │
│ TimePlugin │ What is the current local time. │ RegexCommand │ aprsd.plugins.time.TimePlugin │
│ USMetarPlugin │ USA only METAR of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.USMetarPlugin │
│ USWeatherPlugin │ Provide USA only weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.USWeatherPlugin │
│ VersionPlugin │ What is the APRSD Version │ RegexCommand │ aprsd.plugins.version.VersionPlugin │
└───────────────────┴────────────────────────────────────────────────────────────┴──────────────┴─────────────────────────────────────────┘
Pypi.org APRSD Installable Plugin Packages
Install any of the following plugins with 'pip install <Plugin Package Name>'
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Plugin Package Name ┃ Description ┃ Version ┃ Released ┃ Installed? ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ 📂 aprsd-stock-plugin │ Ham Radio APRSD Plugin for fetching stock quotes │ 0.1.3 │ Dec 2, 2022 │ No │
│ 📂 aprsd-sentry-plugin │ Ham radio APRSD plugin that does.... │ 0.1.2 │ Dec 2, 2022 │ No │
│ 📂 aprsd-timeopencage-plugin │ APRSD plugin for fetching time based on GPS location │ 0.1.0 │ Dec 2, 2022 │ No │
│ 📂 aprsd-weewx-plugin │ HAM Radio APRSD that reports weather from a weewx weather station. │ 0.1.4 │ Dec 7, 2021 │ Yes │
│ 📂 aprsd-repeat-plugins │ APRSD Plugins for the REPEAT service │ 1.0.12 │ Dec 2, 2022 │ No │
│ 📂 aprsd-telegram-plugin │ Ham Radio APRS APRSD plugin for Telegram IM service │ 0.1.3 │ Dec 2, 2022 │ No │
│ 📂 aprsd-twitter-plugin │ Python APRSD plugin to send tweets │ 0.3.0 │ Dec 7, 2021 │ No │
│ 📂 aprsd-slack-plugin │ Amateur radio APRS daemon which listens for messages and responds │ 1.0.5 │ Dec 18, 2022 │ No │
└──────────────────────────────┴────────────────────────────────────────────────────────────────────┴─────────┴──────────────┴────────────┘
🐍 APRSD Installed 3rd party Plugins 🐍
┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Package Name ┃ Plugin Name ┃ Version ┃ Type ┃ Plugin Path ┃
┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ aprsd-weewx-plugin │ WeewxMQTTPlugin │ 1.0 │ RegexCommand │ aprsd_weewx_plugin.weewx.WeewxMQTTPlugin │
└────────────────────┴─────────────────┴─────────┴──────────────┴──────────────────────────────────────────┘
Installation Installation
============= =============
@ -112,6 +69,7 @@ Help
==== ====
:: ::
└─> aprsd -h └─> aprsd -h
Usage: aprsd [OPTIONS] COMMAND [ARGS]... Usage: aprsd [OPTIONS] COMMAND [ARGS]...
@ -120,18 +78,19 @@ Help
-h, --help Show this message and exit. -h, --help Show this message and exit.
Commands: Commands:
check-version Check this version against the latest in pypi.org. check-version Check this version against the latest in pypi.org.
completion Click Completion subcommands completion Show the shell completion code
dev Development type subcommands dev Development type subcommands
healthcheck Check the health of the running aprsd server. fetch-stats Fetch stats from a APRSD admin web interface.
list-plugins List the built in plugins available to APRSD. healthcheck Check the health of the running aprsd server.
listen Listen to packets on the APRS-IS Network based on FILTER. list-extensions List the built in plugins available to APRSD.
sample-config Generate a sample Config file from aprsd and all... list-plugins List the built in plugins available to APRSD.
send-message Send a message to a callsign via APRS_IS. listen Listen to packets on the APRS-IS Network based on FILTER.
server Start the aprsd server gateway process. sample-config Generate a sample Config file from aprsd and all...
version Show the APRSD version. send-message Send a message to a callsign via APRS_IS.
webchat Web based HAM Radio chat program! server Start the aprsd server gateway process.
version Show the APRSD version.
webchat Web based HAM Radio chat program!
Commands Commands
@ -187,6 +146,56 @@ look for incomming commands to the callsign configured in the config file
12/07/2021 03:16:17 PM MainThread INFO aprs.logfile = /tmp/aprsd.log server.py:60 12/07/2021 03:16:17 PM MainThread INFO aprs.logfile = /tmp/aprsd.log server.py:60
Current list of built-in plugins
======================================
::
└─> aprsd list-plugins
🐍 APRSD Built-in Plugins 🐍
┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Plugin Name ┃ Info ┃ Type ┃ Plugin Path ┃
┡━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ AVWXWeatherPlugin │ AVWX weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.AVWXWeatherPlugin │
│ EmailPlugin │ Send and Receive email │ RegexCommand │ aprsd.plugins.email.EmailPlugin │
│ FortunePlugin │ Give me a fortune │ RegexCommand │ aprsd.plugins.fortune.FortunePlugin │
│ LocationPlugin │ Where in the world is a CALLSIGN's last GPS beacon? │ RegexCommand │ aprsd.plugins.location.LocationPlugin │
│ NotifySeenPlugin │ Notify me when a CALLSIGN is recently seen on APRS-IS │ WatchList │ aprsd.plugins.notify.NotifySeenPlugin │
│ OWMWeatherPlugin │ OpenWeatherMap weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.OWMWeatherPlugin │
│ PingPlugin │ reply with a Pong! │ RegexCommand │ aprsd.plugins.ping.PingPlugin │
│ QueryPlugin │ APRSD Owner command to query messages in the MsgTrack │ RegexCommand │ aprsd.plugins.query.QueryPlugin │
│ TimeOWMPlugin │ Current time of GPS beacon's timezone. Uses OpenWeatherMap │ RegexCommand │ aprsd.plugins.time.TimeOWMPlugin │
│ TimePlugin │ What is the current local time. │ RegexCommand │ aprsd.plugins.time.TimePlugin │
│ USMetarPlugin │ USA only METAR of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.USMetarPlugin │
│ USWeatherPlugin │ Provide USA only weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.USWeatherPlugin │
│ VersionPlugin │ What is the APRSD Version │ RegexCommand │ aprsd.plugins.version.VersionPlugin │
└───────────────────┴────────────────────────────────────────────────────────────┴──────────────┴─────────────────────────────────────────┘
Pypi.org APRSD Installable Plugin Packages
Install any of the following plugins with 'pip install <Plugin Package Name>'
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Plugin Package Name ┃ Description ┃ Version ┃ Released ┃ Installed? ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ 📂 aprsd-stock-plugin │ Ham Radio APRSD Plugin for fetching stock quotes │ 0.1.3 │ Dec 2, 2022 │ No │
│ 📂 aprsd-sentry-plugin │ Ham radio APRSD plugin that does.... │ 0.1.2 │ Dec 2, 2022 │ No │
│ 📂 aprsd-timeopencage-plugin │ APRSD plugin for fetching time based on GPS location │ 0.1.0 │ Dec 2, 2022 │ No │
│ 📂 aprsd-weewx-plugin │ HAM Radio APRSD that reports weather from a weewx weather station. │ 0.1.4 │ Dec 7, 2021 │ Yes │
│ 📂 aprsd-repeat-plugins │ APRSD Plugins for the REPEAT service │ 1.0.12 │ Dec 2, 2022 │ No │
│ 📂 aprsd-telegram-plugin │ Ham Radio APRS APRSD plugin for Telegram IM service │ 0.1.3 │ Dec 2, 2022 │ No │
│ 📂 aprsd-twitter-plugin │ Python APRSD plugin to send tweets │ 0.3.0 │ Dec 7, 2021 │ No │
│ 📂 aprsd-slack-plugin │ Amateur radio APRS daemon which listens for messages and responds │ 1.0.5 │ Dec 18, 2022 │ No │
└──────────────────────────────┴────────────────────────────────────────────────────────────────────┴─────────┴──────────────┴────────────┘
🐍 APRSD Installed 3rd party Plugins 🐍
┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Package Name ┃ Plugin Name ┃ Version ┃ Type ┃ Plugin Path ┃
┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ aprsd-weewx-plugin │ WeewxMQTTPlugin │ 1.0 │ RegexCommand │ aprsd_weewx_plugin.weewx.WeewxMQTTPlugin │
└────────────────────┴─────────────────┴─────────┴──────────────┴──────────────────────────────────────────┘
send-message send-message
@ -289,6 +298,20 @@ LOCATION
AND... ping, fortune, time..... AND... ping, fortune, time.....
Web Admin Interface
===================
To start the web admin interface, You have to install gunicorn in your virtualenv that already has aprsd installed.
::
source <path to APRSD's virtualenv>/bin/activate
pip install gunicorn
gunicorn --bind 0.0.0.0:8080 "aprsd.wsgi:app"
The web admin interface will be running on port 8080 on the local machine. http://localhost:8080
Development Development
=========== ===========

View File

@ -18,3 +18,6 @@ wheel
# but it induces an install of cryptography # but it induces an install of cryptography
# This is sucky for rpi systems. # This is sucky for rpi systems.
# twine # twine
# m2r is for converting .md files to .rst for the docs
m2r

View File

@ -4,212 +4,82 @@
# #
# pip-compile --annotation-style=line requirements-dev.in # pip-compile --annotation-style=line requirements-dev.in
# #
add-trailing-comma==3.1.0 add-trailing-comma==3.1.0 # via gray
# via gray alabaster==1.0.0 # via sphinx
alabaster==0.7.16 autoflake==1.5.3 # via gray
# via sphinx babel==2.16.0 # via sphinx
autoflake==1.5.3 black==24.8.0 # via gray
# via gray build==1.2.2 # via -r requirements-dev.in, check-manifest, pip-tools
babel==2.15.0 cachetools==5.5.0 # via tox
# via sphinx certifi==2024.8.30 # via requests
black==24.4.2 cfgv==3.4.0 # via pre-commit
# via gray chardet==5.2.0 # via tox
build==1.2.1 charset-normalizer==3.3.2 # via requests
# via check-manifest==0.49 # via -r requirements-dev.in
# -r requirements-dev.in click==8.1.7 # via black, fixit, moreorless, pip-tools
# check-manifest colorama==0.4.6 # via tox
# pip-tools commonmark==0.9.1 # via rich
cachetools==5.3.3 configargparse==1.7 # via gray
# via tox coverage[toml]==7.6.1 # via pytest-cov
certifi==2024.7.4 distlib==0.3.8 # via virtualenv
# via requests docutils==0.21.2 # via m2r, sphinx
cfgv==3.4.0 exceptiongroup==1.2.2 # via pytest
# via pre-commit filelock==3.16.0 # via tox, virtualenv
chardet==5.2.0 fixit==2.1.0 # via gray
# via tox flake8==7.1.1 # via -r requirements-dev.in, pep8-naming
charset-normalizer==3.3.2 gray==0.15.0 # via -r requirements-dev.in
# via requests identify==2.6.1 # via pre-commit
check-manifest==0.49 idna==3.10 # via requests
# via -r requirements-dev.in imagesize==1.4.1 # via sphinx
click==8.1.7 iniconfig==2.0.0 # via pytest
# via isort==5.13.2 # via -r requirements-dev.in, gray
# black jinja2==3.1.4 # via sphinx
# fixit libcst==1.4.0 # via fixit
# moreorless m2r==0.3.1 # via -r requirements-dev.in
# pip-tools markupsafe==2.1.5 # via jinja2
colorama==0.4.6 mccabe==0.7.0 # via flake8
# via tox mistune==0.8.4 # via m2r
commonmark==0.9.1 moreorless==0.4.0 # via fixit
# via rich mypy==1.11.2 # via -r requirements-dev.in
configargparse==1.7 mypy-extensions==1.0.0 # via black, mypy
# via gray nodeenv==1.9.1 # via pre-commit
coverage[toml]==7.5.1 packaging==24.1 # via black, build, fixit, pyproject-api, pytest, sphinx, tox
# via pytest-cov pathspec==0.12.1 # via black, trailrunner
distlib==0.3.8 pep8-naming==0.14.1 # via -r requirements-dev.in
# via virtualenv pip-tools==7.4.1 # via -r requirements-dev.in
docutils==0.21.2 platformdirs==4.3.3 # via black, tox, virtualenv
# via sphinx pluggy==1.5.0 # via pytest, tox
exceptiongroup==1.2.1 pre-commit==3.8.0 # via -r requirements-dev.in
# via pytest pycodestyle==2.12.1 # via flake8
filelock==3.14.0 pyflakes==3.2.0 # via autoflake, flake8
# via pygments==2.18.0 # via rich, sphinx
# tox pyproject-api==1.7.1 # via tox
# virtualenv pyproject-hooks==1.1.0 # via build, pip-tools
fixit==2.1.0 pytest==8.3.3 # via -r requirements-dev.in, pytest-cov
# via gray pytest-cov==5.0.0 # via -r requirements-dev.in
flake8==7.0.0 pyupgrade==3.17.0 # via gray
# via pyyaml==6.0.2 # via libcst, pre-commit
# -r requirements-dev.in requests==2.32.3 # via sphinx
# pep8-naming rich==12.6.0 # via gray
gray==0.15.0 snowballstemmer==2.2.0 # via sphinx
# via -r requirements-dev.in sphinx==8.0.2 # via -r requirements-dev.in
identify==2.5.36 sphinxcontrib-applehelp==2.0.0 # via sphinx
# via pre-commit sphinxcontrib-devhelp==2.0.0 # via sphinx
idna==3.7 sphinxcontrib-htmlhelp==2.1.0 # via sphinx
# via requests sphinxcontrib-jsmath==1.0.1 # via sphinx
imagesize==1.4.1 sphinxcontrib-qthelp==2.0.0 # via sphinx
# via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx
iniconfig==2.0.0 tokenize-rt==6.0.0 # via add-trailing-comma, pyupgrade
# via pytest toml==0.10.2 # via autoflake
isort==5.13.2 tomli==2.0.1 # via black, build, check-manifest, coverage, fixit, mypy, pip-tools, pyproject-api, pytest, sphinx, tox
# via tox==4.18.1 # via -r requirements-dev.in
# -r requirements-dev.in trailrunner==1.4.0 # via fixit
# gray typing-extensions==4.12.2 # via black, mypy
jinja2==3.1.4 unify==0.5 # via gray
# via sphinx untokenize==0.1.1 # via unify
libcst==1.3.1 urllib3==2.2.3 # via requests
# via fixit virtualenv==20.26.4 # via pre-commit, tox
markupsafe==2.1.5 wheel==0.44.0 # via -r requirements-dev.in, pip-tools
# via jinja2
mccabe==0.7.0
# via flake8
moreorless==0.4.0
# via fixit
mypy==1.10.0
# via -r requirements-dev.in
mypy-extensions==1.0.0
# via
# black
# mypy
nodeenv==1.8.0
# via pre-commit
packaging==24.0
# via
# black
# build
# fixit
# pyproject-api
# pytest
# sphinx
# tox
pathspec==0.12.1
# via
# black
# trailrunner
pep8-naming==0.14.1
# via -r requirements-dev.in
pip-tools==7.4.1
# via -r requirements-dev.in
platformdirs==4.2.2
# via
# black
# tox
# virtualenv
pluggy==1.5.0
# via
# pytest
# tox
pre-commit==3.7.1
# via -r requirements-dev.in
pycodestyle==2.11.1
# via flake8
pyflakes==3.2.0
# via
# autoflake
# flake8
pygments==2.18.0
# via
# rich
# sphinx
pyproject-api==1.6.1
# via tox
pyproject-hooks==1.1.0
# via
# build
# pip-tools
pytest==8.2.0
# via
# -r requirements-dev.in
# pytest-cov
pytest-cov==5.0.0
# via -r requirements-dev.in
pyupgrade==3.15.2
# via gray
pyyaml==6.0.1
# via
# libcst
# pre-commit
requests==2.32.0
# via sphinx
rich==12.6.0
# via gray
snowballstemmer==2.2.0
# via sphinx
sphinx==7.3.7
# via -r requirements-dev.in
sphinxcontrib-applehelp==1.0.8
# via sphinx
sphinxcontrib-devhelp==1.0.6
# via sphinx
sphinxcontrib-htmlhelp==2.0.5
# via sphinx
sphinxcontrib-jsmath==1.0.1
# via sphinx
sphinxcontrib-qthelp==1.0.7
# via sphinx
sphinxcontrib-serializinghtml==1.1.10
# via sphinx
tokenize-rt==5.2.0
# via
# add-trailing-comma
# pyupgrade
toml==0.10.2
# via autoflake
tomli==2.0.1
# via
# black
# build
# check-manifest
# coverage
# fixit
# mypy
# pip-tools
# pyproject-api
# pytest
# sphinx
# tox
tox==4.15.0
# via -r requirements-dev.in
trailrunner==1.4.0
# via fixit
typing-extensions==4.11.0
# via
# black
# mypy
unify==0.5
# via gray
untokenize==0.1.1
# via unify
urllib3==2.2.2
# via requests
virtualenv==20.26.2
# via
# pre-commit
# tox
wheel==0.43.0
# via
# -r requirements-dev.in
# pip-tools
# The following packages are considered to be unsafe in a requirements file: # The following packages are considered to be unsafe in a requirements file:
# pip # pip

View File

@ -4,179 +4,78 @@
# #
# pip-compile --annotation-style=line requirements.in # pip-compile --annotation-style=line requirements.in
# #
aprslib==0.7.2 aprslib==0.7.2 # via -r requirements.in
# via -r requirements.in attrs==24.2.0 # via ax253, kiss3, rush
attrs==23.2.0 ax253==0.1.5.post1 # via kiss3
# via beautifulsoup4==4.12.3 # via -r requirements.in
# ax253 bidict==0.23.1 # via python-socketio
# kiss3 bitarray==2.9.2 # via ax253, kiss3
# rush blinker==1.8.2 # via flask
ax253==0.1.5.post1 certifi==2024.8.30 # via requests
# via kiss3 charset-normalizer==3.3.2 # via requests
beautifulsoup4==4.12.3 click==8.1.7 # via -r requirements.in, click-params, flask
# via -r requirements.in click-params==0.5.0 # via -r requirements.in
bidict==0.23.1 commonmark==0.9.1 # via rich
# via python-socketio dataclasses==0.6 # via -r requirements.in
bitarray==2.9.2 dataclasses-json==0.6.7 # via -r requirements.in
# via debtcollector==3.0.0 # via oslo-config
# ax253 deprecated==1.2.14 # via click-params
# kiss3 dnspython==2.6.1 # via eventlet
blinker==1.8.2 eventlet==0.37.0 # via -r requirements.in
# via flask flask==3.0.3 # via -r requirements.in, flask-httpauth, flask-socketio
certifi==2024.7.4 flask-httpauth==4.8.0 # via -r requirements.in
# via requests flask-socketio==5.3.7 # via -r requirements.in
charset-normalizer==3.3.2 geographiclib==2.0 # via geopy
# via requests geopy==2.4.1 # via -r requirements.in
click==8.1.7 gevent==24.2.1 # via -r requirements.in
# via greenlet==3.1.0 # via eventlet, gevent
# -r requirements.in h11==0.14.0 # via wsproto
# click-params idna==3.10 # via requests
# flask imapclient==3.0.1 # via -r requirements.in
click-params==0.5.0 importlib-metadata==8.5.0 # via ax253, kiss3
# via -r requirements.in itsdangerous==2.2.0 # via flask
commonmark==0.9.1 jinja2==3.1.4 # via flask
# via rich kiss3==8.0.0 # via -r requirements.in
dataclasses==0.6 loguru==0.7.2 # via -r requirements.in
# via -r requirements.in markupsafe==2.1.5 # via jinja2, werkzeug
dataclasses-json==0.6.6 marshmallow==3.22.0 # via dataclasses-json
# via -r requirements.in mypy-extensions==1.0.0 # via typing-inspect
debtcollector==3.0.0 netaddr==1.3.0 # via oslo-config
# via oslo-config oslo-config==9.6.0 # via -r requirements.in
deprecated==1.2.14 oslo-i18n==6.4.0 # via oslo-config
# via click-params packaging==24.1 # via marshmallow
dnspython==2.6.1 pbr==6.1.0 # via oslo-i18n, stevedore
# via eventlet pluggy==1.5.0 # via -r requirements.in
eventlet==0.36.1 pygments==2.18.0 # via rich
# via -r requirements.in pyserial==3.5 # via pyserial-asyncio
flask==3.0.3 pyserial-asyncio==0.6 # via kiss3
# via python-engineio==4.9.1 # via python-socketio
# -r requirements.in python-socketio==5.11.4 # via -r requirements.in, flask-socketio
# flask-httpauth pytz==2024.2 # via -r requirements.in
# flask-socketio pyyaml==6.0.2 # via -r requirements.in, oslo-config
flask-httpauth==4.8.0 requests==2.32.3 # via -r requirements.in, oslo-config, update-checker
# via -r requirements.in rfc3986==2.0.0 # via oslo-config
flask-socketio==5.3.6 rich==12.6.0 # via -r requirements.in
# via -r requirements.in rush==2021.4.0 # via -r requirements.in
geographiclib==2.0 shellingham==1.5.4 # via -r requirements.in
# via geopy simple-websocket==1.0.0 # via python-engineio
geopy==2.4.1 six==1.16.0 # via -r requirements.in
# via -r requirements.in soupsieve==2.6 # via beautifulsoup4
gevent==24.2.1 stevedore==5.3.0 # via oslo-config
# via -r requirements.in tabulate==0.9.0 # via -r requirements.in
greenlet==3.0.3 thesmuggler==1.0.1 # via -r requirements.in
# via typing-extensions==4.12.2 # via typing-inspect
# eventlet typing-inspect==0.9.0 # via dataclasses-json
# gevent tzlocal==5.2 # via -r requirements.in
h11==0.14.0 update-checker==0.18.0 # via -r requirements.in
# via wsproto urllib3==2.2.3 # via requests
idna==3.7 validators==0.22.0 # via click-params
# via requests werkzeug==3.0.4 # via flask
imapclient==3.0.1 wrapt==1.16.0 # via -r requirements.in, debtcollector, deprecated
# via -r requirements.in wsproto==1.2.0 # via simple-websocket
importlib-metadata==7.1.0 zipp==3.20.2 # via importlib-metadata
# via zope-event==5.0 # via gevent
# ax253 zope-interface==7.0.3 # via gevent
# kiss3
itsdangerous==2.2.0
# via flask
jinja2==3.1.4
# via flask
kiss3==8.0.0
# via -r requirements.in
loguru==0.7.2
# via -r requirements.in
markupsafe==2.1.5
# via
# jinja2
# werkzeug
marshmallow==3.21.2
# via dataclasses-json
mypy-extensions==1.0.0
# via typing-inspect
netaddr==1.2.1
# via oslo-config
oslo-config==9.4.0
# via -r requirements.in
oslo-i18n==6.3.0
# via oslo-config
packaging==24.0
# via marshmallow
pbr==6.0.0
# via
# oslo-i18n
# stevedore
pluggy==1.5.0
# via -r requirements.in
pygments==2.18.0
# via rich
pyserial==3.5
# via pyserial-asyncio
pyserial-asyncio==0.6
# via kiss3
python-engineio==4.9.0
# via python-socketio
python-socketio==5.11.2
# via
# -r requirements.in
# flask-socketio
pytz==2024.1
# via -r requirements.in
pyyaml==6.0.1
# via
# -r requirements.in
# oslo-config
requests==2.32.0
# via
# -r requirements.in
# oslo-config
# update-checker
rfc3986==2.0.0
# via oslo-config
rich==12.6.0
# via -r requirements.in
rush==2021.4.0
# via -r requirements.in
shellingham==1.5.4
# via -r requirements.in
simple-websocket==1.0.0
# via python-engineio
six==1.16.0
# via -r requirements.in
soupsieve==2.5
# via beautifulsoup4
stevedore==5.2.0
# via oslo-config
tabulate==0.9.0
# via -r requirements.in
thesmuggler==1.0.1
# via -r requirements.in
typing-extensions==4.11.0
# via typing-inspect
typing-inspect==0.9.0
# via dataclasses-json
tzlocal==5.2
# via -r requirements.in
update-checker==0.18.0
# via -r requirements.in
urllib3==2.2.2
# via requests
validators==0.22.0
# via click-params
werkzeug==3.0.3
# via flask
wrapt==1.16.0
# via
# -r requirements.in
# debtcollector
# deprecated
wsproto==1.2.0
# via simple-websocket
zipp==3.19.1
# via importlib-metadata
zope-event==5.0
# via gevent
zope-interface==6.4
# via gevent
# The following packages are considered to be unsafe in a requirements file: # The following packages are considered to be unsafe in a requirements file:
# setuptools # setuptools

View File

@ -2,7 +2,7 @@
minversion = 2.9.0 minversion = 2.9.0
skipdist = True skipdist = True
skip_missing_interpreters = true skip_missing_interpreters = true
envlist = pep8,py{39,310} envlist = pep8,py{310}
#requires = tox-pipenv #requires = tox-pipenv
# pip==22.0.4 # pip==22.0.4
# pip-tools==5.4.0 # pip-tools==5.4.0