Skip to content

External device meta data #200

Open
Open
@bessman

Description

@bessman

Devices in pslab.external, such as sensors, motors, and displays, should include some kind of meta data so that front ends like pslab-desktop and pslab-cli can use them without large amounts of custom code.

One possible solution is a JSON file for every supported device, with a structure like this:

{
"name": "MLX90614",
"modes":
    {
    "thermometer":
        {
        "input": 
            {
            "name": "source",
            "type": "selection",
            "options": ["object", "ambient"],
            },
        "output": 
            {
            "name": "temperature",
            "type": "float", 
            "range": [-127, 128],
            "unit": "degC",
            },
        },
    },
}

This file specifies that the MLX90614 class has:

  • A single mode called "thermometer".
  • A set method which accepts "source" followed by either "object" or "ambient" as its argument.
  • A get method which accepts "temperature" and returns a float between -127 degC and 128 degC.

A more complex example:

{
"name": "BMP180",
"modes":
    {
    "thermometer":
        {
        "output": 
            {
            "name": "temperature",
            "type": "float", 
            "range": [-127, 128],
            "unit": "degC",
            },
        "default": 1,
        },
    "pressure meter":
        {
        "output": 
            {
            "name": "pressure",
            "type": "float", 
            "range": [0, 1e7],
            "unit": "Pa",
            },
        "default": 0,
        },
    "altitude meter":
        {
        "input":
            {
            "name": "baseline",
            "type": "float",
            "range": [0, 1e7],
            "unit": "Pa",
            },
        "output": 
            {
            "name": "altitude",
            "type": "float", 
            "range": [-1e2, 1e4],
            "unit": "m",
            },
        "default": 0,
        },
    },
}

This file specifies that the BMP180 class has:

  • Multiple modes, which can be selected by setting the BMP180.mode property, the default being "thermometer".
  • No setters in the "thermometer" or "pressure meter" modes.

By reading these files, the front end does not need to know any details about the sensors and requires no custom code. @orangecms what do you think?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions