Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 24 additions & 12 deletions homeassistant/components/lock/sesame.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,46 +25,53 @@


# pylint: disable=unused-argument
def setup_platform(hass, config: ConfigType,
add_devices: Callable[[list], None], discovery_info=None):
def setup_platform(
hass, config: ConfigType,
add_devices: Callable[[list], None], discovery_info=None):
"""Set up the Sesame platform."""
import pysesame

email = config.get(CONF_EMAIL)
password = config.get(CONF_PASSWORD)

add_devices([SesameDevice(sesame) for
sesame in pysesame.get_sesames(email, password)])
add_devices([SesameDevice(sesame) for sesame in
pysesame.get_sesames(email, password)],
update_before_add=True)


class SesameDevice(LockDevice):
"""Representation of a Sesame device."""

_sesame = None

def __init__(self, sesame: object) -> None:
"""Initialize the Sesame device."""
self._sesame = sesame

# Cached properties from pysesame object.
self._device_id = None
self._nickname = None
self._is_unlocked = False
self._api_enabled = False
self._battery = -1

@property
def name(self) -> str:
"""Return the name of the device."""
return self._sesame.nickname
return self._nickname

@property
def available(self) -> bool:
"""Return True if entity is available."""
return self._sesame.api_enabled
return self._api_enabled

@property
def is_locked(self) -> bool:
"""Return True if the device is currently locked, else False."""
return not self._sesame.is_unlocked
return not self._is_unlocked

@property
def state(self) -> str:
"""Get the state of the device."""
if self._sesame.is_unlocked:
if self._is_unlocked:
return STATE_UNLOCKED
return STATE_LOCKED

Expand All @@ -79,11 +86,16 @@ def unlock(self, **kwargs) -> None:
def update(self) -> None:
"""Update the internal state of the device."""
self._sesame.update_state()
self._nickname = self._sesame.nickname
self._api_enabled = self._sesame.api_enabled
self._is_unlocked = self._sesame.is_unlocked
self._device_id = self._sesame.device_id
self._battery = self._sesame.battery

@property
def device_state_attributes(self) -> dict:
"""Return the state attributes."""
attributes = {}
attributes[ATTR_DEVICE_ID] = self._sesame.device_id
attributes[ATTR_BATTERY_LEVEL] = self._sesame.battery
attributes[ATTR_DEVICE_ID] = self._device_id
attributes[ATTR_BATTERY_LEVEL] = self._battery
return attributes