🔔 Ring Intercom Video Camera — WebRTC live stream + snapshots (no subscription needed)

:bell: Ring Intercom Video Camera

Got a Ring Intercom Handset Video (2024/2025 model with camera)? The official Ring integration gives you lock + ding but no camera entity. This custom component adds it.

:sparkles: Features

  • :video_camera: WebRTC live stream in Lovelace — 720×576 @ 25fps + audio
  • :camera_with_flash: Server-side snapshots — camera.snapshot works from automations
  • :unlocked: No Ring Protect subscription needed
  • :key: No extra login — reuses your existing Ring integration auth
  • :package: HACS compatible

:high_voltage: Quick install

:one: HACS → Integrations → ⋮ → Custom repositories
:two: Add: https://github.com/cmos486/ring-intercom-video
:three: Download & add to configuration.yaml:
ring_intercom_camera:
:four: Restart HA — camera entity appears automatically

:thinking: How it works
The Ring Intercom Video uses the same WebRTC protocol as Ring doorbell cameras, but the official integration doesn’t expose it for intercoms. This component monkey-patches the intercom class to add the missing WebRTC methods and creates a native camera entity.

For live view: your browser connects directly to Ring via WebRTC — no server-side processing.
For snapshots: the server opens a temporary WebRTC session with aiortc to grab a frame.

:clipboard: Example automation
Capture a snapshot when someone rings and send it via Telegram:

actions:

  • variables:
    snap_file: “/config/www/tmp/intercom_{{ now().strftime(‘%Y%m%d_%H%M%S’) }}.jpg”
  • delay: 3
  • action: camera.snapshot
    data:
    entity_id: camera.your_intercom_camera
    filename: “{{ snap_file }}”
  • action: notify.your_telegram
    data:
    message: “:bell: Someone is at the door”
    data:
    photo:
    - file: “{{ snap_file }}”

:warning: Note for analog intercoms
If your Ring Intercom replaces a Fermax/Tegui/Comelit, the analog camera only outputs video during a ding or manual activation. Black screen the rest of the time is normal.

:link: Links
:package: GitHub: GitHub - cmos486/ring-intercom-video: Home Assistant custom component — WebRTC live-stream camera for Ring Intercom Handset Video · GitHub

Built on python-ring-doorbell and inspired by the official Ring camera integration.

4 Likes

Happy to have found this, thanks for your work. I have an Elvox 7558 and so far only Ring seems to have a way to integrate with this intercom system. I just upgraded from the Intercom Audio to the Intercom Video and was hoping there was a way to integrate the video.

After fiddling a bit, my first test the video seemed to work during a call downstairs, so that’s great already.
It doesn’t seem to work when I manually activate the video on the intercom itself though, I keep opening the video on the Elvox and checking the camera entity in HA and the picture stays black (aside from some pixels top left flickering). Every time the video (de)activates on Elvox, I can hear static through the HA stream, so something seems to be happening.

Any idea why the manually triggered video stays black? Was hoping to use a relay like you suggested for manual remote viewing

This is how Ring’s communication protocol works with that device/brand. In my case, I had to investigate how the data bus of my (Fermax) worked to know when I could make a request to Ring, since if I did it when the intercom itself had the channel open, I got a black screen.

:new_button: UPDATE: Companion frontend card released

Quick announcement: I've published a companion Lovelace card that provides
the missing UI for two-way audio with the intercom. Live video, push-to-talk,
open door button — all in one HACS-installable card.

:backhand_index_pointing_right: Dedicated thread: [link al nuevo post]
:backhand_index_pointing_right: Repo: GitHub - cmos486/ring-intercom-video-card: 🛎️ Two-way audio & video card for Ring Intercom Video in Home Assistant. Native WebRTC, push-to-talk, open door, multi-language. HACS compatible. · GitHub

1 Like

Hi! I dont know what I am missing but the camera entity is not created after restart.
I couldnt find any logs and for sure I have a intercom video (not audio).
The official ring integration is showing me 10 entities of the intercom.

Hi! The most likely cause is that the integration isn't actually loaded. HACS only copies the files into custom_components/ — it doesn't enable the integration. Since this component has no config flow, it only starts
if you add it to configuration.yaml. That also explains why you see no logs at all: the setup code never runs.

