diff --git a/esphome/components/dlms_meter/__init__.py b/esphome/components/dlms_meter/__init__.py index 37387dfe422..71cc63d2bbd 100644 --- a/esphome/components/dlms_meter/__init__.py +++ b/esphome/components/dlms_meter/__init__.py @@ -13,6 +13,7 @@ from esphome.const import ( CONF_RECEIVE_TIMEOUT, ) from esphome.core import CORE +from esphome.cpp_generator import MockObj from esphome.types import ConfigType _LOGGER = logging.getLogger(__name__) @@ -134,6 +135,26 @@ CUSTOM_PATTERN_SCHEMA = cv.All( validate_custom_pattern, ) +_request_sensor_slot = cg.slot_counter("DLMS_MAX_SENSORS") +_request_text_sensor_slot = cg.slot_counter("DLMS_MAX_TEXT_SENSORS") +_request_binary_sensor_slot = cg.slot_counter("DLMS_MAX_BINARY_SENSORS") + + +def register_sensor(hub: MockObj, config: ConfigType, var: MockObj) -> None: + _request_sensor_slot() + cg.add(hub.register_sensor(config[CONF_OBIS_CODE], var)) + + +def register_text_sensor(hub: MockObj, config: ConfigType, var: MockObj) -> None: + _request_text_sensor_slot() + cg.add(hub.register_text_sensor(config[CONF_OBIS_CODE], var)) + + +def register_binary_sensor(hub: MockObj, config: ConfigType, var: MockObj) -> None: + _request_binary_sensor_slot() + cg.add(hub.register_binary_sensor(config[CONF_OBIS_CODE], var)) + + CONFIG_SCHEMA = cv.All( cv.Schema( { @@ -207,21 +228,6 @@ async def to_code(config: ConfigType) -> None: patterns_expr, ) - hub_id = config[CONF_ID].id - - for domain, define in ( - ("sensor", "DLMS_MAX_SENSORS"), - ("text_sensor", "DLMS_MAX_TEXT_SENSORS"), - ("binary_sensor", "DLMS_MAX_BINARY_SENSORS"), - ): - count = sum( - 1 - for conf in CORE.config.get(domain, []) - if conf.get("platform") == "dlms_meter" - and conf[CONF_DLMS_METER_ID].id == hub_id - ) - cg.add_define(define, count) - await cg.register_component(var, config) await uart.register_uart_device(var, config) diff --git a/esphome/components/dlms_meter/binary_sensor/__init__.py b/esphome/components/dlms_meter/binary_sensor/__init__.py index a15e58b9571..62fbf78ea28 100644 --- a/esphome/components/dlms_meter/binary_sensor/__init__.py +++ b/esphome/components/dlms_meter/binary_sensor/__init__.py @@ -3,7 +3,13 @@ from esphome.components import binary_sensor import esphome.config_validation as cv from esphome.types import ConfigType -from .. import CONF_DLMS_METER_ID, CONF_OBIS_CODE, DlmsMeterComponent, obis_code +from .. import ( + CONF_DLMS_METER_ID, + CONF_OBIS_CODE, + DlmsMeterComponent, + obis_code, + register_binary_sensor, +) DEPENDENCIES = ["dlms_meter"] @@ -18,4 +24,4 @@ CONFIG_SCHEMA = binary_sensor.binary_sensor_schema().extend( async def to_code(config: ConfigType) -> None: hub = await cg.get_variable(config[CONF_DLMS_METER_ID]) var = await binary_sensor.new_binary_sensor(config) - cg.add(hub.register_binary_sensor(config[CONF_OBIS_CODE], var)) + register_binary_sensor(hub, config, var) diff --git a/esphome/components/dlms_meter/sensor/__init__.py b/esphome/components/dlms_meter/sensor/__init__.py index 0c895ccefb2..35ce1585768 100644 --- a/esphome/components/dlms_meter/sensor/__init__.py +++ b/esphome/components/dlms_meter/sensor/__init__.py @@ -3,7 +3,13 @@ from esphome.components import sensor import esphome.config_validation as cv from esphome.types import ConfigType -from .. import CONF_DLMS_METER_ID, CONF_OBIS_CODE, DlmsMeterComponent, obis_code +from .. import ( + CONF_DLMS_METER_ID, + CONF_OBIS_CODE, + DlmsMeterComponent, + obis_code, + register_sensor, +) DEPENDENCIES = ["dlms_meter"] @@ -56,4 +62,4 @@ CONFIG_SCHEMA = sensor.sensor_schema().extend( async def to_code(config: ConfigType) -> None: hub = await cg.get_variable(config[CONF_DLMS_METER_ID]) var = await sensor.new_sensor(config) - cg.add(hub.register_sensor(config[CONF_OBIS_CODE], var)) + register_sensor(hub, config, var) diff --git a/esphome/components/dlms_meter/text_sensor/__init__.py b/esphome/components/dlms_meter/text_sensor/__init__.py index 10872d1a50a..5374ff3c27e 100644 --- a/esphome/components/dlms_meter/text_sensor/__init__.py +++ b/esphome/components/dlms_meter/text_sensor/__init__.py @@ -3,7 +3,13 @@ from esphome.components import text_sensor import esphome.config_validation as cv from esphome.types import ConfigType -from .. import CONF_DLMS_METER_ID, CONF_OBIS_CODE, DlmsMeterComponent, obis_code +from .. import ( + CONF_DLMS_METER_ID, + CONF_OBIS_CODE, + DlmsMeterComponent, + obis_code, + register_text_sensor, +) DEPENDENCIES = ["dlms_meter"] @@ -34,4 +40,4 @@ CONFIG_SCHEMA = text_sensor.text_sensor_schema().extend( async def to_code(config: ConfigType) -> None: hub = await cg.get_variable(config[CONF_DLMS_METER_ID]) var = await text_sensor.new_text_sensor(config) - cg.add(hub.register_text_sensor(config[CONF_OBIS_CODE], var)) + register_text_sensor(hub, config, var)