From 4c7fcae5366c32de951657126ac04dbcc23a3de4 Mon Sep 17 00:00:00 2001 From: jan iversen Date: Wed, 19 May 2021 10:13:48 +0200 Subject: [PATCH] Small bug fixes in modbus due to async (#50812) * Small bug fixes due to async. * _available is true in turn_on/turn_off * Remove double update. * Set _available. --- homeassistant/components/modbus/climate.py | 3 ++- homeassistant/components/modbus/cover.py | 6 ++++-- homeassistant/components/modbus/switch.py | 11 ++++++++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/modbus/climate.py b/homeassistant/components/modbus/climate.py index 501061b9e0b..e871a21a8ed 100644 --- a/homeassistant/components/modbus/climate.py +++ b/homeassistant/components/modbus/climate.py @@ -208,12 +208,13 @@ class ModbusThermostat(ClimateEntity): ) byte_string = struct.pack(self._structure, target_temperature) register_value = struct.unpack(">h", byte_string[0:2])[0] - self._available = await self._hub.async_pymodbus_call( + result = await self._hub.async_pymodbus_call( self._slave, self._target_temperature_register, register_value, CALL_TYPE_WRITE_REGISTERS, ) + self._available = result is not None await self.async_update() @property diff --git a/homeassistant/components/modbus/cover.py b/homeassistant/components/modbus/cover.py index b64a8d81777..7c0e9d33215 100644 --- a/homeassistant/components/modbus/cover.py +++ b/homeassistant/components/modbus/cover.py @@ -174,16 +174,18 @@ class ModbusCover(CoverEntity, RestoreEntity): async def async_open_cover(self, **kwargs: Any) -> None: """Open cover.""" - self._available = await self._hub.async_pymodbus_call( + result = await self._hub.async_pymodbus_call( self._slave, self._register, self._state_open, self._write_type ) + self._available = result is not None self.async_update() async def async_close_cover(self, **kwargs: Any) -> None: """Close cover.""" - self._available = await self._hub.async_pymodbus_call( + result = await self._hub.async_pymodbus_call( self._slave, self._register, self._state_closed, self._write_type ) + self._available = result is not None self.async_update() async def async_update(self, now=None): diff --git a/homeassistant/components/modbus/switch.py b/homeassistant/components/modbus/switch.py index 1589a22da4a..27e67bf2a3e 100644 --- a/homeassistant/components/modbus/switch.py +++ b/homeassistant/components/modbus/switch.py @@ -22,6 +22,8 @@ from homeassistant.helpers.typing import ConfigType from .const import ( CALL_TYPE_COIL, + CALL_TYPE_WRITE_COIL, + CALL_TYPE_WRITE_REGISTER, CONF_INPUT_TYPE, CONF_STATE_OFF, CONF_STATE_ON, @@ -59,7 +61,10 @@ class ModbusSwitch(SwitchEntity, RestoreEntity): self._available = True self._scan_interval = timedelta(seconds=config[CONF_SCAN_INTERVAL]) self._address = config[CONF_ADDRESS] - self._write_type = config[CONF_WRITE_TYPE] + if config[CONF_WRITE_TYPE] == CALL_TYPE_COIL: + self._write_type = CALL_TYPE_WRITE_COIL + else: + self._write_type = CALL_TYPE_WRITE_REGISTER self._command_on = config[CONF_COMMAND_ON] self._command_off = config[CONF_COMMAND_OFF] if CONF_VERIFY in config: @@ -111,7 +116,7 @@ class ModbusSwitch(SwitchEntity, RestoreEntity): result = await self._hub.async_pymodbus_call( self._slave, self._address, self._command_on, self._write_type ) - if result is False: + if result is None: self._available = False self.async_write_ha_state() else: @@ -127,7 +132,7 @@ class ModbusSwitch(SwitchEntity, RestoreEntity): result = await self._hub.async_pymodbus_call( self._slave, self._address, self._command_off, self._write_type ) - if result is False: + if result is None: self._available = False self.async_write_ha_state() else: