Ring Doorbell

Nice! I have hard wired so if you need testing from that perspective, let me know.@tchellomello

2 Likes

If you need any additional testers, I have a hardwired doorbell, as well as a solar powered stickup camera. I’ve pre-ordered the floodlight camera, but it’s not shipped yet.

Awesome guys… Thank you. I’ll keep you updated.

I have a wired Ring bell, powered and connected to a mechanical chime, would also be happy to test.

With my setup, when the button is pushed, the mechanical chime is triggered (as well as the app being notified). It’d be great to be able to enable/disable this feature (i.e. to create a silent mode where pushing the button doesn’t ring the mechanical chime)

The hardware supports this, as it can be set by Ring support, but the feature isn’t in the app, so I doubt that it’s possible to reverse engineer it or find the correct API call to make - worth seeing if anyone has any thoughts at least.

Hello @anthonyangel,

I have the same environment and I never thought about it.

Good idea!! Maybe we can create a switch for it in HA if that works.
mmello

I didn’t know ring support could enable that. I gave up and took the plunger out of my bell to disable the dinging, since 3 phones, a chime AND the mechanical bell was a bit much.

The Ring Pro has this option in the app. I have both a wired Ring and a Ring pro in my account.

1 Like

I thought about a z-wave in-line breaker to disconnect the Ring (it would work on batteries), but instead just went for the simple option and put a post-it over the doorbell when I didn’t want people to push it.

Guys, I’ve put some work on the Python library that we can use to create the Ring sensor for HA.

Could you visit https://github.com/tchellomello/python-ring-doorbell and test it out if will work for you?

You can see some description on the README on how to test it. I’m still making some changes and I believe by the weekend we will have the HA sensors prototype.

Thanks y’all!

3 Likes

Cool, I love the minds here! Can’t wait to test it out!

Is this any different from the last version I tested @tchellomello? Should I test again?

@tchellomello If someone tries to download/get the URL of a video while they have no active subscription it throws traceback:

>>> myring.doorbell_recording_url(123456778)
Sorry.. Something went wrong...
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
  File "/home/frank/code/python-ring-doorbell/ring_doorbell/__init__.py", line 235, in doorbell_recording_url
    if req.status_code == 200:
AttributeError: 'NoneType' object has no attribute 'status_code' 

Other than that it looks nice, seems to be working fine (haven’t tested the live streaming / event subscription stuff yet)

Just out of curiosity, do you know whether the Ring application is doing the same for the event subscriptions or do they use the Cloud Messaging stuff in Android?

@rpitera there are a few methods, but the essential is the same. Thanks!

@syphernl Thanks for your feedback. That is a good point. We will need to treat or check the subscription status before making the call to the API.

Could you share the output for the command below:

from ring_doorbell import Ring
myring = Ring('[email protected]', 'secret')
myring.features

I’m interested to see what yours looks like. Mine is like this:


In [3]: myring.features
Out[3]: 
{'chime_dnd_enabled': False,
 'chime_pro_enabled': True,
 'delete_all_enabled': True,
 'delete_all_settings_enabled': False,
 'device_health_alerts_enabled': True,
 'live_view_settings_enabled': True,
 'lpd_enabled': True,
 'lpd_motion_announcement_enabled': False,
 'multiple_calls_enabled': True,
 'multiple_delete_enabled': True,
 'nw_enabled': True,
 'nw_user_activated': False,
 'owner_proactive_snoozing_enabled': True,
 'power_cable_enabled': False,
 'proactive_snoozing_enabled': False,
 'reactive_snoozing_enabled': False,
 'remote_logging_format_storing': False,
 'remote_logging_level': 1,
 'ringplus_enabled': True,
 'starred_events_enabled': False,
 'stickupcam_setup_enabled': True,
 'subscriptions_enabled': True,
 'ujet_enabled': False,
 'vod_enabled': False}

@tchellomello here it is:

