Skip to content

Commit d299938

Browse files
committed
async_update(): improve collection of required xml-data,
this fixes the available-status of zigbee-devices not updating
1 parent bbbbae8 commit d299938

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

plugwise/__init__.py

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ def __init__(
317317
SmileData.__init__(self)
318318

319319
self.smile_hostname: str | None = None
320+
self._target_smile: str | None = None
320321

321322
async def connect(self) -> bool:
322323
"""Connect to Plugwise device and determine its name, type and version."""
@@ -432,19 +433,19 @@ async def _smile_detect(self, result: etree, dsmrmain: etree) -> None:
432433
raise UnsupportedDeviceError
433434

434435
ver = semver.version.Version.parse(self.smile_fw_version)
435-
target_smile = f"{model}_v{ver.major}"
436-
LOGGER.debug("Plugwise identified as %s", target_smile)
437-
if target_smile not in SMILES:
436+
self._target_smile = f"{model}_v{ver.major}"
437+
LOGGER.debug("Plugwise identified as %s", self._target_smile)
438+
if self._target_smile not in SMILES:
438439
LOGGER.error(
439440
"Your version Smile identified as %s seems unsupported by our plugin, please"
440441
" create an issue on http://github.com/plugwise/python-plugwise",
441-
target_smile,
442+
self._target_smile,
442443
)
443444
raise UnsupportedDeviceError
444445

445446
self.smile_model = "Gateway"
446-
self.smile_name = SMILES[target_smile].smile_name
447-
self.smile_type = SMILES[target_smile].smile_type
447+
self.smile_name = SMILES[self._target_smile].smile_name
448+
self.smile_type = SMILES[self._target_smile].smile_type
448449
self.smile_version = (self.smile_fw_version, ver)
449450

450451
if self.smile_type == "stretch":
@@ -505,16 +506,20 @@ async def _update_domain_objects(self) -> None:
505506

506507
async def async_update(self) -> PlugwiseData:
507508
"""Perform an incremental update for updating the various device states."""
508-
if self.smile_type != "power":
509-
await self._update_domain_objects()
510-
elif not self._smile_legacy:
511-
self._locations = await self._request(LOCATIONS)
512-
else:
513-
self._modules = await self._request(MODULES)
514-
515-
# P1 legacy has no appliances
516-
if not (self.smile_type == "power" and self._smile_legacy):
517-
self._appliances = await self._request(APPLIANCES)
509+
match self._target_smile:
510+
case "smile_v2":
511+
self._modules = await self._request(MODULES)
512+
case "smile_v3" | "smile_v4":
513+
self._locations = await self._request(LOCATIONS)
514+
case "smile_thermo_v1" | "smile_thermo_v3" | "smile_thermo_v4":
515+
self._appliances = await self._request(APPLIANCES)
516+
await self._update_domain_objects()
517+
case "smile_open_therm_v2" | "smile_open_therm_v3":
518+
self._appliances = await self._request(APPLIANCES)
519+
await self._update_domain_objects()
520+
self._modules = await self._request(MODULES)
521+
case "stretch_v2" | "stretch_v3":
522+
self._appliances = await self._request(APPLIANCES)
518523

519524
self.gw_data["notifications"] = self._notifications
520525

0 commit comments

Comments
 (0)