JSON Configuration Format - heros-boss unknown documentation

Hide navigation sidebar
Hide table of contents sidebar
Skip to content
Back to top
View this page
Toggle table of contents sidebar

# JSON Configuration Format

This page describes the JSON configuration format for HERO devices. The JSON configuration can be provided as a single HERO config object or as a collection of HERO configs under the `rows` key.

## Single HERO Config

A single HERO config is a dictionary with the following keys:

    {
        "_id": "hero_name",
        "classname": "module.class",
        "arguments": {},
        "datasource": {}
    }

Key | Type | Description
--- | --- | ---
`_id` | string | Name of the HERO.
`classname` | string | Path to the device driver class in the form `module.class`.
`arguments` | dict | Dictionary of keyword-value pairs passed to the `__init__` function of the class specified in `classname`.
`datasource` (optional) | dict | Keyword-value pairs that describe a datasource (classes with the `observable_data` function).

## Special Arguments

    {
        "_id": "hero_name_1",
        "classname": "module.class",
        "arguments": {
            "loop": "@_boss_loop",
            "pool": "@_boss_pool"
        }
    }

### Event Loop

Using `@_boss_loop` as the value of the key/value pair in the `arguments` part of the configuration passes the `asyncio.EventLoop` which is running inside `BOSS`. Note, `asyncio` support in Zenoh is still in development and using the event loop might not behave as expected.

### Process Pool

Upon start, `BOSS` creates an `concurrent.futures.ProcessPoolExecutor`, this pool can be passed to the target class via `@_boss_pool`. The number of workers can be controlled via the parameter `--max-workers` when starting `BOSS`.

## Datasource Keys

The `datasource` dictionary supports the following keys:

Key | Type | Description
--- | --- | ---
`async` | bool | If `true`, the device class handles the `observable_data` event by itself. If `false`, the `observable_data` function is polled periodically.
`interval` | number | Polling interval in seconds.
`observable` | list | List of class attributes that are polled and emitted with the `observable_data` event.

## Multiple HERO Configs

To define multiple HERO configs, use the `rows` key:

    {
        "rows": [
            {
                "_id": "hero_name_1",
                "classname": "module.class",
                "arguments": {},
                "datasource": {}
            },
            {
                "_id": "hero_name_2",
                "classname": "module.class",
                "arguments": {},
                "datasource": {}
            }
        ]
    }

Warning

The `couchdb` API may enclose the HERO config dictionary in a `doc` keyword. This is handled automatically, so do not use `doc` as a top-level key in your configuration.

Tip

You may use additional keys for specific use cases, such as CouchDB views. For more information, see Using Views.