[dlms_meter] Size entity storage with slot_counter

This commit is contained in:
J. Nick Koston
2026-10-08 11:23:26 -10:00
parent 3f21d68ae3
commit 15d230debd
4 changed files with 45 additions and 21 deletions
+21 -15
View File
@@ -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)
@@ -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)
@@ -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)
@@ -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)