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.
This commit is contained in:
jan iversen 2021-05-19 10:13:48 +02:00 committed by GitHub
parent ebe1059c34
commit 4c7fcae536
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 6 deletions

View file

@ -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

View file

@ -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):

View file

@ -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: