Link

ring.py - Working Ring devices reverse engineered API examples

from pprint import pprint
from ring_doorbell import Ring, Auth
import pyotp
import json

username = "email@yahoo.es"
password = "password123"
refresh_token_file = "refresh_token.json"
otp_seed = 'XXXAAABBBOTPSEEDBBBAAAXXX'
user_agent = 'ShitysoftExplorer'

def read_refresh_token():
		f = open(refresh_token_file, "r")
		return(f.read())

try:
	longterm_token = json.loads(read_refresh_token())['refresh_token']
	print(" ** Using existing token: {} **".format(longterm_token))
	auth = Auth(user_agent, None, token=longterm_token)
except:
	print(" ** Generating new long-term token **")
	auth = Auth(user_agent, None)
	totp = pyotp.TOTP(otp_seed).now()
	token = auth.fetch_token(username, password, str(totp))
	longterm_token = token['refresh_token']

	with open(refresh_token_file, 'w') as f:
			f.write(json.dumps(token))


ring = Ring(auth)
ring.update_data()
devices = ring.devices()

pprint(ring.session['profile'])

doorbell = devices['doorbots'][0]

pprint(doorbell.recording_url(doorbell.last_recording_id))


streaming_data = doorbell.live_streaming_json

for k,v in streaming_data.items():
  print("{}: {}".format(k,v))


def playing_with_devices():

	devices = ring.devices()
	for dev in list(devices['stickup_cams'] + devices['chimes'] + devices['doorbots']):
			dev.update_health_data()
			print('Address:    %s' % dev.address)
			print('Family:     %s' % dev.family)
			print('ID:         %s' % dev.id)
			print('Name:       %s' % dev.name)
			print('Timezone:   %s' % dev.timezone)
			print('Wifi Name:  %s' % dev.wifi_name)
			print('Wifi RSSI:  %s' % dev.wifi_signal_strength)

			print('Volume:     %s' % dev.volume)
			dev.volume = 5
			print('Volume:     %s' % dev.volume)

			if dev.family == 'chimes':
					dev.test_sound(kind = 'ding')
					dev.test_sound(kind = 'motion')

			if dev.family == 'stickup_cams' and dev.lights:
					dev.lights = 'on'