From c173ebd11ab7a5f71bfd9578a1510029cfda06d9 Mon Sep 17 00:00:00 2001 From: jan iversen Date: Fri, 15 Sep 2023 13:49:33 +0200 Subject: [PATCH] Add device_address to modbus configuration (#100399) --- homeassistant/components/modbus/__init__.py | 4 +++- homeassistant/components/modbus/base_platform.py | 3 ++- homeassistant/components/modbus/const.py | 1 + homeassistant/components/modbus/validators.py | 4 +++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/modbus/__init__.py b/homeassistant/components/modbus/__init__.py index a3c8928caaf..c228ba64459 100644 --- a/homeassistant/components/modbus/__init__.py +++ b/homeassistant/components/modbus/__init__.py @@ -62,6 +62,7 @@ from .const import ( # noqa: F401 CONF_CLIMATES, CONF_CLOSE_COMM_ON_ERROR, CONF_DATA_TYPE, + CONF_DEVICE_ADDRESS, CONF_FANS, CONF_HVAC_MODE_AUTO, CONF_HVAC_MODE_COOL, @@ -138,7 +139,8 @@ BASE_COMPONENT_SCHEMA = vol.Schema( { vol.Required(CONF_NAME): cv.string, vol.Required(CONF_ADDRESS): cv.positive_int, - vol.Optional(CONF_SLAVE, default=0): cv.positive_int, + vol.Exclusive(CONF_DEVICE_ADDRESS, "slave_addr"): cv.positive_int, + vol.Exclusive(CONF_SLAVE, "slave_addr"): cv.positive_int, vol.Optional( CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL ): cv.positive_int, diff --git a/homeassistant/components/modbus/base_platform.py b/homeassistant/components/modbus/base_platform.py index a3876bbe87c..739f234e8c4 100644 --- a/homeassistant/components/modbus/base_platform.py +++ b/homeassistant/components/modbus/base_platform.py @@ -42,6 +42,7 @@ from .const import ( CALL_TYPE_X_COILS, CALL_TYPE_X_REGISTER_HOLDINGS, CONF_DATA_TYPE, + CONF_DEVICE_ADDRESS, CONF_INPUT_TYPE, CONF_LAZY_ERROR, CONF_MAX_VALUE, @@ -76,7 +77,7 @@ class BasePlatform(Entity): def __init__(self, hub: ModbusHub, entry: dict[str, Any]) -> None: """Initialize the Modbus binary sensor.""" self._hub = hub - self._slave = entry.get(CONF_SLAVE, 0) + self._slave = entry.get(CONF_SLAVE, None) or entry.get(CONF_DEVICE_ADDRESS, 0) self._address = int(entry[CONF_ADDRESS]) self._input_type = entry[CONF_INPUT_TYPE] self._value: str | None = None diff --git a/homeassistant/components/modbus/const.py b/homeassistant/components/modbus/const.py index e509577267c..7776cf96e70 100644 --- a/homeassistant/components/modbus/const.py +++ b/homeassistant/components/modbus/const.py @@ -17,6 +17,7 @@ CONF_BYTESIZE = "bytesize" CONF_CLIMATES = "climates" CONF_CLOSE_COMM_ON_ERROR = "close_comm_on_error" CONF_DATA_TYPE = "data_type" +CONF_DEVICE_ADDRESS = "device_address" CONF_FANS = "fans" CONF_INPUT_TYPE = "input_type" CONF_LAZY_ERROR = "lazy_error_count" diff --git a/homeassistant/components/modbus/validators.py b/homeassistant/components/modbus/validators.py index aec781b065e..4297bf46cfe 100644 --- a/homeassistant/components/modbus/validators.py +++ b/homeassistant/components/modbus/validators.py @@ -25,6 +25,7 @@ from homeassistant.const import ( from .const import ( CONF_DATA_TYPE, + CONF_DEVICE_ADDRESS, CONF_INPUT_TYPE, CONF_SLAVE_COUNT, CONF_SWAP, @@ -241,7 +242,8 @@ def duplicate_entity_validator(config: dict) -> dict: addr += "_" + str(entry[CONF_COMMAND_ON]) if CONF_COMMAND_OFF in entry: addr += "_" + str(entry[CONF_COMMAND_OFF]) - addr += "_" + str(entry.get(CONF_SLAVE, 0)) + inx = entry.get(CONF_SLAVE, None) or entry.get(CONF_DEVICE_ADDRESS, 0) + addr += "_" + str(inx) if addr in addresses: err = ( f"Modbus {component}/{name} address {addr} is duplicate, second"