mirror of
https://github.com/home-assistant/core.git
synced 2025-07-10 23:07:09 +00:00
Stream support for Netatmo cameras (#22952)
* Add stream feature * Add a missing slash * Get config parameter * Get default quality
This commit is contained in:
parent
373b2009c9
commit
c2cfc4a813
@ -4,7 +4,8 @@ import logging
|
|||||||
import requests
|
import requests
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.camera import PLATFORM_SCHEMA, Camera
|
from homeassistant.components.camera import (
|
||||||
|
PLATFORM_SCHEMA, Camera, SUPPORT_STREAM)
|
||||||
from homeassistant.const import CONF_VERIFY_SSL
|
from homeassistant.const import CONF_VERIFY_SSL
|
||||||
from homeassistant.helpers import config_validation as cv
|
from homeassistant.helpers import config_validation as cv
|
||||||
|
|
||||||
@ -16,12 +17,19 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
|
|
||||||
CONF_HOME = 'home'
|
CONF_HOME = 'home'
|
||||||
CONF_CAMERAS = 'cameras'
|
CONF_CAMERAS = 'cameras'
|
||||||
|
CONF_QUALITY = 'quality'
|
||||||
|
|
||||||
|
DEFAULT_QUALITY = 'high'
|
||||||
|
|
||||||
|
VALID_QUALITIES = ['high', 'medium', 'low', 'poor']
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean,
|
vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean,
|
||||||
vol.Optional(CONF_HOME): cv.string,
|
vol.Optional(CONF_HOME): cv.string,
|
||||||
vol.Optional(CONF_CAMERAS, default=[]):
|
vol.Optional(CONF_CAMERAS, default=[]):
|
||||||
vol.All(cv.ensure_list, [cv.string]),
|
vol.All(cv.ensure_list, [cv.string]),
|
||||||
|
vol.Optional(CONF_QUALITY, default=DEFAULT_QUALITY):
|
||||||
|
vol.All(cv.string, vol.In(VALID_QUALITIES)),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@ -30,6 +38,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
|||||||
netatmo = hass.components.netatmo
|
netatmo = hass.components.netatmo
|
||||||
home = config.get(CONF_HOME)
|
home = config.get(CONF_HOME)
|
||||||
verify_ssl = config.get(CONF_VERIFY_SSL, True)
|
verify_ssl = config.get(CONF_VERIFY_SSL, True)
|
||||||
|
quality = config.get(CONF_QUALITY, DEFAULT_QUALITY)
|
||||||
import pyatmo
|
import pyatmo
|
||||||
try:
|
try:
|
||||||
data = CameraData(hass, netatmo.NETATMO_AUTH, home)
|
data = CameraData(hass, netatmo.NETATMO_AUTH, home)
|
||||||
@ -40,7 +49,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
|||||||
camera_name not in config[CONF_CAMERAS]:
|
camera_name not in config[CONF_CAMERAS]:
|
||||||
continue
|
continue
|
||||||
add_entities([NetatmoCamera(data, camera_name, home,
|
add_entities([NetatmoCamera(data, camera_name, home,
|
||||||
camera_type, verify_ssl)])
|
camera_type, verify_ssl, quality)])
|
||||||
data.get_persons()
|
data.get_persons()
|
||||||
except pyatmo.NoDevice:
|
except pyatmo.NoDevice:
|
||||||
return None
|
return None
|
||||||
@ -49,12 +58,14 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
|||||||
class NetatmoCamera(Camera):
|
class NetatmoCamera(Camera):
|
||||||
"""Representation of the images published from a Netatmo camera."""
|
"""Representation of the images published from a Netatmo camera."""
|
||||||
|
|
||||||
def __init__(self, data, camera_name, home, camera_type, verify_ssl):
|
def __init__(self, data, camera_name, home, camera_type, verify_ssl,
|
||||||
|
quality):
|
||||||
"""Set up for access to the Netatmo camera images."""
|
"""Set up for access to the Netatmo camera images."""
|
||||||
super(NetatmoCamera, self).__init__()
|
super(NetatmoCamera, self).__init__()
|
||||||
self._data = data
|
self._data = data
|
||||||
self._camera_name = camera_name
|
self._camera_name = camera_name
|
||||||
self._verify_ssl = verify_ssl
|
self._verify_ssl = verify_ssl
|
||||||
|
self._quality = quality
|
||||||
if home:
|
if home:
|
||||||
self._name = home + ' / ' + camera_name
|
self._name = home + ' / ' + camera_name
|
||||||
else:
|
else:
|
||||||
@ -105,3 +116,16 @@ class NetatmoCamera(Camera):
|
|||||||
if self._cameratype == "NACamera":
|
if self._cameratype == "NACamera":
|
||||||
return "Welcome"
|
return "Welcome"
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def supported_features(self):
|
||||||
|
"""Return supported features."""
|
||||||
|
return SUPPORT_STREAM
|
||||||
|
|
||||||
|
@property
|
||||||
|
def stream_source(self):
|
||||||
|
"""Return the stream source."""
|
||||||
|
url = '{0}/live/files/{1}/index.m3u8'
|
||||||
|
if self._localurl:
|
||||||
|
return url.format(self._localurl, self._quality)
|
||||||
|
return url.format(self._vpnurl, self._quality)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user