mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 14:17:45 +00:00
parent
a5a839e72a
commit
fd509e188a
@ -1,28 +1,33 @@
|
|||||||
"""
|
"""
|
||||||
This component provides HA alarm_control_panel support for Arlo.
|
Support for Arlo Alarm Control Panels.
|
||||||
|
|
||||||
For more details about this platform, please refer to the documentation at
|
For more details about this platform, please refer to the documentation at
|
||||||
https://home-assistant.io/components/alarm_control_panel.arlo/
|
https://home-assistant.io/components/alarm_control_panel.arlo/
|
||||||
"""
|
"""
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
from homeassistant.components.alarm_control_panel import (
|
||||||
|
AlarmControlPanel, PLATFORM_SCHEMA)
|
||||||
from homeassistant.components.arlo import (DATA_ARLO, CONF_ATTRIBUTION)
|
from homeassistant.components.arlo import (DATA_ARLO, CONF_ATTRIBUTION)
|
||||||
from homeassistant.components.alarm_control_panel import (AlarmControlPanel,
|
from homeassistant.const import (
|
||||||
PLATFORM_SCHEMA)
|
ATTR_ATTRIBUTION, STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME,
|
||||||
from homeassistant.const import (ATTR_ATTRIBUTION, STATE_ALARM_ARMED_AWAY,
|
STATE_ALARM_DISARMED)
|
||||||
STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED)
|
|
||||||
from homeassistant.helpers import config_validation as cv
|
|
||||||
|
|
||||||
DEPENDENCIES = ['arlo']
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
ARMED = 'armed'
|
||||||
|
|
||||||
CONF_HOME_MODE_NAME = 'home_mode_name'
|
CONF_HOME_MODE_NAME = 'home_mode_name'
|
||||||
|
|
||||||
|
DEPENDENCIES = ['arlo']
|
||||||
|
|
||||||
|
DISARMED = 'disarmed'
|
||||||
|
|
||||||
ICON = 'mdi:security'
|
ICON = 'mdi:security'
|
||||||
ARMED = "armed"
|
|
||||||
DISARMED = "disarmed"
|
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_HOME_MODE_NAME, default=ARMED): cv.string,
|
vol.Optional(CONF_HOME_MODE_NAME, default=ARMED): cv.string,
|
||||||
@ -31,7 +36,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
|||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
|
def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
|
||||||
"""Set up Arlo Base Stations."""
|
"""Set up the Arlo Alarm Control Panels."""
|
||||||
data = hass.data[DATA_ARLO]
|
data = hass.data[DATA_ARLO]
|
||||||
|
|
||||||
if not data.base_stations:
|
if not data.base_stations:
|
||||||
@ -45,7 +50,7 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
|
|||||||
|
|
||||||
|
|
||||||
class ArloBaseStation(AlarmControlPanel):
|
class ArloBaseStation(AlarmControlPanel):
|
||||||
"""An AlarmControlPanel implementation for Arlo."""
|
"""Representation of an Arlo Alarm Control Panel."""
|
||||||
|
|
||||||
def __init__(self, data, home_mode_name):
|
def __init__(self, data, home_mode_name):
|
||||||
"""Initialize the alarm control panel."""
|
"""Initialize the alarm control panel."""
|
||||||
@ -107,7 +112,7 @@ class ArloBaseStation(AlarmControlPanel):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def _get_state_from_mode(self, mode):
|
def _get_state_from_mode(self, mode):
|
||||||
"""Convert Arlo mode to HA state."""
|
"""Convert Arlo mode to Home Assistant state."""
|
||||||
if mode == ARMED:
|
if mode == ARMED:
|
||||||
return STATE_ALARM_ARMED_AWAY
|
return STATE_ALARM_ARMED_AWAY
|
||||||
elif mode == DISARMED:
|
elif mode == DISARMED:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
"""
|
"""
|
||||||
This component provides basic support for Netgear Arlo IP cameras.
|
This component provides support for Netgear Arlo IP cameras.
|
||||||
|
|
||||||
For more details about this component, please refer to the documentation at
|
For more details about this component, please refer to the documentation at
|
||||||
https://home-assistant.io/components/arlo/
|
https://home-assistant.io/components/arlo/
|
||||||
@ -23,7 +23,7 @@ DEFAULT_BRAND = 'Netgear Arlo'
|
|||||||
DOMAIN = 'arlo'
|
DOMAIN = 'arlo'
|
||||||
|
|
||||||
NOTIFICATION_ID = 'arlo_notification'
|
NOTIFICATION_ID = 'arlo_notification'
|
||||||
NOTIFICATION_TITLE = 'Arlo Camera Setup'
|
NOTIFICATION_TITLE = 'Arlo Component Setup'
|
||||||
|
|
||||||
CONFIG_SCHEMA = vol.Schema({
|
CONFIG_SCHEMA = vol.Schema({
|
||||||
DOMAIN: vol.Schema({
|
DOMAIN: vol.Schema({
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
"""
|
"""
|
||||||
This component provides basic support for Netgear Arlo IP cameras.
|
Support for Netgear Arlo IP cameras.
|
||||||
|
|
||||||
For more details about this platform, please refer to the documentation at
|
For more details about this platform, please refer to the documentation at
|
||||||
https://home-assistant.io/components/camera.arlo/
|
https://home-assistant.io/components/camera.arlo/
|
||||||
@ -9,17 +9,17 @@ import logging
|
|||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.helpers import config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.aiohttp_client import async_aiohttp_proxy_stream
|
|
||||||
from homeassistant.components.arlo import DEFAULT_BRAND, DATA_ARLO
|
from homeassistant.components.arlo import DEFAULT_BRAND, DATA_ARLO
|
||||||
from homeassistant.components.camera import Camera, PLATFORM_SCHEMA
|
from homeassistant.components.camera import Camera, PLATFORM_SCHEMA
|
||||||
from homeassistant.components.ffmpeg import DATA_FFMPEG
|
from homeassistant.components.ffmpeg import DATA_FFMPEG
|
||||||
from homeassistant.const import ATTR_BATTERY_LEVEL
|
from homeassistant.const import ATTR_BATTERY_LEVEL
|
||||||
|
from homeassistant.helpers.aiohttp_client import async_aiohttp_proxy_stream
|
||||||
DEPENDENCIES = ['arlo', 'ffmpeg']
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
ARLO_MODE_ARMED = 'armed'
|
||||||
|
ARLO_MODE_DISARMED = 'disarmed'
|
||||||
ATTR_BRIGHTNESS = 'brightness'
|
ATTR_BRIGHTNESS = 'brightness'
|
||||||
ATTR_FLIPPED = 'flipped'
|
ATTR_FLIPPED = 'flipped'
|
||||||
ATTR_MIRRORED = 'mirrored'
|
ATTR_MIRRORED = 'mirrored'
|
||||||
@ -30,8 +30,7 @@ ATTR_UNSEEN_VIDEOS = 'unseen_videos'
|
|||||||
|
|
||||||
CONF_FFMPEG_ARGUMENTS = 'ffmpeg_arguments'
|
CONF_FFMPEG_ARGUMENTS = 'ffmpeg_arguments'
|
||||||
|
|
||||||
ARLO_MODE_ARMED = 'armed'
|
DEPENDENCIES = ['arlo', 'ffmpeg']
|
||||||
ARLO_MODE_DISARMED = 'disarmed'
|
|
||||||
|
|
||||||
POWERSAVE_MODE_MAPPING = {
|
POWERSAVE_MODE_MAPPING = {
|
||||||
1: 'best_battery_life',
|
1: 'best_battery_life',
|
||||||
@ -100,32 +99,26 @@ class ArloCam(Camera):
|
|||||||
def device_state_attributes(self):
|
def device_state_attributes(self):
|
||||||
"""Return the state attributes."""
|
"""Return the state attributes."""
|
||||||
return {
|
return {
|
||||||
ATTR_BATTERY_LEVEL:
|
ATTR_BATTERY_LEVEL: self._camera.get_battery_level,
|
||||||
self._camera.get_battery_level,
|
ATTR_BRIGHTNESS: self._camera.get_brightness,
|
||||||
ATTR_BRIGHTNESS:
|
ATTR_FLIPPED: self._camera.get_flip_state,
|
||||||
self._camera.get_brightness,
|
ATTR_MIRRORED: self._camera.get_mirror_state,
|
||||||
ATTR_FLIPPED:
|
|
||||||
self._camera.get_flip_state,
|
|
||||||
ATTR_MIRRORED:
|
|
||||||
self._camera.get_mirror_state,
|
|
||||||
ATTR_MOTION_SENSITIVITY:
|
ATTR_MOTION_SENSITIVITY:
|
||||||
self._camera.get_motion_detection_sensitivity,
|
self._camera.get_motion_detection_sensitivity,
|
||||||
ATTR_POWER_SAVE_MODE:
|
ATTR_POWER_SAVE_MODE:
|
||||||
POWERSAVE_MODE_MAPPING[self._camera.get_powersave_mode],
|
POWERSAVE_MODE_MAPPING[self._camera.get_powersave_mode],
|
||||||
ATTR_SIGNAL_STRENGTH:
|
ATTR_SIGNAL_STRENGTH: self._camera.get_signal_strength,
|
||||||
self._camera.get_signal_strength,
|
ATTR_UNSEEN_VIDEOS: self._camera.unseen_videos
|
||||||
ATTR_UNSEEN_VIDEOS:
|
|
||||||
self._camera.unseen_videos
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def model(self):
|
def model(self):
|
||||||
"""Camera model."""
|
"""Return the camera model."""
|
||||||
return self._camera.model_id
|
return self._camera.model_id
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def brand(self):
|
def brand(self):
|
||||||
"""Camera brand."""
|
"""Return the camera brand."""
|
||||||
return DEFAULT_BRAND
|
return DEFAULT_BRAND
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -135,7 +128,7 @@ class ArloCam(Camera):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def motion_detection_enabled(self):
|
def motion_detection_enabled(self):
|
||||||
"""Camera Motion Detection Status."""
|
"""Return the camera motion detection status."""
|
||||||
return self._motion_status
|
return self._motion_status
|
||||||
|
|
||||||
def set_base_station_mode(self, mode):
|
def set_base_station_mode(self, mode):
|
||||||
@ -143,7 +136,7 @@ class ArloCam(Camera):
|
|||||||
# Get the list of base stations identified by library
|
# Get the list of base stations identified by library
|
||||||
base_stations = self.hass.data[DATA_ARLO].base_stations
|
base_stations = self.hass.data[DATA_ARLO].base_stations
|
||||||
|
|
||||||
# Some Arlo cameras does not have basestation
|
# Some Arlo cameras does not have base station
|
||||||
# So check if there is base station detected first
|
# So check if there is base station detected first
|
||||||
# if yes, then choose the primary base station
|
# if yes, then choose the primary base station
|
||||||
# Set the mode on the chosen base station
|
# Set the mode on the chosen base station
|
||||||
|
@ -7,20 +7,21 @@ https://home-assistant.io/components/sensor.arlo/
|
|||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.helpers import config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.components.arlo import (
|
from homeassistant.components.arlo import (
|
||||||
CONF_ATTRIBUTION, DEFAULT_BRAND, DATA_ARLO)
|
CONF_ATTRIBUTION, DEFAULT_BRAND, DATA_ARLO)
|
||||||
|
|
||||||
from homeassistant.const import (
|
|
||||||
ATTR_ATTRIBUTION, CONF_MONITORED_CONDITIONS)
|
|
||||||
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
||||||
|
from homeassistant.const import (ATTR_ATTRIBUTION, CONF_MONITORED_CONDITIONS)
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
DEPENDENCIES = ['arlo']
|
DEPENDENCIES = ['arlo']
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
SCAN_INTERVAL = timedelta(seconds=90)
|
||||||
|
|
||||||
# sensor_type [ description, unit, icon ]
|
# sensor_type [ description, unit, icon ]
|
||||||
SENSOR_TYPES = {
|
SENSOR_TYPES = {
|
||||||
@ -35,8 +36,6 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
|||||||
vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]),
|
vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]),
|
||||||
})
|
})
|
||||||
|
|
||||||
SCAN_INTERVAL = timedelta(seconds=90)
|
|
||||||
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
|
def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
|
||||||
@ -48,18 +47,15 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
|
|||||||
sensors = []
|
sensors = []
|
||||||
for sensor_type in config.get(CONF_MONITORED_CONDITIONS):
|
for sensor_type in config.get(CONF_MONITORED_CONDITIONS):
|
||||||
if sensor_type == 'total_cameras':
|
if sensor_type == 'total_cameras':
|
||||||
sensors.append(ArloSensor(hass,
|
sensors.append(ArloSensor(
|
||||||
SENSOR_TYPES[sensor_type][0],
|
hass, SENSOR_TYPES[sensor_type][0], arlo, sensor_type))
|
||||||
arlo,
|
|
||||||
sensor_type))
|
|
||||||
else:
|
else:
|
||||||
for camera in arlo.cameras:
|
for camera in arlo.cameras:
|
||||||
name = '{0} {1}'.format(SENSOR_TYPES[sensor_type][0],
|
name = '{0} {1}'.format(
|
||||||
camera.name)
|
SENSOR_TYPES[sensor_type][0], camera.name)
|
||||||
sensors.append(ArloSensor(hass, name, camera, sensor_type))
|
sensors.append(ArloSensor(hass, name, camera, sensor_type))
|
||||||
|
|
||||||
async_add_devices(sensors, True)
|
async_add_devices(sensors, True)
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class ArloSensor(Entity):
|
class ArloSensor(Entity):
|
||||||
@ -120,7 +116,7 @@ class ArloSensor(Entity):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def device_state_attributes(self):
|
def device_state_attributes(self):
|
||||||
"""Return the state attributes."""
|
"""Return the device state attributes."""
|
||||||
attrs = {}
|
attrs = {}
|
||||||
|
|
||||||
attrs[ATTR_ATTRIBUTION] = CONF_ATTRIBUTION
|
attrs[ATTR_ATTRIBUTION] = CONF_ATTRIBUTION
|
||||||
|
Loading…
x
Reference in New Issue
Block a user