1. Add this to your configuration.yaml:

ring_intercom_camera:

logger:
  default: info
  logs:
    custom_components.ring_intercom_camera: debug

2. Restart Home Assistant.

3. Go to Settings → System → Logs and filter for ring_intercom_camera.

After the restart you should now see at least one log line. Let me know which one you get:

- "Found Ring Intercom Video…" → the entity camera.<name>_camera was created. Look for it under the Ring device, or in Developer Tools → States.
- "No Ring Intercom Video devices found" → your device's kind isn't intercom_handset_video. Please download the diagnostics of the official Ring integration (Settings → Devices & Services → Ring → ⋮ → Download diagnostics)
and send me the kind field of your intercom.
- Still no logs at all → the folder isn't in the right place. It must be exactly config/custom_components/ring_intercom_camera/, containing __init__.py, camera.py and manifest.json.

Quick checklist while you're at it:
- ✅ The official Ring integration is set up and shows your intercom's entities (you mentioned 10 — good).
- ✅ The folder name is exactly ring_intercom_camera.

Once you paste the log line here I'll know exactly what's going on. 🙂

There was some mistake in my configuration.yaml. Now the entity is created and I have been able to set up the lovelace card.
I am currently facing issues to answer from the card. It shows as disconnected always (even when someone calls) or sometimes as inactive.

Regards

Hey @cmos486, this integration rocks! But I have the same issue as the previous commenter. The card shows Idle, and when I tap on Pick Up, it shows Disconnected. I know the camera works because when I go to entities, I can open the camera, and even though the screen is black (I know that’s how it’s supposed to be if it’s not ringing), I can hear the audio.

Is there anything else I can check?

Also, this stopped the official Ring app from sending me the notification that the ring was triggered, and I can’t open the camera there or answer the door. The only thing that works on both Ring and HA is the Open/Unlock door entity.

I have to mention that I had ring-mqqt installed before this. I removed both ring-mqqt and the MQTT broker before installing your integration. With ring-mqtt, the official Ring app worked the same, though.

My system is Comelit.


Thanks for the kind words, and for the detailed report — that detail is what makes this diagnosable. There are actually **two separate problems** in what you describe


1. The card showing “Disconnected” — this is the microphone, not the camera

Your hardware is fine. You proved it yourself: the camera entity opens, and you hear audio. A black picture with no ding is exactly the expected behaviour for an analog intercom.

What fails is the card, and it fails *before* it ever talks to Ring. On “Pick up” the card asks the browser for microphone access first (for the two-way audio), and browsers only grant that in a **secure context**. If you reach Home Assistant over plain `http://192.168.x.x:8123`, that request fails immediately and the card gives up — which is why it goes to “Disconnected” instantly instead of hanging for a few seconds.

There is also a bug on my side that’s making this much harder to diagnose: the card *does* capture the real error and put it on screen, but the teardown routine overwrites it with “Disconnected” a moment later. So the useful message is there and then destroyed. That’s why you — and the previous commenter — can only report “Disconnected”. I’ll fix that, and I’ll also make the card fall back to listen-only when the microphone isn’t available, so you’d at least get video and incoming audio instead of nothing.

**Two things that would confirm it:**

  1. How do you access Home Assistant — `http://…`, `https://…`, or Nabu Casa?
  2. Open the browser console (F12 → Console), tap **Pick up**, and paste the line that starts with `[ring-intercom-video-card]`. That’s the actual error the card is hiding.

If it turns out to be the secure-context issue, any of these fixes it: Nabu Casa, a reverse proxy with Let’s Encrypt, or a native HA HTTPS certificate.


2. The Ring app losing notifications — this one isn’t the integration

I can be specific here rather than just reassuring: this integration never logs in to Ring and never registers for push notifications. It declares the official Ring integration as a dependency, reuses the session that integration already holds, and does nothing but bridge WebRTC signalling. There’s no mechanism by which it could take over your notifications.

What you’re hitting is the known Ring account-level behaviour with third-party clients — and your own observation confirms it: you saw the same thing with ring-mqtt. The usual workaround is to create a **dedicated Ring account** (a shared user on your device) and use that one for Home Assistant, keeping your primary account for the phone app.

