diff --git a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy index 685e041..d96dd77 100644 --- a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy +++ b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy @@ -143,7 +143,7 @@ def refresh() { def configure() { // Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // enrolls with default periodic reporting until newer 5 min interval is confirmed - sendEvent(name: "checkInterval", value: 3 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + sendEvent(name: "checkInterval", value: 3 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) // OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity refresh() + zigbee.onOffConfig(0, 300) + powerConfig() diff --git a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy index 79c460f..ef17d94 100644 --- a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy +++ b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy @@ -104,7 +104,7 @@ def configure() { log.debug "Configuring Reporting and Bindings." // Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // enrolls with default periodic reporting until newer 5 min interval is confirmed - sendEvent(name: "checkInterval", value: 3 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + sendEvent(name: "checkInterval", value: 3 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) // OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.onOffConfig(0, 300) + zigbee.levelConfig() diff --git a/devicetypes/smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy b/devicetypes/smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy index 1e8102b..aa4defb 100644 --- a/devicetypes/smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy +++ b/devicetypes/smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy @@ -145,7 +145,7 @@ def configure() { log.debug "Configuring Reporting and Bindings." // Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // enrolls with default periodic reporting until newer 5 min interval is confirmed - sendEvent(name: "checkInterval", value: 3 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + sendEvent(name: "checkInterval", value: 3 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) // OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity refresh() diff --git a/devicetypes/smartthings/zigbee-white-color-temperature-bulb.src/zigbee-white-color-temperature-bulb.groovy b/devicetypes/smartthings/zigbee-white-color-temperature-bulb.src/zigbee-white-color-temperature-bulb.groovy index 9283628..15a83f6 100644 --- a/devicetypes/smartthings/zigbee-white-color-temperature-bulb.src/zigbee-white-color-temperature-bulb.groovy +++ b/devicetypes/smartthings/zigbee-white-color-temperature-bulb.src/zigbee-white-color-temperature-bulb.groovy @@ -128,7 +128,7 @@ def configure() { log.debug "Configuring Reporting and Bindings." // Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // enrolls with default periodic reporting until newer 5 min interval is confirmed - sendEvent(name: "checkInterval", value: 3 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + sendEvent(name: "checkInterval", value: 3 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) // OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity refresh() 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 [] } }