2 Way audio Intercom for Reolink doorbell made easy

Hi there, I’ve set up a 2-way audio intercom for my Reolink Doorbell (although it should work for a any doorbell with RTSP with some configuration) without using Frigate. Only automations, browser-mod, go2rtc and SSL access.

How it works

Grabaciondepantalla2025-01-19alas17.33.08-ezgif.com-optimize

This is a 2 popup process. When the doorbell binary_sensor “visitor” changes to on, It first shows a popup stream with one way audio (doorbell to device) and video so you can hear what’s outside but the microphone is not enabled. Then if the pick up button is pressed, it opens a second popup with 2 way audio. In both popups there is the option to hang up or to open the door.

How it’s made

I have to say that for now, poorly. It consists of different parts that are not straighforward to setup which are required.

Requirements

  1. The most important thing for having 2 way audio, is having an SSL connection to homeassistant from the browser/tablet you are going to use. WIthout this it will not work..
    This guide will not cover how to do this but there a different methods to achieve:

    • HomeAssistant Cloud
    • Cloudflare/Tailscale
    • NGINX + DuckDNS (port forwarding)
  2. browser-mod: GitHub - thomasloven/hass-browser_mod: 🔹 A Home Assistant integration to turn your browser into a controllable entity and media player

    Open your Home Assistant instance and start setting up a new integration.

  3. go2rtc: GitHub - AlexxIT/go2rtc: Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MP4, MJPEG, HomeKit, FFmpeg, etc.

  4. webrtc-camera: GitHub - AlexxIT/WebRTC: Home Assistant custom component for real-time viewing of almost any camera stream using WebRTC and other technologies.
    This will only be used for the webrtc-camera card, but it’s necessary

    Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

  5. more-info-card: GitHub - thomasloven/lovelace-more-info-card: 🔹 Display the more-info dialog of any entity as a lovelace card
    This will be used to ensure we get the more-info view of the doorbell’s video stream

    Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

  6. card-mod: GitHub - thomasloven/lovelace-card-mod: 🔹 Add CSS styles to (almost) any lovelace card
    This will allow to apply styles to the frames and the overlay buttons

    Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Setup

1. go2rtc configuration

Start the add-on and access the UI.
Then go to the Config tab and paste the following data replacing with your doorbell values:

streams:
  camera.2way_audio_doorbell:
    - rtsp://<USER>:<PASSWORD>@<DOORBELL_IP>:554/h264Preview_01_sub
    - ffmpeg:camera.2way_audio_doorbell#audio=opus#audio=copy

2. Popup cards

I have created a blueprint to automatically create and configure the pop-ups:

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

This is how it looks:

Limitations

The Open Gate option is a script because that’s what I use to emulate the inching with a Zigbee relay switch.
So if you have a switch entity, you will need to create a script that calls switch.toggle on your entity

Improvements

There are some improvements (besides CSS and Jinja obviously):

  • Make the Open Gate input to accept different type of entities
  • Make the Open Gate button to only show if the input is provided
8 Likes

Thanks for this explanation and your blueprint! I tried it and it works all good, except for one thing:
When I activate the 2 way audio, the sound is terrible. The audio from my PC’s microphone go outside the reolink’s speaker but it also goes back to my PC’s speakers. Is there any way to improve this?

There is no way to solve this besides lowering the volume on the computer/tablet. This is known as feedback loop. Tablets and phones have ways of mitigating this that might improve the issue.
Another solution might be lowering the microphone sensitivity.
I’m using a cheap Redmi tablet and the feedback loop exists but it’s not disturbing.

I’ve been testing the setup using my tablet to see if it works better, but I still don’t understand why the original Reolink app doesn’t have this issue. Does anyone have more information about this?

Also, I noticed that on my tablet the live stream starts for about 1 second and then it stops and I have to press the Play/Pause button to restore it. What am I missing?

