Open bessman opened 3 years ago
Also Adafruit's drivers which uses CircuitPython-busio can be included with external sensors, since pslab-python has busio now.
Example:
# pslab/external/busio/si7021.py
import adafruit_si7021
from pslab.bus import busio
class SI7021(adafruit_si7021.SI7021):
_ADDRESS = 0x40
def __init__(self, **args):
self._ADDRESS = args.get('address', self._ADDRESS)
self._i2c = args.get('i2c_buss', busio.I2C())
super().__init__(self._i2c, self._ADDRESS)
{
"name": "SI7021",
"modes":
{
"thermometer":
{
"output":
{
"name": "temperature",
"type": "float",
"range": [-10, 85],
"unit": "degC",
},
"default": 1,
},
"moisture meter":
{
"output":
{
"name": "relative_humidity",
"type": "int",
"range": [0, 80],
"unit": "% RH",
},
"default": 0,
},
},
"dependencies" :
[
"adafruit-circuitpython-si7021",
],
}
We also need "dependencies" to check/install/manage dependencies for these sensors.
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:
This file specifies that the MLX90614 class has:
set
method which accepts "source" followed by either"object"
or"ambient"
as its argument.get
method which accepts "temperature" and returns a float between -127 degC and 128 degC.A more complex example:
This file specifies that the BMP180 class has:
BMP180.mode
property, the default being "thermometer".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?