Complete documentation overhaul.

This commit is contained in:
Dermot Duffy
2024-04-01 21:09:20 -07:00
parent 9d62a5ceee
commit 955bcb3a9a
87 changed files with 6360 additions and 4540 deletions
+981
View File
@@ -0,0 +1,981 @@
# Examples
## Actions on `tap`
You can add actions to the card to be trigger on `tap`, `double_tap`, `hold`, `start_tap` or `end_tap`.
In this example double clicking the card in any view will cause the card to go
into fullscreen mode, **except** when the view is `live` in which case the
office lights are toggled.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
view:
actions:
double_tap_action:
action: custom:frigate-card-action
frigate_card_action: fullscreen
live:
actions:
entity: light.office_main_lights
double_tap_action:
action: toggle
```
## Aspect ratios
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
dimensions:
aspect_ratio_mode: static
aspect_ratio: '4:3'
```
## Automation
This example will automatically turn on the first configured substream when the
card is put in fullscreen mode, and turn off the substream when exiting
fullscreen mode.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
live_provider: image
dependencies:
cameras:
- office_hd
- camera_entity: camera.office
title: Office HD
live_provider: go2rtc
id: office_hd
capabilities:
disable_except:
- substream
automations:
- conditions:
- condition: fullscreen
fullscreen: true
actions:
- action: custom:frigate-card-action
frigate_card_action: live_substream_on
actions_not:
- action: custom:frigate-card-action
frigate_card_action: live_substream_off
```
## `card-mod`
This card allows the use of
[card-mod](https://github.com/thomasloven/lovelace-card-mod) to style arbitrary
card contents.
!> `card-mod` relies on the underlying internal DOM structure to style elements
-- as such, while its use is possible, it's not officially supported and zero
attempt is made to preserve backwards compatability of the internal DOM between
any versions. It may look good, but you're on your own!
This example changes the color and removes the padding around a [Picture
Elements state
label](https://www.home-assistant.io/lovelace/picture-elements/#state-label).
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
card_mod:
style:
frigate-card-elements $:
hui-state-label-element $: |
div {
padding: 0px !important;
color: blue;
}
```
## Cast a `dashboard`
This example will configure a Frigate card that can cast a dashboard view to a media player, which has a second Frigate card in panel mode with a low-latency live provider.
### Source card
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
live_provider: image
cast:
method: dashboard
dashboard:
dashboard_path: cast
view_path: office
```
### Dashboard configuration
?> This dashboard is configured at the path `/cast/` (path referred to in `dashboard_path` above).
```yaml
title: Frigate Card Casting
views:
- title: Casting
# This path is referred to in `view_path` above.
path: office
# Ensure the video is "maximized" / dashboard in "panel" mode.
type: panel
cards:
- type: custom:frigate-card
cameras:
- camera_entity: camera.office
live_provider: go2rtc
```
## Conditional elements
You can restrict elements to only show for certain
[views](configuration/view.md?id=supported-views) using a
`custom:frigate-card-conditional` element. This example shows a car icon that
calls a service but only in the `live` view.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: custom:frigate-card-conditional
conditions:
- condition: view
views:
- live
elements:
- type: icon
icon: mdi:car
style:
background: rgba(255, 255, 255, 0.25)
border-radius: 5px
right: 25px
bottom: 50px
tap_action:
action: call-service
service: amcrest.ptz_control
service_data:
entity_id: camera.kitchen
movement: up
```
## Conditional menu icons
You can have icons conditionally added to the menu based on entity state.
### Show a menu icon based on state
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: conditional
conditions:
- condition: state
entity: light.office_main_lights
state: on
elements:
- type: custom:frigate-card-menu-state-icon
entity: light.office
tap_action:
action: toggle
```
### Show a menu icon based on camera triggering
This example adds a menu button to optionally activate a siren when the camera is triggered.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: custom:frigate-card-conditional
elements:
- type: custom:frigate-card-menu-icon
icon: mdi:alarm-bell
title: Activate alarm
style:
color: red
tap_action:
action: call-service
service: homeassistant.toggle
data:
entity_id: siren.siren
conditions:
- condition: triggered
triggered:
- camera.office
```
## Events from other cameras
`dependencies.cameras` allows events/recordings for other cameras to be shown
along with the currently selected camera. For example, this can be used to show
events with the `birdseye` camera (since it will not have events of its own).
### Using dependent cameras with birdseye
This example shows events for two other cameras when `birdseye` is selected.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
- camera_entity: camera.kitchen
- frigate:
camera_name: birdseye
dependencies:
cameras:
- camera.office
- camera.kitchen
```
### Using dependent cameras with birdseye for all cameras
This example shows events for *all* other cameras when `birdseye` is selected.
This is just a shortcut for naming all other cameras.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.kitchen
- camera_entity: camera.sitting_room
- frigate:
camera_name: birdseye
dependencies:
all_cameras: true
```
## Human interaction
This example will automatically use a HD live substream when
the mouse cursor interacts with the card.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
live_provider: image
dependencies:
cameras:
- camera.office_hd
- camera_entity: camera.office_hd
live_provider: go2rtc
capabilities:
disable_except:
- substream
automations:
- actions:
- action: custom:frigate-card-action
frigate_card_action: live_substream_on
actions_not:
- action: custom:frigate-card-action
frigate_card_action: live_substream_off
conditions:
- condition: interaction
interaction: true
```
## Media layout
These examples change how the media fits and is positioned within the card dimensions.
### Stretch a camera into a 4:4 square
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.landing
dimensions:
aspect_ratio: '4:4'
layout:
fit: fill
```
### Convert a landscape camera to a portrait live view
Take the left-hand side (position with x == `0`) and use that as the basis of a `9:16` (i.e. portrait) live view.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
dimensions:
aspect_ratio: '9:16'
layout:
fit: cover
position:
x: 0
```
## Menu alignment
This example moves the fullscreen button into its own group aligned to the
`left`, enables the `image` button and orders it furthest to the `right`.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
menu:
alignment: right
buttons:
image:
enabled: true
priority: 100
fullscreen:
alignment: opposing
```
## Menu icons
You can add custom icons to the menu with arbitrary actions. This example adds
an icon that navigates the browser to the releases page for this card:
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: custom:frigate-card-menu-icon
icon: mdi:book
tap_action:
action: url
url_path: https://github.com/dermotduffy/frigate-hass-card/releases
```
## Menu state icons
You can add custom state icons to the menu to show the state of an entity and
complete arbitrary actions. This example adds an icon that represents the state
of the `light.office_main_lights` entity, that toggles the light on double
click.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: custom:frigate-card-menu-state-icon
entity: light.office_main_lights
tap_action:
action: toggle
```
## Multiple actions
This example shows how to configure multiple actions for a single Frigate card user interaction, in this case both selecting a different camera and changing the view on `tap`. Note that multiple actions are not supported on stock Picture Elements, see [actions](configuration/actions.md) for more information.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: custom:frigate-card-menu-icon
icon: mdi:chair-rolling
tap_action:
- action: custom:frigate-card-action
frigate_card_action: camera_select
camera: camera.office
- action: custom:frigate-card-action
frigate_card_action: live
```
## Multiple providers
Cameras can be repeated with different providers (note the required use of `id`
to provide a separate unambiguous way of referring to that camera, since the
`camera_entity` is shared between the two cameras).
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
live_provider: jsmpeg
title: Office (JSMPEG)
- camera_entity: camera.office
live_provider: webrtc-card
title: Office (WebRTC)
id: office-webrtc
```
## Overriding configuration
You can override card configuration when certain [conditions](configuration/conditions.md) are met.
### Change menu position based on HA state
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
overrides:
- conditions:
- condition: state
entity: light.office_main_lights
state: 'on'
overrides:
menu:
position: bottom
```
### Change default view based on HA state
This example changes the default card view from `live` to `image` depending on
the value of the `binary_sensor.alarm_armed` sensor. The override alone will
only change the _default_ when the card next is requested to change to the
default view. By also including the `update_entities` parameter, we ask the card
to trigger a card update based on that entity -- which causes it to use the new
overriden default immediately.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
view:
default: live
update_entities:
- binary_sensor.alarm_armed
overrides:
- conditions:
- condition: state
entity: binary_sensor.alarm_armed
state: 'off'
overrides:
view:
default: image
```
### Change grid behavior in full screen
This example will always render 5 columns in fullscreen mode in both the live
and media viewer views, and will not enlarge the selected item. The [normal auto-layout behavior](configuration/grid-layout-algorithm.md) will be used outside of fullscreen mode.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
overrides:
- conditions:
- condition: fullscreen
fullscreen: true
- condition: display_mode
display_mode: grid
overrides:
live:
display:
grid_columns: 5
grid_selected_width_factor: 1
media_viewer:
display:
grid_columns: 5
grid_selected_width_factor: 1
```
### Change menu style when expanded
This example changes the menu style to `overlay` in expanded mode in order to
take advantage of the extra horizontal space of the dialog/popup.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
menu:
style: hidden
overrides:
- conditions:
- condition: expand
expand: true
overrides:
menu:
style: overlay
```
### Hide menu in fullscreen
This example disables the menu unless the card is in fullscreen mode, and uses a
card-wide action to enable fullscreen mode on `double_tap`.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
view:
actions:
double_tap_action:
action: custom:frigate-card-action
frigate_card_action: fullscreen
overrides:
- conditions:
- condition: fullscreen
fullscreen: true
overrides:
menu:
style: none
```
## PTZ control
The card supports using PTZ controls to conveniently control pan, tilt and zoom for cameras. This example shows the PTZ controls on the `live` view. Note that if your camera engine supports it (e.g. `frigate`) this will just work out of the box with no configuration at all.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
live:
ptz:
orientation: horizontal
service: sonoff.send_command
data_left:
device: '048123'
cmd: left
data_right:
device: '048123'
cmd: right
data_up:
device: '048123'
cmd: up
data_down:
device: '048123'
cmd: down
```
## `screen` conditions
These examples show altering the card configuration based on device or viewport properties.
### Change menu position when orientation changes
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
- camera_entity: camera.kitchen
menu:
style: overlay
overrides:
- conditions:
- condition: screen
media_query: '(orientation: landscape)'
overrides:
menu:
position: left
```
### Hide menu & controls when viewport width <= 300 (e.g. PIP mode)
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
- camera_entity: camera.kitchen
overrides:
- conditions:
- condition: screen
media_query: '(max-width: 300px)'
overrides:
menu:
style: none
live:
controls:
next_previous:
style: none
thumbnails:
mode: none
```
## State Badges
You can add a state badge to the card showing arbitrary entity states. This
example adds a state badge showing the temperature and hides the label text:
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: state-badge
entity: sensor.office_temperature
style:
right: '-20px'
top: 100px
color: rgba(0,0,0,0)
opacity: 0.5
```
![](images/picture-elements-temperature.png 'Picture elements temperature example :size=400')
## Static images
This example fetches a static image every 10 seconds (in this case the latest image saved on the Frigate server for a given camera).
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
view:
default: image
image:
src: https://my-friage-server/api/living_room/latest.jpg
refresh_seconds: 10
```
## Submenus
You can add submenus to the menu -- buttons that when pressed reveal a dropdown submenu of configurable options.
### Basic submenu
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: custom:frigate-card-menu-submenu
icon: mdi:menu
items:
- title: Lights
icon: mdi:lightbulb
entity: light.office_main_lights
tap_action:
action: toggle
- title: Google
icon: mdi:google
tap_action:
action: url
url_path: https://www.google.com
- title: Fullscreen
icon: mdi:fullscreen
tap_action:
action: custom:frigate-card-action
frigate_card_action: fullscreen
```
### Conditional submenu
This example shows submenus conditional on the camera selected.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: custom:frigate-card-conditional
conditions:
- condition: camera
cameras:
- camera.office
elements:
- type: custom:frigate-card-menu-submenu
icon: mdi:door
items:
- title: Office Lights
icon: mdi:lightbulb
entity: light.office_main_lights
tap_action:
action: toggle
- type: custom:frigate-card-conditional
conditions:
- condition: camera
cameras:
- camera.kitchen
elements:
- type: custom:frigate-card-menu-submenu
icon: mdi:sofa
items:
- title: Kitchen Lights
icon: mdi:lightbulb
entity: light.kitchen_lights
tap_action:
action: toggle
- title: Kitchen Lamp
icon: mdi:lightbulb
entity: light.kitchen_lamp
tap_action:
action: toggle
```
### `select` submenu
You can easily add a submenu to the menu based on a `select` or `input_select` entity. This example imagines the user has an `input_select` entity configured in their Home Assistant configuration like so:
```yaml
input_select:
office_scene:
name: Office Scene Select
options:
- scene.office_quiet_scene
- scene.office_party_scene
icon: mdi:lightbulb
```
The following will convert this entity into a submenu:
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: custom:frigate-card-menu-submenu-select
entity: input_select.office_scene
```
To override 1 or more individual options (e.g. to set custom icons and titles)
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: custom:frigate-card-menu-submenu-select
icon: mdi:lamps
entity: input_select.office_scene
options:
scene.office_quiet_scene:
icon: mdi:volume-off
title: Ssssssh
scene.office_party_scene:
icon: mdi:party-popper
title: Party!
```
## Substreams
The card supports configuring 'substreams' (alternative live views) a given
camera through the use of [camera dependencies](configuration/cameras/README.md?id=dependencies).
This example shows two substreams for a single live camera, and uses the 'HD' icon.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
live_provider: image
dependencies:
cameras:
- office_hd
- camera_entity: camera.office
title: Office HD
live_provider: go2rtc
id: office_hd
# This camera serves only as a substream.
capabilities:
disable_except:
- substream
menu:
buttons:
substreams:
icon: mdi:high-definition
```
## Trigger actions
You can control the card itself with the `custom:frigate-card-action` action.
This example shows an icon that toggles the card fullscreen mode.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
elements:
- type: icon
icon: mdi:fullscreen
style:
left: 40px
top: 40px
tap_action:
action: custom:frigate-card-action
frigate_card_action: fullscreen
```
## Trigger fullscreen
The card cannot automatically natively trigger fullscreen mode without the user
clicking, since Javascript (understandbly) prevents random websites from
triggering fullscreen mode without the user having activated it.
This example uses
[hass-browser_mod](https://github.com/thomasloven/hass-browser_mod) with an
automation to trigger a popup. Thanks to
[conorlap@](https://github.com/conorlap) for the following example:
```yaml
alias: >-
Doorbell Pressed OR Human Detected - Firefox browser full screen video feed
for 15 seconds
description: ""
trigger:
- platform: state
from: "off"
to: "on"
entity_id:
- binary_sensor.frontdoor_person_occupancy
- platform: state
entity_id:
- binary_sensor.front_door_dahua_button_pressed
to: "on"
condition: []
action:
- service: browser_mod.popup
data:
size: wide
timeout: 15000
content:
type: custom:frigate-card
aspect_ratio: 55%
cameras:
- camera_entity: camera.frontdoor
live_provider: ha
menu:
style: none
live:
controls:
title:
mode: none
target:
device_id:
- d0e93101edfg44y3yt35y5y45y54y
mode: single
```
## Trigger `live`
This example will change to `live` when a camera is triggered, using different
trigger conditions per camera. It will change back to the `default` view when
untriggered.
```yaml
type: custom:frigate-card
cameras:
# This is a Frigate camera which will automatically
# be triggered when events occur.
- camera_entity: camera.office
# This is a Frigate camera which will only be triggered
# by motion entity changes or a door being opened.
- camera_entity: camera.kitchen
triggers:
occupancy: false
motion: true
entities:
- binary_sensor.kitchen_door_opened
events: []
view:
triggers:
show_trigger_status: true
filter_selected_camera: false
actions:
trigger: live
untrigger: default
```
## Video control from menu
Disable the stock video controls and add menu button equivalents.
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
live:
controls:
builtin: false
media_viewer:
controls:
builtin: false
menu:
buttons:
play:
enabled: true
mute:
enabled: true
```
## URL actions
The card can respond to actions in the query string. See [URL Actions](usage/url-actions.md).
?> These examples assume the dashboard URL is `https://ha.mydomain.org/lovelace-test/0` .
### Choosing `clips` view on a named card
This example assumes that one card (of potentially multiple Frigate Cards on the dashboard) is configured with a `card_id` parameter:
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
card_id: main
```
```
https://ha.mydomain.org/lovelace-test/0?frigate-card-action.main.clips
```
### Choosing the camera from a separate picture elements card
In this example, the card will select a given camera when the user navigates from a *separate* Picture Elements card:
Frigate Card configuration:
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
- camera_entity: camera.kitchen
```
Picture Elements configuration:
```yaml
type: picture-elements
image: https://demo.home-assistant.io/stub_config/floorplan.png
elements:
- type: icon
icon: mdi:cctv
style:
top: 22%
left: 30%
tap_action:
action: navigate
navigation_path: /lovelace-test/0?frigate-card-action.camera_select=camera.office
- type: icon
icon: mdi:cctv
style:
top: 71%
left: 42%
tap_action:
action: navigate
navigation_path: /lovelace-test/0?frigate-card-action.camera_select=camera.kitchen
```
![](images/navigate-picture-elements.gif "Taking card actions via the URL :size=400" )
### Selecting a camera in expanded mode via query string
```
https://ha.mydomain.org/lovelace-test/0?frigate-card-action.camera_select=kitchen&frigate-card-action.expand
```
## WebRTC Card configuration
```yaml
type: custom:frigate-card
cameras:
- camera_entity: camera.office
live_provider: webrtc-card
webrtc_card:
ui: true
```