From 402e74ed6b13e60b6870c4dd4a6d2451860d93d0 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 13 Feb 2020 23:46:06 -0600 Subject: [PATCH] Handle doorsense in "init" state (should be set to false) --- august/lock.py | 5 +- tests/fixtures/get_lock.doorsense_init.json | 103 ++++++++++++++++++++ tests/test_api.py | 23 +++++ 3 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/get_lock.doorsense_init.json diff --git a/august/lock.py b/august/lock.py index 0492f01..5720b06 100644 --- a/august/lock.py +++ b/august/lock.py @@ -39,7 +39,10 @@ def __init__(self, data): self._doorsense = False if "LockStatus" in data: - if "doorState" in data["LockStatus"]: + if ( + "doorState" in data["LockStatus"] + and data["LockStatus"]["doorState"] != "init" + ): self._doorsense = True if "keypad" in data: diff --git a/tests/fixtures/get_lock.doorsense_init.json b/tests/fixtures/get_lock.doorsense_init.json new file mode 100644 index 0000000..be60bbe --- /dev/null +++ b/tests/fixtures/get_lock.doorsense_init.json @@ -0,0 +1,103 @@ +{ + "LockName": "Front Door Lock", + "Type": 2, + "Created": "2017-12-10T03:12:09.210Z", + "Updated": "2017-12-10T03:12:09.210Z", + "LockID": "A6697750D607098BAE8D6BAA11EF8063", + "HouseID": "000000000000", + "HouseName": "My House", + "Calibrated": false, + "skuNumber": "AUG-SL02-M02-S02", + "timeZone": "America/Vancouver", + "battery": 0.88, + "SerialNumber": "X2FSW05DGA", + "LockStatus": { + "status": "locked", + "doorState": "init", + "dateTime": "2017-12-10T04:48:30.272Z", + "isLockStatusChanged": false, + "valid": true + }, + "currentFirmwareVersion": "109717e9-3.0.44-3.0.30", + "homeKitEnabled": false, + "zWaveEnabled": false, + "isGalileo": false, + "Bridge": { + "_id": "aaacab87f7efxa0015884999", + "mfgBridgeID": "AAGPP102XX", + "deviceModel": "august-doorbell", + "firmwareVersion": "2.3.0-RC153+201711151527", + "operative": true + }, + "keypad": { + "_id": "5bc65c24e6ef2a263e1450a8", + "serialNumber": "K1GXB0054Z", + "lockID": "92412D1B44004595B5DEB134E151A8D3", + "currentFirmwareVersion": "2.27.0", + "battery": {}, + "batteryLevel": "Medium", + "batteryRaw": 170 + }, + "OfflineKeys": { + "created": [], + "loaded": [ + { + "UserID": "cccca94e-373e-aaaa-bbbb-333396827777", + "slot": 1, + "key": "kkk01d4300c1dcxxx1c330f794941111", + "created": "2017-12-10T03:12:09.215Z", + "loaded": "2017-12-10T03:12:54.391Z" + } + ], + "deleted": [], + "loadedhk": [ + { + "key": "kkk01d4300c1dcxxx1c330f794941222", + "slot": 256, + "UserID": "cccca94e-373e-aaaa-bbbb-333396827777", + "created": "2017-12-10T03:12:09.218Z", + "loaded": "2017-12-10T03:12:55.563Z" + } + ] + }, + "parametersToSet": {}, + "users": { + "cccca94e-373e-aaaa-bbbb-333396827777": { + "UserType": "superuser", + "FirstName": "Foo", + "LastName": "Bar", + "identifiers": [ + "email:foo@bar.com", + "phone:+177777777777" + ], + "imageInfo": { + "original": { + "width": 948, + "height": 949, + "format": "jpg", + "url": "http://www.image.com/foo.jpeg", + "secure_url": "https://www.image.com/foo.jpeg" + }, + "thumbnail": { + "width": 128, + "height": 128, + "format": "jpg", + "url": "http://www.image.com/foo.jpeg", + "secure_url": "https://www.image.com/foo.jpeg" + } + } + } + }, + "pubsubChannel": "3333a674-ffff-aaaa-b351-b3a4473f3333", + "ruleHash": {}, + "cameras": [], + "geofenceLimits": { + "ios": { + "debounceInterval": 90, + "gpsAccuracyMultiplier": 2.5, + "maximumGeofence": 5000, + "minimumGeofence": 100, + "minGPSAccuracyRequired": 80 + } + } +} diff --git a/tests/test_api.py b/tests/test_api.py index ade5945..8888c62 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -192,6 +192,29 @@ def test_get_lock_detail_bridge_offline(self, mock): self.assertEqual(None, lock.bridge) self.assertEqual(False, lock.doorsense) + @requests_mock.Mocker() + def test_get_lock_detail_doorsense_init_state(self, mock): + mock.register_uri( + "get", + API_GET_LOCK_URL.format(lock_id="A6697750D607098BAE8D6BAA11EF8063"), + text=load_fixture("get_lock.doorsense_init.json"), + ) + + api = Api() + lock = api.get_lock_detail(ACCESS_TOKEN, "A6697750D607098BAE8D6BAA11EF8063") + + self.assertEqual("A6697750D607098BAE8D6BAA11EF8063", lock.device_id) + self.assertEqual("Front Door Lock", lock.device_name) + self.assertEqual("000000000000", lock.house_id) + self.assertEqual("X2FSW05DGA", lock.serial_number) + self.assertEqual("109717e9-3.0.44-3.0.30", lock.firmware_version) + self.assertEqual(88, lock.battery_level) + self.assertEqual("Medium", lock.keypad.battery_level) + self.assertEqual("5bc65c24e6ef2a263e1450a8", lock.keypad.device_id) + self.assertIsInstance(lock.bridge, BridgeDetail) + self.assertEqual(True, lock.bridge.operative) + self.assertEqual(False, lock.doorsense) + @requests_mock.Mocker() def test_get_lock_status_with_locked_response(self, mock): lock_id = 1234