From bd32a1fabbc106d7ec25e138b49b4e18f7eed3fb Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 23 May 2020 12:56:27 -0500 Subject: [PATCH] Fix shade compatibility with hunter douglas powerview 1.0 hubs (#36040) --- .../hunterdouglas_powerview/cover.py | 6 +++++ .../hunterdouglas_powerview/entity.py | 22 ++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/hunterdouglas_powerview/cover.py b/homeassistant/components/hunterdouglas_powerview/cover.py index e14142677e3..8135b4a8c77 100644 --- a/homeassistant/components/hunterdouglas_powerview/cover.py +++ b/homeassistant/components/hunterdouglas_powerview/cover.py @@ -68,6 +68,12 @@ async def async_setup_entry(hass, entry, async_add_entities): except asyncio.TimeoutError: # Forced refresh is not required for setup pass + if ATTR_POSITION_DATA not in shade.raw_data: + _LOGGER.info( + "The %s shade was skipped because it is missing position data", + name_before_refresh, + ) + continue entities.append( PowerViewShade( shade, name_before_refresh, room_data, coordinator, device_info diff --git a/homeassistant/components/hunterdouglas_powerview/entity.py b/homeassistant/components/hunterdouglas_powerview/entity.py index 3c98eeaf615..f89ca28023b 100644 --- a/homeassistant/components/hunterdouglas_powerview/entity.py +++ b/homeassistant/components/hunterdouglas_powerview/entity.py @@ -74,6 +74,17 @@ class ShadeEntity(HDEntity): @property def device_info(self): """Return the device_info of the device.""" + + device_info = { + "identifiers": {(DOMAIN, self._shade.id)}, + "name": self._shade_name, + "manufacturer": MANUFACTURER, + "via_device": (DOMAIN, self._device_info[DEVICE_SERIAL_NUMBER]), + } + + if FIRMWARE_IN_SHADE not in self._shade.raw_data: + return device_info + firmware = self._shade.raw_data[FIRMWARE_IN_SHADE] sw_version = f"{firmware[FIRMWARE_REVISION]}.{firmware[FIRMWARE_SUB_REVISION]}.{firmware[FIRMWARE_BUILD]}" model = self._shade.raw_data[ATTR_TYPE] @@ -82,11 +93,6 @@ class ShadeEntity(HDEntity): model = shade.description break - return { - "identifiers": {(DOMAIN, self._shade.id)}, - "name": self._shade_name, - "model": str(model), - "sw_version": sw_version, - "manufacturer": MANUFACTURER, - "via_device": (DOMAIN, self._device_info[DEVICE_SERIAL_NUMBER]), - } + device_info["sw_version"] = sw_version + device_info["model"] = model + return device_info