Skip to content

Commit

Permalink
pre-release code for 1.0.19 to address new August rate limits
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Lamoureux committed Feb 10, 2020
1 parent 27a4b78 commit af8ed89
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 16 deletions.
2 changes: 1 addition & 1 deletion August Home.indigoPlugin/Contents/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>PluginVersion</key>
<string>1.0.18</string>
<string>1.0.19</string>
<key>ServerApiVersion</key>
<string>2.0</string>
<key>IwsApiVersion</key>
Expand Down
50 changes: 35 additions & 15 deletions August Home.indigoPlugin/Contents/Server Plugin/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,12 @@ def deviceStartComm(self, dev):
house = self.getLockDetails(props["lockID"])
props["houseID"] = house["HouseID"]
props["houseName"] = house["HouseName"]

batteryLevel = int(100*lockDetails["battery"])
batteryLevelStr = u"%d%%" % (int(batteryLevel))
props["batteryLevel"] = batteryLevel
props["batteryLevelStr"] = batteryLevelStr

propsChanged = True

if "SupportsColor" in props:
Expand Down Expand Up @@ -399,6 +405,11 @@ def actionControlUniversal(self, action, dev):

if serverState is not None:
if dev.onState != serverState:
if serverState:
indigo.server.log(u"received \"" + dev.name + "\" was opened")
else:
indigo.server.log(u"received \"" + dev.name + "\" was closed")

dev.updateStateOnServer('onOffState', value=serverState)
else:
self.forceServerRefresh = True
Expand Down Expand Up @@ -638,7 +649,7 @@ def getLocks(self):
return json.loads(response.content)

def getLockDetails(self, lockID):
# Get Lock Status
# Get Lock Detail
# GET https://api-production.august.com/locks/<LOCK_ID>/

try:
Expand Down Expand Up @@ -668,7 +679,7 @@ def getLockDetails(self, lockID):
except requests.exceptions.RequestException:
self.logger.error('HTTP Request failed')

def getLockStatus(self, lockID):
def getLockStatus(self, lockID, full_response = False):
# Get Lock Status
# GET https://api-production.august.com/locks/<LOCK_ID>/status

Expand All @@ -693,6 +704,9 @@ def getLockStatus(self, lockID):
if response.status_code != 200:
return None

if full_response:
return response.json()

return response.json()["status"] == "locked"

except requests.exceptions.RequestException:
Expand All @@ -701,7 +715,8 @@ def getLockStatus(self, lockID):
return None

def getDoorStatus(self, lockID):
# Get Lock Status
# Get Door Status
# DEPRECIATING THIS in favor of using getLockStatus and reducing the number of API calls
# GET https://api-production.august.com/locks/<LOCK_ID>/status

try:
Expand Down Expand Up @@ -1161,14 +1176,18 @@ def update_all_from_august(self):
had_errors = False

for dev in [s for s in indigo.devices.iter(filter="self") if s.enabled and s.deviceTypeId == "augLock"]:
lockDetails = self.getLockDetails(dev.pluginProps["lockID"])
serverState = lockDetails["LockStatus"]["status"] == "locked"
lock_id = dev.pluginProps["lockID"]
lockStatus = self.getLockStatus(lock_id, True)

serverState = lockStatus["status"] == "locked"

self.logger.debug("Server state for " + dev.name + " is " + str(serverState))

batteryLevel = int(100*lockDetails["battery"])
batteryLevelStr = u"%d%%" % (int(batteryLevel))
dev.updateStateOnServer('batteryLevel', batteryLevel, uiValue=batteryLevelStr)
# Removed as we moved to the Lock Status method, which does not include battery. Lock Details will need to be polled elsewhere

# batteryLevel = int(100*lockDetails["battery"])
# batteryLevelStr = u"%d%%" % (int(batteryLevel))
# dev.updateStateOnServer('batteryLevel', batteryLevel, uiValue=batteryLevelStr)

if serverState is not None:
if dev.onState != serverState:
Expand All @@ -1185,14 +1204,15 @@ def update_all_from_august(self):
else:
had_errors = True

for dev in [s for s in indigo.devices.iter(filter="self") if s.enabled and s.deviceTypeId == "augDoor"]:
serverState = self.getDoorStatus(indigo.devices[int(dev.pluginProps["lockID"])].pluginProps["lockID"])
# loop through any doors associated with the lock
for dev in [s for s in indigo.devices.iter(filter="self") if s.enabled and s.deviceTypeId == "augDoor" and s.pluginProps["lockID"] == lock_id]:
door_serverState = lockStatus["doorState"] == "open"

if serverState is not None:
if dev.onState != serverState:
dev.updateStateOnServer('onOffState', value=serverState)
else:
had_errors = True
if door_serverState is not None:
if dev.onState != door_serverState:
dev.updateStateOnServer('onOffState', value=door_serverState)
else:
had_errors = True

if had_errors:
indigo.server.log("Had errors while refreshing status from August, will try again in " + self.pollingInterval + " seconds")
Expand Down

0 comments on commit af8ed89

Please sign in to comment.