Skip to content

Commit

Permalink
feat: add sentry mode availability flag (#66)
Browse files Browse the repository at this point in the history
  • Loading branch information
hobbe committed Mar 22, 2020
1 parent ab89698 commit d1f9199
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 7 deletions.
23 changes: 17 additions & 6 deletions teslajsonpy/sentry_mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def __init__(self, data, controller):
"""
super().__init__(data, controller)
self.__manual_update_time = 0
self.__sentry_mode_available = False
self.__sentry_mode = False
self.type = "sentry mode switch"
self.hass_type = "switch"
Expand All @@ -43,11 +44,21 @@ async def async_update(self, wake_if_asleep=False):
last_update = self._controller.get_last_update_time(self._id)
if last_update >= self.__manual_update_time:
data = self._controller.get_state_params(self._id)
self.__sentry_mode = data and data["sentry_mode"]
if data and "sentry_mode_available" in data:
self.__sentry_mode_available = data["sentry_mode_available"]
if self.__sentry_mode_available and "sentry_mode" in data:
self.__sentry_mode = data["sentry_mode"]
else:
self.__sentry_mode_available = False
self.__sentry_mode = False

def available(self):
"""Return whether the sentry mode is available."""
return self.__sentry_mode_available

def get_value(self):
"""Return whether the sentry mode is enabled."""
return self.__sentry_mode
def is_on(self):
"""Return whether the sentry mode is enabled, always False if sentry mode is not available."""
return self.__sentry_mode_available and self.__sentry_mode

@staticmethod
def has_battery():
Expand All @@ -56,7 +67,7 @@ def has_battery():

async def enable_sentry_mode(self):
"""Enable the sentry mode."""
if not self.__sentry_mode:
if self.__sentry_mode_available and not self.__sentry_mode:
data = await self._controller.command(
self._id, "set_sentry_mode", {"on": True}, wake_if_asleep=True
)
Expand All @@ -66,7 +77,7 @@ async def enable_sentry_mode(self):

async def disable_sentry_mode(self):
"""Disable the sentry mode."""
if self.__sentry_mode:
if self.__sentry_mode_available and self.__sentry_mode:
data = await self._controller.command(
self._id, "set_sentry_mode", {"on": False}, wake_if_asleep=True
)
Expand Down
10 changes: 9 additions & 1 deletion teslajsonpy/vehicle.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ def __init__(self, data, controller):
self._state = data["state"]
self._car_type = f"Model {str(self._vin[3]).upper()}"
self._car_version = ""
self._sentry_mode_available = False
self._controller = controller
self.should_poll = True
self.type = "device"
Expand Down Expand Up @@ -84,6 +85,11 @@ def car_type(self):
"""Return the type of this Vehicle."""
return self._car_type

@property
def sentry_mode_available(self):
"""Return True if sentry mode is available on this Vehicle."""
return self._sentry_mode_available

def assumed_state(self):
# pylint: disable=protected-access
"""Return whether the data is from an online vehicle."""
Expand All @@ -94,11 +100,13 @@ def assumed_state(self):
)

async def async_update(self, wake_if_asleep=False):
"""Update the car version."""
"""Update the vehicle data."""
await self._controller.update(self.id(), wake_if_asleep=wake_if_asleep)
state = self._controller.get_state_params(self.id())
if state and "car_version" in state:
self._car_version = state["car_version"]
if state and "sentry_mode_available" in state:
self._sentry_mode_available = state["sentry_mode_available"]

@staticmethod
def is_armable():
Expand Down

0 comments on commit d1f9199

Please sign in to comment.