Ring Device integration via MQTT w/ Video Streaming

I have been wondering how I get the video to show. The custom card I tried creating in html was really janky. I don’t know much about the Frigate. Let me install it and I’ll get back to you with the results. Thanks for the solution. You’ve been a great help!

Nothing too special just

....
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - service: button.press
    metadata: {}
    data: {}
    target:
      entity_id: button.front_door_take_snapshot
  - delay:
      hours: 0
      minutes: 0
      seconds: 10
      milliseconds: 0

......

Nice! I will try this with the front_door_take_snapshot. I have been wondering how to use that function on ring MQTT. Do you call that entity ID into the card?

This is what I came up with, this calls the config file that has some commands

alias: Catpure doorbell snapshot (Repeat
description: “”
trigger:

  • platform: state
    entity_id: binary_sensor.front_door_ding
    to: “on”
    condition:
    action:
  • repeat:
    count: 7
    sequence:
  • service: shell_command.ffmpeg_cmd
    data:
    cmd_options: >-
    -rtsp_transport tcp -i
    rtsp://03cabcc9-ring-mqtt:[ENTER MQTT HERE]_live -ss 0.5 -frames:v
    1 -y /media/img.jpg
  • delay:
    seconds: 1
    mode: single
    oh interesting. This is alias: Catpure doorbell snapshot (Repeat
    description: “”
    trigger:
  • platform: state
    entity_id: binary_sensor.front_door_ding
    to: “on”
    condition:
    action:
  • repeat:
    count: 7
    sequence:
  • service: shell_command.ffmpeg_cmd
    data:
    cmd_options: >-
    -rtsp_transport tcp -i
    rtsp://03cabcc9-ring-mqtt:[ENTER MQTT HERE]_live -ss 0.5 -frames:v
    1 -y /media/img.jpg
  • delay:
    seconds: 1
    mode: single

==============================
Config.yaml

shell_command:
ffmpeg_cmd: ffmpeg {{ cmd_options }}

camera:

  • platform: local_file
    file_path: /media/img.jpg
    name: “ring-mqtt-snapshot-img”

No I call the button event in an automation.

The automation casts a dashboard to a device, which shows the snapshot camera.

The automation then proceeds to press the snapshot button every few seconds which updates the snapshot camera which is shown on the device.

Ive done this but my snapshots to the Lovelace are delayed a good 10 seconds are so. The goal would be to see who is at my door when it rings, but the delay makes this hard. Do you see the same and is there a workaround? I change it to .2 frames ever .5 seconds, but it doesn’t see to take pictures that fast

I have a motion sensor that triggers a light before the camera catches motion.

My trigger for my automation is that motion sensor rather than the doorbell sensing motion.

So although I do have a delay, it’s only a couple of seconds.

Is the issue that the snapshot is not taken quickly or that the lovelace dashboard is not updated quickly? I don’t think lovelace refreshes that fast but my snapshot sent as image notification to my phone is fairly fast (within a few seconds).

let me try with the phone. The lovelace definitely is the issue, because when I check the server, the photos are being sent there quite quickly

After being successfully set up and working fine for months, my Ring integration stopped working recently - all related devices/entities are showing as Unavailable. I don’t necessarily even see related errors in the logs about it. The add-on as well as my MQTT broker seem to be running. Are there any recommended troubleshooting steps I can take? Should I ask via a Github issue?

A few night ago Ring had some type of event with tokens where the token was still working for polling requests (cameras/intercoms) but not for the websocket connection (used for alarm and smart lighting) and ring-client-api’s internal method was not able to automatically recover from this situation. However, once Ring corrected the issue, a simple restart of the addon was all that was needed to resolve the issue. In general, the troubleshooting steps previously posted resolve 99.9% of all issues:

1 Like

same here restarting the add-on fixed it

1 Like

Thank you so much; I don’t know why I didn’t try that first before posting! Can confirm that restarting the add-on fixed the issue. Cheers!

Can you please tell me how to do it?
thanks

Hello! I have just set up this integration and seem to realise that my devices do not show up. I have removed the default built in ring integration, and have replaced it with this one. For my MQTT server I have set up a proxmox LXC Container using a script, and have the configuration as follows:


(replaced password with " * " for my safety). And cannot find devices, dispite the plugin finding the devices, and now i’m puzzled, I have traveled long and far across forums and in search of yt videos to help, yet to no avail. Please help.
Edit 1: P.S. already restarted HA and VM with it still not popping up

Is it expected behavior that lights’ status sometimes gets out of sync with the Ring app when they are controlled by HA?
Steps to reproduce: control Ring devices via both the Ring app and HA. Turn on floodlight camera’s lights in HA. Verify visually that they are on. Go to Ring app, verify that their status is ‘off’ in Ring app, even though they are on.
Hope that makes sense. If it does, can people explain, is this expected / normal behavior, or is it an indication that my setup is off (something I can fix)?
Thanks!

I don’t know why people always think this has something to do with ring-mqtt, this can be 100% reproduced with just 2 phones and the Ring app. Turn the lights on with phone 1, go to Ring app on phone 2, and it can take 30 seconds or more for it to show this state change. The state updates in Ring API for cameras is not instant for anything except notifications, sometimes state updates happen in a few seconds, but more commonly it’s 20-30 seconds or more. The code doesn’t even bother to poll for state updates any more often than 20 seconds because the Ring API doesn’t update that often anyway.

I have a questions about logs and how to monitor the state of the integration.

Unclear if same issue, but my integration stopped working yesterday where the add-on wasn’t connecting to Ring. Or so I assume as the logs were reporting 500 errors.

Restarting fixed it, but left me wondering how to better debug – and also curious why it didn’t self-recover if the API was returning 500s.

After restarting the container it seems like the older logs are no longer available. Are the older logs store elsewhere after a restart?

I don’t have the old logs for an example, but they were reporting a 500 error, but (IIRC) not providing details (like URL called and any http response if any). Wondering if that would be useful to include in the logs on API failures.

Lastly, is there a good entity to monitor to know when the integration is not working? Yesterday I found out because I triggered the alarm when I assume my automation had disabled the alarm.

Should my scripts that change the alarm state delay for some amount of time and then confirm the new alarm state?

Thanks,

My Ring camera/doorbell motion detected alert is no longer working. For the first few days, motion detection was working and it could trigger all of my automation. Right now, it no longer register as motion. Instead, it would registered “Info Changed” if motion is detected. Then few minutes later, another “Info Changed” is register when motion is “cleared”.

Don’t know why it happens like this? Do I need to remove Ring-MQTT and re-input Ring password to get the motion detection registration correct?

and also curious why it didn’t self-recover if the API was returning 500s.

To an extent this is already answered in the project FAQ, the number one reason is that all of this is just reverse engineered, we have no way to test for all possible failure cases, configuration changes Ring might make, etc., and, in the last few years, I can’t think of any contribution to improve this from anyone in the community, just complaints that this thing written about 99% by one person, and used by more than 20,000 users across a half-dozen project somehow doesn’t work perfectly for every single possible failure scenario.

To provide more context on this specific issue, 500 errors happen all the time and don’t indicate anything to “recover” from. The ring-client-api package recovers from errors all the time, as the Ring API has 100’s of errors each month. But what exactly would the API do for a 500 error? A 500 error means “Internal Server Error” on the Ring server side, the only “recovery” is to try again later, which the code does. For whatever reason, retrying wasn’t enough in this case, it needed an entirely new session, but an “Internal Server Error” does not indicate anything wrong with the sesssion. I’m sure the maintainer of ring-client-api will welcome any PRs to improve the recovery process.

After restarting the container it seems like the older logs are no longer available. Are the older logs store elsewhere after a restart?

It’s just Docker, so all standard docker commands can be used. I’m not docker expert, but I think you get get historical logs from prior containers via “docker inspect” command, however, I’m sure Google can answer this question.

I don’t have the old logs for an example, but they were reporting a 500 error, but (IIRC) not providing details (like URL called and any http response if any). Wondering if that would be useful to include in the logs on API failures.

As I noted earlier, Ring APIs have tons of errors every day, if we log everything you know what happens? Dozens of people then open issues complaining about errors in the logs, even though nothing else is really wrong, so in ring-mqtt I don’t log these errors as a general rule. I did do some work on trying more aggressive recovery steps after “x number of failures”, but I haven’t had time to finish this code and, you know, wait for actual failures to test it, but again, we welcome any PRs to ring-client-api.

There are lots of things in ring-client-api that could be improved, but it’s largely unchanged for 2-3 years and it’s been remarkably reliable except for weird exception where Ring is making changes to their infrastructute like they clearly have been for the last week.

BTW, the Ring app is also pretty terrible at recovering from this issues as well, it’s just quite a bit less noticeable because the Ring app doesn’t keep a live session open except when the app is open If you have the app open and Ring has an issue like this, it will stop working as well, but will recovery when you close and then re-open the app, roughly the same as restarting the addon.

2 Likes

Thanks for the info. I’m trying to learn some basic debugging techniques which, hopefully with better skills, I could someday contribute PRs.

As for the logs, I assume if I “Restart” on the Add-Ons info page it’s doing a docker restart w/o saving the container’s log anywhere. So, I should save the logs before restarting the add-on.

The Ring-MQTT add-on has been working really well for me. I think this might have been the first time it wasn’t connecting. I’m trying to learn HA in general and how to debug issues when they show up, but I’m not sure how to debug a running Add-on container other than look at the logs.

I also get the difficulty with reverse engineering their API! (I bought multiple MyQ Chamberlin devices to connect HA to my garage doors only to have Chamberlin block access!)