mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Share struct validator between sensor and climate (#51935)
This commit is contained in:
parent
5b663b1fb9
commit
1f4fdb50dc
@ -283,7 +283,9 @@ MODBUS_SCHEMA = vol.Schema(
|
|||||||
vol.Optional(CONF_BINARY_SENSORS): vol.All(
|
vol.Optional(CONF_BINARY_SENSORS): vol.All(
|
||||||
cv.ensure_list, [BINARY_SENSOR_SCHEMA]
|
cv.ensure_list, [BINARY_SENSOR_SCHEMA]
|
||||||
),
|
),
|
||||||
vol.Optional(CONF_CLIMATES): vol.All(cv.ensure_list, [CLIMATE_SCHEMA]),
|
vol.Optional(CONF_CLIMATES): vol.All(
|
||||||
|
cv.ensure_list, [vol.All(CLIMATE_SCHEMA, sensor_schema_validator)]
|
||||||
|
),
|
||||||
vol.Optional(CONF_COVERS): vol.All(cv.ensure_list, [COVERS_SCHEMA]),
|
vol.Optional(CONF_COVERS): vol.All(cv.ensure_list, [COVERS_SCHEMA]),
|
||||||
vol.Optional(CONF_LIGHTS): vol.All(cv.ensure_list, [LIGHT_SCHEMA]),
|
vol.Optional(CONF_LIGHTS): vol.All(cv.ensure_list, [LIGHT_SCHEMA]),
|
||||||
vol.Optional(CONF_SENSORS): vol.All(
|
vol.Optional(CONF_SENSORS): vol.All(
|
||||||
|
@ -40,8 +40,6 @@ from .const import (
|
|||||||
CONF_SWAP_WORD,
|
CONF_SWAP_WORD,
|
||||||
CONF_SWAP_WORD_BYTE,
|
CONF_SWAP_WORD_BYTE,
|
||||||
CONF_TARGET_TEMP,
|
CONF_TARGET_TEMP,
|
||||||
DATA_TYPE_CUSTOM,
|
|
||||||
DEFAULT_STRUCT_FORMAT,
|
|
||||||
MODBUS_DOMAIN,
|
MODBUS_DOMAIN,
|
||||||
)
|
)
|
||||||
from .modbus import ModbusHub
|
from .modbus import ModbusHub
|
||||||
@ -63,37 +61,6 @@ async def async_setup_platform(
|
|||||||
entities = []
|
entities = []
|
||||||
for entity in discovery_info[CONF_CLIMATES]:
|
for entity in discovery_info[CONF_CLIMATES]:
|
||||||
hub: ModbusHub = hass.data[MODBUS_DOMAIN][discovery_info[CONF_NAME]]
|
hub: ModbusHub = hass.data[MODBUS_DOMAIN][discovery_info[CONF_NAME]]
|
||||||
count = entity[CONF_COUNT]
|
|
||||||
data_type = entity[CONF_DATA_TYPE]
|
|
||||||
name = entity[CONF_NAME]
|
|
||||||
structure = entity[CONF_STRUCTURE]
|
|
||||||
|
|
||||||
if data_type != DATA_TYPE_CUSTOM:
|
|
||||||
try:
|
|
||||||
structure = f">{DEFAULT_STRUCT_FORMAT[data_type][count]}"
|
|
||||||
except KeyError:
|
|
||||||
_LOGGER.error(
|
|
||||||
"Climate %s: Unable to find a data type matching count value %s, try a custom type",
|
|
||||||
name,
|
|
||||||
count,
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
|
|
||||||
try:
|
|
||||||
size = struct.calcsize(structure)
|
|
||||||
except struct.error as err:
|
|
||||||
_LOGGER.error("Error in sensor %s structure: %s", name, err)
|
|
||||||
continue
|
|
||||||
|
|
||||||
if count * 2 != size:
|
|
||||||
_LOGGER.error(
|
|
||||||
"Structure size (%d bytes) mismatch registers count (%d words)",
|
|
||||||
size,
|
|
||||||
count,
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
|
|
||||||
entity[CONF_STRUCTURE] = structure
|
|
||||||
entities.append(ModbusThermostat(hub, entity))
|
entities.append(ModbusThermostat(hub, entity))
|
||||||
|
|
||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user