Compare commits

...
17 Commits
Author SHA1 Message Date
Kevin FronczakandGitHub 9335a37feb Merge pull request #77 from fronzbot/v0.8.1
v0.8.1
2018-09-24 13:35:48 -04:00
Kevin Fronczak 371348533f Fix trailing whitespace 2018-09-24 13:30:56 -04:00
Kevin Fronczak 26f6defe60 Version bump 2018-09-24 13:27:10 -04:00
Kevin FronczakandGitHub 52bc4af1f0 Merge pull request #76 from fronzbot/better-motion
Fix motion detection
2018-09-24 13:25:14 -04:00
Kevin Fronczak 8c94305804 Fix motion detection
- Use an array of recent video clips to determine if motion has been
detected.
- Reset the value every system refresh
2018-09-24 13:17:15 -04:00
Kevin FronczakandGitHub 0eb57698bd Merge pull request #72 from fronzbot/lint-upgrade
Update linter versions
2018-08-09 09:43:51 -04:00
Kevin FronczakandGitHub 7b0db80edd Disable no-else-return 2018-08-09 09:37:57 -04:00
Kevin FronczakandGitHub 0e63e97a57 Remove whitespace 2018-08-09 09:27:36 -04:00
Kevin FronczakandGitHub e4a21964d2 Fix useless-import-alias 2018-08-09 09:26:22 -04:00
Kevin FronczakandGitHub 39ad37f23b Fix pylint errors
- change if comparison to fix (consider-using-in)
- Disabled no else-if-return check
2018-08-09 09:25:42 -04:00
Kevin FronczakandGitHub 34bc61e1c3 Fix pylint warnings
- Remove object from class declarations
- Remove useless returns from functions
2018-08-09 09:21:49 -04:00
Kevin FronczakandGitHub e6a7c367b3 Merge branch 'dev' into lint-upgrade 2018-08-09 07:35:26 -04:00
Kevin FronczakandGitHub 66afd33b79 Merge pull request #71 from fronzbot/upgrade-pytest
Pytest 3.7.1
2018-08-09 07:28:51 -04:00
Kevin FronczakandGitHub cf617d720e Update linter versions 2018-08-09 07:27:12 -04:00
Kevin FronczakandGitHub 4f2eca08e0 Update requirements_test.txt 2018-08-09 07:21:05 -04:00
Kevin FronczakandGitHub 2972780c18 Merge pull request #69 from fronzbot/dev-version-bump
Dev version bump
2018-05-21 11:47:52 -04:00
Kevin Fronczak 9c3f3f2f98 Version bump 2018-05-21 11:44:05 -04:00
9 changed files with 48 additions and 18 deletions
+1
View File
@@ -1,3 +1,4 @@
.pytest_cache/*
.cache/*
.tox/*
__pycache__/*
+3
View File
@@ -3,6 +3,9 @@ Changelog
A list of changes between each release
0.9.0.dev (Development Version)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0.8.0 (2018-05-21)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Added support for battery voltage level (fixes `#64 <https://github.com/fronzbot/blinkpy/issues/64>`_)
+29 -6
View File
@@ -26,6 +26,8 @@ from blinkpy.helpers.constants import (
_LOGGER = logging.getLogger('blinkpy')
MAX_CLIPS = 5
def _attempt_reauthorization(blink):
"""Attempt to refresh auth token and links."""
@@ -79,7 +81,7 @@ class BlinkAuthenticationException(BlinkException):
pass
class BlinkURLHandler(object):
class BlinkURLHandler():
"""Class that handles Blink URLS."""
def __init__(self, region_id):
@@ -93,7 +95,7 @@ class BlinkURLHandler(object):
_LOGGER.debug("Setting base url to %s.", self.base_url)
class BlinkCamera(object):
class BlinkCamera():
"""Class to initialize individual camera."""
def __init__(self, config, blink):
@@ -118,6 +120,8 @@ class BlinkCamera(object):
self.motion_detected = None
self.wifi_strength = None
self.camera_config = dict()
self.motion_enabled = None
self.last_record = list()
@property
def attributes(self):
@@ -132,10 +136,12 @@ class BlinkCamera(object):
'battery': self.battery,
'thumbnail': self.thumbnail,
'video': self.clip,
'motion_enabled': self.motion_enabled,
'notifications': self.notifications,
'motion_detected': self.motion_detected,
'wifi_strength': self.wifi_strength,
'network_id': self.blink.network_id
'network_id': self.blink.network_id,
'last_record': self.last_record
}
return attributes
@@ -205,13 +211,31 @@ class BlinkCamera(object):
try:
self.battery_voltage = cfg['camera'][0]['battery_voltage']
self.motion_detected = cfg['camera'][0]['motion_alert']
self.motion_enabled = cfg['camera'][0]['motion_alert']
self.wifi_strength = cfg['camera'][0]['wifi_strength']
self.temperature = cfg['camera'][0]['temperature']
except KeyError:
_LOGGER.warning("Problem extracting config for camera %s",
self.name)
# Check if the most recent clip is included in the last_record list
# and that the last_record list is populated
try:
new_clip = self.blink.videos[self.name][0]['clip']
if new_clip not in self.last_record and self.last_record:
self.motion_detected = True
self.last_record.insert(0, new_clip)
if len(self.last_record) > MAX_CLIPS:
self.last_record.pop()
elif not self.last_record:
self.last_record.insert(0, new_clip)
self.motion_detected = False
else:
self.motion_detected = False
except KeyError:
_LOGGER.warning("Could not extract clip info from camera %s",
self.name)
def image_refresh(self):
"""Refresh current thumbnail."""
url = self.urls.home_url
@@ -248,7 +272,7 @@ class BlinkCamera(object):
copyfileobj(response.raw, vidfile)
class Blink(object):
class Blink():
"""Class to initialize communication and sync module."""
def __init__(self, username=None, password=None):
@@ -348,7 +372,6 @@ class Blink(object):
camera.update(element)
except KeyError:
pass
return None
def get_videos(self, start_page=0, end_page=1):
"""Retrieve last recorded videos per camera."""
+1 -1
View File
@@ -4,7 +4,7 @@ import os
MAJOR_VERSION = 0
MINOR_VERSION = 8
PATCH_VERSION = 0
PATCH_VERSION = 1
__version__ = '{}.{}.{}'.format(MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION)
+3 -1
View File
@@ -7,6 +7,7 @@ reports=no
# unused-argument - generic callbacks and setup methods create a lot of warnings
# too-many-* - are not enforced for the sake of readability
# too-few-* - same as too-many-*
# no-else-return - I don't see any reason to enforce this. both forms are readable
disable=
locally-disabled,
@@ -20,4 +21,5 @@ disable=
too-many-return-statements,
too-many-statements,
too-many-lines,
too-few-public-methods,
too-few-public-methods,
no-else-return,
+6 -6
View File
@@ -1,10 +1,10 @@
flake8==3.3
flake8-docstrings==1.1.0
pylint==1.8.1
pydocstyle==2.0.0
pytest==3.3.1
flake8==3.5.0
flake8-docstrings==1.3.0
pylint==2.1.1
pydocstyle==2.1.1
pytest==3.7.1
pytest-cov>=2.3.1
pytest-sugar>=0.9.0
pytest-timeout>=1.0.0
restructuredtext-lint>=1.0.1
pygments>=2.2.0
pygments>=2.2.0
+2 -1
View File
@@ -39,7 +39,7 @@ def mocked_requests_post(*args, **kwargs):
response_to_return = {'message': 'Error', 'code': 404}
code_to_return = 404
if url_arg == const.LOGIN_URL or url_arg == const.LOGIN_BACKUP_URL:
if url_arg in (const.LOGIN_URL, const.LOGIN_BACKUP_URL):
response_to_return = LOGIN_RESPONSE
code_to_return = 200
elif url_arg is not None:
@@ -77,6 +77,7 @@ def mocked_requests_get(*args, **kwargs):
url_arg = args[0]
# pylint: disable=R1711
if url_arg == 'use_bad_response':
return MockGetResponse({'foo': 'bar'}, 200)
elif url_arg == 'reauth':
+2 -2
View File
@@ -88,7 +88,7 @@ class TestBlinkCameraSetup(unittest.TestCase):
self.assertEqual(camera.battery_string, "OK")
self.assertEqual(camera.notifications, 2)
self.assertEqual(camera.region_id, 'test')
self.assertEqual(camera.motion_detected, True)
self.assertEqual(camera.motion_enabled, True)
self.assertEqual(camera.wifi_strength, -30)
camera_config = self.camera_config
@@ -154,5 +154,5 @@ class TestBlinkCameraSetup(unittest.TestCase):
self.assertEqual(camera_attr['battery'], 50)
self.assertEqual(camera_attr['notifications'], 2)
self.assertEqual(camera_attr['network_id'], '0000')
self.assertEqual(camera_attr['motion_detected'], True)
self.assertEqual(camera_attr['motion_enabled'], True)
self.assertEqual(camera_attr['wifi_strength'], -30)
+1 -1
View File
@@ -8,7 +8,7 @@ any communication related errors at startup.
import unittest
from unittest import mock
from blinkpy import blinkpy as blinkpy
from blinkpy import blinkpy
import tests.mock_responses as mresp
USERNAME = 'foobar'