chime_dnd_enabled: false
chime_pro_enabled: true
delete_all_enabled: true
delete_all_settings_enabled: false
device_health_alerts_enabled: true
live_view_settings_enabled: true  
lpd_enabled: true 
lpd_motion_announcement_enabled: false
multiple_calls_enabled: true
multiple_delete_enabled: true
nw_enabled: true
nw_user_activated: true
owner_proactive_snoozing_enabled: true
power_cable_enabled: false
proactive_snoozing_enabled: false
reactive_snoozing_enabled: false
remote_logging_format_storing: false
remote_logging_level: 1
ringplus_enabled: true 
starred_events_enabled: false
stickupcam_setup_enabled: true
subscriptions_enabled: true
ujet_enabled: false
vod_enabled: true

Here’s mine, with the latest version installed:

>>> myring.features
{
'chime_dnd_enabled': False, 
'chime_pro_enabled': True, 
'delete_all_enabled': True, 
'delete_all_settings_enabled': False, 
'device_health_alerts_enabled': True,
'live_view_settings_enabled': True, 
'lpd_enabled': True, 
'lpd_motion_announcement_enabled': False, 
'multiple_calls_enabled': True, 
'multiple_delete_enabled': True, 
'nw_enabled': True, 
'nw_user_activated': True, 
'owner_proactive_snoozing_enabled': True, 
'power_cable_enabled': False, 
'proactive_snoozing_enabled': False, 
'reactive_snoozing_enabled': False, 
'remote_logging_format_storing': False, 
'remote_logging_level': 1, 
'ringplus_enabled': True, 
'starred_events_enabled': False, 
'stickupcam_setup_enabled': True, 
'subscriptions_enabled': True, 
'ujet_enabled': False, 
'vod_enabled': False
}

Guys, I’ve updated the code a little bit. Could you please try again with the steps below:


pip3 nstall git+https://github.com/tchellomello/python-ring-doorbell@dev --upgrade
from ring_doorbell import Ring
myring = Ring('[email protected]', 'secret')

In [4]: myring.doorbell_attributes(x.doorbells[0])['subscribed']
Out[4]: True

In [5]: myring.doorbell_attributes(x.doorbells[0])['features']
Out[5]: 
{'advanced_motion_enabled': False,
 'motions_enabled': True,
 'people_only_enabled': False,
 'shadow_correction_enabled': False,
 'show_recordings': True}

In [6]: myring.doorbell_attributes(x.doorbells[0])['subscribed_motions']
Out[6]: True

In [9]: myring.doorbell_battery_life(x.doorbells[0])
Out[9]: '4107'

Could you guys share from yours too?
mmello

Guys, I’m putting the sensor together here but I would like see how the battery_life() function behaves on different environments to adjust the 3rd library.

Mine is returning 4107 and I’m trying to understand how it is displayed on other accounts.

@tchellomello Here is my output (hardwired Ring):

>>> myring.doorbell_attributes('Frontdoor')['subscribed']
True
>>> myring.doorbell_attributes('Frontdoor')['features']
{'motions_enabled': True, 'show_recordings': False, 'show_vod_settings': True}
>>> myring.doorbell_attributes('Frontdoor')['subscribed_motions']
True
>>> myring.doorbell_battery_life('Frontdoor')
'66'

(Why do you have such fancy features in your Ring? Shadow correction, people only enabled ;-))

Not sure why my Ring is at 66%, since its hardwired full-time. But its the same as I can see in the app so I guess its the correct value…

Here’s what I got:

>>> myring.doorbell_attributes('Front Door')['subscribed']
True
>>> myring.doorbell_attributes('Front Door')['features']
{'show_vod_settings': True, 'motions_enabled': True, 'show_recordings': True}
>>> myring.doorbell_attributes('Front Door')['subscribed_motions']
True
>>> myring.doorbell_battery_life('Front Door')
'45'