Update definition of onewire device specifications (#42460)

* Update definition of device specifications

* If set, sensor_name doesn't need to be capitalized
This commit is contained in:
epenet 2020-11-03 18:12:01 +01:00 committed by GitHub
parent c4f6259f16
commit 79b10a8efd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 161 additions and 73 deletions

View File

@ -30,32 +30,27 @@ DOMAIN = "onewire"
PRESSURE_CBAR = "cbar" PRESSURE_CBAR = "cbar"
SENSOR_TYPE_COUNT = "count"
SENSOR_TYPE_CURRENT = "current"
SENSOR_TYPE_HUMIDITY = "humidity"
SENSOR_TYPE_ILLUMINANCE = "illuminance"
SENSOR_TYPE_MOISTURE = "moisture"
SENSOR_TYPE_PRESSURE = "pressure"
SENSOR_TYPE_TEMPERATURE = "temperature"
SENSOR_TYPE_VOLTAGE = "voltage"
SENSOR_TYPE_WETNESS = "wetness"
SENSOR_TYPES = { SENSOR_TYPES = {
# SensorType: [ Measured unit, Unit, DeviceClass ] # SensorType: [ Unit, DeviceClass ]
"temperature": ["temperature", TEMP_CELSIUS, DEVICE_CLASS_TEMPERATURE], SENSOR_TYPE_TEMPERATURE: [TEMP_CELSIUS, DEVICE_CLASS_TEMPERATURE],
"humidity": ["humidity", PERCENTAGE, DEVICE_CLASS_HUMIDITY], SENSOR_TYPE_HUMIDITY: [PERCENTAGE, DEVICE_CLASS_HUMIDITY],
"humidity_hih3600": ["humidity", PERCENTAGE, DEVICE_CLASS_HUMIDITY], SENSOR_TYPE_PRESSURE: [PRESSURE_MBAR, DEVICE_CLASS_PRESSURE],
"humidity_hih4000": ["humidity", PERCENTAGE, DEVICE_CLASS_HUMIDITY], SENSOR_TYPE_ILLUMINANCE: [LIGHT_LUX, DEVICE_CLASS_ILLUMINANCE],
"humidity_hih5030": ["humidity", PERCENTAGE, DEVICE_CLASS_HUMIDITY], SENSOR_TYPE_WETNESS: [PERCENTAGE, DEVICE_CLASS_HUMIDITY],
"humidity_htm1735": ["humidity", PERCENTAGE, DEVICE_CLASS_HUMIDITY], SENSOR_TYPE_MOISTURE: [PRESSURE_CBAR, DEVICE_CLASS_PRESSURE],
"humidity_raw": ["humidity", PERCENTAGE, DEVICE_CLASS_HUMIDITY], SENSOR_TYPE_COUNT: ["count", None],
"pressure": ["pressure", PRESSURE_MBAR, DEVICE_CLASS_PRESSURE], SENSOR_TYPE_VOLTAGE: [VOLT, DEVICE_CLASS_VOLTAGE],
"illuminance": ["illuminance", LIGHT_LUX, DEVICE_CLASS_ILLUMINANCE], SENSOR_TYPE_CURRENT: [ELECTRICAL_CURRENT_AMPERE, DEVICE_CLASS_CURRENT],
"wetness_0": ["wetness", PERCENTAGE, DEVICE_CLASS_HUMIDITY],
"wetness_1": ["wetness", PERCENTAGE, DEVICE_CLASS_HUMIDITY],
"wetness_2": ["wetness", PERCENTAGE, DEVICE_CLASS_HUMIDITY],
"wetness_3": ["wetness", PERCENTAGE, DEVICE_CLASS_HUMIDITY],
"moisture_0": ["moisture", PRESSURE_CBAR, DEVICE_CLASS_PRESSURE],
"moisture_1": ["moisture", PRESSURE_CBAR, DEVICE_CLASS_PRESSURE],
"moisture_2": ["moisture", PRESSURE_CBAR, DEVICE_CLASS_PRESSURE],
"moisture_3": ["moisture", PRESSURE_CBAR, DEVICE_CLASS_PRESSURE],
"counter_a": ["counter", "count", None],
"counter_b": ["counter", "count", None],
"HobbyBoard": ["none", "none", None],
"voltage": ["voltage", VOLT, DEVICE_CLASS_VOLTAGE],
"voltage_VAD": ["voltage", VOLT, DEVICE_CLASS_VOLTAGE],
"voltage_VDD": ["voltage", VOLT, DEVICE_CLASS_VOLTAGE],
"current": ["current", ELECTRICAL_CURRENT_AMPERE, DEVICE_CLASS_CURRENT],
} }
SUPPORTED_PLATFORMS = [ SUPPORTED_PLATFORMS = [

View File

@ -15,12 +15,20 @@ _LOGGER = logging.getLogger(__name__)
class OneWire(Entity): class OneWire(Entity):
"""Implementation of a 1-Wire sensor.""" """Implementation of a 1-Wire sensor."""
def __init__(self, name, device_file, sensor_type, device_info=None): def __init__(
self,
name,
device_file,
sensor_type: str,
sensor_name: str = None,
device_info=None,
):
"""Initialize the sensor.""" """Initialize the sensor."""
self._name = f"{name} {sensor_type.capitalize()}" self._name = f"{name} {sensor_name or sensor_type.capitalize()}"
self._device_file = device_file self._device_file = device_file
self._device_class = SENSOR_TYPES[sensor_type][2] self._sensor_type = sensor_type
self._unit_of_measurement = SENSOR_TYPES[sensor_type][1] self._device_class = SENSOR_TYPES[sensor_type][1]
self._unit_of_measurement = SENSOR_TYPES[sensor_type][0]
self._device_info = device_info self._device_info = device_info
self._state = None self._state = None
self._value_raw = None self._value_raw = None
@ -64,9 +72,17 @@ class OneWire(Entity):
class OneWireProxy(OneWire): class OneWireProxy(OneWire):
"""Implementation of a 1-Wire sensor through owserver.""" """Implementation of a 1-Wire sensor through owserver."""
def __init__(self, name, device_file, sensor_type, device_info, owproxy): def __init__(
self,
name: str,
device_file: str,
sensor_type: str,
sensor_name: str,
device_info: Dict[str, Any],
owproxy: protocol._Proxy,
):
"""Initialize the sensor.""" """Initialize the sensor."""
super().__init__(name, device_file, sensor_type, device_info) super().__init__(name, device_file, sensor_type, sensor_name, device_info)
self._owproxy = owproxy self._owproxy = owproxy
def _read_value_ownet(self): def _read_value_ownet(self):

View File

@ -20,6 +20,15 @@ from .const import (
DEFAULT_OWSERVER_PORT, DEFAULT_OWSERVER_PORT,
DEFAULT_SYSBUS_MOUNT_DIR, DEFAULT_SYSBUS_MOUNT_DIR,
DOMAIN, DOMAIN,
SENSOR_TYPE_COUNT,
SENSOR_TYPE_CURRENT,
SENSOR_TYPE_HUMIDITY,
SENSOR_TYPE_ILLUMINANCE,
SENSOR_TYPE_MOISTURE,
SENSOR_TYPE_PRESSURE,
SENSOR_TYPE_TEMPERATURE,
SENSOR_TYPE_VOLTAGE,
SENSOR_TYPE_WETNESS,
) )
from .onewire_entities import OneWire, OneWireProxy from .onewire_entities import OneWire, OneWireProxy
from .onewirehub import OneWireHub from .onewirehub import OneWireHub
@ -28,27 +37,67 @@ _LOGGER = logging.getLogger(__name__)
DEVICE_SENSORS = { DEVICE_SENSORS = {
# Family : { SensorType: owfs path } # Family : { SensorType: owfs path }
"10": {"temperature": "temperature"}, "10": [
"12": {"temperature": "TAI8570/temperature", "pressure": "TAI8570/pressure"}, {"path": "temperature", "name": "Temperature", "type": SENSOR_TYPE_TEMPERATURE}
"22": {"temperature": "temperature"}, ],
"26": { "12": [
"temperature": "temperature", {
"humidity": "humidity", "path": "TAI8570/temperature",
"humidity_hih3600": "HIH3600/humidity", "name": "Temperature",
"humidity_hih4000": "HIH4000/humidity", "type": SENSOR_TYPE_TEMPERATURE,
"humidity_hih5030": "HIH5030/humidity", },
"humidity_htm1735": "HTM1735/humidity", {"path": "TAI8570/pressure", "name": "Pressure", "type": SENSOR_TYPE_PRESSURE},
"pressure": "B1-R1-A/pressure", ],
"illuminance": "S3-R1-A/illuminance", "22": [
"voltage_VAD": "VAD", {"path": "temperature", "name": "Temperature", "type": SENSOR_TYPE_TEMPERATURE}
"voltage_VDD": "VDD", ],
"current": "IAD", "26": [
}, {"path": "temperature", "name": "Temperature", "type": SENSOR_TYPE_TEMPERATURE},
"28": {"temperature": "temperature"}, {"path": "humidity", "name": "Humidity", "type": SENSOR_TYPE_HUMIDITY},
"3B": {"temperature": "temperature"}, {
"42": {"temperature": "temperature"}, "path": "HIH3600/humidity",
"1D": {"counter_a": "counter.A", "counter_b": "counter.B"}, "name": "Humidity HIH3600",
"EF": {"HobbyBoard": "special"}, "type": SENSOR_TYPE_HUMIDITY,
},
{
"path": "HIH4000/humidity",
"name": "Humidity HIH4000",
"type": SENSOR_TYPE_HUMIDITY,
},
{
"path": "HIH5030/humidity",
"name": "Humidity HIH5030",
"type": SENSOR_TYPE_HUMIDITY,
},
{
"path": "HTM1735/humidity",
"name": "Humidity HTM1735",
"type": SENSOR_TYPE_HUMIDITY,
},
{"path": "B1-R1-A/pressure", "name": "Pressure", "type": SENSOR_TYPE_PRESSURE},
{
"path": "S3-R1-A/illuminance",
"name": "Illuminance",
"type": SENSOR_TYPE_ILLUMINANCE,
},
{"path": "VAD", "name": "Voltage VAD", "type": SENSOR_TYPE_VOLTAGE},
{"path": "VDD", "name": "Voltage VDD", "type": SENSOR_TYPE_VOLTAGE},
{"path": "IAD", "name": "Current", "type": SENSOR_TYPE_CURRENT},
],
"28": [
{"path": "temperature", "name": "Temperature", "type": SENSOR_TYPE_TEMPERATURE}
],
"3B": [
{"path": "temperature", "name": "Temperature", "type": SENSOR_TYPE_TEMPERATURE}
],
"42": [
{"path": "temperature", "name": "Temperature", "type": SENSOR_TYPE_TEMPERATURE}
],
"1D": [
{"path": "counter.A", "name": "Counter A", "type": SENSOR_TYPE_COUNT},
{"path": "counter.B", "name": "Counter B", "type": SENSOR_TYPE_COUNT},
],
"EF": [], # "HobbyBoard": special
} }
DEVICE_SUPPORT_SYSBUS = ["10", "22", "28", "3B", "42"] DEVICE_SUPPORT_SYSBUS = ["10", "22", "28", "3B", "42"]
@ -58,20 +107,47 @@ DEVICE_SUPPORT_SYSBUS = ["10", "22", "28", "3B", "42"]
# via owserver (network protocol) # via owserver (network protocol)
HOBBYBOARD_EF = { HOBBYBOARD_EF = {
"HobbyBoards_EF": { "HobbyBoards_EF": [
"humidity": "humidity/humidity_corrected", {
"humidity_raw": "humidity/humidity_raw", "path": "humidity/humidity_corrected",
"temperature": "humidity/temperature", "name": "Humidity",
}, "type": SENSOR_TYPE_HUMIDITY,
"HB_MOISTURE_METER": { },
"moisture_0": "moisture/sensor.0", {
"moisture_1": "moisture/sensor.1", "path": "humidity/humidity_raw",
"moisture_2": "moisture/sensor.2", "name": "Humidity Raw",
"moisture_3": "moisture/sensor.3", "type": SENSOR_TYPE_HUMIDITY,
}, },
{
"path": "humidity/temperature",
"name": "Temperature",
"type": SENSOR_TYPE_TEMPERATURE,
},
],
"HB_MOISTURE_METER": [
{
"path": "moisture/sensor.0",
"name": "Moisture 0",
"type": SENSOR_TYPE_MOISTURE,
},
{
"path": "moisture/sensor.1",
"name": "Moisture 1",
"type": SENSOR_TYPE_MOISTURE,
},
{
"path": "moisture/sensor.2",
"name": "Moisture 2",
"type": SENSOR_TYPE_MOISTURE,
},
{
"path": "moisture/sensor.3",
"name": "Moisture 3",
"type": SENSOR_TYPE_MOISTURE,
},
],
} }
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{ {
vol.Optional(CONF_NAMES): {cv.string: cv.string}, vol.Optional(CONF_NAMES): {cv.string: cv.string},
@ -150,24 +226,26 @@ def get_entities(onewirehub: OneWireHub, config):
"model": device_type, "model": device_type,
"name": sensor_id, "name": sensor_id,
} }
for sensor_key, sensor_value in hb_info_from_type(dev_type)[family].items(): for device_sensor in hb_info_from_type(dev_type)[family]:
if "moisture" in sensor_key: if device_sensor["type"] == SENSOR_TYPE_MOISTURE:
s_id = sensor_key.split("_")[1] s_id = device_sensor["path"].split(".")[1]
is_leaf = int( is_leaf = int(
onewirehub.owproxy.read( onewirehub.owproxy.read(
f"{device['path']}moisture/is_leaf.{s_id}" f"{device['path']}moisture/is_leaf.{s_id}"
).decode() ).decode()
) )
if is_leaf: if is_leaf:
sensor_key = f"wetness_{s_id}" device_sensor["type"] = SENSOR_TYPE_WETNESS
device_sensor["name"] = f"Wetness {s_id}"
device_file = os.path.join( device_file = os.path.join(
os.path.split(device["path"])[0], sensor_value os.path.split(device["path"])[0], device_sensor["path"]
) )
entities.append( entities.append(
OneWireProxy( OneWireProxy(
device_names.get(sensor_id, sensor_id), device_names.get(sensor_id, sensor_id),
device_file, device_file,
sensor_key, device_sensor["type"],
device_sensor["name"],
device_info, device_info,
onewirehub.owproxy, onewirehub.owproxy,
) )
@ -199,7 +277,6 @@ def get_entities(onewirehub: OneWireHub, config):
OneWireDirect( OneWireDirect(
device_names.get(sensor_id, sensor_id), device_names.get(sensor_id, sensor_id),
device_file, device_file,
"temperature",
device_info, device_info,
p1sensor, p1sensor,
) )
@ -249,9 +326,9 @@ def get_entities(onewirehub: OneWireHub, config):
class OneWireDirect(OneWire): class OneWireDirect(OneWire):
"""Implementation of a 1-Wire sensor directly connected to RPI GPIO.""" """Implementation of a 1-Wire sensor directly connected to RPI GPIO."""
def __init__(self, name, device_file, sensor_type, device_info, owsensor): def __init__(self, name, device_file, device_info, owsensor):
"""Initialize the sensor.""" """Initialize the sensor."""
super().__init__(name, device_file, sensor_type, device_info) super().__init__(name, device_file, "temperature", "Temperature", device_info)
self._owsensor = owsensor self._owsensor = owsensor
def update(self): def update(self):