Cleanup August activity processing and add tests (#31774)

* Update py-august to 0.12.0

* Upstream update also resolves issue #28960
This commit is contained in:
J. Nick Koston 2020-02-12 17:35:07 -06:00 committed by GitHub
parent 834acd85d3
commit 6879105b14
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 378 additions and 52 deletions

View file

@ -2,7 +2,7 @@
from datetime import datetime, timedelta
import logging
from august.activity import ActivityType
from august.activity import ACTIVITY_ACTION_STATES, ActivityType
from august.lock import LockDoorStatus
from homeassistant.components.binary_sensor import BinarySensorDevice
@ -138,12 +138,12 @@ class AugustDoorBinarySensor(BinarySensorDevice):
self._state = self._state == LockDoorStatus.OPEN
activity = self._data.get_latest_device_activity(
door_activity = self._data.get_latest_device_activity(
self._door.device_id, ActivityType.DOOR_OPERATION
)
if activity is not None:
self._sync_door_activity(activity)
if door_activity is not None:
self._sync_door_activity(door_activity)
def _update_door_state(self, door_state, update_start_time):
new_state = door_state == LockDoorStatus.OPEN
@ -153,7 +153,7 @@ class AugustDoorBinarySensor(BinarySensorDevice):
self._door.device_id, door_state, update_start_time
)
def _sync_door_activity(self, activity):
def _sync_door_activity(self, door_activity):
"""Check the activity for the latest door open/close activity (events).
We use this to determine the door state in between calls to the lock
@ -162,25 +162,26 @@ class AugustDoorBinarySensor(BinarySensorDevice):
last_door_state_update_time_utc = self._data.get_last_door_state_update_time_utc(
self._door.device_id
)
activity_end_time_utc = dt.as_utc(activity.activity_end_time)
activity_end_time_utc = dt.as_utc(door_activity.activity_end_time)
if activity_end_time_utc > last_door_state_update_time_utc:
_LOGGER.debug(
"The activity log has new events for %s: [action=%s] [activity_end_time_utc=%s] > [last_door_state_update_time_utc=%s]",
self.name,
activity.action,
door_activity.action,
activity_end_time_utc,
last_door_state_update_time_utc,
)
activity_start_time_utc = dt.as_utc(activity.activity_start_time)
if activity.action == "doorclosed":
self._update_door_state(LockDoorStatus.CLOSED, activity_start_time_utc)
elif activity.action == "dooropen":
self._update_door_state(LockDoorStatus.OPEN, activity_start_time_utc)
activity_start_time_utc = dt.as_utc(door_activity.activity_start_time)
if door_activity.action in ACTIVITY_ACTION_STATES:
self._update_door_state(
ACTIVITY_ACTION_STATES[door_activity.action],
activity_start_time_utc,
)
else:
_LOGGER.info(
"Unhandled door activity action %s for %s",
activity.action,
door_activity.action,
self.name,
)