add force_update
This commit is contained in:
parent
b79a133a39
commit
e203785ea8
1 changed files with 17 additions and 4 deletions
|
@ -14,7 +14,8 @@ from homeassistant.components.camera import Camera, PLATFORM_SCHEMA,\
|
||||||
STATE_IDLE, STATE_RECORDING
|
STATE_IDLE, STATE_RECORDING
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
from homeassistant.components.http.view import HomeAssistantView
|
from homeassistant.components.http.view import HomeAssistantView
|
||||||
from homeassistant.const import CONF_NAME, CONF_TIMEOUT, HTTP_BAD_REQUEST
|
from homeassistant.const import CONF_NAME, CONF_TIMEOUT, CONF_FORCE_UPDATE,\
|
||||||
|
HTTP_BAD_REQUEST
|
||||||
from homeassistant.helpers import config_validation as cv
|
from homeassistant.helpers import config_validation as cv
|
||||||
from homeassistant.helpers.event import async_track_point_in_utc_time
|
from homeassistant.helpers.event import async_track_point_in_utc_time
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
@ -25,6 +26,7 @@ CONF_BUFFER_SIZE = 'cache'
|
||||||
CONF_IMAGE_FIELD = 'field'
|
CONF_IMAGE_FIELD = 'field'
|
||||||
|
|
||||||
DEFAULT_NAME = "Push Camera"
|
DEFAULT_NAME = "Push Camera"
|
||||||
|
DEFAULT_FORCE_UPDATE = False
|
||||||
|
|
||||||
ATTR_FILENAME = 'filename'
|
ATTR_FILENAME = 'filename'
|
||||||
ATTR_LAST_TRIP = 'last_trip'
|
ATTR_LAST_TRIP = 'last_trip'
|
||||||
|
@ -34,6 +36,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_BUFFER_SIZE, default=1): cv.positive_int,
|
vol.Optional(CONF_BUFFER_SIZE, default=1): cv.positive_int,
|
||||||
vol.Optional(CONF_TIMEOUT, default=timedelta(seconds=5)): vol.All(
|
vol.Optional(CONF_TIMEOUT, default=timedelta(seconds=5)): vol.All(
|
||||||
cv.time_period, cv.positive_timedelta),
|
cv.time_period, cv.positive_timedelta),
|
||||||
|
vol.Optional(CONF_FORCE_UPDATE, default=DEFAULT_FORCE_UPDATE): cv.boolean,
|
||||||
vol.Optional(CONF_IMAGE_FIELD, default='image'): cv.string,
|
vol.Optional(CONF_IMAGE_FIELD, default='image'): cv.string,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -43,7 +46,8 @@ async def async_setup_platform(hass, config, async_add_devices,
|
||||||
"""Set up the Push Camera platform."""
|
"""Set up the Push Camera platform."""
|
||||||
cameras = [PushCamera(config[CONF_NAME],
|
cameras = [PushCamera(config[CONF_NAME],
|
||||||
config[CONF_BUFFER_SIZE],
|
config[CONF_BUFFER_SIZE],
|
||||||
config[CONF_TIMEOUT])]
|
config[CONF_TIMEOUT],
|
||||||
|
config[CONF_FORCE_UPDATE])]
|
||||||
|
|
||||||
hass.http.register_view(CameraPushReceiver(cameras,
|
hass.http.register_view(CameraPushReceiver(cameras,
|
||||||
config[CONF_IMAGE_FIELD]))
|
config[CONF_IMAGE_FIELD]))
|
||||||
|
@ -89,7 +93,7 @@ class CameraPushReceiver(HomeAssistantView):
|
||||||
class PushCamera(Camera):
|
class PushCamera(Camera):
|
||||||
"""The representation of a Push camera."""
|
"""The representation of a Push camera."""
|
||||||
|
|
||||||
def __init__(self, name, buffer_size, timeout):
|
def __init__(self, name, buffer_size, timeout, force_update):
|
||||||
"""Initialize push camera component."""
|
"""Initialize push camera component."""
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._name = name
|
self._name = name
|
||||||
|
@ -100,18 +104,26 @@ class PushCamera(Camera):
|
||||||
self._timeout = timeout
|
self._timeout = timeout
|
||||||
self.queue = deque([], buffer_size)
|
self.queue = deque([], buffer_size)
|
||||||
self._current_image = None
|
self._current_image = None
|
||||||
|
self._force_update = force_update
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self):
|
def state(self):
|
||||||
"""Current state of the camera."""
|
"""Current state of the camera."""
|
||||||
return self._state
|
return self._state
|
||||||
|
|
||||||
|
@property
|
||||||
|
def force_update(self):
|
||||||
|
"""Force update."""
|
||||||
|
return self._force_update
|
||||||
|
|
||||||
async def update_image(self, image, filename):
|
async def update_image(self, image, filename):
|
||||||
"""Update the camera image."""
|
"""Update the camera image."""
|
||||||
|
_first_image = False
|
||||||
if self._state == STATE_IDLE:
|
if self._state == STATE_IDLE:
|
||||||
self._state = STATE_RECORDING
|
self._state = STATE_RECORDING
|
||||||
self._last_trip = dt_util.utcnow()
|
self._last_trip = dt_util.utcnow()
|
||||||
self.queue.clear()
|
self.queue.clear()
|
||||||
|
_first_image = True
|
||||||
|
|
||||||
self._filename = filename
|
self._filename = filename
|
||||||
self.queue.appendleft(image)
|
self.queue.appendleft(image)
|
||||||
|
@ -130,7 +142,8 @@ class PushCamera(Camera):
|
||||||
self._expired_listener = async_track_point_in_utc_time(
|
self._expired_listener = async_track_point_in_utc_time(
|
||||||
self.hass, reset_state, dt_util.utcnow() + self._timeout)
|
self.hass, reset_state, dt_util.utcnow() + self._timeout)
|
||||||
|
|
||||||
self.async_schedule_update_ha_state()
|
if self.force_update or _first_image:
|
||||||
|
self.async_schedule_update_ha_state()
|
||||||
|
|
||||||
async def async_camera_image(self):
|
async def async_camera_image(self):
|
||||||
"""Return a still image response."""
|
"""Return a still image response."""
|
||||||
|
|
Loading…
Add table
Reference in a new issue