From 23fae255fff9aac56f760f59c998d5ac51bcb3b6 Mon Sep 17 00:00:00 2001 From: jan iversen Date: Sat, 3 Apr 2021 13:15:01 +0200 Subject: [PATCH] Make modbus WRITE_COIL use write_coils in case of an array (#48633) * WRITE_COIL uses write_coils in case of an array. WRITE_REGISTER uses write_register/write_registers depending on whether value is singular or an array. WRITE_COIL is modified to be similar and uses write_coil/write_coils depending on whether value is singular or an array. * Update SERVICE_WRITE_COIL to allow list. --- homeassistant/components/modbus/__init__.py | 4 +++- homeassistant/components/modbus/modbus.py | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/modbus/__init__.py b/homeassistant/components/modbus/__init__.py index acb31a7a730..f1f1e656805 100644 --- a/homeassistant/components/modbus/__init__.py +++ b/homeassistant/components/modbus/__init__.py @@ -282,7 +282,9 @@ SERVICE_WRITE_COIL_SCHEMA = vol.Schema( vol.Optional(ATTR_HUB, default=DEFAULT_HUB): cv.string, vol.Required(ATTR_UNIT): cv.positive_int, vol.Required(ATTR_ADDRESS): cv.positive_int, - vol.Required(ATTR_STATE): cv.boolean, + vol.Required(ATTR_STATE): vol.Any( + cv.boolean, vol.All(cv.ensure_list, [cv.boolean]) + ), } ) diff --git a/homeassistant/components/modbus/modbus.py b/homeassistant/components/modbus/modbus.py index 554b7bfb85e..f55e77c9119 100644 --- a/homeassistant/components/modbus/modbus.py +++ b/homeassistant/components/modbus/modbus.py @@ -93,7 +93,10 @@ def modbus_setup( address = service.data[ATTR_ADDRESS] state = service.data[ATTR_STATE] client_name = service.data[ATTR_HUB] - hub_collect[client_name].write_coil(unit, address, state) + if isinstance(state, list): + hub_collect[client_name].write_coils(unit, address, state) + else: + hub_collect[client_name].write_coil(unit, address, state) # register function to gracefully stop modbus hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, stop_modbus)