![]() |
||
---|---|---|
alembic | ||
config | ||
ogn | ||
tests | ||
.gitignore | ||
.travis.yml | ||
CHANGELOG.md | ||
CONTRIBUTORS | ||
LICENSE | ||
MANIFEST.in | ||
README.md | ||
alembic.ini | ||
manage.py | ||
requirements.txt | ||
setup.cfg | ||
setup.py |
README.md
ogn-python
[]
(https://travis-ci.org/glidernet/ogn-python)
[
]
(https://coveralls.io/r/glidernet/ogn-python)
[
]
(https://pypi.python.org/pypi/ogn-python)
A python module for the Open Glider Network. The submodule 'ogn.gateway' is an aprs client which could be invoked via a CLI or used by other python projects. The CLI allows to save all received beacons into a database with SQLAlchemy. The sqlite-backend is sufficient for simple testing, but some tasks (e.g. logbook generation) require a proper backend like postgresql. An external python project would instantiate ogn.gateway and register a custom callback, called each time a beacon is received.
Usage - python module
Implement your own gateway by using ogn.gateway with a custom callback function. Each time a beacon is received, this function gets called and lets you process the incoming data.
Example:
#!/usr/bin/env python3
from ogn.model import AircraftBeacon, ReceiverBeacon
from ogn.gateway.client import ognGateway
def process_beacon(beacon):
if type(beacon) is AircraftBeacon:
print('Received aircraft beacon from {}'.format(beacon.name))
elif type(beacon) is ReceiverBeacon:
print('Received receiver beacon from {}'.format(beacon.name))
if __name__ == '__main__':
gateway = ognGateway(aprs_user='N0CALL')
gateway.connect()
try:
gateway.run(callback=process_beacon, autoreconnect=True)
except KeyboardInterrupt:
print('\nStop ogn gateway')
gateway.disconnect()
Usage - CLI
Installation and Setup
-
Checkout the repository
git clone https://github.com/glidernet/ogn-python.git
-
Install python requirements
pip install -r requirements.txt
-
Install redis for asynchronous tasks (like takeoff/landing-detection)
apt-get install redis-server
-
Create database
./manage.py db.init
Running the aprs client and task server
To schedule tasks like takeoff/landing-detection (logbook.compute
),
Celery with Redis is used.
The following scripts run in the foreground and should be deamonized
(eg. use supervisord).
-
Start the aprs client
./manage.py gateway.run
-
Start a task server (make sure redis is up and running)
celery -A ogn.collect worker -l info
-
Start the task scheduler (make sure a task server is up and running)
celery -A ogn.collect beat -l info
To load a custom configuration, create a file myconfig.py
(see config/default.py)
and set the environment variable OGN_CONFIG_MODULE
accordingly.
touch myconfig.py
export OGN_CONFIG_MODULE="myconfig"
./manage.py gateway.run
manage.py - CLI options
usage: manage.py [<namespace>.]<command> [<args>]
positional arguments:
command the command to run
optional arguments:
-h, --help show this help message and exit
available commands:
[db]
drop Drop all tables.
import_ddb Import registered devices from the DDB.
import_file Import registered devices from a local file.
init Initialize the database.
upgrade Upgrade database to the latest version.
[gateway]
run Run the aprs client.
[logbook]
compute Compute takeoffs and landings.
show Show a logbook for <airport_name> located at given position.
[show.devices]
stats Show some stats on registered devices.
[show.receiver]
hardware_stats Show some statistics of receiver hardware.
list_all Show a list of all receivers.
software_stats Show some statistics of receiver software.
Only the command logbook.compute
requires a running task server (celery) at the moment.
Available tasks
ogn.collect.database.import_ddb
- Import registered devices from the ddbogn.collect.database.import_file
- Import registered devices from a local fileogn.collect.heatmap.update_beacon_receiver_distance_all
- Calculate the distance between aircraft and receiver for the last aircraft beaconsogn.collect.receiver.update_receivers
- Populate/update receiver table (requires postgresql-backend)ogn.collect.logbook.compute_takeoff_and_landing
- Generate TakeoffLanding table (requires postgresql-backend)
If the task server is up and running, tasks could be started manually.
python3
>>>from ogn.collect.database import import_ddb
>>>import_ddb.delay()
License
Licensed under the AGPLv3.