fix 1-wire updating while busy

This commit is contained in:
Andrey
2021-01-29 09:08:34 +03:00
parent 72cf516353
commit 3978ce2203
2 changed files with 12 additions and 6 deletions

View File

@@ -161,6 +161,7 @@ async def async_remove_entry(hass, entry) -> None:
return
_LOGGER.debug(f'remove {id}')
_hubs.pop(id, None)
hass.data[DOMAIN].pop(id, None)
task: asyncio.Task = _POLL_TASKS.pop(id, None)
if task is not None:
task.cancel()

View File

@@ -209,6 +209,8 @@ class MegaD:
def parse_response(self, ret):
if ret is None:
raise NoPort()
if 'busy' in ret:
return None
if ':' in ret:
ret = PATT_SPLIT.split(ret)
ret = {'value': dict([
@@ -229,13 +231,16 @@ class MegaD:
"""
self.lg.debug(f'get port %s', port)
if self.mqtt is None or force_http:
ret = await self.request(pt=port, cmd=http_cmd)
ret = self.parse_response(ret)
self.lg.debug('parsed: %s', ret)
if http_cmd == 'list' and isinstance(ret, dict) and 'value' in ret:
if http_cmd == 'list':
await self.request(pt=port, cmd='conv')
await asyncio.sleep(1)
ret = await self.request(pt=port, cmd=http_cmd)
ret = self.parse_response(ret)
ret = self.parse_response(await self.request(pt=port, cmd=http_cmd))
ntry = 0
while http_cmd == 'list' and ret is None and ntry < 3:
await asyncio.sleep(1)
ret = self.parse_response(await self.request(pt=port, cmd=http_cmd))
ntry += 1
self.lg.debug('parsed: %s', ret)
self.values[port] = ret
return ret