Fix modbus switch problems (#50117)

This commit is contained in:
jan iversen 2021-05-07 22:12:13 +02:00 committed by GitHub
parent 934d241b70
commit 552ca1c57b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 17 deletions

View file

@ -183,19 +183,21 @@ SWITCH_SCHEMA = BASE_COMPONENT_SCHEMA.extend(
),
vol.Optional(CONF_COMMAND_OFF, default=0x00): cv.positive_int,
vol.Optional(CONF_COMMAND_ON, default=0x01): cv.positive_int,
vol.Optional(CONF_VERIFY): {
vol.Optional(CONF_ADDRESS): cv.positive_int,
vol.Optional(CONF_INPUT_TYPE): vol.In(
[
CALL_TYPE_REGISTER_HOLDING,
CALL_TYPE_DISCRETE,
CALL_TYPE_REGISTER_INPUT,
CALL_TYPE_COIL,
]
),
vol.Optional(CONF_STATE_OFF): cv.positive_int,
vol.Optional(CONF_STATE_ON): cv.positive_int,
},
vol.Optional(CONF_VERIFY): vol.Maybe(
{
vol.Optional(CONF_ADDRESS): cv.positive_int,
vol.Optional(CONF_INPUT_TYPE): vol.In(
[
CALL_TYPE_REGISTER_HOLDING,
CALL_TYPE_DISCRETE,
CALL_TYPE_REGISTER_INPUT,
CALL_TYPE_COIL,
]
),
vol.Optional(CONF_STATE_OFF): cv.positive_int,
vol.Optional(CONF_STATE_ON): cv.positive_int,
}
),
}
)

View file

@ -70,6 +70,8 @@ class ModbusSwitch(SwitchEntity, RestoreEntity):
self._command_on = config[CONF_COMMAND_ON]
self._command_off = config[CONF_COMMAND_OFF]
if CONF_VERIFY in config:
if config[CONF_VERIFY] is None:
config[CONF_VERIFY] = {}
self._verify_active = True
self._verify_address = config[CONF_VERIFY].get(
CONF_ADDRESS, config[CONF_ADDRESS]
@ -97,10 +99,9 @@ class ModbusSwitch(SwitchEntity, RestoreEntity):
if state:
self._is_on = state.state == STATE_ON
if self._verify_active:
async_track_time_interval(
self.hass, lambda arg: self.update(), self._scan_interval
)
async_track_time_interval(
self.hass, lambda arg: self.update(), self._scan_interval
)
@property
def is_on(self):
@ -154,6 +155,8 @@ class ModbusSwitch(SwitchEntity, RestoreEntity):
def update(self):
"""Update the entity state."""
if not self._verify_active:
self._available = True
self.schedule_update_ha_state()
return
result = self._read_func(self._slave, self._verify_address, 1)