Skip to content

Commit 543abc9

Browse files
author
ekutner
committed
Improved handling of missing events and appliances
Reduce SSE stream timeout to 15min to (hopefully) avoid missing events
1 parent 9d74e48 commit 543abc9

File tree

4 files changed

+26
-17
lines changed

4 files changed

+26
-17
lines changed

home_connect_async/appliance.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -429,20 +429,21 @@ async def async_update_data(self, data:dict) -> None:
429429
self.active_program.options[key].name = data.get('name')
430430
self.active_program.options[key].displayvalue = data.get('displayvalue')
431431
#self.active_program = await self._async_fetch_programs('active')
432-
if '/status/' in data['uri']:
433-
if key in self.status:
434-
self.status[key].value = value
435-
self.status[key].name = data.get('name')
436-
self.status[key].displayvalue = data.get('displayvalue')
437-
else:
438-
self.status = await self._async_fetch_status()
439-
if '/settings/' in data['uri']:
440-
if key in self.settings:
441-
self.settings[key].value = value
442-
self.settings[key].name = data.get('name')
443-
self.settings[key].displayvalue = data.get('displayvalue')
444-
else:
445-
self.settings = await self._async_fetch_settings()
432+
433+
if key in self.status:
434+
self.status[key].value = value
435+
self.status[key].name = data.get('name')
436+
self.status[key].displayvalue = data.get('displayvalue')
437+
elif 'uri' in data and '/status/' in data['uri']:
438+
self.status = await self._async_fetch_status()
439+
440+
if key in self.settings:
441+
self.settings[key].value = value
442+
self.settings[key].name = data.get('name')
443+
self.settings[key].displayvalue = data.get('displayvalue')
444+
elif 'uri' in data and '/settings/' in data['uri']:
445+
self.settings = await self._async_fetch_settings()
446+
446447

447448
# Handle cases were the appliance data was loaded without getting all the programs
448449
if (

home_connect_async/auth.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ async def stream(self, endpoint:str, lang:str=None, **kwargs) -> sse_client.Even
5757
if lang:
5858
headers['Accept-Language'] = lang
5959
#timeout = aiohttp.ClientTimeout(total = ( self._auth.access_token_expirs_at - datetime.now() ).total_seconds() )
60-
timeout = aiohttp.ClientTimeout(total = 3600 )
60+
timeout = aiohttp.ClientTimeout(total = 900 )
6161
return sse_client.EventSource(f"{self.host}{endpoint}", session=self.websession, headers=headers, timeout=timeout, **kwargs)
6262

6363

home_connect_async/homeconnect.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,12 @@ async def _async_process_updates(self, event:MessageEvent):
306306
haid = event.last_event_id
307307
if event.type == 'KEEP-ALIVE':
308308
self._last_update = datetime.now()
309-
elif event.type == 'PAIRED':
309+
return
310+
if haid not in self.appliances:
311+
# handle cases where the appliance wasn't loaded before
312+
_LOGGER.debug("Unknown haId '%s' reloading HomeConnected from the API", haid)
313+
await self.async_load_data()
314+
if event.type == 'PAIRED':
310315
self.appliances[haid] = await Appliance.async_create(self, haId=haid)
311316
await self._callbacks.async_broadcast_event(self.appliances[haid], Events.PAIRED)
312317
elif event.type == 'DEPAIRED':
@@ -328,6 +333,9 @@ async def _async_process_updates(self, event:MessageEvent):
328333
# Type is NOTIFY or EVENT
329334
data = json.loads(event.data)
330335
haid = data['haId']
336+
if haid not in self.appliances:
337+
_LOGGER.debug("Unknown haId '%s' reloading HomeConnected from the API", haid)
338+
await self.async_load_data()
331339
if 'items' in data:
332340
for item in data['items']:
333341
# haid = self._get_haId_from_event(item) if 'uri' in item else haid

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
setup(
44
name = 'home-connect-async',
55
packages = ['home_connect_async'],
6-
version = '0.6.1',
6+
version = '0.6.2',
77
license='MIT',
88
description = 'Async SDK for BSH Home Connect API',
99
author = 'Eran Kutner',

0 commit comments

Comments
 (0)