Skip to content
Merged
Show file tree
Hide file tree
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
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
Comment thread
alandtse marked this conversation as resolved.
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."""
Comment thread
hobbe marked this conversation as resolved.
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