Skip to content

Commit

Permalink
Fix august lock state when API reports locking and locked with the sa…
Browse files Browse the repository at this point in the history
…me timestamp (home-assistant#92276)
  • Loading branch information
bdraco authored Apr 30, 2023
1 parent 4fcf05c commit ed286fc
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 17 deletions.
10 changes: 5 additions & 5 deletions homeassistant/components/august/activity.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import logging

from aiohttp import ClientError
from yalexs.util import get_latest_activity

from homeassistant.core import callback
from homeassistant.helpers.debounce import Debouncer
Expand Down Expand Up @@ -169,12 +170,11 @@ def async_process_newer_device_activities(self, activities):
device_id = activity.device_id
activity_type = activity.activity_type
device_activities = self._latest_activities.setdefault(device_id, {})
lastest_activity = device_activities.get(activity_type)

# Ignore activities that are older than the latest one
# Ignore activities that are older than the latest one unless it is a non
# locking or unlocking activity with the exact same start time.
if (
lastest_activity
and lastest_activity.activity_start_time >= activity.activity_start_time
get_latest_activity(activity, device_activities.get(activity_type))
!= activity
):
continue

Expand Down
27 changes: 18 additions & 9 deletions homeassistant/components/august/lock.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from aiohttp import ClientResponseError
from yalexs.activity import SOURCE_PUBNUB, ActivityType
from yalexs.lock import LockStatus
from yalexs.util import update_lock_detail_from_activity
from yalexs.util import get_latest_activity, update_lock_detail_from_activity

from homeassistant.components.lock import ATTR_CHANGED_BY, LockEntity
from homeassistant.config_entries import ConfigEntry
Expand Down Expand Up @@ -90,17 +90,26 @@ def _update_lock_status_from_detail(self):
@callback
def _update_from_data(self):
"""Get the latest state of the sensor and update activity."""
lock_activity = self._data.activity_stream.get_latest_device_activity(
self._device_id,
{ActivityType.LOCK_OPERATION, ActivityType.LOCK_OPERATION_WITHOUT_OPERATOR},
activity_stream = self._data.activity_stream
device_id = self._device_id
if lock_activity := activity_stream.get_latest_device_activity(
device_id,
{ActivityType.LOCK_OPERATION},
):
self._attr_changed_by = lock_activity.operated_by

lock_activity_without_operator = activity_stream.get_latest_device_activity(
device_id,
{ActivityType.LOCK_OPERATION_WITHOUT_OPERATOR},
)

if lock_activity is not None:
self._attr_changed_by = lock_activity.operated_by
update_lock_detail_from_activity(self._detail, lock_activity)
# If the source is pubnub the lock must be online since its a live update
if lock_activity.source == SOURCE_PUBNUB:
if latest_activity := get_latest_activity(
lock_activity_without_operator, lock_activity
):
if latest_activity.source == SOURCE_PUBNUB:
# If the source is pubnub the lock must be online since its a live update
self._detail.set_online(True)
update_lock_detail_from_activity(self._detail, latest_activity)

bridge_activity = self._data.activity_stream.get_latest_device_activity(
self._device_id, {ActivityType.BRIDGE_OPERATION}
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/august/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@
"documentation": "https://www.home-assistant.io/integrations/august",
"iot_class": "cloud_push",
"loggers": ["pubnub", "yalexs"],
"requirements": ["yalexs==1.3.2", "yalexs-ble==2.1.16"]
"requirements": ["yalexs==1.3.3", "yalexs-ble==2.1.16"]
}
2 changes: 1 addition & 1 deletion requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2679,7 +2679,7 @@ yalesmartalarmclient==0.3.9
yalexs-ble==2.1.16

# homeassistant.components.august
yalexs==1.3.2
yalexs==1.3.3

# homeassistant.components.yeelight
yeelight==0.7.10
Expand Down
2 changes: 1 addition & 1 deletion requirements_test_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1943,7 +1943,7 @@ yalesmartalarmclient==0.3.9
yalexs-ble==2.1.16

# homeassistant.components.august
yalexs==1.3.2
yalexs==1.3.3

# homeassistant.components.yeelight
yeelight==0.7.10
Expand Down

0 comments on commit ed286fc

Please sign in to comment.