**One thing that *can* be mine, though, and is worth checking:** the intercom digitizes a single analog video signal, so only **one live session at a time** can actually carry picture. If something in Home Assistant is holding a live view open — a wallpanel displaying the card, or a session that got stuck — the Ring app won’t be able to open the camera either.

Check the `binary_sensor.<your_intercom>_live_session` entity. If it’s `on` while nothing is actually streaming, that’s a stuck session on my side and I’d very much like to hear about it. Its `session_count` attribute gives the exact number.


About Comelit

Shouldn’t be a factor. The integration doesn’t care which analog system sits behind the Ring handset — it only talks to the Ring device, and yours is clearly working.


Let me know what the console says and we’ll get to the bottom of the card issue.

I have a problem with the card not showing video when picking up inside the Android HA Companion App. It just shows a grey play button:

Using the latest versions, HTTPS. The Android app can show the video fine through a camera card. Microphone and opening door also works fine in the HA app.
Video+mic works fine on Chrome/Firefox on both Android/Windows
An Android library compatibility problem?

.

I had a similar issue, got it fixed by logging out+in on all devices/integrations, now both Ring app and this integration work.

Thanks for the report — reproduced and fixed in **v1.2.2**. It’s not an Android media-library incompatibility, it’s the **WebView autoplay policy**.

What’s going on

The Companion app renders the frontend inside an Android WebView, and that WebView has `mediaPlaybackRequiresUserGesture` **enabled by default**: it will not start **audible** media unless a user gesture is still in flight.

The card was attaching the remote stream to an unmuted `` and leaving playback to the `autoplay` attribute — only *after* `getUserMedia`, the SDP exchange and ICE had completed. By then the activation from your tap on **Pick up** has long expired, so playback never starts, the element stays paused, and the WebView paints **its own grey play button** over it. That’s exactly what you’re seeing: `PC state: connected` (so WebRTC negotiated perfectly — which is why the mic and the door button work) but no picture.

