Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
dc86db4
Add Top/Down Bottom/Up support to powerview
kingy444 Nov 18, 2021
70310b7
Add signal strength sensor to powerview
kingy444 Dec 2, 2021
892742a
Fix creating battery sensor on hardwired blinds and optional creation
kingy444 Dec 2, 2021
98c7e40
Rebase to dev
kingy444 Dec 26, 2021
ab4ec70
Merge branch 'home-assistant-dev' into add-powerview-topdown
kingy444 Dec 26, 2021
07264c0
Merge pull request #1 from home-assistant/dev
kingy444 Dec 26, 2021
9ff115a
Rebase to dev
kingy444 Jan 19, 2022
73ee22d
Merge branch 'home-assistant-dev' into add-powerview-topdown
kingy444 Jan 19, 2022
0484f67
Merge pull request #2 from home-assistant/dev
kingy444 Jan 19, 2022
a47bd3d
Remove options flow and set disabled by default
kingy444 Jan 19, 2022
ef66ccb
Merge branch 'add-powerview-topdown' of https://github.com/kingy444/c…
kingy444 Jan 19, 2022
a948b82
Resolve missed options flow code
kingy444 Jan 19, 2022
f7008f0
Update homeassistant/components/hunterdouglas_powerview/sensor.py
kingy444 Jan 19, 2022
c66533d
Update homeassistant/components/hunterdouglas_powerview/sensor.py
kingy444 Jan 19, 2022
bc58a7a
Set constant and move to attribute from property
kingy444 Jan 19, 2022
ffb6444
Fix shade matching to description
kingy444 Jan 19, 2022
58a7c3e
Remove unused logging
kingy444 Jan 19, 2022
3ca6838
Move Top Down Shades to own class
kingy444 Feb 5, 2022
8abb489
Handle empty data from 204/423 response
kingy444 Feb 22, 2022
30f03b4
Move signalStrength to constant
kingy444 Feb 22, 2022
8f8c0cd
Align upstream
kingy444 Feb 22, 2022
8e63272
Merge branch 'home-assistant-dev' into add-powerview-topdown
kingy444 Feb 22, 2022
bf61778
Extend timeout for hub maintenance
kingy444 Mar 17, 2022
a702354
Move top shade to own class
kingy444 May 4, 2022
321d24d
Merge Upstream
kingy444 May 4, 2022
3ffb228
Merge branch 'home-assistant-dev' into add-powerview-topdown
kingy444 May 4, 2022
8b4abc0
Merge conflicts to upstream
kingy444 May 9, 2022
fac1ba5
Merge upstream changes
kingy444 May 9, 2022
a2541ae
Merge branch 'home-assistant-dev' into add-powerview-topdown
kingy444 May 9, 2022
ca4638c
Merge pull request #5 from home-assistant/dev
kingy444 May 9, 2022
709681d
Catch if all shades are hardwired
kingy444 May 9, 2022
c8f8e3d
Merge branch 'add-powerview-topdown' of https://github.com/kingy444/c…
kingy444 May 9, 2022
e3a6eb9
Fix close cover for top shade
kingy444 May 9, 2022
be326ef
Remove changes unrelated to tdbu
kingy444 May 9, 2022
1719925
Add BatterKind back
kingy444 May 9, 2022
b4e7d42
Apply suggestions per pull request
kingy444 May 9, 2022
0262b88
Merge branch 'dev' into add-powerview-topdown
bdraco May 9, 2022
415cbf5
Move to coordinator values
kingy444 May 10, 2022
2092e84
Merge branch 'add-powerview-topdown' of https://github.com/kingy444/c…
kingy444 May 10, 2022
55aebd7
Fix current vane position
kingy444 May 12, 2022
c1c19df
Better handling of tdbu shades
kingy444 May 12, 2022
e3c5fc6
Merge branch 'dev' into add-powerview-topdown
bdraco May 17, 2022
2618dac
Merge branch 'dev' into add-powerview-topdown
bdraco May 18, 2022
6a0bc83
Update Clamping
kingy444 May 22, 2022
85b9758
Merge branch 'dev' into add-powerview-topdown
bdraco May 22, 2022
631467a
Implement new getter format for all poskinds
kingy444 May 23, 2022
a64f656
Update position processing
kingy444 May 23, 2022
e577eff
Move to one set_position and correct clamping
kingy444 May 23, 2022
45d9dc8
set_position now construct_shade_position
kingy444 May 23, 2022
101893b
update _clamp bottom
kingy444 May 23, 2022
bf86b1b
prevent coordinator from overriding data
bdraco May 23, 2022
ac69c23
Move coordination of powerview api data into a single class
bdraco May 28, 2022
10fb7f4
init with empty data
bdraco May 28, 2022
cd2679b
naming
bdraco May 28, 2022
a066f39
refactor
bdraco May 28, 2022
7b1422d
rc
bdraco May 28, 2022
f5e9d08
cleanup
bdraco May 28, 2022
786df35
move to base class
bdraco May 28, 2022
6411df5
abc
bdraco May 28, 2022
c4220ef
Merge datacoordinator changes
kingy444 May 28, 2022
22ca42e
Avoid updating internal state until request is successful
bdraco May 28, 2022
feefe06
Open Close positions and transition steps
kingy444 May 30, 2022
d81908e
Merge branch 'dev' into add-powerview-topdown
bdraco May 30, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -506,10 +506,13 @@ omit =
homeassistant/components/huawei_lte/switch.py
homeassistant/components/hue/light.py
homeassistant/components/hunterdouglas_powerview/__init__.py
homeassistant/components/hunterdouglas_powerview/scene.py
homeassistant/components/hunterdouglas_powerview/sensor.py
homeassistant/components/hunterdouglas_powerview/coordinator.py
homeassistant/components/hunterdouglas_powerview/cover.py
homeassistant/components/hunterdouglas_powerview/entity.py
homeassistant/components/hunterdouglas_powerview/scene.py
homeassistant/components/hunterdouglas_powerview/sensor.py
homeassistant/components/hunterdouglas_powerview/shade_data.py
homeassistant/components/hunterdouglas_powerview/util.py
homeassistant/components/hvv_departures/binary_sensor.py
homeassistant/components/hvv_departures/sensor.py
homeassistant/components/hvv_departures/__init__.py
Expand Down
4 changes: 2 additions & 2 deletions CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -467,8 +467,8 @@ build.json @home-assistant/supervisor
/tests/components/huisbaasje/ @dennisschroer
/homeassistant/components/humidifier/ @home-assistant/core @Shulyaka
/tests/components/humidifier/ @home-assistant/core @Shulyaka
/homeassistant/components/hunterdouglas_powerview/ @bdraco @trullock
/tests/components/hunterdouglas_powerview/ @bdraco @trullock
/homeassistant/components/hunterdouglas_powerview/ @bdraco @kingy444 @trullock
/tests/components/hunterdouglas_powerview/ @bdraco @kingy444 @trullock
/homeassistant/components/hvv_departures/ @vigonotion
/tests/components/hvv_departures/ @vigonotion
/homeassistant/components/hydrawise/ @ptcryan
Expand Down
43 changes: 11 additions & 32 deletions homeassistant/components/hunterdouglas_powerview/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
"""The Hunter Douglas PowerView integration."""
from datetime import timedelta
import logging

