Homekit controller BLE groundwork (#20538)
* Define the characteristics to poll (or subscribe to) up front * Configure characteristics immediately instead of during first poll * Do as much cover configuration upfront as possible * Remove test workaround as no longer needed * Remove switch code that is already handled by HomeKitEntity * Remove lock code already handled by HomeKitEntity * Remove light code already handled by HomeKitEntity * Remove alarm code already handled by HomeKitEntity * Remove climate code already handled by HomeKitEntity
This commit is contained in:
parent
995758b8ac
commit
41c1997b88
9 changed files with 177 additions and 72 deletions
|
@ -62,7 +62,6 @@ class HomeKitGarageDoorCover(HomeKitEntity, CoverDevice):
|
|||
def __init__(self, accessory, discovery_info):
|
||||
"""Initialise the Cover."""
|
||||
super().__init__(accessory, discovery_info)
|
||||
self._name = None
|
||||
self._state = None
|
||||
self._obstruction_detected = None
|
||||
self.lock_state = None
|
||||
|
@ -72,6 +71,20 @@ class HomeKitGarageDoorCover(HomeKitEntity, CoverDevice):
|
|||
"""Define this cover as a garage door."""
|
||||
return 'garage'
|
||||
|
||||
def get_characteristic_types(self):
|
||||
"""Define the homekit characteristics the entity cares about."""
|
||||
# pylint: disable=import-error
|
||||
from homekit.model.characteristics import CharacteristicsTypes
|
||||
return [
|
||||
CharacteristicsTypes.DOOR_STATE_CURRENT,
|
||||
CharacteristicsTypes.DOOR_STATE_TARGET,
|
||||
CharacteristicsTypes.OBSTRUCTION_DETECTED,
|
||||
CharacteristicsTypes.NAME,
|
||||
]
|
||||
|
||||
def _setup_name(self, char):
|
||||
self._name = char['value']
|
||||
|
||||
def update_characteristics(self, characteristics):
|
||||
"""Synchronise the Cover state with Home Assistant."""
|
||||
# pylint: disable=import-error
|
||||
|
@ -81,18 +94,9 @@ class HomeKitGarageDoorCover(HomeKitEntity, CoverDevice):
|
|||
ctype = characteristic['type']
|
||||
ctype = CharacteristicsTypes.get_short(ctype)
|
||||
if ctype == "door-state.current":
|
||||
self._chars['door-state.current'] = \
|
||||
characteristic['iid']
|
||||
self._state = CURRENT_GARAGE_STATE_MAP[characteristic['value']]
|
||||
elif ctype == "door-state.target":
|
||||
self._chars['door-state.target'] = \
|
||||
characteristic['iid']
|
||||
elif ctype == "obstruction-detected":
|
||||
self._chars['obstruction-detected'] = characteristic['iid']
|
||||
self._obstruction_detected = characteristic['value']
|
||||
elif ctype == "name":
|
||||
self._chars['name'] = characteristic['iid']
|
||||
self._name = characteristic['value']
|
||||
|
||||
@property
|
||||
def available(self):
|
||||
|
@ -151,7 +155,6 @@ class HomeKitWindowCover(HomeKitEntity, CoverDevice):
|
|||
def __init__(self, accessory, discovery_info):
|
||||
"""Initialise the Cover."""
|
||||
super().__init__(accessory, discovery_info)
|
||||
self._name = None
|
||||
self._state = None
|
||||
self._position = None
|
||||
self._tilt_position = None
|
||||
|
@ -164,6 +167,26 @@ class HomeKitWindowCover(HomeKitEntity, CoverDevice):
|
|||
"""Return True if entity is available."""
|
||||
return self._state is not None
|
||||
|
||||
def get_characteristic_types(self):
|
||||
"""Define the homekit characteristics the entity cares about."""
|
||||
# pylint: disable=import-error
|
||||
from homekit.model.characteristics import CharacteristicsTypes
|
||||
return [
|
||||
CharacteristicsTypes.POSITION_STATE,
|
||||
CharacteristicsTypes.POSITION_CURRENT,
|
||||
CharacteristicsTypes.POSITION_TARGET,
|
||||
CharacteristicsTypes.POSITION_HOLD,
|
||||
CharacteristicsTypes.VERTICAL_TILT_CURRENT,
|
||||
CharacteristicsTypes.VERTICAL_TILT_TARGET,
|
||||
CharacteristicsTypes.HORIZONTAL_TILT_CURRENT,
|
||||
CharacteristicsTypes.HORIZONTAL_TILT_TARGET,
|
||||
CharacteristicsTypes.OBSTRUCTION_DETECTED,
|
||||
CharacteristicsTypes.NAME,
|
||||
]
|
||||
|
||||
def _setup_name(self, char):
|
||||
self._name = char['value']
|
||||
|
||||
def update_characteristics(self, characteristics):
|
||||
"""Synchronise the Cover state with Home Assistant."""
|
||||
# pylint: disable=import-error
|
||||
|
@ -173,43 +196,22 @@ class HomeKitWindowCover(HomeKitEntity, CoverDevice):
|
|||
ctype = characteristic['type']
|
||||
ctype = CharacteristicsTypes.get_short(ctype)
|
||||
if ctype == "position.state":
|
||||
self._chars['position.state'] = \
|
||||
characteristic['iid']
|
||||
if 'value' in characteristic:
|
||||
self._state = \
|
||||
CURRENT_WINDOW_STATE_MAP[characteristic['value']]
|
||||
elif ctype == "position.current":
|
||||
self._chars['position.current'] = \
|
||||
characteristic['iid']
|
||||
self._position = characteristic['value']
|
||||
elif ctype == "position.target":
|
||||
self._chars['position.target'] = \
|
||||
characteristic['iid']
|
||||
elif ctype == "position.hold":
|
||||
self._chars['position.hold'] = characteristic['iid']
|
||||
if 'value' in characteristic:
|
||||
self._hold = characteristic['value']
|
||||
elif ctype == "vertical-tilt.current":
|
||||
self._chars['vertical-tilt.current'] = characteristic['iid']
|
||||
if characteristic['value'] is not None:
|
||||
self._tilt_position = characteristic['value']
|
||||
elif ctype == "horizontal-tilt.current":
|
||||
self._chars['horizontal-tilt.current'] = characteristic['iid']
|
||||
if characteristic['value'] is not None:
|
||||
self._tilt_position = characteristic['value']
|
||||
elif ctype == "vertical-tilt.target":
|
||||
self._chars['vertical-tilt.target'] = \
|
||||
characteristic['iid']
|
||||
elif ctype == "horizontal-tilt.target":
|
||||
self._chars['horizontal-tilt.target'] = \
|
||||
characteristic['iid']
|
||||
elif ctype == "obstruction-detected":
|
||||
self._chars['obstruction-detected'] = characteristic['iid']
|
||||
self._obstruction_detected = characteristic['value']
|
||||
elif ctype == "name":
|
||||
self._chars['name'] = characteristic['iid']
|
||||
if 'value' in characteristic:
|
||||
self._name = characteristic['value']
|
||||
|
||||
@property
|
||||
def supported_features(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue