1 """Support for SimpliSafe locks."""
3 from __future__
import annotations
7 from simplipy.device.lock
import Lock, LockStates
8 from simplipy.errors
import SimplipyError
9 from simplipy.system.v3
import SystemV3
10 from simplipy.websocket
import EVENT_LOCK_LOCKED, EVENT_LOCK_UNLOCKED, WebsocketEvent
18 from .
import SimpliSafe
19 from .const
import DOMAIN, LOGGER
20 from .entity
import SimpliSafeEntity
22 ATTR_LOCK_LOW_BATTERY =
"lock_low_battery"
23 ATTR_PIN_PAD_LOW_BATTERY =
"pin_pad_low_battery"
25 STATE_MAP_FROM_WEBSOCKET_EVENT = {
26 EVENT_LOCK_LOCKED:
True,
27 EVENT_LOCK_UNLOCKED:
False,
30 WEBSOCKET_EVENTS_TO_LISTEN_FOR = (EVENT_LOCK_LOCKED, EVENT_LOCK_UNLOCKED)
34 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
36 """Set up SimpliSafe locks based on a config entry."""
37 simplisafe = hass.data[DOMAIN][entry.entry_id]
38 locks: list[SimpliSafeLock] = []
40 for system
in simplisafe.systems.values():
41 if system.version == 2:
42 LOGGER.warning(
"Skipping lock setup for V2 system: %s", system.system_id)
46 SimpliSafeLock(simplisafe, system, lock)
for lock
in system.locks.values()
53 """Define a SimpliSafe lock."""
58 def __init__(self, simplisafe: SimpliSafe, system: SystemV3, lock: Lock) ->
None:
64 additional_websocket_events=WEBSOCKET_EVENTS_TO_LISTEN_FOR,
71 except SimplipyError
as err:
73 f
'Error while locking "{self._device.name}": {err}'
80 """Unlock the lock."""
83 except SimplipyError
as err:
85 f
'Error while unlocking "{self._device.name}": {err}'
93 """Update the entity with the provided REST API data."""
99 ATTR_LOCK_LOW_BATTERY: self.
_device_device.lock_low_battery,
100 ATTR_PIN_PAD_LOW_BATTERY: self.
_device_device.pin_pad_low_battery,
106 """Update the entity when new data comes from the websocket."""
107 assert event.event_type
109 if state := STATE_MAP_FROM_WEBSOCKET_EVENT.get(event.event_type)
is not None:
113 LOGGER.error(
"Unknown lock websocket event: %s", event.event_type)
None async_reset_error_count(self)
_attr_extra_state_attributes
None async_increment_error_count(self)
None async_update_from_rest_api(self)
None async_unlock(self, **Any kwargs)
None __init__(self, SimpliSafe simplisafe, SystemV3 system, Lock lock)
None async_update_from_websocket_event(self, WebsocketEvent event)
None async_lock(self, **Any kwargs)
None async_write_ha_state(self)
IssData update(pyiss.ISS iss)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)