Video doorbells and intercoms: preview, last visitor, ring history and quick actions.
Cards for video doorbells and intercoms: the camera preview, the last visitor with a snapshot, the rings of the day, and quick actions to open the door or the gate, send a message or mute the chime. A drawn doorbell rings, vibrates and frames a person.
Highlights
- Drawn doorbell animated when it rings, on motion and when a person is detected
- Camera snapshot or live stream, glowing while it rings
- Last visitor with its snapshot, and the ring history
- Open the door or the gate after a confirmation, quick messages, mute
- Ring, Reolink, UniFi Protect, Nest, Tapo, DoorBird, Matter, Frigate and more
- Mini card with a detail button showing the full card
Works with
Brands & integrations
Ring
Reolink
UniFi Protect
Google Nest
Tapo
DoorBird
Matter
HomeKit
Frigate
Cards
type: custom:doorbell-cardInstall
- 1Open the repository in the Marketplace with the Add to Marketplace button above, or add
github.com/juju35/ha-doorbell-cardas a custom repository (category Dashboard). - 2Download it from the Marketplace.
- 3Reload the browser and add the card from the dashboard editor.
Gallery 15
Documentation
From the README Features
Features
- Two cards: a full Doorbell Card (
custom:doorbell-card) and a compact Doorbell Mini Card (custom:doorbell-mini-card) - Drawn video doorbell, dark, white or stainless steel (per brand, or
color), colored by its state and animated: it vibrates with sound waves while it rings, sweeps a radar above its lens on motion and frames a detected person (see Animations); or your own picture - Header icon in a tinted round badge taking the color of the state, and a status chip on the title line: Ringing (orange), Person / Motion (blue), Door unlocked (orange), Idle (green), Offline (red)
- Camera preview: snapshot refreshed every 10 seconds (
refresh_interval), or the live stream (camera_view: live); its frame glows and a banner says someone is at the door while it rings; click it for the camera's more-info dialog - Last visitor: time, day and how long ago, with its snapshot (taken by the card when the ring arrives, or the integration's snapshot image)
- Ring history from the recorder (last 24 hours by default), with the snapshots the card took for the rings it saw
- Quick actions, as smoked-glass buttons: Open the door or the gate (a lock is opened — or unlocked —, a relay button pressed, a switch or script turned on), always after a confirmation at the top of the card unless
confirm_open: false; Message, a list of quick messages spoken on a speaker (text-to-speech) or shown on the doorbell's display (UniFi Protect LCD message); Mute / Unmute the chime or the doorbell's button sound - Details: rings today, last motion, lock state and battery (whole percent)
- Collapsible sections (chevron to the right when folded, down when unfolded), folded back by a click anywhere else on the page
- Detail button on the mini card (top right): it switches the mini card to the full card's content and back; a click anywhere outside the card brings the compact view back
- Sections view: the full card takes 12 columns by default and at least 6, the mini card 6; narrow widths get their own layout (see Screenshots)
- Click any value to open its Home Assistant history (more-info dialog)
- Visual editor in the dashboard UI for both cards (no YAML needed)
- Light and dark mode, English, French, German, Spanish, Serbian (Cyrillic and Latin), Italian, Dutch, European Portuguese, Polish, Romanian, Danish, Swedish, Bulgarian, Russian, Ukrainian, Hungarian, Slovak, Czech, Slovenian, Latvian and Greek
- Single file, no external dependency; translations load on demand
Supported integrations
Supported integrations
| Integration | Doorbells | What the cards use |
|---|---|---|
| Ring Video Doorbell, Battery Doorbell, Doorbell Pro, Peephole Cam | Ding and motion event entities, live view camera, battery sensor, snapshot image |
|
| Reolink Video Doorbell (WiFi, PoE) | Visitor, motion and person binary_sensor entities, Fluent / Clear camera, doorbell button sound switch (mute) |
|
| G4 Doorbell, G4 Doorbell Pro, G6 Entry | Doorbell event, motion and person detection binary_sensor entities, camera, doorbell text select and text (quick messages on the doorbell's screen) |
|
| Nest Doorbell (wired, battery) | Chime, motion and person event entities, camera |
|
tapo_control) |
Tapo video doorbells (D230, D225…) | Doorbell ring and motion / person sensors, camera, chime switch |
| DoorBird D10x, D11x, D21x, D2101V… | Doorbell and motion event entities, camera, relay button (opens the gate) |
|
| Aqara G4 and other Matter / HomeKit doorbells | Doorbell event (device class doorbell), camera, motion sensor |
|
| Any camera watched by Frigate | Person occupancy binary_sensor, motion, camera, last snapshot image: pick the camera device and set the doorbell entity (doorbell) of the button you use |
|
| eufy Security, Blink, Amcrest, Hikvision, ONVIF… | Doorbells exposing an event or a binary sensor | Recognized from their entities as well; any entity can be set by hand (see Entities) |
A device is listed as a doorbell when it has an event entity of device class doorbell, or an event / binary_sensor entity named after a ring (ding, doorbell, visitor, ring, chime, press…). A door lock, a gate relay or a speaker of another device is set with the lock and tts_entity options. Details in How it works.
Prerequisites
Prerequisites
Home Assistant 2024.8 or later, with the integration of your doorbell configured. The ring history reads the recorder (enabled by default).
Configuration
Configuration
Card types#
| Card | Type |
|---|---|
| Doorbell Card | custom:doorbell-card |
| Doorbell Mini Card | custom:doorbell-mini-card |
Visual editor#
Edit a dashboard, click Add card and search for Doorbell Card or Doorbell Mini Card. The first doorbell is preselected; pick another device in the list if you have several (cameras without a doorbell are listed after the doorbells), set an optional title, the parts to display, the camera view and the quick messages. The entities found on the device are used unless you pick others under Entities. The preview updates live, and options left at their default are kept out of the generated YAML.
Minimal#
type: custom:doorbell-card
type: custom:doorbell-mini-card
Full options#
type: custom:doorbell-card
device: Front door
title: Front door
image: auto
color: auto
show_title: true
show_subtitle: true
show_camera: true
show_last: true
show_actions: true
show_details: true
show_history: true
confirm_open: true
camera_view: snapshot
refresh_interval: 10
ring_duration: 30
history_hours: 24
history_count: 5
collapsed:
- details
lock: lock.front_door
tts_entity: media_player.hallway_speaker
tts_engine: tts.piper
messages:
- We'll be right there
- Please leave the parcel at the door
language: en
type: custom:doorbell-mini-card
device: Gate
show_camera: true
show_actions: true
confirm_open: true
zoom: true
A camera of no device, or a doorbell made of entities of several devices:
type: custom:doorbell-card
camera: camera.yard
doorbell: binary_sensor.yard_button
motion: binary_sensor.yard_motion
lock: switch.gate_relay
Options reference#
| Option | Card | Default | Description |
|---|---|---|---|
device |
both | First doorbell | Device to display: its name (as shown in Home Assistant) or its device id (set by the visual editor) |
title |
both | Device name | Card title |
show_title |
both | true |
Show the title in the header (e.g. false under a section heading of your own) |
show_subtitle |
full | true |
Show the brand and model under the title |
image |
both | auto |
Picture: auto (drawn doorbell, animated), none, or the URL of your own picture (e.g. /local/my-doorbell.png) |
color |
both | auto |
Color of the drawn doorbell: auto (white for Nest and UniFi Protect, stainless steel for DoorBird, dark otherwise), dark, white or steel |
show_camera |
both | true |
Camera preview (full card) |
show_last |
full | true |
Last visitor: time, day, how long ago and snapshot |
show_actions |
both | true |
Open, Message and Mute buttons (the mini card shows Open and Mute) |
show_details |
full | true |
Rings today, last motion, lock and battery |
show_history |
full | true |
Ring history |
confirm_open |
both | true |
Ask before opening the door; false opens at once |
camera_view |
full | snapshot |
snapshot (refreshed every refresh_interval seconds) or live (the camera's stream, when Home Assistant's camera player is loaded; falls back to the snapshot) |
refresh_interval |
both | 10 |
Seconds between two snapshots of the preview (0: only when Home Assistant gives a new picture). Nothing is loaded while the card is hidden, and the live stream stops |
ring_duration |
both | 30 |
Seconds a ring is shown as Ringing after a doorbell event, or after a doorbell binary_sensor turned on (and while it stays on); also used for motion and person events |
history_hours |
full | 24 |
Period of the ring history, in hours |
history_count |
full | 5 |
Rings listed in the history |
collapsed |
full | [details] |
Sections folded by default, among details and history ([] to unfold everything) |
zoom |
mini | true |
Detail button at the top right of the mini card: it shows the full card's content (with the same options) and switches back to the compact view; a click outside the card also brings the compact view back. false removes the button |
messages |
both | — | Quick messages of the Message button. Without a list, the options of the doorbell's message select (UniFi Protect) are offered |
tts_entity |
both | — | Speaker (media_player) that speaks the quick messages |
tts_engine |
both | First tts entity |
Text-to-speech engine used with tts_entity |
language |
both | Auto | Force language: fr, en, de, es, sr, sr-Latn, it, nl, pt, pl, ro, da, sv, bg, ru, uk, hu, sk, cs, sl, lv or el (auto-detects from HA settings) |
Entities#
Every entity is found on the device; these options replace what was found, or complete it (in the visual editor, under Entities):
| Option | Domains | Found from |
|---|---|---|
camera |
camera |
The device's camera (its main stream before a "clear" or snapshot one) |
doorbell |
event, binary_sensor |
An event of device class doorbell, else an event or binary sensor named ding, doorbell, visitor, ring, chime, press… |
motion |
event, binary_sensor |
Named motion, else device class motion (person, vehicle or package detections that carry this device class are left out) |
person |
event, binary_sensor |
Named person, people, human, face or occupancy (Frigate) |
lock |
lock, button, switch, script, input_button |
The device's lock, else a button or switch named open, unlock, relay, gate, strike, door, buzzer (never a configuration or diagnostic entity, such as a restart button) |
mute |
switch, input_boolean |
Named mute, do not disturb, silent, chime, button sound, ringtone. A switch named after the sound (chime, button sound) is on while the doorbell rings aloud: Mute turns it off. mute_inverted: true / false overrides this |
snapshot |
image |
The device's image (last event snapshot) |
battery |
sensor |
Device class battery |
message_entity |
select, text |
Named message, LCD or doorbell text; UniFi Protect's doorbell text (any message) and its doorbell text select (the console's messages) |
How it works
How it works
Discovery#
The cards read the entity and device registries Home Assistant gives every dashboard (no extra request): the entities of each device are sorted into roles (camera, doorbell, motion, person, opener, mute, snapshot, battery, message) from their domain, their device class and their translation key or entity id (without the device's name, so that a device called "Front door" does not make every entity a door opener). Entity options replace a role or add one, so a lock, a gate relay or a speaker of another device works the same way.
Ringing#
A doorbell event entity's state is the time of its last event: the card shows Ringing for ring_duration seconds after it (30 by default). Only rings count: an entity with the standard ring event type counts that one only, and button events count their presses, not the releases that follow (Matter, HomeKit). A doorbell binary_sensor rings while it is on, and for ring_duration seconds after the card saw it turn on (Reolink's visitor sensor stays on a few seconds only). A timestamp that comes back after the entity was unavailable is not a new ring. Motion and person sensors work the same way.
Ring history and snapshots#
The history comes from the recorder (history/history_during_period over history_hours, read again every 10 minutes): each ring of an event entity, each time a binary sensor turned on. Rings that arrive while the card is shown are added at once, and the card takes a snapshot of the camera for each of them: it is shown as the last visitor's picture and next to the ring in the history while the page stays open. Without one, the last visitor shows the integration's snapshot image (Ring, Frigate…) when there is one.
Actions#
- Open: after the confirmation (unless
confirm_open: false), a lock is opened when it supports it (lock.open: latch / door strike, as Nuki), unlocked otherwise (lock.unlock: the door then stays unlocked until it is locked again); a button (DoorBird relay) is pressed; a switch or a script is turned on. A lock that asks for a code opens its own dialog, where the code is typed. The button pulses for a few seconds while the request is on its way - Message: one of the options of the doorbell's message select is selected (
select.select_option); any other text goes to the doorbell'stextentity (text.set_value, UniFi Protect: it stays on the screen until another message replaces it), else is spoken withtts.speakontts_entity - Mute: turns the mute switch on, or the chime / button sound switch off
Changelog
CHANGELOG.md 1.0.1Nov 13, 2026Latest
Fixes
- Folding back on a tap elsewhere now works on iOS (Safari and the companion app): a tap on something that is not clickable sent no click to the page, so the unfolded sections, the popup and the detailed view of the mini card stayed open. The press and the release are caught instead; a slider dragged out of the card and a scroll do not fold anything.
- Leaving the card (another dashboard view, a conditional card hidden) brings it back in its default state: sections folded as configured, popup closed, mini card compact.
- Clicks lost under an update: Home Assistant updates the card several times a second, and an update that rewrote the card between the press and the release replaced the element pressed, so that the click landed on the card itself and did nothing. The card is no longer rewritten while a press is in progress; the pending update is drawn right after the click.
- Focus ring after a mouse click: the focus was put back on the clicked element after each update, which drew the focus ring. It is now kept across updates only for the keyboard.
1.0.0Nov 13, 2026
Features
- Doorbell Card (
custom:doorbell-card) for video doorbells and intercoms: drawn doorbell colored by its state, camera preview (refreshed snapshot or live stream), last visitor (time, day, how long ago, snapshot), quick actions (open the door or the gate after a confirmation at the top of the card, quick messages by text-to-speech or on the doorbell's display, mute the chime), details (rings today, last motion, lock, battery) and ring history from the recorder. - Doorbell Mini Card (
custom:doorbell-mini-card): state, last visitor, Open and Mute buttons, and a detail button switching to the full card. - Animations of the drawn doorbell: it vibrates with sound waves while it rings, sweeps a radar above its lens on motion and frames a detected person; the camera frame glows and a banner shows while it rings. All of them honour
prefers-reduced-motion. - Entities discovered from the registries for Ring, Reolink, UniFi Protect, Google Nest, Tapo, DoorBird, Aqara (Matter / HomeKit), Frigate and more; every entity can also be set by hand.
- Snapshots taken by the card when a ring arrives, shown as the last visitor's picture and in the history.
- Visual editors for both cards, collapsible sections folded back by a click elsewhere, Sections view sizes and narrow layouts.
- 22 languages: English in the bundle, every other language in its own file loaded on demand.