from aiopvapi.helpers.aiorequest import AioRequest
from aiopvapi.helpers.api_base import ApiEntryPoint
from aiopvapi.helpers.constants import ATTR_ID
from aiopvapi.helpers.tools import base64_to_unicode
from aiopvapi.rooms import Rooms
from aiopvapi.scenes import Scenes
Expand All @@ -14,11 +12,10 @@

from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, Platform
from homeassistant.core import HomeAssistant, callback
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed

from .const import (
API_PATH_FWVERSION,
Expand Down Expand Up @@ -50,6 +47,9 @@
SHADE_DATA,
USER_DATA,
)
from .coordinator import PowerviewShadeUpdateCoordinator
from .shade_data import PowerviewShadeData
from .util import async_map_data_by_id

PARALLEL_UPDATES = 1

Expand All @@ -64,7 +64,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:

config = entry.data

hub_address = config.get(CONF_HOST)
hub_address = config[CONF_HOST]
websession = async_get_clientsession(hass)

pv_request = AioRequest(hub_address, loop=hass.loop, websession=websession)
Expand All @@ -75,17 +75,17 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:

async with async_timeout.timeout(10):
rooms = Rooms(pv_request)
room_data = _async_map_data_by_id((await rooms.get_resources())[ROOM_DATA])
room_data = async_map_data_by_id((await rooms.get_resources())[ROOM_DATA])

