From f45f02aec2c8955e4f4e08af27f9304567c493de Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sun, 12 Feb 2017 03:36:17 -0500 Subject: [PATCH 1/6] Implemented get volume methods --- ring_doorbell/__init__.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ring_doorbell/__init__.py b/ring_doorbell/__init__.py index 04f6e9ff..df0fb8b1 100644 --- a/ring_doorbell/__init__.py +++ b/ring_doorbell/__init__.py @@ -158,6 +158,13 @@ def chime_attributes(self, name): except AttributeError: return NOT_FOUND + def chime_get_volume(self, name): + """Return if chime volume.""" + try: + return self.chime_attributes(name).get('settings').get('volume') + except AttributeError: + return NOT_FOUND + def is_chime_online(self, name): """Return if chime is online.""" try: @@ -211,6 +218,14 @@ def doorbell_id(self, name): except AttributeError: return NOT_FOUND + def doorbell_get_volume(self, name): + """Return volume.""" + try: + return self.doorbell_attributes(name). \ + get('settings').get('doorbell_volume') + except AttributeError: + return NOT_FOUND + def is_doorbell_online(self, name): """Return state for doorbell is online.""" try: From bd5ce722e798dd3de2b81eb3eb9e2ff47dd6bdc3 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sun, 12 Feb 2017 14:52:53 -0500 Subject: [PATCH 2/6] Adding get firmware --- ring_doorbell/__init__.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ring_doorbell/__init__.py b/ring_doorbell/__init__.py index df0fb8b1..2faae516 100644 --- a/ring_doorbell/__init__.py +++ b/ring_doorbell/__init__.py @@ -165,6 +165,13 @@ def chime_get_volume(self, name): except AttributeError: return NOT_FOUND + def chime_firmware(self, name): + """Return firmware.""" + try: + return self.chime_attributes(name).get('firmware_version') + except AttributeError: + return NOT_FOUND + def is_chime_online(self, name): """Return if chime is online.""" try: @@ -253,6 +260,13 @@ def doorbell_battery_life(self, name): except AttributeError: return NOT_FOUND + def doorbell_firmware(self, name): + """Return doorbell firmware.""" + try: + return self.doorbell_attributes(name).get('firmware_version') + except AttributeError: + return NOT_FOUND + def __live_streaming_create_session(self, name): """Initiate session live streaming URL.""" door_id = self.doorbell_id(name) From acf4031d2eaaf33431d6c1cf4c3e1439bfdc2457 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Mon, 13 Feb 2017 11:54:59 -0500 Subject: [PATCH 3/6] Fix range for battery information --- ring_doorbell/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ring_doorbell/__init__.py b/ring_doorbell/__init__.py index 2faae516..9c6e3155 100644 --- a/ring_doorbell/__init__.py +++ b/ring_doorbell/__init__.py @@ -256,7 +256,10 @@ def is_doorbell_subscribed_motions(self, name): def doorbell_battery_life(self, name): """Return doorbell battery life.""" try: - return self.doorbell_attributes(name).get('battery_life') + value = int(self.doorbell_attributes(name).get('battery_life')) + if value > 100: + value = 100 + return value except AttributeError: return NOT_FOUND From fef46e270c18e29fd348f8d295be11ffb4c8d221 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Mon, 13 Feb 2017 11:56:40 -0500 Subject: [PATCH 4/6] fix lint --- ring_doorbell/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ring_doorbell/__init__.py b/ring_doorbell/__init__.py index 9c6e3155..db85fdab 100644 --- a/ring_doorbell/__init__.py +++ b/ring_doorbell/__init__.py @@ -257,7 +257,7 @@ def doorbell_battery_life(self, name): """Return doorbell battery life.""" try: value = int(self.doorbell_attributes(name).get('battery_life')) - if value > 100: + if value > 100: value = 100 return value except AttributeError: From ae28ee398673c6a3fa4ea01378e90d7dabd11411 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Tue, 14 Feb 2017 23:14:39 -0500 Subject: [PATCH 5/6] Added function to parse timezone reported history() --- requirements.txt | 1 + ring_doorbell/__init__.py | 34 ++++++++++++++++++++++++++++++---- setup.py | 2 +- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index b544c96c..7fd41edc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ flake8 pylint requests tox +pytz diff --git a/ring_doorbell/__init__.py b/ring_doorbell/__init__.py index db85fdab..af77ab9f 100644 --- a/ring_doorbell/__init__.py +++ b/ring_doorbell/__init__.py @@ -2,10 +2,12 @@ # vim:sw=4:ts=4:et: """Python Ring Doorbell wrapper.""" from urllib.parse import urlencode +from datetime import datetime import os import logging import requests +import pytz from ring_doorbell.const import ( API_VERSION, API_URI, DEVICES_ENDPOINT, DINGS_ENDPOINT, @@ -270,6 +272,13 @@ def doorbell_firmware(self, name): except AttributeError: return NOT_FOUND + def doorbell_timezone(self, name): + """Return doorbell timezone.""" + try: + return self.doorbell_attributes(name).get('time_zone') + except AttributeError: + return NOT_FOUND + def __live_streaming_create_session(self, name): """Initiate session live streaming URL.""" door_id = self.doorbell_id(name) @@ -293,13 +302,30 @@ def check_activity(self): url = API_URI + DINGS_ENDPOINT return self._query(url) - def history(self, limit=30): - """Return history.""" + def history(self, limit=30, timezone=None): + """Return history with datetime objects.""" # allow modify the items to return params = {'limit': str(limit)} - url = API_URI + URL_HISTORY - return self._query(url, extra_params=params) + + response = self._query(url, extra_params=params) + + # convert for specific timezone + utc = pytz.utc + if timezone: + mytz = pytz.timezone(timezone) + + for entry in response: + dt_at = datetime.strptime(entry['created_at'], + '%Y-%m-%dT%H:%M:%S.000Z') + utc_dt = datetime(dt_at.year, dt_at.month, dt_at.day, dt_at.hour, + dt_at.minute, dt_at.second, tzinfo=utc) + if timezone: + tz_dt = utc_dt.astimezone(mytz) + entry['created_at'] = tz_dt + else: + entry['created_at'] = utc_dt + return response def doorbell_recording(self, recording_id): """Return recording in MP4 format.""" diff --git a/setup.py b/setup.py index beb4ff90..3146f298 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ url='https://github.com/tchellomello/python-ring-doorbell', license='LGPLv3+', include_package_data=True, - install_requires=['requests'], + install_requires=['requests', 'pytz'], keywords=[ 'ring', 'door bell', From ff5ee1254b4ff9c2f78232c859b0536f5ee394a9 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Tue, 14 Feb 2017 23:16:09 -0500 Subject: [PATCH 6/6] Version bump to 0.0.2 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3146f298..b8187e38 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name='ring_doorbell', packages=['ring_doorbell'], - version='0.0.1', + version='0.0.2', description='A Python library to communicate with Ring' + ' Door Bell (https://ring.com/)', author='Marcelo Moreira de Mello',