diff --git a/README.rst b/README.rst index dd402aa..d152438 100644 --- a/README.rst +++ b/README.rst @@ -39,4 +39,10 @@ Changelog - Add Type 26, 27 & 28 - Skyline Panels - Force capability 1 for Type 44 - Twist -- Align class name standard \ No newline at end of file +- Align class name standard + +**v2.0.4** + +- Add Type 10 - SkyLift +- Handle calls to update shade position during maintenance +- Raise error directly on hub calls instead of logger diff --git a/aiopvapi/__version__.py b/aiopvapi/__version__.py index 8675ccd..e5662b7 100644 --- a/aiopvapi/__version__.py +++ b/aiopvapi/__version__.py @@ -1,3 +1,3 @@ """Aio PowerView api version.""" -__version__ = "2.0.3" +__version__ = "2.0.4" diff --git a/aiopvapi/helpers/aiorequest.py b/aiopvapi/helpers/aiorequest.py index 243f525..4fc7f60 100644 --- a/aiopvapi/helpers/aiorequest.py +++ b/aiopvapi/helpers/aiorequest.py @@ -66,8 +66,9 @@ async def get(self, url: str, params: str = None) -> dict: response = await self.websession.get(url, params=params) return await check_response(response, [200, 204]) except (asyncio.TimeoutError, aiohttp.ClientError) as error: - _LOGGER.error("Failed to communicate with PowerView hub: %s", error) - raise PvApiConnectionError + raise PvApiConnectionError( + f"Failed to communicate with PowerView hub: {error}" + ) finally: if response is not None: await response.release() @@ -81,8 +82,9 @@ async def post(self, url: str, data: dict = None): response = await self.websession.post(url, json=data) return await check_response(response, [200, 201]) except (asyncio.TimeoutError, aiohttp.ClientError) as error: - _LOGGER.error("Failed to communicate with PowerView hub: %s", error) - raise PvApiConnectionError + raise PvApiConnectionError( + f"Failed to communicate with PowerView hub: {error}" + ) finally: if response is not None: await response.release() @@ -103,8 +105,9 @@ async def put(self, url: str, data: dict = None): response = await self.websession.put(url, json=data) return await check_response(response, [200, 204]) except (asyncio.TimeoutError, aiohttp.ClientError) as error: - _LOGGER.error("Failed to communicate with PowerView hub: %s", error) - raise PvApiConnectionError + raise PvApiConnectionError( + f"Failed to communicate with PowerView hub: {error}" + ) finally: if response is not None: await response.release() @@ -125,8 +128,9 @@ async def delete(self, url: str, params: dict = None): response = await self.websession.delete(url, params=params) return await check_response(response, [200, 204]) except (asyncio.TimeoutError, aiohttp.ClientError) as error: - _LOGGER.error("Failed to communicate with PowerView hub: %s", error) - raise PvApiConnectionError + raise PvApiConnectionError( + f"Failed to communicate with PowerView hub: {error}" + ) finally: if response is not None: await response.release() diff --git a/aiopvapi/resources/shade.py b/aiopvapi/resources/shade.py index 6d065b9..e387de2 100644 --- a/aiopvapi/resources/shade.py +++ b/aiopvapi/resources/shade.py @@ -212,14 +212,18 @@ async def refresh(self): """Query the hub and the actual shade to get the most recent shade data. Including current shade position.""" raw_data = await self.request.get(self._resource_path, {"refresh": "true"}) - - self._raw_data = raw_data[ATTR_SHADE] + if isinstance(raw_data, bool): + _LOGGER.debug("No data available, hub undergoing maintenance. Please try again") + return + self._raw_data = raw_data.get(ATTR_SHADE) async def refresh_battery(self): """Query the hub and request the most recent battery state.""" raw_data = await self.request.get(self._resource_path, {"updateBatteryLevel": "true"}) - - self._raw_data = raw_data[ATTR_SHADE] + if isinstance(raw_data, bool): + _LOGGER.debug("No data available, hub undergoing maintenance. Please try again") + return + self._raw_data = raw_data.get(ATTR_SHADE) async def set_power_source(self, type): """Update the hub with the type of power source.""" @@ -272,6 +276,7 @@ class ShadeBottomUp(BaseShade): shade_type(4, "Roman"), shade_type(5, "Bottom Up"), shade_type(6, "Duette"), + shade_type(10, "Duette and Applause SkyLift"), shade_type(31, "Vignette"), shade_type(42, "M25T Roller Blind"), shade_type(49, "AC Roller"), diff --git a/readme.md b/readme.md index 6e20434..edcf488 100644 --- a/readme.md +++ b/readme.md @@ -50,6 +50,12 @@ Have a look at the examples folder for some guidance how to use it. - Force capability 1 for Type 44 - Twist - Align class name standard +### v2.0.4 + +- Add Type 10 - SkyLift +- Handle calls to update shade position during maintenance +- Raise error directly on hub calls instead of logger + ## Links ---