Chrome and Firefox don’t hit this because they also allow playback on sites the user has already interacted with, and a camera card gets away with it because its video is muted. Same root cause as the Frigate issue: [home-assistant/android#6578]( WebRTC autoplay blocked in Frigate addon unless "Autoplay videos" is enabled · Issue #6578 · home-assistant/android · GitHub ).

The fix — v1.2.2

The video element now **starts muted** (muted video autoplay is allowed unconditionally, WebView included) and unmutes itself as soon as the audio track arrives. If the browser refuses the unmute it pauses the element instead of throwing, so the card detects that, keeps the picture running muted and shows a **“Tap to enable audio”** button — the tap is the activation it was waiting for.

Release notes: Release v1.2.2 — video finally plays in the Android Companion app · cmos486/ring-intercom-video-card · GitHub

Update via HACS to **v1.2.2** and hard-refresh (`Ctrl+Shift+R`), or clear the app cache on Android. The console banner should read `v1.2.2`.

Workaround on any version

Enable **Settings → Companion app → Autoplay videos** in the Android app. That flips the WebView restriction off globally (it also helps Frigate and other WebRTC cards).

If v1.2.2 still shows the grey button on your device, open the Companion app’s **Show debug/Logs** and look for lines prefixed with `[ring-intercom-video-card]` — `Autoplay blocked` vs `Audible playback blocked, staying muted` tells us which of the two gates you’re hitting.

@cmos486 where is this problem documented, and workaround documented?

I think I may be hitting this same issue in RING-MQTT…

Hi again,

I deleted the previous comment because I went and messed around a little bit more.

First thing first, when using ring-mqtt integration I can’t find the camera.* entity. This makes it impossible to use it with it and I can’t test any further.

I used 1.2.2 with Ring integration and now when I push the Pick up button the audio is turned on and camera screen is blank (as it is supposed to be). The problem I have is that I can’t add the Open door entity because it doesn’t show anything when I search for it:

And when I add it in the Advanced: custom open-door action field it still doesn’t add the button even though it is finding the Open door entity:

So I improvised, I am using the Ring integration for Camera - Pick up/Hang up and ring-mqtt entry for Open door :smiley:

About the Ring issue - I tried sharing my device with another user but the integration or ring-mqtt cannot find a location when trying to login.

As you can see the binary_sensor seems to be used ok:

But the good news is that when it rings (which sometimes does and sometimes it doesn’t even though I haven’t tried this plenty of times so it might have been fixed now), I can see the camera when I tap on Pick up button. When I use Open door button it is also opening the door. But as I mentioned I needed both integrations for this to work.

Now, I need to set the notifications so I can actually know when someone is ringing the door…

I tried logging out and in again everywhere. I deleted/uninstalled integrations and devices too, still the same issue. Maybe there is some kind of order on which one should be installed/added first. I’ll try logging out and in on Ring app also…

Edit: Nope, same issue :frowning:

Edit 2: By the way, how are you getting the camera entity in the card from ring-mqtt? I can’t seem to find it.

I think I did it this way:

Remove all integrations + on every Android Ring app device logout+uninstall
Then (while testing the Ring notifications after every “>” step)
Install Ring app on phone > Configure official HA Ring integration > Install this integration + card

Then also installed Ring-MQTT but only to have a backup in my scripts, it should work without.
I’m not sure why you expect a intercom camera entity from ring-mqtt, since it does not exist?

type: custom:ring-intercom-video-card
entity: camera.oakland_video_intercom_camera
open_door_action:
  service: lock.unlock
  entity_id: lock.oakland_video_intercom_lock

Yeah, I tried that. As soon as I add the other integration from HA, either Ring or ring-mqtt, the notifications stop. This is also messing up the automations and everything in HA, since no notifications means no state changing in the Ding (bell) entity. I will try to check with Ring Customer Support but I am assuming they won’t care.

Other than that, I will try adding the HA Ring integration > Ring app on phone and test if it works.

I’m not sure why you expect a intercom camera entity from ring-mqtt, since it does not exist?

I actually thought that ring-mqtt provides the camera too!

The Open door doesn’t work with Ring integration, because the Lock entity is looking for a lock.* entity id and Ring Integration Open door entity is a button.*
When I go to Advanced and select the Open door Entity, it doesn’t add the Open door button, that’s the reason why I had to add ring-mqtt too and use it’s Lock door entity for this:

Thanks for digging into this — you found a real bug in the card, and the mixed setup you improvised is the perfect description of it.

The Open door problem is mine, not yours

The card’s **Lock entity** picker filtered on the `lock.*` domain. That was wrong from day one: Home Assistant’s official Ring integration ships **no lock platform at all** for intercoms — `ring/lock.py` doesn’t exist and `PLATFORMS` has no `LOCK` in it. What it gives you is a **button**: `button.<your_device>_open_door`, pressed with `button.press`.

So your entity was never going to show up in that picker. ring-mqtt *does* publish a `lock.*`, which is exactly why your hybrid setup works — you found the only combination the card would accept.

And the **Advanced** box failed you for a second, sillier reason: the card required the **Service** field to be filled in. You set the entity and left the service empty, so the card resolved “no action configured” and *hid* the Open door button. No error, no hint. Sorry about that — it looked like the card was ignoring your entity, and functionally it was.

Fixed in v1.2.3

Just released: Release v1.2.3 — Open door works with the Ring integration's button, not just a lock · cmos486/ring-intercom-video-card · GitHub

* The picker is now **Open door entity** and accepts `button.*`, `lock.*`, `switch.*`, `input_button.*`, `input_boolean.*`, `script.*`, `scene.*` and `cover.*`. The card derives the service from the domain — `button.press` for the Ring button, `lock.unlock` for ring-mqtt’s lock, and so on.
* In **Advanced** mode, leaving **Service** empty now infers it from the entity instead of silently disabling the button.
* Your existing `lock_entity:` config keeps working — it migrates automatically, nothing to change.

Update via **HACS → Frontend → Ring Intercom Video Card → Update**, then hard-reload the dashboard (Ctrl+Shift+R) so the browser drops the cached JS. The console banner should read `v1.2.3`.

YAML, if you prefer it:

```yaml
type: custom:ring-intercom-video-card
entity: camera.your_intercom_video_camera
open_door_entity: button.your_intercom_open_door # official Ring integration
```

**If you want it working right now without updating:** open **Advanced**, type `button.press` in the Service field and pick your `button…open_door` in the Entity field. That was the missing piece all along.

Either way, **you no longer need ring-mqtt for the door.** Official Ring integration + this integration + the card is the whole setup.

On ring-mqtt and the camera

You’re right that it doesn’t provide one, and it never has for intercoms — that’s the entire reason this integration exists. ring-mqtt gives you the lock and the ding; the video comes from here.

On the shared account

That’s a Ring limitation, not something HA or ring-mqtt can work around. When you share a Ring Intercom, Ring shares only the **virtual key**, not the device — so the second account ends up with no location at all, which is exactly the error you hit. Both clients fail the same way, for the same reason. There’s no path there today.

On the notifications

The ding entity isn’t mine — it comes from the official Ring integration (`event.*_ding` / `binary_sensor.*_ding`), so my integration can neither break it nor fix it. Two things worth checking:

  1. **Smart Notifications / notification settings in the Ring app.** If they’re restricted there, Ring simply doesn’t send those events out and every downstream client goes quiet. They need to be fully enabled for HA to see everything.
  2. **Don’t run both the HA Ring integration and ring-mqtt against the same Ring account.** They’re two independent push clients on one account, and that’s the configuration where people most often see dings going missing. Pick one — and with 1.2.3 out, the one you want is the official integration.

If notifications still drop after that, re-authenticating is the standard cure and worth trying before you talk to Ring support: remove the client from Ring’s Control Center, then log in again.

Let me know how 1.2.3 goes — and thanks again for the detailed report, screenshots included. That’s what made this findable.

Nice! 1.2.3 fixes the issue with Open door.

I’m not sure what’s wrong with Ring app notifications, but it actually means I am not getting those notifications from the API either, since there is no event happening in HA or in Ring app.

I know the device works because I can open the door and I can hear the sound with the black screen when I click Pick up, but without getting the notification, I can’t trigger automation to take a screenshot or record the video when someone rings the bell, and also I won’t know if someone is at the door unless I am at home.

I tried plenty of things: removing all devices from Control Center, logging out from all places, Uninstalling and installing Ring app again, I even opened the intercom and reconnected the wires with Ring Intercom Video device, still not working.

I’m going to try an connect HA with Ring integration only and see if that triggers the notification.

About shared account, I actually found an interesting solution, where I open the shared account on my Ring app and I leave the main account logged-in in HA but since notifications are not working, I’m not sure if this would be a good solution overall :slight_smile:

Whenever I find a solution for this, I believe your integration will be a lifesaver.

Thanks a lot again.

I just wanted to update you that it’s finally working.

I spent about a week in total contacting Ring customer support (due to their annoying process where they reply via email and I have to call them, and then they forward my response to the team :smiley: ), and they said they updated my intercom. The ring notifications are finally working every time!

I managed to create an automation in HA where I trigger a notification in my phone via HA Companion app with different vibration levels so it vibrates like a phone ringing, delay 2 seconds, check if the Front Entrance Live Session is idle, if it is idle Take a snapshot and send it via telegram to my account. This is basically sending me a screenshot to my Telegram before I pick up, and that’s exactly what I needed.

Thanks a lot!

Great to hear it’s finally working, and thanks for coming back to share what fixed it! That’s really useful for others: if the intercom isn’t producing ding events at all (no notification in the Ring app and no event in HA), it’s not something HA or this integration can work around. Contacting Ring support so they push an update to the intercom is the way to go. I’ve added it to the README’s troubleshooting section.

Your automation is exactly the pattern the `Live Session` sensor was added for: check it’s idle, then take the snapshot, so it doesn’t compete with someone who’s already picked up. Just keep in mind that if you ever add a wallpanel that permanently shows the camera, the sensor will stay `on` and the snapshot step will never run. I’ve also added a generic version of this automation to the README as an example.

**Heads-up about Home Assistant 2026.10:** HA 2026.10 ships a newer PyAV (19) than the library used for server-side snapshots (`aiortc`) currently accepts. On versions up to 0.5.1, this makes HA refuse to load the integration at all after updating.

If you rely on the snapshots, you can stay on HA 2026.9 until then.

Thanks for your patience testing all of this!