Also, I noticed that if I access my setup using my external address (https://mydomain), everything works perfectly. However, if I access it locally via http://myipaddress:port/, the microphone doesn’t work, which I know is expected behavior.

Right now, in my home, if there’s an internet outage, Home Assistant continues to work fine locally. But for the video doorbell, it would stop working even though it’s connected via cable. Is there a solution to keep the video doorbell functional in such scenarios?

Probably the Reolink app has some software echo cancelling buiilt-in. If the tablet is newish, the hardware should work decently to avoid the loop. Also I have the doorbell’s volume set to 50% to improve it.

About the pause, the blueprint contains a picture-element card that has “Live” enabled, this should guarantee that it autoplays.

To get this working with this method you need HTTPS. If you are woried of someone ringing the door during an internet outage (probability seems pretty low to me) you would need to generate a self-signed certificate for your hostname and install it in the tablet’s certificate store.
Also if this happens to me I would simply check my phone where I have the app installed.

Hi @victorigualada

first of all, thanks for your work here. i was able to get it running quickly.
only issue i have is that the Initial popup is in “landscape”, so only the upper portion of the stream is visible.
the second one is the right orientation, even though it’s off-center on my phone and with large border left and right in my desktop.
u think there’s an easy way to fix this myself? or maybe an option to open the popups fullscreen?

Thanks in advance for your help mate.

Is it possible to send a pre recorded mp3 file as an announcement using the bell? Or using the notify action of home assistant?

This is a good start: https://www.reddit.com/r/reolinkcam/comments/1efrk26/receive_rich_notifications_from_reolink_devices/

Many thanks for this, victorigualada. This is the first guide that I’ve used that simply worked to get 2-way audio working.

I’d say that Frigate is faster, but it seems really unreliable in terms of what Frigate build works. The con of this one is that there’s no mute microphone button, so have to use 2 streams.

I ended up not using (2), (5) and (6) and just created a Custom WebRTC Camera card:

type: custom:webrtc-camera
ui: true
url: camera.2way_audio_doorbell
media: video,audio,microphone
style: >-
  .screenshot {display: none} .mode {display: none} .pictureinpicture {display:
  none}

This was meant to ve used in tablets. I see how it can be a problem in a phone.
The popup card size is hardcoded in the blueprint but I guess it could be a blueprint option.
I will do some tests this weekend to see if I can make it more robust.
For now you can take control of the Blueprint’s automation clicking in the 3dot menu and play there with browser-mod and card-mod.

This is how I started but quickly realized that if you do that, as soon as the card shows, there is 2 way audio in place.
I wanted to be able to see and hear, and take a decision to respond or not.
I guess it could be done only with a view with the stream with video and audio only, navigate to that view on visitor and then have a button on the view to open the popup with 2 way audio.

Do you mean send audio through the Reolink Chime? I don’t think so but might be wrong.
You can announce to media_player devices anything though.

Hello, i have found out there is a way of doing it wothout SSL connection to homeassistant.
here is the answer that helped me make the microphone work on chrome without using SSL connection:

I’m trying to setup a 2-way audio intercom. I’m able to transmit audio to my Reolink video doorbell while using the microphone on my tablet but it cuts out after a second. I’ve also tried Google Chrome and the HA app on my iphone with similar results. Any ideas what this could be? I’m using the info from above:

streams:
  camera.2way_audio_doorbell:
    - rtsp://<USER>:<PASSWORD>@<DOORBELL_IP>:554/h264Preview_01_sub
    - ffmpeg:camera.2way_audio_doorbell#audio=opus#audio=copy

and here is my card:

type: custom:webrtc-camera
url: camera.2way_audio_doorbell
webrtc: true
background: false
ui: true
muted: false
media: video,audio,microphone

Just to share my experience. I have a similar setup than OP:

  • Reolink Doorbell PoE-White (there are multiple versions and firmwares)
  • go2rtc
  • HA with SSL
  • no Frigate (seems to be a popular option but I don’t think it will make any difference to my two-way-audio issues)

This is what my HA card looks like:

  • When “Espere” and “Retirese” buttons are pressed it sends prerecorded mp3 sounds to the doorbell.
  • When the “Hablar” button is pressed it goes to a HA subview that activates the two-way-talk:
  • The volume-icon on top of the doorbell camera feed allows me to mute/unmute the audio coming from the doorbell.
  • The blured square is another camera feed.
  • There’s a text-to-speech input box
  • The buttons under are mainly from the HA’s Reolink integration, with the exception of the “Restart go2rtc” which is a bash script to do that.

Tested so far:

  • Sending an mp3 audio to the doorbell through go2rtc. (Works well 99% of the times)
  • Sending text to speech with the Wyoming protocol for local processing:
    • Works similarly to sending an mp3, but sometimes it doesn’t work if the generated mp3 is not long enough.
    • Sometimes the doorbell cuts the audio before it finishes.
  • Two-way-talk:
    • Not reliable but works at times.
    • Sometimes the doorbell doesn’t close the connection and the blue light stays on forever until go2rtc is restarted.
    • Audio with feedback.
    • Sometimes the doorbell doesn’t output the sent speech.
  • Doorbell button-press sends a picture notification to android devices, taken with a bash script.

Conclusion:

  • The two-way-audio with go2rtc seems to be still buggy. There’s a lot of hit or miss situations.
  • Have in mind that Reolink seems to be upgrading their doorbell firmware in ways that breaks some stuff with the HA integration.
    I had to downgrade the firmware (Be careful, some people have reported bricking).
  • Hopefully, the go2rtc developer can continue to make improvements with these Reolink doorbells. I’ve seen him complain in other posts about Reolink’s implementation and in-house protocols not being dev friendly.

Indeed. I reverted to a Frigate setup, but if I block the doorbell from external traffic, it doesn’t work, despite everything being setup internally. It still hits reolink destinations when establishing audio.

I meant the doorbell not the chime, but anyway both of them aren’t exposed as media_player
So there’s no way I found to announce media/tts with them

Hi and thank you for the Blueprint. What is meant by “List of Browser Mod IDs for displaying the popup.” When I’m hitting the selectfield, nothing is shown.

You need to install browser-mod. Once installed, it will automatically create new entities for each of the devices you open your dashboard with. This list then will have values

Hi thanks for the fast reply. I’ve installed it via hacs and restarted HA but still no entries.