Skip to content

Commit 346670f

Browse files
authored
Merge pull request #1 from ehendrix23/dev-update
Added retry for open/close and True/False return for update, close, open.
2 parents 04e60a2 + 58ed597 commit 346670f

File tree

1 file changed

+29
-13
lines changed

1 file changed

+29
-13
lines changed

pymyq/device.py

+29-13
Original file line numberDiff line numberDiff line change
@@ -99,22 +99,36 @@ def _coerce_state_from_string(value: Union[int, str]) -> str:
9999
_LOGGER.error('Unknown state: %s', value)
100100
return STATE_UNKNOWN
101101

102-
async def _set_state(self, state: int) -> None:
102+
async def _set_state(self, state: int) -> bool:
103103
"""Set the state of the device."""
104-
set_state_resp = await self._request(
105-
'put',
106-
DEVICE_SET_ENDPOINT,
107-
json={
108-
'attributeName': 'desireddoorstate',
109-
'myQDeviceId': self.device_id,
110-
'AttributeValue': state,
111-
})
104+
for attempt in range(0, DEFAULT_UPDATE_RETRIES - 1):
105+
try:
106+
set_state_resp = await self._request(
107+
'put',
108+
DEVICE_SET_ENDPOINT,
109+
json={
110+
'attributeName': 'desireddoorstate',
111+
'myQDeviceId': self.device_id,
112+
'AttributeValue': state,
113+
})
114+
115+
break
116+
except RequestError as err:
117+
if attempt == DEFAULT_UPDATE_RETRIES - 1:
118+
_LOGGER.error('Setting state failed (and halting): %s',
119+
err)
120+
return False
121+
122+
_LOGGER.error('Setting state failed; retrying')
123+
await asyncio.sleep(4)
112124

113125
if int(set_state_resp['ReturnCode']) != 0:
114126
_LOGGER.error(
115127
'There was an error while setting the device state: %s',
116128
set_state_resp['ErrorMessage'])
117-
return
129+
return False
130+
131+
return True
118132

119133
async def close(self) -> None:
120134
"""Close the device."""
@@ -124,7 +138,7 @@ async def open(self) -> None:
124138
"""Open the device."""
125139
return await self._set_state(1)
126140

127-
async def update(self) -> None:
141+
async def update(self) -> bool:
128142
"""Update the device info from the MyQ cloud."""
129143
for attempt in range(0, DEFAULT_UPDATE_RETRIES - 1):
130144
try:
@@ -140,7 +154,7 @@ async def update(self) -> None:
140154
except RequestError as err:
141155
if attempt == DEFAULT_UPDATE_RETRIES - 1:
142156
_LOGGER.error('Update failed (and halting): %s', err)
143-
return
157+
return False
144158

145159
_LOGGER.error('Update failed; retrying')
146160
await asyncio.sleep(4)
@@ -149,7 +163,9 @@ async def update(self) -> None:
149163
_LOGGER.error(
150164
'There was an error while updating: %s',
151165
update_resp['ErrorMessage'])
152-
return
166+
return False
153167

154168
self._state = self._coerce_state_from_string(
155169
update_resp['AttributeValue'])
170+
171+
return True

0 commit comments

Comments
 (0)