Changelog
0.8.6
Released on 2024-01-25 - GitHub - PyPI
What's Changed
Breaking change to the listen subpackage api to allow the listener be configurable.
0.8.5
Released on 2023-12-21 - GitHub - PyPI
What's Changed
Full Changelog: 0.8.4...0.8.5
0.8.4
Released on 2023-12-12 - GitHub - PyPI
What's Changed
Full Changelog: 0.8.3...0.8.4
0.8.3
Released on 2023-11-27 - GitHub - PyPI
What's Changed
- fix typo in the documentation by @listentothefrog in #284
- Fix auth when token invalid & rename device_id parameters by @sdb9696 in #311
- Bump version to 0.8.3 by @sdb9696 in #312
New Contributors
- @listentothefrog made their first contribution in #284
Full Changelog: 0.8.2...0.8.3
0.8.2
Released on 2023-11-24 - GitHub - PyPI
What's Changed
0.8.1
Released on 2023-11-15 - GitHub - PyPI
What's Changed
Full Changelog: 0.8.0...0.8.1
0.8.0
Released on 2023-11-08 - GitHub - PyPI
What's Changed
This is a breaking change as consumers who currently handle oauth exceptions directly will need to handle the new exceptions instead
Full Changelog: 0.7.7...0.8.0
0.7.7
Released on 2023-10-31 - GitHub - PyPI
What's Changed
Full Changelog: 0.7.6...0.7.7
0.7.6
Released on 2023-10-25 - GitHub - PyPI
What's Changed
Full Changelog: 0.7.5...0.7.6
0.7.5
Released on 2023-10-25 - GitHub - PyPI
What's Changed
- Add tests for cli and fix issues with videos by @sdb9696 in #290
- Add motion detection cli command and improve formatting of show command by @sdb9696 in #292
- Add cli commands: devices, groups, dings and history by @sdb9696 in #293
- Add event listener for getting realtime dings by @sdb9696 in #296
Full Changelog: 0.7.4...0.7.5
0.7.4
Released on 2023-09-27 - GitHub - PyPI
What's Changed
0.7.3
Released on 2023-09-11 - GitHub - PyPI
What's Changed
0.7.2
Released on 2021-12-18 - GitHub - PyPI
What's Changed
0.7.1
Released on 2021-08-26 - GitHub - PyPI
What's Changed
0.7.0
Released on 2021-02-05 - GitHub - PyPI
New features
- #231 Support for light groups (and thus Transformers indirectly) (thanks @decompil3d!)
Fixes
- #196 Fix snapshot functionality (thanks @dshokouhi!)
- #225 Fix live stream functionality (thanks @JoeDaddy7105!)
- #228 Avoid multiple clients in list by maintaining consistent hardware ID (thanks @riptidewave93!)
- #185 Return
None
instead of0
for battery level when a device is not battery powered (thanks @balloob!) - #218 Fix snapshot again and add download option (thanks @kvntng17!)
Misc
- #224 Fix build failures (thanks @JoeDaddy7105!)
- #233 Move to GitHub Actions (thanks @decompil3d!)
0.6.2
Released on 2020-11-21 - GitHub - PyPI
- Unpin reqs even more c3e98c9
0.6.1
Released on 2020-09-28 - GitHub - PyPI
Relax requirements version pinning - 59ae9b1
0.6.0
Released on 2020-01-14 - GitHub - PyPI
Major breaking change
Ring APIs offer 1 endpoint with all device info. 1 with all health for doorbells etc. The API used to make a request from each device to the "all device" endpoint and fetch its own data.
With the new approach we now just fetch the data once and each device will fetch that data. This significantly reduces the number of requests.
See updated test.py on usage.
Changes:
- Pass a user agent to the auth class to identify your project (at request from Ring)
- For most updates, just call
ring.update_all()
. If you want health data (wifi stuff), calldevice.update_health_data()
on each device - Renamed
device.id
->device.device_id
,device.account_id
->device.id
to follow API naming. - Call
ring.update_all()
at least once before querying for devices - Querying devices now is a function
ring.devices()
instead of propertyring.devices
- Removed
ring.chimes
,ring.doorbells
,ring.stickup_cams
- Cleaned up tests with pytest fixtures
- Run Black on code to silence hound.
0.5.0
Released on 2020-01-12 - GitHub - PyPI
Breaking Change
The Auth
class no longer takes an otp_callback
but now takes an otp_code
. It raises MissingTokenError
if otp_code
is required. See the updated example. This prevents duplicate SMS messages. Thanks to @steve-gombos
Timeout has been increased from 5 to 10 seconds to give requests a bit more time (by @cyberjunky)
0.4.0
Released on 2020-01-11 - GitHub - PyPI
Major breaking change.
This release is a major breaking change to clean up the auth and follow proper OAuth2. Big thanks to @steve-gombos for this.
All authentication is now done inside Auth
. The first time you need username, password and optionally an 2-factor auth callback function. After that you have a token and that can be used.
The old cache file is no longer in use and can be removed.
Example usage (also available as test.py
):
import json
from pathlib import Path
from ring_doorbell import Ring, Auth
cache_file = Path('test_token.cache')
def token_updated(token):
cache_file.write_text(json.dumps(token))
def otp_callback():
auth_code = input("2FA code: ")
return auth_code
def main():
if cache_file.is_file():
auth = Auth(json.loads(cache_file.read_text()), token_updated)
else:
username = input("Username: ")
password = input("Password: ")
auth = Auth(None, token_updated)
auth.fetch_token(username, password, otp_callback)
ring = Ring(auth)
print(ring.devices)
if __name__ == '__main__':
main()
Version 0.2.9
Released on 2020-01-03 - GitHub - PyPI
- Fixed Compatibility with Python 2 (old-school typing syntax in docstrings); fix for OAuth.SCOPE - @ZachBenz #163
- Implemented timeouts for HTTP requests methods - @tchellomello #165
- Use auth expires_in to refresh oauth tokens. - @jeromelaban #167
- Fixed logic and simplified module imports - @tchellomello #168
Version 0.2.8
Released on 2019-12-27 - GitHub - PyPI
Quick fix to make sure the requests-oauthlib
gets installed. Made requirements.txt
and setup.py
consistent. @tchellomello - #158
Version 0.2.6
Released on 2019-12-27 - GitHub - PyPI
This release includes a properly OAuth2 handle implemented by @steve-gombos. Many thanks for all involved to make this happen!
Fix for Issue #146 #149 - @ZachBenz
Fix R1705: Unnecessary elif after return (no-else-return) #151 - @xernaj
OAuth Fixes #152 - @steve-gombos
Version 0.2.5
Released on 2019-12-20 - GitHub - PyPI
@dshokouhi - Add a couple of device kinds #137
@xernaj - Fix/oauth fail due to blocked user agent #143
Many thanks for your efforts and help!!
Version 0.2.3
Released on 2019-03-05 - GitHub - PyPI
- Add support for downloading snapshot from doorbell #108 - @MorganBulkeley
- support of externally powered new stickup cam #109 - @steveww
- Fixed pylint and test errors #115 - @tchellomello
- Support for device model name property and has capability method #116 - @jsetton
Many thanks to @MorganBulkeley @steveww @jsetton
You guys rock!!
Version 0.2.2
Released on 2018-10-29 - GitHub - PyPI
Many thanks for your first contribution @evanjd!!
Version 0.2.1
Released on 2018-06-15 - GitHub - PyPI
- Updated Ring authentication method to oauth base
Many thanks to @davglass for reporting this issue and for @rbrtio, @vickyg3, @cathcartd, and @dshokouhi for testing the fix.
Version 0.2.0
Released on 2018-05-16 - GitHub - PyPI
Changelog:
@andrewkress - only save token to disk if reuse session is true #81
@tchellomello - Getting TypeError #86
Many thanks to @andrewkress for your contribution!
Version 0.1.9
Released on 2017-11-29 - GitHub - PyPI
- Added generic method update() on the top level Ring method that refreshes the attributes for all linked devices. #75
Version 0.1.8
Released on 2017-11-22 - GitHub - PyPI
- Added the ability to check if account has the Ring subscription active since it is now enforced by Ring in order to use the methods recording_download() and recording_url() #71
Many thanks to @arsaboo for your help on testing this.
Version 0.1.7
Released on 2017-11-14 - GitHub - PyPI
- Fixes some bugs and enhancements
- Add ability to inform attribute older_than to the history() method. Thanks to @troopermax #63
- Introduced ring_cli.py script
scripts/ringcli.py -u foo -p bar --count
---------------------------------
Ring CLI
---------------------------------
Counting videos linked on your Ring account.
This may take some time....
Total videos: 384
Ding triggered: 32
Motion triggered: 340
On-Demand triggered: 12
======================
---------------------------------
Ring CLI
---------------------------------
scripts/ringcli.py -u foo -p bar --count
1/384 Downloading 2017-11-14_00.57.16+00.00_motion_answered_64880679462719.mp4
2/384 Downloading 2017-11-13_21.32.23+00.00_motion_not_answered_64880151491.mp4
======================
scripts/ringcli.py --help
usage: ringcli.py [-h] [-u USERNAME] [-p PASSWORD] [--count] [--download-all]
Ring Doorbell
optional arguments:
-h, --help show this help message and exit
-u USERNAME, --username USERNAME
username for Ring account
-p PASSWORD, --password PASSWORD
username for Ring account
--count count the number of videos on your Ring account
--download-all download all videos on your Ring account
https://github.com/tchellomello/python-ring-doorbell
Version 0.1.6
Released on 2017-10-19 - GitHub - PyPI
- Introduces support to floodlight lights and siren support. Many thanks to @jsetton for this addition
Version 0.1.5
Released on 2017-10-17 - GitHub - PyPI
- Added support to stickup and floodlight cameras. @jlippold
- Allow
history()
to return exact number of events of a given kind - Code refactored
- Added support to report wifi status. Thanks to @keeth
- Added support to play test sounds @vickyg3
Many thanks to the community and special thanks to @keeth @vickyg3 @jlippold
v0.1.4
v0.1.3
v0.1.2
Released on 2017-03-20 - GitHub - PyPI
v0.1.2
0.1.1
0.1.0
Released on 2017-02-25 - GitHub - PyPI
BREAK CHANGES
The code was refactored to allow to manipulate the objects in a better way.
In [1]: from ring_doorbell import Ring
In [2]: myring = Ring('user@email.com', 'password')
In [3]: myring.devices
Out[3]:
{'chimes': [<RingChime: Downstairs>],
'doorbells': [<RingDoorBell: Front Door>]}
In [4]: myring.chimes
Out[4]: [<RingChime: Downstairs>]
In [5]: myring.doorbells
Out[5]: [<RingDoorBell: Front Door>]
In [6]: mychime = myring.chimes[0]
In [7]: mychime.
mychime.account_id mychime.firmware mychime.linked_tree mychime.subscribed_motions
mychime.address mychime.id mychime.longitude mychime.timezone
mychime.debug mychime.kind mychime.name mychime.update
mychime.family mychime.latitude mychime.subscribed mychime.volume
In [7]: mychime.volume
Out[7]: 5
#updating volume
In [8]: mychime.volume = 200
Must be within the 0-10.
In [9]: mychime.volume = 4
In [10]: mychime.volume
Out[10]: 4
# DoorBells
In [11]: mydoorbell = myring.doorbells[0]
In [12]: mydoorbell.
mydoorbell.account_id mydoorbell.kind
mydoorbell.address mydoorbell.last_recording_id
mydoorbell.battery_life mydoorbell.latitude
mydoorbell.check_activity mydoorbell.live_streaming_json
mydoorbell.debug mydoorbell.longitude
mydoorbell.existing_doorbell_type mydoorbell.name
mydoorbell.existing_doorbell_type_duration mydoorbell.recording_download
mydoorbell.existing_doorbell_type_enabled mydoorbell.recording_url
mydoorbell.family mydoorbell.timezone
mydoorbell.firmware mydoorbell.update
mydoorbell.history mydoorbell.volume
mydoorbell.id
In [12]: mydoorbell.last_recording_id
Out[12]: 2222222221
In [14]: mydoorbell.existing_doorbell_type
Out[14]: 'Mechanical'
In [15]: mydoorbell.existing_doorbell_type_enabled
Out[15]: True
In [16]: mydoorbell.existing_doorbell_type_enabled = False
In [17]: mydoorbell.existing_doorbell_type_enabled
Out[17]: False
0.0.4
Released on 2017-02-15 - GitHub - PyPI
- Allow to filter history per doorbell or globally.