Fix for HomeKit controller state not updating after put (#25903)

This commit is contained in:
Jc2k 2019-08-13 09:09:55 +01:00 committed by Martin Hjelmare
parent 61b687edec
commit 34cde21876
2 changed files with 28 additions and 3 deletions

View File

@ -273,6 +273,12 @@ class HKDevice:
# connection was dropped.
return
self.process_new_events(new_values_dict)
_LOGGER.debug("Finished HomeKit controller update")
def process_new_events(self, new_values_dict):
"""Process events from accessory into HA state."""
self.available = True
for (aid, cid), value in new_values_dict.items():
@ -281,8 +287,6 @@ class HKDevice:
self.hass.helpers.dispatcher.async_dispatcher_send(self.signal_state_updated)
_LOGGER.debug("Finished HomeKit controller update")
async def get_characteristics(self, *args, **kwargs):
"""Read latest state from homekit accessory."""
async with self.pairing_lock:
@ -298,10 +302,30 @@ class HKDevice:
chars.append((row["aid"], row["iid"], row["value"]))
async with self.pairing_lock:
await self.hass.async_add_executor_job(
results = await self.hass.async_add_executor_job(
self.pairing.put_characteristics, chars
)
# Feed characteristics back into HA and update the current state
# results will only contain failures, so anythin in characteristics
# but not in results was applied successfully - we can just have HA
# reflect the change immediately.
new_entity_state = {}
for row in characteristics:
key = (row["aid"], row["iid"])
# If the key was returned by put_characteristics() then the
# change didnt work
if key in results:
continue
# Otherwise it was accepted and we can apply the change to
# our state
new_entity_state[key] = {"value": row["value"]}
self.process_new_events(new_entity_state)
@property
def unique_id(self):
"""

View File

@ -74,6 +74,7 @@ class FakePairing:
if char.iid != cid:
continue
char.set_value(new_val)
return {}
class FakeController: