From 646862ec96f6b3a2eef1536aad9b49769f49e9d4 Mon Sep 17 00:00:00 2001 From: jan iversen Date: Mon, 12 Jul 2021 20:22:53 +0200 Subject: [PATCH] Add array write to turn_on/off in modbus switch/fan/light (#52582) --- homeassistant/components/modbus/__init__.py | 4 ++++ .../components/modbus/base_platform.py | 24 +++++++++++++++---- homeassistant/components/modbus/const.py | 2 ++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/modbus/__init__.py b/homeassistant/components/modbus/__init__.py index 8ccfe45f86c..9f851b4a235 100644 --- a/homeassistant/components/modbus/__init__.py +++ b/homeassistant/components/modbus/__init__.py @@ -54,6 +54,8 @@ from .const import ( CALL_TYPE_DISCRETE, CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_INPUT, + CALL_TYPE_X_COILS, + CALL_TYPE_X_REGISTER_HOLDINGS, CONF_BAUDRATE, CONF_BYTESIZE, CONF_CLIMATES, @@ -185,6 +187,8 @@ BASE_SWITCH_SCHEMA = BASE_COMPONENT_SCHEMA.extend( [ CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_COIL, + CALL_TYPE_X_COILS, + CALL_TYPE_X_REGISTER_HOLDINGS, ] ), vol.Optional(CONF_COMMAND_OFF, default=0x00): cv.positive_int, diff --git a/homeassistant/components/modbus/base_platform.py b/homeassistant/components/modbus/base_platform.py index ed2f6e69863..9c21ba3970c 100644 --- a/homeassistant/components/modbus/base_platform.py +++ b/homeassistant/components/modbus/base_platform.py @@ -23,8 +23,13 @@ from homeassistant.helpers.restore_state import RestoreEntity from .const import ( CALL_TYPE_COIL, + CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_WRITE_COIL, + CALL_TYPE_WRITE_COILS, CALL_TYPE_WRITE_REGISTER, + CALL_TYPE_WRITE_REGISTERS, + CALL_TYPE_X_COILS, + CALL_TYPE_X_REGISTER_HOLDINGS, CONF_INPUT_TYPE, CONF_STATE_OFF, CONF_STATE_ON, @@ -92,10 +97,19 @@ class BaseSwitch(BasePlatform, RestoreEntity): config[CONF_INPUT_TYPE] = "" super().__init__(hub, config) self._is_on = None - if config[CONF_WRITE_TYPE] == CALL_TYPE_COIL: - self._write_type = CALL_TYPE_WRITE_COIL - else: - self._write_type = CALL_TYPE_WRITE_REGISTER + convert = { + CALL_TYPE_REGISTER_HOLDING: ( + CALL_TYPE_REGISTER_HOLDING, + CALL_TYPE_WRITE_REGISTER, + ), + CALL_TYPE_COIL: (CALL_TYPE_COIL, CALL_TYPE_WRITE_COIL), + CALL_TYPE_X_COILS: (CALL_TYPE_COIL, CALL_TYPE_WRITE_COILS), + CALL_TYPE_X_REGISTER_HOLDINGS: ( + CALL_TYPE_REGISTER_HOLDING, + CALL_TYPE_WRITE_REGISTERS, + ), + } + self._write_type = convert[config[CONF_WRITE_TYPE]][1] self.command_on = config[CONF_COMMAND_ON] self._command_off = config[CONF_COMMAND_OFF] if CONF_VERIFY in config: @@ -107,7 +121,7 @@ class BaseSwitch(BasePlatform, RestoreEntity): CONF_ADDRESS, config[CONF_ADDRESS] ) self._verify_type = config[CONF_VERIFY].get( - CONF_INPUT_TYPE, config[CONF_WRITE_TYPE] + CONF_INPUT_TYPE, convert[config[CONF_WRITE_TYPE]][0] ) self._state_on = config[CONF_VERIFY].get(CONF_STATE_ON, self.command_on) self._state_off = config[CONF_VERIFY].get(CONF_STATE_OFF, self._command_off) diff --git a/homeassistant/components/modbus/const.py b/homeassistant/components/modbus/const.py index 2607fd2bdf0..62319bcde85 100644 --- a/homeassistant/components/modbus/const.py +++ b/homeassistant/components/modbus/const.py @@ -98,6 +98,8 @@ CALL_TYPE_WRITE_COIL = "write_coil" CALL_TYPE_WRITE_COILS = "write_coils" CALL_TYPE_WRITE_REGISTER = "write_register" CALL_TYPE_WRITE_REGISTERS = "write_registers" +CALL_TYPE_X_COILS = "coils" +CALL_TYPE_X_REGISTER_HOLDINGS = "holdings" # service calls SERVICE_WRITE_COIL = "write_coil"