async with async_timeout.timeout(10):
scenes = Scenes(pv_request)
scene_data = _async_map_data_by_id(
scene_data = async_map_data_by_id(
(await scenes.get_resources())[SCENE_DATA]
)

async with async_timeout.timeout(10):
shades = Shades(pv_request)
shade_data = _async_map_data_by_id(
shade_data = async_map_data_by_id(
(await shades.get_resources())[SHADE_DATA]
)
except HUB_EXCEPTIONS as err:
Expand All @@ -95,24 +95,9 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
if not device_info:
raise ConfigEntryNotReady(f"Unable to initialize PowerView hub: {hub_address}")

async def async_update_data():
"""Fetch data from shade endpoint."""
async with async_timeout.timeout(10):
shade_entries = await shades.get_resources()
if not shade_entries:
raise UpdateFailed("Failed to fetch new shade data.")
return _async_map_data_by_id(shade_entries[SHADE_DATA])

coordinator = DataUpdateCoordinator(
hass,
_LOGGER,
name="powerview hub",
update_method=async_update_data,
update_interval=timedelta(seconds=60),
)

hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = {
coordinator = PowerviewShadeUpdateCoordinator(hass, shades, hub_address)
coordinator.async_set_updated_data(PowerviewShadeData())
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = {
PV_API: pv_request,
PV_ROOM_DATA: room_data,
PV_SCENE_DATA: scene_data,
Expand Down Expand Up @@ -155,12 +140,6 @@ async def async_get_device_info(pv_request):
}


@callback
def _async_map_data_by_id(data):
"""Return a dict with the key being the id for a list of entries."""
return {entry[ATTR_ID]: entry for entry in data}


async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
Expand Down
9 changes: 6 additions & 3 deletions homeassistant/components/hunterdouglas_powerview/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

DOMAIN = "hunterdouglas_powerview"


MANUFACTURER = "Hunter Douglas"

HUB_ADDRESS = "address"
Expand Down Expand Up @@ -48,7 +47,6 @@
ROOM_NAME_UNICODE = "name_unicode"
ROOM_ID = "id"

SHADE_RESPONSE = "shade"
SHADE_BATTERY_LEVEL = "batteryStrength"
SHADE_BATTERY_LEVEL_MAX = 200

Expand Down Expand Up @@ -81,5 +79,10 @@
FIRMWARE_NAME: LEGACY_DEVICE_MODEL,
}


API_PATH_FWVERSION = "api/fwversion"

POS_KIND_NONE = 0
POS_KIND_PRIMARY = 1
POS_KIND_SECONDARY = 2
POS_KIND_VANE = 3
POS_KIND_ERROR = 4
44 changes: 44 additions & 0 deletions homeassistant/components/hunterdouglas_powerview/coordinator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
"""Coordinate data for powerview devices."""
from __future__ import annotations

from datetime import timedelta
import logging

from aiopvapi.shades import Shades
import async_timeout

from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed

from .const import SHADE_DATA
from .shade_data import PowerviewShadeData

_LOGGER = logging.getLogger(__name__)


class PowerviewShadeUpdateCoordinator(DataUpdateCoordinator[PowerviewShadeData]):
"""DataUpdateCoordinator to gather data from a powerview hub."""

def __init__(
self,
hass: HomeAssistant,
shades: Shades,
hub_address: str,
) -> None:
"""Initialize DataUpdateCoordinator to gather data for specific SmartPlug."""
self.shades = shades
super().__init__(
hass,
_LOGGER,
name=f"powerview hub {hub_address}",
update_interval=timedelta(seconds=60),
)

async def _async_update_data(self) -> PowerviewShadeData:
"""Fetch data from shade endpoint."""
async with async_timeout.timeout(10):
shade_entries = await self.shades.get_resources()
if not shade_entries:
raise UpdateFailed("Failed to fetch new shade data")
self.data.store_group_data(shade_entries[SHADE_DATA])
return self.data
Loading