1 """August util functions."""
3 from __future__
import annotations
5 from datetime
import datetime, timedelta
6 from functools
import partial
9 from yalexs.activity
import ACTION_DOORBELL_CALL_MISSED, Activity, ActivityType
10 from yalexs.doorbell
import DoorbellDetail
11 from yalexs.lock
import LockDetail
12 from yalexs.manager.const
import ACTIVITY_UPDATE_INTERVAL
17 from .
import AugustData
19 TIME_TO_DECLARE_DETECTION =
timedelta(seconds=ACTIVITY_UPDATE_INTERVAL.total_seconds())
24 """Create an aiohttp session for the august integration."""
28 return aiohttp_client.async_create_clientsession(hass)
32 activities: set[ActivityType], data: AugustData, detail: DoorbellDetail | LockDetail
34 """Get the latest state of the sensor."""
35 stream = data.activity_stream
36 if latest := stream.get_latest_device_activity(detail.device_id, activities):
41 _RING_ACTIVITIES = {ActivityType.DOORBELL_DING}
45 data: AugustData, detail: DoorbellDetail | LockDetail
47 """Get the ring/ding state."""
48 stream = data.activity_stream
49 latest = stream.get_latest_device_activity(detail.device_id, _RING_ACTIVITIES)
50 if latest
is None or (
51 data.push_updates_connected
and latest.action == ACTION_DOORBELL_CALL_MISSED
57 retrieve_doorbell_motion_activity = partial(
58 retrieve_time_based_activity, {ActivityType.DOORBELL_MOTION}
63 """Get the latest state of the sensor."""
64 start = latest.activity_start_time
65 end = latest.activity_end_time + TIME_TO_DECLARE_DETECTION
66 if start <= datetime.now() <= end:
72 data: AugustData, detail: DoorbellDetail | LockDetail
74 """Get the latest state of the sensor."""
78 if isinstance(detail, DoorbellDetail):
79 return detail.is_online
or detail.is_standby
80 return detail.bridge_is_online
bool retrieve_online_state(AugustData data, DoorbellDetail|LockDetail detail)
Activity|None retrieve_ding_activity(AugustData data, DoorbellDetail|LockDetail detail)
Activity|None _activity_time_based(Activity latest)
Activity|None retrieve_time_based_activity(set[ActivityType] activities, AugustData data, DoorbellDetail|LockDetail detail)
aiohttp.ClientSession async_create_august_clientsession(HomeAssistant hass)