Skip to content

Instantly share code, notes, and snippets.

@parvez
Created January 29, 2020 00:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parvez/f8375438070fa3b0572013efbe72c03d to your computer and use it in GitHub Desktop.
Save parvez/f8375438070fa3b0572013efbe72c03d to your computer and use it in GitHub Desktop.
import os
from datetime import datetime
from ring_doorbell import Ring
scan_folder = '/ring/files/Ring/'
uploads_folder = '/path/to/nextcloud/data/ring/files/Ring/'
done_list_file = '/path/to/nextcloud/data/ring/files/Ring/done.txt'
info_file = '/path/to/nextcloud/data/ring/files/Ring/info.txt'
nc_info_file = '/ring/files/Ring/info.txt'
os.system(f'touch "{done_list_file}"')
os.system(f'touch "{info_file}"')
os.system(f'truncate -s0 "{info_file}"')
print('Connecting to Ring...')
myring = Ring('USERNAME', 'PASSWORD')
print('Connected to Ring: %s' % myring.is_connected)
print('Checking info...')
with open(info_file, 'r+') as file:
file.write('--' * 36 + '\n')
file.write(datetime.now().strftime('%Y-%m-%d %H-%M-%S') + '\n')
for dev in list(myring.chimes):
dev.update()
file.write('--' * 36 + '\n')
file.write('Account ID: %s' % dev.account_id + '\n')
file.write('Address: %s' % dev.address + '\n')
file.write('Family: %s' % dev.family + '\n')
file.write('ID: %s' % dev.id + '\n')
file.write('Name: %s' % dev.name + '\n')
file.write('Model: %s' % dev.model + '\n')
file.write('Timezone: %s' % dev.timezone + '\n')
file.write('Wifi Name: %s' % dev.wifi_name + '\n')
file.write('Wifi Cat: %s' % dev.wifi_signal_category + '\n')
file.write('Wifi RSSI: %s' % dev.wifi_signal_strength + '\n')
file.write('Linked: %s' % dev.linked_tree + '\n')
for dev in list(myring.doorbells):
dev.update()
file.write('--' * 36 + '\n')
file.write('Account ID: %s' % dev.account_id + '\n')
file.write('Address: %s' % dev.address + '\n')
file.write('Family: %s' % dev.family + '\n')
file.write('ID: %s' % dev.id + '\n')
file.write('Name: %s' % dev.name + '\n')
file.write('Model: %s' % dev.model + '\n')
file.write('Timezone: %s' % dev.timezone + '\n')
file.write('Wifi Name: %s' % dev.wifi_name + '\n')
file.write('Wifi Cat: %s' % dev.wifi_signal_category + '\n')
file.write('Wifi RSSI: %s' % dev.wifi_signal_strength + '\n')
file.write('Battery: %s' % dev.battery_life + '\n')
file.write('Subscriptn: %s' % dev.has_subscription + '\n')
file.write('--' * 36 + '\n')
file.close()
os.system(f'chown www-data:www-data "{info_file}"')
os.system(f'sudo -u www-data php /path/to/nextcloud/occ files:scan --path="{nc_info_file}"');
print('Done writing info')
any_new = False
for doorbell in myring.doorbells:
for event in doorbell.history(limit=100, timezone='America/Los_Angeles'):
event_id_int = event['id']
event_id = f'{event_id_int}'
exists = False
with open(done_list_file, 'r+') as file:
for line in file:
if event_id in line:
exists = True
break
if exists is False:
print('--' * 36)
print('ID: %s' % event_id)
print('Kind: %s' % event['kind'])
print('Answered: %s' % event['answered'])
print('When: %s' % event['created_at'])
url = doorbell.recording_url(event['id'])
if url is False:
print('Bad URL: %s' % url)
else:
print('URL: %s' % url)
dd1 = event['created_at'].strftime('%Y-%m-%d')
dd2 = event['created_at'].strftime('%Y-%m-%d %H-%M-%S')
fd1 = f'{uploads_folder}/{dd1}'
filename = f'{fd1}/{dd2}.mp4'
os.makedirs(fd1, exist_ok=True)
os.system(f'chown www-data:www-data "{fd1}"')
download = doorbell.recording_download(event['id'], filename=filename, override=False)
if download is False:
print('Bad Dnld: %s' % filename)
else:
print('Filename: %s' % filename)
os.system(f'chown www-data:www-data "{filename}"')
file.write(f'{event_id}\n')
any_new = True
print('Storing GIF...')
os.system(f'/usr/bin/ffmpeg -i "{filename}" -r 10 -vf scale=512:-1 "{filename}.gif"')
else:
print('Exists: %s' % event_id)
file.close()
if any_new is True:
print('Sync with NextCloud...')
os.system(f'chown www-data:www-data "{done_list_file}"')
os.system(f'sudo -u www-data php /path/to/nextcloud/occ files:scan --path="{scan_folder}"');
else:
print('No new files to sync with NextCloud!')
print('DONE!')
print('--' * 36)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment