Implementing safe default for devices not requiring RESET
This commit is contained in:
@@ -208,6 +208,9 @@ class TuyaDevice(pytuya.TuyaListener, pytuya.ContextualLogger):
|
|||||||
|
|
||||||
except Exception as ex: # pylint: disable=broad-except
|
except Exception as ex: # pylint: disable=broad-except
|
||||||
try:
|
try:
|
||||||
|
if (self._default_reset_dpids is not None) and (
|
||||||
|
len(self._default_reset_dpids) > 0
|
||||||
|
):
|
||||||
self.debug(
|
self.debug(
|
||||||
"Initial state update failed, trying reset command "
|
"Initial state update failed, trying reset command "
|
||||||
+ "for DP IDs: %s",
|
+ "for DP IDs: %s",
|
||||||
@@ -552,10 +555,10 @@ class LocalTuyaEntity(RestoreEntity, pytuya.ContextualLogger):
|
|||||||
Which indicates a DPS that needs to be set before it starts returning
|
Which indicates a DPS that needs to be set before it starts returning
|
||||||
status.
|
status.
|
||||||
"""
|
"""
|
||||||
if not self.restore_on_reconnect and (str(self._dp_id) in self._status):
|
if (not self.restore_on_reconnect) and (str(self._dp_id) in self._status):
|
||||||
self.debug(
|
self.debug(
|
||||||
"Entity %s (DP %d) - Not restoring as restore on reconnect is \
|
"Entity %s (DP %d) - Not restoring as restore on reconnect is "
|
||||||
disabled for this entity and the entity has an initial status",
|
+ "disabled for this entity and the entity has an initial status",
|
||||||
self.name,
|
self.name,
|
||||||
self._dp_id,
|
self._dp_id,
|
||||||
)
|
)
|
||||||
|
@@ -248,12 +248,6 @@ async def validate_input(hass: core.HomeAssistant, data):
|
|||||||
data[CONF_LOCAL_KEY],
|
data[CONF_LOCAL_KEY],
|
||||||
float(data[CONF_PROTOCOL_VERSION]),
|
float(data[CONF_PROTOCOL_VERSION]),
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
|
||||||
detected_dps = await interface.detect_available_dps()
|
|
||||||
except Exception: # pylint: disable=broad-except
|
|
||||||
try:
|
|
||||||
_LOGGER.debug("Initial state update failed, trying reset command")
|
|
||||||
if CONF_RESET_DPIDS in data:
|
if CONF_RESET_DPIDS in data:
|
||||||
reset_ids_str = data[CONF_RESET_DPIDS].split(",")
|
reset_ids_str = data[CONF_RESET_DPIDS].split(",")
|
||||||
reset_ids = []
|
reset_ids = []
|
||||||
@@ -264,6 +258,12 @@ async def validate_input(hass: core.HomeAssistant, data):
|
|||||||
data[CONF_RESET_DPIDS],
|
data[CONF_RESET_DPIDS],
|
||||||
reset_ids,
|
reset_ids,
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
|
detected_dps = await interface.detect_available_dps()
|
||||||
|
except Exception: # pylint: disable=broad-except
|
||||||
|
try:
|
||||||
|
_LOGGER.debug("Initial state update failed, trying reset command")
|
||||||
|
if len(reset_ids) > 0:
|
||||||
await interface.reset(reset_ids)
|
await interface.reset(reset_ids)
|
||||||
detected_dps = await interface.detect_available_dps()
|
detected_dps = await interface.detect_available_dps()
|
||||||
except Exception: # pylint: disable=broad-except
|
except Exception: # pylint: disable=broad-except
|
||||||
@@ -282,7 +282,7 @@ async def validate_input(hass: core.HomeAssistant, data):
|
|||||||
for new_dps in manual_dps_list + (reset_ids or []):
|
for new_dps in manual_dps_list + (reset_ids or []):
|
||||||
# If the DPS not in the detected dps list, then add with a
|
# If the DPS not in the detected dps list, then add with a
|
||||||
# default value indicating that it has been manually added
|
# default value indicating that it has been manually added
|
||||||
if new_dps not in detected_dps:
|
if str(new_dps) not in detected_dps:
|
||||||
detected_dps[new_dps] = -1
|
detected_dps[new_dps] = -1
|
||||||
|
|
||||||
except (ConnectionRefusedError, ConnectionResetError) as ex:
|
except (ConnectionRefusedError, ConnectionResetError) as ex:
|
||||||
|
Reference in New Issue
Block a user