1 """Support for locks through the SmartThings cloud API."""
3 from __future__
import annotations
5 from collections.abc
import Sequence
8 from pysmartthings
import Attribute, Capability
15 from .const
import DATA_BROKERS, DOMAIN
16 from .entity
import SmartThingsEntity
18 ST_STATE_LOCKED =
"locked"
21 "codeName":
"code_name",
22 "lockName":
"lock_name",
25 "usedCode":
"used_code",
31 config_entry: ConfigEntry,
32 async_add_entities: AddEntitiesCallback,
34 """Add locks for a config entry."""
35 broker = hass.data[DOMAIN][DATA_BROKERS][config_entry.entry_id]
38 for device
in broker.devices.values()
39 if broker.any_assigned(device.device_id,
"lock")
44 """Return all capabilities supported if minimum required are present."""
45 if Capability.lock
in capabilities:
46 return [Capability.lock]
51 """Define a SmartThings lock."""
54 """Lock the device."""
59 """Unlock the device."""
65 """Return true if lock is locked."""
66 return self.
_device_device.status.lock == ST_STATE_LOCKED
70 """Return device specific state attributes."""
72 status = self.
_device_device.status.attributes[Attribute.lock]
74 state_attrs[
"lock_state"] = status.value
75 if isinstance(status.data, dict):
76 for st_attr, ha_attr
in ST_LOCK_ATTR_MAP.items():
77 if (data_val := status.data.get(st_attr))
is not None:
78 state_attrs[ha_attr] = data_val
bool|None is_locked(self)
None async_unlock(self, **Any kwargs)
None unlock(self, **Any kwargs)
None lock(self, **Any kwargs)
None async_lock(self, **Any kwargs)
None async_write_ha_state(self)
Mapping[str, Any]|None extra_state_attributes(self)
Sequence[str]|None get_capabilities(Sequence[str] capabilities)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)