WORK IN PROGRESS example instance of openaps This is kind of a kitchen sink show case/demonstration of openaps capabilities. See the history for a complete accounting of the commands used.
The new process
vendor:
Let's say you have a node
js script called iob.js
:
openaps device add calciob process --require input node iob.js
Which says: create a device implemented by openaps vendor
process
, called calciob
which runs the script
node iob.js
and has one argument, we'll refer to as input
Then
openaps use --format text calciob shell pump-history.json
or
similar can be used to try it out.
bewest@hither:~/Documents/foo$
$ openaps use --format text calciob shell pump-history.json
{"iob":1.4710394611199997,"activity":0.04893333333333332}
bewest@hither:~/Documents/foo$
When comfy, save the report configuration with:
openaps report add iob.json text calciob shell pump-history.json
which says: create a report called iob.json
, which is the
usage of device calciob
, usage shell
, (which is running
node iob.js
) with the argument pump-history.json
... Since this
node script happens to always print json, we're using the text
output
to save it as-is:
$ openaps report invoke iob.json
calciob://text/shell/iob.json
reporting iob.json
After configuring some devices and custom vendors,
this is what my openaps use
menu looks like now:
$ openaps use -h
usage: openaps-use [-h] [--format {text,json,base,stdout}] [--output OUTPUT]
[--version]
{agp,calciob,cgm,pump} ...
openaps-use - use a registered device
positional arguments:
{agp,calciob,cgm,pump}
Operation
agp AGP - calculate agp values given some glucose text
calciob process - a fake vendor to run arbitrary commands
cgm Dexcom - openaps driver for dexcom
pump Medtronic - openaps driver for Medtronic
Four devices in the menu, all of them support -h
output:
$ openaps use calciob -h
usage: openaps-use calciob [-h] {shell} ...
positional arguments:
{shell} Operation
shell run a process in a subshell
optional arguments:
-h, --help show this help message and exit
We can see that the input
argument is also expected.
$ openaps use calciob shell -h
usage: openaps-use calciob shell [-h] input
positional arguments:
input
optional arguments:
-h, --help show this help message and exit
See agp plugin by @mgranberry, and my agp openaps plugin version
Once it's a subclass of openaps.uses.use.Use
, openaps can use it:
$ openaps vendor -h
usage: openaps-vendor [-h] {add,remove,show} ...
openaps-vendor - Manage vendor plugins.
positional arguments:
{add,remove,show} Operation
add Add a new vendor plugin to openaps-environment.
remove Remove vendor plugin from openaps-environment
show Show/list vendor plugins
optional arguments:
-h, --help show this help message and exit
show - lists all known vendors
add - add a new vendor
remove - remove a vendor
$ openaps vendor add -h
usage: openaps-vendor add [-h] [--path PATH] name
positional arguments:
name
optional arguments:
-h, --help show this help message and exit
--path PATH Path to module's namespace
It knows if it's not a python module, let's try adding a non-existant module to see if anything bad happens:
$ openaps vendor add not-a-real-module
No module named not-a-real-module
not-a-real-module doesn't seem to be an importable python module
If it is a python module, try using --path to influence
PYTHONPATH
agp.py
is a valid python module, let's add that:
$ ls agp.py
+ ls agp.py
agp.py
$ openaps vendor add agp
added agp://
Now it's available in the devices menu:
+ openaps device add -h
usage: openaps-device add [-h] name {dexcom,medtronic,process,agp} ...
positional arguments:
name
{dexcom,medtronic,process,agp}
Operation
dexcom Dexcom - openaps driver for dexcom
medtronic Medtronic - openaps driver for Medtronic
process process - a fake vendor to run arbitrary commands
agp AGP - calculate agp values given some glucose text
optional arguments:
-h, --help show this help message and exit
Adding a device:
+ openaps device add my-agp agp -h
usage: openaps-device add name agp [-h]
optional arguments:
-h, --help show this help message and exit
+ openaps device add my-agp agp
added agp://my-agp
This adds a device named my-agp
using the python module called
agp
.
Now we can use, use commands are derived from previously registered devices.
+ openaps use -h
usage: openaps-use [-h] [--format {text,json,base,stdout}] [--output OUTPUT]
[--version]
{agp,calciob,cgm,my-agp,pump} ...
openaps-use - use a registered device
positional arguments:
{agp,calciob,cgm,my-agp,pump}
Operation
agp AGP - calculate agp values given some glucose text
calciob process - a fake vendor to run arbitrary commands
cgm Dexcom - openaps driver for dexcom
my-agp AGP - calculate agp values given some glucose text
pump Medtronic - openaps driver for Medtronic
optional arguments:
-h, --help show this help message and exit
--format {text,json,base,stdout}
--output OUTPUT
--version show program's version number and exit
Once a device is registered in openaps.ini, it can be used.
Let's try the agp:
+ openaps use my-agp -h
usage: openaps-use my-agp [-h] {agp} ...
positional arguments:
{agp} Operation
agp Calculate agp
optional arguments:
-h, --help show this help message and exit
It even has it's own -h
help system.
+ openaps use my-agp agp -h
usage: openaps-use my-agp agp [-h] input
positional arguments:
input
optional arguments:
-h, --help show this help message and exit
Demonstrate usage:
+ openaps use --format text my-agp agp glucose.txt
[(0, (86, 121, 156, 222, 392)), (1, (39, 137, 155, 249, 318)), (2, (72, 124, 167, 247, 302)), (3, (97, 121, 168, 252, 339)), (4, (102, 143, 189, 241, 338)), (5, (103, 144, 171, 211, 327)), (6, (104, 157, 169, 204, 304)), (7, (103, 137, 185, 212, 302)), (8, (87, 95, 200, 252, 323)), (9, (74, 108, 195, 256, 278)), (10, (62, 103, 173, 241, 251)), (11, (100, 150, 171, 224, 250)), (12, (94, 132, 154, 194, 307)), (13, (76, 112, 141, 202, 248)), (14, (76, 100, 133, 180, 235)), (15, (77, 94, 121, 146, 197)), (16, (70, 78, 118, 150, 173)), (17, (61, 90, 114, 148, 163)), (18, (85, 93, 123, 152, 161)), (19, (65, 86, 121, 138, 199)), (20, (51, 67, 103, 117, 296)), (21, (39, 84, 99, 147, 289)), (22, (59, 83, 109, 165, 214)), (23, (87, 98, 131, 157, 304))]
This says, use device known as my-agp
, running the agp
use with the glucose.txt
as the input
argument. We're using
the text
formatter here to reduce the number of lines.