feat: Add experimental reolink media support (#1694)
* feat: Add experimental rich reolink support. * Formatting fix
This commit is contained in:
1 parent
e898b73d63
commit
dada65e008
63 files changed
+3402
-483
No files matched your search
@@ -28,6 +28,7 @@ cameras_global:
|
||||
| `icon` | Autodetected from `camera_entity` if that is specified. | The icon to use for this camera in the camera menu and in the next & previous controls when using the `icon` style. |
|
||||
| `id` | `camera_entity`, `webrtc_card.entity` or `frigate.camera_name` if set (in that preference order). | An optional identifier to use throughout the card configuration to refer unambiguously to this camera. This `id` may be used in [conditions](../conditions.md), dependencies or custom [actions](../actions/README.md) to refer to a given camera unambiguously. |
|
||||
| `live_provider` | `auto` | The choice of live stream provider. See [Live Provider](live-provider.md). |
|
||||
| `proxy` | | Controls whether/how content is proxied via [hass-web-proxy-integration](https://github.com/dermotduffy/hass-web-proxy-integration) (must be installed separately). See below. |
|
||||
| `title` | Autodetected from `camera_entity` if that is specified. | A friendly name for this camera to use in the card. |
|
||||
| `triggers` | | Define what should cause this camera to update/trigger. See below. |
|
||||
| `webrtc_card` | | The WebRTC entity/URL to use for this camera with the `webrtc-card` live provider. See below. |
|
||||
@@ -239,6 +240,50 @@ cameras:
|
||||
|
||||
`[action]` is any [perform-action](../actions/stock/README.md?id=perform-action) action.
|
||||
|
||||
## `proxy`
|
||||
|
||||
Configures whether and how the content is proxied via
|
||||
[hass-web-proxy-integration](https://github.com/dermotduffy/hass-web-proxy-integration)
|
||||
(this must be installed separately). This allows fetching media **through** the
|
||||
Home Assistant process itself, allowing the card to access resources it
|
||||
otherwise would not be able to directly access. There are [security and
|
||||
performance
|
||||
implications](https://github.com/dermotduffy/hass-web-proxy-integration?tab=readme-ov-file#considerations)
|
||||
to consider before installing
|
||||
[hass-web-proxy-integration](https://github.com/dermotduffy/hass-web-proxy-integration)
|
||||
and using this functionality.
|
||||
|
||||
```yaml
|
||||
cameras:
|
||||
- camera_entity: camera.office
|
||||
proxy:
|
||||
# [...]
|
||||
```
|
||||
|
||||

|
||||
|
||||
Not all [engines](./engine.md) benefit from proxying:
|
||||
|
||||
| Engine | Purpose of proxying |
|
||||
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `frigate` | The Frigate integration already comes with a built-in proxy, so this functionality does not serve any purpose for `frigate`. |
|
||||
| `reolink`, `motioneEye` | May be used to fetch videos in cases where the browser may not be able to access the camera/NVR, or the camera/NVR may use a self-signed SSL certificate that your browser would otherwise reject due to [mixed content](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content). |
|
||||
| `generic` | `generic` cameras do not have media, so proxying currently would serve no purpose. |
|
||||
|
||||
Regardless of the parameters, the integration will never attempt to proxy
|
||||
content if the
|
||||
[hass-web-proxy-integration](https://github.com/dermotduffy/hass-web-proxy-integration)
|
||||
is not detected.
|
||||
|
||||
Proxying parameters:
|
||||
|
||||
| Option | Default | Description |
|
||||
| ------------------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `media` | `auto` | Whether or not to proxy media items. `true` to proxy, `false` to not proxy, or `auto` to allow the camera engine to decide whether to proxy or not. |
|
||||
| `dynamic` | `true` | Whether to dynamically (at the time) request proxying of the required media item, or rely on statically user-configured pre-existing proxying. See the [hass-web-proxy-integration documentation](https://github.com/dermotduffy/hass-web-proxy-integration). |
|
||||
| `ssl_verification` | `auto` | Whether to verify the validity of SSL certificates. If `true` always verifies, if `false` never verifies and if `auto` the [engine](./engine.md) decides the best setting for that camera ecosystem. |
|
||||
| `ssl_ciphers` | `auto` | Whether to use `default`, `intermediate`, `insecure` or `modern` SSL ciphers. See the [Home Assistant code](https://github.com/home-assistant/core/blob/dev/homeassistant/util/ssl.py) for the precise list of SSL ciphers each implies. If `auto` the [engine](./engine.md) decides the best setting for that camera ecosystem. |
|
||||
|
||||
## `triggers`
|
||||
|
||||
The `triggers` block configures what triggers a camera. Triggering can be used
|
||||
@@ -264,19 +309,11 @@ cameras:
|
||||
|
||||
[](../common/expanded-warning.md ':include')
|
||||
|
||||
See [Engines](engine.md) and [Live Providers](live-provider.md) for other options nested under `cameras`.
|
||||
|
||||
```yaml
|
||||
cameras:
|
||||
- camera_entity: camera.front_Door
|
||||
live_provider: ha
|
||||
engine: auto
|
||||
frigate:
|
||||
url: http://my.frigate.local
|
||||
client_id: frigate
|
||||
camera_name: front_door
|
||||
labels:
|
||||
- person
|
||||
zones:
|
||||
- steps
|
||||
# Show events for camera-2 when this camera is viewed.
|
||||
dependencies:
|
||||
all_cameras: false
|
||||
@@ -297,23 +334,10 @@ cameras:
|
||||
x: 50
|
||||
y: 50
|
||||
- camera_entity: camera.entrance
|
||||
live_provider: webrtc-card
|
||||
engine: auto
|
||||
frigate:
|
||||
url: http://my-other.frigate.local
|
||||
client_id: frigate-other
|
||||
camera_name: entrance
|
||||
labels:
|
||||
- car
|
||||
zones:
|
||||
- driveway
|
||||
icon: 'mdi:car'
|
||||
title: 'Front entrance'
|
||||
# Custom identifier for the camera to refer to it above.
|
||||
id: 'camera-2'
|
||||
webrtc_card:
|
||||
entity: camera.entrance_rtsp
|
||||
url: 'rtsp://username:password@camera:554/av_stream/ch0'
|
||||
triggers:
|
||||
motion: false
|
||||
occupancy: true
|
||||
@@ -321,59 +345,6 @@ cameras:
|
||||
- binary_sensor.entrance_sensor
|
||||
dependencies:
|
||||
all_cameras: false
|
||||
- camera_entity: camera.sitting_room
|
||||
live_provider: go2rtc
|
||||
go2rtc:
|
||||
modes:
|
||||
- webrtc
|
||||
- mse
|
||||
- mp4
|
||||
- mjpeg
|
||||
stream: sitting_room
|
||||
url: 'https://my.custom.go2rtc.backend'
|
||||
cast:
|
||||
method: dashboard
|
||||
dashboard:
|
||||
dashboard_path: cast
|
||||
view_path: front-door
|
||||
- camera_entity: camera.sitting_room_webrtc_card
|
||||
live_provider: webrtc_card
|
||||
webrtc_card:
|
||||
# Arbitrary WebRTC Card options, see https://github.com/AlexxIT/WebRTC#configuration .
|
||||
entity: camera.sitting_room_rtsp
|
||||
ui: true
|
||||
- camera_entity: camera.kitchen
|
||||
live_provider: jsmpeg
|
||||
jsmpeg:
|
||||
options:
|
||||
audio: false
|
||||
video: true
|
||||
pauseWhenHidden: false
|
||||
disableGl: false
|
||||
disableWebAssembly: false
|
||||
preserveDrawingBuffer: false
|
||||
progressive: true
|
||||
throttled: true
|
||||
chunkSize: 1048576
|
||||
maxAudioLag: 10
|
||||
videoBufferSize: 524288
|
||||
audioBufferSize: 131072
|
||||
- camera_entity: camera.back_yard
|
||||
live_provider: image
|
||||
image:
|
||||
mode: auto
|
||||
refresh_seconds: 1
|
||||
url: 'https://path/to/image.png'
|
||||
entity: image.office_person
|
||||
entity_parameters: 'width=400&height=200'
|
||||
- camera_entity: camera.office_motioneye
|
||||
motioneye:
|
||||
images:
|
||||
directory_pattern: '%Y-%m-%d'
|
||||
file_pattern: '%H-%M-%S'
|
||||
movies:
|
||||
directory_pattern: '%Y-%m-%d'
|
||||
file_pattern: '%H-%M-%S'
|
||||
- camera_entity: camera.zoomed
|
||||
dimensions:
|
||||
layout:
|
||||
@@ -436,6 +407,13 @@ cameras:
|
||||
device: '048123'
|
||||
cmd: preset
|
||||
preset: window
|
||||
- camera_entity: camera.needs_proxy
|
||||
proxy:
|
||||
media: auto
|
||||
dynamic: true
|
||||
ssl_verification: auto
|
||||
ssl_ciphers: auto
|
||||
cameras_global:
|
||||
live_provider: ha
|
||||
triggers:
|
||||
motion: false
|
||||
```
|
||||
@@ -4,19 +4,21 @@
|
||||
|
||||
A "Camera Engine" defines what "type" of camera is being configured (e.g. `frigate`), each engine offers different capabilities:
|
||||
|
||||
| Engine | Live | Supports clips | Supports Snapshots | Supports Recordings | Supports Timeline | Supports PTZ out of the box | Supports manually configured PTZ | Favorite events | Favorite recordings | Detect new events | Detect new snapshots | Detect new clips |
|
||||
| ----------- | ------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | --------------------------- | -------------------------------- | ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ |
|
||||
| `frigate` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_multiplication_x: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
|
||||
| `generic` | :white_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :white_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: |
|
||||
| `motioneye` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_multiplication_x: | :white_check_mark: | :heavy_multiplication_x: | :white_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: |
|
||||
| Engine | Live | Supports clips | Supports Snapshots | Supports Recordings | Supports Timeline | Supports PTZ out of the box | Supports manually configured PTZ | Favorite events | Favorite recordings | Detect new events | Detect new snapshots | Detect new clips | May requiring [proxying](./README.md?id=proxy) |
|
||||
| ----------- | ------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | --------------------------- | -------------------------------- | ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | ---------------------------------------------- |
|
||||
| `frigate` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_multiplication_x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_multiplication_x: |
|
||||
| `generic` | :white_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :white_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: |
|
||||
| `motioneye` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_multiplication_x: | :white_check_mark: | :heavy_multiplication_x: | :white_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :white_check_mark: |
|
||||
| `reolink` | :white_check_mark: | :white_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :white_check_mark: | :heavy_multiplication_x: | :white_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :white_check_mark: |
|
||||
|
||||
#### Live providers supported per Engine
|
||||
### Live providers supported per Engine
|
||||
|
||||
| Engine / Live Provider | `ha` | `image` | `jsmpeg` | `go2rtc` | `webrtc-card` |
|
||||
| ---------------------- | ------------------ | ------------------ | ------------------------ | ------------------ | ------------------------ |
|
||||
| `frigate` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
|
||||
| `generic` | :white_check_mark: | :white_check_mark: | :heavy_multiplication_x: | :white_check_mark: | :white_check_mark: |
|
||||
| `motioneye` | :white_check_mark: | :white_check_mark: | :heavy_multiplication_x: | :white_check_mark: | :heavy_multiplication_x: |
|
||||
| `reolink` | :white_check_mark: | :white_check_mark: | :heavy_multiplication_x: | :white_check_mark: | :heavy_multiplication_x: |
|
||||
|
||||
See [Live Provider Configuration](live-provider.md) for more details on live providers.
|
||||
|
||||
@@ -80,3 +82,54 @@ cameras:
|
||||
| ------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `directory_pattern` | `%Y-%m-%d` | The directory that motionEye is configured to store media into. May contain multiple sub-directories separated by `/`. Path must encode the date of the media using MotionEye patterns such as `%Y`, `%m`, `%d`, `%H`, `%M`, `%S` (at least one pattern is required). Consult MotionEye help text for information on these substitutions. |
|
||||
| `file_pattern` | `%H-%M-%S` | Within a directory (as matched by `directory_pattern`) the media items must exist and match this pattern. `file_pattern` must encode the time of the media using MotionEye patterns such as `%Y`, `%m`, `%d`, `%H`, `%M`, `%S` (at least one pattern is required). Consult MotionEye help text for information on these substitutions. |
|
||||
|
||||
## `reolink`
|
||||
|
||||
[](../common/experimental-warning.md ':include')
|
||||
|
||||
The `reolink` block configures options for a Reolink camera.
|
||||
|
||||
```yaml
|
||||
cameras:
|
||||
- camera_entity: camera.office
|
||||
reolink:
|
||||
# [...]
|
||||
```
|
||||
|
||||
| Option | Default | Description |
|
||||
| ------------------ | ------- | ------------------------------------------------------------------------------------------------------------------ |
|
||||
| `media_resolution` | `low` | Whether to retrieve `high` or `low` resolution media items. |
|
||||
| `url` | | The URL of the Reolink camera/NVR UI. If set, this value will be (exclusively) used for a `Camera UI` menu button. |
|
||||
|
||||
## Fully expanded reference
|
||||
|
||||
[](../common/expanded-warning.md ':include')
|
||||
|
||||
```yaml
|
||||
cameras:
|
||||
- camera_entity: camera.office_auto
|
||||
engine: auto
|
||||
- camera_entity: camera.office_frigate
|
||||
frigate:
|
||||
url: http://my.frigate.local
|
||||
client_id: frigate
|
||||
camera_name: front_door
|
||||
labels:
|
||||
- person
|
||||
zones:
|
||||
- steps
|
||||
- camera_entity: camera.office_motioneye
|
||||
motioneye:
|
||||
images:
|
||||
directory_pattern: '%Y-%m-%d'
|
||||
file_pattern: '%H-%M-%S'
|
||||
movies:
|
||||
directory_pattern: '%Y-%m-%d'
|
||||
file_pattern: '%H-%M-%S'
|
||||
- camera_entity: camera.office_generic
|
||||
engine: generic
|
||||
- camera_entity: camera.office_reolink
|
||||
reolink:
|
||||
url: http://my.reolink.local
|
||||
media_resolution: low
|
||||
```
|
||||
@@ -89,3 +89,56 @@ cameras:
|
||||
| `entity` | | The RTSP camera entity to pass to the WebRTC Card for this camera. |
|
||||
| `url` | Depends on the camera engine (e.g. Frigate cameras will automatically use the camera name since this is the [recommended setup](https://deploy-preview-4055--frigate-docs.netlify.app/guides/configuring_go2rtc/)). | The RTSP url to pass to the WebRTC Card, e.g. `rtsp://USERNAME:PASSWORD@CAMERA:554/RTSP_PATH` |
|
||||
| `*` | | Any options specified in the `webrtc_card:` YAML dictionary are silently passed through to the AlexxIT's WebRTC Card. See [WebRTC Configuration](https://github.com/AlexxIT/WebRTC#configuration) for full details this external card provides, e.g. `ui: true` will enable the WebRTC Card UI. |
|
||||
|
||||
## Fully expanded reference
|
||||
|
||||
[](../common/expanded-warning.md ':include')
|
||||
|
||||
```yaml
|
||||
cameras:
|
||||
- camera_entity: camera.office_ha
|
||||
live_provider: ha
|
||||
- camera_entity: camera.office_webrtc_card
|
||||
live_provider: webrtc-card
|
||||
webrtc_card:
|
||||
entity: camera.office_rtsp
|
||||
url: 'rtsp://username:password@camera:554/av_stream/ch0'
|
||||
# Arbitrary WebRTC Card options, see https://github.com/AlexxIT/WebRTC#configuration .
|
||||
ui: true
|
||||
- camera_entity: camera.office_go2rtc
|
||||
live_provider: go2rtc
|
||||
go2rtc:
|
||||
modes:
|
||||
- webrtc
|
||||
- mse
|
||||
- mp4
|
||||
- mjpeg
|
||||
stream: sitting_room
|
||||
url: 'https://my.custom.go2rtc.backend'
|
||||
- camera_entity: camera.office_jsmpeg
|
||||
live_provider: jsmpeg
|
||||
jsmpeg:
|
||||
options:
|
||||
audio: false
|
||||
video: true
|
||||
pauseWhenHidden: false
|
||||
disableGl: false
|
||||
disableWebAssembly: false
|
||||
preserveDrawingBuffer: false
|
||||
progressive: true
|
||||
throttled: true
|
||||
chunkSize: 1048576
|
||||
maxAudioLag: 10
|
||||
videoBufferSize: 524288
|
||||
audioBufferSize: 131072
|
||||
- camera_entity: camera.office_image
|
||||
live_provider: image
|
||||
image:
|
||||
mode: auto
|
||||
refresh_seconds: 1
|
||||
url: 'https://path/to/image.png'
|
||||
entity: image.office_person
|
||||
entity_parameters: 'width=400&height=200'
|
||||
cameras_global:
|
||||
live_provider: go2rtc
|
||||
```
|
||||
@@ -0,0 +1 @@
|
||||
!> This functionality is experimental. It may be broken, slow or change without warning.
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="svg62"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
sodipodi:docname="reolink.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs66" />
|
||||
<sodipodi:namedview
|
||||
id="namedview64"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
showgrid="true"
|
||||
inkscape:zoom="36.417984"
|
||||
inkscape:cx="18.191562"
|
||||
inkscape:cy="8.6633022"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="1527"
|
||||
inkscape:window-x="1080"
|
||||
inkscape:window-y="227"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g68">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid1175"
|
||||
dotted="false"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Reolink Logo"
|
||||
id="g68">
|
||||
<path
|
||||
style="fill:#ffffff;stroke-width:0.0393282;fill-opacity:1"
|
||||
d="M 17.037254,23.964909 C 16.764634,23.917573 16.561708,23.83617 16.325735,23.67954 16.196719,23.593913 14.543544,21.952905 12.217956,19.602014 10.077426,17.438191 8.2198993,15.582673 8.0901166,15.478642 7.6038998,15.088895 7.0877741,14.869424 6.4986827,14.801908 6.3140805,14.780765 5.079061,14.763305 3.7541964,14.763126 l -2.408845,-4.78e-4 0.00713,-7.3937713 v -7.3935985 l 6.2040046,3.536e-5 c 3.9799342,1.969e-5 6.3590882,0.01465833 6.6366112,0.0408227 2.331195,0.21982024 4.364771,1.49885914 5.578726,3.50085534 0.686043,1.1313823 1.020901,2.2783695 1.067186,3.6554196 0.06335,1.8844953 -0.57426,3.6597378 -1.831469,5.0992438 -0.756457,0.866146 -1.861127,1.62991 -2.928729,2.024919 l -0.319718,0.118287 -1.951287,-1.979284 -1.951286,-1.979278 1.046741,-0.02346 c 0.575706,-0.01291 1.099833,-0.03689 1.164724,-0.0533 0.596068,-0.150649 0.949703,-0.313968 1.322206,-0.6106282 0.643573,-0.5125401 1.046169,-1.2439257 1.137985,-2.0673522 0.167852,-1.505317 -0.771478,-2.8704888 -2.263547,-3.2897068 L 13.950001,4.3234481 9.7981831,4.3106846 5.6392389,4.29801 v 3.0692702 3.0692648 l 1.4185165,7.9e-4 c 1.6275801,8.87e-4 1.7789152,0.01912 2.3105245,0.27984 0.3095679,0.15183 0.389559,0.219499 1.0817441,0.915083 3.027399,3.042274 12.19404,12.30837 12.204589,12.337002 0.0161,0.04373 -5.364393,0.03953 -5.617359,-0.0045 z"
|
||||
id="path1173"
|
||||
inkscape:label="R" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 89 KiB |
@@ -9,3 +9,4 @@ builtin custom items not found in the traditional [Material Design Icons
|
||||
| ----------- | --------------------------------------------------------------------------- |
|
||||
| `frigate` |  |
|
||||
| `motioneye` |  |
|
||||
| `reolink` |  |
|
||||
Reference in new issue
Block a user