From e77575249612d3870c20f46393f16fbe5834b5c1 Mon Sep 17 00:00:00 2001 From: Warodom Khamphanchai Date: Mon, 7 Dec 2015 11:58:28 -0800 Subject: [PATCH] Ecobee: retries to get refresh tokens if exceptions are caught in refreshAuthToken --- .../ecobee-thermostat.groovy | 2 +- .../ecobee-connect.src/ecobee-connect.groovy | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/devicetypes/smartthings/ecobee-thermostat.src/ecobee-thermostat.groovy b/devicetypes/smartthings/ecobee-thermostat.src/ecobee-thermostat.groovy index dac3df7..10a1a50 100644 --- a/devicetypes/smartthings/ecobee-thermostat.src/ecobee-thermostat.groovy +++ b/devicetypes/smartthings/ecobee-thermostat.src/ecobee-thermostat.groovy @@ -99,7 +99,7 @@ metadata { } preferences { - input "holdType", "enum", title: "Hold Type", description: "When changing temperature, use Temporary or Permanent hold", required: false, options:["Temporary", "Permanent"] + input "holdType", "enum", title: "Hold Type", description: "When changing temperature, use Temporary or Permanent hold (default)", required: false, options:["Temporary", "Permanent"] } } diff --git a/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy b/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy index 3ff0ee6..7f9ea37 100644 --- a/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy +++ b/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy @@ -356,6 +356,8 @@ def initialize() { //since access_token expires every 2 hours runEvery1Hour("refreshAuthToken") + atomicState.reAttempt = 0 + } def pollHandler() { @@ -640,8 +642,18 @@ private refreshAuthToken() { } } catch(Exception e) { log.error "refreshAuthToken() >> Error: e.statusCode ${e.statusCode}" - if (e.statusCode == 401) { - sendPushAndFeeds(notificationMessage) + def reAttemptPeriod = 300 // in sec + if (e.statusCode != 401) { //this issue might comes from exceed 20sec app execution, connectivity issue etc. + runIn(reAttemptPeriod, "refreshAuthToken") + } else if (e.statusCode == 401) { //refresh token is expired + atomicState.reAttempt = atomicState.reAttempt + 1 + log.warn "reAttempt refreshAuthToken to try = ${atomicState.reAttempt}" + if (atomicState.reAttempt <= 3) { + runIn(reAttemptPeriod, "refreshAuthToken") + } else { + sendPushAndFeeds(notificationMessage) + atomicState.reAttempt = 0 + } } } }