@@ -99,22 +99,36 @@ def _coerce_state_from_string(value: Union[int, str]) -> str:
99
99
_LOGGER .error ('Unknown state: %s' , value )
100
100
return STATE_UNKNOWN
101
101
102
- async def _set_state (self , state : int ) -> None :
102
+ async def _set_state (self , state : int ) -> bool :
103
103
"""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 )
112
124
113
125
if int (set_state_resp ['ReturnCode' ]) != 0 :
114
126
_LOGGER .error (
115
127
'There was an error while setting the device state: %s' ,
116
128
set_state_resp ['ErrorMessage' ])
117
- return
129
+ return False
130
+
131
+ return True
118
132
119
133
async def close (self ) -> None :
120
134
"""Close the device."""
@@ -124,7 +138,7 @@ async def open(self) -> None:
124
138
"""Open the device."""
125
139
return await self ._set_state (1 )
126
140
127
- async def update (self ) -> None :
141
+ async def update (self ) -> bool :
128
142
"""Update the device info from the MyQ cloud."""
129
143
for attempt in range (0 , DEFAULT_UPDATE_RETRIES - 1 ):
130
144
try :
@@ -140,7 +154,7 @@ async def update(self) -> None:
140
154
except RequestError as err :
141
155
if attempt == DEFAULT_UPDATE_RETRIES - 1 :
142
156
_LOGGER .error ('Update failed (and halting): %s' , err )
143
- return
157
+ return False
144
158
145
159
_LOGGER .error ('Update failed; retrying' )
146
160
await asyncio .sleep (4 )
@@ -149,7 +163,9 @@ async def update(self) -> None:
149
163
_LOGGER .error (
150
164
'There was an error while updating: %s' ,
151
165
update_resp ['ErrorMessage' ])
152
- return
166
+ return False
153
167
154
168
self ._state = self ._coerce_state_from_string (
155
169
update_resp ['AttributeValue' ])
170
+
171
+ return True
0 commit comments