mirror of
https://github.com/USA-RedDragon/badnest.git
synced 2025-01-18 22:50:44 +00:00
Add preliminary Nest Protect support
This commit is contained in:
parent
334ce8579f
commit
2927881c33
@ -16,6 +16,8 @@ KNOWN_BUCKET_TYPES = [
|
|||||||
# Thermostats
|
# Thermostats
|
||||||
"device",
|
"device",
|
||||||
"shared",
|
"shared",
|
||||||
|
# Protect
|
||||||
|
"topaz",
|
||||||
# Temperature sensors
|
# Temperature sensors
|
||||||
"kryptonite",
|
"kryptonite",
|
||||||
]
|
]
|
||||||
@ -48,6 +50,7 @@ class NestAPI():
|
|||||||
self.cameras = []
|
self.cameras = []
|
||||||
self.thermostats = []
|
self.thermostats = []
|
||||||
self.temperature_sensors = []
|
self.temperature_sensors = []
|
||||||
|
self.protects = []
|
||||||
self.login()
|
self.login()
|
||||||
self._get_devices()
|
self._get_devices()
|
||||||
self.update()
|
self.update()
|
||||||
@ -149,7 +152,11 @@ class NestAPI():
|
|||||||
|
|
||||||
buckets = r.json()['updated_buckets'][0]['value']['buckets']
|
buckets = r.json()['updated_buckets'][0]['value']['buckets']
|
||||||
for bucket in buckets:
|
for bucket in buckets:
|
||||||
if bucket.startswith('kryptonite.'):
|
if bucket.startswith('topaz.'):
|
||||||
|
sn = bucket.replace('topaz.', '')
|
||||||
|
self.protects.append(sn)
|
||||||
|
self.device_data[sn] = {}
|
||||||
|
elif bucket.startswith('kryptonite.'):
|
||||||
sn = bucket.replace('kryptonite.', '')
|
sn = bucket.replace('kryptonite.', '')
|
||||||
self.temperature_sensors.append(sn)
|
self.temperature_sensors.append(sn)
|
||||||
self.device_data[sn] = {}
|
self.device_data[sn] = {}
|
||||||
@ -250,6 +257,22 @@ class NestAPI():
|
|||||||
self.device_data[sn]['eco'] = True
|
self.device_data[sn]['eco'] = True
|
||||||
else:
|
else:
|
||||||
self.device_data[sn]['eco'] = False
|
self.device_data[sn]['eco'] = False
|
||||||
|
# Protect
|
||||||
|
elif bucket["object_key"].startswith(
|
||||||
|
f"topaz.{sn}"):
|
||||||
|
self.device_data[sn]['name'] = self._wheres[
|
||||||
|
sensor_data['where_id']
|
||||||
|
]
|
||||||
|
if sensor_data.get('description', None):
|
||||||
|
self.device_data[sn]['name'] += \
|
||||||
|
f' ({sensor_data["description"]})'
|
||||||
|
self.device_data[sn]['name'] += ' Protect'
|
||||||
|
self.device_data[sn]['co_status'] = \
|
||||||
|
sensor_data['co_status']
|
||||||
|
self.device_data[sn]['smoke_status'] = \
|
||||||
|
sensor_data['smoke_status']
|
||||||
|
self.device_data[sn]['battery_health_state'] = \
|
||||||
|
sensor_data['battery_health_state']
|
||||||
# Temperature sensors
|
# Temperature sensors
|
||||||
elif bucket["object_key"].startswith(
|
elif bucket["object_key"].startswith(
|
||||||
f"kryptonite.{sn}"):
|
f"kryptonite.{sn}"):
|
||||||
|
@ -12,6 +12,12 @@ from homeassistant.const import (
|
|||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
PROTECT_SENSOR_TYPES = [
|
||||||
|
"co_status",
|
||||||
|
"smoke_status",
|
||||||
|
"battery_health_state"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_platform(hass,
|
async def async_setup_platform(hass,
|
||||||
config,
|
config,
|
||||||
@ -28,7 +34,14 @@ async def async_setup_platform(hass,
|
|||||||
|
|
||||||
async_add_entities(temperature_sensors)
|
async_add_entities(temperature_sensors)
|
||||||
|
|
||||||
async_add_entities(sensors)
|
protect_sensors = []
|
||||||
|
_LOGGER.info("Adding protect sensors")
|
||||||
|
for sensor in api['protects']:
|
||||||
|
_LOGGER.info(f"Adding nest protect sensor uuid: {sensor}")
|
||||||
|
for sensor_type in PROTECT_SENSOR_TYPES:
|
||||||
|
protect_sensors.append(NestProtectSensor(sensor, sensor_type, api))
|
||||||
|
|
||||||
|
async_add_entities(protect_sensors)
|
||||||
|
|
||||||
|
|
||||||
class NestTemperatureSensor(Entity):
|
class NestTemperatureSensor(Entity):
|
||||||
@ -77,3 +90,34 @@ class NestTemperatureSensor(Entity):
|
|||||||
ATTR_BATTERY_LEVEL:
|
ATTR_BATTERY_LEVEL:
|
||||||
self.device.device_data[self.device_id]['battery_level']
|
self.device.device_data[self.device_id]['battery_level']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class NestProtectSensor(Entity):
|
||||||
|
"""Implementation of the Nest Protect sensor."""
|
||||||
|
|
||||||
|
def __init__(self, device_id, sensor_type, api):
|
||||||
|
"""Initialize the sensor."""
|
||||||
|
self._name = "Nest Protect Sensor"
|
||||||
|
self.device_id = device_id
|
||||||
|
self._sensor_type = sensor_type
|
||||||
|
self.device = api
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unique_id(self):
|
||||||
|
"""Return an unique ID."""
|
||||||
|
return self.device_id + '_' + self._sensor_type
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
"""Return the name of the sensor."""
|
||||||
|
return self.device.device_data[self.device_id]['name'] + \
|
||||||
|
f' {self._sensor_type}'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def state(self):
|
||||||
|
"""Return the state of the sensor."""
|
||||||
|
return self.device.device_data[self.device_id][self._sensor_type]
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
"""Get the latest data from the Protect and updates the states."""
|
||||||
|
self.device.update()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user