mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 17:57:11 +00:00
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:
parent
c4f6259f16
commit
79b10a8efd
@ -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 = [
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user