aprsd 3.4.4__py3-none-any.whl → 4.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aprsd/cli_helper.py +12 -5
- aprsd/client/aprsis.py +31 -9
- aprsd/client/base.py +13 -2
- aprsd/client/drivers/aprsis.py +6 -3
- aprsd/client/drivers/fake.py +15 -20
- aprsd/client/factory.py +0 -2
- aprsd/client/fake.py +0 -2
- aprsd/client/kiss.py +17 -2
- aprsd/client/stats.py +1 -3
- aprsd/cmds/completion.py +7 -4
- aprsd/cmds/dev.py +38 -42
- aprsd/cmds/fetch_stats.py +140 -143
- aprsd/cmds/healthcheck.py +5 -3
- aprsd/cmds/list_plugins.py +140 -134
- aprsd/cmds/listen.py +13 -9
- aprsd/cmds/server.py +53 -27
- aprsd/conf/__init__.py +1 -2
- aprsd/conf/client.py +3 -4
- aprsd/conf/common.py +19 -93
- aprsd/conf/log.py +2 -4
- aprsd/conf/opts.py +5 -4
- aprsd/conf/plugin_common.py +11 -121
- aprsd/exception.py +2 -0
- aprsd/log/log.py +7 -46
- aprsd/main.py +10 -4
- aprsd/packets/__init__.py +14 -4
- aprsd/packets/core.py +57 -67
- aprsd/packets/log.py +8 -8
- aprsd/packets/packet_list.py +9 -6
- aprsd/plugin.py +22 -11
- aprsd/plugins/notify.py +1 -4
- aprsd/plugins/weather.py +10 -8
- aprsd/stats/collector.py +5 -2
- aprsd/threads/__init__.py +3 -2
- aprsd/threads/aprsd.py +12 -7
- aprsd/threads/{keep_alive.py → keepalive.py} +14 -45
- aprsd/threads/registry.py +3 -3
- aprsd/threads/rx.py +9 -6
- aprsd/threads/stats.py +2 -2
- aprsd/threads/tx.py +3 -4
- aprsd/utils/__init__.py +42 -10
- aprsd/utils/json.py +9 -4
- aprsd/utils/keepalive_collector.py +55 -0
- aprsd/utils/trace.py +0 -2
- aprsd-4.0.1.dist-info/AUTHORS +1 -0
- {aprsd-3.4.4.dist-info → aprsd-4.0.1.dist-info}/METADATA +307 -408
- aprsd-4.0.1.dist-info/RECORD +74 -0
- {aprsd-3.4.4.dist-info → aprsd-4.0.1.dist-info}/WHEEL +1 -1
- aprsd/cmds/admin.py +0 -57
- aprsd/cmds/webchat.py +0 -662
- aprsd/conf/plugin_email.py +0 -105
- aprsd/plugins/email.py +0 -715
- aprsd/plugins/location.py +0 -181
- aprsd/threads/log_monitor.py +0 -121
- aprsd/web/__init__.py +0 -0
- aprsd/web/admin/__init__.py +0 -0
- aprsd/web/admin/static/css/index.css +0 -84
- aprsd/web/admin/static/css/prism.css +0 -4
- aprsd/web/admin/static/css/tabs.css +0 -35
- aprsd/web/admin/static/images/Untitled.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-16-0.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-16-1.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-64-0.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-64-1.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-64-2.png +0 -0
- aprsd/web/admin/static/js/charts.js +0 -235
- aprsd/web/admin/static/js/echarts.js +0 -465
- aprsd/web/admin/static/js/logs.js +0 -26
- aprsd/web/admin/static/js/main.js +0 -231
- aprsd/web/admin/static/js/prism.js +0 -12
- aprsd/web/admin/static/js/send-message.js +0 -114
- aprsd/web/admin/static/js/tabs.js +0 -28
- aprsd/web/admin/templates/index.html +0 -196
- aprsd/web/chat/static/css/chat.css +0 -115
- aprsd/web/chat/static/css/index.css +0 -66
- aprsd/web/chat/static/css/style.css.map +0 -1
- aprsd/web/chat/static/css/tabs.css +0 -41
- aprsd/web/chat/static/css/upstream/bootstrap.min.css +0 -6
- aprsd/web/chat/static/css/upstream/font.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/google-fonts.css +0 -23
- aprsd/web/chat/static/css/upstream/jquery-ui.css +0 -1311
- aprsd/web/chat/static/css/upstream/jquery.toast.css +0 -28
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff2 +0 -0
- aprsd/web/chat/static/images/Untitled.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-16-0.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-16-1.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-64-0.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-64-1.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-64-2.png +0 -0
- aprsd/web/chat/static/images/globe.svg +0 -3
- aprsd/web/chat/static/js/gps.js +0 -84
- aprsd/web/chat/static/js/main.js +0 -45
- aprsd/web/chat/static/js/send-message.js +0 -612
- aprsd/web/chat/static/js/tabs.js +0 -28
- aprsd/web/chat/static/js/upstream/bootstrap.bundle.min.js +0 -7
- aprsd/web/chat/static/js/upstream/jquery-3.7.1.min.js +0 -2
- aprsd/web/chat/static/js/upstream/jquery-ui.min.js +0 -13
- aprsd/web/chat/static/js/upstream/jquery.toast.js +0 -374
- aprsd/web/chat/static/js/upstream/semantic.min.js +0 -11
- aprsd/web/chat/static/js/upstream/socket.io.min.js +0 -7
- aprsd/web/chat/templates/index.html +0 -139
- aprsd/wsgi.py +0 -322
- aprsd-3.4.4.dist-info/AUTHORS +0 -13
- aprsd-3.4.4.dist-info/RECORD +0 -134
- {aprsd-3.4.4.dist-info → aprsd-4.0.1.dist-info}/LICENSE +0 -0
- {aprsd-3.4.4.dist-info → aprsd-4.0.1.dist-info}/entry_points.txt +0 -0
- {aprsd-3.4.4.dist-info → aprsd-4.0.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.2
|
2
2
|
Name: aprsd
|
3
|
-
Version:
|
3
|
+
Version: 4.0.1
|
4
4
|
Summary: APRSd is a APRS-IS server that can be used to connect to APRS-IS and send and receive APRS packets.
|
5
5
|
Author-email: Craig Lamparter <craig@craiger.org>, "Walter A. Boring IV" <waboring@hemna.com>, Emre Saglam <emresaglam@gmail.com>, Jason Martin <jhmartin@toger.us>, John <johng42@users.noreply.github.com>, Martiros Shakhzadyan <vrzh@vrzh.net>, Zoe Moore <zoenb@mailbox.org>, ranguli <hello@joshmurphy.ca>
|
6
6
|
Maintainer-email: Craig Lamparter <craig@craiger.org>, "Walter A. Boring IV" <waboring@hemna.com>
|
@@ -197,40 +197,26 @@ Classifier: Programming Language :: Python :: 3.8
|
|
197
197
|
Classifier: Programming Language :: Python :: 3.9
|
198
198
|
Classifier: Programming Language :: Python :: 3.10
|
199
199
|
Classifier: Programming Language :: Python :: 3.11
|
200
|
-
Requires-Python: >=3.
|
201
|
-
Description-Content-Type: text/
|
200
|
+
Requires-Python: >=3.10
|
201
|
+
Description-Content-Type: text/markdown
|
202
202
|
License-File: LICENSE
|
203
203
|
License-File: AUTHORS
|
204
204
|
Requires-Dist: aprslib==0.7.2
|
205
|
-
Requires-Dist: attrs==24.
|
205
|
+
Requires-Dist: attrs==24.3.0
|
206
206
|
Requires-Dist: ax253==0.1.5.post1
|
207
|
-
Requires-Dist: beautifulsoup4==4.12.3
|
208
|
-
Requires-Dist: bidict==0.23.1
|
209
207
|
Requires-Dist: bitarray==3.0.0
|
210
|
-
Requires-Dist:
|
211
|
-
Requires-Dist:
|
212
|
-
Requires-Dist:
|
213
|
-
Requires-Dist: click==8.1.7
|
214
|
-
Requires-Dist: click-params==0.5.0
|
208
|
+
Requires-Dist: certifi==2024.12.14
|
209
|
+
Requires-Dist: charset-normalizer==3.4.1
|
210
|
+
Requires-Dist: click==8.1.8
|
215
211
|
Requires-Dist: commonmark==0.9.1
|
216
212
|
Requires-Dist: dataclasses-json==0.6.7
|
217
213
|
Requires-Dist: debtcollector==3.0.0
|
218
|
-
Requires-Dist:
|
219
|
-
Requires-Dist: flask==3.1.0
|
220
|
-
Requires-Dist: flask-httpauth==4.8.0
|
221
|
-
Requires-Dist: flask-socketio==5.4.1
|
222
|
-
Requires-Dist: geographiclib==2.0
|
223
|
-
Requires-Dist: geopy==2.4.1
|
224
|
-
Requires-Dist: h11==0.14.0
|
214
|
+
Requires-Dist: haversine==2.9.0
|
225
215
|
Requires-Dist: idna==3.10
|
226
|
-
Requires-Dist:
|
227
|
-
Requires-Dist: importlib-metadata==8.5.0
|
228
|
-
Requires-Dist: itsdangerous==2.2.0
|
229
|
-
Requires-Dist: jinja2==3.1.4
|
216
|
+
Requires-Dist: importlib-metadata==8.6.1
|
230
217
|
Requires-Dist: kiss3==8.0.0
|
231
|
-
Requires-Dist: loguru==0.7.
|
232
|
-
Requires-Dist:
|
233
|
-
Requires-Dist: marshmallow==3.23.1
|
218
|
+
Requires-Dist: loguru==0.7.3
|
219
|
+
Requires-Dist: marshmallow==3.26.0
|
234
220
|
Requires-Dist: mypy-extensions==1.0.0
|
235
221
|
Requires-Dist: netaddr==1.3.0
|
236
222
|
Requires-Dist: oslo-config==9.7.0
|
@@ -238,93 +224,59 @@ Requires-Dist: oslo-i18n==6.5.0
|
|
238
224
|
Requires-Dist: packaging==24.2
|
239
225
|
Requires-Dist: pbr==6.1.0
|
240
226
|
Requires-Dist: pluggy==1.5.0
|
241
|
-
Requires-Dist: pygments==2.
|
227
|
+
Requires-Dist: pygments==2.19.1
|
242
228
|
Requires-Dist: pyserial==3.5
|
243
229
|
Requires-Dist: pyserial-asyncio==0.6
|
244
|
-
Requires-Dist: python-engineio==4.10.1
|
245
|
-
Requires-Dist: python-socketio==5.11.4
|
246
230
|
Requires-Dist: pytz==2024.2
|
247
231
|
Requires-Dist: pyyaml==6.0.2
|
248
232
|
Requires-Dist: requests==2.32.3
|
249
233
|
Requires-Dist: rfc3986==2.0.0
|
250
234
|
Requires-Dist: rich==12.6.0
|
251
235
|
Requires-Dist: rush==2021.4.0
|
252
|
-
Requires-Dist: shellingham==1.5.4
|
253
|
-
Requires-Dist: simple-websocket==1.1.0
|
254
|
-
Requires-Dist: six==1.16.0
|
255
|
-
Requires-Dist: soupsieve==2.6
|
256
236
|
Requires-Dist: stevedore==5.4.0
|
257
|
-
Requires-Dist: tabulate==0.9.0
|
258
237
|
Requires-Dist: thesmuggler==1.0.1
|
259
238
|
Requires-Dist: timeago==1.0.16
|
260
239
|
Requires-Dist: typing-extensions==4.12.2
|
261
240
|
Requires-Dist: typing-inspect==0.9.0
|
262
241
|
Requires-Dist: tzlocal==5.2
|
263
242
|
Requires-Dist: update-checker==0.18.0
|
264
|
-
Requires-Dist: urllib3==2.
|
265
|
-
Requires-Dist:
|
266
|
-
Requires-Dist: werkzeug==3.1.3
|
267
|
-
Requires-Dist: wrapt==1.17.0
|
268
|
-
Requires-Dist: wsproto==1.2.0
|
243
|
+
Requires-Dist: urllib3==2.3.0
|
244
|
+
Requires-Dist: wrapt==1.17.2
|
269
245
|
Requires-Dist: zipp==3.21.0
|
270
246
|
Provides-Extra: dev
|
271
|
-
Requires-Dist: add-trailing-comma==3.1.0; extra == "dev"
|
272
247
|
Requires-Dist: alabaster==1.0.0; extra == "dev"
|
273
|
-
Requires-Dist: autoflake==1.5.3; extra == "dev"
|
274
248
|
Requires-Dist: babel==2.16.0; extra == "dev"
|
275
|
-
Requires-Dist: black==24.10.0; extra == "dev"
|
276
249
|
Requires-Dist: build==1.2.2.post1; extra == "dev"
|
277
|
-
Requires-Dist: cachetools==5.5.
|
278
|
-
Requires-Dist: certifi==2024.
|
250
|
+
Requires-Dist: cachetools==5.5.1; extra == "dev"
|
251
|
+
Requires-Dist: certifi==2024.12.14; extra == "dev"
|
279
252
|
Requires-Dist: cfgv==3.4.0; extra == "dev"
|
280
253
|
Requires-Dist: chardet==5.2.0; extra == "dev"
|
281
|
-
Requires-Dist: charset-normalizer==3.4.
|
282
|
-
Requires-Dist:
|
283
|
-
Requires-Dist: click==8.1.7; extra == "dev"
|
254
|
+
Requires-Dist: charset-normalizer==3.4.1; extra == "dev"
|
255
|
+
Requires-Dist: click==8.1.8; extra == "dev"
|
284
256
|
Requires-Dist: colorama==0.4.6; extra == "dev"
|
285
|
-
Requires-Dist: commonmark==0.9.1; extra == "dev"
|
286
|
-
Requires-Dist: configargparse==1.7; extra == "dev"
|
287
|
-
Requires-Dist: coverage[toml]==7.6.8; extra == "dev"
|
288
257
|
Requires-Dist: distlib==0.3.9; extra == "dev"
|
289
258
|
Requires-Dist: docutils==0.21.2; extra == "dev"
|
290
|
-
Requires-Dist:
|
291
|
-
Requires-Dist:
|
292
|
-
Requires-Dist: fixit==2.1.0; extra == "dev"
|
293
|
-
Requires-Dist: flake8==7.1.1; extra == "dev"
|
294
|
-
Requires-Dist: gray==0.15.0; extra == "dev"
|
295
|
-
Requires-Dist: identify==2.6.3; extra == "dev"
|
259
|
+
Requires-Dist: filelock==3.17.0; extra == "dev"
|
260
|
+
Requires-Dist: identify==2.6.6; extra == "dev"
|
296
261
|
Requires-Dist: idna==3.10; extra == "dev"
|
297
262
|
Requires-Dist: imagesize==1.4.1; extra == "dev"
|
298
|
-
Requires-Dist:
|
299
|
-
Requires-Dist: isort==5.13.2; extra == "dev"
|
300
|
-
Requires-Dist: jinja2==3.1.4; extra == "dev"
|
301
|
-
Requires-Dist: libcst==1.5.1; extra == "dev"
|
263
|
+
Requires-Dist: jinja2==3.1.5; extra == "dev"
|
302
264
|
Requires-Dist: m2r==0.3.1; extra == "dev"
|
303
265
|
Requires-Dist: markupsafe==3.0.2; extra == "dev"
|
304
|
-
Requires-Dist: mccabe==0.7.0; extra == "dev"
|
305
266
|
Requires-Dist: mistune==0.8.4; extra == "dev"
|
306
|
-
Requires-Dist: moreorless==0.4.0; extra == "dev"
|
307
|
-
Requires-Dist: mypy==1.13.0; extra == "dev"
|
308
|
-
Requires-Dist: mypy-extensions==1.0.0; extra == "dev"
|
309
267
|
Requires-Dist: nodeenv==1.9.1; extra == "dev"
|
310
268
|
Requires-Dist: packaging==24.2; extra == "dev"
|
311
|
-
Requires-Dist:
|
312
|
-
Requires-Dist: pep8-naming==0.14.1; extra == "dev"
|
269
|
+
Requires-Dist: pip==24.3.1; extra == "dev"
|
313
270
|
Requires-Dist: pip-tools==7.4.1; extra == "dev"
|
314
271
|
Requires-Dist: platformdirs==4.3.6; extra == "dev"
|
315
272
|
Requires-Dist: pluggy==1.5.0; extra == "dev"
|
316
|
-
Requires-Dist: pre-commit==4.0
|
317
|
-
Requires-Dist:
|
318
|
-
Requires-Dist:
|
319
|
-
Requires-Dist: pygments==2.18.0; extra == "dev"
|
320
|
-
Requires-Dist: pyproject-api==1.8.0; extra == "dev"
|
273
|
+
Requires-Dist: pre-commit==4.1.0; extra == "dev"
|
274
|
+
Requires-Dist: pygments==2.19.1; extra == "dev"
|
275
|
+
Requires-Dist: pyproject-api==1.9.0; extra == "dev"
|
321
276
|
Requires-Dist: pyproject-hooks==1.2.0; extra == "dev"
|
322
|
-
Requires-Dist: pytest==8.3.4; extra == "dev"
|
323
|
-
Requires-Dist: pytest-cov==6.0.0; extra == "dev"
|
324
|
-
Requires-Dist: pyupgrade==3.19.0; extra == "dev"
|
325
277
|
Requires-Dist: pyyaml==6.0.2; extra == "dev"
|
326
278
|
Requires-Dist: requests==2.32.3; extra == "dev"
|
327
|
-
Requires-Dist:
|
279
|
+
Requires-Dist: setuptools==75.8.0; extra == "dev"
|
328
280
|
Requires-Dist: snowballstemmer==2.2.0; extra == "dev"
|
329
281
|
Requires-Dist: sphinx==8.1.3; extra == "dev"
|
330
282
|
Requires-Dist: sphinxcontrib-applehelp==2.0.0; extra == "dev"
|
@@ -333,120 +285,164 @@ Requires-Dist: sphinxcontrib-htmlhelp==2.1.0; extra == "dev"
|
|
333
285
|
Requires-Dist: sphinxcontrib-jsmath==1.0.1; extra == "dev"
|
334
286
|
Requires-Dist: sphinxcontrib-qthelp==2.0.0; extra == "dev"
|
335
287
|
Requires-Dist: sphinxcontrib-serializinghtml==2.0.0; extra == "dev"
|
336
|
-
Requires-Dist: tokenize-rt==6.1.0; extra == "dev"
|
337
|
-
Requires-Dist: toml==0.10.2; extra == "dev"
|
338
288
|
Requires-Dist: tomli==2.2.1; extra == "dev"
|
339
|
-
Requires-Dist: tox==4.
|
340
|
-
Requires-Dist: trailrunner==1.4.0; extra == "dev"
|
289
|
+
Requires-Dist: tox==4.24.1; extra == "dev"
|
341
290
|
Requires-Dist: typing-extensions==4.12.2; extra == "dev"
|
342
|
-
Requires-Dist:
|
343
|
-
Requires-Dist:
|
344
|
-
Requires-Dist: urllib3==2.2.3; extra == "dev"
|
345
|
-
Requires-Dist: virtualenv==20.28.0; extra == "dev"
|
291
|
+
Requires-Dist: urllib3==2.3.0; extra == "dev"
|
292
|
+
Requires-Dist: virtualenv==20.29.1; extra == "dev"
|
346
293
|
Requires-Dist: wheel==0.45.1; extra == "dev"
|
347
294
|
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
295
|
+
# APRSD - Ham radio APRS-IS Message platform software
|
296
|
+
|
297
|
+
## KM6LYW and WB4BOR
|
298
|
+
|
299
|
+
[](https://badge.fury.io/py/aprsd)
|
300
|
+
[](https://pypi.org/pypi/aprsd)
|
301
|
+
[](https://hemna.slack.com/app_redirect?channel=C01KQSCP5RP)
|
302
|
+

|
303
|
+

|
304
|
+
[](https://timothycrosley.github.io/isort/)
|
305
|
+
[](https://pepy.tech/project/aprsd)
|
306
|
+
|
307
|
+
[APRSD](http://github.com/craigerl/aprsd) is a Ham radio
|
308
|
+
[APRS](http://aprs.org) message platform built with python.
|
309
|
+
|
310
|
+

|
311
|
+
|
312
|
+
# Table of Contents
|
313
|
+
|
314
|
+
1. [APRSD - Ham radio APRS-IS Message platform software](#aprsd---ham-radio-aprs-is-message-platform-software)
|
315
|
+
2. [What is APRSD](#what-is-aprsd)
|
316
|
+
3. [APRSD Plugins/Extensions](#aprsd-pluginsextensions)
|
317
|
+
4. [List of existing plugins - APRS Message processing/responders](#list-of-existing-plugins---aprs-message-processingresponders)
|
318
|
+
5. [List of existing extensions - Add new capabilities to APRSD](#list-of-existing-extensions---add-new-capabilities-to-aprsd)
|
319
|
+
6. [APRSD Overview Diagram](#aprsd-overview-diagram)
|
320
|
+
7. [Typical use case](#typical-use-case)
|
321
|
+
8. [Installation](#installation)
|
322
|
+
9. [Example usage](#example-usage)
|
323
|
+
10. [Help](#help)
|
324
|
+
11. [Commands](#commands)
|
325
|
+
12. [Configuration](#configuration)
|
326
|
+
13. [server](#server)
|
327
|
+
14. [Current list plugins](#current-list-plugins)
|
328
|
+
15. [Current list extensions](#current-list-extensions)
|
329
|
+
16. [send-message](#send-message)
|
330
|
+
17. [Development](#development)
|
331
|
+
18. [Release](#release)
|
332
|
+
19. [Building your own APRSD plugins](#building-your-own-aprsd-plugins)
|
333
|
+
20. [Overview](#overview)
|
334
|
+
21. [Docker Container](#docker-container)
|
335
|
+
22. [Building](#building)
|
336
|
+
23. [Official Build](#official-build)
|
337
|
+
24. [Development Build](#development-build)
|
338
|
+
25. [Running the container](#running-the-container)
|
339
|
+
26. [Activity](#activity)
|
340
|
+
27. [Star History](#star-history)
|
341
|
+
|
342
|
+
---
|
343
|
+
|
344
|
+
> [!WARNING]
|
345
|
+
> Legal operation of this software requires an amateur radio license and a valid call sign.
|
346
|
+
|
347
|
+
> [!NOTE]
|
348
|
+
> Star this repo to follow our progress! This code is under active development, and contributions are both welcomed and appreciated. See [CONTRIBUTING.md](<https://github.com/craigerl/aprsd/blob/master/CONTRIBUTING.md>) for details.
|
349
|
+
|
350
|
+
### What is APRSD
|
351
|
+
|
352
|
+
APRSD is a python application for interacting with the APRS network and Ham radios with KISS interfaces and
|
353
|
+
providing APRS services for HAM radio operators.
|
396
354
|
|
397
355
|
APRSD currently has 4 main commands to use.
|
398
|
-
* server - Connect to APRS and listen/respond to APRS messages
|
399
|
-
* webchat - web based chat program over APRS
|
400
|
-
* send-message - Send a message to a callsign via APRS_IS.
|
401
|
-
* listen - Listen to packets on the APRS-IS Network based on FILTER.
|
402
356
|
|
403
|
-
|
404
|
-
|
405
|
-
to
|
357
|
+
- server - Connect to APRS and listen/respond to APRS messages
|
358
|
+
- send-message - Send a message to a callsign via APRS_IS.
|
359
|
+
- listen - Listen to packets on the APRS-IS Network based on FILTER.
|
360
|
+
- check-version - check the version of aprsd
|
361
|
+
- sample-config - generate a sample config file
|
362
|
+
- dev - helpful for testing new aprsd plugins under development
|
363
|
+
- dump-stats - output the stats of a running aprsd server command
|
364
|
+
- list-plugins - list the built in plugins, available plugins on pypi.org and installed plugins
|
365
|
+
- list-extensions - list the available extensions on pypi.org and installed extensions
|
406
366
|
|
407
|
-
|
367
|
+
Each of those commands can connect to the APRS-IS network if internet
|
368
|
+
connectivity is available. If internet is not available, then APRS can
|
369
|
+
be configured to talk to a TCP KISS TNC for radio connectivity directly.
|
408
370
|
|
409
|
-
|
410
|
-
======================
|
371
|
+
Please [read the docs](https://aprsd.readthedocs.io) to learn more!
|
411
372
|
|
412
|
-
.. image:: https://raw.githubusercontent.com/craigerl/aprsd/master/docs/_static/aprsd_overview.svg?sanitize=true
|
413
373
|
|
414
|
-
|
415
|
-
================
|
374
|
+
### APRSD Plugins/Extensions
|
416
375
|
|
417
|
-
APRSD
|
418
|
-
radio operators. For example the callsign 'REPEAT' on the APRS network is actually
|
419
|
-
an instance of APRSD that can provide a list of HAM repeaters in the area of the
|
420
|
-
callsign that sent the message.
|
376
|
+
APRSD Has the ability to add plugins and extensions. Plugins add new message filters that can look for specific messages and respond. For example, the aprsd-email-plugin adds the ability to send/recieve email to/from an APRS callsign. Extensions add new unique capabilities to APRSD itself. For example the aprsd-admin-extension adds a web interface command that shows the running status of the aprsd server command. aprsd-webchat-extension is a new web based APRS 'chat' command.
|
421
377
|
|
378
|
+
You can see the [available plugins/extensions on pypi here:](https://pypi.org/search/?q=aprsd) [https://pypi.org/search/?q=aprsd](https://pypi.org/search/?q=aprsd)
|
422
379
|
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
for processing. For example, the WeatherPlugin picks up the message, fetches the weather
|
427
|
-
for the area around the user who sent the request, and then responds with
|
428
|
-
the weather conditions in that area. Also includes a watch list of HAM
|
429
|
-
callsigns to look out for. The watch list can notify you when a HAM callsign
|
430
|
-
in the list is seen and now available to message on the APRS network.
|
380
|
+
> [!NOTE]
|
381
|
+
> aprsd admin and webchat commands have been extracted into separate extensions.
|
382
|
+
* [See admin extension here](https://github.com/hemna/aprsd-admin-extension) <div id="admin logo" align="left"><img src="https://raw.githubusercontent.com/hemna/aprsd-admin-extension/refs/heads/master/screenshot.png" alt="Web Admin" width="340"/></div>
|
431
383
|
|
384
|
+
* [See webchat extension here](https://github.com/hemna/aprsd-webchat-extension) <div id="webchat logo" align="left"><img src="https://raw.githubusercontent.com/hemna/aprsd-webchat-extension/master/screenshot.png" alt="Webchat" width="340"/></div>
|
432
385
|
|
433
386
|
|
434
|
-
|
435
|
-
=============
|
387
|
+
### List of existing plugins - APRS Message processing/responders
|
436
388
|
|
437
|
-
|
389
|
+
- [aprsd-email-plugin](https://github.com/hemna/aprsd-email-plugin) - send/receive email!
|
390
|
+
- [aprsd-location-plugin](https://github.com/hemna/aprsd-location-plugin) - get latest GPS location.
|
391
|
+
- [aprsd-locationdata-plugin](https://github.com/hemna/aprsd-locationdata-plugin) - get latest GPS location
|
392
|
+
- [aprsd-digipi-plugin](https://github.com/hemna/aprsd-digipi-plugin) - Look for digipi beacon packets
|
393
|
+
- [aprsd-w3w-plugin](https://github.com/hemna/aprsd-w3w-plugin) - get your w3w coordinates
|
394
|
+
- [aprsd-mqtt-plugin](https://github.com/hemna/aprsd-mqtt-plugin) - send aprs packets to an MQTT topic
|
395
|
+
- [aprsd-telegram-plugin](https://github.com/hemna/aprsd-telegram-plugin) - send/receive messages to telegram
|
396
|
+
- [aprsd-borat-plugin](https://github.com/hemna/aprsd-borat-plugin) - get Borat quotes
|
397
|
+
- [aprsd-wxnow-plugin](https://github.com/hemna/aprsd-wxnow-plugin) - get closest N weather station reports
|
398
|
+
- [aprsd-weewx-plugin](https://github.com/hemna/aprsd-weewx-plugin) - get weather from your weewx weather station
|
399
|
+
- [aprsd-slack-plugin](https://github.com/hemna/aprsd-slack-plugin) - send/receive messages to a slack channel
|
400
|
+
- [aprsd-sentry-plugin](https://github.com/hemna/aprsd-sentry-plugin) -
|
401
|
+
- [aprsd-repeat-plugins](https://github.com/hemna/aprsd-repeat-plugins) - plugins for the REPEAT service. Get nearest Ham radio repeaters!
|
402
|
+
- [aprsd-twitter-plugin](https://github.com/hemna/aprsd-twitter-plugin) - make tweets from your Ham Radio!
|
403
|
+
- [aprsd-timeopencage-plugin](https://github.com/hemna/aprsd-timeopencage-plugin) - Get local time for a callsign
|
404
|
+
- [aprsd-stock-plugin](https://github.com/hemna/aprsd-stock-plugin) - get stock quotes from your Ham radio
|
438
405
|
|
439
|
-
|
406
|
+
### List of existing extensions - Add new capabilities to APRSD
|
440
407
|
|
441
|
-
|
442
|
-
|
408
|
+
- [aprsd-admin-extension](https://github.com/hemna/aprsd-admin-extension) - Web Administration page for APRSD
|
409
|
+
- [aprsd-webchat-extension](https://github.com/hemna/aprsd-webchat-extension) - Web page for APRS Messaging
|
410
|
+
- [aprsd-irc-extension](https://github.com/hemna/aprsd-irc-extension) - an IRC like server command for APRS
|
443
411
|
|
444
|
-
|
412
|
+
### APRSD Overview Diagram
|
445
413
|
|
446
|
-
|
447
|
-
====
|
448
|
-
::
|
414
|
+

|
449
415
|
|
416
|
+
### Typical use case
|
417
|
+
|
418
|
+
APRSD\'s typical use case is that of providing an APRS wide service to
|
419
|
+
all HAM radio operators. For example the callsign \'REPEAT\' on the APRS
|
420
|
+
network is actually an instance of APRSD that can provide a list of HAM
|
421
|
+
repeaters in the area of the callsign that sent the message.
|
422
|
+
|
423
|
+
Ham radio operator using an APRS enabled HAM radio sends a message to
|
424
|
+
check the weather. An APRS message is sent, and then picked up by APRSD.
|
425
|
+
The APRS packet is decoded, and the message is sent through the list of
|
426
|
+
plugins for processing. For example, the WeatherPlugin picks up the
|
427
|
+
message, fetches the weather for the area around the user who sent the
|
428
|
+
request, and then responds with the weather conditions in that area.
|
429
|
+
Also includes a watch list of HAM callsigns to look out for. The watch
|
430
|
+
list can notify you when a HAM callsign in the list is seen and now
|
431
|
+
available to message on the APRS network.
|
432
|
+
|
433
|
+
### Installation
|
434
|
+
|
435
|
+
To install `aprsd`, use Pip:
|
436
|
+
|
437
|
+
`pip install aprsd`
|
438
|
+
|
439
|
+
### Example usage
|
440
|
+
|
441
|
+
`aprsd -h`
|
442
|
+
|
443
|
+
### Help
|
444
|
+
|
445
|
+
:
|
450
446
|
|
451
447
|
└─> aprsd -h
|
452
448
|
Usage: aprsd [OPTIONS] COMMAND [ARGS]...
|
@@ -468,31 +464,25 @@ Help
|
|
468
464
|
send-message Send a message to a callsign via APRS_IS.
|
469
465
|
server Start the aprsd server gateway process.
|
470
466
|
version Show the APRSD version.
|
471
|
-
webchat Web based HAM Radio chat program!
|
472
467
|
|
468
|
+
### Commands
|
473
469
|
|
474
|
-
|
475
|
-
========
|
470
|
+
### Configuration
|
476
471
|
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
and use to pass in to ``aprsd`` with ``-c``. By default aprsd looks in ``~/.config/aprsd/aprsd.yml``
|
472
|
+
This command outputs a sample config yml formatted block that you can
|
473
|
+
edit and use to pass in to `aprsd` with `-c`. By default aprsd looks in
|
474
|
+
`~/.config/aprsd/aprsd.yml`
|
481
475
|
|
482
|
-
|
483
|
-
|
484
|
-
::
|
476
|
+
`aprsd sample-config`
|
485
477
|
|
486
478
|
└─> aprsd sample-config
|
487
479
|
...
|
488
480
|
|
489
|
-
server
|
490
|
-
======
|
481
|
+
### server
|
491
482
|
|
492
483
|
This is the main server command that will listen to APRS-IS servers and
|
493
|
-
look for incomming commands to the callsign configured in the config
|
494
|
-
|
495
|
-
::
|
484
|
+
look for incomming commands to the callsign configured in the config
|
485
|
+
file
|
496
486
|
|
497
487
|
└─[$] > aprsd server --help
|
498
488
|
Usage: aprsd server [OPTIONS]
|
@@ -512,35 +502,32 @@ look for incomming commands to the callsign configured in the config file
|
|
512
502
|
-h, --help Show this message and exit.
|
513
503
|
|
514
504
|
└─> aprsd server
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
505
|
+
Registering LogMonitorThread
|
506
|
+
2025-01-06 16:27:12.398 | MainThread | INFO | APRSD is up to date | aprsd.cmds.server:server:82
|
507
|
+
2025-01-06 16:27:12.398 | MainThread | INFO | APRSD Started version: 3.5.1.dev0+g72d068c.d20250102 | aprsd.cmds.server:server:83
|
508
|
+
2025-01-06 16:27:12.398 | MainThread | INFO | Creating client connection | aprsd.cmds.server:server:101
|
509
|
+
2025-01-06 16:27:12.398 | MainThread | INFO | Creating aprslib client(noam.aprs2.net:14580) and logging in WB4BOR-1. | aprsd.client.aprsis:setup_connection:136
|
510
|
+
2025-01-06 16:27:12.398 | MainThread | INFO | Attempting connection to noam.aprs2.net:14580 | aprslib.inet:_connect:226
|
511
|
+
2025-01-06 16:27:12.473 | MainThread | INFO | Connected to ('44.135.208.225', 14580) | aprslib.inet:_connect:233
|
512
|
+
2025-01-06 16:27:12.617 | MainThread | INFO | Login successful | aprsd.client.drivers.aprsis:_send_login:154
|
513
|
+
2025-01-06 16:27:12.618 | MainThread | INFO | Connected to T2BC | aprsd.client.drivers.aprsis:_send_login:156
|
514
|
+
2025-01-06 16:27:12.618 | MainThread | INFO | <aprsd.client.aprsis.APRSISClient object at 0x103a36480> | aprsd.cmds.server:server:103
|
515
|
+
2025-01-06 16:27:12.618 | MainThread | INFO | Loading Plugin Manager and registering plugins | aprsd.cmds.server:server:117
|
516
|
+
2025-01-06 16:27:12.619 | MainThread | INFO | Loading APRSD Plugins | aprsd.plugin:setup_plugins:492
|
517
|
+
|
518
|
+
|
519
|
+
#### Current list plugins
|
530
520
|
|
531
521
|
└─> aprsd list-plugins
|
532
|
-
|
522
|
+
🐍 APRSD Built-in Plugins 🐍
|
533
523
|
┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
534
524
|
┃ Plugin Name ┃ Info ┃ Type ┃ Plugin Path ┃
|
535
525
|
┡━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
536
526
|
│ AVWXWeatherPlugin │ AVWX weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.AVWXWeatherPlugin │
|
537
|
-
│ EmailPlugin │ Send and Receive email │ RegexCommand │ aprsd.plugins.email.EmailPlugin │
|
538
527
|
│ FortunePlugin │ Give me a fortune │ RegexCommand │ aprsd.plugins.fortune.FortunePlugin │
|
539
|
-
│ LocationPlugin │ Where in the world is a CALLSIGN's last GPS beacon? │ RegexCommand │ aprsd.plugins.location.LocationPlugin │
|
540
528
|
│ NotifySeenPlugin │ Notify me when a CALLSIGN is recently seen on APRS-IS │ WatchList │ aprsd.plugins.notify.NotifySeenPlugin │
|
541
529
|
│ OWMWeatherPlugin │ OpenWeatherMap weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.OWMWeatherPlugin │
|
542
530
|
│ PingPlugin │ reply with a Pong! │ RegexCommand │ aprsd.plugins.ping.PingPlugin │
|
543
|
-
│ QueryPlugin │ APRSD Owner command to query messages in the MsgTrack │ RegexCommand │ aprsd.plugins.query.QueryPlugin │
|
544
531
|
│ TimeOWMPlugin │ Current time of GPS beacon's timezone. Uses OpenWeatherMap │ RegexCommand │ aprsd.plugins.time.TimeOWMPlugin │
|
545
532
|
│ TimePlugin │ What is the current local time. │ RegexCommand │ aprsd.plugins.time.TimePlugin │
|
546
533
|
│ USMetarPlugin │ USA only METAR of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.USMetarPlugin │
|
@@ -551,37 +538,59 @@ Current list of built-in plugins
|
|
551
538
|
|
552
539
|
Pypi.org APRSD Installable Plugin Packages
|
553
540
|
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
│ 📂 aprsd-
|
560
|
-
│
|
561
|
-
│ 📂 aprsd-
|
562
|
-
│ 📂 aprsd-
|
563
|
-
│ 📂 aprsd-
|
564
|
-
│ 📂 aprsd-
|
565
|
-
│ 📂 aprsd-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
541
|
+
Install any of the following plugins with
|
542
|
+
'pip install <Plugin Package Name>'
|
543
|
+
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
|
544
|
+
┃ Plugin Package Name ┃ Description ┃ Version ┃ Released ┃ Installed? ┃
|
545
|
+
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
|
546
|
+
│ 📂 aprsd-assistant-plugin │ APRSd plugin for hosting the APRS Assistant chatbot │ 0.0.3 │ 2024-10-20T02:59:39 │ No │
|
547
|
+
│ │ (aprs-assistant) │ │ │ │
|
548
|
+
│ 📂 aprsd-borat-plugin │ Borat quotes for aprsd plugin │ 0.1.1.dev1 │ 2024-01-19T16:04:38 │ No │
|
549
|
+
│ 📂 aprsd-locationdata-plugin │ Fetch location information from a callsign │ 0.3.0 │ 2024-02-06T17:20:43 │ No │
|
550
|
+
│ 📂 aprsd-mqtt-plugin │ APRSD MQTT Plugin sends APRS packets to mqtt queue │ 0.2.0 │ 2023-04-17T16:01:50 │ No │
|
551
|
+
│ 📂 aprsd-repeat-plugins │ APRSD Plugins for the REPEAT service │ 1.2.0 │ 2023-01-10T17:15:36 │ No │
|
552
|
+
│ 📂 aprsd-sentry-plugin │ Ham radio APRSD plugin that does.... │ 0.1.2 │ 2022-12-02T19:07:33 │ No │
|
553
|
+
│ 📂 aprsd-slack-plugin │ Amateur radio APRS daemon which listens for messages and │ 1.2.0 │ 2023-01-10T19:21:33 │ No │
|
554
|
+
│ │ responds │ │ │ │
|
555
|
+
│ 📂 aprsd-stock-plugin │ Ham Radio APRSD Plugin for fetching stock quotes │ 0.1.3 │ 2022-12-02T18:56:19 │ Yes │
|
556
|
+
│ 📂 aprsd-telegram-plugin │ Ham Radio APRS APRSD plugin for Telegram IM service │ 0.1.3 │ 2022-12-02T19:07:15 │ No │
|
557
|
+
│ 📂 aprsd-timeopencage-plugin │ APRSD plugin for fetching time based on GPS location │ 0.2.0 │ 2023-01-10T17:07:11 │ No │
|
558
|
+
│ 📂 aprsd-twitter-plugin │ Python APRSD plugin to send tweets │ 0.5.0 │ 2023-01-10T16:51:47 │ No │
|
559
|
+
│ 📂 aprsd-weewx-plugin │ HAM Radio APRSD that reports weather from a weewx weather │ 0.3.2 │ 2023-04-20T20:16:19 │ No │
|
560
|
+
│ │ station. │ │ │ │
|
561
|
+
│ 📂 aprsd-wxnow-plugin │ APRSD Plugin for getting the closest wx reports to last │ 0.2.0 │ 2023-10-08T01:27:29 │ Yes │
|
562
|
+
│ │ beacon │ │ │ │
|
563
|
+
└──────────────────────────────┴──────────────────────────────────────────────────────────────┴────────────┴─────────────────────┴────────────┘
|
564
|
+
|
565
|
+
|
566
|
+
🐍 APRSD Installed 3rd party Plugins 🐍
|
570
567
|
┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
571
568
|
┃ Package Name ┃ Plugin Name ┃ Version ┃ Type ┃ Plugin Path ┃
|
572
569
|
┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
573
|
-
│ aprsd-
|
570
|
+
│ aprsd-stock-plugin │ YahooStockQuote │ 0.1.3 │ RegexCommand │ aprsd_stock_plugin.stock.YahooStockQuote │
|
571
|
+
│ aprsd-wxnow-plugin │ WXNowPlugin │ 0.2.0 │ RegexCommand │ aprsd_wxnow_plugin.conf.opts.WXNowPlugin │
|
574
572
|
└────────────────────┴─────────────────┴─────────┴──────────────┴──────────────────────────────────────────┘
|
575
573
|
|
574
|
+
#### Current list extensions
|
575
|
+
└─> aprsd list-extensions
|
576
|
+
|
576
577
|
|
578
|
+
Pypi.org APRSD Installable Extension Packages
|
577
579
|
|
578
|
-
|
579
|
-
|
580
|
+
Install any of the following extensions by running
|
581
|
+
'pip install <Plugin Package Name>'
|
582
|
+
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
|
583
|
+
┃ Extension Package Name ┃ Description ┃ Version ┃ Released ┃ Installed? ┃
|
584
|
+
┡━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
|
585
|
+
│ 📂 aprsd-admin-extension │ Administration extension for the Ham radio APRSD Server │ 1.0.1 │ 2025-01-06T21:57:24 │ Yes │
|
586
|
+
│ 📂 aprsd-irc-extension │ An Extension to Ham radio APRSD Daemon to act like an irc server │ 0.0.5 │ 2024-04-09T11:28:47 │ No │
|
587
|
+
│ │ for APRS │ │ │ │
|
588
|
+
└──────────────────────────┴─────────────────────────────────────────────────────────────────────┴─────────┴─────────────────────┴────────────┘
|
580
589
|
|
581
|
-
|
582
|
-
test messages
|
590
|
+
### send-message
|
583
591
|
|
584
|
-
|
592
|
+
This command is typically used for development to send another aprsd
|
593
|
+
instance test messages
|
585
594
|
|
586
595
|
└─[$] > aprsd send-message -h
|
587
596
|
Usage: aprsd send-message [OPTIONS] TOCALLSIGN COMMAND...
|
@@ -607,243 +616,133 @@ test messages
|
|
607
616
|
--raw TEXT Send a raw message. Implies --no-ack
|
608
617
|
-h, --help Show this message and exit.
|
609
618
|
|
619
|
+
### Development
|
610
620
|
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
::
|
615
|
-
|
616
|
-
Received message______________
|
617
|
-
Raw : KM6XXX>APY400,WIDE1-1,qAO,KM6XXX-1::KM6XXX-9 :-user@host.com test new shortcuts global, radio to pc{29
|
618
|
-
From : KM6XXX
|
619
|
-
Message : -user@host.com test new shortcuts global, radio to pc
|
620
|
-
Msg number : 29
|
621
|
-
|
622
|
-
Sending Email_________________
|
623
|
-
To : user@host.com
|
624
|
-
Subject : KM6XXX
|
625
|
-
Body : test new shortcuts global, radio to pc
|
626
|
-
|
627
|
-
Sending ack __________________ Tx(3)
|
628
|
-
Raw : KM6XXX-9>APRS::KM6XXX :ack29
|
629
|
-
To : KM6XXX
|
630
|
-
Ack number : 29
|
631
|
-
|
632
|
-
|
633
|
-
RECEIVE EMAIL (imap server to radio)
|
634
|
-
====================================
|
635
|
-
|
636
|
-
::
|
637
|
-
|
638
|
-
Sending message_______________ 6(Tx3)
|
639
|
-
Raw : KM6XXX-9>APRS::KM6XXX :-somebody@gmail.com email from internet to radio{6
|
640
|
-
To : KM6XXX
|
641
|
-
Message : -somebody@gmail.com email from internet to radio
|
642
|
-
|
643
|
-
Received message______________
|
644
|
-
Raw : KM6XXX>APY400,WIDE1-1,qAO,KM6XXX-1::KM6XXX-9 :ack6
|
645
|
-
From : KM6XXX
|
646
|
-
Message : ack6
|
647
|
-
Msg number : 0
|
648
|
-
|
649
|
-
|
650
|
-
LOCATION
|
651
|
-
========
|
621
|
+
- `git clone git@github.com:craigerl/aprsd.git`
|
622
|
+
- `cd aprsd`
|
623
|
+
- `make`
|
652
624
|
|
653
|
-
|
654
|
-
|
655
|
-
Received Message _______________
|
656
|
-
Raw : KM6XXX-6>APRS,TCPIP*,qAC,T2CAEAST::KM6XXX-14:location{2
|
657
|
-
From : KM6XXX-6
|
658
|
-
Message : location
|
659
|
-
Msg number : 2
|
660
|
-
Received Message _______________ Complete
|
661
|
-
|
662
|
-
Sending Message _______________
|
663
|
-
Raw : KM6XXX-14>APRS::KM6XXX-6 :KM6XXX-6: 8 Miles E Auburn CA 0' 0,-120.93584 1873.7h ago{2
|
664
|
-
To : KM6XXX-6
|
665
|
-
Message : KM6XXX-6: 8 Miles E Auburn CA 0' 0,-120.93584 1873.7h ago
|
666
|
-
Msg number : 2
|
667
|
-
Sending Message _______________ Complete
|
668
|
-
|
669
|
-
Sending ack _______________
|
670
|
-
Raw : KM6XXX-14>APRS::KM6XXX-6 :ack2
|
671
|
-
To : KM6XXX-6
|
672
|
-
Ack : 2
|
673
|
-
Sending ack _______________ Complete
|
674
|
-
|
675
|
-
AND... ping, fortune, time.....
|
676
|
-
|
677
|
-
|
678
|
-
Web Admin Interface
|
679
|
-
===================
|
680
|
-
APRSD has a web admin interface that allows you to view the status of the running APRSD server instance.
|
681
|
-
The web admin interface shows graphs of packet counts, packet types, number of threads running, the latest
|
682
|
-
packets sent and received, and the status of each of the plugins that are loaded. You can also view the logfile
|
683
|
-
and view the raw APRSD configuration file.
|
684
|
-
|
685
|
-
To start the web admin interface, You have to install gunicorn in your virtualenv that already has aprsd installed.
|
686
|
-
|
687
|
-
::
|
688
|
-
|
689
|
-
source <path to APRSD's virtualenv>/bin/activate
|
690
|
-
aprsd admin --loglevel INFO
|
691
|
-
|
692
|
-
The web admin interface will be running on port 8080 on the local machine. http://localhost:8080
|
693
|
-
|
694
|
-
|
695
|
-
Development
|
696
|
-
===========
|
697
|
-
|
698
|
-
* ``git clone git@github.com:craigerl/aprsd.git``
|
699
|
-
* ``cd aprsd``
|
700
|
-
* ``make``
|
701
|
-
|
702
|
-
Workflow
|
703
|
-
--------
|
625
|
+
#### Workflow
|
704
626
|
|
705
627
|
While working aprsd, The workflow is as follows:
|
706
628
|
|
707
|
-
|
629
|
+
- Checkout a new branch to work on by running
|
708
630
|
|
709
|
-
|
631
|
+
`git checkout -b mybranch`
|
710
632
|
|
711
|
-
|
712
|
-
* Run Tox with the following options:
|
633
|
+
- Make your changes to the code
|
713
634
|
|
714
|
-
|
715
|
-
- ``tox -efmt``
|
716
|
-
- ``tox -p``
|
635
|
+
- Run Tox with the following options:
|
717
636
|
|
718
|
-
|
637
|
+
- `tox -epep8`
|
638
|
+
- `tox -efmt`
|
639
|
+
- `tox -p`
|
719
640
|
|
720
|
-
|
641
|
+
- Commit your changes. This will run the pre-commit hooks which does
|
642
|
+
checks too
|
721
643
|
|
722
|
-
|
723
|
-
github with:
|
644
|
+
`git commit`
|
724
645
|
|
725
|
-
|
646
|
+
- Once you are done with all of your commits, then push up the branch
|
647
|
+
to github with:
|
726
648
|
|
727
|
-
|
728
|
-
a code review.
|
649
|
+
`git push -u origin mybranch`
|
729
650
|
|
651
|
+
- Create a pull request from your branch so github tests can run and
|
652
|
+
we can do a code review.
|
730
653
|
|
731
|
-
Release
|
732
|
-
-------
|
654
|
+
#### Release
|
733
655
|
|
734
656
|
To do release to pypi:
|
735
657
|
|
736
|
-
|
658
|
+
- Tag release with:
|
737
659
|
|
738
|
-
|
660
|
+
`git tag -v1.XX -m "New release"`
|
739
661
|
|
740
|
-
|
662
|
+
- Push release tag:
|
741
663
|
|
742
|
-
|
664
|
+
`git push origin master --tags`
|
743
665
|
|
744
|
-
|
666
|
+
- Do a test build and verify build is valid by running:
|
745
667
|
|
746
|
-
|
668
|
+
`make build`
|
747
669
|
|
748
|
-
|
670
|
+
- Once twine is happy, upload release to pypi:
|
749
671
|
|
750
|
-
|
672
|
+
`make upload`
|
751
673
|
|
674
|
+
#### Building your own APRSD plugins
|
752
675
|
|
753
|
-
|
754
|
-
|
676
|
+
APRSD plugins are the mechanism by which APRSD can respond to APRS
|
677
|
+
Messages. The plugins are loaded at server startup and can also be
|
678
|
+
loaded at listen startup. When a packet is received by APRSD, it is
|
679
|
+
passed to each of the plugins in the order they were registered in the
|
680
|
+
config file. The plugins can then decide what to do with the packet.
|
681
|
+
When a plugin is called, it is passed a APRSD Packet object. The plugin
|
682
|
+
can then do something with the packet and return a reply message if
|
683
|
+
desired. If a plugin does not want to reply to the packet, it can just
|
684
|
+
return None. When a plugin does return a reply message, APRSD will send
|
685
|
+
the reply message to the appropriate destination.
|
755
686
|
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
return a reply message if desired. If a plugin does not want to reply to the packet, it can just return None.
|
761
|
-
When a plugin does return a reply message, APRSD will send the reply message to the appropriate destination.
|
687
|
+
For example, when a \'ping\' message is received, the PingPlugin will
|
688
|
+
return a reply message of \'pong\'. When APRSD receives the \'pong\'
|
689
|
+
message, it will be sent back to the original caller of the ping
|
690
|
+
message.
|
762
691
|
|
763
|
-
|
764
|
-
|
692
|
+
APRSD plugins are simply python packages that can be installed from
|
693
|
+
pypi.org. They are installed into the aprsd virtualenv and can be
|
694
|
+
imported by APRSD at runtime. The plugins are registered in the config
|
695
|
+
file and loaded at startup of the aprsd server command or the aprsd
|
696
|
+
listen command.
|
765
697
|
|
766
|
-
|
767
|
-
aprsd virtualenv and can be imported by APRSD at runtime. The plugins are registered in the config file and loaded
|
768
|
-
at startup of the aprsd server command or the aprsd listen command.
|
698
|
+
#### Overview
|
769
699
|
|
770
|
-
|
771
|
-
|
772
|
-
|
700
|
+
You can build your own plugins by following the instructions in the
|
701
|
+
[Building your own APRSD plugins](#building-your-own-aprsd-plugins)
|
702
|
+
section.
|
773
703
|
|
774
704
|
Plugins are called by APRSD when packe
|
775
705
|
|
776
|
-
Docker Container
|
777
|
-
================
|
706
|
+
### Docker Container
|
778
707
|
|
779
|
-
Building
|
780
|
-
========
|
708
|
+
### Building
|
781
709
|
|
782
|
-
There are 2 versions of the container Dockerfile that can be used.
|
783
|
-
|
710
|
+
There are 2 versions of the container Dockerfile that can be used. The
|
711
|
+
main Dockerfile, which is for building the official release container
|
784
712
|
based off of the pip install version of aprsd and the Dockerfile-dev,
|
785
|
-
which is used for building a container based off of a git branch of
|
786
|
-
|
787
|
-
|
788
|
-
Official Build
|
789
|
-
==============
|
713
|
+
which is used for building a container based off of a git branch of the
|
714
|
+
repo.
|
790
715
|
|
791
|
-
|
716
|
+
### Official Build
|
792
717
|
|
793
|
-
|
794
|
-
=================
|
718
|
+
`docker build -t hemna6969/aprsd:latest .`
|
795
719
|
|
796
|
-
|
720
|
+
### Development Build
|
797
721
|
|
722
|
+
`docker build -t hemna6969/aprsd:latest -f Dockerfile-dev .`
|
798
723
|
|
799
|
-
Running the container
|
800
|
-
=====================
|
724
|
+
### Running the container
|
801
725
|
|
802
|
-
There is a
|
803
|
-
|
804
|
-
|
805
|
-
``docker-compose.yml`` as shown below:
|
726
|
+
There is a `docker-compose.yml` file in the `docker/` directory that can
|
727
|
+
be used to run your container. To provide the container an `aprsd.conf`
|
728
|
+
configuration file, change your `docker-compose.yml` as shown below:
|
806
729
|
|
807
|
-
|
808
|
-
|
809
|
-
volumes:
|
810
|
-
- $HOME/.config/aprsd:/config
|
730
|
+
volumes:
|
731
|
+
- $HOME/.config/aprsd:/config
|
811
732
|
|
812
733
|
To install plugins at container start time, pass in a list of
|
813
|
-
comma-separated list of plugins on PyPI using the
|
814
|
-
environment variable in the
|
815
|
-
|
816
|
-
|
817
|
-
::
|
734
|
+
comma-separated list of plugins on PyPI using the `APRSD_PLUGINS`
|
735
|
+
environment variable in the `docker-compose.yml` file. Note that version
|
736
|
+
constraints may also be provided. For example:
|
818
737
|
|
819
738
|
environment:
|
820
739
|
- APRSD_PLUGINS=aprsd-slack-plugin>=1.0.2,aprsd-twitter-plugin
|
821
740
|
|
822
741
|
|
823
|
-
|
824
|
-
|
825
|
-
.. |pypi| image:: https://badge.fury.io/py/aprsd.svg
|
826
|
-
:target: https://badge.fury.io/py/aprsd
|
827
|
-
|
828
|
-
.. |pytest| image:: https://github.com/craigerl/aprsd/workflows/python/badge.svg
|
829
|
-
:target: https://github.com/craigerl/aprsd/actions
|
830
|
-
|
831
|
-
.. |versions| image:: https://img.shields.io/pypi/pyversions/aprsd.svg
|
832
|
-
:target: https://pypi.org/pypi/aprsd
|
833
|
-
|
834
|
-
.. |slack| image:: https://img.shields.io/badge/slack-@hemna/aprsd-blue.svg?logo=slack
|
835
|
-
:target: https://hemna.slack.com/app_redirect?channel=C01KQSCP5RP
|
836
|
-
|
837
|
-
.. |imports| image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
|
838
|
-
:target: https://timothycrosley.github.io/isort/
|
839
|
-
|
840
|
-
.. |issues| image:: https://img.shields.io/github/issues/craigerl/aprsd
|
742
|
+
### Activity
|
841
743
|
|
842
|
-
|
744
|
+

|
843
745
|
|
844
|
-
|
845
|
-
:target: https://pepy.tech/project/aprsd
|
746
|
+
## Star History
|
846
747
|
|
847
|
-
|
848
|
-
.. _read the docs:
|
849
|
-
https://aprsd.readthedocs.io
|
748
|
+
[](https://star-history.com/#craigerl/aprsd&Date)
|