Skip to content
Merged
Changes from 6 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
34 changes: 24 additions & 10 deletions homeassistant/components/lock/sesame.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,46 +25,55 @@


# 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

# Cached sesame properties
_device_id = None

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Declare these inside of __init__ instead of here. Variables declared under the class are static for all instances of the class. We can get rid of the _sesame = None above as well. Should just look like this in __init__:

self._sesame = sesame
self._device_id = None
self._nickname = None
...

_nickname = None
_is_unlocked = False
_api_enabled = False
_battery = -1

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

@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 +88,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