Ring Doorbell

The app allows you to change and test tones so I’d imagine the api would as well. Here’s where you do it in the app:

@JesseWebDotCom yes I thought you were saying about custom ringtones. I played with that once and it seems easy to implement. Do you mind opening a RFE here -> https://github.com/tchellomello/python-ring-doorbell/issues?

Thanks

I dug thru this thread and I don’t see an answer to the question…to make the integration work do you need an active ring cloud account? and has the video\snapshot been resolved? ( and will it require active cloud account?)
:man_dancing::dancer:

Answer is yes, you need an active/paid account and you still wont be able to get a live view on HA.

That’s why I changed to this.

https://www.hikvision.com/uk/Products/Video-Intercom/Wi-Fi-Door-Bell/DS-KB6003-WIP
no cloud, no fees.

@juan11perez Mine is sort of flakey (but I’m upgrading to 24V transformer tonight) and I haven’t figured out a way to get a sensor to tell when the doorbell is pressed - have you?

@jschwalbe
this is what i did

I’ve been using the last_ring template for a while and I keep seeing this message in my log:

Could not render template Front Door Last Ding: UndefinedError: ‘mappingproxy object’ has no attribute ‘created_at’

It seems to happen if my doorbell hasn’t been rung in quite some time. Is there a way to update the template to return a status of Unknown or something similar?

Try this modification:

sensor:
  - platform: template
    sensors:
      last_motion:
        value_template: >-
          {% set today = now().day | int %}
          {% set motion_date = (((as_timestamp(state_attr('sensor.ring_front_door_last_motion','created_at'))) | timestamp_custom("%d")) | int) %}
          {% if today == motion_date %}
            {% set day = "Today" %}
          {% elif (today - 1) == motion_date %}
            {% set day = "Yesterday" %}
          {% elif today == 1 and motion_date > 27 %}
            {% set day = "Yesterday" %}
          {% else %}
            {% set day = as_timestamp(states_attr('sensor.ring_front_door_last_motion','created_at')) | timestamp_custom("%A")%}
          {% endif %}
          {% set time = as_timestamp(state_attr('sensor.ring_front_door_last_motion','created_at')) | timestamp_custom("%l:%M %p")%}
          {{[day,time]|join(" at ")}}
      last_ring:
        value_template: >-
          {% set today = now().day | int %}
          {% set ring_date = (((as_timestamp(state_attr('sensor.ring_front_door_last_ding','created_at'))) | timestamp_custom("%d")) | int) %}
          {% if today == ring_date %}
            {% set day = "Today" %}
          {% elif (today - 1) == ring_date %}
            {% set day = "Yesterday" %}
          {% elif today == 1 and ring_date > 27 %}
            {% set day = "Yesterday" %}
          {% else %}
            {% set day = as_timestamp(state_attr('sensor.ring_front_door_last_ding','created_at')) | timestamp_custom("%A")%}
          {% endif %}
          {% set time = as_timestamp(state_attr('sensor.ring_front_door_last_ding','created_at')) | timestamp_custom("%l:%M %p")%}
          {{[day,time]|join(" at ")}}

@Weok

Try this…it should check to see if the attribute exists and if not says “oops” or whatever you’d like instead.

sensor:
  - platform: template
    sensors:
      last_motion:
        entity_id:
          - sensor.ring_front_door_last_motion
        value_template: >-
          {% if states.sensor.ring_front_door_last_motion.attributes.created_at %}
           {% set today = now().day | int %}
           {% set motion_date = (((as_timestamp(states.sensor.ring_front_door_last_motion.attributes.created_at)) | timestamp_custom("%d")) | int) %}
           {% if today == motion_date %}
             {% set day = "Today" %}
           {% elif today == 1 and motion_date > 27 %}
             {% set day = "Yesterday" %}
           {% elif (today - 1) == motion_date %}
             {% set day = "Yesterday" %}
           {% else %}
             {% set day = as_timestamp(states.sensor.ring_front_door_last_motion.attributes.created_at) | timestamp_custom("%A")%}
           {% endif %}
           {% set time = as_timestamp(states.sensor.ring_front_door_last_motion.attributes.created_at) | timestamp_custom("%l:%M %p")%}
           {{[day,time]|join(" at ")}}
          {% else %} Oops
          {% endif %}
      last_ring:
        entity_id:
          - sensor.ring_front_door_last_ding
        value_template: >-
          {% if states.sensor.ring_front_door_last_ding.attributes.created_at %}
           {% set today = now().day | int %}
           {% set ring_date = (((as_timestamp(states.sensor.ring_front_door_last_ding.attributes.created_at)) | timestamp_custom("%d")) | int) %}
           {% if today == ring_date %}
             {% set day = "Today" %}
           {% elif today == 1 and ring_date > 27 %}
             {% set day = "Yesterday" %}
           {% elif (today - 1) == ring_date %}
             {% set day = "Yesterday" %}
           {% else %}
             {% set day = as_timestamp(states.sensor.ring_front_door_last_ding.attributes.created_at) | timestamp_custom("%A")%}
           {% endif %}
           {% set time = as_timestamp(states.sensor.ring_front_door_last_ding.attributes.created_at) | timestamp_custom("%l:%M %p")%}
           {{[day,time]|join(" at ")}}
          {% else %} Oops
          {% endif %}
1 Like

That works perfectly! Thank you!

Is there a way to change how often the ring sensor looks for last_motion? The binary sensor stopped working for me about a week ago and I’m tired of messing with it. The sensor seems to work fine, but there’s a lag. I recall reading that the default was changed to 90 secs and was wondering if there’s a way to adjust it myself?

I’m trying to use it to automate some tp-link kasa lights on motion. Thanks for any help.

Maybe you can set the scan_interval in seconds. I use it with other sensors, but have not tested with ring. Something like this might work:

binary_sensor:
  - platform: ring
    monitored_conditions:
      - ding
      - motion
    scan_interval: 2

Thanks for the suggestion. Unfortunately, didn’t work.

I use my ring doorbell to control my front door light and it works perfectly. I get notified of motion (via a home assistant triggered notify) and the outside light turns on immediately based on motion.

The sensors scanning were updated because we were going over some kind of limit. There is no official API so keeping it on the older settings meant devices were timing out too frequently and thus the component would not work for some time. If your binary_sensor isn’t working then that must be a different issue. For me all my sensors report fine on ring.

Hi,

I don’t know if it is old news (I’m noob with Ring), but on Ring’s site there is an open source section which I haven’t seen mentioned on this thread. Hope it can help some of the developers here.
Cheers.

Hello @Qua3952
That is just the opensource libraries they use. Thanks for the heads up!

What exactly is everyone trying to accomplish with adding the Ring component? I would love to view the Ring camera as a live feed in HASS.io, however all I get is a very choppy video of the last recording.

I have a few automations set up:

  1. save a local copy of the last recording and accompanying screen snapshot.
  2. turn on front door light when motion detected
  3. pause tv if doorbell rings

Any way to add Ring Alarm?