From 4332cbe1127777724f08170f4729fd7410e724c6 Mon Sep 17 00:00:00 2001
From: Olivier B <hobbe@users.noreply.github.com>
Date: Mon, 23 Mar 2020 10:52:59 +0100
Subject: [PATCH] Add Tesla sentry mode switch (#32938)

* Add Tesla sentry mode switch

* add available property, fix is_on

* bump teslajsonpy to 0.6.0
---
 homeassistant/components/tesla/const.py      |  1 +
 homeassistant/components/tesla/manifest.json |  2 +-
 homeassistant/components/tesla/switch.py     | 31 ++++++++++++++++++++
 requirements_all.txt                         |  2 +-
 requirements_test_all.txt                    |  2 +-
 5 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/homeassistant/components/tesla/const.py b/homeassistant/components/tesla/const.py
index d7930c01fe8..2b8485c7616 100644
--- a/homeassistant/components/tesla/const.py
+++ b/homeassistant/components/tesla/const.py
@@ -25,4 +25,5 @@ ICONS = {
     "temperature sensor": "mdi:thermometer",
     "location tracker": "mdi:crosshairs-gps",
     "charging rate sensor": "mdi:speedometer",
+    "sentry mode switch": "mdi:shield-car",
 }
diff --git a/homeassistant/components/tesla/manifest.json b/homeassistant/components/tesla/manifest.json
index 950a860b308..1bba8436312 100644
--- a/homeassistant/components/tesla/manifest.json
+++ b/homeassistant/components/tesla/manifest.json
@@ -4,7 +4,7 @@
   "config_flow": true,
   "documentation": "https://www.home-assistant.io/integrations/tesla",
   "requirements": [
-    "teslajsonpy==0.5.1"
+    "teslajsonpy==0.6.0"
   ],
   "dependencies": [],
   "codeowners": [
diff --git a/homeassistant/components/tesla/switch.py b/homeassistant/components/tesla/switch.py
index 331f6bd8126..716836821c4 100644
--- a/homeassistant/components/tesla/switch.py
+++ b/homeassistant/components/tesla/switch.py
@@ -19,6 +19,8 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
             entities.append(UpdateSwitch(device, controller, config_entry))
         elif device.type == "maxrange switch":
             entities.append(RangeSwitch(device, controller, config_entry))
+        elif device.type == "sentry mode switch":
+            entities.append(SentryModeSwitch(device, controller, config_entry))
     async_add_entities(entities, True)
 
 
@@ -114,3 +116,32 @@ class UpdateSwitch(TeslaDevice, SwitchDevice):
         _LOGGER.debug("Updating state for: %s %s", self._name, car_id)
         await super().async_update()
         self._state = bool(self.controller.get_updates(car_id))
+
+
+class SentryModeSwitch(TeslaDevice, SwitchDevice):
+    """Representation of a Tesla sentry mode switch."""
+
+    async def async_turn_on(self, **kwargs):
+        """Send the on command."""
+        _LOGGER.debug("Enable sentry mode: %s", self._name)
+        await self.tesla_device.enable_sentry_mode()
+
+    async def async_turn_off(self, **kwargs):
+        """Send the off command."""
+        _LOGGER.debug("Disable sentry mode: %s", self._name)
+        await self.tesla_device.disable_sentry_mode()
+
+    @property
+    def is_on(self):
+        """Get whether the switch is in on state."""
+        return self.tesla_device.is_on()
+
+    @property
+    def available(self):
+        """Indicate if Home Assistant is able to read the state and control the underlying device."""
+        return self.tesla_device.available()
+
+    async def async_update(self):
+        """Update the state of the switch."""
+        _LOGGER.debug("Updating state for: %s", self._name)
+        await super().async_update()
diff --git a/requirements_all.txt b/requirements_all.txt
index e2f81dbcf20..44422771b13 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -2000,7 +2000,7 @@ temperusb==1.5.3
 tesla-powerwall==0.1.1
 
 # homeassistant.components.tesla
-teslajsonpy==0.5.1
+teslajsonpy==0.6.0
 
 # homeassistant.components.thermoworks_smoke
 thermoworks_smoke==0.1.8
diff --git a/requirements_test_all.txt b/requirements_test_all.txt
index d5b56f9c14c..f8ed63bf8b3 100644
--- a/requirements_test_all.txt
+++ b/requirements_test_all.txt
@@ -719,7 +719,7 @@ tellduslive==0.10.10
 tesla-powerwall==0.1.1
 
 # homeassistant.components.tesla
-teslajsonpy==0.5.1
+teslajsonpy==0.6.0
 
 # homeassistant.components.toon
 toonapilib==3.2.4
-- 
GitLab