From b19223cb3790842fe4de2feec59f67286332f580 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 21 May 2020 02:18:45 -0500 Subject: [PATCH] Fix legacy Hunter Douglas PowerView devices (#35895) These devices are missing firmware information as the 1.0 firmware did not provide it. --- .../hunterdouglas_powerview/__init__.py | 22 ++++++++++-- .../hunterdouglas_powerview/const.py | 5 +++ .../hunterdouglas_powerview/userdata_v1.json | 34 +++++++++++++++++++ 3 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 tests/fixtures/hunterdouglas_powerview/userdata_v1.json diff --git a/homeassistant/components/hunterdouglas_powerview/__init__.py b/homeassistant/components/hunterdouglas_powerview/__init__.py index 7001425f306..935410d9351 100644 --- a/homeassistant/components/hunterdouglas_powerview/__init__.py +++ b/homeassistant/components/hunterdouglas_powerview/__init__.py @@ -31,9 +31,15 @@ from .const import ( DEVICE_REVISION, DEVICE_SERIAL_NUMBER, DOMAIN, + FIRMWARE_BUILD, FIRMWARE_IN_USERDATA, + FIRMWARE_SUB_REVISION, HUB_EXCEPTIONS, HUB_NAME, + LEGACY_DEVICE_BUILD, + LEGACY_DEVICE_MODEL, + LEGACY_DEVICE_REVISION, + LEGACY_DEVICE_SUB_REVISION, MAC_ADDRESS_IN_USERDATA, MAINPROCESSOR_IN_USERDATA_FIRMWARE, MODEL_IN_MAINPROCESSOR, @@ -159,9 +165,19 @@ async def async_get_device_info(pv_request): resources = await userdata.get_resources() userdata_data = resources[USER_DATA] - main_processor_info = userdata_data[FIRMWARE_IN_USERDATA][ - MAINPROCESSOR_IN_USERDATA_FIRMWARE - ] + if FIRMWARE_IN_USERDATA in userdata_data: + main_processor_info = userdata_data[FIRMWARE_IN_USERDATA][ + MAINPROCESSOR_IN_USERDATA_FIRMWARE + ] + else: + # Legacy devices + main_processor_info = { + REVISION_IN_MAINPROCESSOR: LEGACY_DEVICE_REVISION, + FIRMWARE_SUB_REVISION: LEGACY_DEVICE_SUB_REVISION, + FIRMWARE_BUILD: LEGACY_DEVICE_BUILD, + MODEL_IN_MAINPROCESSOR: LEGACY_DEVICE_MODEL, + } + return { DEVICE_NAME: base64_to_unicode(userdata_data[HUB_NAME]), DEVICE_MAC_ADDRESS: userdata_data[MAC_ADDRESS_IN_USERDATA], diff --git a/homeassistant/components/hunterdouglas_powerview/const.py b/homeassistant/components/hunterdouglas_powerview/const.py index 17ff3821a7a..e69fe319c0f 100644 --- a/homeassistant/components/hunterdouglas_powerview/const.py +++ b/homeassistant/components/hunterdouglas_powerview/const.py @@ -65,3 +65,8 @@ PV_ROOM_DATA = "pv_room_data" COORDINATOR = "coordinator" HUB_EXCEPTIONS = (asyncio.TimeoutError, PvApiConnectionError) + +LEGACY_DEVICE_SUB_REVISION = 1 +LEGACY_DEVICE_REVISION = 0 +LEGACY_DEVICE_BUILD = 0 +LEGACY_DEVICE_MODEL = "PV Hub1.0" diff --git a/tests/fixtures/hunterdouglas_powerview/userdata_v1.json b/tests/fixtures/hunterdouglas_powerview/userdata_v1.json new file mode 100644 index 00000000000..d97aca162f8 --- /dev/null +++ b/tests/fixtures/hunterdouglas_powerview/userdata_v1.json @@ -0,0 +1,34 @@ +{ + "userData" : { + "enableScheduledEvents" : true, + "staticIp" : false, + "sceneControllerCount" : 0, + "accessPointCount" : 0, + "shadeCount" : 5, + "ip" : "192.168.20.9", + "groupCount" : 9, + "scheduledEventCount" : 0, + "editingEnabled" : true, + "roomCount" : 5, + "setupCompleted" : false, + "sceneCount" : 18, + "sceneControllerMemberCount" : 0, + "mask" : "255.255.255.0", + "hubName" : "UG93ZXJWaWV3IEh1YiBHZW4gMQ==", + "rfID" : "0x8B2A", + "remoteConnectEnabled" : false, + "multiSceneMemberCount" : 0, + "rfStatus" : 0, + "serialNumber" : "REMOVED", + "undefinedShadeCount" : 0, + "sceneMemberCount" : 18, + "unassignedShadeCount" : 0, + "multiSceneCount" : 0, + "addressKind" : "newPrimary", + "gateway" : "192.168.20.1", + "localTimeDataSet" : true, + "dns" : "192.168.20.1", + "macAddress" : "00:00:00:00:00:eb", + "rfIDInt" : 35626 + } +}