From 9a5d506668e6e2271e1fdbe71ade7e094eba4dde Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Fri, 14 Oct 2016 16:18:51 -0600 Subject: [PATCH] DVCSMP-2131 Philips Hue: Handle case if bridge username becomes invalid --- .../hue-connect.src/hue-connect.groovy | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/smartapps/smartthings/hue-connect.src/hue-connect.groovy b/smartapps/smartthings/hue-connect.src/hue-connect.groovy index d793cf4..d39d451 100644 --- a/smartapps/smartthings/hue-connect.src/hue-connect.groovy +++ b/smartapps/smartthings/hue-connect.src/hue-connect.groovy @@ -37,7 +37,10 @@ preferences { def mainPage() { def bridges = bridgesDiscovered() - if (state.username && bridges) { + + if (state.refreshUsernameNeeded) { + return bridgeLinking() + } else if (state.username && bridges) { return bulbDiscovery() } else { return bridgeDiscovery() @@ -102,13 +105,22 @@ def bridgeLinking() { def nextPage = "" def title = "Linking with your Hue" - def paragraphText + def paragraphText if (selectedHue) { + if (state.refreshUsernameNeeded) { + paragraphText = "The current Hue username is invalid.\n\nPlease press the button on your Hue Bridge to re-link. " + } else { paragraphText = "Press the button on your Hue Bridge to setup a link. " - } else { - paragraphText = "You haven't selected a Hue Bridge, please Press \"Done\" and select one before clicking next." - } + } + } else { + paragraphText = "You haven't selected a Hue Bridge, please Press \"Done\" and select one before clicking next." + } if (state.username) { //if discovery worked + if (state.refreshUsernameNeeded) { + state.refreshUsernameNeeded = false + // Issue one poll with new username to cancel local polling with old username + poll() + } nextPage = "bulbDiscovery" title = "Success!" paragraphText = "Linking to your hub was a success! Please click 'Next'!" @@ -915,8 +927,15 @@ private handleCommandResponse(body) { updates[childDeviceNetworkId]."$eventType" = v } } - } else if (payload.error) { - log.warn "Error returned from Hue bridge error = ${body?.error}" + } else if (payload?.error) { + log.warn "Error returned from Hue bridge, error = ${payload?.error}" + // Check for unauthorized user + if (payload?.error?.type?.value == 1) { + log.error "Hue username is not valid" + state.refreshUsernameNeeded = true + state.username = null + } + return [] } }