Add camera selection config to skybell camera (#19310)
* add camera selection config to skybell camera * code review changes.
This commit is contained in:
parent
da10598fa1
commit
6adbf3ba84
3 changed files with 42 additions and 7 deletions
|
@ -8,6 +8,11 @@ from datetime import timedelta
|
|||
import logging
|
||||
|
||||
import requests
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.camera import PLATFORM_SCHEMA
|
||||
from homeassistant.const import CONF_MONITORED_CONDITIONS
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
|
||||
from homeassistant.components.camera import Camera
|
||||
from homeassistant.components.skybell import (
|
||||
|
@ -19,14 +24,33 @@ _LOGGER = logging.getLogger(__name__)
|
|||
|
||||
SCAN_INTERVAL = timedelta(seconds=90)
|
||||
|
||||
IMAGE_AVATAR = 'avatar'
|
||||
IMAGE_ACTIVITY = 'activity'
|
||||
|
||||
CONF_ACTIVITY_NAME = 'activity_name'
|
||||
CONF_AVATAR_NAME = 'avatar_name'
|
||||
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||
vol.Optional(CONF_MONITORED_CONDITIONS, default=[IMAGE_AVATAR]):
|
||||
vol.All(cv.ensure_list, [vol.In([IMAGE_AVATAR, IMAGE_ACTIVITY])]),
|
||||
vol.Optional(CONF_ACTIVITY_NAME): cv.string,
|
||||
vol.Optional(CONF_AVATAR_NAME): cv.string,
|
||||
})
|
||||
|
||||
|
||||
def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||
"""Set up the platform for a Skybell device."""
|
||||
cond = config[CONF_MONITORED_CONDITIONS]
|
||||
names = {}
|
||||
names[IMAGE_ACTIVITY] = config.get(CONF_ACTIVITY_NAME)
|
||||
names[IMAGE_AVATAR] = config.get(CONF_AVATAR_NAME)
|
||||
skybell = hass.data.get(SKYBELL_DOMAIN)
|
||||
|
||||
sensors = []
|
||||
for device in skybell.get_devices():
|
||||
sensors.append(SkybellCamera(device))
|
||||
for camera_type in cond:
|
||||
sensors.append(SkybellCamera(device, camera_type,
|
||||
names.get(camera_type)))
|
||||
|
||||
add_entities(sensors, True)
|
||||
|
||||
|
@ -34,10 +58,14 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
|||
class SkybellCamera(SkybellDevice, Camera):
|
||||
"""A camera implementation for Skybell devices."""
|
||||
|
||||
def __init__(self, device):
|
||||
def __init__(self, device, camera_type, name=None):
|
||||
"""Initialize a camera for a Skybell device."""
|
||||
self._type = camera_type
|
||||
SkybellDevice.__init__(self, device)
|
||||
Camera.__init__(self)
|
||||
if name is not None:
|
||||
self._name = "{} {}".format(self._device.name, name)
|
||||
else:
|
||||
self._name = self._device.name
|
||||
self._url = None
|
||||
self._response = None
|
||||
|
@ -47,12 +75,19 @@ class SkybellCamera(SkybellDevice, Camera):
|
|||
"""Return the name of the sensor."""
|
||||
return self._name
|
||||
|
||||
@property
|
||||
def image_url(self):
|
||||
"""Get the camera image url based on type."""
|
||||
if self._type == IMAGE_ACTIVITY:
|
||||
return self._device.activity_image
|
||||
return self._device.image
|
||||
|
||||
def camera_image(self):
|
||||
"""Get the latest camera image."""
|
||||
super().update()
|
||||
|
||||
if self._url != self._device.image:
|
||||
self._url = self._device.image
|
||||
if self._url != self.image_url:
|
||||
self._url = self.image_url
|
||||
|
||||
try:
|
||||
self._response = requests.get(
|
||||
|
|
|
@ -14,7 +14,7 @@ from homeassistant.const import (
|
|||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.entity import Entity
|
||||
|
||||
REQUIREMENTS = ['skybellpy==0.2.0']
|
||||
REQUIREMENTS = ['skybellpy==0.3.0']
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
@ -1452,7 +1452,7 @@ simplisafe-python==3.1.14
|
|||
sisyphus-control==2.1
|
||||
|
||||
# homeassistant.components.skybell
|
||||
skybellpy==0.2.0
|
||||
skybellpy==0.3.0
|
||||
|
||||
# homeassistant.components.notify.slack
|
||||
slacker==0.12.0
|
||||
|
|
Loading…
Add table
Reference in a new issue