From 1674dc7339bc0291cf5b20a0ceb321f648d9cd20 Mon Sep 17 00:00:00 2001 From: Curb Operations Date: Fri, 22 Jul 2016 10:39:53 -0500 Subject: [PATCH 001/104] MSA-1408: it exposes a customer's smart thing switches, and allows the user to toggle them from the Curb app. --- .../curb-control.src/curb-control.groovy | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 smartapps/curb-v2/curb-control.src/curb-control.groovy diff --git a/smartapps/curb-v2/curb-control.src/curb-control.groovy b/smartapps/curb-v2/curb-control.src/curb-control.groovy new file mode 100644 index 0000000..f098bc9 --- /dev/null +++ b/smartapps/curb-v2/curb-control.src/curb-control.groovy @@ -0,0 +1,103 @@ +/** + * Curb Control + * + * Copyright 2016 Savanni D'Gerinel + * + */ +definition( + name: "Curb Control", + namespace: "curb-v2", + author: "Savanni D'Gerinel", + description: "Control point for Curb/SmartThings integration", + category: "Green Living", + iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png", + iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png", + iconX3Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png", + oauth: true) + + +preferences { + section("Allow Endpoint to Control These Things...") { + input "switches", "capability.switch", title: "Which Switches?", multiple: true, required: false + } +} + +mappings { + + path("/switches") { + action: [ + GET: "listSwitches" + ] + } + path("/switches/:id") { + action: [ + GET: "showSwitch" + ] + } + path("/switches/:id/:command") { + action: [ + PUT: "updateSwitch" + ] + } +} + +def installed() {} + +def updated() {} + + +//switches +def listSwitches() { + switches.collect{device(it,"switch")} +} + +def showSwitch() { + show(switches, "switch") +} +void updateSwitch() { + update(switches) +} + + +def deviceHandler(evt) {} + +private void update(devices) { + log.debug "update, request: params: ${params}, devices: $devices.id" + + + //def command = request.JSON?.command + def command = params.command + //let's create a toggle option here + if (command) + { + def device = devices.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + if(command == "toggle") + { + if(device.currentValue('switch') == "on") + device.off(); + else + device.on();; + } + } + } +} + +private show(devices, type) { + def device = devices.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } + else { + def attributeName = type == "motionSensor" ? "motion" : type + def s = device.currentState(attributeName) + [id: device.id, label: device.displayName, value: s?.value, unitTime: s?.date?.time, type: type] + } +} + + +private device(it, type) { + it ? [id: it.id, label: it.label, type: type] : null +} From e7eb461b4e03646420fc8e61953ca34800434e3e Mon Sep 17 00:00:00 2001 From: tslagle13 Date: Tue, 13 Dec 2016 14:37:49 -0800 Subject: [PATCH 002/104] [DVCSMP-2273] Fix for NPE for slave/master settings --- .../color-coordinator.groovy | 77 ++++++++++--------- 1 file changed, 42 insertions(+), 35 deletions(-) diff --git a/smartapps/michaelstruck/color-coordinator.src/color-coordinator.groovy b/smartapps/michaelstruck/color-coordinator.src/color-coordinator.groovy index f3d6ce2..d36805c 100644 --- a/smartapps/michaelstruck/color-coordinator.src/color-coordinator.groovy +++ b/smartapps/michaelstruck/color-coordinator.src/color-coordinator.groovy @@ -1,10 +1,11 @@ /** * Color Coordinator - * Version 1.1.0 - 11/9/16 + * Version 1.1.1 - 11/9/16 * By Michael Struck * * 1.0.0 - Initial release * 1.1.0 - Fixed issue where master can be part of slaves. This causes a loop that impacts SmartThings. + * 1.1.1 - Fix NPE being thrown for slave/master inputs being empty. * * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -40,10 +41,10 @@ def mainPage() { } } section("Master Light") { - input "master", "capability.colorControl", title: "Colored Light" + input "master", "capability.colorControl", title: "Colored Light", required: true } section("Lights that follow the master settings") { - input "slaves", "capability.colorControl", title: "Colored Lights", multiple: true, required: false, submitOnChange: true + input "slaves", "capability.colorControl", title: "Colored Lights", multiple: true, required: true, submitOnChange: true } section([mobileOnly:true], "Options") { input "randomYes", "bool",title: "When Master Turned On, Randomize Color", defaultValue: false @@ -81,40 +82,44 @@ def init() { } //----------------------------------- def onOffHandler(evt){ - if (!slaves.id.find{it==master.id}){ - if (master.currentValue("switch") == "on"){ - if (randomYes) getRandomColorMaster() - else slaves?.on() - } - else { - slaves?.off() - } + if (slaves && master) { + if (!slaves?.id.find{it==master.id}){ + if (master?.currentValue("switch") == "on"){ + if (randomYes) getRandomColorMaster() + else slaves?.on() + } + else { + slaves?.off() + } + } } } def colorHandler(evt) { - if (!slaves.id.find{it==master.id} && master.currentValue("switch") == "on"){ - log.debug "Changing Slave units H,S,L" - def dimLevel = master.currentValue("level") - def hueLevel = master.currentValue("hue") - def saturationLevel = master.currentValue("saturation") - def newValue = [hue: hueLevel, saturation: saturationLevel, level: dimLevel as Integer] - slaves?.setColor(newValue) - try { - log.debug "Changing Slave color temp" - def tempLevel = master.currentValue("colorTemperature") - slaves?.setColorTemperature(tempLevel) - } - catch (e){ - log.debug "Color temp for master --" - } + if (slaves && master) { + if (!slaves?.id?.find{it==master.id} && master?.currentValue("switch") == "on"){ + log.debug "Changing Slave units H,S,L" + def dimLevel = master?.currentValue("level") + def hueLevel = master?.currentValue("hue") + def saturationLevel = master.currentValue("saturation") + def newValue = [hue: hueLevel, saturation: saturationLevel, level: dimLevel as Integer] + slaves?.setColor(newValue) + try { + log.debug "Changing Slave color temp" + def tempLevel = master?.currentValue("colorTemperature") + slaves?.setColorTemperature(tempLevel) + } + catch (e){ + log.debug "Color temp for master --" + } + } } } def getRandomColorMaster(){ def hueLevel = Math.floor(Math.random() *1000) def saturationLevel = Math.floor(Math.random() * 100) - def dimLevel = master.currentValue("level") + def dimLevel = master?.currentValue("level") def newValue = [hue: hueLevel, saturation: saturationLevel, level: dimLevel as Integer] log.debug hueLevel log.debug saturationLevel @@ -123,12 +128,14 @@ def getRandomColorMaster(){ } def tempHandler(evt){ - if (!slaves.id.find{it==master.id} && master.currentValue("switch") == "on"){ - if (evt.value != "--") { - log.debug "Changing Slave color temp based on Master change" - def tempLevel = master.currentValue("colorTemperature") - slaves?.setColorTemperature(tempLevel) - } + if (slaves && master) { + if (!slaves?.id?.find{it==master?.id} && master?.currentValue("switch") == "on"){ + if (evt.value != "--") { + log.debug "Changing Slave color temp based on Master change" + def tempLevel = master.currentValue("colorTemperature") + slaves?.setColorTemperature(tempLevel) + } + } } } @@ -139,7 +146,7 @@ private def textAppName() { } private def textVersion() { - def text = "Version 1.1.0 (11/09/2016)" + def text = "Version 1.1.1 (12/13/2016)" } private def textCopyright() { @@ -166,4 +173,4 @@ private def textHelp() { "This application will allow you to control the settings of multiple colored lights with one control. " + "Simply choose a master control light, and then choose the lights that will follow the settings of the master, "+ "including on/off conditions, hue, saturation, level and color temperature. Also includes a random color feature." -} \ No newline at end of file +} From a4bc2480063d1acc13ba7e49e03277d0f204aa17 Mon Sep 17 00:00:00 2001 From: tslagle13 Date: Wed, 14 Dec 2016 11:40:02 -0800 Subject: [PATCH 003/104] One further fix for NPEs --- .../color-coordinator.src/color-coordinator.groovy | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/smartapps/michaelstruck/color-coordinator.src/color-coordinator.groovy b/smartapps/michaelstruck/color-coordinator.src/color-coordinator.groovy index d36805c..dc5dfb7 100644 --- a/smartapps/michaelstruck/color-coordinator.src/color-coordinator.groovy +++ b/smartapps/michaelstruck/color-coordinator.src/color-coordinator.groovy @@ -34,7 +34,7 @@ preferences { def mainPage() { dynamicPage(name: "mainPage", title: "", install: true, uninstall: false) { - def masterInList = slaves.id.find{it==master.id} + def masterInList = slaves?.id?.find{it==master?.id} if (masterInList) { section ("**WARNING**"){ paragraph "You have included the Master Light in the Slave Group. This will cause a loop in execution. Please remove this device from the Slave Group.", image: "https://raw.githubusercontent.com/MichaelStruck/SmartThingsPublic/master/img/caution.png" @@ -83,7 +83,7 @@ def init() { //----------------------------------- def onOffHandler(evt){ if (slaves && master) { - if (!slaves?.id.find{it==master.id}){ + if (!slaves?.id.find{it==master?.id}){ if (master?.currentValue("switch") == "on"){ if (randomYes) getRandomColorMaster() else slaves?.on() @@ -97,7 +97,7 @@ def onOffHandler(evt){ def colorHandler(evt) { if (slaves && master) { - if (!slaves?.id?.find{it==master.id} && master?.currentValue("switch") == "on"){ + if (!slaves?.id?.find{it==master?.id} && master?.currentValue("switch") == "on"){ log.debug "Changing Slave units H,S,L" def dimLevel = master?.currentValue("level") def hueLevel = master?.currentValue("hue") From 5b1da30a47f16929c8d7955af5d0ed012202c773 Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Mon, 19 Dec 2016 17:34:20 +0530 Subject: [PATCH 004/104] [CHF-477] Health Check implementation for Z-Wave Dimmer Switch Generic with checkinterval of 32min --- .../zwave-dimmer-switch-generic.groovy | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy index 43a65b8..841fac5 100644 --- a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy +++ b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy @@ -24,6 +24,10 @@ metadata { fingerprint inClusters: "0x26", deviceJoinName: "Z-Wave Dimmer" fingerprint mfr:"001D", prod:"1902", deviceJoinName: "Z-Wave Dimmer" fingerprint mfr:"001D", prod:"1B03", model:"0334", deviceJoinName: "Leviton Universal Dimmer" + fingerprint mfr:"011A", prod:"0102", model:"0201", deviceJoinName: "Enerwave In-Wall Dimmer" + fingerprint mfr:"001D", prod:"1001", model:"0334", deviceJoinName: "Leviton 3-Speed Fan Controller" + fingerprint mfr:"001D", prod:"0602", model:"0334", deviceJoinName: "Leviton Magnetic Low Voltage Dimmer" + fingerprint mfr:"001D", prod:"0401", model:"0334", deviceJoinName: "Leviton 600W Incandescent Dimmer" } simulator { From 32ceaff54d26cc838094c275edcb7adab9e71052 Mon Sep 17 00:00:00 2001 From: "sushant.k1" Date: Mon, 19 Dec 2016 18:39:43 +0530 Subject: [PATCH 005/104] [CHF-487] Added Health Check Implementation for: 1. 1,000-Watt In-Wall Smart Dimmer Switch (GE 12725) 2. In-Wall Smart Fan Control (GE 12730) --- .../smartthings/dimmer-switch.src/dimmer-switch.groovy | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy b/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy index 98510ca..b0852c6 100644 --- a/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy +++ b/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy @@ -22,9 +22,10 @@ metadata { capability "Sensor" capability "Health Check" - fingerprint mfr:"0063", prod:"4457", deviceJoinName: "Z-Wave Wall Dimmer" - fingerprint mfr:"0063", prod:"4944", deviceJoinName: "Z-Wave Wall Dimmer" - fingerprint mfr:"0063", prod:"5044", deviceJoinName: "Z-Wave Plug-In Dimmer" + fingerprint mfr:"0063", prod:"4457", deviceJoinName: "GE In-Wall Smart Dimmer " + fingerprint mfr:"0063", prod:"4944", deviceJoinName: "GE In-Wall Smart Dimmer " + fingerprint mfr:"0063", prod:"5044", deviceJoinName: "GE Plug-In Smart Dimmer " + fingerprint mfr:"0063", prod:"4944", model:"3034", deviceJoinName: "GE In-Wall Smart Fan Control" } simulator { From 648dee90b654f62565997e506f0b66b631e078ae Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Fri, 16 Dec 2016 15:19:11 +0530 Subject: [PATCH 006/104] [CHF-480] Health Check implementation for Z-Wave Thermostat --- .../zwave-thermostat.src/zwave-thermostat.groovy | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/devicetypes/smartthings/zwave-thermostat.src/zwave-thermostat.groovy b/devicetypes/smartthings/zwave-thermostat.src/zwave-thermostat.groovy index 404882a..8d9f117 100644 --- a/devicetypes/smartthings/zwave-thermostat.src/zwave-thermostat.groovy +++ b/devicetypes/smartthings/zwave-thermostat.src/zwave-thermostat.groovy @@ -20,6 +20,7 @@ metadata { capability "Configuration" capability "Polling" capability "Sensor" + capability "Health Check" attribute "thermostatFanState", "string" @@ -30,6 +31,7 @@ metadata { fingerprint deviceId: "0x08" fingerprint inClusters: "0x43,0x40,0x44,0x31" + fingerprint mfr:"0039", prod:"0011", model:"0001", deviceJoinName: "Honeywell Z-Wave Thermostat" } // simulator metadata @@ -123,6 +125,11 @@ metadata { } } +def updated(){ + // Device-Watch simply pings if no device events received for 32min(checkInterval) + sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) +} + def parse(String description) { def map = createEvent(zwaveEvent(zwave.parse(description, [0x42:1, 0x43:2, 0x31: 3]))) @@ -393,6 +400,14 @@ def setCoolingSetpoint(Double degrees, Integer delay = 30000) { ], delay) } +/** + * PING is used by Device-Watch in attempt to reach the Device + * */ +def ping() { + log.debug "ping() called" + poll() +} + def configure() { delayBetween([ zwave.thermostatModeV2.thermostatModeSupportedGet().format(), From 9e104055271ae522829a23a1075c6cc0123dd4e2 Mon Sep 17 00:00:00 2001 From: Parijat Das Date: Tue, 20 Dec 2016 18:33:50 +0530 Subject: [PATCH 007/104] Added fingerprints for the following devices: 1. Enerwave Duplex Receptacle ZW15R 2. Enerwave On/Off Switch ZW15S 3. Leviton 15A Switch VRS15-1LZ --- .../zwave-switch-generic.src/zwave-switch-generic.groovy | 3 +++ 1 file changed, 3 insertions(+) diff --git a/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy b/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy index 01ce695..ef1134a 100644 --- a/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy +++ b/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy @@ -25,6 +25,9 @@ metadata { fingerprint mfr:"0063", prod:"4F50", model:"3031", deviceJoinName: "GE Plug-in Outdoor Switch" fingerprint mfr:"001D", prod:"1D04", model:"0334", deviceJoinName: "Leviton Outlet" fingerprint mfr:"001D", prod:"1C02", model:"0334", deviceJoinName: "Leviton Switch" + fingerprint mfr:"001D", prod:"0301", model:"0334", deviceJoinName: "Leviton 15A Switch" + fingerprint mfr:"011A", prod:"0101", model:"0102", deviceJoinName: "Enerwave On/Off Switch" + fingerprint mfr:"011A", prod:"0101", model:"0603", deviceJoinName: "Enerwave Duplex Receptacle" } // simulator metadata From b7a08a88e07124b418428b67e694a7af7e900f6f Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Thu, 5 Jan 2017 16:41:50 -0800 Subject: [PATCH 008/104] DEVC-518 Iris Smart Water Sensor --- .../smartsense-moisture-sensor.groovy | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy index a8cb9d5..2f6e884 100644 --- a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy +++ b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy @@ -29,9 +29,10 @@ metadata { command "enrollResponse" - fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-S", deviceJoinName: "Water Leak Sensor" - fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315" - fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-Seu", deviceJoinName: "Water Leak Sensor" + fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-S", deviceJoinName: "Water Leak Sensor" + fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315" + fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-Seu", deviceJoinName: "Water Leak Sensor" + fingerprint inClusters: "0000,0001,0003,0020,0402,0500,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-L", deviceJoinName: "Iris Smart Water Sensor" fingerprint inClusters: "0000,0001,0003,000F,0020,0402,0500", outClusters: "0019", manufacturer: "SmartThings", model: "moisturev4", deviceJoinName: "Water Leak Sensor" } From 259516f21f655e34a2995c709a22e45e46572517 Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Thu, 5 Jan 2017 16:54:46 -0800 Subject: [PATCH 009/104] DEVC-520 DEVC-525 Adding Iris Button after clearing certification --- .../smartthings/zigbee-button.src/zigbee-button.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy b/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy index 3f68e62..b8d5499 100644 --- a/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy +++ b/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy @@ -28,8 +28,8 @@ metadata { fingerprint inClusters: "0000, 0001, 0003, 0020, 0402, 0B05", outClusters: "0003, 0006, 0008, 0019", manufacturer: "OSRAM", model: "LIGHTIFY Dimming Switch", deviceJoinName: "OSRAM LIGHTIFY Dimming Switch" //fingerprint inClusters: "0000, 0001, 0003, 0020, 0500", outClusters: "0003,0019", manufacturer: "CentraLite", model: "3455-L", deviceJoinName: "Iris Care Pendant" - //fingerprint inClusters: "0000, 0001, 0003, 0007, 0020, 0402, 0B05", outClusters: "0003, 0006, 0019", manufacturer: "CentraLite", model: "3460-L", deviceJoinName: "Iris Smart Button" - //fingerprint inClusters: "0000, 0001, 0003, 0007, 0020, 0B05", outClusters: "0003, 0006, 0019", manufacturer: "CentraLite", model:"3450-L", deviceJoinName: "Iris KeyFob" + fingerprint inClusters: "0000, 0001, 0003, 0007, 0020, 0402, 0B05", outClusters: "0003, 0006, 0019", manufacturer: "CentraLite", model: "3460-L", deviceJoinName: "Iris Smart Button" + fingerprint inClusters: "0000, 0001, 0003, 0007, 0020, 0B05", outClusters: "0003, 0006, 0019", manufacturer: "CentraLite", model:"3450-L", deviceJoinName: "Iris KeyFob" } simulator {} From 930c4ed914067b50e2c6f30b06774a41dda1522a Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Thu, 29 Dec 2016 10:30:08 -0600 Subject: [PATCH 010/104] Increase zigbee message delays This changes our smartsense DTHs that don't use the ZigBee library for everything to have larger delays between ZigBee messages. This is to reduce the network load to try to work around some of the poorer behaving ZigBee routers we support. This resolves: https://smartthings.atlassian.net/browse/DPROT-223 --- .../ge-link-bulb.src/ge-link-bulb.groovy | 4 +-- .../smartpower-dimming-outlet.groovy | 28 +++++++++++-------- .../smartpower-outlet-v1.groovy | 4 +-- .../smartpower-outlet.groovy | 5 ++-- .../smartsense-moisture-sensor.groovy | 10 +++---- .../smartsense-motion-sensor.groovy | 10 +++---- .../smartsense-multi-sensor.groovy | 4 +-- .../smartsense-open-closed-sensor.groovy | 10 +++---- .../smartsense-temp-humidity-sensor.groovy | 6 ++-- 9 files changed, 43 insertions(+), 38 deletions(-) diff --git a/devicetypes/smartthings/ge-link-bulb.src/ge-link-bulb.groovy b/devicetypes/smartthings/ge-link-bulb.src/ge-link-bulb.groovy index d806b69..a2b77ad 100644 --- a/devicetypes/smartthings/ge-link-bulb.src/ge-link-bulb.groovy +++ b/devicetypes/smartthings/ge-link-bulb.src/ge-link-bulb.groovy @@ -99,7 +99,7 @@ def parse(String description) { def poll() { def refreshCmds = [ - "st wattr 0x${device.deviceNetworkId} 1 8 0x10 0x21 {${state?.dOnOff ?: '0000'}}", "delay 500" + "st wattr 0x${device.deviceNetworkId} 1 8 0x10 0x21 {${state?.dOnOff ?: '0000'}}", "delay 2000" ] return refreshCmds + zigbee.onOffRefresh() + zigbee.levelRefresh() @@ -197,7 +197,7 @@ def off() { def refresh() { def refreshCmds = [ - "st wattr 0x${device.deviceNetworkId} 1 8 0x10 0x21 {${state?.dOnOff ?: '0000'}}", "delay 500" + "st wattr 0x${device.deviceNetworkId} 1 8 0x10 0x21 {${state?.dOnOff ?: '0000'}}", "delay 2000" ] return refreshCmds + zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.onOffConfig() diff --git a/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy b/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy index 9539376..faaed37 100644 --- a/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy +++ b/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy @@ -128,9 +128,9 @@ def setLevel(value) { def refresh() { [ - "st rattr 0x${device.deviceNetworkId} ${endpointId} 6 0", "delay 500", - "st rattr 0x${device.deviceNetworkId} ${endpointId} 8 0", "delay 500", - "st rattr 0x${device.deviceNetworkId} ${endpointId} 0x0B04 0x050B", "delay 500" + "st rattr 0x${device.deviceNetworkId} ${endpointId} 6 0", "delay 2000", + "st rattr 0x${device.deviceNetworkId} ${endpointId} 8 0", "delay 2000", + "st rattr 0x${device.deviceNetworkId} ${endpointId} 0x0B04 0x050B", "delay 2000" ] } @@ -313,9 +313,9 @@ def isDescriptionPower(descMap) { def onOffConfig() { [ - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 6 {${device.zigbeeId}} {}", "delay 200", - "zcl global send-me-a-report 6 0 0x10 0 600 {01}", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 1500" + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 6 {${device.zigbeeId}} {}", "delay 2000", + "zcl global send-me-a-report 6 0 0x10 0 600 {01}", "delay 200", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000" ] } @@ -323,9 +323,9 @@ def onOffConfig() { //min level change is 01 def levelConfig() { [ - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 8 {${device.zigbeeId}} {}", "delay 200", - "zcl global send-me-a-report 8 0 0x20 5 3600 {01}", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 1500" + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 8 {${device.zigbeeId}} {}", "delay 2000", + "zcl global send-me-a-report 8 0 0x20 5 3600 {01}", "delay 200", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000" ] } @@ -333,9 +333,10 @@ def levelConfig() { //min change in value is 05 def powerConfig() { [ - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x0B04 {${device.zigbeeId}} {}", "delay 200", + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x0B04 {${device.zigbeeId}} {}", "delay 2000", "zcl global send-me-a-report 0x0B04 0x050B 0x29 1 600 {05 00}", //The send-me-a-report is custom to the attribute type for CentraLite - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500" + "delay 200", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000" ] } @@ -344,7 +345,10 @@ def setLevelWithRate(level, rate) { rate = "0000" } level = convertToHexString(level * 255 / 100) //Converting the 0-100 range to 0-FF range in hex - "st cmd 0x${device.deviceNetworkId} ${endpointId} 8 4 {$level $rate}" + [ + "st cmd 0x${device.deviceNetworkId} ${endpointId} 8 4 {$level $rate}", + "delay 2000" + ] } String convertToHexString(value, width=2) { diff --git a/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy b/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy index a65c5bc..4be7bce 100644 --- a/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy +++ b/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy @@ -51,7 +51,7 @@ def on() { 'zcl on-off on', 'delay 200', "send 0x${zigbee.deviceNetworkId} 0x01 0x${zigbee.endpointId}", - 'delay 500' + 'delay 2000' ] @@ -62,6 +62,6 @@ def off() { 'zcl on-off off', 'delay 200', "send 0x${zigbee.deviceNetworkId} 0x01 0x${zigbee.endpointId}", - 'delay 500' + 'delay 2000' ] } diff --git a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy index 03e475c..5001ad8 100644 --- a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy +++ b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy @@ -157,9 +157,10 @@ def configure() { //min change in value is 01 def powerConfig() { [ - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x0B04 {${device.zigbeeId}} {}", "delay 200", + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x0B04 {${device.zigbeeId}} {}", "delay 2000", "zcl global send-me-a-report 0x0B04 0x050B 0x29 1 600 {05 00}", //The send-me-a-report is custom to the attribute type for CentraLite - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500" + "delay 200", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000" ] } diff --git a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy index a8cb9d5..403562b 100644 --- a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy +++ b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy @@ -285,8 +285,8 @@ def ping() { def refresh() { log.debug "Refreshing Temperature and Battery" def refreshCmds = [ - "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 200", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 200" + "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 2000", + "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 2000" ] return refreshCmds + enrollResponse() @@ -308,10 +308,10 @@ def enrollResponse() { [ //Resending the CIE in case the enroll request is sent before CIE is written "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000", //Enroll Response - "raw 0x500 {01 23 00 00 00}", - "send 0x${device.deviceNetworkId} 1 1", "delay 200" + "raw 0x500 {01 23 00 00 00}", "delay 200", + "send 0x${device.deviceNetworkId} 1 1", "delay 2000" ] } diff --git a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy index fa71232..32f95dc 100644 --- a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy +++ b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy @@ -298,8 +298,8 @@ def ping() { def refresh() { log.debug "refresh called" def refreshCmds = [ - "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 200", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 200" + "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 2000", + "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 2000" ] return refreshCmds + enrollResponse() @@ -321,10 +321,10 @@ def enrollResponse() { [ //Resending the CIE in case the enroll request is sent before CIE is written "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000", //Enroll Response - "raw 0x500 {01 23 00 00 00}", - "send 0x${device.deviceNetworkId} 1 1", "delay 200" + "raw 0x500 {01 23 00 00 00}", "delay 200", + "send 0x${device.deviceNetworkId} 1 1", "delay 2000" ] } diff --git a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy index 5cebcd0..16a2ed2 100644 --- a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy +++ b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy @@ -428,10 +428,10 @@ def enrollResponse() { [ //Resending the CIE in case the enroll request is sent before CIE is written "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000", //Enroll Response "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 200" + "send 0x${device.deviceNetworkId} 1 1", "delay 2000" ] } diff --git a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy index b8c9196..7520ffb 100644 --- a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy +++ b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy @@ -252,8 +252,8 @@ def ping() { def refresh() { log.debug "Refreshing Temperature and Battery" def refreshCmds = [ - "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 200", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 200" + "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 2000", + "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 2000" ] return refreshCmds + enrollResponse() @@ -277,10 +277,10 @@ def enrollResponse() { [ //Resending the CIE in case the enroll request is sent before CIE is written "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000", //Enroll Response - "raw 0x500 {01 23 00 00 00}", - "send 0x${device.deviceNetworkId} 1 1", "delay 200" + "raw 0x500 {01 23 00 00 00}", "delay 200", + "send 0x${device.deviceNetworkId} 1 1", "delay 2000" ] } diff --git a/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy b/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy index cd9648e..666bf01 100644 --- a/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy +++ b/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy @@ -270,9 +270,9 @@ def configure() { log.debug "Configuring Reporting and Bindings." def humidityConfigCmds = [ - "zdo bind 0x${device.deviceNetworkId} 1 1 0xFC45 {${device.zigbeeId}} {}", "delay 500", - "zcl global send-me-a-report 0xFC45 0 0x29 30 3600 {6400}", - "send 0x${device.deviceNetworkId} 1 1", "delay 500" + "zdo bind 0x${device.deviceNetworkId} 1 1 0xFC45 {${device.zigbeeId}} {}", "delay 2000", + "zcl global send-me-a-report 0xFC45 0 0x29 30 3600 {6400}", "delay 200", + "send 0x${device.deviceNetworkId} 1 1", "delay 2000" ] // temperature minReportTime 30 seconds, maxReportTime 5 min. Reporting interval if no activity From bd44027038ec9adf42d986aa411c92a8bde355af Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Mon, 9 Jan 2017 15:32:01 -0700 Subject: [PATCH 011/104] DVCSMP-2298 Philips Hue: Reduce number of daily exceptions -Stop retry when broken data received -Time out on light discovery if nothing is found -Avoid div/0 in color temp logic --- .../hue-connect.src/hue-connect.groovy | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/smartapps/smartthings/hue-connect.src/hue-connect.groovy b/smartapps/smartthings/hue-connect.src/hue-connect.groovy index 621d0d0..fe5a4f7 100644 --- a/smartapps/smartthings/hue-connect.src/hue-connect.groovy +++ b/smartapps/smartthings/hue-connect.src/hue-connect.groovy @@ -172,18 +172,34 @@ def bulbDiscovery() { if (existingLightsDescription.isEmpty()) { existingLightsDescription += it.value } else { - existingLightsDescription += ", ${it.value}" + existingLightsDescription += ", ${it.value}" } } } - return dynamicPage(name:"bulbDiscovery", title:"Light Discovery Started!", nextPage:"", refreshInterval:refreshInterval, install:true, uninstall: true) { - section("Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.") { - input "selectedBulbs", "enum", required:false, title:"Select Hue Lights to add (${numFound} found)", multiple:true, submitOnChange: true, options:newLights - paragraph title: "Previously added Hue Lights (${existingLights.size()} added)", existingLightsDescription + if (bulbRefreshCount > 200 && numFound == 0) { + // Time out to avoid endless discovery + state.inBulbDiscovery = false + bulbRefreshCount = 0 + return dynamicPage(name:"bulbDiscovery", title:"Light Discovery Failed!", nextPage:"", refreshInterval:0, install:true, uninstall: true) { + section("Failed to discover any lights, please try again later. Click Done to exit.") { + //input "selectedBulbs", "enum", required:false, title:"Select Hue Lights to add (${numFound} found)", multiple:true, submitOnChange: true, options:newLights + paragraph title: "Previously added Hue Lights (${existingLights.size()} added)", existingLightsDescription + } + section { + href "bridgeDiscovery", title: title, description: "", state: selectedHue ? "complete" : "incomplete", params: [override: true] + } } - section { - href "bridgeDiscovery", title: title, description: "", state: selectedHue ? "complete" : "incomplete", params: [override: true] + + } else { + return dynamicPage(name:"bulbDiscovery", title:"Light Discovery Started!", nextPage:"", refreshInterval:refreshInterval, install:true, uninstall: true) { + section("Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.") { + input "selectedBulbs", "enum", required:false, title:"Select Hue Lights to add (${numFound} found)", multiple:true, submitOnChange: true, options:newLights + paragraph title: "Previously added Hue Lights (${existingLights.size()} added)", existingLightsDescription + } + section { + href "bridgeDiscovery", title: title, description: "", state: selectedHue ? "complete" : "incomplete", params: [override: true] + } } } } @@ -407,7 +423,7 @@ def addBridge() { if(vbridge) { def d = getChildDevice(selectedHue) if(!d) { - // compatibility with old devices + // compatibility with old devices def newbridge = true childDevices.each { if (it.getDeviceDataByName("mac")) { @@ -593,7 +609,7 @@ def locationHandler(evt) { log.trace "Location: $description" def hub = evt?.hubId - def parsedEvent = parseLanMessage(description) + def parsedEvent = parseLanMessage(description) parsedEvent << ["hub":hub] if (parsedEvent?.ssdpTerm?.contains("urn:schemas-upnp-org:device:basic:1")) { @@ -819,8 +835,7 @@ def parse(childDevice, description) { try { body = new groovy.json.JsonSlurper().parseText(bodyString) } catch (all) { - log.warn "Parsing Body failed - trying again..." - poll() + log.warn "Parsing Body failed" } if (body instanceof java.util.Map) { // get (poll) reponse @@ -844,7 +859,7 @@ private sendColorEvents(device, xy, hue, sat, ct, colormode = null) { def events = [:] // For now, only care about changing color temperature if requested by user - if (ct != null && (colormode == "ct" || (xy == null && hue == null && sat == null))) { + if (ct != null && ct != 0 && (colormode == "ct" || (xy == null && hue == null && sat == null))) { // for some reason setting Hue to their specified minimum off 153 yields 154, dealt with below // 153 (6500K) to 500 (2000K) def temp = (ct == 154) ? 6500 : Math.round(1000000 / ct) @@ -1252,7 +1267,7 @@ private getBridgeIP() { if (d) { if (d.getDeviceDataByName("networkAddress")) host = d.getDeviceDataByName("networkAddress") - else + else host = d.latestState('networkAddress').stringValue } if (host == null || host == "") { From 5607a3e346994f3f925372aa4bfa06908276ccba Mon Sep 17 00:00:00 2001 From: Juan Pablo Risso Date: Tue, 10 Jan 2017 12:29:53 -0500 Subject: [PATCH 012/104] DVCSMP-2309 - Wemo Exceptions (#1579) --- .../wemo-light-switch.src/wemo-light-switch.groovy | 2 +- devicetypes/smartthings/wemo-motion.src/wemo-motion.groovy | 2 +- devicetypes/smartthings/wemo-switch.src/wemo-switch.groovy | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/devicetypes/smartthings/wemo-light-switch.src/wemo-light-switch.groovy b/devicetypes/smartthings/wemo-light-switch.src/wemo-light-switch.groovy index 94e2715..ad72065 100644 --- a/devicetypes/smartthings/wemo-light-switch.src/wemo-light-switch.groovy +++ b/devicetypes/smartthings/wemo-light-switch.src/wemo-light-switch.groovy @@ -86,7 +86,7 @@ def parse(String description) { def bodyString = msg.body if (bodyString) { unschedule("setOffline") - def body = new XmlSlurper().parseText(bodyString) + def body = new XmlSlurper().parseText(bodyString.replaceAll("[^\\x20-\\x7e]", "")) if (body?.property?.TimeSyncRequest?.text()) { log.trace "Got TimeSyncRequest" diff --git a/devicetypes/smartthings/wemo-motion.src/wemo-motion.groovy b/devicetypes/smartthings/wemo-motion.src/wemo-motion.groovy index b7fbee1..dd5f1fa 100644 --- a/devicetypes/smartthings/wemo-motion.src/wemo-motion.groovy +++ b/devicetypes/smartthings/wemo-motion.src/wemo-motion.groovy @@ -78,7 +78,7 @@ def parse(String description) { def bodyString = msg.body if (bodyString) { unschedule("setOffline") - def body = new XmlSlurper().parseText(bodyString) + def body = new XmlSlurper().parseText(bodyString.replaceAll("[^\\x20-\\x7e]", "")) if (body?.property?.TimeSyncRequest?.text()) { log.trace "Got TimeSyncRequest" result << timeSyncResponse() diff --git a/devicetypes/smartthings/wemo-switch.src/wemo-switch.groovy b/devicetypes/smartthings/wemo-switch.src/wemo-switch.groovy index 6ac3939..fcda9ec 100644 --- a/devicetypes/smartthings/wemo-switch.src/wemo-switch.groovy +++ b/devicetypes/smartthings/wemo-switch.src/wemo-switch.groovy @@ -84,7 +84,7 @@ def parse(String description) { def bodyString = msg.body if (bodyString) { unschedule("setOffline") - def body = new XmlSlurper().parseText(bodyString) + def body = new XmlSlurper().parseText(bodyString.replaceAll("[^\\x20-\\x7e]", "")) if (body?.property?.TimeSyncRequest?.text()) { log.trace "Got TimeSyncRequest" result << timeSyncResponse() @@ -208,7 +208,7 @@ def subscribe(ip, port) { def existingIp = getDataValue("ip") def existingPort = getDataValue("port") if (ip && ip != existingIp) { - log.debug "Updating ip from $existingIp to $ip" + log.debug "Updating ip from $existingIp to $ip" updateDataValue("ip", ip) def ipvalue = convertHexToIP(getDataValue("ip")) sendEvent(name: "currentIP", value: ipvalue, descriptionText: "IP changed to ${ipvalue}") @@ -291,4 +291,4 @@ User-Agent: CyberGarage-HTTP/1.0 """, physicalgraph.device.Protocol.LAN) -} \ No newline at end of file +} From f969027191e27a3074a472509952f710453611d8 Mon Sep 17 00:00:00 2001 From: Duncan McKee Date: Tue, 10 Jan 2017 12:55:13 -0500 Subject: [PATCH 013/104] Add fingerprint for GE Smart Motion Sensor DEVC-533 --- .../zwave-motion-sensor.src/zwave-motion-sensor.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy b/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy index 014900b..46d8be2 100644 --- a/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy +++ b/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy @@ -28,6 +28,7 @@ metadata { fingerprint mfr: "0060", prod: "0001", model: "0002", deviceJoinName: "Everspring Motion Sensor" // Everspring SP814 fingerprint mfr: "0060", prod: "0001", model: "0003", deviceJoinName: "Everspring Motion Sensor" // Everspring HSP02 fingerprint mfr: "011A", prod: "0601", model: "0901", deviceJoinName: "Enerwave Motion Sensor" // Enerwave ZWN-BPC + fingerprint mfr: "0063", prod: "4953", model: "3133", deviceJoinName: "GE Smart Motion Sensor" } simulator { From 03a7991279074f31a9af887ba8aa7cc6bbbb9b01 Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Tue, 10 Jan 2017 12:32:49 -0700 Subject: [PATCH 014/104] MSA-1577: OpenT2T This SmartApp enables the end-to-end SmartThings scenarios via OpenT2T. More information on OpenT2T can be found at http://www.opentranslatorstothings.org/#/ --- .../opent2t-smartapp-test.groovy | 461 ++++++++++++++++++ 1 file changed, 461 insertions(+) create mode 100644 smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy diff --git a/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy b/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy new file mode 100644 index 0000000..d9e731a --- /dev/null +++ b/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy @@ -0,0 +1,461 @@ +/** + * OpenT2T SmartApp Test + * + * Copyright 2016 OpenT2T + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License + * for the specific language governing permissions and limitations under the License. + * + */ +definition( + name: "OpenT2T SmartApp Test", + namespace: "opent2t", + author: "OpenT2T", + description: "Test app to test end to end SmartThings scenarios via OpenT2T", + category: "SmartThings Labs", + iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png", + iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png", + iconX3Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png") + +/** --------------------+---------------+-----------------------+------------------------------------ + * Device Type | Attribute Name| Commands | Attribute Values + * --------------------+---------------+-----------------------+------------------------------------ + * switches | switch | on, off | on, off + * motionSensors | motion | | active, inactive + * contactSensors | contact | | open, closed + * presenceSensors | presence | | present, 'not present' + * temperatureSensors | temperature | | + * accelerationSensors | acceleration | | active, inactive + * waterSensors | water | | wet, dry + * lightSensors | illuminance | | + * humiditySensors | humidity | | + * locks | lock | lock, unlock | locked, unlocked + * garageDoors | door | open, close | unknown, closed, open, closing, opening + * cameras | image | take | + * thermostats | thermostat | setHeatingSetpoint, | temperature, heatingSetpoint, coolingSetpoint, + * | | setCoolingSetpoint, | thermostatSetpoint, thermostatMode, + * | | off, heat, cool, auto,| thermostatFanMode, thermostatOperatingState + * | | emergencyHeat, | + * | | setThermostatMode, | + * | | fanOn, fanAuto, | + * | | fanCirculate, | + * | | setThermostatFanMode | + * --------------------+---------------+-----------------------+------------------------------------ + */ + +//Device Inputs +preferences { + section("Allow to control these things...") { + input "contactSensors", "capability.contactSensor", title: "Which Contact Sensors", multiple: true, required: false + input "garageDoors", "capability.garageDoorControl", title: "Which Garage Doors?", multiple: true, required: false + input "locks", "capability.lock", title: "Which Locks?", multiple: true, required: false + input "cameras", "capability.videoCapture", title: "Which Cameras?", multiple: true, required: false + input "motionSensors", "capability.motionSensor", title: "Which Motion Sensors?", multiple: true, required: false + input "presenceSensors", "capability.presenceSensor", title: "Which Presence Sensors", multiple: true, required: false + input "switches", "capability.switch", title: "Which Switches and Lights?", multiple: true, required: false + input "thermostats", "capability.thermostat", title: "Which Thermostat?", multiple: true, required: false + input "waterSensors", "capability.waterSensor", title: "Which Water Leak Sensors?", multiple: true, required: false + } +} + +def getInputs() { + def inputList = [] + inputList += contactSensors ?: [] + inputList += garageDoors ?: [] + inputList += locks ?: [] + inputList += cameras ?: [] + inputList += motionSensors ?: [] + inputList += presenceSensors ?: [] + inputList += switches ?: [] + inputList += thermostats ?: [] + inputList += waterSensors ?: [] + return inputList +} + +//API external Endpoints +mappings { + path("/subscriptionURL/:url") { + action: + [ + PUT: "updateEndpointURL" + ] + } + path("/connectionId/:connId") { + action: + [ + PUT: "updateConnectionId" + ] + } + path("/devices") { + action: + [ + GET: "getDevices" + ] + } + path("/devices/:id") { + action: + [ + GET: "getDevice" + ] + } + path("/update/:id") { + action: + [ + PUT: "updateDevice" + ] + } + path("/subscription/:id") { + action: + [ + POST : "registerDeviceChange", + DELETE: "unregisterDeviceChange" + ] + } +} + +def installed() { + log.debug "Installed with settings: ${settings}" + initialize() +} + +def updated() { + log.debug "Updated with settings: ${settings}" + unsubscribe() + registerSubscriptions() +} + +def initialize() { + state.connectionId = "" + state.endpointURL = "https://ifs.windows-int.com/v1/cb/81C7E77B-EABC-488A-B2BF-FEC42F0DABD2/notify" + registerSubscriptions() +} + +//Subscribe events for all devices +def registerSubscriptions() { + registerChangeHandler(inputs) +} + +//Subscribe to events from a list of devices +def registerChangeHandler(myList) { + myList.each { myDevice -> + def theAtts = myDevice.supportedAttributes + theAtts.each { att -> + subscribe(myDevice, att.name, eventHandler) + log.info "Registering ${myDevice.displayName}.${att.name}" + } + } +} + +//Endpoints function: Subscribe to events from a specific device +def registerDeviceChange() { + def myDevice = findDevice(params.id) + def theAtts = myDevice.supportedAttributes + try { + theAtts.each { att -> + subscribe(myDevice, att.name, eventHandler) + log.info "Registering ${myDevice.displayName}.${att.name}" + } + return ["succeed"] + } catch (e) { + httpError(500, "something went wrong: $e") + } +} + +//Endpoints function: Unsubscribe to events from a specific device +def unregisterDeviceChange() { + def myDevice = findDevice(params.id) + try { + unsubscribe(myDevice) + log.info "Unregistering ${myDevice.displayName}" + return ["succeed"] + } catch (e) { + httpError(500, "something went wrong: $e") + } +} + +//When events are triggered, send HTTP post to web socket servers +def eventHandler(evt) { + def evt_device_id = evt.deviceId + def evt_device_value = evt.value + def evt_name = evt.name + def evt_device = evt.device + def evt_deviceType = getDeviceType(evt_device); + def params = [ + uri : "${state.endpointURL}/${state.connectionId}", + body: [ + name : evt_device.displayName, + id : evt_device.id, + deviceType : evt_deviceType, + manufacturer: evt_device.getManufacturerName(), + model : evt_device.getModelName(), + attributes : deviceAttributeList(evt_device) + ] + ] + try { + log.trace "POST URI: ${params.uri}" + log.trace "Payload: ${params.body}" + httpPostJson(params) { resp -> + resp.headers.each { + log.debug "${it.name} : ${it.value}" + } + log.trace "response status code: ${resp.status}" + log.trace "response data: ${resp.data}" + } + } catch (e) { + log.debug "something went wrong: $e" + } +} + +//Endpoints function: update subcription endpoint url [state.endpoint] +void updateEndpointURL() { + state.endpointURL = params.url + log.info "Updated EndpointURL to ${state.endpointURL}" +} + +//Endpoints function: update global variable [state.connectionId] +void updateConnectionId() { + def connId = params.connId + state.connectionId = connId + log.info "Updated ConnectionID to ${state.connectionId}" +} + +//Endpoints function: return all device data in json format +def getDevices() { + def deviceData = [] + inputs?.each { + def deviceType = getDeviceType(it) + if (deviceType == "thermostat") { + deviceData << [name: it.displayName, id: it.id, deviceType: deviceType, manufacturer: it.getManufacturerName(), model: it.getModelName(), attributes: deviceAttributeList(it), locationMode: getLocationModeInfo()] + } else { + deviceData << [name: it.displayName, id: it.id, deviceType: deviceType, manufacturer: it.getManufacturerName(), model: it.getModelName(), attributes: deviceAttributeList(it)] + } + } + + log.debug "getDevices, return: ${deviceData}" + return deviceData +} + +//Endpoints function: get device data +def getDevice() { + def it = findDevice(params.id) + def deviceType = getDeviceType(it) + def device + if (deviceType == "thermostat") { + device = [name: it.displayName, id: it.id, deviceType: deviceType, manufacturer: it.getManufacturerName(), model: it.getModelName(), attributes: deviceAttributeList(it), locationMode: getLocationModeInfo()] + } else { + device = [name: it.displayName, id: it.id, deviceType: deviceType, manufacturer: it.getManufacturerName(), model: it.getModelName(), attributes: deviceAttributeList(it)] + } + log.debug "getDevice, return: ${device}" + return device +} + +//Endpoints function: update device data +void updateDevice() { + def device = findDevice(params.id) + request.JSON.each { + def command = it.key + def value = it.value + if (command) { + def commandList = mapDeviceCommands(command, value) + command = commandList[0] + value = commandList[1] + + if (command == "setAwayMode") { + log.info "Setting away mode to ${value}" + if (location.modes?.find { it.name == value }) { + location.setMode(value) + } + } else if (command == "thermostatSetpoint") { + switch (device.currentThermostatMode) { + case "cool": + log.info "Update: ${device.displayName}, [${command}, ${value}]" + device.setCoolingSetpoint(value) + break + case "heat": + case "emergency heat": + log.info "Update: ${device.displayName}, [${command}, ${value}]" + device.setHeatingSetpoint(value) + break + default: + httpError(501, "this mode: ${device.currentThermostatMode} does not allow changing thermostat setpoint.") + break + } + } else if (!device) { + log.error "updateDevice, Device not found" + httpError(404, "Device not found") + } else if (!device.hasCommand(command)) { + log.error "updateDevice, Device does not have the command" + httpError(404, "Device does not have such command") + } else { + if (command == "setColor") { + log.info "Update: ${device.displayName}, [${command}, ${value}]" + device."$command"(hex: value) + } else if (value.isNumber()) { + def intValue = value as Integer + log.info "Update: ${device.displayName}, [${command}, ${intValue}(int)]" + device."$command"(intValue) + } else if (value) { + log.info "Update: ${device.displayName}, [${command}, ${value}]" + device."$command"(value) + } else { + log.info "Update: ${device.displayName}, [${command}]" + device."$command"() + } + } + } + } +} + +/*** Private Functions ***/ + +//Return current location mode info +private getLocationModeInfo() { + return [mode: location.mode, supported: location.modes.name] +} + +//Map each device to a type given it's capabilities +private getDeviceType(device) { + def deviceType + def caps = device.capabilities + log.debug "capabilities: [${device}, ${caps}]" + log.debug "supported commands: [${device}, ${device.supportedCommands}]" + caps.each { + switch (it.name.toLowerCase()) { + case "switch": + deviceType = "switch" + break + case "switch level": + deviceType = "light" + break + case "contact sensor": + deviceType = "contactSensor" + break + case "garageDoorControl": + deviceType = "garageDoor" + break + case "lock": + deviceType = "lock" + break + case "video camera": + deviceType = "camera" + break + case "motion sensor": + deviceType = "motionSensor" + break + case "presence sensor": + deviceType = "presenceSensor" + break + case "thermostat": + deviceType = "thermostat" + break + case "water sensor": + deviceType = "waterSensor" + break + default: + break + } + } + return deviceType +} + +//Return a specific device give the device ID. +private findDevice(deviceId) { + return inputs?.find { it.id == deviceId } +} + +//Return a list of device attributes +private deviceAttributeList(device) { + device.supportedAttributes.collectEntries { attribute -> + try { + [(attribute.name): device.currentValue(attribute.name)] + } catch (e) { + [(attribute.name): null] + } + } +} + +//Map device command and value. +//input command and value are from UWP, +//returns resultCommand and resultValue that corresponds with function and value in SmartApps +private mapDeviceCommands(command, value) { + log.debug "mapDeviceCommands: [${command}, ${value}]" + def resultCommand = command + def resultValue = value + switch (command) { + case "switch": + if (value == 1 || value == "1" || value == "on") { + resultCommand = "on" + resultValue = "" + } else if (value == 0 || value == "0" || value == "off") { + resultCommand = "off" + resultValue = "" + } + break + // light attributes + case "level": + resultCommand = "setLevel" + resultValue = value + break + case "hue": + resultCommand = "setHue" + resultValue = value + break + case "saturation": + resultCommand = "setSaturation" + resultValue = value + break + case "ct": + resultCommand = "setColorTemperature" + resultValue = value + break + case "color": + resultCommand = "setColor" + resultValue = value + // thermostat attributes + case "hvacMode": + resultCommand = "setThermostatMode" + resultValue = value + break + case "fanMode": + resultCommand = "setThermostatFanMode" + resultValue = value + break + case "awayMode": + resultCommand = "setAwayMode" + resultValue = value + break + case "coolingSetpoint": + resultCommand = "setCoolingSetpoint" + resultValue = value + break + case "heatingSetpoint": + resultCommand = "setHeatingSetpoint" + resultValue = value + break + case "thermostatSetpoint": + resultCommand = "thermostatSetpoint" + resultValue = value + break + // lock attributes + case "locked": + if (value == 1 || value == "1" || value == "lock") { + resultCommand = "lock" + resultValue = "" + } else if (value == 0 || value == "0" || value == "unlock") { + resultCommand = "unlock" + resultValue = "" + } + break + default: + break + } + + return [resultCommand, resultValue] +} + From 61356ec8a7798f417e53ef14d57a284f24858dc0 Mon Sep 17 00:00:00 2001 From: Parijat Das Date: Tue, 17 Jan 2017 19:17:41 +0530 Subject: [PATCH 015/104] Added fingerprints for the following devices: 1. Leviton 5A Incandescent Switch (VRS05-1LZ) 2. Leviton 15A Split Duplex Receptacle (VRR15-1LZ) --- .../zwave-switch-generic.src/zwave-switch-generic.groovy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy b/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy index ef1134a..c630353 100644 --- a/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy +++ b/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy @@ -26,6 +26,8 @@ metadata { fingerprint mfr:"001D", prod:"1D04", model:"0334", deviceJoinName: "Leviton Outlet" fingerprint mfr:"001D", prod:"1C02", model:"0334", deviceJoinName: "Leviton Switch" fingerprint mfr:"001D", prod:"0301", model:"0334", deviceJoinName: "Leviton 15A Switch" + fingerprint mfr:"001D", prod:"0F01", model:"0334", deviceJoinName: "Leviton 5A Incandescent Switch" + fingerprint mfr:"001D", prod:"1603", model:"0334", deviceJoinName: "Leviton 15A Split Duplex Receptacle" fingerprint mfr:"011A", prod:"0101", model:"0102", deviceJoinName: "Enerwave On/Off Switch" fingerprint mfr:"011A", prod:"0101", model:"0603", deviceJoinName: "Enerwave Duplex Receptacle" } From de37d0c813976cd391a7a7c4be7c304222afb47f Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Thu, 19 Jan 2017 14:38:59 -0800 Subject: [PATCH 016/104] Device Certification approved new fingerprints --- devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy | 3 +++ devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy | 1 + 2 files changed, 4 insertions(+) diff --git a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy index 8b41e2e..753dcc4 100644 --- a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy +++ b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy @@ -28,6 +28,9 @@ metadata { fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0B05", outClusters: "0019", manufacturer: "OSRAM SYLVANIA", model: "iQBR30", deviceJoinName: "Sylvania Ultra iQ" fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, FC0F", outClusters: "0019", manufacturer: "OSRAM", model: "LIGHTIFY PAR38 ON/OFF/DIM", deviceJoinName: "SYLVANIA Smart PAR38 Soft White" fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0B04, FC0F", outClusters: "0019", manufacturer: "OSRAM", model: "LIGHTIFY BR ON/OFF/DIM", deviceJoinName: "SYLVANIA Smart BR30 Soft White" + fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0702, 0B05", outClusters: "0019", manufacturer: "sengled", model: "E11-G13", deviceJoinName: "Sengled Element Classic" + fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL6HD", deviceJoinName: "Leviton Dimmer Switch" + fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL3HL", deviceJoinName: "Leviton Lumina RF Plug-In Dimmer" } tiles(scale: 2) { diff --git a/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy b/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy index fc4debb..5b66e83 100644 --- a/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy +++ b/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy @@ -22,6 +22,7 @@ metadata { fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006" fingerprint profileId: "0104", inClusters: "0000, 0003, 0006", outClusters: "0003, 0006, 0019, 0406", manufacturer: "Leviton", model: "ZSS-10", deviceJoinName: "Leviton Switch" fingerprint profileId: "0104", inClusters: "0000, 0003, 0006", outClusters: "000A", manufacturer: "HAI", model: "65A21-1", deviceJoinName: "Leviton Wireless Load Control Module-30amp" + fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL15A", deviceJoinName: "Leviton Lumina RF Plug-In Appliance Module" } // simulator metadata From a5d0c1d80a939d1c7cb80173b0796d7534b1af98 Mon Sep 17 00:00:00 2001 From: jackchi Date: Fri, 20 Jan 2017 11:33:14 -0800 Subject: [PATCH 017/104] [CHF-508] Hue bulbs hides enrollment events --- devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy | 2 +- devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy | 2 +- devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy | 2 +- devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy | 2 +- .../hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy b/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy index ae48f0d..e878b93 100644 --- a/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy +++ b/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy @@ -57,7 +57,7 @@ metadata { } void installed() { - sendEvent(name: "DeviceWatch-Enroll", value: "{\"protocol\": \"LAN\", \"scheme\":\"untracked\", \"hubHardwareId\": \"${device.hub.hardwareID}\"}") + sendEvent(name: "DeviceWatch-Enroll", value: "{\"protocol\": \"LAN\", \"scheme\":\"untracked\", \"hubHardwareId\": \"${device.hub.hardwareID}\"}", displayed: false) } // parse events into attributes diff --git a/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy b/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy index e7fbce1..c806769 100644 --- a/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy +++ b/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy @@ -45,7 +45,7 @@ metadata { } void installed() { - sendEvent(name: "DeviceWatch-Enroll", value: "{\"protocol\": \"LAN\", \"scheme\":\"untracked\", \"hubHardwareId\": \"${device.hub.hardwareID}\"}") + sendEvent(name: "DeviceWatch-Enroll", value: "{\"protocol\": \"LAN\", \"scheme\":\"untracked\", \"hubHardwareId\": \"${device.hub.hardwareID}\"}", displayed: false) } // parse events into attributes diff --git a/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy b/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy index 143b0b3..dccbc7a 100644 --- a/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy +++ b/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy @@ -66,7 +66,7 @@ metadata { } void installed() { - sendEvent(name: "DeviceWatch-Enroll", value: "{\"protocol\": \"LAN\", \"scheme\":\"untracked\", \"hubHardwareId\": \"${device.hub.hardwareID}\"}") + sendEvent(name: "DeviceWatch-Enroll", value: "{\"protocol\": \"LAN\", \"scheme\":\"untracked\", \"hubHardwareId\": \"${device.hub.hardwareID}\"}", displayed: false) } // parse events into attributes diff --git a/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy b/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy index d855d38..cf8a2ec 100644 --- a/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy +++ b/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy @@ -50,7 +50,7 @@ metadata { } void installed() { - sendEvent(name: "DeviceWatch-Enroll", value: "{\"protocol\": \"LAN\", \"scheme\":\"untracked\", \"hubHardwareId\": \"${device.hub.hardwareID}\"}") + sendEvent(name: "DeviceWatch-Enroll", value: "{\"protocol\": \"LAN\", \"scheme\":\"untracked\", \"hubHardwareId\": \"${device.hub.hardwareID}\"}", displayed: false) } // parse events into attributes diff --git a/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy b/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy index 718ed57..564abd1 100644 --- a/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy +++ b/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy @@ -55,7 +55,7 @@ metadata { } void installed() { - sendEvent(name: "DeviceWatch-Enroll", value: "{\"protocol\": \"LAN\", \"scheme\":\"untracked\", \"hubHardwareId\": \"${device.hub.hardwareID}\"}") + sendEvent(name: "DeviceWatch-Enroll", value: "{\"protocol\": \"LAN\", \"scheme\":\"untracked\", \"hubHardwareId\": \"${device.hub.hardwareID}\"}", displayed: false) } // parse events into attributes From 7648fd4a176288351f10e47afc657126941a7e9c Mon Sep 17 00:00:00 2001 From: juano2310 Date: Fri, 20 Jan 2017 14:42:20 -0500 Subject: [PATCH 018/104] DVCSMP-2325 - Remove parse method from simulated Switch sin string --- .../testing/simulated-switch.src/simulated-switch.groovy | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/devicetypes/smartthings/testing/simulated-switch.src/simulated-switch.groovy b/devicetypes/smartthings/testing/simulated-switch.src/simulated-switch.groovy index e15cf0d..a977b86 100644 --- a/devicetypes/smartthings/testing/simulated-switch.src/simulated-switch.groovy +++ b/devicetypes/smartthings/testing/simulated-switch.src/simulated-switch.groovy @@ -12,7 +12,7 @@ * */ metadata { - + definition (name: "Simulated Switch", namespace: "smartthings/testing", author: "bob") { capability "Switch" capability "Relay Switch" @@ -39,9 +39,7 @@ metadata { } } -def parse(String description) { - def pair = description.split(":") - createEvent(name: pair[0].trim(), value: pair[1].trim()) +def parse(description) { } def on() { From 445c115c1456743198e938f511a113f96deb2948 Mon Sep 17 00:00:00 2001 From: Juan Pablo Risso Date: Fri, 20 Jan 2017 17:49:15 -0500 Subject: [PATCH 019/104] DVCSMP-2324 - Centralite Thermostat handle multiple attributes (#1606) - Curly braces - remove parseDescriptionAsMap - descMap to it - Appended to the result list - Convert to list and appended --- .../centralite-thermostat.groovy | 50 +++++++++---------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy b/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy index a92839f..394ac2d 100644 --- a/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy +++ b/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy @@ -81,51 +81,47 @@ metadata { // parse events into attributes def parse(String description) { log.debug "Parse description $description" - def map = [:] - if (description?.startsWith("read attr -")) { - def descMap = parseDescriptionAsMap(description) - log.debug "Desc Map: $descMap" - if (descMap.cluster == "0201" && descMap.attrId == "0000") { + List result = [] + def descMap = zigbee.parseDescriptionAsMap(description) + log.debug "Desc Map: $descMap" + List attrData = [[cluster: descMap.cluster ,attrId: descMap.attrId, value: descMap.value]] + descMap.additionalAttrs.each { + attrData << [cluster: descMap.cluster, attrId: it.attrId, value: it.value] + } + attrData.each { + def map = [:] + if (it.cluster == "0201" && it.attrId == "0000") { log.debug "TEMP" map.name = "temperature" - map.value = getTemperature(descMap.value) + map.value = getTemperature(it.value) map.unit = temperatureScale - } else if (descMap.cluster == "0201" && descMap.attrId == "0011") { + } else if (it.cluster == "0201" && it.attrId == "0011") { log.debug "COOLING SETPOINT" map.name = "coolingSetpoint" - map.value = getTemperature(descMap.value) + map.value = getTemperature(it.value) map.unit = temperatureScale - } else if (descMap.cluster == "0201" && descMap.attrId == "0012") { + } else if (it.cluster == "0201" && it.attrId == "0012") { log.debug "HEATING SETPOINT" map.name = "heatingSetpoint" - map.value = getTemperature(descMap.value) + map.value = getTemperature(it.value) map.unit = temperatureScale - } else if (descMap.cluster == "0201" && descMap.attrId == "001c") { + } else if (it.cluster == "0201" && it.attrId == "001c") { log.debug "MODE" map.name = "thermostatMode" - map.value = getModeMap()[descMap.value] - } else if (descMap.cluster == "0202" && descMap.attrId == "0000") { + map.value = getModeMap()[it.value] + } else if (it.cluster == "0202" && it.attrId == "0000") { log.debug "FAN MODE" map.name = "thermostatFanMode" - map.value = getFanModeMap()[descMap.value] + map.value = getFanModeMap()[it.value] } + if (map) { + result << createEvent(map) + } + log.debug "Parse returned $map" } - - def result = null - if (map) { - result = createEvent(map) - } - log.debug "Parse returned $map" return result } -def parseDescriptionAsMap(description) { - (description - "read attr - ").split(",").inject([:]) { map, param -> - def nameAndValue = param.split(":") - map += [(nameAndValue[0].trim()):nameAndValue[1].trim()] - } -} - def getModeMap() { [ "00":"off", "03":"cool", From a36500a216b74d4c5b3cb3c5ad8df186153ab185 Mon Sep 17 00:00:00 2001 From: Donald Kirker Date: Mon, 23 Jan 2017 11:45:05 -0800 Subject: [PATCH 020/104] DEVC-490: Add Leviton Dimmer DL1KD fingerprint --- devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy index 8b41e2e..f864024 100644 --- a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy +++ b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy @@ -28,6 +28,7 @@ metadata { fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0B05", outClusters: "0019", manufacturer: "OSRAM SYLVANIA", model: "iQBR30", deviceJoinName: "Sylvania Ultra iQ" fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, FC0F", outClusters: "0019", manufacturer: "OSRAM", model: "LIGHTIFY PAR38 ON/OFF/DIM", deviceJoinName: "SYLVANIA Smart PAR38 Soft White" fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0B04, FC0F", outClusters: "0019", manufacturer: "OSRAM", model: "LIGHTIFY BR ON/OFF/DIM", deviceJoinName: "SYLVANIA Smart BR30 Soft White" + fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL1KD", deviceJoinName: "Leviton Lumina RF Dimmer Switch" } tiles(scale: 2) { From f334f6505a29f3a167db0e13e2dc656c65e545cc Mon Sep 17 00:00:00 2001 From: Jason Botello Date: Tue, 24 Jan 2017 14:30:59 -0800 Subject: [PATCH 021/104] Netatmo Exceptions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding try/catch blocks to reduce HTTP exceptions due to rate limits or unauthorized errors. Also updating the “devicelist” endpoint to “getstationdata” as the former is deprecated --- .../netatmo-connect.groovy | 62 +++++++++++-------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/smartapps/dianoga/netatmo-connect.src/netatmo-connect.groovy b/smartapps/dianoga/netatmo-connect.src/netatmo-connect.groovy index 65ed151..faade50 100644 --- a/smartapps/dianoga/netatmo-connect.src/netatmo-connect.groovy +++ b/smartapps/dianoga/netatmo-connect.src/netatmo-connect.groovy @@ -73,7 +73,7 @@ def authPage() { return dynamicPage(name: "Credentials", title: "Authorize Connection", nextPage:"listDevices", uninstall: uninstallAllowed, install:false) { section() { paragraph "Tap below to log in to the netatmo and authorize SmartThings access." - href url:redirectUrl, style:"embedded", required:false, title:"Connect to ${getVendorName()}:", description:description + href url:redirectUrl, style:"embedded", required:false, title:"Connect to ${getVendorName()}", description:description } } } else { @@ -146,19 +146,24 @@ def callback() { // log.debug "PARAMS: ${params}" - httpPost(params) { resp -> + try { + httpPost(params) { resp -> - def slurper = new JsonSlurper() + def slurper = new JsonSlurper() - resp.data.each { key, value -> - def data = slurper.parseText(key) - - state.refreshToken = data.refresh_token - state.authToken = data.access_token - state.tokenExpires = now() + (data.expires_in * 1000) - // log.debug "swapped token: $resp.data" - } - } + resp.data.each { key, value -> + def data = slurper.parseText(key) + log.debug "Data: $data" + state.refreshToken = data.refresh_token + state.authToken = data.access_token + //state.accessToken = data.access_token + state.tokenExpires = now() + (data.expires_in * 1000) + // log.debug "swapped token: $resp.data" + } + } + } catch (Exception e) { + log.debug "callback: Call failed $e" + } // Handle success and failure here, and render stuff accordingly if (state.authToken) { @@ -387,18 +392,18 @@ def getDeviceList() { state.deviceDetail = [:] state.deviceState = [:] - apiGet("/api/devicelist") { response -> + apiGet("/api/getstationsdata") { response -> response.data.body.devices.each { value -> def key = value._id deviceList[key] = "${value.station_name}: ${value.module_name}" state.deviceDetail[key] = value state.deviceState[key] = value.dashboard_data - } - response.data.body.modules.each { value -> - def key = value._id - deviceList[key] = "${state.deviceDetail[value.main_device].station_name}: ${value.module_name}" - state.deviceDetail[key] = value - state.deviceState[key] = value.dashboard_data + value.modules.each { value2 -> + def key2 = value2._id + deviceList[key2] = "${value.station_name}: ${value2.module_name}" + state.deviceDetail[key2] = value2 + state.deviceState[key2] = value2.dashboard_data + } } } @@ -448,6 +453,7 @@ def listDevices() { } def apiGet(String path, Map query, Closure callback) { + if(now() >= state.tokenExpires) { refreshToken(); } @@ -467,12 +473,16 @@ def apiGet(String path, Map query, Closure callback) { } catch (Exception e) { // This is most likely due to an invalid token. Try to refresh it and try again. log.debug "apiGet: Call failed $e" - if(refreshToken()) { - log.debug "apiGet: Trying again after refreshing token" - httpGet(params) { response -> - callback.call(response) - } - } + if(refreshToken()) { + log.debug "apiGet: Trying again after refreshing token" + try { + httpGet(params) { response -> + callback.call(response) + } + } catch (Exception f) { + log.debug "apiGet: Call failed $f" + } + } } } @@ -561,4 +571,4 @@ private Boolean hasAllHubsOver(String desiredFirmware) { private List getRealHubFirmwareVersions() { return location.hubs*.firmwareVersionString.findAll { it } -} +} \ No newline at end of file From 41adc9777a5a7b09876f839ebf6f5e3f9dd3a917 Mon Sep 17 00:00:00 2001 From: Jason Botello Date: Tue, 24 Jan 2017 14:53:23 -0800 Subject: [PATCH 022/104] Plant link Exceptions Adding try/catch blocks to reduce HTTP exceptions due to rate limits or unauthorized errors. --- .../plantlink-connector.groovy | 160 ++++++++++-------- 1 file changed, 92 insertions(+), 68 deletions(-) diff --git a/smartapps/osotech/plantlink-connector.src/plantlink-connector.groovy b/smartapps/osotech/plantlink-connector.src/plantlink-connector.groovy index 6a1423d..9421d23 100644 --- a/smartapps/osotech/plantlink-connector.src/plantlink-connector.groovy +++ b/smartapps/osotech/plantlink-connector.src/plantlink-connector.groovy @@ -57,7 +57,7 @@ def authPage(){ atomicState.accessToken = state.accessToken } - def redirectUrl = oauthInitUrl() + def redirectUrl = oauthInitUrl() def uninstallAllowed = false def oauthTokenProvided = false if(atomicState.authToken){ @@ -78,9 +78,9 @@ def authPage(){ } }else{ return dynamicPage(name: "auth", title: "Step 1 of 2 - Completed", nextPage:"deviceList", uninstall:uninstallAllowed) { - section(){ + section(){ paragraph "You are logged in to myplantlink.com, tap next to continue", image: iconUrl - href(url:redirectUrl, title:"Or", description:"tap to switch accounts") + href(url:redirectUrl, title:"Or", description:"tap to switch accounts") } } } @@ -137,36 +137,44 @@ def dock_sensor(device_serial, expected_plant_name) { contentType: "application/json", ] log.debug "Creating new plant on myplantlink.com - ${expected_plant_name}" - httpPost(docking_params) { docking_response -> - if (parse_api_response(docking_response, "Docking a link")) { - if (docking_response.data.plants.size() == 0) { - log.debug "creating plant for - ${expected_plant_name}" - plant_post_body_map["name"] = expected_plant_name - plant_post_body_map['links_key'] = [docking_response.data.key] - def plant_post_body_json_builder = new JsonBuilder(plant_post_body_map) - plant_post_params["body"] = plant_post_body_json_builder.toString() - httpPost(plant_post_params) { plant_post_response -> - if(parse_api_response(plant_post_response, 'creating plant')){ - def attached_map = atomicState.attached_sensors - attached_map[device_serial] = plant_post_response.data - atomicState.attached_sensors = attached_map + try { + httpPost(docking_params) { docking_response -> + if (parse_api_response(docking_response, "Docking a link")) { + if (docking_response.data.plants.size() == 0) { + log.debug "creating plant for - ${expected_plant_name}" + plant_post_body_map["name"] = expected_plant_name + plant_post_body_map['links_key'] = [docking_response.data.key] + def plant_post_body_json_builder = new JsonBuilder(plant_post_body_map) + plant_post_params["body"] = plant_post_body_json_builder.toString() + try { + httpPost(plant_post_params) { plant_post_response -> + if(parse_api_response(plant_post_response, 'creating plant')){ + def attached_map = atomicState.attached_sensors + attached_map[device_serial] = plant_post_response.data + atomicState.attached_sensors = attached_map + } + } + } catch (Exception f) { + log.debug "call failed $f" } + } else { + def plant = docking_response.data.plants[0] + def attached_map = atomicState.attached_sensors + attached_map[device_serial] = plant + atomicState.attached_sensors = attached_map + checkAndUpdatePlantIfNeeded(plant, expected_plant_name) } - } else { - def plant = docking_response.data.plants[0] - def attached_map = atomicState.attached_sensors - attached_map[device_serial] = plant - atomicState.attached_sensors = attached_map - checkAndUpdatePlantIfNeeded(plant, expected_plant_name) } } + } catch (Exception e) { + log.debug "call failed $e" } return true } def checkAndUpdatePlantIfNeeded(plant, expected_plant_name){ def plant_put_params = [ - uri : appSettings.https_plantLinkServer, + uri : appSettings.https_plantLinkServer, headers : ["Content-Type": "application/json", "Authorization": "Bearer ${atomicState.authToken}"], contentType : "application/json" ] @@ -174,12 +182,16 @@ def checkAndUpdatePlantIfNeeded(plant, expected_plant_name){ log.debug "updating plant for - ${expected_plant_name}" plant_put_params["path"] = "/api/v1/plants/${plant.key}" def plant_put_body_map = [ - name: expected_plant_name + name: expected_plant_name ] def plant_put_body_json_builder = new JsonBuilder(plant_put_body_map) plant_put_params["body"] = plant_put_body_json_builder.toString() - httpPut(plant_put_params) { plant_put_response -> - parse_api_response(plant_put_response, 'updating plant name') + try { + httpPut(plant_put_params) { plant_put_response -> + parse_api_response(plant_put_response, 'updating plant name') + } + } catch (Exception e) { + log.debug "call failed $e" } } } @@ -198,25 +210,29 @@ def moistureHandler(event){ contentType: "application/json", body: event.value ] - httpPost(measurement_post_params) { measurement_post_response -> - if (parse_api_response(measurement_post_response, 'creating moisture measurement') && - measurement_post_response.data.size() >0){ - def measurement = measurement_post_response.data[0] - def plant = measurement.plant - log.debug plant - checkAndUpdatePlantIfNeeded(plant, expected_plant_name) - plantlinksensors.each{ sensor_device -> - if (sensor_device.id == event.deviceId){ - sensor_device.setStatusIcon(plant.status) - if (plant.last_measurements && plant.last_measurements[0].moisture){ - sensor_device.setPlantFuelLevel(plant.last_measurements[0].moisture * 100 as int) - } - if (plant.last_measurements && plant.last_measurements[0].battery){ - sensor_device.setBatteryLevel(plant.last_measurements[0].battery * 100 as int) + try { + httpPost(measurement_post_params) { measurement_post_response -> + if (parse_api_response(measurement_post_response, 'creating moisture measurement') && + measurement_post_response.data.size() >0){ + def measurement = measurement_post_response.data[0] + def plant = measurement.plant + log.debug plant + checkAndUpdatePlantIfNeeded(plant, expected_plant_name) + plantlinksensors.each{ sensor_device -> + if (sensor_device.id == event.deviceId){ + sensor_device.setStatusIcon(plant.status) + if (plant.last_measurements && plant.last_measurements[0].moisture){ + sensor_device.setPlantFuelLevel(plant.last_measurements[0].moisture * 100 as int) + } + if (plant.last_measurements && plant.last_measurements[0].battery){ + sensor_device.setBatteryLevel(plant.last_measurements[0].battery * 100 as int) + } } } } } + } catch (Exception e) { + log.debug "call failed $e" } } } @@ -235,8 +251,12 @@ def batteryHandler(event){ contentType: "application/json", body: event.value ] - httpPost(measurement_post_params) { measurement_post_response -> - parse_api_response(measurement_post_response, 'creating battery measurement') + try { + httpPost(measurement_post_params) { measurement_post_response -> + parse_api_response(measurement_post_response, 'creating battery measurement') + } + } catch (Exception e) { + log.debug "call failed $e" } } } @@ -248,7 +268,7 @@ def getDeviceSerialFromEvent(event){ } def oauthInitUrl(){ - atomicState.oauthInitState = UUID.randomUUID().toString() + atomicState.oauthInitState = UUID.randomUUID().toString() def oauthParams = [ response_type: "code", client_id: appSettings.client_id, @@ -275,8 +295,12 @@ def swapToken(){ ] def jsonMap - httpPost(postParams) { resp -> - jsonMap = resp.data + try { + httpPost(postParams) { resp -> + jsonMap = resp.data + } + } catch (Exception e) { + log.debug "call failed $e" } atomicState.refreshToken = jsonMap.refresh_token @@ -287,33 +311,33 @@ def swapToken(){ -
-
PlantLink
-
connected to
-
SmartThings
-
+
+
PlantLink
+
connected to
+
SmartThings
+
-

Your PlantLink Account is now connected to SmartThings!

-

Click Done at the top right to finish setup.

-
+

Your PlantLink Account is now connected to SmartThings!

+

Click Done at the top right to finish setup.

+
""" From a15ca979885ade539fb29051f3d7b7785a4e8133 Mon Sep 17 00:00:00 2001 From: dbradmit Date: Tue, 24 Jan 2017 19:16:10 -0700 Subject: [PATCH 023/104] Update shabbat-and-holiday-modes.groovy --- .../shabbat-and-holiday-modes.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smartapps/shabbatholidaymode/shabbat-and-holiday-modes.src/shabbat-and-holiday-modes.groovy b/smartapps/shabbatholidaymode/shabbat-and-holiday-modes.src/shabbat-and-holiday-modes.groovy index c6b5905..86b6b8d 100644 --- a/smartapps/shabbatholidaymode/shabbat-and-holiday-modes.src/shabbat-and-holiday-modes.groovy +++ b/smartapps/shabbatholidaymode/shabbat-and-holiday-modes.src/shabbat-and-holiday-modes.groovy @@ -30,7 +30,7 @@ preferences { input "havdalahOffset", "number", title: "Minutes After Sundown", required:true } section("Your ZipCode") { - input "zipcode", "number", title: "ZipCode", required:true + input "zipcode", "text", title: "ZipCode", required:true } section( "Notifications" ) { input "sendPushMessage", "enum", title: "Send a push notification?", metadata:[values:["Yes","No"]], required:false @@ -205,4 +205,4 @@ if ( sendPushMessage != "No" ) { log.debug( "sending text message" ) sendSms( phone, msg ) } -}//END def sendMessage(msg) \ No newline at end of file +}//END def sendMessage(msg) From c650047f318566ce87bdf88f174c9c4498b48445 Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Wed, 25 Jan 2017 04:12:42 -0800 Subject: [PATCH 024/104] ICP-203 Adding Light Capability to hue lights --- devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy | 1 + devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy | 1 + devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy | 3 ++- .../hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy | 1 + 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy b/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy index ae48f0d..2d6f063 100644 --- a/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy +++ b/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy @@ -17,6 +17,7 @@ metadata { capability "Refresh" capability "Sensor" capability "Health Check" + capability "Light" command "setAdjustedColor" command "reset" diff --git a/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy b/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy index 143b0b3..b214b42 100644 --- a/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy +++ b/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy @@ -18,6 +18,7 @@ metadata { capability "Refresh" capability "Sensor" capability "Health Check" + capability "Light" command "setAdjustedColor" command "reset" diff --git a/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy b/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy index d855d38..c221593 100644 --- a/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy +++ b/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy @@ -14,7 +14,8 @@ metadata { capability "Switch" capability "Refresh" capability "Sensor" - capability "Health Check" + capability "Health Check" + capability "Light" command "refresh" } diff --git a/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy b/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy index 718ed57..6d1fa16 100644 --- a/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy +++ b/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy @@ -16,6 +16,7 @@ metadata { capability "Switch" capability "Refresh" capability "Health Check" + capability "Light" command "refresh" } From be2e19e4069cd65bfc5317befe943bb4b96a8ff9 Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Thu, 26 Jan 2017 10:24:26 -0600 Subject: [PATCH 025/104] Manually refresh on/off status after setLevel This is because ZLL bulbs do not report or allow for configuration of reporting of attributes. As a result if we change a value, we have to manually call a read of that attribute to update our status. This is a part of: https://smartthings.atlassian.net/browse/DPROT-227 --- devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy | 2 +- .../smartthings/zll-dimmer-bulb.src/zll-dimmer-bulb.groovy | 2 +- devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy | 2 +- devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy | 2 +- .../zll-white-color-temperature-bulb.groovy | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy b/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy index 26fa1b9..58a8184 100644 --- a/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy +++ b/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy @@ -82,7 +82,7 @@ def on() { } def setLevel(value) { - zigbee.setLevel(value) + ["delay 500"] + zigbee.levelRefresh() //adding refresh because of ZLL bulb not conforming to send-me-a-report + zigbee.setLevel(value) + zigbee.onOffRefresh() + zigbee.levelRefresh() //adding refresh because of ZLL bulb not conforming to send-me-a-report } /** diff --git a/devicetypes/smartthings/zll-dimmer-bulb.src/zll-dimmer-bulb.groovy b/devicetypes/smartthings/zll-dimmer-bulb.src/zll-dimmer-bulb.groovy index cce0862..a0568e7 100644 --- a/devicetypes/smartthings/zll-dimmer-bulb.src/zll-dimmer-bulb.groovy +++ b/devicetypes/smartthings/zll-dimmer-bulb.src/zll-dimmer-bulb.groovy @@ -89,7 +89,7 @@ def on() { } def setLevel(value) { - zigbee.setLevel(value) + ["delay 1500"] + zigbee.levelRefresh() //adding refresh because of ZLL bulb not conforming to send-me-a-report + zigbee.setLevel(value) + zigbee.onOffRefresh() + zigbee.levelRefresh() //adding refresh because of ZLL bulb not conforming to send-me-a-report } def refresh() { diff --git a/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy b/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy index 5988334..ad591e1 100644 --- a/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy +++ b/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy @@ -115,7 +115,7 @@ def refreshAttributes() { } def setLevel(value) { - zigbee.setLevel(value) + ["delay 1500"] + zigbee.levelRefresh() //adding refresh because of ZLL bulb not conforming to send-me-a-report + zigbee.setLevel(value) + zigbee.onOffRefresh() + zigbee.levelRefresh() //adding refresh because of ZLL bulb not conforming to send-me-a-report } def setColor(value){ diff --git a/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy b/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy index 5d9e700..ce1ac65 100644 --- a/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy +++ b/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy @@ -135,7 +135,7 @@ def setColorTemperature(value) { } def setLevel(value) { - zigbee.setLevel(value) + ["delay 1500"] + zigbee.levelRefresh() //adding refresh because of ZLL bulb not conforming to send-me-a-report + zigbee.setLevel(value) + zigbee.onOffRefresh() + zigbee.levelRefresh() //adding refresh because of ZLL bulb not conforming to send-me-a-report } def setColor(value){ diff --git a/devicetypes/smartthings/zll-white-color-temperature-bulb.src/zll-white-color-temperature-bulb.groovy b/devicetypes/smartthings/zll-white-color-temperature-bulb.src/zll-white-color-temperature-bulb.groovy index 98ddddd..737a933 100644 --- a/devicetypes/smartthings/zll-white-color-temperature-bulb.src/zll-white-color-temperature-bulb.groovy +++ b/devicetypes/smartthings/zll-white-color-temperature-bulb.src/zll-white-color-temperature-bulb.groovy @@ -90,7 +90,7 @@ def on() { } def setLevel(value) { - zigbee.setLevel(value) + ["delay 1500"] + zigbee.levelRefresh() + zigbee.setLevel(value) + zigbee.onOffRefresh() + zigbee.levelRefresh() } def refresh() { From db4f161e5dee3fb5bc0b1a7afcdefa99d2d1cac0 Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Mon, 17 Oct 2016 09:50:30 -0500 Subject: [PATCH 026/104] Update DTHs to use zigbee library This change updates the core DTHs to use the zigbee library where appropriate instead of having its own zigbee command strings. --- .../arrival-sensor-ha.groovy | 3 +- .../smartpower-outlet.groovy | 14 +---- .../smartsense-moisture-sensor.groovy | 49 ++--------------- .../smartsense-motion-sensor.groovy | 52 +++---------------- .../smartsense-multi-sensor.groovy | 30 ++++------- .../smartsense-open-closed-sensor.groovy | 49 ++--------------- .../smartsense-temp-humidity-sensor.groovy | 35 +++---------- .../zigbee-button.src/zigbee-button.groovy | 9 ++-- .../zigbee-lock.src/zigbee-lock.groovy | 9 ++-- .../zigbee-rgb-bulb.groovy | 5 +- .../zigbee-rgbw-bulb.groovy | 3 +- .../zigbee-valve.src/zigbee-valve.groovy | 7 ++- .../zll-rgb-bulb.src/zll-rgb-bulb.groovy | 3 +- .../zll-rgbw-bulb.src/zll-rgbw-bulb.groovy | 3 +- 14 files changed, 52 insertions(+), 219 deletions(-) diff --git a/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy b/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy index 3175764..f13b89b 100644 --- a/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy +++ b/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy @@ -11,7 +11,6 @@ * for the specific language governing permissions and limitations under the License. * */ - metadata { definition (name: "Arrival Sensor HA", namespace: "smartthings", author: "SmartThings") { capability "Tone" @@ -60,7 +59,7 @@ def updated() { } def configure() { - def cmds = zigbee.configureReporting(0x0001, 0x0020, 0x20, 20, 20, 0x01) + def cmds = zigbee.batteryConfig(20, 20, 0x01) log.debug "configure -- cmds: ${cmds}" return cmds } diff --git a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy index 5001ad8..931d339 100644 --- a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy +++ b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy @@ -13,7 +13,6 @@ * License for the specific language governing permissions and limitations * under the License. */ - metadata { // Automatically generated. Make future change here. definition (name: "SmartPower Outlet", namespace: "smartthings", author: "SmartThings") { @@ -150,18 +149,7 @@ def configure() { sendEvent(name: "checkInterval", value: 2 * 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() -} - -//power config for devices with min reporting interval as 1 seconds and reporting interval if no activity as 10min (600s) -//min change in value is 01 -def powerConfig() { - [ - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x0B04 {${device.zigbeeId}} {}", "delay 2000", - "zcl global send-me-a-report 0x0B04 0x050B 0x29 1 600 {05 00}", //The send-me-a-report is custom to the attribute type for CentraLite - "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000" - ] + refresh() + zigbee.onOffConfig(0, 300) + zigbee.electricMeasurementPowerConfig() } private getEndpointId() { diff --git a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy index 052a90b..2692edd 100644 --- a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy +++ b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy @@ -106,7 +106,7 @@ def parse(String description) { def result = map ? createEvent(map) : [:] if (description?.startsWith('enroll request')) { - List cmds = enrollResponse() + List cmds = zigbee.enrollResponse() log.debug "enroll response: ${cmds}" result = cmds?.collect { new physicalgraph.device.HubAction(it) } } @@ -285,12 +285,10 @@ def ping() { def refresh() { log.debug "Refreshing Temperature and Battery" - def refreshCmds = [ - "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 2000", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 2000" - ] + def refreshCmds = zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + + zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) - return refreshCmds + enrollResponse() + return refreshCmds + zigbee.enrollResponse() } def configure() { @@ -302,42 +300,3 @@ def configure() { // battery minReport 30 seconds, maxReportTime 6 hrs by default return refresh() + zigbee.batteryConfig() + zigbee.temperatureConfig(30, 300) // send refresh cmds as part of config } - -def enrollResponse() { - log.debug "Sending enroll response" - String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) - [ - //Resending the CIE in case the enroll request is sent before CIE is written - "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000", - //Enroll Response - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 2000" - ] -} - -private getEndpointId() { - new BigInteger(device.endpointId, 16).toString() -} - -private hex(value) { - new BigInteger(Math.round(value).toString()).toString(16) -} - -private String swapEndianHex(String hex) { - reverseArray(hex.decodeHex()).encodeHex() -} - -private byte[] reverseArray(byte[] array) { - int i = 0; - int j = array.length - 1; - byte tmp; - while (j > i) { - tmp = array[j]; - array[j] = array[i]; - array[i] = tmp; - j--; - i++; - } - return array -} diff --git a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy index 32f95dc..bc6271f 100644 --- a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy +++ b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy @@ -109,7 +109,7 @@ def parse(String description) { def result = map ? createEvent(map) : [:] if (description?.startsWith('enroll request')) { - List cmds = enrollResponse() + List cmds = zigbee.enrollResponse() log.debug "enroll response: ${cmds}" result = cmds?.collect { new physicalgraph.device.HubAction(it) } } @@ -292,17 +292,16 @@ private Map getMotionResult(value) { * PING is used by Device-Watch in attempt to reach the Device * */ def ping() { - return zigbee.readAttribute(0x001, 0x0020) // Read the Battery Level + return zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) // Read the Battery Level } def refresh() { log.debug "refresh called" - def refreshCmds = [ - "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 2000", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 2000" - ] - return refreshCmds + enrollResponse() + def refreshCmds = zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) + + zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + + return refreshCmds + zigbee.enrollResponse() } def configure() { @@ -314,42 +313,3 @@ def configure() { // battery minReport 30 seconds, maxReportTime 6 hrs by default return refresh() + zigbee.batteryConfig() + zigbee.temperatureConfig(30, 300) // send refresh cmds as part of config } - -def enrollResponse() { - log.debug "Sending enroll response" - String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) - [ - //Resending the CIE in case the enroll request is sent before CIE is written - "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000", - //Enroll Response - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 2000" - ] -} - -private getEndpointId() { - new BigInteger(device.endpointId, 16).toString() -} - -private hex(value) { - new BigInteger(Math.round(value).toString()).toString(16) -} - -private String swapEndianHex(String hex) { - reverseArray(hex.decodeHex()).encodeHex() -} - -private byte[] reverseArray(byte[] array) { - int i = 0; - int j = array.length - 1; - byte tmp; - while (j > i) { - tmp = array[j]; - array[j] = array[i]; - array[i] = tmp; - j--; - i++; - } - return array -} diff --git a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy index 16a2ed2..daf9a61 100644 --- a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy +++ b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy @@ -14,6 +14,7 @@ * under the License. */ import physicalgraph.zigbee.clusters.iaszone.ZoneStatus +import physicalgraph.zigbee.zcl.DataType metadata { definition (name: "SmartSense Multi Sensor", namespace: "smartthings", author: "SmartThings") { @@ -130,7 +131,7 @@ def parse(String description) { def result = map ? createEvent(map) : [:] if (description?.startsWith('enroll request')) { - List cmds = enrollResponse() + List cmds = zigbee.enrollResponse() log.debug "enroll response: ${cmds}" result = cmds?.collect { new physicalgraph.device.HubAction(it) } } @@ -392,11 +393,11 @@ def refresh() { } //Common refresh commands - refreshCmds += zigbee.readAttribute(0x0402, 0x0000) + - zigbee.readAttribute(0x0001, 0x0020) + + refreshCmds += zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + + zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) + zigbee.readAttribute(0xFC02, 0x0010, [mfgCode: manufacturerCode]) - return refreshCmds + enrollResponse() + return refreshCmds + zigbee.enrollResponse() } def configure() { @@ -410,10 +411,10 @@ def configure() { // battery minReport 30 seconds, maxReportTime 6 hrs by default def configCmds = zigbee.batteryConfig() + zigbee.temperatureConfig(30, 300) + - zigbee.configureReporting(0xFC02, 0x0010, 0x18, 10, 3600, 0x01, [mfgCode: manufacturerCode]) + - zigbee.configureReporting(0xFC02, 0x0012, 0x29, 1, 3600, 0x0001, [mfgCode: manufacturerCode]) + - zigbee.configureReporting(0xFC02, 0x0013, 0x29, 1, 3600, 0x0001, [mfgCode: manufacturerCode]) + - zigbee.configureReporting(0xFC02, 0x0014, 0x29, 1, 3600, 0x0001, [mfgCode: manufacturerCode]) + zigbee.configureReporting(0xFC02, 0x0010, DataType.BITMAP8, 10, 3600, 0x01, [mfgCode: manufacturerCode]) + + zigbee.configureReporting(0xFC02, 0x0012, DataType.INT16, 1, 3600, 0x0001, [mfgCode: manufacturerCode]) + + zigbee.configureReporting(0xFC02, 0x0013, DataType.INT16, 1, 3600, 0x0001, [mfgCode: manufacturerCode]) + + zigbee.configureReporting(0xFC02, 0x0014, DataType.INT16, 1, 3600, 0x0001, [mfgCode: manufacturerCode]) return refresh() + configCmds } @@ -422,19 +423,6 @@ private getEndpointId() { new BigInteger(device.endpointId, 16).toString() } -def enrollResponse() { - log.debug "Sending enroll response" - String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) - [ - //Resending the CIE in case the enroll request is sent before CIE is written - "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000", - //Enroll Response - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 2000" - ] -} - private Map parseAxis(String description) { def z = hexToSignedInt(description[0..3]) def y = hexToSignedInt(description[10..13]) diff --git a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy index 7520ffb..c3de34d 100644 --- a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy +++ b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy @@ -96,7 +96,7 @@ def parse(String description) { def result = map ? createEvent(map) : [:] if (description?.startsWith('enroll request')) { - List cmds = enrollResponse() + List cmds = zigbee.enrollResponse() log.debug "enroll response: ${cmds}" result = cmds?.collect { new physicalgraph.device.HubAction(it) } } @@ -251,12 +251,10 @@ def ping() { def refresh() { log.debug "Refreshing Temperature and Battery" - def refreshCmds = [ - "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 2000", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 2000" - ] + def refreshCmds = zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + + zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) - return refreshCmds + enrollResponse() + return refreshCmds + zigbee.enrollResponse() } def configure() { @@ -270,42 +268,3 @@ def configure() { // battery minReport 30 seconds, maxReportTime 6 hrs by default return refresh() + zigbee.batteryConfig() + zigbee.temperatureConfig(30, 300) // send refresh cmds as part of config } - -def enrollResponse() { - log.debug "Sending enroll response" - String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) - [ - //Resending the CIE in case the enroll request is sent before CIE is written - "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000", - //Enroll Response - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 2000" - ] -} - -private getEndpointId() { - new BigInteger(device.endpointId, 16).toString() -} - -private hex(value) { - new BigInteger(Math.round(value).toString()).toString(16) -} - -private String swapEndianHex(String hex) { - reverseArray(hex.decodeHex()).encodeHex() -} - -private byte[] reverseArray(byte[] array) { - int i = 0; - int j = array.length - 1; - byte tmp; - while (j > i) { - tmp = array[j]; - array[j] = array[i]; - array[i] = tmp; - j--; - i++; - } - return array -} diff --git a/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy b/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy index 666bf01..f062957 100644 --- a/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy +++ b/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy @@ -13,6 +13,8 @@ * for the specific language governing permissions and limitations under the License. * */ +import physicalgraph.zigbee.zcl.DataType + metadata { definition (name: "SmartSense Temp/Humidity Sensor",namespace: "smartthings", author: "SmartThings") { capability "Configuration" @@ -252,15 +254,15 @@ private Map getHumidityResult(value) { * PING is used by Device-Watch in attempt to reach the Device * */ def ping() { - return zigbee.readAttribute(0x001, 0x0020) // Read the Battery Level + return zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) // Read the Battery Level } def refresh() { log.debug "refresh temperature, humidity, and battery" return zigbee.readAttribute(0xFC45, 0x0000, ["mfgCode": 0xC2DF]) + // Original firmware - zigbee.readAttribute(0x0402, 0x0000) + - zigbee.readAttribute(0x0001, 0x0020) + zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + + zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) } def configure() { @@ -269,35 +271,10 @@ def configure() { sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) log.debug "Configuring Reporting and Bindings." - def humidityConfigCmds = [ - "zdo bind 0x${device.deviceNetworkId} 1 1 0xFC45 {${device.zigbeeId}} {}", "delay 2000", - "zcl global send-me-a-report 0xFC45 0 0x29 30 3600 {6400}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 2000" - ] + def humidityConfigCmds = zigbee.configureReporting(0xFC45, 0x0000, DataType.INT16, 30, 3600, 0x0064) // temperature minReportTime 30 seconds, maxReportTime 5 min. Reporting interval if no activity // battery minReport 30 seconds, maxReportTime 6 hrs by default return refresh() + humidityConfigCmds + zigbee.batteryConfig() + zigbee.temperatureConfig(30, 300) // send refresh cmds as part of config } -private hex(value) { - new BigInteger(Math.round(value).toString()).toString(16) -} - -private String swapEndianHex(String hex) { - reverseArray(hex.decodeHex()).encodeHex() -} - -private byte[] reverseArray(byte[] array) { - int i = 0; - int j = array.length - 1; - byte tmp; - while (j > i) { - tmp = array[j]; - array[j] = array[i]; - array[i] = tmp; - j--; - i++; - } - return array -} diff --git a/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy b/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy index b8d5499..311c659 100644 --- a/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy +++ b/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy @@ -13,6 +13,7 @@ * for the specific language governing permissions and limitations under the License. * */ +import physicalgraph.zigbee.zcl.DataType metadata { definition (name: "ZigBee Button", namespace: "smartthings", author: "Mitch Pond") { @@ -82,7 +83,7 @@ def parse(String description) { def result = event ? createEvent(event) : [] if (description?.startsWith('enroll request')) { - List cmds = enrollResponse() + List cmds = zigbee.enrollResponse() result = cmds?.collect { new physicalgraph.device.HubAction(it) } } return result @@ -160,7 +161,7 @@ private Map parseNonIasButtonMessage(Map descMap){ def refresh() { log.debug "Refreshing Battery" - return zigbee.readAttribute(0x0001, 0x20) + + return zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x20) + zigbee.enrollResponse() } @@ -177,9 +178,9 @@ def configure() { } return zigbee.onOffConfig() + zigbee.levelConfig() + - zigbee.configureReporting(0x0001, 0x20, 0x20, 30, 21600, 0x01) + + zigbee.configureReporting(zigbee.POWER_CONFIGURATION_CLUSTER, 0x20, DataType.UINT8, 30, 21600, 0x01) + zigbee.enrollResponse() + - zigbee.readAttribute(0x0001, 0x20) + + zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x20) + cmds } diff --git a/devicetypes/smartthings/zigbee-lock.src/zigbee-lock.groovy b/devicetypes/smartthings/zigbee-lock.src/zigbee-lock.groovy index 41de4e8..27ba626 100644 --- a/devicetypes/smartthings/zigbee-lock.src/zigbee-lock.groovy +++ b/devicetypes/smartthings/zigbee-lock.src/zigbee-lock.groovy @@ -13,6 +13,8 @@ * for the specific language governing permissions and limitations under the License. * */ +import physicalgraph.zigbee.zcl.DataType + metadata { definition (name: "ZigBee Lock", namespace: "smartthings", author: "SmartThings") { @@ -71,9 +73,6 @@ private getDOORLOCK_CMD_UNLOCK_DOOR() { 0x01 } private getDOORLOCK_ATTR_LOCKSTATE() { 0x0000 } private getPOWER_ATTR_BATTERY_PERCENTAGE_REMAINING() { 0x0021 } -private getTYPE_U8() { 0x20 } -private getTYPE_ENUM8() { 0x30 } - // Public methods def installed() { log.trace "installed()" @@ -86,9 +85,9 @@ def uninstalled() { def configure() { def cmds = zigbee.configureReporting(CLUSTER_DOORLOCK, DOORLOCK_ATTR_LOCKSTATE, - TYPE_ENUM8, 0, 3600, null) + + DataType.ENUM8, 0, 3600, null) + zigbee.configureReporting(CLUSTER_POWER, POWER_ATTR_BATTERY_PERCENTAGE_REMAINING, - TYPE_U8, 600, 21600, 0x01) + DataType.UINT8, 600, 21600, 0x01) log.info "configure() --- cmds: $cmds" return refresh() + cmds // send refresh cmds as part of config } diff --git a/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy b/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy index 64de2fb..842638b 100644 --- a/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy +++ b/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy @@ -15,6 +15,7 @@ * * This DTH should serve as the generic DTH to handle RGB ZigBee HA devices (For color bulbs with no color temperature) */ +import physicalgraph.zigbee.zcl.DataType metadata { definition (name: "ZigBee RGB Bulb", namespace: "smartthings", author: "SmartThings") { @@ -121,7 +122,7 @@ def ping() { } def refresh() { - zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE) + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION) + zigbee.onOffConfig(0, 300) + zigbee.levelConfig() + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE, 0x20, 1, 3600, 0x01) + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION, 0x20, 1, 3600, 0x01) + zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE) + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION) + zigbee.onOffConfig(0, 300) + zigbee.levelConfig() + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE, DataType.UINT8, 1, 3600, 0x01) + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION, DataType.UINT8, 1, 3600, 0x01) } def configure() { @@ -131,7 +132,7 @@ def configure() { 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.onOffConfig(0, 300) + zigbee.levelConfig() + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE, 0x20, 1, 3600, 0x01) + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION, 0x20, 1, 3600, 0x01) + zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE) + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION) + zigbee.onOffConfig(0, 300) + zigbee.levelConfig() + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE, DataType.UINT8, 1, 3600, 0x01) + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION, DataType.UINT8, 1, 3600, 0x01) + zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE) + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION) } def setLevel(value) { 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 87360fe..5eb78e4 100644 --- a/devicetypes/smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy +++ b/devicetypes/smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy @@ -15,6 +15,7 @@ * * This DTH should serve as the generic DTH to handle RGBW ZigBee HA devices */ +import physicalgraph.zigbee.zcl.DataType metadata { definition (name: "ZigBee RGBW Bulb", namespace: "smartthings", author: "SmartThings") { @@ -139,7 +140,7 @@ def ping() { } def refresh() { - zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_COLOR_TEMPERATURE) + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE) + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION) + zigbee.onOffConfig(0, 300) + zigbee.levelConfig() + zigbee.colorTemperatureConfig() + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE, 0x20, 1, 3600, 0x01) + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION, 0x20, 1, 3600, 0x01) + zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_COLOR_TEMPERATURE) + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE) + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION) + zigbee.onOffConfig(0, 300) + zigbee.levelConfig() + zigbee.colorTemperatureConfig() + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE, DataType.UINT8, 1, 3600, 0x01) + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION, DataType.UINT8, 1, 3600, 0x01) } def configure() { diff --git a/devicetypes/smartthings/zigbee-valve.src/zigbee-valve.groovy b/devicetypes/smartthings/zigbee-valve.src/zigbee-valve.groovy index 4b66fc6..905f743 100644 --- a/devicetypes/smartthings/zigbee-valve.src/zigbee-valve.groovy +++ b/devicetypes/smartthings/zigbee-valve.src/zigbee-valve.groovy @@ -11,6 +11,7 @@ * for the specific language governing permissions and limitations under the License. * */ +import physicalgraph.zigbee.zcl.DataType metadata { definition (name: "ZigBee Valve", namespace: "smartthings", author: "SmartThings") { @@ -66,8 +67,6 @@ private getCLUSTER_BASIC() { 0x0000 } private getBASIC_ATTR_POWER_SOURCE() { 0x0007 } private getCLUSTER_POWER() { 0x0001 } private getPOWER_ATTR_BATTERY_PERCENTAGE_REMAINING() { 0x0021 } -private getTYPE_U8() { 0x20 } -private getTYPE_ENUM8() { 0x30 } // Parse incoming device messages to generate events def parse(String description) { @@ -128,8 +127,8 @@ def refresh() { zigbee.readAttribute(CLUSTER_BASIC, BASIC_ATTR_POWER_SOURCE) + zigbee.readAttribute(CLUSTER_POWER, POWER_ATTR_BATTERY_PERCENTAGE_REMAINING) + zigbee.onOffConfig() + - zigbee.configureReporting(CLUSTER_POWER, POWER_ATTR_BATTERY_PERCENTAGE_REMAINING, TYPE_U8, 600, 21600, 1) + - zigbee.configureReporting(CLUSTER_BASIC, BASIC_ATTR_POWER_SOURCE, TYPE_ENUM8, 5, 21600, 1) + zigbee.configureReporting(CLUSTER_POWER, POWER_ATTR_BATTERY_PERCENTAGE_REMAINING, DataType.UINT8, 600, 21600, 1) + + zigbee.configureReporting(CLUSTER_BASIC, BASIC_ATTR_POWER_SOURCE, DataType.ENUM8, 5, 21600, 1) } def configure() { diff --git a/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy b/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy index ad591e1..977774a 100644 --- a/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy +++ b/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy @@ -11,6 +11,7 @@ * for the specific language governing permissions and limitations under the License. * */ +import physicalgraph.zigbee.zcl.DataType metadata { definition (name: "ZLL RGB Bulb", namespace: "smartthings", author: "SmartThings") { @@ -107,7 +108,7 @@ def configure() { } def configureAttributes() { - zigbee.onOffConfig() + zigbee.levelConfig() + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE, 0x20, 1, 3600, 0x01) + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION, 0x20, 1, 3600, 0x01) + zigbee.onOffConfig() + zigbee.levelConfig() + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE, DataType.UINT8, 1, 3600, 0x01) + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION, DataType.UINT8, 1, 3600, 0x01) } def refreshAttributes() { diff --git a/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy b/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy index ce1ac65..aff9fa7 100644 --- a/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy +++ b/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy @@ -11,6 +11,7 @@ * for the specific language governing permissions and limitations under the License. * */ +import physicalgraph.zigbee.zcl.DataType metadata { definition (name: "ZLL RGBW Bulb", namespace: "smartthings", author: "SmartThings") { @@ -123,7 +124,7 @@ def configure() { } def configureAttributes() { - zigbee.onOffConfig() + zigbee.levelConfig() + zigbee.colorTemperatureConfig() + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE, 0x20, 1, 3600, 0x01) + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION, 0x20, 1, 3600, 0x01) + zigbee.onOffConfig() + zigbee.levelConfig() + zigbee.colorTemperatureConfig() + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_HUE, DataType.UINT8, 1, 3600, 0x01) + zigbee.configureReporting(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION, DataType.UINT8, 1, 3600, 0x01) } def refreshAttributes() { From 65d4a811b02b03c30c656677d6f0f655c170e13a Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Thu, 20 Oct 2016 11:03:48 -0500 Subject: [PATCH 027/104] Clean up smartsense DTHs This continues an effort to clean up the SmartSense DTHs and move as much of the logic as possible into the library. This simplifies the DTH and has the advantage of having only a single location where issues need to be fixed. --- .../smartpower-dimming-outlet.groovy | 285 +------------- .../smartpower-outlet.groovy | 96 ++--- .../smartsense-moisture-sensor.groovy | 196 +++------- .../smartsense-motion-sensor.groovy | 201 +++------- .../smartsense-multi-sensor.groovy | 350 ++++++------------ .../smartsense-open-closed-sensor.groovy | 191 +++------- .../smartsense-temp-humidity-sensor.groovy | 214 ++--------- 7 files changed, 346 insertions(+), 1187 deletions(-) diff --git a/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy b/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy index faaed37..80ca040 100644 --- a/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy +++ b/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy @@ -69,292 +69,35 @@ metadata { def parse(String description) { log.debug "description is $description" - def event = [:] - def finalResult = isKnownDescription(description) - if (finalResult) { - log.info finalResult - if (finalResult.type == "update") { - log.info "$device updates: ${finalResult.value}" - event = null - } - else if (finalResult.type == "power") { - def powerValue = (finalResult.value as Integer)/10 - event = createEvent(name: "power", value: powerValue) - - /* - Dividing by 10 as the Divisor is 10000 and unit is kW for the device. AttrId: 0302 and 0300. Simplifying to 10 - - power level is an integer. The exact power level with correct units needs to be handled in the device type - to account for the different Divisor value (AttrId: 0302) and POWER Unit (AttrId: 0300). CLUSTER for simple metering is 0702 - */ - } - else { - event = createEvent(name: finalResult.type, value: finalResult.value) - } - } - else { + def event = zigbee.getEvent(description) + if (!event) { log.warn "DID NOT PARSE MESSAGE for description : $description" - log.debug parseDescriptionAsMap(description) + log.debug zigbee.parseDescriptionAsMap(description) + } else if (event.name == "power") { + /* + Dividing by 10 as the Divisor is 10000 and unit is kW for the device. Simplifying to 10 power level is an integer. + */ + event.value = event.value / 10 } return event } -// Commands to device -def zigbeeCommand(cluster, attribute){ - "st cmd 0x${device.deviceNetworkId} ${endpointId} ${cluster} ${attribute} {}" +def setLevel(value) { + zigbee.setLevel(value) } def off() { - zigbeeCommand("6", "0") + zigbee.off() } def on() { - zigbeeCommand("6", "1") -} - -def setLevel(value) { - value = value as Integer - if (value == 0) { - off() - } - else { - if (device.latestValue("switch") == "off") { - sendEvent(name: "switch", value: "on") - } - sendEvent(name: "level", value: value) - setLevelWithRate(value, "0000") //value is between 0 to 100 - } + zigbee.on() } def refresh() { - [ - "st rattr 0x${device.deviceNetworkId} ${endpointId} 6 0", "delay 2000", - "st rattr 0x${device.deviceNetworkId} ${endpointId} 8 0", "delay 2000", - "st rattr 0x${device.deviceNetworkId} ${endpointId} 0x0B04 0x050B", "delay 2000" - ] - + zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.electricMeasurementPowerRefresh() } def configure() { - refresh() + onOffConfig() + levelConfig() + powerConfig() -} - - -private getEndpointId() { - new BigInteger(device.endpointId, 16).toString() -} - -private hex(value, width=2) { - def s = new BigInteger(Math.round(value).toString()).toString(16) - while (s.size() < width) { - s = "0" + s - } - s -} - -private String swapEndianHex(String hex) { - reverseArray(hex.decodeHex()).encodeHex() -} - -private Integer convertHexToInt(hex) { - Integer.parseInt(hex,16) -} - -//Need to reverse array of size 2 -private byte[] reverseArray(byte[] array) { - byte tmp; - tmp = array[1]; - array[1] = array[0]; - array[0] = tmp; - return array -} - -def parseDescriptionAsMap(description) { - if (description?.startsWith("read attr -")) { - (description - "read attr - ").split(",").inject([:]) { map, param -> - def nameAndValue = param.split(":") - map += [(nameAndValue[0].trim()): nameAndValue[1].trim()] - } - } - else if (description?.startsWith("catchall: ")) { - def seg = (description - "catchall: ").split(" ") - def zigbeeMap = [:] - zigbeeMap += [raw: (description - "catchall: ")] - zigbeeMap += [profileId: seg[0]] - zigbeeMap += [clusterId: seg[1]] - zigbeeMap += [sourceEndpoint: seg[2]] - zigbeeMap += [destinationEndpoint: seg[3]] - zigbeeMap += [options: seg[4]] - zigbeeMap += [messageType: seg[5]] - zigbeeMap += [dni: seg[6]] - zigbeeMap += [isClusterSpecific: Short.valueOf(seg[7], 16) != 0] - zigbeeMap += [isManufacturerSpecific: Short.valueOf(seg[8], 16) != 0] - zigbeeMap += [manufacturerId: seg[9]] - zigbeeMap += [command: seg[10]] - zigbeeMap += [direction: seg[11]] - zigbeeMap += [data: seg.size() > 12 ? seg[12].split("").findAll { it }.collate(2).collect { - it.join('') - } : []] - - zigbeeMap - } -} - -def isKnownDescription(description) { - if ((description?.startsWith("catchall:")) || (description?.startsWith("read attr -"))) { - def descMap = parseDescriptionAsMap(description) - if (descMap.cluster == "0006" || descMap.clusterId == "0006") { - isDescriptionOnOff(descMap) - } - else if (descMap.cluster == "0008" || descMap.clusterId == "0008"){ - isDescriptionLevel(descMap) - } - else if (descMap.cluster == "0B04" || descMap.clusterId == "0B04"){ - isDescriptionPower(descMap) - } - else { - return [:] - } - } - else if(description?.startsWith("on/off:")) { - def switchValue = description?.endsWith("1") ? "on" : "off" - return [type: "switch", value : switchValue] - } - else { - return [:] - } -} - -def isDescriptionOnOff(descMap) { - def switchValue = "undefined" - if (descMap.cluster == "0006") { //cluster info from read attr - value = descMap.value - if (value == "01"){ - switchValue = "on" - } - else if (value == "00"){ - switchValue = "off" - } - } - else if (descMap.clusterId == "0006") { - //cluster info from catch all - //command 0B is Default response and the last two bytes are [on/off][success]. on/off=00, success=00 - //command 01 is Read attr response. the last two bytes are [datatype][value]. boolean datatype=10; on/off value = 01/00 - if ((descMap.command=="0B" && descMap.raw.endsWith("0100")) || (descMap.command=="01" && descMap.raw.endsWith("1001"))){ - switchValue = "on" - } - else if ((descMap.command=="0B" && descMap.raw.endsWith("0000")) || (descMap.command=="01" && descMap.raw.endsWith("1000"))){ - switchValue = "off" - } - else if(descMap.command=="07"){ - return [type: "update", value : "switch (0006) capability configured successfully"] - } - } - - if (switchValue != "undefined"){ - return [type: "switch", value : switchValue] - } - else { - return [:] - } - -} - -//@return - false or "success" or level [0-100] -def isDescriptionLevel(descMap) { - def dimmerValue = -1 - if (descMap.cluster == "0008"){ - //TODO: the message returned with catchall is command 0B with clusterId 0008. That is just a confirmation message - def value = convertHexToInt(descMap.value) - dimmerValue = Math.round(value * 100 / 255) - if(dimmerValue==0 && value > 0) { - dimmerValue = 1 //handling for non-zero hex value less than 3 - } - } - else if(descMap.clusterId == "0008") { - if(descMap.command=="0B"){ - return [type: "update", value : "level updated successfully"] //device updating the level change was successful. no value sent. - } - else if(descMap.command=="07"){ - return [type: "update", value : "level (0008) capability configured successfully"] - } - } - - if (dimmerValue != -1){ - return [type: "level", value : dimmerValue] - } - else { - return [:] - } -} - -def isDescriptionPower(descMap) { - def powerValue = "undefined" - if (descMap.cluster == "0B04") { - if (descMap.attrId == "050b") { - if(descMap.value!="ffff") - powerValue = convertHexToInt(descMap.value) - } - } - else if (descMap.clusterId == "0B04") { - if(descMap.command=="07"){ - return [type: "update", value : "power (0B04) capability configured successfully"] - } - } - - if (powerValue != "undefined"){ - return [type: "power", value : powerValue] - } - else { - return [:] - } -} - - -def onOffConfig() { - [ - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 6 {${device.zigbeeId}} {}", "delay 2000", - "zcl global send-me-a-report 6 0 0x10 0 600 {01}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000" - ] -} - -//level config for devices with min reporting interval as 5 seconds and reporting interval if no activity as 1hour (3600s) -//min level change is 01 -def levelConfig() { - [ - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 8 {${device.zigbeeId}} {}", "delay 2000", - "zcl global send-me-a-report 8 0 0x20 5 3600 {01}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000" - ] -} - -//power config for devices with min reporting interval as 1 seconds and reporting interval if no activity as 10min (600s) -//min change in value is 05 -def powerConfig() { - [ - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x0B04 {${device.zigbeeId}} {}", "delay 2000", - "zcl global send-me-a-report 0x0B04 0x050B 0x29 1 600 {05 00}", //The send-me-a-report is custom to the attribute type for CentraLite - "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 2000" - ] -} - -def setLevelWithRate(level, rate) { - if(rate == null){ - rate = "0000" - } - level = convertToHexString(level * 255 / 100) //Converting the 0-100 range to 0-FF range in hex - [ - "st cmd 0x${device.deviceNetworkId} ${endpointId} 8 4 {$level $rate}", - "delay 2000" - ] -} - -String convertToHexString(value, width=2) { - def s = new BigInteger(Math.round(value).toString()).toString(16) - while (s.size() < width) { - s = "0" + s - } - s + refresh() + zigbee.onOffConfig() + zigbee.levelConfig() + zigbee.electricMeasurementPowerConfig() } diff --git a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy index 931d339..6a42ae9 100644 --- a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy +++ b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy @@ -15,7 +15,7 @@ */ metadata { // Automatically generated. Make future change here. - definition (name: "SmartPower Outlet", namespace: "smartthings", author: "SmartThings") { + definition(name: "SmartPower Outlet", namespace: "smartthings", author: "SmartThings") { capability "Actuator" capability "Switch" capability "Power Meter" @@ -24,9 +24,9 @@ metadata { capability "Sensor" capability "Health Check" - fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3200", deviceJoinName: "Outlet" - fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3200-Sgb", deviceJoinName: "Outlet" - fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "4257050-RZHAC", deviceJoinName: "Outlet" + fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3200", deviceJoinName: "Outlet" + fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3200-Sgb", deviceJoinName: "Outlet" + fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "4257050-RZHAC", deviceJoinName: "Outlet" fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019" } @@ -44,32 +44,32 @@ metadata { preferences { section { image(name: 'educationalcontent', multiple: true, images: [ - "http://cdn.device-gse.smartthings.com/Outlet/US/OutletUS1.jpg", - "http://cdn.device-gse.smartthings.com/Outlet/US/OutletUS2.jpg" - ]) + "http://cdn.device-gse.smartthings.com/Outlet/US/OutletUS1.jpg", + "http://cdn.device-gse.smartthings.com/Outlet/US/OutletUS2.jpg" + ]) } } // UI tile definitions tiles(scale: 2) { - multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ - tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { + multiAttributeTile(name: "switch", type: "lighting", width: 6, height: 4, canChangeIcon: true) { + tileAttribute("device.switch", key: "PRIMARY_CONTROL") { attributeState "on", label: 'On', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821", nextState: "turningOff" attributeState "off", label: 'Off', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff", nextState: "turningOn" attributeState "turningOn", label: 'Turning On', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821", nextState: "turningOff" attributeState "turningOff", label: 'Turning Off', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff", nextState: "turningOn" } - tileAttribute ("power", key: "SECONDARY_CONTROL") { - attributeState "power", label:'${currentValue} W' + tileAttribute("power", key: "SECONDARY_CONTROL") { + attributeState "power", label: '${currentValue} W' } } standardTile("refresh", "device.power", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { - state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh" + state "default", label: '', action: "refresh.refresh", icon: "st.secondary.refresh" } main "switch" - details(["switch","refresh"]) + details(["switch", "refresh"]) } } @@ -77,47 +77,29 @@ metadata { def parse(String description) { log.debug "description is $description" - def finalResult = zigbee.getKnownDescription(description) - def event = [:] + def event = zigbee.getEvent(description) - //TODO: Remove this after getKnownDescription can parse it automatically - if (!finalResult && description!="updated") - finalResult = getPowerDescription(zigbee.parseDescriptionAsMap(description)) - - if (finalResult) { - log.info "final result = $finalResult" - if (finalResult.type == "update") { - log.info "$device updates: ${finalResult.value}" - event = null + if (event) { + if (event.name == "power") { + event.value = event.value / 10 + event.descriptionText = '{{ device.displayName }} power is {{ value }} Watts' + event.translatable = true + } else if (event.name == "switch") { + def descriptionText = event.value == "on" ? '{{ device.displayName }} is On' : '{{ device.displayName }} is Off' + event = createEvent(name: event.name, value: event.value, descriptionText: descriptionText, translatable: true) } - else if (finalResult.type == "power") { - def powerValue = (finalResult.value as Integer)/10 - event = createEvent(name: "power", value: powerValue, descriptionText: '{{ device.displayName }} power is {{ value }} Watts', translatable: true) - /* - Dividing by 10 as the Divisor is 10000 and unit is kW for the device. AttrId: 0302 and 0300. Simplifying to 10 - power level is an integer. The exact power level with correct units needs to be handled in the device type - to account for the different Divisor value (AttrId: 0302) and POWER Unit (AttrId: 0300). CLUSTER for simple metering is 0702 - */ - } - else { - def descriptionText = finalResult.value == "on" ? '{{ device.displayName }} is On' : '{{ device.displayName }} is Off' - event = createEvent(name: finalResult.type, value: finalResult.value, descriptionText: descriptionText, translatable: true) - } - } - else { + } else { def cluster = zigbee.parse(description) - if (cluster && cluster.clusterId == 0x0006 && cluster.command == 0x07){ + if (cluster && cluster.clusterId == 0x0006 && cluster.command == 0x07) { if (cluster.data[0] == 0x00) { log.debug "ON/OFF REPORTING CONFIG RESPONSE: " + cluster event = createEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) - } - else { + } else { log.warn "ON/OFF REPORTING CONFIG FAILED- error code:${cluster.data[0]}" event = null } - } - else { + } else { log.warn "DID NOT PARSE MESSAGE for description : $description" log.debug "${cluster}" } @@ -152,29 +134,3 @@ def configure() { refresh() + zigbee.onOffConfig(0, 300) + zigbee.electricMeasurementPowerConfig() } -private getEndpointId() { - new BigInteger(device.endpointId, 16).toString() -} - -//TODO: Remove this after getKnownDescription can parse it automatically -def getPowerDescription(descMap) { - def powerValue = "undefined" - if (descMap.cluster == "0B04") { - if (descMap.attrId == "050b") { - if(descMap.value!="ffff") - powerValue = zigbee.convertHexToInt(descMap.value) - } - } - else if (descMap.clusterId == "0B04") { - if(descMap.command=="07"){ - return [type: "update", value : "power (0B04) capability configured successfully"] - } - } - - if (powerValue != "undefined"){ - return [type: "power", value : powerValue] - } - else { - return [:] - } -} diff --git a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy index 2692edd..4d27081 100644 --- a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy +++ b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy @@ -17,7 +17,7 @@ import physicalgraph.zigbee.clusters.iaszone.ZoneStatus metadata { - definition (name: "SmartSense Moisture Sensor",namespace: "smartthings", author: "SmartThings") { + definition(name: "SmartSense Moisture Sensor", namespace: "smartthings", author: "SmartThings") { capability "Configuration" capability "Battery" capability "Refresh" @@ -43,10 +43,10 @@ metadata { preferences { section { image(name: 'educationalcontent', multiple: true, images: [ - "http://cdn.device-gse.smartthings.com/Moisture/Moisture1.png", - "http://cdn.device-gse.smartthings.com/Moisture/Moisture2.png", - "http://cdn.device-gse.smartthings.com/Moisture/Moisture3.png" - ]) + "http://cdn.device-gse.smartthings.com/Moisture/Moisture1.png", + "http://cdn.device-gse.smartthings.com/Moisture/Moisture2.png", + "http://cdn.device-gse.smartthings.com/Moisture/Moisture3.png" + ]) } section { input title: "Temperature Offset", description: "This feature allows you to correct any temperature variations by selecting an offset. Ex: If your sensor consistently reports a temp that's 5 degrees too warm, you'd enter '-5'. If 3 degrees too cold, enter '+3'.", displayDuringSetup: false, type: "paragraph", element: "paragraph" @@ -55,32 +55,32 @@ metadata { } tiles(scale: 2) { - multiAttributeTile(name:"water", type: "generic", width: 6, height: 4){ - tileAttribute ("device.water", key: "PRIMARY_CONTROL") { - attributeState "dry", label: "Dry", icon:"st.alarm.water.dry", backgroundColor:"#ffffff" - attributeState "wet", label: "Wet", icon:"st.alarm.water.wet", backgroundColor:"#53a7c0" + multiAttributeTile(name: "water", type: "generic", width: 6, height: 4) { + tileAttribute("device.water", key: "PRIMARY_CONTROL") { + attributeState "dry", label: "Dry", icon: "st.alarm.water.dry", backgroundColor: "#ffffff" + attributeState "wet", label: "Wet", icon: "st.alarm.water.wet", backgroundColor: "#53a7c0" } } valueTile("temperature", "device.temperature", inactiveLabel: false, width: 2, height: 2) { - state "temperature", label:'${currentValue}°', - backgroundColors:[ - [value: 31, color: "#153591"], - [value: 44, color: "#1e9cbb"], - [value: 59, color: "#90d2a7"], - [value: 74, color: "#44b621"], - [value: 84, color: "#f1d801"], - [value: 95, color: "#d04e00"], - [value: 96, color: "#bc2323"] - ] + state "temperature", label: '${currentValue}°', + backgroundColors: [ + [value: 31, color: "#153591"], + [value: 44, color: "#1e9cbb"], + [value: 59, color: "#90d2a7"], + [value: 74, color: "#44b621"], + [value: 84, color: "#f1d801"], + [value: 95, color: "#d04e00"], + [value: 96, color: "#bc2323"] + ] } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false, width: 2, height: 2) { - state "battery", label:'${currentValue}% battery', unit:"" + state "battery", label: '${currentValue}% battery', unit: "" } standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { - state "default", action:"refresh.refresh", icon:"st.secondary.refresh" + state "default", action: "refresh.refresh", icon: "st.secondary.refresh" } - main (["water", "temperature"]) + main(["water", "temperature"]) details(["water", "temperature", "battery", "refresh"]) } } @@ -88,18 +88,24 @@ metadata { def parse(String description) { log.debug "description: $description" - Map map = [:] - if (description?.startsWith('catchall:')) { - map = parseCatchAllMessage(description) - } - else if (description?.startsWith('read attr -')) { - map = parseReportAttributeMessage(description) - } - else if (description?.startsWith('temperature: ')) { - map = parseCustomMessage(description) - } - else if (description?.startsWith('zone status')) { - map = parseIasMessage(description) + // getEvent will handle temperature and humidity + Map map = zigbee.getEvent(description) + if (!map) { + if (description?.startsWith('zone status')) { + map = parseIasMessage(description) + } else { + Map descMap = zigbee.parseDescriptionAsMap(description) + if (descMap.clusterInt == 0x0001 && descMap.commandInt != 0x07 && descMap?.value) { + map = getBatteryResult(Integer.parseInt(descMap.value, 16)) + } else if (descMap?.clusterInt == zigbee.TEMPERATURE_MEASUREMENT_CLUSTER && descMap.commandInt == 0x07) { + if (descMap.data[0] == "00") { + log.debug "TEMP REPORTING CONFIG RESPONSE: $descMap" + sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + } else { + log.warn "TEMP REPORTING CONFIG FAILED- error code: ${descMap.data[0]}" + } + } + } } log.debug "Parse returned $map" @@ -113,92 +119,12 @@ def parse(String description) { return result } -private Map parseCatchAllMessage(String description) { - Map resultMap = [:] - def cluster = zigbee.parse(description) - if (shouldProcessMessage(cluster)) { - switch(cluster.clusterId) { - case 0x0001: - // 0x07 - configure reporting - if (cluster.command != 0x07) { - resultMap = getBatteryResult(cluster.data.last()) - } - break - - case 0x0402: - if (cluster.command == 0x07) { - if (cluster.data[0] == 0x00){ - log.debug "TEMP REPORTING CONFIG RESPONSE" + cluster - resultMap = [name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]] - } - else { - log.warn "TEMP REPORTING CONFIG FAILED- error code:${cluster.data[0]}" - } - } - else { - // temp is last 2 data values. reverse to swap endian - String temp = cluster.data[-2..-1].reverse().collect { cluster.hex1(it) }.join() - def value = getTemperature(temp) - resultMap = getTemperatureResult(value) - } - break - } - } - - return resultMap -} - -private boolean shouldProcessMessage(cluster) { - // 0x0B is default response indicating message got through - boolean ignoredMessage = cluster.profileId != 0x0104 || - cluster.command == 0x0B || - (cluster.data.size() > 0 && cluster.data.first() == 0x3e) - return !ignoredMessage -} - -private Map parseReportAttributeMessage(String description) { - Map descMap = (description - "read attr - ").split(",").inject([:]) { map, param -> - def nameAndValue = param.split(":") - map += [(nameAndValue[0].trim()):nameAndValue[1].trim()] - } - log.debug "Desc Map: $descMap" - - Map resultMap = [:] - if (descMap.cluster == "0402" && descMap.attrId == "0000") { - def value = getTemperature(descMap.value) - resultMap = getTemperatureResult(value) - } - else if (descMap.cluster == "0001" && descMap.attrId == "0020") { - resultMap = getBatteryResult(Integer.parseInt(descMap.value, 16)) - } - - return resultMap -} - -private Map parseCustomMessage(String description) { - Map resultMap = [:] - if (description?.startsWith('temperature: ')) { - def value = zigbee.parseHATemperatureValue(description, "temperature: ", getTemperatureScale()) - resultMap = getTemperatureResult(value) - } - return resultMap -} - private Map parseIasMessage(String description) { ZoneStatus zs = zigbee.parseZoneStatus(description) return zs.isAlarm1Set() ? getMoistureResult('wet') : getMoistureResult('dry') } -def getTemperature(value) { - def celsius = Integer.parseInt(value, 16).shortValue() / 100 - if(getTemperatureScale() == "C"){ - return Math.round(celsius) - } else { - return Math.round(celsiusToFahrenheit(celsius)) - } -} - private Map getBatteryResult(rawValue) { log.debug "Battery rawValue = ${rawValue}" def linkText = getLinkText(device) @@ -239,40 +165,18 @@ private Map getBatteryResult(rawValue) { return result } -private Map getTemperatureResult(value) { - log.debug 'TEMP' - if (tempOffset) { - def offset = tempOffset as int - def v = value as int - value = v + offset - } - def descriptionText - if ( temperatureScale == 'C' ) - descriptionText = '{{ device.displayName }} was {{ value }}°C' - else - descriptionText = '{{ device.displayName }} was {{ value }}°F' - - return [ - name: 'temperature', - value: value, - descriptionText: descriptionText, - translatable: true, - unit: temperatureScale - ] -} - private Map getMoistureResult(value) { log.debug "water" - def descriptionText - if ( value == "wet" ) - descriptionText = '{{ device.displayName }} is wet' - else - descriptionText = '{{ device.displayName }} is dry' + def descriptionText + if (value == "wet") + descriptionText = '{{ device.displayName }} is wet' + else + descriptionText = '{{ device.displayName }} is dry' return [ - name: 'water', - value: value, - descriptionText: descriptionText, - translatable: true + name : 'water', + value : value, + descriptionText: descriptionText, + translatable : true ] } @@ -286,7 +190,7 @@ def ping() { def refresh() { log.debug "Refreshing Temperature and Battery" def refreshCmds = zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + - zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) + zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) return refreshCmds + zigbee.enrollResponse() } diff --git a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy index bc6271f..a93e927 100644 --- a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy +++ b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy @@ -17,7 +17,7 @@ import physicalgraph.zigbee.clusters.iaszone.ZoneStatus metadata { - definition (name: "SmartSense Motion Sensor", namespace: "smartthings", author: "SmartThings") { + definition(name: "SmartSense Motion Sensor", namespace: "smartthings", author: "SmartThings") { capability "Motion Sensor" capability "Configuration" capability "Battery" @@ -45,10 +45,10 @@ metadata { preferences { section { image(name: 'educationalcontent', multiple: true, images: [ - "http://cdn.device-gse.smartthings.com/Motion/Motion1.jpg", - "http://cdn.device-gse.smartthings.com/Motion/Motion2.jpg", - "http://cdn.device-gse.smartthings.com/Motion/Motion3.jpg" - ]) + "http://cdn.device-gse.smartthings.com/Motion/Motion1.jpg", + "http://cdn.device-gse.smartthings.com/Motion/Motion2.jpg", + "http://cdn.device-gse.smartthings.com/Motion/Motion3.jpg" + ]) } section { input title: "Temperature Offset", description: "This feature allows you to correct any temperature variations by selecting an offset. Ex: If your sensor consistently reports a temp that's 5 degrees too warm, you'd enter '-5'. If 3 degrees too cold, enter '+3'.", displayDuringSetup: false, type: "paragraph", element: "paragraph" @@ -57,30 +57,30 @@ metadata { } tiles(scale: 2) { - multiAttributeTile(name:"motion", type: "generic", width: 6, height: 4){ - tileAttribute ("device.motion", key: "PRIMARY_CONTROL") { - attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0" - attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff" + multiAttributeTile(name: "motion", type: "generic", width: 6, height: 4) { + tileAttribute("device.motion", key: "PRIMARY_CONTROL") { + attributeState "active", label: 'motion', icon: "st.motion.motion.active", backgroundColor: "#53a7c0" + attributeState "inactive", label: 'no motion', icon: "st.motion.motion.inactive", backgroundColor: "#ffffff" } } valueTile("temperature", "device.temperature", width: 2, height: 2) { - state("temperature", label:'${currentValue}°', unit:"F", - backgroundColors:[ - [value: 31, color: "#153591"], - [value: 44, color: "#1e9cbb"], - [value: 59, color: "#90d2a7"], - [value: 74, color: "#44b621"], - [value: 84, color: "#f1d801"], - [value: 95, color: "#d04e00"], - [value: 96, color: "#bc2323"] - ] + state("temperature", label: '${currentValue}°', unit: "F", + backgroundColors: [ + [value: 31, color: "#153591"], + [value: 44, color: "#1e9cbb"], + [value: 59, color: "#90d2a7"], + [value: 74, color: "#44b621"], + [value: 84, color: "#f1d801"], + [value: 95, color: "#d04e00"], + [value: 96, color: "#bc2323"] + ] ) } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false, width: 2, height: 2) { - state "battery", label:'${currentValue}% battery', unit:"" + state "battery", label: '${currentValue}% battery', unit: "" } standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { - state "default", action:"refresh.refresh", icon:"st.secondary.refresh" + state "default", action: "refresh.refresh", icon: "st.secondary.refresh" } main(["motion", "temperature"]) @@ -90,19 +90,27 @@ metadata { def parse(String description) { log.debug "description: $description" - - Map map = [:] - if (description?.startsWith('catchall:')) { - map = parseCatchAllMessage(description) - } - else if (description?.startsWith('read attr -')) { - map = parseReportAttributeMessage(description) - } - else if (description?.startsWith('temperature: ')) { - map = parseCustomMessage(description) - } - else if (description?.startsWith('zone status')) { - map = parseIasMessage(description) + Map map = zigbee.getEvent(description) + if (!map) { + if (description?.startsWith('zone status')) { + map = parseIasMessage(description) + } else { + Map descMap = zigbee.parseDescriptionAsMap(description) + if (descMap?.clusterInt == 0x0001 && descMap.commandInt != 0x07 && descMap?.value) { + map = getBatteryResult(Integer.parseInt(descMap.value, 16)) + } else if (descMap?.clusterInt == zigbee.TEMPERATURE_MEASUREMENT_CLUSTER && descMap.commandInt == 0x07) { + if (descMap.data[0] == "00") { + log.debug "TEMP REPORTING CONFIG RESPONSE: $descMap" + sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + } else { + log.warn "TEMP REPORTING CONFIG FAILED- error code: ${descMap.data[0]}" + } + } else if (descMap.clusterInt == 0x0406 && descMap.attrInt == 0x0000) { + def value = descMap.value.endsWith("01") ? "active" : "inactive" + log.warn "Doing a read attr motion event" + resultMap = getMotionResult(value) + } + } } log.debug "Parse returned $map" @@ -116,90 +124,6 @@ def parse(String description) { return result } -private Map parseCatchAllMessage(String description) { - Map resultMap = [:] - def cluster = zigbee.parse(description) - if (shouldProcessMessage(cluster)) { - switch(cluster.clusterId) { - case 0x0001: - // 0x07 - configure reporting - if (cluster.command != 0x07) { - resultMap = getBatteryResult(cluster.data.last()) - } - break - - case 0x0402: - if (cluster.command == 0x07) { - if (cluster.data[0] == 0x00) { - log.debug "TEMP REPORTING CONFIG RESPONSE" + cluster - resultMap = [name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]] - } - else { - log.warn "TEMP REPORTING CONFIG FAILED- error code:${cluster.data[0]}" - } - - } - else { - // temp is last 2 data values. reverse to swap endian - String temp = cluster.data[-2..-1].reverse().collect { cluster.hex1(it) }.join() - def value = getTemperature(temp) - resultMap = getTemperatureResult(value) - } - break - - case 0x0406: - // 0x07 - configure reporting - if (cluster.command != 0x07) { - log.debug 'motion' - resultMap.name = 'motion' - } - break - } - } - - return resultMap -} - -private boolean shouldProcessMessage(cluster) { - // 0x0B is default response indicating message got through - boolean ignoredMessage = cluster.profileId != 0x0104 || - cluster.command == 0x0B || - (cluster.data.size() > 0 && cluster.data.first() == 0x3e) - return !ignoredMessage -} - -private Map parseReportAttributeMessage(String description) { - Map descMap = (description - "read attr - ").split(",").inject([:]) { map, param -> - def nameAndValue = param.split(":") - map += [(nameAndValue[0].trim()):nameAndValue[1].trim()] - } - log.debug "Desc Map: $descMap" - - Map resultMap = [:] - if (descMap.cluster == "0402" && descMap.attrId == "0000") { - def value = getTemperature(descMap.value) - resultMap = getTemperatureResult(value) - } - else if (descMap.cluster == "0001" && descMap.attrId == "0020") { - resultMap = getBatteryResult(Integer.parseInt(descMap.value, 16)) - } - else if (descMap.cluster == "0406" && descMap.attrId == "0000") { - def value = descMap.value.endsWith("01") ? "active" : "inactive" - resultMap = getMotionResult(value) - } - - return resultMap -} - -private Map parseCustomMessage(String description) { - Map resultMap = [:] - if (description?.startsWith('temperature: ')) { - def value = zigbee.parseHATemperatureValue(description, "temperature: ", getTemperatureScale()) - resultMap = getTemperatureResult(value) - } - return resultMap -} - private Map parseIasMessage(String description) { ZoneStatus zs = zigbee.parseZoneStatus(description) @@ -207,15 +131,6 @@ private Map parseIasMessage(String description) { return (zs.isAlarm1Set() || zs.isAlarm2Set()) ? getMotionResult('active') : getMotionResult('inactive') } -def getTemperature(value) { - def celsius = Integer.parseInt(value, 16).shortValue() / 100 - if(getTemperatureScale() == "C"){ - return Math.round(celsius) - } else { - return Math.round(celsiusToFahrenheit(celsius)) - } -} - private Map getBatteryResult(rawValue) { log.debug "Battery rawValue = ${rawValue}" def linkText = getLinkText(device) @@ -255,36 +170,14 @@ private Map getBatteryResult(rawValue) { return result } -private Map getTemperatureResult(value) { - log.debug 'TEMP' - if (tempOffset) { - def offset = tempOffset as int - def v = value as int - value = v + offset - } - def descriptionText - if ( temperatureScale == 'C' ) - descriptionText = '{{ device.displayName }} was {{ value }}°C' - else - descriptionText = '{{ device.displayName }} was {{ value }}°F' - - return [ - name: 'temperature', - value: value, - descriptionText: descriptionText, - translatable: true, - unit: temperatureScale - ] -} - private Map getMotionResult(value) { log.debug 'motion' String descriptionText = value == 'active' ? "{{ device.displayName }} detected motion" : "{{ device.displayName }} motion has stopped" return [ - name: 'motion', - value: value, - descriptionText: descriptionText, - translatable: true + name : 'motion', + value : value, + descriptionText: descriptionText, + translatable : true ] } @@ -299,7 +192,7 @@ def refresh() { log.debug "refresh called" def refreshCmds = zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) + - zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) return refreshCmds + zigbee.enrollResponse() } diff --git a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy index daf9a61..29fdf7c 100644 --- a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy +++ b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy @@ -17,20 +17,20 @@ import physicalgraph.zigbee.clusters.iaszone.ZoneStatus import physicalgraph.zigbee.zcl.DataType metadata { - definition (name: "SmartSense Multi Sensor", namespace: "smartthings", author: "SmartThings") { + definition(name: "SmartSense Multi Sensor", namespace: "smartthings", author: "SmartThings") { capability "Three Axis" capability "Battery" capability "Configuration" capability "Sensor" - capability "Contact Sensor" - capability "Acceleration Sensor" - capability "Refresh" - capability "Temperature Measurement" + capability "Contact Sensor" + capability "Acceleration Sensor" + capability "Refresh" + capability "Temperature Measurement" capability "Health Check" - command "enrollResponse" - fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05,FC02", outClusters: "0019", manufacturer: "CentraLite", model: "3320" + command "enrollResponse" + fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05,FC02", outClusters: "0019", manufacturer: "CentraLite", model: "3320" fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05,FC02", outClusters: "0019", manufacturer: "CentraLite", model: "3321" fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05,FC02", outClusters: "0019", manufacturer: "CentraLite", model: "3321-S", deviceJoinName: "Multipurpose Sensor" fingerprint inClusters: "0000,0001,0003,000F,0020,0402,0500,FC02", outClusters: "0019", manufacturer: "SmartThings", model: "multiv4", deviceJoinName: "Multipurpose Sensor" @@ -58,11 +58,11 @@ metadata { preferences { section { image(name: 'educationalcontent', multiple: true, images: [ - "http://cdn.device-gse.smartthings.com/Multi/Multi1.jpg", - "http://cdn.device-gse.smartthings.com/Multi/Multi2.jpg", - "http://cdn.device-gse.smartthings.com/Multi/Multi3.jpg", - "http://cdn.device-gse.smartthings.com/Multi/Multi4.jpg" - ]) + "http://cdn.device-gse.smartthings.com/Multi/Multi1.jpg", + "http://cdn.device-gse.smartthings.com/Multi/Multi2.jpg", + "http://cdn.device-gse.smartthings.com/Multi/Multi3.jpg", + "http://cdn.device-gse.smartthings.com/Multi/Multi4.jpg" + ]) } section { input title: "Temperature Offset", description: "This feature allows you to correct any temperature variations by selecting an offset. Ex: If your sensor consistently reports a temp that's 5 degrees too warm, you'd enter '-5'. If 3 degrees too cold, enter '+3'.", displayDuringSetup: false, type: "paragraph", element: "paragraph" @@ -74,58 +74,74 @@ metadata { } tiles(scale: 2) { - multiAttributeTile(name:"status", type: "generic", width: 6, height: 4){ - tileAttribute ("device.status", key: "PRIMARY_CONTROL") { - attributeState "open", label:'Open', icon:"st.contact.contact.open", backgroundColor:"#ffa81e" - attributeState "closed", label:'Closed', icon:"st.contact.contact.closed", backgroundColor:"#79b821" - attributeState "garage-open", label:'Open', icon:"st.doors.garage.garage-open", backgroundColor:"#ffa81e" - attributeState "garage-closed", label:'Closed', icon:"st.doors.garage.garage-closed", backgroundColor:"#79b821" + multiAttributeTile(name: "status", type: "generic", width: 6, height: 4) { + tileAttribute("device.status", key: "PRIMARY_CONTROL") { + attributeState "open", label: 'Open', icon: "st.contact.contact.open", backgroundColor: "#ffa81e" + attributeState "closed", label: 'Closed', icon: "st.contact.contact.closed", backgroundColor: "#79b821" + attributeState "garage-open", label: 'Open', icon: "st.doors.garage.garage-open", backgroundColor: "#ffa81e" + attributeState "garage-closed", label: 'Closed', icon: "st.doors.garage.garage-closed", backgroundColor: "#79b821" } } standardTile("contact", "device.contact", width: 2, height: 2) { - state("open", label:'Open', icon:"st.contact.contact.open", backgroundColor:"#ffa81e") - state("closed", label:'Closed', icon:"st.contact.contact.closed", backgroundColor:"#79b821") + state("open", label: 'Open', icon: "st.contact.contact.open", backgroundColor: "#ffa81e") + state("closed", label: 'Closed', icon: "st.contact.contact.closed", backgroundColor: "#79b821") } standardTile("acceleration", "device.acceleration", width: 2, height: 2) { - state("active", label:'Active', icon:"st.motion.acceleration.active", backgroundColor:"#53a7c0") - state("inactive", label:'Inactive', icon:"st.motion.acceleration.inactive", backgroundColor:"#ffffff") + state("active", label: 'Active', icon: "st.motion.acceleration.active", backgroundColor: "#53a7c0") + state("inactive", label: 'Inactive', icon: "st.motion.acceleration.inactive", backgroundColor: "#ffffff") } valueTile("temperature", "device.temperature", width: 2, height: 2) { - state("temperature", label:'${currentValue}°', - backgroundColors:[ - [value: 31, color: "#153591"], - [value: 44, color: "#1e9cbb"], - [value: 59, color: "#90d2a7"], - [value: 74, color: "#44b621"], - [value: 84, color: "#f1d801"], - [value: 95, color: "#d04e00"], - [value: 96, color: "#bc2323"] - ] + state("temperature", label: '${currentValue}°', + backgroundColors: [ + [value: 31, color: "#153591"], + [value: 44, color: "#1e9cbb"], + [value: 59, color: "#90d2a7"], + [value: 74, color: "#44b621"], + [value: 84, color: "#f1d801"], + [value: 95, color: "#d04e00"], + [value: 96, color: "#bc2323"] + ] ) } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false, width: 2, height: 2) { - state "battery", label:'${currentValue}% battery', unit:"" + state "battery", label: '${currentValue}% battery', unit: "" } standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { - state "default", action:"refresh.refresh", icon:"st.secondary.refresh" + state "default", action: "refresh.refresh", icon: "st.secondary.refresh" } main(["status", "acceleration", "temperature"]) details(["status", "acceleration", "temperature", "battery", "refresh"]) } - } +} def parse(String description) { - Map map = [:] - if (description?.startsWith('catchall:')) { - map = parseCatchAllMessage(description) - } - else if (description?.startsWith('temperature: ')) { - map = parseCustomMessage(description) - } - else if (description?.startsWith('zone status')) { - map = parseIasMessage(description) + Map map = zigbee.getEvent(description) + if (!map) { + if (description?.startsWith('zone status')) { + map = parseIasMessage(description) + } else { + Map descMap = zigbee.parseDescriptionAsMap(description) + if (descMap?.clusterInt == 0x0001 && descMap.commandInt != 0x07 && descMap?.value) { + map = getBatteryResult(Integer.parseInt(descMap.value, 16)) + } else if (descMap?.clusterInt == zigbee.TEMPERATURE_MEASUREMENT_CLUSTER && descMap.commandInt == 0x07) { + if (descMap.data[0] == "00") { + log.debug "TEMP REPORTING CONFIG RESPONSE: $descMap" + sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + } else { + log.warn "TEMP REPORTING CONFIG FAILED- error code: ${descMap.data[0]}" + } + } else { + map = handleAcceleration(descMap) + } + } + } else if (map.name == "temperature") { + if (tempOffset) { + map.value = (int) map.value + (int) tempOffset + } + map.descriptionText = temperatureScale == 'C' ? '{{ device.displayName }} was {{ value }}°C' : '{{ device.displayName }} was {{ value }}°F' + map.translatable = true } def result = map ? createEvent(map) : [:] @@ -135,72 +151,12 @@ def parse(String description) { log.debug "enroll response: ${cmds}" result = cmds?.collect { new physicalgraph.device.HubAction(it) } } - else if (description?.startsWith('read attr -')) { - result = parseReportAttributeMessage(description).each { createEvent(it) } - } return result } -private Map parseCatchAllMessage(String description) { - Map resultMap = [:] - def cluster = zigbee.parse(description) - log.debug cluster - if (shouldProcessMessage(cluster)) { - switch(cluster.clusterId) { - case 0x0001: - // 0x07 - configure reporting - if (cluster.command != 0x07) { - resultMap = getBatteryResult(cluster.data.last()) - } - break - - case 0xFC02: - log.debug 'ACCELERATION' - break - - case 0x0402: - if (cluster.command == 0x07) { - if(cluster.data[0] == 0x00) { - log.debug "TEMP REPORTING CONFIG RESPONSE" + cluster - resultMap = [name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]] - } - else { - log.warn "TEMP REPORTING CONFIG FAILED- error code:${cluster.data[0]}" - } - } - else { - // temp is last 2 data values. reverse to swap endian - String temp = cluster.data[-2..-1].reverse().collect { cluster.hex1(it) }.join() - def value = getTemperature(temp) - resultMap = getTemperatureResult(value) - } - break - } - } - - return resultMap -} - -private boolean shouldProcessMessage(cluster) { - // 0x0B is default response indicating message got through - boolean ignoredMessage = cluster.profileId != 0x0104 || - cluster.command == 0x0B || - (cluster.data.size() > 0 && cluster.data.first() == 0x3e) - return !ignoredMessage -} - -private List parseReportAttributeMessage(String description) { - Map descMap = (description - "read attr - ").split(",").inject([:]) { map, param -> - def nameAndValue = param.split(":") - map += [(nameAndValue[0].trim()):nameAndValue[1].trim()] - } - - List result = [] - if (descMap.cluster == "0402" && descMap.attrId == "0000") { - def value = getTemperature(descMap.value) - result << getTemperatureResult(value) - } - else if (descMap.cluster == "FC02" && descMap.attrId == "0010") { +private Map handleAcceleration(descMap) { + Map result = [:] + if (descMap.clusterInt == 0xFC02 && descMap.attrInt == 0x0010) { if (descMap.value.size() == 32) { // value will look like 00ae29001403e2290013001629001201 // breaking this apart and swapping byte order where appropriate, this breaks down to: @@ -213,36 +169,22 @@ private List parseReportAttributeMessage(String description) { result << parseAxis(threeAxisAttributes) descMap.value = descMap.value[-2..-1] } - result << getAccelerationResult(descMap.value) - } - else if (descMap.cluster == "FC02" && descMap.attrId == "0012" && descMap.value.size() == 24) { + result = getAccelerationResult(descMap.value) + } else if (descMap.clusterInt == 0xFC02 && descMap.attrInt == 0x0012 && descMap.value.size() == 24) { // The size is checked to ensure the attribute report contains X, Y and Z values // If all three axis are not included then the attribute report is ignored - result << parseAxis(descMap.value) + result = parseAxis(descMap.value) } - else if (descMap.cluster == "0001" && descMap.attrId == "0020") { - result << getBatteryResult(Integer.parseInt(descMap.value, 16)) - } - return result } -private Map parseCustomMessage(String description) { - Map resultMap = [:] - if (description?.startsWith('temperature: ')) { - def value = zigbee.parseHATemperatureValue(description, "temperature: ", getTemperatureScale()) - resultMap = getTemperatureResult(value) - } - return resultMap -} - private Map parseIasMessage(String description) { ZoneStatus zs = zigbee.parseZoneStatus(description) Map resultMap = [:] - if (garageSensor != "Yes"){ + if (garageSensor != "Yes") { resultMap = zs.isAlarm1Set() ? getContactResult('open') : getContactResult('closed') - } + } return resultMap } @@ -254,31 +196,19 @@ def updated() { def descriptionText = "Updating device to garage sensor" if (device.latestValue("status") == "open") { sendEvent(name: 'status', value: 'garage-open', descriptionText: descriptionText, translatable: true) - } - else if (device.latestValue("status") == "closed") { + } else if (device.latestValue("status") == "closed") { sendEvent(name: 'status', value: 'garage-closed', descriptionText: descriptionText, translatable: true) } - } - else { + } else { def descriptionText = "Updating device to open/close sensor" if (device.latestValue("status") == "garage-open") { sendEvent(name: 'status', value: 'open', descriptionText: descriptionText, translatable: true) - } - else if (device.latestValue("status") == "garage-closed") { + } else if (device.latestValue("status") == "garage-closed") { sendEvent(name: 'status', value: 'closed', descriptionText: descriptionText, translatable: true) } } } -def getTemperature(value) { - def celsius = Integer.parseInt(value, 16).shortValue() / 100 - if(getTemperatureScale() == "C"){ - return Math.round(celsius) - } else { - return Math.round(celsiusToFahrenheit(celsius)) - } - } - private Map getBatteryResult(rawValue) { log.debug "Battery rawValue = ${rawValue}" @@ -317,25 +247,6 @@ private Map getBatteryResult(rawValue) { return result } -private Map getTemperatureResult(value) { - log.debug "Temperature" - if (tempOffset) { - def offset = tempOffset as int - def v = value as int - value = v + offset - } - def descriptionText = temperatureScale == 'C' ? '{{ device.displayName }} was {{ value }}°C': - '{{ device.displayName }} was {{ value }}°F' - - return [ - name: 'temperature', - value: value, - descriptionText: descriptionText, - translatable: true, - unit: temperatureScale - ] -} - private Map getContactResult(value) { log.debug "Contact: ${device.displayName} value = ${value}" def descriptionText = value == 'open' ? '{{ device.displayName }} was opened' : '{{ device.displayName }} was closed' @@ -346,24 +257,24 @@ private Map getContactResult(value) { private getAccelerationResult(numValue) { log.debug "Acceleration" def name = "acceleration" - def value - def descriptionText + def value + def descriptionText - if ( numValue.endsWith("1") ) { - value = "active" - descriptionText = '{{ device.displayName }} was active' - } else { - value = "inactive" - descriptionText = '{{ device.displayName }} was inactive' - } + if (numValue.endsWith("1")) { + value = "active" + descriptionText = '{{ device.displayName }} was active' + } else { + value = "inactive" + descriptionText = '{{ device.displayName }} was inactive' + } def isStateChange = isStateChange(device, name, value) return [ - name: name, - value: value, - descriptionText: descriptionText, - isStateChange: isStateChange, - translatable: true + name : name, + value : value, + descriptionText: descriptionText, + isStateChange : isStateChange, + translatable : true ] } @@ -377,27 +288,12 @@ def ping() { def refresh() { log.debug "Refreshing Values " - def refreshCmds = [] - - if (device.getDataValue("manufacturer") == "SmartThings") { - log.debug "Refreshing Values for manufacturer: SmartThings " - /* These values of Motion Threshold Multiplier(0x01) and Motion Threshold (0x0276) - seem to be giving pretty accurate results for the XYZ co-ordinates for this manufacturer. - Separating these out in a separate if-else because I do not want to touch Centralite part - as of now. - */ - refreshCmds += zigbee.writeAttribute(0xFC02, 0x0000, 0x20, 0x01, [mfgCode: manufacturerCode]) - refreshCmds += zigbee.writeAttribute(0xFC02, 0x0002, 0x21, 0x0276, [mfgCode: manufacturerCode]) - } else { - refreshCmds += zigbee.writeAttribute(0xFC02, 0x0000, 0x20, 0x02, [mfgCode: manufacturerCode]) - } - - //Common refresh commands - refreshCmds += zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + + def refreshCmds = zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) + - zigbee.readAttribute(0xFC02, 0x0010, [mfgCode: manufacturerCode]) + zigbee.readAttribute(0xFC02, 0x0010, [mfgCode: manufacturerCode]) + + zigbee.enrollResponse() - return refreshCmds + zigbee.enrollResponse() + return refreshCmds } def configure() { @@ -406,10 +302,27 @@ def configure() { sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) log.debug "Configuring Reporting" + def configCmds = [] + + if (device.getDataValue("manufacturer") == "SmartThings") { + log.debug "Refreshing Values for manufacturer: SmartThings " + /* These values of Motion Threshold Multiplier(0x01) and Motion Threshold (0x0276) + seem to be giving pretty accurate results for the XYZ co-ordinates for this manufacturer. + Separating these out in a separate if-else because I do not want to touch Centralite part + as of now. + */ + configCmds += zigbee.writeAttribute(0xFC02, 0x0000, 0x20, 0x01, [mfgCode: manufacturerCode]) + configCmds += zigbee.writeAttribute(0xFC02, 0x0002, 0x21, 0x0276, [mfgCode: manufacturerCode]) + } else { + // Write a motion threshold of 2 * .063g = .126g + // Currently due to a Centralite firmware issue, this will cause a read attribute response that + // indicates acceleration even when there isn't. + configCmds += zigbee.writeAttribute(0xFC02, 0x0000, 0x20, 0x02, [mfgCode: manufacturerCode]) + } // temperature minReportTime 30 seconds, maxReportTime 5 min. Reporting interval if no activity // battery minReport 30 seconds, maxReportTime 6 hrs by default - def configCmds = zigbee.batteryConfig() + + configCmds += zigbee.batteryConfig() + zigbee.temperatureConfig(30, 300) + zigbee.configureReporting(0xFC02, 0x0010, DataType.BITMAP8, 10, 3600, 0x01, [mfgCode: manufacturerCode]) + zigbee.configureReporting(0xFC02, 0x0012, DataType.INT16, 1, 3600, 0x0001, [mfgCode: manufacturerCode]) + @@ -459,17 +372,16 @@ def garageEvent(zValue) { def absValue = zValue.abs() def contactValue = null def garageValue = null - if (absValue>900) { + if (absValue > 900) { contactValue = 'closed' garageValue = 'garage-closed' - } - else if (absValue < 100) { + } else if (absValue < 100) { contactValue = 'open' garageValue = 'garage-open' } - if (contactValue != null){ - def descriptionText = contactValue == 'open' ? '{{ device.displayName }} was opened' :'{{ device.displayName }} was closed' - sendEvent(name: 'contact', value: contactValue, descriptionText: descriptionText, displayed:false, translatable: true) + if (contactValue != null) { + def descriptionText = contactValue == 'open' ? '{{ device.displayName }} was opened' : '{{ device.displayName }} was closed' + sendEvent(name: 'contact', value: contactValue, descriptionText: descriptionText, displayed: false, translatable: true) sendEvent(name: 'status', value: garageValue, descriptionText: descriptionText, translatable: true) } } @@ -482,14 +394,14 @@ private Map getXyzResult(results, description) { def isStateChange = isStateChange(device, name, value) [ - name: name, - value: value, - unit: null, - linkText: linkText, - descriptionText: descriptionText, - handlerName: name, - isStateChange: isStateChange, - displayed: false + name : name, + value : value, + unit : null, + linkText : linkText, + descriptionText: descriptionText, + handlerName : name, + isStateChange : isStateChange, + displayed : false ] } @@ -504,25 +416,3 @@ private getManufacturerCode() { private hexToInt(value) { new BigInteger(value, 16) } - -private hex(value) { - new BigInteger(Math.round(value).toString()).toString(16) -} - -private String swapEndianHex(String hex) { - reverseArray(hex.decodeHex()).encodeHex() -} - -private byte[] reverseArray(byte[] array) { - int i = 0; - int j = array.length - 1; - byte tmp; - while (j > i) { - tmp = array[j]; - array[j] = array[i]; - array[i] = tmp; - j--; - i++; - } - return array -} diff --git a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy index c3de34d..294717e 100644 --- a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy +++ b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy @@ -16,7 +16,7 @@ import physicalgraph.zigbee.clusters.iaszone.ZoneStatus metadata { - definition (name: "SmartSense Open/Closed Sensor", namespace: "smartthings", author: "SmartThings") { + definition(name: "SmartSense Open/Closed Sensor", namespace: "smartthings", author: "SmartThings") { capability "Battery" capability "Configuration" capability "Contact Sensor" @@ -43,155 +43,77 @@ metadata { } tiles(scale: 2) { - multiAttributeTile(name:"contact", type: "generic", width: 6, height: 4){ - tileAttribute ("device.contact", key: "PRIMARY_CONTROL") { - attributeState "open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e" - attributeState "closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#79b821" + multiAttributeTile(name: "contact", type: "generic", width: 6, height: 4) { + tileAttribute("device.contact", key: "PRIMARY_CONTROL") { + attributeState "open", label: '${name}', icon: "st.contact.contact.open", backgroundColor: "#ffa81e" + attributeState "closed", label: '${name}', icon: "st.contact.contact.closed", backgroundColor: "#79b821" } } valueTile("temperature", "device.temperature", inactiveLabel: false, width: 2, height: 2) { - state "temperature", label:'${currentValue}°', - backgroundColors:[ - [value: 31, color: "#153591"], - [value: 44, color: "#1e9cbb"], - [value: 59, color: "#90d2a7"], - [value: 74, color: "#44b621"], - [value: 84, color: "#f1d801"], - [value: 95, color: "#d04e00"], - [value: 96, color: "#bc2323"] - ] + state "temperature", label: '${currentValue}°', + backgroundColors: [ + [value: 31, color: "#153591"], + [value: 44, color: "#1e9cbb"], + [value: 59, color: "#90d2a7"], + [value: 74, color: "#44b621"], + [value: 84, color: "#f1d801"], + [value: 95, color: "#d04e00"], + [value: 96, color: "#bc2323"] + ] } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false, width: 2, height: 2) { - state "battery", label:'${currentValue}% battery', unit:"" + state "battery", label: '${currentValue}% battery', unit: "" } standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { - state "default", action:"refresh.refresh", icon:"st.secondary.refresh" + state "default", action: "refresh.refresh", icon: "st.secondary.refresh" } - main (["contact", "temperature"]) - details(["contact","temperature","battery","refresh"]) + main(["contact", "temperature"]) + details(["contact", "temperature", "battery", "refresh"]) } } def parse(String description) { log.debug "description: $description" - Map map = [:] - if (description?.startsWith('catchall:')) { - map = parseCatchAllMessage(description) + Map map = zigbee.getEvent(description) + if (!map) { + if (description?.startsWith('zone status')) { + map = parseIasMessage(description) + } else { + Map descMap = zigbee.parseDescriptionAsMap(description) + if (descMap?.clusterInt == 0x0001 && descMap.commandInt != 0x07 && descMap?.value) { + map = getBatteryResult(Integer.parseInt(descMap.value, 16)) + } else if (descMap?.clusterInt == zigbee.TEMPERATURE_MEASUREMENT_CLUSTER && descMap.commandInt == 0x07) { + if (descMap.data[0] == "00") { + log.debug "TEMP REPORTING CONFIG RESPONSE: $descMap" + sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + } else { + log.warn "TEMP REPORTING CONFIG FAILED- error code: ${descMap.data[0]}" + } + } + } } - else if (description?.startsWith('read attr -')) { - map = parseReportAttributeMessage(description) - } - else if (description?.startsWith('temperature: ')) { - map = parseCustomMessage(description) - } - else if (description?.startsWith('zone status')) { - map = parseIasMessage(description) - } log.debug "Parse returned $map" def result = map ? createEvent(map) : [:] - if (description?.startsWith('enroll request')) { - List cmds = zigbee.enrollResponse() - log.debug "enroll response: ${cmds}" - result = cmds?.collect { new physicalgraph.device.HubAction(it) } - } - return result -} - -private Map parseCatchAllMessage(String description) { - Map resultMap = [:] - def cluster = zigbee.parse(description) - if (shouldProcessMessage(cluster)) { - switch(cluster.clusterId) { - case 0x0001: - // 0x07 - configure reporting - if (cluster.command != 0x07) { - resultMap = getBatteryResult(cluster.data.last()) - } - break - - case 0x0402: - if (cluster.command == 0x07){ - if (cluster.data[0] == 0x00) { - log.debug "TEMP REPORTING CONFIG RESPONSE" + cluster - resultMap = [name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]] - } - else { - log.warn "TEMP REPORTING CONFIG FAILED- error code:${cluster.data[0]}" - } - } - else { - // temp is last 2 data values. reverse to swap endian - String temp = cluster.data[-2..-1].reverse().collect { cluster.hex1(it) }.join() - def value = getTemperature(temp) - resultMap = getTemperatureResult(value) - } - break - } - } - - return resultMap -} - -private boolean shouldProcessMessage(cluster) { - // 0x0B is default response indicating message got through - boolean ignoredMessage = cluster.profileId != 0x0104 || - cluster.command == 0x0B || - (cluster.data.size() > 0 && cluster.data.first() == 0x3e) - return !ignoredMessage -} - -private int getHumidity(value) { - return Math.round(Double.parseDouble(value)) -} - -private Map parseReportAttributeMessage(String description) { - Map descMap = (description - "read attr - ").split(",").inject([:]) { map, param -> - def nameAndValue = param.split(":") - map += [(nameAndValue[0].trim()):nameAndValue[1].trim()] + if (description?.startsWith('enroll request')) { + List cmds = zigbee.enrollResponse() + log.debug "enroll response: ${cmds}" + result = cmds?.collect { new physicalgraph.device.HubAction(it) } } - log.debug "Desc Map: $descMap" - - Map resultMap = [:] - if (descMap.cluster == "0402" && descMap.attrId == "0000") { - def value = getTemperature(descMap.value) - resultMap = getTemperatureResult(value) - } - else if (descMap.cluster == "0001" && descMap.attrId == "0020") { - resultMap = getBatteryResult(Integer.parseInt(descMap.value, 16)) - } - - return resultMap + return result } -private Map parseCustomMessage(String description) { - Map resultMap = [:] - if (description?.startsWith('temperature: ')) { - def value = zigbee.parseHATemperatureValue(description, "temperature: ", getTemperatureScale()) - resultMap = getTemperatureResult(value) - } - return resultMap -} private Map parseIasMessage(String description) { ZoneStatus zs = zigbee.parseZoneStatus(description) return zs.isAlarm1Set() ? getContactResult('open') : getContactResult('closed') } -def getTemperature(value) { - def celsius = Integer.parseInt(value, 16).shortValue() / 100 - if(getTemperatureScale() == "C"){ - return celsius - } else { - return celsiusToFahrenheit(celsius) as Integer - } -} - private Map getBatteryResult(rawValue) { log.debug 'Battery' def linkText = getLinkText(device) @@ -204,8 +126,8 @@ private Map getBatteryResult(rawValue) { def maxVolts = 3.0 def pct = (volts - minVolts) / (maxVolts - minVolts) def roundedPct = Math.round(pct * 100) - if (roundedPct <= 0) - roundedPct = 1 + if (roundedPct <= 0) + roundedPct = 1 result.value = Math.min(100, roundedPct) result.descriptionText = "${linkText} battery was ${result.value}%" result.name = 'battery' @@ -214,31 +136,14 @@ private Map getBatteryResult(rawValue) { return result } -private Map getTemperatureResult(value) { - log.debug 'TEMP' - def linkText = getLinkText(device) - if (tempOffset) { - def offset = tempOffset as int - def v = value as int - value = v + offset - } - def descriptionText = "${linkText} was ${value}°${temperatureScale}" - return [ - name: 'temperature', - value: value, - descriptionText: descriptionText, - unit: temperatureScale - ] -} - private Map getContactResult(value) { log.debug 'Contact Status' def linkText = getLinkText(device) def descriptionText = "${linkText} was ${value == 'open' ? 'opened' : 'closed'}" return [ - name: 'contact', - value: value, - descriptionText: descriptionText + name : 'contact', + value : value, + descriptionText: descriptionText ] } @@ -252,7 +157,7 @@ def ping() { def refresh() { log.debug "Refreshing Temperature and Battery" def refreshCmds = zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + - zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) + zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) return refreshCmds + zigbee.enrollResponse() } @@ -266,5 +171,5 @@ def configure() { // temperature minReportTime 30 seconds, maxReportTime 5 min. Reporting interval if no activity // battery minReport 30 seconds, maxReportTime 6 hrs by default - return refresh() + zigbee.batteryConfig() + zigbee.temperatureConfig(30, 300) // send refresh cmds as part of config + return refresh() + zigbee.batteryConfig() + zigbee.temperatureConfig(30, 300) // send refresh cmds as part of config } diff --git a/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy b/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy index f062957..c0fe4b0 100644 --- a/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy +++ b/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy @@ -16,7 +16,7 @@ import physicalgraph.zigbee.zcl.DataType metadata { - definition (name: "SmartSense Temp/Humidity Sensor",namespace: "smartthings", author: "SmartThings") { + definition(name: "SmartSense Temp/Humidity Sensor", namespace: "smartthings", author: "SmartThings") { capability "Configuration" capability "Battery" capability "Refresh" @@ -33,7 +33,7 @@ metadata { status 'H 45': 'catchall: 0104 FC45 01 01 0140 00 D9B9 00 04 C2DF 0A 01 0000218911' status 'H 57': 'catchall: 0104 FC45 01 01 0140 00 4E55 00 04 C2DF 0A 01 0000211316' status 'H 53': 'catchall: 0104 FC45 01 01 0140 00 20CD 00 04 C2DF 0A 01 0000219814' - status 'H 43': 'read attr - raw: BF7601FC450C00000021A410, dni: BF76, endpoint: 01, cluster: FC45, size: 0C, attrId: 0000, result: success, encoding: 21, value: 10a4' + status 'H 43': 'read attr - raw: BF7601FC450C00000021A410, dni: BF76, endpoint: 01, cluster: FC45, size: 0C, attrId: 0000, result: success, encoding: 21, value: 10a4' } preferences { @@ -42,28 +42,28 @@ metadata { } tiles(scale: 2) { - multiAttributeTile(name:"temperature", type: "generic", width: 6, height: 4){ - tileAttribute ("device.temperature", key: "PRIMARY_CONTROL") { - attributeState "temperature", label:'${currentValue}°', - backgroundColors:[ - [value: 31, color: "#153591"], - [value: 44, color: "#1e9cbb"], - [value: 59, color: "#90d2a7"], - [value: 74, color: "#44b621"], - [value: 84, color: "#f1d801"], - [value: 95, color: "#d04e00"], - [value: 96, color: "#bc2323"] - ] + multiAttributeTile(name: "temperature", type: "generic", width: 6, height: 4) { + tileAttribute("device.temperature", key: "PRIMARY_CONTROL") { + attributeState "temperature", label: '${currentValue}°', + backgroundColors: [ + [value: 31, color: "#153591"], + [value: 44, color: "#1e9cbb"], + [value: 59, color: "#90d2a7"], + [value: 74, color: "#44b621"], + [value: 84, color: "#f1d801"], + [value: 95, color: "#d04e00"], + [value: 96, color: "#bc2323"] + ] } } valueTile("humidity", "device.humidity", inactiveLabel: false, width: 2, height: 2) { - state "humidity", label:'${currentValue}% humidity', unit:"" + state "humidity", label: '${currentValue}% humidity', unit: "" } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false, width: 2, height: 2) { - state "battery", label:'${currentValue}% battery' + state "battery", label: '${currentValue}% battery' } standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { - state "default", action:"refresh.refresh", icon:"st.secondary.refresh" + state "default", action: "refresh.refresh", icon: "st.secondary.refresh" } main "temperature", "humidity" @@ -74,142 +74,31 @@ metadata { def parse(String description) { log.debug "description: $description" - Map map = [:] - if (description?.startsWith('catchall:')) { - map = parseCatchAllMessage(description) - } - else if (description?.startsWith('read attr -')) { - map = parseReportAttributeMessage(description) - } - else if (description?.startsWith('temperature: ') || description?.startsWith('humidity: ')) { - map = parseCustomMessage(description) + // getEvent will handle temperature and humidity + Map map = zigbee.getEvent(description) + if (!map) { + Map descMap = zigbee.parseDescriptionAsMap(description) + if (descMap.clusterInt == 0x0001 && descMap.commandInt != 0x07 && descMap?.value) { + map = getBatteryResult(Integer.parseInt(descMap.value, 16)) + } else if (descMap?.clusterInt == zigbee.TEMPERATURE_MEASUREMENT_CLUSTER && descMap.commandInt == 0x07) { + if (descMap.data[0] == "00") { + log.debug "TEMP REPORTING CONFIG RESPONSE: $descMap" + sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + } else { + log.warn "TEMP REPORTING CONFIG FAILED- error code: ${descMap.data[0]}" + } + } } log.debug "Parse returned $map" return map ? createEvent(map) : [:] } -private Map parseCatchAllMessage(String description) { - Map resultMap = [:] - def cluster = zigbee.parse(description) - if (shouldProcessMessage(cluster)) { - switch(cluster.clusterId) { - case 0x0001: - // 0x07 - configure reporting - if (cluster.command != 0x07) { - resultMap = getBatteryResult(cluster.data.last()) - } - break - - case 0x0402: - if (cluster.command == 0x07) { - if (cluster.data[0] == 0x00){ - log.debug "TEMP REPORTING CONFIG RESPONSE" + cluster - resultMap = [name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]] - } - else { - log.warn "TEMP REPORTING CONFIG FAILED- error code:${cluster.data[0]}" - } - } - else { - // temp is last 2 data values. reverse to swap endian - String temp = cluster.data[-2..-1].reverse().collect { cluster.hex1(it) }.join() - def value = getTemperature(temp) - resultMap = getTemperatureResult(value) - } - break - - case 0xFC45: - // 0x07 - configure reporting - if (cluster.command != 0x07) { - String pctStr = cluster.data[-1, -2].collect { Integer.toHexString(it) }.join('') - String display = Math.round(Integer.valueOf(pctStr, 16) / 100) - resultMap = getHumidityResult(display) - } - break - } - } - - return resultMap -} - -private boolean shouldProcessMessage(cluster) { - // 0x0B is default response indicating message got through - boolean ignoredMessage = cluster.profileId != 0x0104 || - cluster.command == 0x0B || - (cluster.data.size() > 0 && cluster.data.first() == 0x3e) - return !ignoredMessage -} - -private Map parseReportAttributeMessage(String description) { - Map descMap = (description - "read attr - ").split(",").inject([:]) { map, param -> - def nameAndValue = param.split(":") - map += [(nameAndValue[0].trim()):nameAndValue[1].trim()] - } - log.debug "Desc Map: $descMap" - - Map resultMap = [:] - if (descMap.cluster == "0402" && descMap.attrId == "0000") { - def value = getTemperature(descMap.value) - resultMap = getTemperatureResult(value) - } - else if (descMap.cluster == "0001" && descMap.attrId == "0020") { - resultMap = getBatteryResult(Integer.parseInt(descMap.value, 16)) - } - else if (descMap.cluster == "FC45" && descMap.attrId == "0000") { - def value = getReportAttributeHumidity(descMap.value) - resultMap = getHumidityResult(value) - } - - return resultMap -} - -def getReportAttributeHumidity(String value) { - def humidity = null - if (value?.trim()) { - try { - // value is hex with no decimal - def pct = Integer.parseInt(value.trim(), 16) / 100 - humidity = String.format('%.0f', pct) - } catch(NumberFormatException nfe) { - log.debug "Error converting $value to humidity" - } - } - return humidity -} - -private Map parseCustomMessage(String description) { - Map resultMap = [:] - if (description?.startsWith('temperature: ')) { - def value = zigbee.parseHATemperatureValue(description, "temperature: ", getTemperatureScale()) - resultMap = getTemperatureResult(value) - } - else if (description?.startsWith('humidity: ')) { - def pct = (description - "humidity: " - "%").trim() - if (pct.isNumber()) { - def value = Math.round(new BigDecimal(pct)).toString() - resultMap = getHumidityResult(value) - } else { - log.error "invalid humidity: ${pct}" - } - } - return resultMap -} - -def getTemperature(value) { - def celsius = Integer.parseInt(value, 16).shortValue() / 100 - if(getTemperatureScale() == "C"){ - return celsius - } else { - return celsiusToFahrenheit(celsius) as Integer - } -} - private Map getBatteryResult(rawValue) { log.debug 'Battery' def linkText = getLinkText(device) - def result = [:] + def result = [:] def volts = rawValue / 10 if (!(rawValue == 0 || rawValue == 255)) { @@ -228,41 +117,22 @@ private Map getBatteryResult(rawValue) { return result } -private Map getTemperatureResult(value) { - log.debug 'TEMP' - def linkText = getLinkText(device) - if (tempOffset) { - def offset = tempOffset as int - def v = value as int - value = v + offset - } - def descriptionText = "${linkText} was ${value}°${temperatureScale}" - return [ - name: 'temperature', - value: value, - descriptionText: descriptionText, - unit: temperatureScale - ] -} - -private Map getHumidityResult(value) { - log.debug 'Humidity' - return value ? [name: 'humidity', value: value, unit: '%'] : [:] -} - /** * PING is used by Device-Watch in attempt to reach the Device * */ def ping() { - return zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) // Read the Battery Level + return zigbee.readAttribute(0x0001, 0x0020) // Read the Battery Level } -def refresh() -{ +def refresh() { log.debug "refresh temperature, humidity, and battery" - return zigbee.readAttribute(0xFC45, 0x0000, ["mfgCode": 0xC2DF]) + // Original firmware + return zigbee.readAttribute(0xFC45, 0x0000, ["mfgCode": 0x104E]) + // New firmware + zigbee.readAttribute(0xFC45, 0x0000, ["mfgCode": 0xC2DF]) + // Original firmware zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000) + - zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) + zigbee.readAttribute(zigbee.POWER_CONFIGURATION_CLUSTER, 0x0020) + + zigbee.configureReporting(0xFC45, 0x0000, DataType.INT16, 30, 3600, 100) + + zigbee.batteryConfig() + + zigbee.temperatureConfig(30, 300) } def configure() { @@ -271,10 +141,8 @@ def configure() { sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) log.debug "Configuring Reporting and Bindings." - def humidityConfigCmds = zigbee.configureReporting(0xFC45, 0x0000, DataType.INT16, 30, 3600, 0x0064) // temperature minReportTime 30 seconds, maxReportTime 5 min. Reporting interval if no activity // battery minReport 30 seconds, maxReportTime 6 hrs by default - return refresh() + humidityConfigCmds + zigbee.batteryConfig() + zigbee.temperatureConfig(30, 300) // send refresh cmds as part of config + return refresh() } - From 1e02387387c26bf5c31dda2b2791181abeb2bdde Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Wed, 7 Dec 2016 09:42:28 -0600 Subject: [PATCH 028/104] Update to use multi attr parsing in zigbee library With the addition of the ability for parseDescriptionAsMap to hanle the return of multiple read attribute responses, we can be a little more explicit with how we interpret and parse the responses. --- .../smartsense-multi-sensor.groovy | 252 ++++++++---------- 1 file changed, 111 insertions(+), 141 deletions(-) diff --git a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy index 29fdf7c..f9cc7f0 100644 --- a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy +++ b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy @@ -117,14 +117,16 @@ metadata { } def parse(String description) { - Map map = zigbee.getEvent(description) - if (!map) { + def maps = [] + maps << zigbee.getEvent(description) + if (!maps[0]) { + maps = [] if (description?.startsWith('zone status')) { - map = parseIasMessage(description) + maps += parseIasMessage(description) } else { Map descMap = zigbee.parseDescriptionAsMap(description) if (descMap?.clusterInt == 0x0001 && descMap.commandInt != 0x07 && descMap?.value) { - map = getBatteryResult(Integer.parseInt(descMap.value, 16)) + maps << getBatteryResult(Integer.parseInt(descMap.value, 16)) } else if (descMap?.clusterInt == zigbee.TEMPERATURE_MEASUREMENT_CLUSTER && descMap.commandInt == 0x07) { if (descMap.data[0] == "00") { log.debug "TEMP REPORTING CONFIG RESPONSE: $descMap" @@ -133,10 +135,12 @@ def parse(String description) { log.warn "TEMP REPORTING CONFIG FAILED- error code: ${descMap.data[0]}" } } else { - map = handleAcceleration(descMap) + + maps += handleAcceleration(descMap) } } - } else if (map.name == "temperature") { + } else if (maps[0].name == "temperature") { + def map = maps[0] if (tempOffset) { map.value = (int) map.value + (int) tempOffset } @@ -144,8 +148,11 @@ def parse(String description) { map.translatable = true } - def result = map ? createEvent(map) : [:] - + def result = maps.inject([]) {acc, it -> + if (it) { + acc << createEvent(it) + } + } if (description?.startsWith('enroll request')) { List cmds = zigbee.enrollResponse() log.debug "enroll response: ${cmds}" @@ -154,59 +161,81 @@ def parse(String description) { return result } -private Map handleAcceleration(descMap) { - Map result = [:] +private List handleAcceleration(descMap) { + def result = [] if (descMap.clusterInt == 0xFC02 && descMap.attrInt == 0x0010) { - if (descMap.value.size() == 32) { - // value will look like 00ae29001403e2290013001629001201 - // breaking this apart and swapping byte order where appropriate, this breaks down to: - // X (0x0012) = 0x0016 - // Y (0x0013) = 0x03E2 - // Z (0x0014) = 0x00AE - // note that there is a known bug in that the x,y,z attributes are interpreted in the wrong order - // this will be fixed in a future update - def threeAxisAttributes = descMap.value[0..-9] - result << parseAxis(threeAxisAttributes) - descMap.value = descMap.value[-2..-1] + def value = descMap.value == "01" ? "active" : "inactive" + log.debug "Acceleration $value" + result << [ + name : "acceleration", + value : value, + descriptionText: "{{ device.displayName }} was $value", + isStateChange : isStateChange(device, "acceleration", value), + translatable : true + ] + + if (descMap.additionalAttrs) { + result += parseAxis(descMap.additionalAttrs) } - result = getAccelerationResult(descMap.value) - } else if (descMap.clusterInt == 0xFC02 && descMap.attrInt == 0x0012 && descMap.value.size() == 24) { - // The size is checked to ensure the attribute report contains X, Y and Z values - // If all three axis are not included then the attribute report is ignored - result = parseAxis(descMap.value) + } else if (descMap.clusterInt == 0xFC02 && descMap.attrInt == 0x0012) { + def addAttrs = descMap.additionalAttrs + addAttrs << ["attrInt": descMap.attrInt, "value": descMap.value] + result += parseAxis(addAttrs) } return result } -private Map parseIasMessage(String description) { - ZoneStatus zs = zigbee.parseZoneStatus(description) - Map resultMap = [:] +private List parseAxis(List attrData) { + def results = [] + def x = hexToSignedInt(attrData.find { it.attrInt == 0x0012 }?.value) + def y = hexToSignedInt(attrData.find { it.attrInt == 0x0013 }?.value) + def z = hexToSignedInt(attrData.find { it.attrInt == 0x0014 }?.value) - if (garageSensor != "Yes") { - resultMap = zs.isAlarm1Set() ? getContactResult('open') : getContactResult('closed') + def xyzResults = [:] + if (device.getDataValue("manufacturer") == "SmartThings") { + // This mapping matches the current behavior of the Device Handler for the Centralite sensors + xyzResults.x = z + xyzResults.y = y + xyzResults.z = -x + } else { + // The axises reported by the Device Handler differ from the axises reported by the sensor + // This may change in the future + xyzResults.x = z + xyzResults.y = x + xyzResults.z = y } - return resultMap + log.debug "parseAxis -- ${xyzResults}" + + if (garageSensor == "Yes") + results += garageEvent(xyzResults.z) + + def value = "${xyzResults.x},${xyzResults.y},${xyzResults.z}" + results << [ + name : "threeAxis", + value : value, + linkText : getLinkText(device), + descriptionText: "${getLinkText(device)} was ${value}", + handlerName : name, + isStateChange : isStateChange(device, "threeAxis", value), + displayed : false + ] + results } -def updated() { - log.debug "updated called" - log.info "garage value : $garageSensor" - if (garageSensor == "Yes") { - def descriptionText = "Updating device to garage sensor" - if (device.latestValue("status") == "open") { - sendEvent(name: 'status', value: 'garage-open', descriptionText: descriptionText, translatable: true) - } else if (device.latestValue("status") == "closed") { - sendEvent(name: 'status', value: 'garage-closed', descriptionText: descriptionText, translatable: true) - } - } else { - def descriptionText = "Updating device to open/close sensor" - if (device.latestValue("status") == "garage-open") { - sendEvent(name: 'status', value: 'open', descriptionText: descriptionText, translatable: true) - } else if (device.latestValue("status") == "garage-closed") { - sendEvent(name: 'status', value: 'closed', descriptionText: descriptionText, translatable: true) - } +private List parseIasMessage(String description) { + ZoneStatus zs = zigbee.parseZoneStatus(description) + List results = [] + + if (garageSensor != "Yes") { + def value = zs.isAlarm1Set() ? 'open' : 'closed' + log.debug "Contact: ${device.displayName} value = ${value}" + def descriptionText = value == 'open' ? '{{ device.displayName }} was opened' : '{{ device.displayName }} was closed' + results << [name: 'contact', value: value, descriptionText: descriptionText, displayed: false, translatable: true] + results << [name: 'status', value: value, descriptionText: descriptionText, translatable: true] } + + return results } private Map getBatteryResult(rawValue) { @@ -247,35 +276,24 @@ private Map getBatteryResult(rawValue) { return result } -private Map getContactResult(value) { - log.debug "Contact: ${device.displayName} value = ${value}" - def descriptionText = value == 'open' ? '{{ device.displayName }} was opened' : '{{ device.displayName }} was closed' - sendEvent(name: 'contact', value: value, descriptionText: descriptionText, displayed: false, translatable: true) - return [name: 'status', value: value, descriptionText: descriptionText, translatable: true] -} - -private getAccelerationResult(numValue) { - log.debug "Acceleration" - def name = "acceleration" - def value - def descriptionText - - if (numValue.endsWith("1")) { - value = "active" - descriptionText = '{{ device.displayName }} was active' - } else { - value = "inactive" - descriptionText = '{{ device.displayName }} was inactive' +List garageEvent(zValue) { + List results = [] + def absValue = zValue.abs() + def contactValue = null + def garageValue = null + if (absValue > 900) { + contactValue = 'closed' + garageValue = 'garage-closed' + } else if (absValue < 100) { + contactValue = 'open' + garageValue = 'garage-open' } - - def isStateChange = isStateChange(device, name, value) - return [ - name : name, - value : value, - descriptionText: descriptionText, - isStateChange : isStateChange, - translatable : true - ] + if (contactValue != null) { + def descriptionText = contactValue == 'open' ? '{{ device.displayName }} was opened' : '{{ device.displayName }} was closed' + results << [name: 'contact', value: contactValue, descriptionText: descriptionText, displayed: false, translatable: true] + results << [name: 'status', value: garageValue, descriptionText: descriptionText, translatable: true] + } + results } /** @@ -332,35 +350,24 @@ def configure() { return refresh() + configCmds } -private getEndpointId() { - new BigInteger(device.endpointId, 16).toString() -} - -private Map parseAxis(String description) { - def z = hexToSignedInt(description[0..3]) - def y = hexToSignedInt(description[10..13]) - def x = hexToSignedInt(description[20..23]) - def xyzResults = [x: x, y: y, z: z] - - if (device.getDataValue("manufacturer") == "SmartThings") { - // This mapping matches the current behavior of the Device Handler for the Centralite sensors - xyzResults.x = z - xyzResults.y = y - xyzResults.z = -x +def updated() { + log.debug "updated called" + log.info "garage value : $garageSensor" + if (garageSensor == "Yes") { + def descriptionText = "Updating device to garage sensor" + if (device.latestValue("status") == "open") { + sendEvent(name: 'status', value: 'garage-open', descriptionText: descriptionText, translatable: true) + } else if (device.latestValue("status") == "closed") { + sendEvent(name: 'status', value: 'garage-closed', descriptionText: descriptionText, translatable: true) + } } else { - // The axises reported by the Device Handler differ from the axises reported by the sensor - // This may change in the future - xyzResults.x = z - xyzResults.y = x - xyzResults.z = y + def descriptionText = "Updating device to open/close sensor" + if (device.latestValue("status") == "garage-open") { + sendEvent(name: 'status', value: 'open', descriptionText: descriptionText, translatable: true) + } else if (device.latestValue("status") == "garage-closed") { + sendEvent(name: 'status', value: 'closed', descriptionText: descriptionText, translatable: true) + } } - - log.debug "parseAxis -- ${xyzResults}" - - if (garageSensor == "Yes") - garageEvent(xyzResults.z) - - getXyzResult(xyzResults, description) } private hexToSignedInt(hexVal) { @@ -368,43 +375,6 @@ private hexToSignedInt(hexVal) { unsignedVal > 32767 ? unsignedVal - 65536 : unsignedVal } -def garageEvent(zValue) { - def absValue = zValue.abs() - def contactValue = null - def garageValue = null - if (absValue > 900) { - contactValue = 'closed' - garageValue = 'garage-closed' - } else if (absValue < 100) { - contactValue = 'open' - garageValue = 'garage-open' - } - if (contactValue != null) { - def descriptionText = contactValue == 'open' ? '{{ device.displayName }} was opened' : '{{ device.displayName }} was closed' - sendEvent(name: 'contact', value: contactValue, descriptionText: descriptionText, displayed: false, translatable: true) - sendEvent(name: 'status', value: garageValue, descriptionText: descriptionText, translatable: true) - } -} - -private Map getXyzResult(results, description) { - def name = "threeAxis" - def value = "${results.x},${results.y},${results.z}" - def linkText = getLinkText(device) - def descriptionText = "$linkText was $value" - def isStateChange = isStateChange(device, name, value) - - [ - name : name, - value : value, - unit : null, - linkText : linkText, - descriptionText: descriptionText, - handlerName : name, - isStateChange : isStateChange, - displayed : false - ] -} - private getManufacturerCode() { if (device.getDataValue("manufacturer") == "SmartThings") { return "0x110A" From d8c89f6c6a785da874841c1f641c1e040943c280 Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Thu, 2 Feb 2017 18:10:34 -0800 Subject: [PATCH 029/104] DVCSMP-2391 Iris 4 button device mapping to button 1 only --- .../zigbee-button.src/zigbee-button.groovy | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy b/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy index 311c659..97948d1 100644 --- a/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy +++ b/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy @@ -118,8 +118,7 @@ private Map getBatteryResult(rawValue) { private Map parseNonIasButtonMessage(Map descMap){ def buttonState = "" def buttonNumber = 0 - if (((device.getDataValue("model") == "3460-L") || (device.getDataValue("model") == "3450-L")) - &&(descMap.clusterInt == 0x0006)) { + if ((device.getDataValue("model") == "3460-L") &&(descMap.clusterInt == 0x0006)) { if (descMap.command == "01") { getButtonResult("press") } @@ -127,6 +126,35 @@ private Map parseNonIasButtonMessage(Map descMap){ getButtonResult("release") } } + else if ((device.getDataValue("model") == "3450-L") && (descMap.clusterInt == 0x0006)) { + log.info "For 3450-L" + log.trace "descMap : $descMap" + if (descMap.command == "01") { + getButtonResult("press") + } + else if (descMap.command == "00") { + def button = 1 + switch(descMap.sourceEndpoint) { + case "01": + button = 4 + break + case "02": + button = 3 + break + case "03": + button = 1 + break + case "04": + button = 2 + break + default: + button = 1 + break + } + + getButtonResult("release", button) + } + } else if (descMap.clusterInt == 0x0006) { buttonState = "pushed" if (descMap.command == "01") { From 8e6d009d676c9c2dc10e59fd56df6a977d5b6da6 Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Thu, 2 Feb 2017 18:52:23 -0800 Subject: [PATCH 030/104] changes suggested by Tom and Zach --- .../zigbee-button.src/zigbee-button.groovy | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy b/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy index 97948d1..47dd320 100644 --- a/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy +++ b/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy @@ -119,36 +119,31 @@ private Map parseNonIasButtonMessage(Map descMap){ def buttonState = "" def buttonNumber = 0 if ((device.getDataValue("model") == "3460-L") &&(descMap.clusterInt == 0x0006)) { - if (descMap.command == "01") { + if (descMap.commandInt == 1) { getButtonResult("press") } - else if (descMap.command == "00") { + else if (descMap.commandInt == 0) { getButtonResult("release") } } else if ((device.getDataValue("model") == "3450-L") && (descMap.clusterInt == 0x0006)) { - log.info "For 3450-L" - log.trace "descMap : $descMap" - if (descMap.command == "01") { + if (descMap.commandInt == 1) { getButtonResult("press") } - else if (descMap.command == "00") { - def button = 1 + else if (descMap.commandInt == 0) { + def button = 1 switch(descMap.sourceEndpoint) { - case "01": - button = 4 + case "01": + button = 4 break case "02": - button = 3 + button = 3 break case "03": - button = 1 + button = 1 break case "04": - button = 2 - break - default: - button = 1 + button = 2 break } From 54a4620c9bc1ff0318a0c398a9c35e346e9a6b40 Mon Sep 17 00:00:00 2001 From: Donald Kirker Date: Thu, 2 Feb 2017 22:00:49 -0800 Subject: [PATCH 031/104] DEVC-488 Add fingerprint for DL15S In-wall Switch --- devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy b/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy index 5b66e83..34192de 100644 --- a/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy +++ b/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy @@ -23,6 +23,7 @@ metadata { fingerprint profileId: "0104", inClusters: "0000, 0003, 0006", outClusters: "0003, 0006, 0019, 0406", manufacturer: "Leviton", model: "ZSS-10", deviceJoinName: "Leviton Switch" fingerprint profileId: "0104", inClusters: "0000, 0003, 0006", outClusters: "000A", manufacturer: "HAI", model: "65A21-1", deviceJoinName: "Leviton Wireless Load Control Module-30amp" fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL15A", deviceJoinName: "Leviton Lumina RF Plug-In Appliance Module" + fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL15S", deviceJoinName: "Leviton Lumina RF Switch" } // simulator metadata From 2d3fa22e0767302d22dd877b894192637d6482ad Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Fri, 3 Feb 2017 16:22:56 +0530 Subject: [PATCH 032/104] [CHANGE-839] Adding New Capabilities (Light & Outlet) to the DTHs --- devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy | 1 + .../smartthings/smartpower-outlet.src/smartpower-outlet.groovy | 2 ++ .../smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy | 1 + .../zigbee-white-color-temperature-bulb.groovy | 1 + 4 files changed, 5 insertions(+) diff --git a/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy b/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy index 58a8184..1fc593f 100644 --- a/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy +++ b/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy @@ -23,6 +23,7 @@ metadata { capability "Switch" capability "Switch Level" capability "Health Check" + capability "Light" fingerprint profileId: "C05E", inClusters: "0000,0003,0004,0005,0006,0008,1000", outClusters: "0000,0019" } diff --git a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy index 6a42ae9..7561c63 100644 --- a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy +++ b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy @@ -23,6 +23,8 @@ metadata { capability "Refresh" capability "Sensor" capability "Health Check" + capability "Light" + capability "Outlet" fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3200", deviceJoinName: "Outlet" fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3200-Sgb", deviceJoinName: "Outlet" 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 5eb78e4..2c18873 100644 --- a/devicetypes/smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy +++ b/devicetypes/smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy @@ -29,6 +29,7 @@ metadata { capability "Switch" capability "Switch Level" capability "Health Check" + capability "Light" attribute "colorName", "string" command "setGenericName" 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 d6e69e1..c2ea818 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 @@ -26,6 +26,7 @@ metadata { capability "Refresh" capability "Switch" capability "Switch Level" + capability "Light" attribute "colorName", "string" command "setGenericName" From f164b8832ca88ae819505723a134dc5b7326ea7e Mon Sep 17 00:00:00 2001 From: "sushant.k1" Date: Fri, 3 Feb 2017 16:33:30 +0530 Subject: [PATCH 033/104] [CHANGE-840] Added new capabilities for following DTHs: 1. Dimmer Switch 2. Zigbee RGB Bulb 3. Zigbee Dimmer --- devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy | 1 + devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy | 1 + .../smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy | 1 + 3 files changed, 3 insertions(+) diff --git a/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy b/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy index b0852c6..dadd3f1 100644 --- a/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy +++ b/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy @@ -21,6 +21,7 @@ metadata { capability "Refresh" capability "Sensor" capability "Health Check" + capability "Light" fingerprint mfr:"0063", prod:"4457", deviceJoinName: "GE In-Wall Smart Dimmer " fingerprint mfr:"0063", prod:"4944", deviceJoinName: "GE In-Wall Smart Dimmer " diff --git a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy index 7a4cc2a..e893932 100644 --- a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy +++ b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy @@ -20,6 +20,7 @@ metadata { capability "Switch" capability "Switch Level" capability "Health Check" + capability "Light" fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008" diff --git a/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy b/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy index 842638b..0698ddf 100644 --- a/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy +++ b/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy @@ -28,6 +28,7 @@ metadata { capability "Switch" capability "Switch Level" capability "Health Check" + capability "Light" fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0008,0300,0B04,FC0F", outClusters: "0019", manufacturer: "OSRAM", model: "Gardenspot RGB", deviceJoinName: "SYLVANIA Smart Gardenspot mini RGB" fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0008,0300,0B04,FC0F", outClusters: "0019", manufacturer: "OSRAM", model: "LIGHTIFY Gardenspot RGB", deviceJoinName: "SYLVANIA Smart Gardenspot mini RGB" From 1800ea2bad1eae686290f51255ed58b7b89fc1fb Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Fri, 3 Feb 2017 11:55:45 -0600 Subject: [PATCH 034/104] Manually call on with setLevel This is to work around misbehaving devices that don't properly honor the move to level with on off command. This resolves: https://smartthings.atlassian.net/browse/DPROT-238 --- .../zigbee-dimmer-power.src/zigbee-dimmer-power.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy index 4bef6a9..2b34df5 100644 --- a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy +++ b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy @@ -97,7 +97,7 @@ def on() { } def setLevel(value) { - zigbee.setLevel(value) + zigbee.setLevel(value) + (value?.ToInteger() > 0 ? zigbee.on() : []) } /** From 16d7da81f12a57ffa79ebc6e38f8d130a7cbaf08 Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Thu, 1 Dec 2016 09:03:45 -0600 Subject: [PATCH 035/104] Remove calls to ZoneType19 methods We want to move toward the deprecation of these methods, and it starts with the removal of calls to those methods from our DTHs. This relates to: https://smartthings.atlassian.net/browse/DPROT-167 --- .../open-closed-sensor.groovy | 13 +++++-------- .../smartsense-garage-door-multi.groovy | 2 +- .../smartsense-garage-door-sensor-button.groovy | 2 +- .../smartsense-motion.groovy | 16 ++++++---------- .../smartsense-multi.src/smartsense-multi.groovy | 9 ++------- .../smartsense-virtual-open-closed.groovy | 2 +- 6 files changed, 16 insertions(+), 28 deletions(-) diff --git a/devicetypes/smartthings/open-closed-sensor.src/open-closed-sensor.groovy b/devicetypes/smartthings/open-closed-sensor.src/open-closed-sensor.groovy index d05a565..6c2e42e 100644 --- a/devicetypes/smartthings/open-closed-sensor.src/open-closed-sensor.groovy +++ b/devicetypes/smartthings/open-closed-sensor.src/open-closed-sensor.groovy @@ -40,14 +40,11 @@ metadata { // Parse incoming device messages to generate events def parse(String description) { - def name = null - def value = description - if (zigbee.isZoneType19(description)) { - name = "contact" - value = zigbee.translateStatusZoneType19(description) ? "open" : "closed" + def resMap + if (description.startsWith("zone")) { + resMap = createEvent(name: "contact", value: zigbee.parseZoneStatus(description).isAlarm1Set() ? "open" : "closed") } - def result = createEvent(name: name, value: value) - log.debug "Parse returned ${result?.descriptionText}" - return result + log.debug "Parse returned $resMap" + return resMap } diff --git a/devicetypes/smartthings/smartsense-garage-door-multi.src/smartsense-garage-door-multi.groovy b/devicetypes/smartthings/smartsense-garage-door-multi.src/smartsense-garage-door-multi.groovy index 8454b9c..7cf58bf 100644 --- a/devicetypes/smartthings/smartsense-garage-door-multi.src/smartsense-garage-door-multi.groovy +++ b/devicetypes/smartthings/smartsense-garage-door-multi.src/smartsense-garage-door-multi.groovy @@ -88,7 +88,7 @@ def parse(String description) { log.debug "parse($description)" def results = [:] - if (!isSupportedDescription(description) || zigbee.isZoneType19(description)) { + if (!isSupportedDescription(description) || description.startsWith("zone")) { // Ignore this in favor of orientation-based state // results = parseSingleMessage(description) } diff --git a/devicetypes/smartthings/smartsense-garage-door-sensor-button.src/smartsense-garage-door-sensor-button.groovy b/devicetypes/smartthings/smartsense-garage-door-sensor-button.src/smartsense-garage-door-sensor-button.groovy index f3ae158..1a2345c 100644 --- a/devicetypes/smartthings/smartsense-garage-door-sensor-button.src/smartsense-garage-door-sensor-button.groovy +++ b/devicetypes/smartthings/smartsense-garage-door-sensor-button.src/smartsense-garage-door-sensor-button.groovy @@ -117,7 +117,7 @@ def parse(String description) { log.debug "parse($description)" def results = null - if (!isSupportedDescription(description) || zigbee.isZoneType19(description)) { + if (!isSupportedDescription(description) || description.startsWith("zone")) { // Ignore this in favor of orientation-based state // results = parseSingleMessage(description) } diff --git a/devicetypes/smartthings/smartsense-motion.src/smartsense-motion.groovy b/devicetypes/smartthings/smartsense-motion.src/smartsense-motion.groovy index 5d60112..bfcefb7 100644 --- a/devicetypes/smartthings/smartsense-motion.src/smartsense-motion.groovy +++ b/devicetypes/smartthings/smartsense-motion.src/smartsense-motion.groovy @@ -45,7 +45,7 @@ metadata { def parse(String description) { def results = [:] - if (isZoneType19(description) || !isSupportedDescription(description)) { + if (description.startsWith("zone") || !isSupportedDescription(description)) { results = parseBasicMessage(description) } else if (isMotionStatusMessage(description)){ @@ -87,16 +87,12 @@ private String parseName(String description) { } private String parseValue(String description) { - if (isZoneType19(description)) { - if (translateStatusZoneType19(description)) { - return "active" - } - else { - return "inactive" - } + def zs = zigbee.parseZoneStatus(description) + if (zs) { + zs.isAlarm1Set() ? "active" : "inactive" + } else { + description } - - description } private parseDescriptionText(String linkText, String value, String description) { diff --git a/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy b/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy index 17f5ddd..5adabde 100644 --- a/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy +++ b/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy @@ -86,7 +86,7 @@ metadata { def parse(String description) { def results - if (!isSupportedDescription(description) || zigbee.isZoneType19(description)) { + if (!isSupportedDescription(description) || description.startsWith("zone")) { results = parseSingleMessage(description) } else if (description == 'updated') { @@ -488,12 +488,7 @@ private String parseValue(String description) { if (!isSupportedDescription(description)) { return description } - else if (zigbee.translateStatusZoneType19(description)) { - return "open" - } - else { - return "closed" - } + return zigbee.parseZoneStatus(description)?.isAlarm1Set() ? "open" : "closed" } private parseDescriptionText(String linkText, String value, String description) { diff --git a/devicetypes/smartthings/smartsense-virtual-open-closed.src/smartsense-virtual-open-closed.groovy b/devicetypes/smartthings/smartsense-virtual-open-closed.src/smartsense-virtual-open-closed.groovy index 0d4d137..5795f3e 100644 --- a/devicetypes/smartthings/smartsense-virtual-open-closed.src/smartsense-virtual-open-closed.groovy +++ b/devicetypes/smartthings/smartsense-virtual-open-closed.src/smartsense-virtual-open-closed.groovy @@ -96,7 +96,7 @@ metadata { def parse(String description) { def results - if (!isSupportedDescription(description) || zigbee.isZoneType19(description)) { + if (!isSupportedDescription(description) || description.startsWith("zone")) { // Ignore this in favor of orientation-based state // results = parseSingleMessage(description) } From e019d22affda69ea36659278f0097e1814460f15 Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Fri, 3 Feb 2017 16:22:20 -0600 Subject: [PATCH 036/104] Fix typo on toInteger zigbee dimmer power This relates to: https://smartthings.atlassian.net/browse/DPROT-238 --- .../zigbee-dimmer-power.src/zigbee-dimmer-power.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy index 2b34df5..a781e77 100644 --- a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy +++ b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy @@ -97,7 +97,7 @@ def on() { } def setLevel(value) { - zigbee.setLevel(value) + (value?.ToInteger() > 0 ? zigbee.on() : []) + zigbee.setLevel(value) + (value?.toInteger() > 0 ? zigbee.on() : []) } /** From 3905d482350d46da1bfbecd806e849b0032c9ba2 Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Mon, 6 Feb 2017 12:31:23 -0700 Subject: [PATCH 037/104] DVCSMP-2395 Update OpenT2T with bugfixes --- .../opent2t-smartapp-test.groovy | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy b/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy index d9e731a..9951cfa 100644 --- a/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy +++ b/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy @@ -51,7 +51,7 @@ definition( //Device Inputs preferences { - section("Allow to control these things...") { + section("Allow OpenT2T to control these things...") { input "contactSensors", "capability.contactSensor", title: "Which Contact Sensors", multiple: true, required: false input "garageDoors", "capability.garageDoorControl", title: "Which Garage Doors?", multiple: true, required: false input "locks", "capability.lock", title: "Which Locks?", multiple: true, required: false @@ -329,34 +329,38 @@ private getDeviceType(device) { switch (it.name.toLowerCase()) { case "switch": deviceType = "switch" - break - case "switch level": - deviceType = "light" + if (caps.any { it.name.toLowerCase() == "power meter" }) { + return deviceType + } + if (caps.any { it.name.toLowerCase() == "switch level" }) { + deviceType = "light" + return deviceType + } break case "contact sensor": deviceType = "contactSensor" - break + return deviceType case "garageDoorControl": deviceType = "garageDoor" - break + return deviceType case "lock": deviceType = "lock" - break + return deviceType case "video camera": deviceType = "camera" - break + return deviceType case "motion sensor": deviceType = "motionSensor" - break + return deviceType case "presence sensor": deviceType = "presenceSensor" - break + return deviceType case "thermostat": deviceType = "thermostat" - break + return deviceType case "water sensor": deviceType = "waterSensor" - break + return deviceType default: break } From bf491270a942b762b301e25b13cbce8c9c0fbc0b Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Tue, 7 Feb 2017 11:50:58 -0600 Subject: [PATCH 038/104] Properly handle setLevel for zigbee-dimmer This works around a few devices that use this DTH that do not properly handle the setLevel command. This resolves: https://smartthings.atlassian.net/browse/DPROT-242 --- .../zigbee-dimmer.src/zigbee-dimmer.groovy | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy index 7a4cc2a..bdaedf7 100644 --- a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy +++ b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy @@ -93,7 +93,13 @@ def on() { } def setLevel(value) { - zigbee.setLevel(value) + def additionalCmds = [] + if (device.getDataValue("model") == "iQBR30" && value.toInteger() > 0) { // Handle iQ bulb not following spec + additionalCmds = zigbee.on() + } else if (device.getDataValue("manufacturer") == "MRVL") { // Handle marvel stack not reporting + additionalCmds = refresh() + } + zigbee.setLevel(value) + additionalCmds } /** * PING is used by Device-Watch in attempt to reach the Device @@ -103,7 +109,7 @@ def ping() { } def refresh() { - zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.onOffConfig(0, 300) + zigbee.levelConfig() + zigbee.onOffRefresh() + zigbee.levelRefresh() } def configure() { @@ -113,5 +119,5 @@ def configure() { sendEvent(name: "checkInterval", value: 2 * 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() + refresh() + zigbee.onOffConfig(0, 300) + zigbee.levelConfig() } From cfdc61d72a23572e752b6da47719e01c23766789 Mon Sep 17 00:00:00 2001 From: Juan Pablo Risso Date: Tue, 7 Feb 2017 14:11:38 -0600 Subject: [PATCH 039/104] DVCSMP-2290 - Ecobee Localization (#1628) Split Files Updated --- .../ecobee-connect.src/ecobee-connect.groovy | 5 ++++- .../ecobee-connect.src/i18n/ar.properties | 17 +++++++++++++++++ .../ecobee-connect.src/i18n/th.properties | 17 +++++++++++++++++ .../ecobee-connect.src/i18n/tr.properties | 17 +++++++++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/ar.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/th.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/tr.properties diff --git a/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy b/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy index 9b4c178..ec1d725 100644 --- a/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy +++ b/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy @@ -20,6 +20,9 @@ * JLH - 02-15-2014 - Fuller use of ecobee API * 10-28-2015 DVCSMP-604 - accessory sensor, DVCSMP-1174, DVCSMP-1111 - not respond to routines */ + +include 'localization' + definition( name: "Ecobee (Connect)", namespace: "smartthings", @@ -86,7 +89,7 @@ def authPage() { if (numFound > 0) { section("") { paragraph "Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings." - input(name: "ecobeesensors", title:"Select Ecobee Sensors (${numFound} found)", type: "enum", required:false, description: "Tap to choose", multiple:true, options:options) + input(name: "ecobeesensors", title: "Select Ecobee Sensors ({{numFound}} found)", messageArgs: [numFound: numFound], type: "enum", required:false, description: "Tap to choose", multiple:true, options:options) } } } diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/ar.properties b/smartapps/smartthings/ecobee-connect.src/i18n/ar.properties new file mode 100644 index 0000000..9bee45b --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/ar.properties @@ -0,0 +1,17 @@ +'''Connect your Ecobee thermostat to SmartThings.'''.ar=قم بتوصيل ثرموستات Ecobee بـ SmartThings. +'''You are connected.'''.ar=أنت متصل. +'''Click to enter Ecobee Credentials'''.ar=النقر لإدخال بيانات اعتماد Ecobee +'''Login'''.ar=تسجيل الدخول +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''.ar=انقر أدناه لتسجيل الدخول إلى خدمة ecobee والمصادقة على الوصول إلى SmartThings. تأكد من التمرير للأسفل على الصفحة ٢ والضغط على زر ”السماح“. +'''Select Your Thermostats'''.ar=تحديد الثرموستات +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''.ar=انقر أدناه لرؤية قائمة أجهزة ثرموستات ecobee المتوفرة في حساب ecobee، وحدد الأجهزة التي ترغب في توصيلها بـ SmartThings. +'''Tap to choose'''.ar=النقر لاختيار +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''.ar=انقر أدناه لرؤية قائمة مستشعرات ecobee المتوفرة في حساب ecobee، وحدد الأجهزة التي ترغب في توصيلها بـ SmartThings. +'''Select Ecobee Sensors ({{numFound}} found)'''.ar=تحديد مستشعرات Ecobee‏ ‎({{numFound}} found)‎ +'''Your ecobee Account is now connected to SmartThings!'''.ar=حساب ecobee متصل الآن بـ SmartThings! +'''Click 'Done' to finish setup.'''.ar=انقر فوق ”تم“ لإنهاء الإعداد. +'''The connection could not be established!'''.ar=يتعذر إنشاء الاتصال! +'''Click 'Done' to return to the menu.'''.ar=انقر فوق ”تم“ للعودة إلى القائمة. +'''{{deviceName}} is connected to SmartThings'''.ar={{deviceName}} متصل بـ SmartThings +'''{{deviceName}} is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''.ar=تم قطع اتصال {{deviceName}} بـ SmartThings، لأن بيانات اعتماد الوصول قد تغيرت أو فُقدت. يُرجى الانتقال إلى التطبيق الذكي Ecobee (Connect)‎ وإعادة إدخال بيانات اعتماد تسجيل الدخول إلى حسابك. +'''Your Ecobee thermostat'''.ar=ثرموستات Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/th.properties b/smartapps/smartthings/ecobee-connect.src/i18n/th.properties new file mode 100644 index 0000000..4d1318c --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/th.properties @@ -0,0 +1,17 @@ +'''Connect your Ecobee thermostat to SmartThings.'''.th=เชื่อมต่อตัวควบคุมอุณหภูมิ Ecobee ของคุณเข้ากับ SmartThings +'''You are connected.'''.th=คุณได้เชื่อมต่อแล้ว +'''Click to enter Ecobee Credentials'''.th=คลิกเพื่อใส่ ข้อมูลยืนยันตัวตน Ecobee +'''Login'''.th=เข้าสู่ระบบ +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''.th=แตะด้านล่างเพื่อเข้าสู่บริการ Ecobee และอนุญาตการเข้าถึงของ SmartThings ดูให้แน่ใจว่าได้เลื่อนลงมาที่หน้า 2 แล้วกดปุ่ม 'อนุญาต' +'''Select Your Thermostats'''.th=เลือกตัวควบคุมอุณหภูมิของคุณ +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''.th=แตะที่ด้านล่างเพื่อดูรายการตัวควบคุมอุณหภูมิ Ecobee ที่มีอยู่ในบัญชีผู้ใช้ Ecobee ของคุณ และเลือกตัวควบคุมอุณหภูมิที่คุณต้องการจะเชื่อมต่อกับ SmartThings +'''Tap to choose'''.th=แตะเพื่อเลือก +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''.th=แตะที่ด้านล่างเพื่อดูรายการเซ็นเซอร์ Ecobee ที่มีอยู่ในบัญชีผู้ใช้ Ecobee ของคุณ และเลือกเซ็นเซอร์ที่คุณต้องการจะเชื่อมต่อกับ SmartThings +'''Select Ecobee Sensors ({{numFound} found)'''.th=เลือกเซ็นเซอร์ Ecobee ({{numFound}} found) +'''Your ecobee Account is now connected to SmartThings!'''.th=ตอนนี้บัญชีผู้ใช้ Ecobee ของคุณเชื่อมต่อกับ SmartThings แล้ว +'''Click 'Done' to finish setup.'''.th=คลิก 'เสร็จสิ้น' เพื่อทำการตั้งค่าให้เสร็จสิ้น +'''The connection could not be established!'''.th=ไม่สามารถสร้างการเชื่อมต่อได้! +'''Click 'Done' to return to the menu.'''.th=คลิก 'เสร็จสิ้น' เพื่อกลับไปยังเมนู +'''{{deviceName}} is connected to SmartThings'''.th={{deviceName}} เชื่อมต่อกับ SmartThings แล้ว +'''{{deviceName}} is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''.th={{deviceName}} ถูกตัดการเชื่อมต่อจาก SmartThings เนื่องจากข้อมูลการเข้าถึงถูกเปลี่ยนแปลงหรือหายไป กรุณาไปที่ Ecobee (การเชื่อมต่อ) SmartApp และใส่ข้อมูลยืนยันตัวตนการเข้าสู่บัญชีผู้ใช้ของคุณอีกครั้ง +'''Your Ecobee thermostat'''.th=ตัวควบคุมอุณหภูมิ Ecobee ของคุณ diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/tr.properties b/smartapps/smartthings/ecobee-connect.src/i18n/tr.properties new file mode 100644 index 0000000..fb14485 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/tr.properties @@ -0,0 +1,17 @@ +'''Connect your Ecobee thermostat to SmartThings.'''.tr=Ecobee termostatınızı SmartThings'e bağlayın. +'''You are connected.'''.tr=Bağlantı kurdunuz. +'''Click to enter Ecobee Credentials'''.tr=Ecobee Kimlik Bilgilerinizi girmek için tıklayın +'''Login'''.tr=Oturum aç +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''.tr=Ecobee servisinde oturum açmak ve SmartThings erişimine izin vermek için aşağıya dokunun. Ekranı 2. sayfaya kaydırdığınızdan emin olun ve 'İzin Ver' tuşuna basın. +'''Select Your Thermostats'''.tr=Termostatlarınızı Seçin +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''.tr=Ecobee hesabınızda mevcut olan ecobee termostatlarının listesini görüntülemek için aşağıya dokunun ve SmartThings'e bağlamak istediklerinizi seçin. +'''Tap to choose'''.tr=Seçmek için dokunun +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''.tr=Ecobee hesabınızda mevcut olan ecobee sensörlerinin listesini görüntülemek için aşağıya dokunun ve SmartThings'e bağlamak istediklerinizi seçin. +'''Select Ecobee Sensors ({{numFound}} found)'''.tr=Ecobee Sensörlerini seçin ({{numFound}} bulundu) +'''Your ecobee Account is now connected to SmartThings!'''.tr=Ecobee Hesabınız artık SmartThings'e bağlandı! +'''Click 'Done' to finish setup.'''.tr=Kurulumu bitirmek için 'Bitti' öğesine tıklayın. +'''The connection could not be established!'''.tr=Bağlantı kurulamadı! +'''Click 'Done' to return to the menu.'''.tr=Menüye dönmek için 'Bitti' öğesine tıklayın. +'''{{deviceName}} is connected to SmartThings'''.tr={{cihazİsmi}} SmartThings'e bağlandı +'''{{deviceName}} is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''.tr=Ecobee termostatınız +'''Your Ecobee thermostat'''.tr=Ecobee termostatınız From 6e28d83e963062b54e8a04da23858896ae1a5115 Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Tue, 17 Jan 2017 12:05:13 +0530 Subject: [PATCH 040/104] [CHF-477] Health Check implementation for Z-Wave Dimmer Switch Generic --- .../zwave-dimmer-switch-generic.src/README.md | 13 ++++++++++++- .../zwave-dimmer-switch-generic.groovy | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/README.md b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/README.md index d959894..a76bbd7 100644 --- a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/README.md +++ b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/README.md @@ -6,6 +6,12 @@ Works with: * [Leviton Plug-in Lamp Dimmer Module (DZPD3-1LW)](https://www.smartthings.com/works-with-smartthings/outlets/leviton-plug-in-lamp-dimmer-module) * [Leviton Universal Dimmer (DZMX1-LZ)](https://www.smartthings.com/works-with-smartthings/switches-and-dimmers/leviton-universal-dimmer) +* [Leviton 1000W Incandescent Dimmer](https://www.smartthings.com/works-with-smartthings/leviton/leviton-1000w-incandescent-dimmer) +* [Leviton 600W Incandescent Dimmer](https://www.smartthings.com/works-with-smartthings/leviton/leviton-600w-incandescent-dimmer) +* [Enerwave In-Wall Dimmer](https://www.smartthings.com/works-with-smartthings/enerwave/enerwave-in-wall-dimmer-zw500d) +* [Leviton 3-Speed Fan Controller](https://www.smartthings.com/works-with-smartthings/leviton/leviton-3-speed-fan-controller) +* [Leviton Magnetic Low Voltage Dimmer](https://www.smartthings.com/works-with-smartthings/leviton/leviton-magnetic-low-voltage-dimmer) +* [Remotec Technology Plug-In Dimmer](https://www.smartthings.com/works-with-smartthings/remotec-technology/remotec-technology-plug-in-dimmer) ## Table of contents @@ -40,4 +46,9 @@ If the device doesn't pair when trying from the SmartThings mobile app, it is po Pairing needs to be tried again by placing the device closer to the hub. Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link: * [Leviton Plug-in Lamp Dimmer Module (DZPD3-1LW) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) -* [Leviton Universal Dimmer (DZMX1-LZ) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) \ No newline at end of file +* [Leviton Universal Dimmer (DZMX1-LZ) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) +* [Leviton 1000W Incandescent Dimmer Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) +* [Leviton 600W Incandescent Dimmer Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) +* [Leviton 3-Speed Fan Controller Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) +* [Enerwave In-Wall Dimmer Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/204854176-How-to-connect-Enerwave-switches-and-dimmers) +* [Remotec Technology Plug-In Dimmer Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/202295150-Remotec-Technology-Plug-In-Dimmer-ZDS-100-) \ No newline at end of file diff --git a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy index 841fac5..b95ff35 100644 --- a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy +++ b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy @@ -28,6 +28,8 @@ metadata { fingerprint mfr:"001D", prod:"1001", model:"0334", deviceJoinName: "Leviton 3-Speed Fan Controller" fingerprint mfr:"001D", prod:"0602", model:"0334", deviceJoinName: "Leviton Magnetic Low Voltage Dimmer" fingerprint mfr:"001D", prod:"0401", model:"0334", deviceJoinName: "Leviton 600W Incandescent Dimmer" + fingerprint mfr:"0111", prod:"8200", model:"0200", deviceJoinName: "Remotec Technology Plug-In Dimmer" + fingerprint mfr:"1104", prod:"001D", model:"0501", deviceJoinName: "Leviton 1000W Incandescant Dimmer" } simulator { From 5cb84a269de1394b8ac7daf900bca44daa24d15f Mon Sep 17 00:00:00 2001 From: "sushant.k1" Date: Mon, 13 Feb 2017 16:21:24 +0530 Subject: [PATCH 041/104] [CHF-523] Adding Readme files for the following DTH: 1. Z-Wave Switch Generic a) Leviton 15A Switch VRS15-1LZ (Z-Wave) b) Enerwave Duplex Receptacle ZW15R (Z-Wave) c) Enerwave On/Off Switch ZW15S (Z-Wave) 2. Dimmer Switch a) 1,000-Watt In-Wall Smart Dimmer Switch (GE 12725) b) In-Wall Smart Fan Control (GE 12730) 3. ZigBee RGB Bulb a) OSRAM LIGHTIFY Gardenspot mini RGB 4. ZigBee RGBW Bulb a) OSRAM LIGHTIFY Flex RGBW strips --- .../smartthings/dimmer-switch.src/README.md | 8 +++- .../zigbee-rgb-bulb.src/.st-ignore | 2 + .../smartthings/zigbee-rgb-bulb.src/README.md | 39 +++++++++++++++++++ .../zigbee-rgbw-bulb.src/README.md | 6 ++- .../zwave-switch-generic.src/README.md | 12 ++++-- 5 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 devicetypes/smartthings/zigbee-rgb-bulb.src/.st-ignore create mode 100644 devicetypes/smartthings/zigbee-rgb-bulb.src/README.md diff --git a/devicetypes/smartthings/dimmer-switch.src/README.md b/devicetypes/smartthings/dimmer-switch.src/README.md index 71a27b6..595ff8d 100644 --- a/devicetypes/smartthings/dimmer-switch.src/README.md +++ b/devicetypes/smartthings/dimmer-switch.src/README.md @@ -7,6 +7,8 @@ Works with: * [GE Z-Wave In-Wall Smart Dimmer (GE 12724)](http://products.z-wavealliance.org/products/1197) * [GE Z-Wave In-Wall Smart Dimmer (Toggle) (GE 12729)](http://products.z-wavealliance.org/products/1201) * [GE Z-Wave Plug-in Smart Dimmer (GE 12718)](http://products.z-wavealliance.org/products/1191) +* [GE 1,000-Watt In-Wall Smart Dimmer Switch (GE 12725)](http://products.z-wavealliance.org/products/1198) +* [GE In-Wall Smart Fan Control (GE 12730)](http://products.z-wavealliance.org/products/1202) ## Table of contents @@ -27,7 +29,7 @@ Works with: ## Device Health -Z-Wave Smart Dimmers (In-Wall, In-Wall(Toggle), Plug-In) are polled by the hub. +Z-Wave Smart Dimmers (In-Wall, In-Wall(Toggle), Plug-In), 1000-watt In-Wall Smart Dimmer Switch and In-Wall Smart Fan Control are polled by the hub. As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed. Check-in interval = 32 mins. Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for @@ -44,4 +46,6 @@ Instructions related to pairing, resetting and removing the device from SmartThi * [General Z-Wave Dimmer/Switch Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/200955890-Troubleshooting-GE-in-wall-switch-or-dimmer-won-t-respond-to-commands-or-automations-Z-Wave-) * [GE Z-Wave In-Wall Smart Dimmer (GE 12724) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/200902600-GE-In-Wall-Paddle-Dimmer-Switch-GE-12724-Z-Wave-) * [GE Z-Wave In-Wall Smart Dimmer (Toggle) (GE 12729) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/207568463-GE-In-Wall-Smart-Toggle-Dimmer-GE-12729-Z-Wave-) -* [GE Z-Wave Plug-in Smart Dimmer (GE 12718) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/202088474-GE-Plug-In-Smart-Dimmer-GE-12718-Z-Wave-) \ No newline at end of file +* [GE Z-Wave Plug-in Smart Dimmer (GE 12718) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/202088474-GE-Plug-In-Smart-Dimmer-GE-12718-Z-Wave-) +* [GE 1,000-Watt In-Wall Smart Dimmer Switch (GE 12725) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/200879274) +* [GE In-Wall Smart Fan Control (GE 12730) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/200879274) \ No newline at end of file diff --git a/devicetypes/smartthings/zigbee-rgb-bulb.src/.st-ignore b/devicetypes/smartthings/zigbee-rgb-bulb.src/.st-ignore new file mode 100644 index 0000000..f78b46e --- /dev/null +++ b/devicetypes/smartthings/zigbee-rgb-bulb.src/.st-ignore @@ -0,0 +1,2 @@ +.st-ignore +README.md diff --git a/devicetypes/smartthings/zigbee-rgb-bulb.src/README.md b/devicetypes/smartthings/zigbee-rgb-bulb.src/README.md new file mode 100644 index 0000000..f59f26c --- /dev/null +++ b/devicetypes/smartthings/zigbee-rgb-bulb.src/README.md @@ -0,0 +1,39 @@ +# ZigBee RGB Bulb + +Cloud Execution + +Works with: + +* [OSRAM LIGHTIFY Gardenspot mini RGB](https://www.smartthings.com/works-with-smartthings/lighting-and-switches/osram-lightify-gardenspot-rgb) + +## Table of contents + +* [Capabilities](#capabilities) +* [Health](#device-health) +* [Battery](#battery-specification) + +## Capabilities + +* **Actuator** - represents that a Device has commands +* **Color Control** - It represents that the color attributes of a device can be controlled (hue, saturation, color value). +* **Configuration** - _configure()_ command called when device is installed or device preferences updated. +* **Polling** - It represents that a device can be polled. +* **Refresh** - _refresh()_ command for status updates +* **Switch** - can detect state (possible values: on/off) +* **Switch Level** - represents current light level, usually 0-100 in percent +* **Health Check** - indicates ability to get device health notifications +* **Light** - Indicates that the device belongs to light category. + +## Device Health + +Zigbee RGB Bulb with reporting interval of 5 mins. +SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE` + +*__12min__ checkInterval + +## Troubleshooting + +If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. +Pairing needs to be tried again by placing the device closer to the hub. +Other troubleshooting tips are listed as follows: +* [OSRAM LIGHTIFY Gardenspot mini RGB Troubleshooting](https://support.smartthings.com/hc/en-us/articles/214191863) \ No newline at end of file diff --git a/devicetypes/smartthings/zigbee-rgbw-bulb.src/README.md b/devicetypes/smartthings/zigbee-rgbw-bulb.src/README.md index 0e413e5..e704056 100644 --- a/devicetypes/smartthings/zigbee-rgbw-bulb.src/README.md +++ b/devicetypes/smartthings/zigbee-rgbw-bulb.src/README.md @@ -4,7 +4,8 @@ Cloud Execution Works with: -* [OSRAM LIGHTIFY LED RGBW Bulb](https://support.smartthings.com/hc/en-us/articles/207728173-OSRAM-LIGHTIFY-LED-Smart-Connected-Light-A19-RGBW) +* [OSRAM LIGHTIFY LED Smart Connected Light A19 RGBW](https://support.smartthings.com/hc/en-us/articles/207728173-OSRAM-LIGHTIFY-LED-Smart-Connected-Light-A19-RGBW) +* [OSRAM LIGHTIFY Flex RGBW strips](https://www.smartthings.com/works-with-smartthings/lighting-and-switches/osram-lightify-flex-rgbw-strips) ## Table of contents @@ -38,4 +39,5 @@ If the device doesn't pair when trying from the SmartThings mobile app, it is po Pairing needs to be tried again by placing the device closer to the hub. It may also happen that you need to reset the device. Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link: -* [Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/207728173-OSRAM-LIGHTIFY-LED-Smart-Connected-Light-A19-RGBW) \ No newline at end of file +* [OSRAM LIGHTIFY LED Smart Connected Light A19 RGBW Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/207728173-OSRAM-LIGHTIFY-LED-Smart-Connected-Light-A19-RGBW) +* [OSRAM LIGHTIFY Flex RGBW strips Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/214191863) \ No newline at end of file diff --git a/devicetypes/smartthings/zwave-switch-generic.src/README.md b/devicetypes/smartthings/zwave-switch-generic.src/README.md index baec4dd..f3fc268 100644 --- a/devicetypes/smartthings/zwave-switch-generic.src/README.md +++ b/devicetypes/smartthings/zwave-switch-generic.src/README.md @@ -1,4 +1,4 @@ -# Z-wave Switch +# Z-wave Switch Generic Cloud Execution @@ -8,6 +8,9 @@ Works with: * [GE Plug-In Outdoor Smart Switch (GE 12720) (Z-Wave)](https://www.smartthings.com/works-with-smartthings/outlets/ge-plug-in-outdoor-smart-switch) * [Leviton Outlet (DZR15-1LZ)](https://www.smartthings.com/works-with-smartthings/outlets/leviton-outlet) * [Leviton Switch (DZS15-1LZ)](https://www.smartthings.com/works-with-smartthings/switches-and-dimmers/leviton-switch) +* [Leviton 15A Switch (VRS15-1LZ)](https://www.smartthings.com/works-with-smartthings/lighting-and-switches/leviton-15a-switch) +* [Enerwave Duplex Receptacle (ZW15R)](https://www.smartthings.com/works-with-smartthings/outlets/enerwave-duplex-receptacle) +* [Enerwave On/Off Switch (ZW15S)](https://www.smartthings.com/works-with-smartthings/lighting-and-switches/enerwave-onoff-switch) ## Table of contents @@ -25,7 +28,7 @@ Works with: ## Device Health -Leviton Appliance Module (DZPA1-1LW), GE Plug-In Outdoor Smart Switch (GE 12720), Leviton Outlet (DZR15-1LZ) and Leviton Switch (DZS15-1LZ) (Z-Wave) are polled by the hub. +Leviton Appliance Module (DZPA1-1LW), GE Plug-In Outdoor Smart Switch (GE 12720), Leviton Outlet (DZR15-1LZ), Leviton Switch (DZS15-1LZ) (Z-Wave), Leviton Switch, Enerwave Duplex Receptacle (ZW15R) and Enerwave On/Off Switch (ZW15S) are polled by the hub. As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed. Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins. Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for @@ -42,4 +45,7 @@ Instructions related to pairing, resetting and removing the device from SmartThi * [Leviton Appliance Module (DZPA1-1LW) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) * [GE Plug-In Outdoor Smart Switch (GE 12720) (Z-Wave) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/200903080-GE-Plug-In-Outdoor-Smart-Switch-GE-12720-Z-Wave-) * [Leviton Outlet (DZR15-1LZ) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) -* [Leviton Switch (DZS15-1LZ) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) \ No newline at end of file +* [Leviton Switch (DZS15-1LZ) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) +* [Leviton 15A Switch (VRS15-1LZ) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) +* [Enerwave Duplex Receptacle (ZW15R) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/204854176-How-to-connect-Enerwave-switches-and-dimmers) +* [Enerwave On/Off Switch (ZW15S) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/204854176-How-to-connect-Enerwave-switches-and-dimmers) \ No newline at end of file From bf454300618fc4c875accf8b799fa5af113b48bf Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Tue, 14 Feb 2017 15:01:17 +0530 Subject: [PATCH 042/104] [DVCSMP-2436] DTH Device Filtering change for Lifx Bulbs --- .../smartthings/lifx-color-bulb.src/lifx-color-bulb.groovy | 1 + .../smartthings/lifx-white-bulb.src/lifx-white-bulb.groovy | 1 + 2 files changed, 2 insertions(+) diff --git a/devicetypes/smartthings/lifx-color-bulb.src/lifx-color-bulb.groovy b/devicetypes/smartthings/lifx-color-bulb.src/lifx-color-bulb.groovy index 5ecfae0..5240c60 100644 --- a/devicetypes/smartthings/lifx-color-bulb.src/lifx-color-bulb.groovy +++ b/devicetypes/smartthings/lifx-color-bulb.src/lifx-color-bulb.groovy @@ -14,6 +14,7 @@ metadata { capability "Refresh" capability "Sensor" capability "Health Check" + capability "Light" } simulator { diff --git a/devicetypes/smartthings/lifx-white-bulb.src/lifx-white-bulb.groovy b/devicetypes/smartthings/lifx-white-bulb.src/lifx-white-bulb.groovy index 16e7c57..bc559c8 100644 --- a/devicetypes/smartthings/lifx-white-bulb.src/lifx-white-bulb.groovy +++ b/devicetypes/smartthings/lifx-white-bulb.src/lifx-white-bulb.groovy @@ -13,6 +13,7 @@ metadata { capability "Refresh" capability "Sensor" capability "Health Check" + capability "Light" } simulator { From 1263b72a725b2ebef4ed5902ea3cb0d0c9a1b10c Mon Sep 17 00:00:00 2001 From: "sushant.k1" Date: Tue, 14 Feb 2017 15:13:28 +0530 Subject: [PATCH 043/104] [DVCSMP-2433] Adding "Light" capability to the following Z-wave DTHs: 1. Z-Wave Metering Dimmer 2. Z-Wave Metering Switch 3. Z-Wave Dimmer Switch Generic 4. Z-Wave Switch 5. Z-Wave Switch Generic 6. MimoLite Garage Door Controller --- .../mimolite-garage-door-controller.groovy | 1 + .../zwave-dimmer-switch-generic.groovy | 1 + .../zwave-metering-dimmer.src/zwave-metering-dimmer.groovy | 1 + .../zwave-metering-switch.src/zwave-metering-switch.groovy | 1 + .../zwave-switch-generic.src/zwave-switch-generic.groovy | 1 + devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy | 1 + 6 files changed, 6 insertions(+) diff --git a/devicetypes/smartthings/mimolite-garage-door-controller.src/mimolite-garage-door-controller.groovy b/devicetypes/smartthings/mimolite-garage-door-controller.src/mimolite-garage-door-controller.groovy index fb7407e..e21832c 100644 --- a/devicetypes/smartthings/mimolite-garage-door-controller.src/mimolite-garage-door-controller.groovy +++ b/devicetypes/smartthings/mimolite-garage-door-controller.src/mimolite-garage-door-controller.groovy @@ -36,6 +36,7 @@ metadata { capability "Switch" capability "Refresh" capability "Contact Sensor" + capability "Light" attribute "powered", "string" diff --git a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy index b95ff35..498e438 100644 --- a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy +++ b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy @@ -20,6 +20,7 @@ metadata { capability "Polling" capability "Refresh" capability "Sensor" + capability "Light" fingerprint inClusters: "0x26", deviceJoinName: "Z-Wave Dimmer" fingerprint mfr:"001D", prod:"1902", deviceJoinName: "Z-Wave Dimmer" diff --git a/devicetypes/smartthings/zwave-metering-dimmer.src/zwave-metering-dimmer.groovy b/devicetypes/smartthings/zwave-metering-dimmer.src/zwave-metering-dimmer.groovy index 4631203..5e95f5a 100644 --- a/devicetypes/smartthings/zwave-metering-dimmer.src/zwave-metering-dimmer.groovy +++ b/devicetypes/smartthings/zwave-metering-dimmer.src/zwave-metering-dimmer.groovy @@ -25,6 +25,7 @@ metadata { capability "Switch Level" capability "Sensor" capability "Actuator" + capability "Light" command "reset" diff --git a/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy b/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy index 21ceb1b..7939170 100644 --- a/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy +++ b/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy @@ -21,6 +21,7 @@ metadata { capability "Refresh" capability "Configuration" capability "Sensor" + capability "Light" command "reset" diff --git a/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy b/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy index ef1134a..0eaab58 100644 --- a/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy +++ b/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy @@ -19,6 +19,7 @@ metadata { capability "Polling" capability "Refresh" capability "Sensor" + capability "Light" fingerprint inClusters: "0x25", deviceJoinName: "Z-Wave Switch" fingerprint mfr:"001D", prod:"1A02", model:"0334", deviceJoinName: "Leviton Appliance Module" diff --git a/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy b/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy index ac0f46d..e196a71 100644 --- a/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy +++ b/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy @@ -20,6 +20,7 @@ metadata { capability "Refresh" capability "Sensor" capability "Health Check" + capability "Light" fingerprint mfr:"0063", prod:"4952", deviceJoinName: "Z-Wave Wall Switch" fingerprint mfr:"0063", prod:"5257", deviceJoinName: "Z-Wave Wall Switch" From 7c5734b752f83c16ddffd0eeddafb16404f25775 Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Tue, 14 Feb 2017 15:26:50 +0530 Subject: [PATCH 044/104] [DVCSMP-2431] DTH Device Filtering change for ZigBee Devices --- devicetypes/smartthings/zigbee-dimmer-power.src/README.md | 1 + .../zigbee-dimmer-power.src/zigbee-dimmer-power.groovy | 1 + .../zigbee-switch-power.src/zigbee-switch-power.groovy | 1 + 3 files changed, 3 insertions(+) diff --git a/devicetypes/smartthings/zigbee-dimmer-power.src/README.md b/devicetypes/smartthings/zigbee-dimmer-power.src/README.md index 130f20c..196101f 100644 --- a/devicetypes/smartthings/zigbee-dimmer-power.src/README.md +++ b/devicetypes/smartthings/zigbee-dimmer-power.src/README.md @@ -23,6 +23,7 @@ Works with: * **Switch** - can detect state (possible values: on/off) * **Switch Level** - represents current light level, usually 0-100 in percent * **Health Check** - indicates ability to get device health notifications +* **Light** - indicates that the device belongs to Light category. ## Device Health diff --git a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy index 4bef6a9..87f4a92 100644 --- a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy +++ b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy @@ -22,6 +22,7 @@ metadata { capability "Switch" capability "Switch Level" capability "Health Check" + capability "Light" fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0B04" fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0702" diff --git a/devicetypes/smartthings/zigbee-switch-power.src/zigbee-switch-power.groovy b/devicetypes/smartthings/zigbee-switch-power.src/zigbee-switch-power.groovy index c118fe6..8581252 100644 --- a/devicetypes/smartthings/zigbee-switch-power.src/zigbee-switch-power.groovy +++ b/devicetypes/smartthings/zigbee-switch-power.src/zigbee-switch-power.groovy @@ -21,6 +21,7 @@ metadata { capability "Sensor" capability "Switch" capability "Health Check" + capability "Light" fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0B04" fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0702" From 9b6e7d3be89ab094c9aea6895d2cd083c9d082b2 Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Tue, 14 Feb 2017 11:23:27 -0700 Subject: [PATCH 045/104] ICP-280 Instruction for Phlips Hue -Added instructions to tell user to setup in Hue app first -Fix a null printout and some whitespace --- .../hue-connect.src/hue-connect.groovy | 67 ++++++++++--------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/smartapps/smartthings/hue-connect.src/hue-connect.groovy b/smartapps/smartthings/hue-connect.src/hue-connect.groovy index fe5a4f7..047a8dd 100644 --- a/smartapps/smartthings/hue-connect.src/hue-connect.groovy +++ b/smartapps/smartthings/hue-connect.src/hue-connect.groovy @@ -17,14 +17,14 @@ */ definition( - name: "Hue (Connect)", - namespace: "smartthings", - author: "SmartThings", - description: "Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Adjust colors by going to the Thing detail screen for your Hue lights (tap the gear on Hue tiles).\n\nPlease update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.", - category: "SmartThings Labs", - iconUrl: "https://s3.amazonaws.com/smartapp-icons/Partner/hue.png", - iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Partner/hue@2x.png", - singleInstance: true + name: "Hue (Connect)", + namespace: "smartthings", + author: "SmartThings", + description: "Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Adjust colors by going to the Thing detail screen for your Hue lights (tap the gear on Hue tiles).\n\nPlease update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.", + category: "SmartThings Labs", + iconUrl: "https://s3.amazonaws.com/smartapp-icons/Partner/hue.png", + iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Partner/hue@2x.png", + singleInstance: true ) preferences { @@ -85,7 +85,8 @@ def bridgeDiscovery(params=[:]) } return dynamicPage(name:"bridgeDiscovery", title:"Discovery Started!", nextPage:"bridgeBtnPush", refreshInterval:refreshInterval, uninstall: true) { - section("Please wait while we discover your Hue Bridge. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.") { + section("Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. " + + "Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.") { input "selectedHue", "enum", required:false, title:"Select Hue Bridge (${numFound} found)", multiple:false, options:options, submitOnChange: true } } @@ -178,7 +179,7 @@ def bulbDiscovery() { } if (bulbRefreshCount > 200 && numFound == 0) { - // Time out to avoid endless discovery + // Time out after 10 minutes state.inBulbDiscovery = false bulbRefreshCount = 0 return dynamicPage(name:"bulbDiscovery", title:"Light Discovery Failed!", nextPage:"", refreshInterval:0, install:true, uninstall: true) { @@ -216,32 +217,32 @@ private sendDeveloperReq() { def token = app.id def host = getBridgeIP() sendHubCommand(new physicalgraph.device.HubAction([ - method: "POST", - path: "/api", - headers: [ - HOST: host - ], - body: [devicetype: "$token-0"]], "${selectedHue}", [callback: "usernameHandler"])) + method: "POST", + path: "/api", + headers: [ + HOST: host + ], + body: [devicetype: "$token-0"]], "${selectedHue}", [callback: "usernameHandler"])) } private discoverHueBulbs() { def host = getBridgeIP() sendHubCommand(new physicalgraph.device.HubAction([ - method: "GET", - path: "/api/${state.username}/lights", - headers: [ - HOST: host - ]], "${selectedHue}", [callback: "lightsHandler"])) + method: "GET", + path: "/api/${state.username}/lights", + headers: [ + HOST: host + ]], "${selectedHue}", [callback: "lightsHandler"])) } private verifyHueBridge(String deviceNetworkId, String host) { log.trace "Verify Hue Bridge $deviceNetworkId" sendHubCommand(new physicalgraph.device.HubAction([ - method: "GET", - path: "/description.xml", - headers: [ - HOST: host - ]], deviceNetworkId, [callback: "bridgeDescriptionHandler"])) + method: "GET", + path: "/description.xml", + headers: [ + HOST: host + ]], deviceNetworkId, [callback: "bridgeDescriptionHandler"])) } private verifyHueBridges() { @@ -399,7 +400,7 @@ def addBulbs() { log.debug "$dni in not longer paired to the Hue Bridge or ID changed" } } else { - //backwards compatable + //backwards compatable newHueBulb = bulbs.find { (app.id + "/" + it.id) == dni } d = addChildBulb(dni, "Extended Color Light", newHueBulb?.value?.name, newHueBulb?.value?.hub) d?.completedSetup = true @@ -1151,7 +1152,7 @@ def setColorTemperature(childDevice, huesettings) { def ct = hueSettings == 6500 ? 153 : Math.round(1000000/huesettings) createSwitchEvent(childDevice, "on") put("lights/$id/state", [ct: ct, on: true]) - return "Setting color temperature to $percent" + return "Setting color temperature to $ct" } def setColor(childDevice, huesettings) { @@ -1226,7 +1227,7 @@ private poll() { def uri = "/api/${state.username}/lights/" log.debug "GET: $host$uri" sendHubCommand(new physicalgraph.device.HubAction("GET ${uri} HTTP/1.1\r\n" + - "HOST: ${host}\r\n\r\n", physicalgraph.device.Protocol.LAN, selectedHue)) + "HOST: ${host}\r\n\r\n", physicalgraph.device.Protocol.LAN, selectedHue)) } private isOnline(id) { @@ -1243,10 +1244,10 @@ private put(path, body) { log.debug "BODY: ${bodyJSON}" sendHubCommand(new physicalgraph.device.HubAction("PUT $uri HTTP/1.1\r\n" + - "HOST: ${host}\r\n" + - "Content-Length: ${length}\r\n" + - "\r\n" + - "${bodyJSON}", physicalgraph.device.Protocol.LAN, "${selectedHue}")) + "HOST: ${host}\r\n" + + "Content-Length: ${length}\r\n" + + "\r\n" + + "${bodyJSON}", physicalgraph.device.Protocol.LAN, "${selectedHue}")) } /* From c6d6ba85f55ffd71a44fa1d84bbc711217887677 Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Wed, 15 Feb 2017 13:22:43 -0600 Subject: [PATCH 046/104] Properly create event for outlet power We were not properly creating the event before returning it, causing us to not actually generate the power event. This resolves: https://smartthings.atlassian.net/browse/PROB-1518 --- .../smartpower-dimming-outlet.groovy | 3 ++- .../smartpower-outlet.src/smartpower-outlet.groovy | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy b/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy index 80ca040..7b1117f 100644 --- a/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy +++ b/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy @@ -79,7 +79,8 @@ def parse(String description) { */ event.value = event.value / 10 } - return event + + return event ? createEvent(event) : event } def setLevel(value) { diff --git a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy index 7561c63..0261b47 100644 --- a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy +++ b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy @@ -83,9 +83,8 @@ def parse(String description) { if (event) { if (event.name == "power") { - event.value = event.value / 10 - event.descriptionText = '{{ device.displayName }} power is {{ value }} Watts' - event.translatable = true + def value = (event.value as Integer) / 10 + event = createEvent(name: event.name, value: value, descriptionText: '{{ device.displayName }} power is {{ value }} Watts', translatable: true) } else if (event.name == "switch") { def descriptionText = event.value == "on" ? '{{ device.displayName }} is On' : '{{ device.displayName }} is Off' event = createEvent(name: event.name, value: event.value, descriptionText: descriptionText, translatable: true) @@ -106,7 +105,7 @@ def parse(String description) { log.debug "${cluster}" } } - return event + return event ? createEvent(event) : event } def off() { From bcc680ee5d93e5a161a422af358d8d2e000abcee Mon Sep 17 00:00:00 2001 From: juano2310 Date: Fri, 10 Feb 2017 19:36:39 -0500 Subject: [PATCH 047/104] DVCSMP-2425 - LIFX Exceptions Adding comment --- .../lifx-connect.src/lifx-connect.groovy | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy b/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy index 7a4afe7..734889f 100644 --- a/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy +++ b/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy @@ -346,7 +346,7 @@ def devicesList(selector = '') { if (resp.status == 200) { return resp.data } else { - log.error("Non-200 from device list call. ${resp.status} ${resp.data}") + log.debug("No response from device list call. ${resp.status} ${resp.data}") return [] } } @@ -418,9 +418,15 @@ def updateDevices() { } getChildDevices().findAll { !selectors.contains("${it.deviceNetworkId}") }.each { log.info("Deleting ${it.deviceNetworkId}") - state.devices[it.deviceNetworkId] = null - deleteChildDevice(it.deviceNetworkId) + if (state.devices[it.deviceNetworkId]) + state.devices[it.deviceNetworkId] = null + // The reason the implementation is trying to delete this bulb is because it is not longer connected to the LIFX location. + // Adding "try" will prevent this exception from happening. + // Ideally device health would show to the user that the device is not longer accessible so that the user can either force delete it or remove it from the SmartApp. + try { + deleteChildDevice(it.deviceNetworkId) + } catch (Exception e) { + log.debug("Can't remove this device because it's being used by an SmartApp") + } } } - - From 0aabce9fa3b845b6858246d34b05a8f52f7d1812 Mon Sep 17 00:00:00 2001 From: "sushant.k1" Date: Fri, 17 Feb 2017 18:21:16 +0530 Subject: [PATCH 048/104] [DVCSMP-2445] DTH UX Improvements for the following DTHs: 1. Quirky Wink Powerstrip 2. Momentary Button Tile 3. Beaconthing 4. Unknown 5. Zwave Water Valve 6. Zen Thermostat 7. Zigbee Valve 8. Hue Bloom --- .../com-obycode/beaconthing.src/beaconthing.groovy | 2 +- devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy | 4 ++-- .../momentary-button-tile.groovy | 2 +- devicetypes/smartthings/unknown.src/unknown.groovy | 2 +- .../smartthings/zigbee-valve.src/zigbee-valve.groovy | 8 ++++---- .../zwave-water-valve.src/zwave-water-valve.groovy | 8 ++++---- .../quirky-wink-powerstrip.groovy | 2 +- .../zenwithin/zen-thermostat.src/zen-thermostat.groovy | 8 ++++---- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/devicetypes/com-obycode/beaconthing.src/beaconthing.groovy b/devicetypes/com-obycode/beaconthing.src/beaconthing.groovy index de1850c..f5bca64 100644 --- a/devicetypes/com-obycode/beaconthing.src/beaconthing.groovy +++ b/devicetypes/com-obycode/beaconthing.src/beaconthing.groovy @@ -37,7 +37,7 @@ metadata { tiles { standardTile("presence", "device.presence", width: 2, height: 2, canChangeBackground: true) { - state("present", labelIcon:"st.presence.tile.present", backgroundColor:"#53a7c0") + state("present", labelIcon:"st.presence.tile.present", backgroundColor:"#00A0DC") state("not present", labelIcon:"st.presence.tile.not-present", backgroundColor:"#ffffff") } valueTile("inRange", "device.inRangeFriendly", inactiveLabel: true, height:1, width:3, decoration: "flat") { diff --git a/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy b/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy index 2d6f063..2462e88 100644 --- a/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy +++ b/devicetypes/smartthings/hue-bloom.src/hue-bloom.groovy @@ -31,9 +31,9 @@ metadata { tiles (scale: 2){ multiAttributeTile(name:"rich-control", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/momentary-button-tile.src/momentary-button-tile.groovy b/devicetypes/smartthings/momentary-button-tile.src/momentary-button-tile.groovy index 7a164fa..923836e 100644 --- a/devicetypes/smartthings/momentary-button-tile.src/momentary-button-tile.groovy +++ b/devicetypes/smartthings/momentary-button-tile.src/momentary-button-tile.groovy @@ -32,7 +32,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: 'Push', action: "momentary.push", backgroundColor: "#ffffff", nextState: "on" - state "on", label: 'Push', action: "momentary.push", backgroundColor: "#53a7c0" + state "on", label: 'Push', action: "momentary.push", backgroundColor: "#00A0DC" } main "switch" details "switch" diff --git a/devicetypes/smartthings/unknown.src/unknown.groovy b/devicetypes/smartthings/unknown.src/unknown.groovy index e084bb1..12cee41 100644 --- a/devicetypes/smartthings/unknown.src/unknown.groovy +++ b/devicetypes/smartthings/unknown.src/unknown.groovy @@ -23,7 +23,7 @@ metadata { // UI tile definitions tiles { standardTile("unknown", "device.unknown", width: 2, height: 2) { - state(name:"default", icon:"st.unknown.unknown.unknown", backgroundColor:"#767676", label: "Unknown") + state(name:"default", icon:"st.unknown.unknown.unknown", backgroundColor:"#ffffff", label: "Unknown") } main "unknown" diff --git a/devicetypes/smartthings/zigbee-valve.src/zigbee-valve.groovy b/devicetypes/smartthings/zigbee-valve.src/zigbee-valve.groovy index 905f743..657da69 100644 --- a/devicetypes/smartthings/zigbee-valve.src/zigbee-valve.groovy +++ b/devicetypes/smartthings/zigbee-valve.src/zigbee-valve.groovy @@ -40,10 +40,10 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"valve", type: "generic", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.contact", key: "PRIMARY_CONTROL") { - attributeState "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#53a7c0", nextState:"closing" - attributeState "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#e86d13", nextState:"opening" - attributeState "opening", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#53a7c0", nextState:"closing" - attributeState "closing", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#e86d13", nextState:"opening" + attributeState "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC", nextState:"closing" + attributeState "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff", nextState:"opening" + attributeState "opening", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC", nextState:"closing" + attributeState "closing", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff", nextState:"opening" } tileAttribute ("powerSource", key: "SECONDARY_CONTROL") { attributeState "powerSource", label:'Power Source: ${currentValue}' diff --git a/devicetypes/smartthings/zwave-water-valve.src/zwave-water-valve.groovy b/devicetypes/smartthings/zwave-water-valve.src/zwave-water-valve.groovy index 0be843d..8826760 100644 --- a/devicetypes/smartthings/zwave-water-valve.src/zwave-water-valve.groovy +++ b/devicetypes/smartthings/zwave-water-valve.src/zwave-water-valve.groovy @@ -36,10 +36,10 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"valve", type: "generic", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.contact", key: "PRIMARY_CONTROL") { - attributeState "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#53a7c0", nextState:"closing" - attributeState "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#e86d13", nextState:"opening" - attributeState "opening", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#ffe71e" - attributeState "closing", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffe71e" + attributeState "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC", nextState:"closing" + attributeState "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff", nextState:"opening" + attributeState "opening", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC" + attributeState "closing", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff" } } diff --git a/devicetypes/wackford/quirky-wink-powerstrip.src/quirky-wink-powerstrip.groovy b/devicetypes/wackford/quirky-wink-powerstrip.src/quirky-wink-powerstrip.groovy index 8dd6c27..b4b38bf 100644 --- a/devicetypes/wackford/quirky-wink-powerstrip.src/quirky-wink-powerstrip.groovy +++ b/devicetypes/wackford/quirky-wink-powerstrip.src/quirky-wink-powerstrip.groovy @@ -46,7 +46,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" } standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat") { state "default", action:"refresh.refresh", icon:"st.secondary.refresh" diff --git a/devicetypes/zenwithin/zen-thermostat.src/zen-thermostat.groovy b/devicetypes/zenwithin/zen-thermostat.src/zen-thermostat.groovy index a13646f..2e046da 100644 --- a/devicetypes/zenwithin/zen-thermostat.src/zen-thermostat.groovy +++ b/devicetypes/zenwithin/zen-thermostat.src/zen-thermostat.groovy @@ -36,7 +36,7 @@ metadata { } valueTile("temperature", "device.temperature", width: 1, height: 1) { - state("temperature", label:'${currentValue}°', backgroundColor:"#0A1E2C") + state("temperature", label:'${currentValue}°', backgroundColor:"#00A0DC") } standardTile("fanMode", "device.thermostatFanMode", decoration: "flat") { @@ -46,9 +46,9 @@ metadata { standardTile("mode", "device.thermostatMode", decoration: "flat") { - state "off", action:"setThermostatMode", backgroundColor:"#e8e3d8", icon:"st.thermostat.heating-cooling-off", nextState:"heating" - state "heat", action:"setThermostatMode", backgroundColor:"#ff6e7e", icon:"st.thermostat.heat", nextState:"cooling" - state "cool", action:"setThermostatMode", backgroundColor:"#90d0e8", icon:"st.thermostat.cool", nextState:"..." + state "off", action:"setThermostatMode", backgroundColor:"#ffffff", icon:"st.thermostat.heating-cooling-off", nextState:"heating" + state "heat", action:"setThermostatMode", backgroundColor:"#e86d13", icon:"st.thermostat.heat", nextState:"cooling" + state "cool", action:"setThermostatMode", backgroundColor:"#00A0DC", icon:"st.thermostat.cool", nextState:"..." //state "auto", action:"setThermostatMode", backgroundColor:"#e8e3d8", icon:"st.thermostat.auto" state "heating", action:"setThermostatMode", nextState:"to_cool" state "cooling", action:"setThermostatMode", nextState:"..." From 0d4b681971d591cae6c34291a62e6ca009fc615e Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Mon, 20 Feb 2017 15:35:27 +0530 Subject: [PATCH 049/104] [DVCSMP-2438] Standardize Page 1 of DTH UX Improvements --- .../thermostat-capability.groovy | 4 ++-- .../tile-basic-presence.groovy | 6 ++--- .../tile-multiattribute-generic.groovy | 6 ++--- .../tile-multiattribute-videoplayer.groovy | 24 +++++++++---------- .../quirky-wink-eggtray.groovy | 6 ++--- .../quirky-wink-spotter.groovy | 10 ++++---- 6 files changed, 28 insertions(+), 28 deletions(-) diff --git a/devicetypes/capabilities/thermostat-capability.src/thermostat-capability.groovy b/devicetypes/capabilities/thermostat-capability.src/thermostat-capability.groovy index 113b4a5..80cdf98 100644 --- a/devicetypes/capabilities/thermostat-capability.src/thermostat-capability.groovy +++ b/devicetypes/capabilities/thermostat-capability.src/thermostat-capability.groovy @@ -79,8 +79,8 @@ metadata { standardTile("mode", "device.thermostatMode", inactiveLabel: false, decoration: "flat") { state "off", label:'${name}', action:"thermostat.emergencyHeat", backgroundColor:"#ffffff" state "emergencyHeat", label:'${name}', action:"thermostat.heat", backgroundColor:"#e86d13" - state "heat", label:'${name}', action:"thermostat.cool", backgroundColor:"#ffc000" - state "cool", label:'${name}', action:"thermostat.off", backgroundColor:"#269bd2" + state "heat", label:'${name}', action:"thermostat.cool", backgroundColor:"#e86d13" + state "cool", label:'${name}', action:"thermostat.off", backgroundColor:"#00A0DC" } standardTile("fanMode", "device.thermostatFanMode", inactiveLabel: false, decoration: "flat") { state "fanAuto", label:'${name}', action:"thermostat.fanOn", backgroundColor:"#ffffff" diff --git a/devicetypes/smartthings/tile-ux/tile-basic-presence.src/tile-basic-presence.groovy b/devicetypes/smartthings/tile-ux/tile-basic-presence.src/tile-basic-presence.groovy index 968fc08..392866c 100644 --- a/devicetypes/smartthings/tile-ux/tile-basic-presence.src/tile-basic-presence.groovy +++ b/devicetypes/smartthings/tile-ux/tile-basic-presence.src/tile-basic-presence.groovy @@ -26,8 +26,8 @@ metadata { tiles(scale: 2) { // You only get a presence tile view when the size is 3x3 otherwise it's a value tile standardTile("presence", "device.presence", width: 3, height: 3, canChangeBackground: true) { - state("present", labelIcon:"st.presence.tile.mobile-present", backgroundColor:"#53a7c0") - state("not present", labelIcon:"st.presence.tile.mobile-not-present", backgroundColor:"#ebeef2") + state("present", labelIcon:"st.presence.tile.mobile-present", backgroundColor:"#00A0DC") + state("not present", labelIcon:"st.presence.tile.mobile-not-present", backgroundColor:"#cccccc") } standardTile("notPresentBtn", "device.fake", width: 3, height: 3, decoration: "flat") { @@ -35,7 +35,7 @@ metadata { } standardTile("presentBtn", "device.fake", width: 3, height: 3, decoration: "flat") { - state("present", label:'present', backgroundColor:"#53a7c0", action:"arrived") + state("present", label:'present', backgroundColor:"#00A0DC", action:"arrived") } main("presence") diff --git a/devicetypes/smartthings/tile-ux/tile-multiattribute-generic.src/tile-multiattribute-generic.groovy b/devicetypes/smartthings/tile-ux/tile-multiattribute-generic.src/tile-multiattribute-generic.groovy index d535647..9353c00 100644 --- a/devicetypes/smartthings/tile-ux/tile-multiattribute-generic.src/tile-multiattribute-generic.groovy +++ b/devicetypes/smartthings/tile-ux/tile-multiattribute-generic.src/tile-multiattribute-generic.groovy @@ -25,7 +25,7 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"basicTile", type:"generic", width:6, height:4) { tileAttribute("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" @@ -33,7 +33,7 @@ metadata { } multiAttributeTile(name:"sliderTile", type:"generic", width:6, height:4) { tileAttribute("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', backgroundColor:"#ffffff", nextState:"turningOn" attributeState "turningOn", label:'${name}', backgroundColor:"#79b821", nextState:"turningOff" attributeState "turningOff", label:'${name}', backgroundColor:"#ffffff", nextState:"turningOn" @@ -57,7 +57,7 @@ metadata { ] } tileAttribute("device.switch", key: "SECONDARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", backgroundColor:"#ffffff", nextState:"turningOn" attributeState "turningOn", label:'…', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" attributeState "turningOff", label:'…', action:"switch.on", backgroundColor:"#ffffff", nextState:"turningOn" diff --git a/devicetypes/smartthings/tile-ux/tile-multiattribute-videoplayer.src/tile-multiattribute-videoplayer.groovy b/devicetypes/smartthings/tile-ux/tile-multiattribute-videoplayer.src/tile-multiattribute-videoplayer.groovy index 792b458..c6dc80d 100644 --- a/devicetypes/smartthings/tile-ux/tile-multiattribute-videoplayer.src/tile-multiattribute-videoplayer.groovy +++ b/devicetypes/smartthings/tile-ux/tile-multiattribute-videoplayer.src/tile-multiattribute-videoplayer.groovy @@ -34,10 +34,10 @@ metadata { tiles(scale: 2) { multiAttributeTile(name: "videoPlayer", type: "videoPlayer", width: 6, height: 4) { tileAttribute("device.switch", key: "CAMERA_STATUS") { - attributeState("on", label: "Active", icon: "st.camera.dlink-indoor", action: "switch.off", backgroundColor: "#79b821", defaultState: true) + attributeState("on", label: "Active", icon: "st.camera.dlink-indoor", action: "switch.off", backgroundColor: "#00A0DC", defaultState: true) attributeState("off", label: "Inactive", icon: "st.camera.dlink-indoor", action: "switch.on", backgroundColor: "#ffffff") - attributeState("restarting", label: "Connecting", icon: "st.camera.dlink-indoor", backgroundColor: "#53a7c0") - attributeState("unavailable", label: "Unavailable", icon: "st.camera.dlink-indoor", action: "refresh.refresh", backgroundColor: "#F22000") + attributeState("restarting", label: "Connecting", icon: "st.camera.dlink-indoor", backgroundColor: "#00A0DC") + attributeState("unavailable", label: "Unavailable", icon: "st.camera.dlink-indoor", action: "refresh.refresh", backgroundColor: "#cccccc") } tileAttribute("device.errorMessage", key: "CAMERA_ERROR_MESSAGE") { @@ -45,10 +45,10 @@ metadata { } tileAttribute("device.camera", key: "PRIMARY_CONTROL") { - attributeState("on", label: "Active", icon: "st.camera.dlink-indoor", backgroundColor: "#79b821", defaultState: true) + attributeState("on", label: "Active", icon: "st.camera.dlink-indoor", backgroundColor: "#00A0DC", defaultState: true) attributeState("off", label: "Inactive", icon: "st.camera.dlink-indoor", backgroundColor: "#ffffff") - attributeState("restarting", label: "Connecting", icon: "st.camera.dlink-indoor", backgroundColor: "#53a7c0") - attributeState("unavailable", label: "Unavailable", icon: "st.camera.dlink-indoor", backgroundColor: "#F22000") + attributeState("restarting", label: "Connecting", icon: "st.camera.dlink-indoor", backgroundColor: "#00A0DC") + attributeState("unavailable", label: "Unavailable", icon: "st.camera.dlink-indoor", backgroundColor: "#cccccc") } tileAttribute("device.startLive", key: "START_LIVE") { @@ -72,10 +72,10 @@ metadata { multiAttributeTile(name: "videoPlayerMin", type: "videoPlayer", width: 6, height: 4) { tileAttribute("device.switch", key: "CAMERA_STATUS") { - attributeState("on", label: "Active", icon: "st.camera.dlink-indoor", action: "switch.off", backgroundColor: "#79b821", defaultState: true) + attributeState("on", label: "Active", icon: "st.camera.dlink-indoor", action: "switch.off", backgroundColor: "#00A0DC", defaultState: true) attributeState("off", label: "Inactive", icon: "st.camera.dlink-indoor", action: "switch.on", backgroundColor: "#ffffff") - attributeState("restarting", label: "Connecting", icon: "st.camera.dlink-indoor", backgroundColor: "#53a7c0") - attributeState("unavailable", label: "Unavailable", icon: "st.camera.dlink-indoor", action: "refresh.refresh", backgroundColor: "#F22000") + attributeState("restarting", label: "Connecting", icon: "st.camera.dlink-indoor", backgroundColor: "#00A0DC") + attributeState("unavailable", label: "Unavailable", icon: "st.camera.dlink-indoor", action: "refresh.refresh", backgroundColor: "#cccccc") } tileAttribute("device.errorMessage", key: "CAMERA_ERROR_MESSAGE") { @@ -83,10 +83,10 @@ metadata { } tileAttribute("device.camera", key: "PRIMARY_CONTROL") { - attributeState("on", label: "Active", icon: "st.camera.dlink-indoor", backgroundColor: "#79b821", defaultState: true) + attributeState("on", label: "Active", icon: "st.camera.dlink-indoor", backgroundColor: "#00A0DC", defaultState: true) attributeState("off", label: "Inactive", icon: "st.camera.dlink-indoor", backgroundColor: "#ffffff") - attributeState("restarting", label: "Connecting", icon: "st.camera.dlink-indoor", backgroundColor: "#53a7c0") - attributeState("unavailable", label: "Unavailable", icon: "st.camera.dlink-indoor", backgroundColor: "#F22000") + attributeState("restarting", label: "Connecting", icon: "st.camera.dlink-indoor", backgroundColor: "#00A0DC") + attributeState("unavailable", label: "Unavailable", icon: "st.camera.dlink-indoor", backgroundColor: "#cccccc") } tileAttribute("device.startLive", key: "START_LIVE") { diff --git a/devicetypes/wackford/quirky-wink-eggtray.src/quirky-wink-eggtray.groovy b/devicetypes/wackford/quirky-wink-eggtray.src/quirky-wink-eggtray.groovy index 9e8ea7f..4d9d00c 100644 --- a/devicetypes/wackford/quirky-wink-eggtray.src/quirky-wink-eggtray.groovy +++ b/devicetypes/wackford/quirky-wink-eggtray.src/quirky-wink-eggtray.groovy @@ -53,15 +53,15 @@ metadata { tiles { standardTile("inventory", "device.inventory", width: 2, height: 2){ - state "goodEggs", label : " ", unit : "" , icon:"st.quirky.egg-minder.quirky-egg-device", backgroundColor: "#53a7c0" - state "haveBadEgg", label : " ", unit : "" , icon:"st.quirky.egg-minder.quirky-egg-device", backgroundColor: "#FF1919" + state "goodEggs", label : " ", unit : "" , icon:"st.quirky.egg-minder.quirky-egg-device", backgroundColor: "#00A0DC" + state "haveBadEgg", label : " ", unit : "" , icon:"st.quirky.egg-minder.quirky-egg-device", backgroundColor: "#e86d13" state "noEggs", label : " ", unit : "" , icon:"st.quirky.egg-minder.quirky-egg-device", backgroundColor: "#ffffff" } standardTile("totalEggs", "device.totalEggs", inactiveLabel: false){ state "totalEggs", label : '${currentValue}', unit : "" , icon:"st.quirky.egg-minder.quirky-egg-count", backgroundColor: "#53a7c0" } standardTile("freshEggs", "device.freshEggs", inactiveLabel: false){ - state "freshEggs", label : '${currentValue}', unit : "" , icon:"st.quirky.egg-minder.quirky-egg-fresh", backgroundColor: "#53a7c0" + state "freshEggs", label : '${currentValue}', unit : "" , icon:"st.quirky.egg-minder.quirky-egg-fresh", backgroundColor: "#00A0DC" } standardTile("oldEggs", "device.oldEggs", inactiveLabel: false){ state "oldEggs", label : '${currentValue}', unit : "" , icon:"st.quirky.egg-minder.quirky-egg-expired", backgroundColor: "#53a7c0" diff --git a/devicetypes/wackford/quirky-wink-spotter.src/quirky-wink-spotter.groovy b/devicetypes/wackford/quirky-wink-spotter.src/quirky-wink-spotter.groovy index 8de12f2..5133606 100644 --- a/devicetypes/wackford/quirky-wink-spotter.src/quirky-wink-spotter.groovy +++ b/devicetypes/wackford/quirky-wink-spotter.src/quirky-wink-spotter.groovy @@ -54,8 +54,8 @@ metadata { tiles { standardTile("acceleration", "device.acceleration", width: 2, height: 2, canChangeIcon: true) { - state "active", label:'active', icon:"st.motion.acceleration.active", backgroundColor:"#53a7c0" - state "inactive", label:'inactive', icon:"st.motion.acceleration.inactive", backgroundColor:"#ffffff" + state "active", label:'active', icon:"st.motion.acceleration.active", backgroundColor:"#00A0DC" + state "inactive", label:'inactive', icon:"st.motion.acceleration.inactive", backgroundColor:"#cccccc" } valueTile("temperature", "device.temperature", canChangeIcon: false) { @@ -75,11 +75,11 @@ metadata { state "humidity", label:'${currentValue}% RH', unit:"" } standardTile("sound", "device.sound", inactiveLabel: false) { - state "active", label: "noise", unit:"", icon: "st.alarm.beep.beep", backgroundColor: "#53a7c0" - state "inactive", label: "quiet", unit:"", icon: "st.alarm.beep.beep", backgroundColor: "#ffffff" + state "active", label: "noise", unit:"", icon: "st.alarm.beep.beep", backgroundColor: "#00A0DC" + state "inactive", label: "quiet", unit:"", icon: "st.alarm.beep.beep", backgroundColor: "#cccccc" } standardTile("light", "device.light", inactiveLabel: false, canChangeIcon: true) { - state "active", label: "light", unit:"", icon: "st.illuminance.illuminance.bright", backgroundColor: "#53a7c0" + state "active", label: "light", unit:"", icon: "st.illuminance.illuminance.bright", backgroundColor: "#00A0DC" state "inactive", label: "dark", unit:"", icon: "st.illuminance.illuminance.dark", backgroundColor: "#B2B2B2" } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false, canChangeIcon: false) { From e54a8644c3a13886a0ecd43ab05351ab64c85894 Mon Sep 17 00:00:00 2001 From: Parijat Das Date: Mon, 20 Feb 2017 17:39:27 +0530 Subject: [PATCH 050/104] DTH UX Improvements for Page 11 of DTHs: From Danalock ... to ...ZWave-Virtual-MomentaryContactSwitch --- devicetypes/smartthings/aeon-outlet.src/aeon-outlet.groovy | 2 +- devicetypes/smartthings/danalock.src/danalock.groovy | 4 ++-- .../smartthings/dimmer-switch.src/dimmer-switch.groovy | 4 ++-- .../everspring-flood-sensor.groovy | 2 +- .../sylvania-ultra-iq.src/sylvania-ultra-iq.groovy | 2 +- .../zwave-dimmer-switch-generic.groovy | 4 ++-- .../zwave-switch-secure.src/zwave-switch-secure.groovy | 2 +- .../zwave-virtual-momentary-contact-switch.groovy | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/devicetypes/smartthings/aeon-outlet.src/aeon-outlet.groovy b/devicetypes/smartthings/aeon-outlet.src/aeon-outlet.groovy index e356fe6..1123df1 100644 --- a/devicetypes/smartthings/aeon-outlet.src/aeon-outlet.groovy +++ b/devicetypes/smartthings/aeon-outlet.src/aeon-outlet.groovy @@ -45,7 +45,7 @@ metadata { // tile definitions tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00a0dc" state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } valueTile("energy", "device.energy", decoration: "flat") { diff --git a/devicetypes/smartthings/danalock.src/danalock.groovy b/devicetypes/smartthings/danalock.src/danalock.groovy index 0cbc330..31834c1 100644 --- a/devicetypes/smartthings/danalock.src/danalock.groovy +++ b/devicetypes/smartthings/danalock.src/danalock.groovy @@ -33,10 +33,10 @@ metadata { tiles { standardTile("toggle", "device.lock", width: 2, height: 2) { - state "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#79b821", nextState:"unlocking" + state "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#00a0dc", nextState:"unlocking" state "unlocked", label:'unlocked', action:"lock.lock", icon:"st.locks.lock.unlocked", backgroundColor:"#ffffff", nextState:"locking" state "unknown", label:"unknown", action:"lock.lock", icon:"st.locks.lock.unknown", backgroundColor:"#ffffff", nextState:"locking" - state "locking", label:'locking', icon:"st.locks.lock.locked", backgroundColor:"#79b821" + state "locking", label:'locking', icon:"st.locks.lock.locked", backgroundColor:"#00a0dc" state "unlocking", label:'unlocking', icon:"st.locks.lock.unlocked", backgroundColor:"#ffffff" } standardTile("lock", "device.lock", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy b/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy index dadd3f1..ef0fddd 100644 --- a/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy +++ b/devicetypes/smartthings/dimmer-switch.src/dimmer-switch.groovy @@ -54,9 +54,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00a0dc", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00a0dc", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/everspring-flood-sensor.src/everspring-flood-sensor.groovy b/devicetypes/smartthings/everspring-flood-sensor.src/everspring-flood-sensor.groovy index f97fdde..3c72f29 100644 --- a/devicetypes/smartthings/everspring-flood-sensor.src/everspring-flood-sensor.groovy +++ b/devicetypes/smartthings/everspring-flood-sensor.src/everspring-flood-sensor.groovy @@ -33,7 +33,7 @@ metadata { multiAttributeTile(name:"water", type: "generic", width: 6, height: 4){ tileAttribute ("device.water", key: "PRIMARY_CONTROL") { attributeState "dry", icon:"st.alarm.water.dry", backgroundColor:"#ffffff" - attributeState "wet", icon:"st.alarm.water.wet", backgroundColor:"#53a7c0" + attributeState "wet", icon:"st.alarm.water.wet", backgroundColor:"#00a0dc" } } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false, width: 2, height: 2) { diff --git a/devicetypes/smartthings/sylvania-ultra-iq.src/sylvania-ultra-iq.groovy b/devicetypes/smartthings/sylvania-ultra-iq.src/sylvania-ultra-iq.groovy index 4058ff6..1916ada 100644 --- a/devicetypes/smartthings/sylvania-ultra-iq.src/sylvania-ultra-iq.groovy +++ b/devicetypes/smartthings/sylvania-ultra-iq.src/sylvania-ultra-iq.groovy @@ -36,7 +36,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00a0dc" } controlTile("levelSliderControl", "device.level", "slider", height: 2, width: 1, inactiveLabel: false) { state "level", action:"switch level.setLevel" diff --git a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy index 498e438..7c9c575 100644 --- a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy +++ b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy @@ -54,9 +54,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00a0dc", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00a0dc", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/zwave-switch-secure.src/zwave-switch-secure.groovy b/devicetypes/smartthings/zwave-switch-secure.src/zwave-switch-secure.groovy index c35ebc0..a5a1dc1 100644 --- a/devicetypes/smartthings/zwave-switch-secure.src/zwave-switch-secure.groovy +++ b/devicetypes/smartthings/zwave-switch-secure.src/zwave-switch-secure.groovy @@ -33,7 +33,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00a0dc" state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/zwave-virtual-momentary-contact-switch.src/zwave-virtual-momentary-contact-switch.groovy b/devicetypes/smartthings/zwave-virtual-momentary-contact-switch.src/zwave-virtual-momentary-contact-switch.groovy index ac54c9a..5f4db51 100644 --- a/devicetypes/smartthings/zwave-virtual-momentary-contact-switch.src/zwave-virtual-momentary-contact-switch.groovy +++ b/devicetypes/smartthings/zwave-virtual-momentary-contact-switch.src/zwave-virtual-momentary-contact-switch.groovy @@ -39,7 +39,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: '${name}', action: "momentary.push", icon: "st.switches.switch.off", backgroundColor: "#ffffff" - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00a0dc" } standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") { state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh" From 6e94220e9e96646adc0925e2ecd4d1be644e8d46 Mon Sep 17 00:00:00 2001 From: "sushant.k1" Date: Mon, 20 Feb 2017 18:08:12 +0530 Subject: [PATCH 051/104] [DVCSMP-2446] DTH UX Improvements for the following DTHs: 1. Cree Bulb 2. ZigBee Switch Power 3. Ecobee Sensor 4. Mobile Presence 5. On-Off Shield 6. Life360 User 7. WeMo Light Switch 8. Coopboss h3vx 9. Smartsense Moisture --- .../johnrucker/coopboss-h3vx.src/coopboss-h3vx.groovy | 8 ++++---- devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy | 4 ++-- .../smartthings/ecobee-sensor.src/ecobee-sensor.groovy | 4 ++-- .../smartthings/life360-user.src/life360-user.groovy | 2 +- .../mobile-presence.src/mobile-presence.groovy | 4 ++-- .../smartthings/on-off-shield.src/on-off-shield.groovy | 2 +- .../smartsense-moisture.src/smartsense-moisture.groovy | 6 +++--- .../wemo-light-switch.src/wemo-light-switch.groovy | 6 +++--- .../zigbee-switch-power.src/zigbee-switch-power.groovy | 4 ++-- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/devicetypes/johnrucker/coopboss-h3vx.src/coopboss-h3vx.groovy b/devicetypes/johnrucker/coopboss-h3vx.src/coopboss-h3vx.groovy index 510c4ef..e398e09 100644 --- a/devicetypes/johnrucker/coopboss-h3vx.src/coopboss-h3vx.groovy +++ b/devicetypes/johnrucker/coopboss-h3vx.src/coopboss-h3vx.groovy @@ -112,10 +112,10 @@ metadata { multiAttributeTile(name:"dtlsDoorCtrl", type:"generic", width:6, height:4) {tileAttribute("device.doorState", key: "PRIMARY_CONTROL") { attributeState "unknown", label: '${name}', action:"openDoor", icon: "st.secondary.tools", nextState:"Sent" - attributeState "open", label: '${name}', action:"closeDoor", icon: "st.doors.garage.garage-open", backgroundColor: "#0000ff", nextState:"Sent" - attributeState "opening", label: '${name}', action:"closeDoor", icon: "st.doors.garage.garage-opening", backgroundColor: "#ffa81e" - attributeState "closed", label: '${name}', action:"openDoor", icon: "st.doors.garage.garage-closed", backgroundColor: "#79b821", nextState:"Sent" - attributeState "closing", label: '${name}', action:"openDoor", icon: "st.doors.garage.garage-closing", backgroundColor: "#ffa81e" + attributeState "open", label: '${name}', action:"closeDoor", icon: "st.doors.garage.garage-open", backgroundColor: "#00A0DC", nextState:"Sent" + attributeState "opening", label: '${name}', action:"closeDoor", icon: "st.doors.garage.garage-opening", backgroundColor: "#00A0DC" + attributeState "closed", label: '${name}', action:"openDoor", icon: "st.doors.garage.garage-closed", backgroundColor: "#ffffff", nextState:"Sent" + attributeState "closing", label: '${name}', action:"openDoor", icon: "st.doors.garage.garage-closing", backgroundColor: "#ffffff" attributeState "jammed", label: '${name}', action:"closeDoorHiI", icon: "st.doors.garage.garage-open", backgroundColor: "#ff0000", nextState:"Sent" attributeState "forced close", label: "forced", action:"openDoor", icon: "st.doors.garage.garage-closed", backgroundColor: "#ff8000", nextState:"Sent" attributeState "fault", label: 'FAULT', action:"openDoor", icon: "st.secondary.tools", backgroundColor: "#ff0000", nextState:"Sent" diff --git a/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy b/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy index 1fc593f..e04a47a 100644 --- a/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy +++ b/devicetypes/smartthings/cree-bulb.src/cree-bulb.groovy @@ -43,9 +43,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/ecobee-sensor.src/ecobee-sensor.groovy b/devicetypes/smartthings/ecobee-sensor.src/ecobee-sensor.groovy index 381f6fc..312513b 100644 --- a/devicetypes/smartthings/ecobee-sensor.src/ecobee-sensor.groovy +++ b/devicetypes/smartthings/ecobee-sensor.src/ecobee-sensor.groovy @@ -47,8 +47,8 @@ metadata { } standardTile("motion", "device.motion") { - state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff") - state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0") + state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc") + state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00A0DC") } standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/life360-user.src/life360-user.groovy b/devicetypes/smartthings/life360-user.src/life360-user.groovy index 5b72c64..c4c2b6f 100644 --- a/devicetypes/smartthings/life360-user.src/life360-user.groovy +++ b/devicetypes/smartthings/life360-user.src/life360-user.groovy @@ -29,7 +29,7 @@ metadata { tiles { standardTile("presence", "device.presence", width: 2, height: 2, canChangeBackground: true) { - state("present", labelIcon:"st.presence.tile.mobile-present", backgroundColor:"#53a7c0") + state("present", labelIcon:"st.presence.tile.mobile-present", backgroundColor:"#00A0DC") state("not present", labelIcon:"st.presence.tile.mobile-not-present", backgroundColor:"#ffffff") } diff --git a/devicetypes/smartthings/mobile-presence.src/mobile-presence.groovy b/devicetypes/smartthings/mobile-presence.src/mobile-presence.groovy index 8ed14ab..7af7519 100644 --- a/devicetypes/smartthings/mobile-presence.src/mobile-presence.groovy +++ b/devicetypes/smartthings/mobile-presence.src/mobile-presence.groovy @@ -27,8 +27,8 @@ metadata { tiles { standardTile("presence", "device.presence", width: 2, height: 2, canChangeBackground: true) { - state("present", labelIcon:"st.presence.tile.mobile-present", backgroundColor:"#53a7c0") - state("not present", labelIcon:"st.presence.tile.mobile-not-present", backgroundColor:"#ebeef2") + state("present", labelIcon:"st.presence.tile.mobile-present", backgroundColor:"#00A0DC") + state("not present", labelIcon:"st.presence.tile.mobile-not-present", backgroundColor:"#ffffff") } main "presence" details "presence" diff --git a/devicetypes/smartthings/on-off-shield.src/on-off-shield.groovy b/devicetypes/smartthings/on-off-shield.src/on-off-shield.groovy index 5286a25..1007c3d 100644 --- a/devicetypes/smartthings/on-off-shield.src/on-off-shield.groovy +++ b/devicetypes/smartthings/on-off-shield.src/on-off-shield.groovy @@ -31,7 +31,7 @@ metadata { // UI tile definitions tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true, canChangeBackground: true) { - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } diff --git a/devicetypes/smartthings/smartsense-moisture.src/smartsense-moisture.groovy b/devicetypes/smartthings/smartsense-moisture.src/smartsense-moisture.groovy index 43577f1..ebd5888 100644 --- a/devicetypes/smartthings/smartsense-moisture.src/smartsense-moisture.groovy +++ b/devicetypes/smartthings/smartsense-moisture.src/smartsense-moisture.groovy @@ -37,13 +37,13 @@ metadata { multiAttributeTile(name:"water", type: "generic", width: 6, height: 4){ tileAttribute ("device.water", key: "PRIMARY_CONTROL") { attributeState "dry", label: "Dry", icon:"st.alarm.water.dry", backgroundColor:"#ffffff" - attributeState "wet", label: "Wet", icon:"st.alarm.water.wet", backgroundColor:"#53a7c0" + attributeState "wet", label: "Wet", icon:"st.alarm.water.wet", backgroundColor:"#00A0DC" } } standardTile("temperatureState", "device.temperature", width: 2, height: 2) { state "normal", icon:"st.alarm.temperature.normal", backgroundColor:"#ffffff" - state "freezing", icon:"st.alarm.temperature.freeze", backgroundColor:"#53a7c0" - state "overheated", icon:"st.alarm.temperature.overheat", backgroundColor:"#F80000" + state "freezing", icon:"st.alarm.temperature.freeze", backgroundColor:"#00A0DC" + state "overheated", icon:"st.alarm.temperature.overheat", backgroundColor:"#e86d13" } valueTile("temperature", "device.temperature", width: 2, height: 2) { state("temperature", label:'${currentValue}°', diff --git a/devicetypes/smartthings/wemo-light-switch.src/wemo-light-switch.groovy b/devicetypes/smartthings/wemo-light-switch.src/wemo-light-switch.groovy index ad72065..b90a577 100644 --- a/devicetypes/smartthings/wemo-light-switch.src/wemo-light-switch.groovy +++ b/devicetypes/smartthings/wemo-light-switch.src/wemo-light-switch.groovy @@ -52,11 +52,11 @@ metadata { } standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label:'${name}', action:"switch.off", icon:"st.Home.home30", backgroundColor:"#79b821", nextState:"turningOff" + state "on", label:'${name}', action:"switch.off", icon:"st.Home.home30", backgroundColor:"#00A0DC", nextState:"turningOff" state "off", label:'${name}', action:"switch.on", icon:"st.Home.home30", backgroundColor:"#ffffff", nextState:"turningOn" - state "turningOn", label:'${name}', action:"switch.off", icon:"st.Home.home30", backgroundColor:"#79b821", nextState:"turningOff" + state "turningOn", label:'${name}', action:"switch.off", icon:"st.Home.home30", backgroundColor:"#00A0DC", nextState:"turningOff" state "turningOff", label:'${name}', action:"switch.on", icon:"st.Home.home30", backgroundColor:"#ffffff", nextState:"turningOn" - state "offline", label:'${name}', icon:"st.Home.home30", backgroundColor:"#ff0000" + state "offline", label:'${name}', icon:"st.Home.home30", backgroundColor:"#cccccc" } standardTile("refresh", "device.switch", inactiveLabel: false, height: 2, width: 2, decoration: "flat") { diff --git a/devicetypes/smartthings/zigbee-switch-power.src/zigbee-switch-power.groovy b/devicetypes/smartthings/zigbee-switch-power.src/zigbee-switch-power.groovy index 8581252..9253465 100644 --- a/devicetypes/smartthings/zigbee-switch-power.src/zigbee-switch-power.groovy +++ b/devicetypes/smartthings/zigbee-switch-power.src/zigbee-switch-power.groovy @@ -33,9 +33,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("power", key: "SECONDARY_CONTROL") { From 1d2fe8af22b330932b4228b40de1c19d8f729136 Mon Sep 17 00:00:00 2001 From: Parijat Das Date: Mon, 20 Feb 2017 18:41:46 +0530 Subject: [PATCH 052/104] DTH UX Improvements for Page 12 of DTHs: From ZWave-Relay... to ...Pet-feeder-shield --- ...ro-door-window-sensor-zw5-with-temperature.groovy | 6 +++--- .../fibaro-door-window-sensor-zw5.groovy | 6 +++--- .../fibaro-flood-sensor-zw5.groovy | 8 ++++---- .../fibaro-motion-sensor-zw5.groovy | 4 ++-- .../aeon-led-bulb.src/aeon-led-bulb.groovy | 4 ++-- .../aeon-smartstrip.src/aeon-smartstrip.groovy | 4 ++-- .../centralite-thermostat.groovy | 4 ++-- .../smartsense-multi-sensor.groovy | 12 ++++++------ .../smartthings/zwave-relay.src/zwave-relay.groovy | 2 +- 9 files changed, 25 insertions(+), 25 deletions(-) diff --git a/devicetypes/fibargroup/fibaro-door-window-sensor-zw5-with-temperature.src/fibaro-door-window-sensor-zw5-with-temperature.groovy b/devicetypes/fibargroup/fibaro-door-window-sensor-zw5-with-temperature.src/fibaro-door-window-sensor-zw5-with-temperature.groovy index 56f12ac..47c3f4a 100644 --- a/devicetypes/fibargroup/fibaro-door-window-sensor-zw5-with-temperature.src/fibaro-door-window-sensor-zw5-with-temperature.groovy +++ b/devicetypes/fibargroup/fibaro-door-window-sensor-zw5-with-temperature.src/fibaro-door-window-sensor-zw5-with-temperature.groovy @@ -34,8 +34,8 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"FGK", type:"lighting", width:6, height:4) {//with generic type secondary control text is not displayed in Android app tileAttribute("device.contact", key:"PRIMARY_CONTROL") { - attributeState("open", icon:"st.contact.contact.open", backgroundColor:"#ffa81e") - attributeState("closed", icon:"st.contact.contact.closed", backgroundColor:"#79b821") + attributeState("open", icon:"st.contact.contact.open", backgroundColor:"#e86d13") + attributeState("closed", icon:"st.contact.contact.closed", backgroundColor:"#00a0dc") } tileAttribute("device.tamper", key:"SECONDARY_CONTROL") { @@ -44,7 +44,7 @@ metadata { } } - valueTile("battery", "device.battery", inactiveLabel: false, , width: 2, height: 2, decoration: "flat") { + valueTile("battery", "device.battery", inactiveLabel: false, width: 2, height: 2, decoration: "flat") { state "battery", label:'${currentValue}% battery', unit:"" } diff --git a/devicetypes/fibargroup/fibaro-door-window-sensor-zw5.src/fibaro-door-window-sensor-zw5.groovy b/devicetypes/fibargroup/fibaro-door-window-sensor-zw5.src/fibaro-door-window-sensor-zw5.groovy index f65f838..b05d959 100644 --- a/devicetypes/fibargroup/fibaro-door-window-sensor-zw5.src/fibaro-door-window-sensor-zw5.groovy +++ b/devicetypes/fibargroup/fibaro-door-window-sensor-zw5.src/fibaro-door-window-sensor-zw5.groovy @@ -31,8 +31,8 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"FGK", type:"lighting", width:6, height:4) {//with generic type secondary control text is not displayed in Android app tileAttribute("device.contact", key:"PRIMARY_CONTROL") { - attributeState("open", icon:"st.contact.contact.open", backgroundColor:"#ffa81e") - attributeState("closed", icon:"st.contact.contact.closed", backgroundColor:"#79b821") + attributeState("open", icon:"st.contact.contact.open", backgroundColor:"#e86d13") + attributeState("closed", icon:"st.contact.contact.closed", backgroundColor:"#00a0dc") } tileAttribute("device.tamper", key:"SECONDARY_CONTROL") { @@ -41,7 +41,7 @@ metadata { } } - valueTile("battery", "device.battery", inactiveLabel: false, , width: 2, height: 2, decoration: "flat") { + valueTile("battery", "device.battery", inactiveLabel: false, width: 2, height: 2, decoration: "flat") { state "battery", label:'${currentValue}% battery', unit:"" } diff --git a/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy b/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy index 4ab0479..bf691d8 100644 --- a/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy +++ b/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy @@ -32,13 +32,13 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"FGFS", type:"lighting", width:6, height:4) {//with generic type secondary control text is not displayed in Android app tileAttribute("device.water", key:"PRIMARY_CONTROL") { - attributeState("dry", icon:"st.alarm.water.dry", backgroundColor:"#79b821") - attributeState("wet", icon:"st.alarm.water.wet", backgroundColor:"#ffa81e") + attributeState("dry", icon:"st.alarm.water.dry", backgroundColor:"#00a0dc") + attributeState("wet", icon:"st.alarm.water.wet", backgroundColor:"#e86d13") } tileAttribute("device.tamper", key:"SECONDARY_CONTROL") { - attributeState("active", label:'tamper active', backgroundColor:"#53a7c0") - attributeState("inactive", label:'tamper inactive', backgroundColor:"#ffffff") + attributeState("active", label:'tamper active', backgroundColor:"#00a0dc") + attributeState("inactive", label:'tamper inactive', backgroundColor:"#cccccc") } } diff --git a/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy b/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy index ae882ed..b3be160 100644 --- a/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy +++ b/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy @@ -38,8 +38,8 @@ metadata { } tileAttribute("device.tamper", key:"SECONDARY_CONTROL") { - attributeState("active", label:'tamper active', backgroundColor:"#53a7c0") - attributeState("inactive", label:'tamper inactive', backgroundColor:"#ffffff") + attributeState("active", label:'tamper active', backgroundColor:"#00a0dc") + attributeState("inactive", label:'tamper inactive', backgroundColor:"#cccccc") } } diff --git a/devicetypes/smartthings/aeon-led-bulb.src/aeon-led-bulb.groovy b/devicetypes/smartthings/aeon-led-bulb.src/aeon-led-bulb.groovy index fbcbc40..eecaa62 100644 --- a/devicetypes/smartthings/aeon-led-bulb.src/aeon-led-bulb.groovy +++ b/devicetypes/smartthings/aeon-led-bulb.src/aeon-led-bulb.groovy @@ -37,9 +37,9 @@ metadata { } standardTile("switch", "device.switch", width: 1, height: 1, canChangeIcon: true) { - state "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + state "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00a0dc", nextState:"turningOff" state "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - state "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + state "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00a0dc", nextState:"turningOff" state "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } standardTile("reset", "device.reset", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/aeon-smartstrip.src/aeon-smartstrip.groovy b/devicetypes/smartthings/aeon-smartstrip.src/aeon-smartstrip.groovy index cfd1330..ecb698f 100644 --- a/devicetypes/smartthings/aeon-smartstrip.src/aeon-smartstrip.groovy +++ b/devicetypes/smartthings/aeon-smartstrip.src/aeon-smartstrip.groovy @@ -60,7 +60,7 @@ metadata { // tile definitions tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00a0dc" state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } valueTile("power", "device.power", decoration: "flat") { @@ -78,7 +78,7 @@ metadata { (1..4).each { n -> standardTile("switch$n", "switch$n", canChangeIcon: true) { - state "on", label: '${name}', action: "off$n", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "off$n", icon: "st.switches.switch.on", backgroundColor: "#00a0dc" state "off", label: '${name}', action: "on$n", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } valueTile("power$n", "power$n", decoration: "flat") { diff --git a/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy b/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy index 394ac2d..a2e6bda 100644 --- a/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy +++ b/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy @@ -55,13 +55,13 @@ metadata { state "fanOn", label:'${name}', action:"thermostat.setThermostatFanMode" } controlTile("heatSliderControl", "device.heatingSetpoint", "slider", height: 1, width: 2, inactiveLabel: false) { - state "setHeatingSetpoint", action:"thermostat.setHeatingSetpoint", backgroundColor:"#d04e00" + state "setHeatingSetpoint", action:"thermostat.setHeatingSetpoint", backgroundColor:"#e86d13" } valueTile("heatingSetpoint", "device.heatingSetpoint", inactiveLabel: false, decoration: "flat") { state "heat", label:'${currentValue}° heat', unit:"F", backgroundColor:"#ffffff" } controlTile("coolSliderControl", "device.coolingSetpoint", "slider", height: 1, width: 2, inactiveLabel: false) { - state "setCoolingSetpoint", action:"thermostat.setCoolingSetpoint", backgroundColor: "#1e9cbb" + state "setCoolingSetpoint", action:"thermostat.setCoolingSetpoint", backgroundColor: "#00a0dc" } valueTile("coolingSetpoint", "device.coolingSetpoint", inactiveLabel: false, decoration: "flat") { state "cool", label:'${currentValue}° cool', unit:"F", backgroundColor:"#ffffff" diff --git a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy index f9cc7f0..8229414 100644 --- a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy +++ b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy @@ -76,15 +76,15 @@ metadata { tiles(scale: 2) { multiAttributeTile(name: "status", type: "generic", width: 6, height: 4) { tileAttribute("device.status", key: "PRIMARY_CONTROL") { - attributeState "open", label: 'Open', icon: "st.contact.contact.open", backgroundColor: "#ffa81e" - attributeState "closed", label: 'Closed', icon: "st.contact.contact.closed", backgroundColor: "#79b821" - attributeState "garage-open", label: 'Open', icon: "st.doors.garage.garage-open", backgroundColor: "#ffa81e" - attributeState "garage-closed", label: 'Closed', icon: "st.doors.garage.garage-closed", backgroundColor: "#79b821" + attributeState "open", label: 'Open', icon: "st.contact.contact.open", backgroundColor: "#e86d13" + attributeState "closed", label: 'Closed', icon: "st.contact.contact.closed", backgroundColor: "#00a0dc" + attributeState "garage-open", label: 'Open', icon: "st.doors.garage.garage-open", backgroundColor: "#e86d13" + attributeState "garage-closed", label: 'Closed', icon: "st.doors.garage.garage-closed", backgroundColor: "#00a0dc" } } standardTile("contact", "device.contact", width: 2, height: 2) { - state("open", label: 'Open', icon: "st.contact.contact.open", backgroundColor: "#ffa81e") - state("closed", label: 'Closed', icon: "st.contact.contact.closed", backgroundColor: "#79b821") + state("open", label: 'Open', icon: "st.contact.contact.open", backgroundColor: "#e86d13") + state("closed", label: 'Closed', icon: "st.contact.contact.closed", backgroundColor: "#00a0dc") } standardTile("acceleration", "device.acceleration", width: 2, height: 2) { state("active", label: 'Active', icon: "st.motion.acceleration.active", backgroundColor: "#53a7c0") diff --git a/devicetypes/smartthings/zwave-relay.src/zwave-relay.groovy b/devicetypes/smartthings/zwave-relay.src/zwave-relay.groovy index 7088340..ca6365e 100644 --- a/devicetypes/smartthings/zwave-relay.src/zwave-relay.groovy +++ b/devicetypes/smartthings/zwave-relay.src/zwave-relay.groovy @@ -38,7 +38,7 @@ metadata { // tile definitions tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00a0dc" state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") { From e687e76b3e0341027f82d463e45b88e7308ca0d8 Mon Sep 17 00:00:00 2001 From: Parijat Das Date: Tue, 21 Feb 2017 11:28:27 +0530 Subject: [PATCH 053/104] DTH UX Improvements for Page 13 of DTHs: From Rgbw-Light... to ...Smartsense-Virtual-Open-Closed --- .../arrival-sensor-ha.src/arrival-sensor-ha.groovy | 2 +- .../smartthings/cooper-rf9500.src/cooper-rf9500.groovy | 2 +- .../smartthings/ge-link-bulb.src/ge-link-bulb.groovy | 4 ++-- devicetypes/smartthings/rgbw-light.src/rgbw-light.groovy | 4 ++-- .../smartsense-virtual-open-closed.groovy | 8 ++++---- .../tile-basic-carousel.src/tile-basic-carousel.groovy | 6 +++--- .../timevalve-smart.src/timevalve-smart.groovy | 8 ++++---- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy b/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy index f13b89b..e54657a 100644 --- a/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy +++ b/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy @@ -39,7 +39,7 @@ metadata { tiles { standardTile("presence", "device.presence", width: 2, height: 2, canChangeBackground: true) { - state "present", labelIcon:"st.presence.tile.present", backgroundColor:"#53a7c0" + state "present", labelIcon:"st.presence.tile.present", backgroundColor:"#00a0dc" state "not present", labelIcon:"st.presence.tile.not-present", backgroundColor:"#ffffff" } standardTile("beep", "device.beep", decoration: "flat") { diff --git a/devicetypes/smartthings/cooper-rf9500.src/cooper-rf9500.groovy b/devicetypes/smartthings/cooper-rf9500.src/cooper-rf9500.groovy index 5e22791..cace3cc 100644 --- a/devicetypes/smartthings/cooper-rf9500.src/cooper-rf9500.groovy +++ b/devicetypes/smartthings/cooper-rf9500.src/cooper-rf9500.groovy @@ -36,7 +36,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: '${name}', action: "switch.on", icon: "st.Home.home30", backgroundColor: "#ffffff" - state "on", label: '${name}', action: "switch.off", icon: "st.Home.home30", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.Home.home30", backgroundColor: "#00a0dc" } standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") { state "default", label:"", action:"refresh.refresh", icon:"st.secondary.refresh" diff --git a/devicetypes/smartthings/ge-link-bulb.src/ge-link-bulb.groovy b/devicetypes/smartthings/ge-link-bulb.src/ge-link-bulb.groovy index a2b77ad..2510a2f 100644 --- a/devicetypes/smartthings/ge-link-bulb.src/ge-link-bulb.groovy +++ b/devicetypes/smartthings/ge-link-bulb.src/ge-link-bulb.groovy @@ -61,9 +61,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00a0dc", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00a0dc", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/rgbw-light.src/rgbw-light.groovy b/devicetypes/smartthings/rgbw-light.src/rgbw-light.groovy index fd729a3..f4c3c81 100644 --- a/devicetypes/smartthings/rgbw-light.src/rgbw-light.groovy +++ b/devicetypes/smartthings/rgbw-light.src/rgbw-light.groovy @@ -37,9 +37,9 @@ metadata { } standardTile("switch", "device.switch", width: 1, height: 1, canChangeIcon: true) { - state "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + state "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00a0dc", nextState:"turningOff" state "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - state "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + state "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00a0dc", nextState:"turningOff" state "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } standardTile("reset", "device.reset", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/smartsense-virtual-open-closed.src/smartsense-virtual-open-closed.groovy b/devicetypes/smartthings/smartsense-virtual-open-closed.src/smartsense-virtual-open-closed.groovy index 5795f3e..4ffc9a2 100644 --- a/devicetypes/smartthings/smartsense-virtual-open-closed.src/smartsense-virtual-open-closed.groovy +++ b/devicetypes/smartthings/smartsense-virtual-open-closed.src/smartsense-virtual-open-closed.groovy @@ -51,12 +51,12 @@ metadata { tiles { standardTile("contact", "device.contact", width: 2, height: 2) { - state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e") - state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#79b821") + state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#e86d13") + state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#00a0dc") } standardTile("acceleration", "device.acceleration") { - state("active", label:'${name}', icon:"st.motion.acceleration.active", backgroundColor:"#53a7c0") - state("inactive", label:'${name}', icon:"st.motion.acceleration.inactive", backgroundColor:"#ffffff") + state("active", label:'${name}', icon:"st.motion.acceleration.active", backgroundColor:"#00a0dc") + state("inactive", label:'${name}', icon:"st.motion.acceleration.inactive", backgroundColor:"#cccccc") } valueTile("temperature", "device.temperature") { state("temperature", label:'${currentValue}°', diff --git a/devicetypes/smartthings/tile-ux/tile-basic-carousel.src/tile-basic-carousel.groovy b/devicetypes/smartthings/tile-ux/tile-basic-carousel.src/tile-basic-carousel.groovy index 19a9d91..0af22a2 100644 --- a/devicetypes/smartthings/tile-ux/tile-basic-carousel.src/tile-basic-carousel.groovy +++ b/devicetypes/smartthings/tile-ux/tile-basic-carousel.src/tile-basic-carousel.groovy @@ -41,9 +41,9 @@ metadata { attributeState("default", label:'${currentValue}%', unit:"%") } tileAttribute("device.thermostatOperatingState", key: "OPERATING_STATE") { - attributeState("idle", backgroundColor:"#44b621") - attributeState("heating", backgroundColor:"#ffa81e") - attributeState("cooling", backgroundColor:"#269bd2") + attributeState("idle", backgroundColor:"#ffffff") + attributeState("heating", backgroundColor:"#e86d13") + attributeState("cooling", backgroundColor:"#00a0dc") } tileAttribute("device.thermostatMode", key: "THERMOSTAT_MODE") { attributeState("off", label:'${name}') diff --git a/devicetypes/timevalve-gaslock-t-08/timevalve-smart.src/timevalve-smart.groovy b/devicetypes/timevalve-gaslock-t-08/timevalve-smart.src/timevalve-smart.groovy index 53df65a..feca26e 100644 --- a/devicetypes/timevalve-gaslock-t-08/timevalve-smart.src/timevalve-smart.groovy +++ b/devicetypes/timevalve-gaslock-t-08/timevalve-smart.src/timevalve-smart.groovy @@ -25,12 +25,12 @@ metadata { tiles (scale: 2) { multiAttributeTile(name:"statusTile", type:"generic", width:6, height:4) { tileAttribute("device.contact", key: "PRIMARY_CONTROL") { - attributeState "open", label: '${name}', action: "close", icon:"st.contact.contact.open", backgroundColor:"#ffa81e" - attributeState "closed", label:'${name}', action: "", icon:"st.contact.contact.closed", backgroundColor:"#79b821" + attributeState "open", label: '${name}', action: "close", icon:"st.contact.contact.open", backgroundColor:"#e86d13" + attributeState "closed", label:'${name}', action: "", icon:"st.contact.contact.closed", backgroundColor:"#00a0dc" } tileAttribute("device.remainingText", key: "SECONDARY_CONTROL") { - attributeState "open", label: '${currentValue}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e" - attributeState "closed", label:'', icon:"st.contact.contact.closed", backgroundColor:"#79b821" + attributeState "open", label: '${currentValue}', icon:"st.contact.contact.open", backgroundColor:"#e86d13" + attributeState "closed", label:'', icon:"st.contact.contact.closed", backgroundColor:"#00a0dc" } } From 649ed033d0abf9f9e76fd6f8d7fdab7898a7970f Mon Sep 17 00:00:00 2001 From: Scott Vlaminck Date: Tue, 21 Feb 2017 11:07:51 -0600 Subject: [PATCH 054/104] add Outlet capability --- .../smartpower-dimming-outlet.groovy | 1 + .../smartpower-outlet-v1.src/smartpower-outlet-v1.groovy | 1 + 2 files changed, 2 insertions(+) diff --git a/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy b/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy index 80ca040..ac72846 100644 --- a/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy +++ b/devicetypes/smartthings/smartpower-dimming-outlet.src/smartpower-dimming-outlet.groovy @@ -24,6 +24,7 @@ metadata { capability "Refresh" capability "Actuator" capability "Sensor" + capability "Outlet" fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0008,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "4257050-ZHAC" diff --git a/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy b/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy index 4be7bce..9df0a7f 100644 --- a/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy +++ b/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy @@ -4,6 +4,7 @@ metadata { capability "Actuator" capability "Switch" capability "Sensor" + capability "Outlet" fingerprint profileId: "0104", inClusters: "0006, 0004, 0003, 0000, 0005", outClusters: "0019", manufacturer: "Compacta International, Ltd", model: "ZBMPlug15", deviceJoinName: "SmartPower Outlet V1" } From 34f77a2989d6b01d73b5565aabee5c8bd3c0f4bd Mon Sep 17 00:00:00 2001 From: Scott Vlaminck Date: Tue, 21 Feb 2017 13:42:19 -0600 Subject: [PATCH 055/104] update Hue Bridge to use new Bridge marker capability --- devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy b/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy index e7fbce1..55b3841 100644 --- a/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy +++ b/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy @@ -7,6 +7,7 @@ metadata { // Automatically generated. Make future change here. definition (name: "Hue Bridge", namespace: "smartthings", author: "SmartThings") { + capability "Bridge" capability "Health Check" attribute "networkAddress", "string" From 400c55f4ba373c1f5d3fe2df8f449c8b3471ce4b Mon Sep 17 00:00:00 2001 From: juano2310 Date: Wed, 22 Feb 2017 11:18:59 -0500 Subject: [PATCH 056/104] DVCSMP-2288 - DVCSMP-2290 - Localization --- .../ecobee-connect.src/i18n/ar.properties | 17 ---------------- .../ecobee-connect.src/i18n/ar_AE.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/bg_BG.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/cs_CZ.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/da_DK.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/de_DE.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/el_GR.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/en_GB.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/es_ES.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/es_US.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/et_EE.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/fi_FI.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/fr-CA.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/fr_FR.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/hr_HR.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/hu_HU.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/it_IT.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/ko_KR.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/nb_NO.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/nl_NL.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/pl_PL.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/pt_BR.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/pt_PT.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/ro_RO.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/ru_RU.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/sk_SK.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/sl_SI.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/sq_AL.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/sr_RS.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/sv_SE.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/th.properties | 17 ---------------- .../ecobee-connect.src/i18n/th_TH.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/tr.properties | 17 ---------------- .../ecobee-connect.src/i18n/tr_TR.properties | 20 +++++++++++++++++++ .../ecobee-connect.src/i18n/zh_CN.properties | 20 +++++++++++++++++++ .../lifx-connect.src/i18n/ar_AE.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/bg_BG.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/cs_CZ.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/da_DK.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/de_DE.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/el_GR.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/en_GB.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/es_ES.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/es_US.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/et_EE.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/fi_FI.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/fr-CA.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/fr_FR.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/hr_HR.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/hu_HU.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/it_IT.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/ko_KR.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/nb_NO.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/nl_NL.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/pl_PL.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/pt_BR.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/pt_PT.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/ro_RO.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/ru_RU.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/sk_SK.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/sl_SI.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/sq_AL.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/sr_RS.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/sv_SE.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/th_TH.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/tr_TR.properties | 15 ++++++++++++++ .../lifx-connect.src/i18n/zh_CN.properties | 15 ++++++++++++++ .../lifx-connect.src/lifx-connect.groovy | 4 +++- 68 files changed, 1123 insertions(+), 52 deletions(-) delete mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/ar.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/ar_AE.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/bg_BG.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/cs_CZ.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/da_DK.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/de_DE.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/el_GR.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/en_GB.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/es_ES.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/es_US.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/et_EE.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/fi_FI.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/fr-CA.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/fr_FR.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/hr_HR.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/hu_HU.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/it_IT.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/ko_KR.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/nb_NO.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/nl_NL.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/pl_PL.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/pt_BR.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/pt_PT.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/ro_RO.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/ru_RU.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/sk_SK.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/sl_SI.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/sq_AL.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/sr_RS.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/sv_SE.properties delete mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/th.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/th_TH.properties delete mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/tr.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/tr_TR.properties create mode 100644 smartapps/smartthings/ecobee-connect.src/i18n/zh_CN.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/ar_AE.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/bg_BG.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/cs_CZ.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/da_DK.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/de_DE.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/el_GR.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/en_GB.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/es_ES.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/es_US.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/et_EE.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/fi_FI.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/fr-CA.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/fr_FR.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/hr_HR.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/hu_HU.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/it_IT.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/ko_KR.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/nb_NO.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/nl_NL.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/pl_PL.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/pt_BR.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/pt_PT.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/ro_RO.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/ru_RU.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/sk_SK.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/sl_SI.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/sq_AL.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/sr_RS.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/sv_SE.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/th_TH.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/tr_TR.properties create mode 100644 smartapps/smartthings/lifx-connect.src/i18n/zh_CN.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/ar.properties b/smartapps/smartthings/ecobee-connect.src/i18n/ar.properties deleted file mode 100644 index 9bee45b..0000000 --- a/smartapps/smartthings/ecobee-connect.src/i18n/ar.properties +++ /dev/null @@ -1,17 +0,0 @@ -'''Connect your Ecobee thermostat to SmartThings.'''.ar=قم بتوصيل ثرموستات Ecobee بـ SmartThings. -'''You are connected.'''.ar=أنت متصل. -'''Click to enter Ecobee Credentials'''.ar=النقر لإدخال بيانات اعتماد Ecobee -'''Login'''.ar=تسجيل الدخول -'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''.ar=انقر أدناه لتسجيل الدخول إلى خدمة ecobee والمصادقة على الوصول إلى SmartThings. تأكد من التمرير للأسفل على الصفحة ٢ والضغط على زر ”السماح“. -'''Select Your Thermostats'''.ar=تحديد الثرموستات -'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''.ar=انقر أدناه لرؤية قائمة أجهزة ثرموستات ecobee المتوفرة في حساب ecobee، وحدد الأجهزة التي ترغب في توصيلها بـ SmartThings. -'''Tap to choose'''.ar=النقر لاختيار -'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''.ar=انقر أدناه لرؤية قائمة مستشعرات ecobee المتوفرة في حساب ecobee، وحدد الأجهزة التي ترغب في توصيلها بـ SmartThings. -'''Select Ecobee Sensors ({{numFound}} found)'''.ar=تحديد مستشعرات Ecobee‏ ‎({{numFound}} found)‎ -'''Your ecobee Account is now connected to SmartThings!'''.ar=حساب ecobee متصل الآن بـ SmartThings! -'''Click 'Done' to finish setup.'''.ar=انقر فوق ”تم“ لإنهاء الإعداد. -'''The connection could not be established!'''.ar=يتعذر إنشاء الاتصال! -'''Click 'Done' to return to the menu.'''.ar=انقر فوق ”تم“ للعودة إلى القائمة. -'''{{deviceName}} is connected to SmartThings'''.ar={{deviceName}} متصل بـ SmartThings -'''{{deviceName}} is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''.ar=تم قطع اتصال {{deviceName}} بـ SmartThings، لأن بيانات اعتماد الوصول قد تغيرت أو فُقدت. يُرجى الانتقال إلى التطبيق الذكي Ecobee (Connect)‎ وإعادة إدخال بيانات اعتماد تسجيل الدخول إلى حسابك. -'''Your Ecobee thermostat'''.ar=ثرموستات Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/ar_AE.properties b/smartapps/smartthings/ecobee-connect.src/i18n/ar_AE.properties new file mode 100644 index 0000000..ed44521 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/ar_AE.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=قم بتوصيل ثرموستات Ecobee بـ SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=أنت متصل. +'''Click to enter Ecobee Credentials'''=النقر لإدخال بيانات اعتماد Ecobee +'''Login'''=تسجيل الدخول +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=انقر أدناه لتسجيل الدخول إلى خدمة ecobee والمصادقة على الوصول إلى SmartThings. تأكد من التمرير للأسفل على الصفحة ٢ والضغط على زر ”السماح“. +'''ecobee'''=ecobee +'''Select Your Thermostats'''=تحديد أجهزة الثرموستات +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=انقر أدناه لرؤية قائمة أجهزة ثرموستات ecobee المتوفرة في حساب ecobee، وحدد الأجهزة التي ترغب في توصيلها بـ SmartThings. +'''Tap to choose'''=النقر لاختيار +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=انقر أدناه لرؤية قائمة مستشعرات ecobee المتوفرة في حساب ecobee، وحدد الأجهزة التي ترغب في توصيلها بـ SmartThings. +'''Tap to choose'''=النقر لاختيار +'''Select Ecobee Sensors ({{numFound}} found)'''=تحديد مستشعرات Ecobee‏ ‎({{numFound}} found) +'''Your ecobee Account is now connected to SmartThings!'''=حساب ecobee متصل الآن بـ SmartThings! +'''Click 'Done' to finish setup.'''=انقر فوق ”تم“ لإنهاء الإعداد. +'''The connection could not be established!'''=يتعذر إنشاء الاتصال! +'''Click 'Done' to return to the menu.'''=انقر فوق ”تم“ للعودة إلى القائمة. +'''is connected to SmartThings'''={{deviceName}} متصل بـ SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=تم قطع اتصال {{deviceName}} بـ SmartThings، لأن بيانات اعتماد الوصول قد تغيرت أو فُقدت. يُرجى الانتقال إلى التطبيق الذكي Ecobee (Connect)‎ وإعادة إدخال بيانات اعتماد تسجيل الدخول إلى حسابك. +'''Your Ecobee thermostat '''=ثرموستات Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/bg_BG.properties b/smartapps/smartthings/ecobee-connect.src/i18n/bg_BG.properties new file mode 100644 index 0000000..5415a62 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/bg_BG.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Свържете термостата Ecobee към SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Свързани сте. +'''Click to enter Ecobee Credentials'''=Щракнете, за да въведете идентификационни данни за Ecobee +'''Login'''=Вход +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Докоснете по-долу, за да влезете в услугата ecobee и да упълномощите достъпа на SmartThings. Превъртете надолу в страница 2 и натиснете бутона Allow (Позволяване). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Избор на термостати +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Докоснете по-долу, за да видите списък с термостатите ecobee във вашия ecobee акаунт, и изберете онези, които искате да свържете към SmartThings. +'''Tap to choose'''=Докосване за избор +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Докоснете по-долу, за да видите списък със сензорите ecobee във вашия ecobee акаунт, и изберете онези, които искате да свържете към SmartThings. +'''Tap to choose'''=Докосване за избор +'''Select Ecobee Sensors ({{numFound}} found)'''=Избор на сензори Ecobee ({{numFound}} с намерени) +'''Your ecobee Account is now connected to SmartThings!'''=Вашият ecobee акаунт вече е свързан към SmartThings! +'''Click 'Done' to finish setup.'''=Щракнете върху Done (Готово), за да завършите настройката. +'''The connection could not be established!'''=Връзката не може да се осъществи! +'''Click 'Done' to return to the menu.'''=Щракнете върху Done (Готово), за да се върнете към менюто. +'''is connected to SmartThings'''=е свързан към SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=е прекъснат от SmartThings, тъй като идентификационните данни за достъп са променени или изгубени. Отидете в Ecobee (Connect) SmartApp и въведете отново идентификационните си данни за влизане в акаунта. +'''Your Ecobee thermostat '''=Вашият термостат Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/cs_CZ.properties b/smartapps/smartthings/ecobee-connect.src/i18n/cs_CZ.properties new file mode 100644 index 0000000..ad84594 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/cs_CZ.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Připojte termostat Ecobee k systému SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Jste připojeni. +'''Click to enter Ecobee Credentials'''=Klepněte a zadejte přihlašovací údaje Ecobee +'''Login'''=Přihlásit +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Klepnutím na následující tlačítko se přihlásíte ke službě ecobee a autorizujete přístup pro systém SmartThings. Posuňte se dolů na stránku 2 a stiskněte tlačítko „Allow“ (Povolit). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Vyberte termostaty +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Klepnutím na následující tlačítko zobrazte seznam termostatů ecobee dostupných na vašem účtu ecobee a vyberte ty, které chcete připojit k systému SmartThings. +'''Tap to choose'''=Klepnutím zvolte +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Klepnutím na následující tlačítko zobrazte seznam senzorů ecobee dostupných na vašem účtu ecobee a vyberte ty, které chcete připojit k systému SmartThings. +'''Tap to choose'''=Klepnutím zvolte +'''Select Ecobee Sensors ({{numFound}} found)'''=Vyberte senzory Ecobee (nalezeno {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=Účet ecobee je nyní připojen k systému SmartThings! +'''Click 'Done' to finish setup.'''=Dokončete nastavení klepnutím na tlačítko „Done“ (Hotovo). +'''The connection could not be established!'''=Připojení nelze navázat! +'''Click 'Done' to return to the menu.'''=Klepnutím na tlačítko „Done“ (Hotovo) se vrátíte do menu. +'''is connected to SmartThings'''=je připojen ke SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=byl odpojen od systému SmartThings, protože přístupové přihlašovací údaje byly změněny nebo ztraceny. Přejděte do Ecobee (Connect) SmartApp a znovu zadejte své přihlašovací údaje k účtu. +'''Your Ecobee thermostat '''=Termostat Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/da_DK.properties b/smartapps/smartthings/ecobee-connect.src/i18n/da_DK.properties new file mode 100644 index 0000000..3ff6127 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/da_DK.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Forbind din Ecobee-termostat med SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Du er nu forbundet. +'''Click to enter Ecobee Credentials'''=Klik for at indtaste Ecobee-legitimationsoplysninger +'''Login'''=Log ind +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Tryk nedenfor for at logge ind på din ecobee-tjeneste og godkende SmartThings-adgang. Sørg for at rulle ned på side 2 og trykke på knappen “Allow” (Tillad). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Vælg dine termostater +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Tryk herunder for at se listen over ecobee-termostater, der er tilgængelige på din ecobee-konto, og vælg dem, du vil forbinde med SmartThings. +'''Tap to choose'''=Tryk for at vælge +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Tryk herunder for at se listen over ecobee-sensorer, der er tilgængelige på din ecobee-konto, og vælg dem, du vil forbinde med SmartThings. +'''Tap to choose'''=Tryk for at vælge +'''Select Ecobee Sensors ({{numFound}} found)'''=Vælg Ecobee-sensorer ({{numFound}} fundet) +'''Your ecobee Account is now connected to SmartThings!'''=Din ecobee-konto er nu forbundet med SmartThings! +'''Click 'Done' to finish setup.'''=Klik på “Done” (Udført) for at afslutte konfigurationen. +'''The connection could not be established!'''=Der kunne ikke oprettes forbindelse! +'''Click 'Done' to return to the menu.'''=Klik på “Done” (Udført) for at vende tilbage til menuen. +'''is connected to SmartThings'''=er forbundet med SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=er koblet fra SmartThings, fordi adgangslegitimationsoplysningerne er ændret eller gået tabt. Gå til Ecobee (Connect (Forbind)) SmartApp, og indtast dine kontologinoplysninger igen. +'''Your Ecobee thermostat '''=Din Ecobee-termostat diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/de_DE.properties b/smartapps/smartthings/ecobee-connect.src/i18n/de_DE.properties new file mode 100644 index 0000000..1c4318d --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/de_DE.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Verbinden Sie Ihr Ecobee-Thermostat mit SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Sie sind verbunden. +'''Click to enter Ecobee Credentials'''=Hier klicken, um die ecobee-Zugangsdaten einzugeben. +'''Login'''=Anmeldung +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Tippen Sie unten, um sich am ecobee-Dienst anzumelden und den SmartThings-Zugriff zu autorisieren. Stellen Sie sicher, dass Sie bis auf Seite 2 herunterscrollen und auf die Schaltfläche „Allow“ (Zulassen) tippen. +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Ihre Thermostate auswählen +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Tippen Sie unten, um eine Liste der ecobee-Thermostate anzuzeigen, die in Ihrem ecobee-Konto verfügbar sind, und wählen Sie diejenigen aus, mit denen Sie eine Verbindung zu SmartThings herstellen möchten. +'''Tap to choose'''=Zur Auswahl tippen +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Tippen Sie unten, um eine Liste der ecobee-Sensoren anzuzeigen, die in Ihrem ecobee-Konto verfügbar sind, und wählen Sie diejenigen aus, mit denen Sie eine Verbindung zu SmartThings herstellen möchten. +'''Tap to choose'''=Zur Auswahl tippen +'''Select Ecobee Sensors ({{numFound}} found)'''=ecobee-Sensoren auswählen ({{numFound}} gefunden) +'''Your ecobee Account is now connected to SmartThings!'''=Ihr ecobee-Konto ist jetzt mit SmartThings verbunden! +'''Click 'Done' to finish setup.'''=Klicken Sie auf „Done“ (OK), um die Einrichtung abzuschließen. +'''The connection could not be established!'''=Es konnte keine Verbindung hergestellt werden! +'''Click 'Done' to return to the menu.'''=Klicken Sie auf „Done“ (OK), um zum Menü zurückzukehren. +'''is connected to SmartThings'''=ist mit SmartThings verbunden +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=ist von SmartThings getrennt, da die Zugangsdaten für den Zugriff geändert wurden oder verloren gingen. Wechseln Sie zur ecobee (Connect)-SmartApp und geben Sie Ihre Kontozugangsdaten erneut ein. +'''Your Ecobee thermostat '''=Ihr ecobee-Thermostat diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/el_GR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/el_GR.properties new file mode 100644 index 0000000..3d3268b --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/el_GR.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Συνδέστε το θερμοστάτη Ecobee στο SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Έχετε συνδεθεί. +'''Click to enter Ecobee Credentials'''=Κάντε κλικ για να καταχωρήσετε διαπιστευτήρια Ecobee +'''Login'''=Σύνδεση +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Πατήστε παρακάτω για να συνδεθείτε στην υπηρεσία ecobee και να δώσετε εξουσιοδότηση πρόσβασης για το SmartThings. Κάνετε κύλιση προς τα κάτω στη σελίδα 2 και πατήστε το κουμπί "Επιτρ.". +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Επιλέξτε τους θερμοστάτες σας +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Πατήστε παρακάτω για να δείτε τη λίστα με τους θερμοστάτες ecobee που είναι διαθέσιμοι στο λογαριασμό ecobee και να επιλέξετε αυτούς που θέλετε να συνδέσετε στο SmartThings. +'''Tap to choose'''=Πατήστε για να επιλέξετε +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Πατήστε παρακάτω για να δείτε τη λίστα με τους αισθητήρες ecobee που είναι διαθέσιμοι στο λογαριασμό ecobee και να επιλέξετε αυτούς που θέλετε να συνδέσετε στο SmartThings. +'''Tap to choose'''=Πατήστε για να επιλέξετε +'''Select Ecobee Sensors ({{numFound}} found)'''=Επιλογή αισθητήρων Ecobee (βρέθηκαν {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=Ο λογαριασμός σας στο ecobee έχει τώρα συνδεθεί στο SmartThings! +'''Click 'Done' to finish setup.'''=Πατήστε "Done" (Τέλος) για να ολοκληρωθεί η ρύθμιση. +'''The connection could not be established!'''=Δεν ήταν δυνατή η δημιουργία σύνδεσης! +'''Click 'Done' to return to the menu.'''=Κάντε κλικ στο "Done" (Τέλος) για να επιστρέψετε στο μενού. +'''is connected to SmartThings'''=συνδέθηκε στο SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=αποσυνδέθηκε από το SmartThings, επειδή τα διαπιστευτήρια πρόσβασης άλλαξαν ή έχουν χαθεί. Μεταβείτε στην εφαρμογή Ecobee (Connect) SmartApp και καταχωρήστε ξανά τα διαπιστευτήρια σύνδεσης για το λογαριασμό σας. +'''Your Ecobee thermostat '''=Θερμοστάτης Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/en_GB.properties b/smartapps/smartthings/ecobee-connect.src/i18n/en_GB.properties new file mode 100644 index 0000000..578e383 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/en_GB.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Connect your Ecobee thermostat to SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=You are connected. +'''Click to enter Ecobee Credentials'''=Click to enter Ecobee Credentials +'''Login'''=Login +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Tap below to log in to the ecobee service and authorise SmartThings access. Be sure to scroll down on page 2 and press the ’Allow’ button. +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Select Your Thermostats +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings. +'''Tap to choose'''=Tap to choose +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings. +'''Tap to choose'''=Tap to choose +'''Select Ecobee Sensors ({{numFound}} found)'''=Select Ecobee Sensors ({{numFound}} found) +'''Your ecobee Account is now connected to SmartThings!'''=Your ecobee Account is now connected to SmartThings! +'''Click 'Done' to finish setup.'''=Click ’Done’ to finish setup. +'''The connection could not be established!'''=The connection could not be established! +'''Click 'Done' to return to the menu.'''=Click ’Done’ to return to the menu. +'''is connected to SmartThings'''=is connected to SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials. +'''Your Ecobee thermostat '''=Your Ecobee thermostat diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/es_ES.properties b/smartapps/smartthings/ecobee-connect.src/i18n/es_ES.properties new file mode 100644 index 0000000..e8ff069 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/es_ES.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Conecte su termostato Ecobee a SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Está conectado. +'''Click to enter Ecobee Credentials'''=Haga clic para introducir las credenciales de Ecobee +'''Login'''=Inicio de sesión +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Pulse a continuación para iniciar sesión en el servicio de ecobee y autorizar el acceso a SmartThings. Asegúrese de desplazarse hacia abajo a la página 2 y pulsar el botón “Allow” (Permitir). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Seleccionar los termostatos +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Pulse a continuación para ver la lista de termostatos ecobee disponibles en su cuenta de ecobee y seleccione los que quiera conectar a SmartThings. +'''Tap to choose'''=Pulsar para seleccionar +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Pulse a continuación para ver la lista de sensores ecobee disponibles en su cuenta de ecobee y seleccione los que quiera conectar a SmartThings. +'''Tap to choose'''=Pulsar para seleccionar +'''Select Ecobee Sensors ({{numFound}} found)'''=Seleccionar sensores de Ecobee ({{numFound}} encontrados) +'''Your ecobee Account is now connected to SmartThings!'''=¡Su cuenta de ecobee ya está conectada a SmartThings! +'''Click 'Done' to finish setup.'''=Haga clic en “Done” (Hecho) para finalizar la configuración. +'''The connection could not be established!'''=¡No se ha podido establecer la conexión! +'''Click 'Done' to return to the menu.'''=Haga clic en “Done” (Hecho) para volver al menú. +'''is connected to SmartThings'''=está conectado a SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=está desconectado de SmartThings porque se han cambiado o perdido las credenciales de acceso. Vaya a la aplicación inteligente de Ecobee (Conectar) y vuelva a introducir las credenciales de inicio de sesión de su cuenta. +'''Your Ecobee thermostat '''=Su termostato Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/es_US.properties b/smartapps/smartthings/ecobee-connect.src/i18n/es_US.properties new file mode 100644 index 0000000..761224e --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/es_US.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Conecte el termostato Ecobee a SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Está conectado. +'''Click to enter Ecobee Credentials'''=Haga clic para introducir las credenciales de Ecobee +'''Login'''=Inicio de sesión +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Pulse a continuación para iniciar sesión en el servicio de ecobee y otorgar acceso a SmartThings. Asegúrese de desplazarse hacia abajo en la página 2 y de presionar el botón 'Allow' ('Permitir'). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Seleccionar Your Thermostats (Sus termostatos) +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Pulse a continuación para ver la lista de termostatos ecobee disponibles en su cuenta de ecobee y seleccione los que desea conectar a SmartThings. +'''Tap to choose'''=Pulsar para elegir +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Pulse a continuación para ver la lista de sensores ecobee disponibles en su cuenta de ecobee y seleccione los que desea conectar a SmartThings. +'''Tap to choose'''=Pulsar para elegir +'''Select Ecobee Sensors ({{numFound}} found)'''=Seleccionar sensores Ecobee (hay {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=¡Su cuenta de ecobee ahora está conectada a SmartThings! +'''Click 'Done' to finish setup.'''=Haga clic en 'Done' ('Listo') para finalizar la configuración. +'''The connection could not be established!'''=¡No fue posible establecer la conexión! +'''Click 'Done' to return to the menu.'''=Haga clic en 'Done' ('Listo') para volver al menú. +'''is connected to SmartThings'''=está conectado a SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=no está conectado a SmartThings debido a que la credencial de acceso se cambió o se perdió. Vaya a la SmartApp de Ecobee (Connect) y vuelva a introducir las credenciales de inicio de sesión de su cuenta. +'''Your Ecobee thermostat '''=Su termostato Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/et_EE.properties b/smartapps/smartthings/ecobee-connect.src/i18n/et_EE.properties new file mode 100644 index 0000000..2244b2a --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/et_EE.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Ühendage oma termostaat Ecobee teenusega SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Ühendus on loodud. +'''Click to enter Ecobee Credentials'''=Klõpsake, et sisestada teenuse Ecobee volitused +'''Login'''=Sisselogimine +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Toksake all, et logida sisse teenusesse ecobee ja autoriseerida teenuse SmartThings juurdepääs. Kerige kindlasti alla lehele 2 ja vajutage nuppu Luba. +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Valige oma termostaadid +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Toksake all, et näha oma ecobee kontole registreeritud ecobee termostaate ja valige need, mida soovite ühendada teenusega SmartThings. +'''Tap to choose'''=Toksake, et valida +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Toksake all, et näha oma ecobee kontole registreeritud ecobee andureid ja valige need, mida soovite ühendada teenusega SmartThings. +'''Tap to choose'''=Toksake, et valida +'''Select Ecobee Sensors ({{numFound}} found)'''=Valige Ecobee andurid (leiti {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=Teie ecobee konto on nüüd ühendatud teenusega SmartThings! +'''Click 'Done' to finish setup.'''=Klõpsake valikut Valmis, et seadistamine lõpule viia. +'''The connection could not be established!'''=Ühenduse loomine nurjus! +'''Click 'Done' to return to the menu.'''=Klõpsake valikut Valmis, et naasta menüüsse. +'''is connected to SmartThings'''=on ühendatud teenusega SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=on teenusest SmartThings lahti ühendatud, kuna juurdepääsu volitus muutus või kadus. Avage rakendus Ecobee (Connect) SmartApp ja sisestage uuesti oma konto sisselogimisandmed. +'''Your Ecobee thermostat '''=Teie Ecobee termostaat diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/fi_FI.properties b/smartapps/smartthings/ecobee-connect.src/i18n/fi_FI.properties new file mode 100644 index 0000000..5f38b39 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/fi_FI.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Yhdistä Ecobee-termostaattisi SmartThingsiin. +'''ecobee'''=ecobee +'''You are connected.'''=Yhteys muodostettu. +'''Click to enter Ecobee Credentials'''=Napsauta ja anna Ecobee-tunnistetiedot +'''Login'''=Kirjautuminen +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Kirjaudu ecobee-palveluun ja myönnä SmartThingsille käyttöoikeudet napauttamalla alla. Vieritä alas sivulle 2 ja paina Allow (Salli) -painiketta. +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Valitse termostaatit +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Napauttamalla alla voit tuoda ecobee-tililläsi käytettävissä olevien ecobee-termostaattien luettelon näyttöön ja valita SmartThingsiin yhdistettävät laitteet. +'''Tap to choose'''=Valitse napauttamalla +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Napauttamalla alla voit tuoda ecobee-tililläsi käytettävissä olevien ecobee-tunnistimien luettelon näyttöön ja valita SmartThingsiin yhdistettävät laitteet. +'''Tap to choose'''=Valitse napauttamalla +'''Select Ecobee Sensors ({{numFound}} found)'''=Valitse Ecobee-tunnistimet ({{numFound}} löydetty) +'''Your ecobee Account is now connected to SmartThings!'''=ecobee-tilisi on nyt yhdistetty SmartThingsiin! +'''Click 'Done' to finish setup.'''=Viimeistele asennus napsauttamalla Done (Valmis). +'''The connection could not be established!'''=Yhteyden muodostaminen epäonnistui! +'''Click 'Done' to return to the menu.'''=Palaa valikkoon napsauttamalla Done (Valmis). +'''is connected to SmartThings'''=on yhdistetty SmartThingsiin +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=ei enää ole yhteydessä SmartThingsiin, sillä käyttötunnukset ovat muuttuneet tai kadonneet. Siirry Ecobee (Connect) SmartAppiin ja anna tilisi kirjautumistiedot uudelleen. +'''Your Ecobee thermostat '''=Ecobee-termostaattisi diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/fr-CA.properties b/smartapps/smartthings/ecobee-connect.src/i18n/fr-CA.properties new file mode 100644 index 0000000..e1b7486 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/fr-CA.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Connectez votre thermostat Ecobee à SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Vous êtes connecté. +'''Click to enter Ecobee Credentials'''=Cliquez pour saisir les informations d'identification Ecobee +'''Login'''=Connexion +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Appuyez ci-dessous pour vous connecter au service ecobee et autoriser l'accès pour SmartThings. Faites défiler l'écran jusqu'en bas de la page 2 et appuyez sur le bouton Allow (Autoriser). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Sélection de vos thermostats +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Appuyez ci-dessous pour afficher la liste des thermostats ecobee disponibles dans votre compte ecobee et sélectionner ceux que vous souhaitez connecter à SmartThings. +'''Tap to choose'''=Appuyez pour sélectionner +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Appuyez ci-dessous pour afficher la liste des capteurs ecobee disponibles dans votre compte ecobee et sélectionner ceux que vous souhaitez connecter à SmartThings. +'''Tap to choose'''=Appuyez pour sélectionner +'''Select Ecobee Sensors ({{numFound}} found)'''=Sélection des capteurs Ecobee ({{numFound}} trouvé(s)) +'''Your ecobee Account is now connected to SmartThings!'''=Votre compte ecobee est maintenant connecté à SmartThings ! +'''Click 'Done' to finish setup.'''=Cliquez sur Done (Terminé) pour terminer la configuration. +'''The connection could not be established!'''=La connexion n'a pas pu être établie ! +'''Click 'Done' to return to the menu.'''=Cliquez sur Done (Terminé) pour revenir au menu. +'''is connected to SmartThings'''=est connecté à SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=est déconnecté de SmartThings, car les identifiants d'accès ont été modifiés ou perdus. Accédez à la SmartApp Ecobee (Connect) et saisissez à nouveau les informations de connexion à votre compte. +'''Your Ecobee thermostat '''=Votre thermostat Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/fr_FR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/fr_FR.properties new file mode 100644 index 0000000..e1b7486 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/fr_FR.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Connectez votre thermostat Ecobee à SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Vous êtes connecté. +'''Click to enter Ecobee Credentials'''=Cliquez pour saisir les informations d'identification Ecobee +'''Login'''=Connexion +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Appuyez ci-dessous pour vous connecter au service ecobee et autoriser l'accès pour SmartThings. Faites défiler l'écran jusqu'en bas de la page 2 et appuyez sur le bouton Allow (Autoriser). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Sélection de vos thermostats +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Appuyez ci-dessous pour afficher la liste des thermostats ecobee disponibles dans votre compte ecobee et sélectionner ceux que vous souhaitez connecter à SmartThings. +'''Tap to choose'''=Appuyez pour sélectionner +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Appuyez ci-dessous pour afficher la liste des capteurs ecobee disponibles dans votre compte ecobee et sélectionner ceux que vous souhaitez connecter à SmartThings. +'''Tap to choose'''=Appuyez pour sélectionner +'''Select Ecobee Sensors ({{numFound}} found)'''=Sélection des capteurs Ecobee ({{numFound}} trouvé(s)) +'''Your ecobee Account is now connected to SmartThings!'''=Votre compte ecobee est maintenant connecté à SmartThings ! +'''Click 'Done' to finish setup.'''=Cliquez sur Done (Terminé) pour terminer la configuration. +'''The connection could not be established!'''=La connexion n'a pas pu être établie ! +'''Click 'Done' to return to the menu.'''=Cliquez sur Done (Terminé) pour revenir au menu. +'''is connected to SmartThings'''=est connecté à SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=est déconnecté de SmartThings, car les identifiants d'accès ont été modifiés ou perdus. Accédez à la SmartApp Ecobee (Connect) et saisissez à nouveau les informations de connexion à votre compte. +'''Your Ecobee thermostat '''=Votre thermostat Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/hr_HR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/hr_HR.properties new file mode 100644 index 0000000..68794da --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/hr_HR.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Povežite termostat Ecobee s uslugom SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Povezani ste. +'''Click to enter Ecobee Credentials'''=Kliknite za unos podataka za prijavu za Ecobee +'''Login'''=Prijava +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Dodirnite u nastavku da biste se prijavili u uslugu ecobee i odobrili pristup za SmartThings. Na 2. se stranici pomaknite prema dolje i pritisnite gumb „Allow” (Dopusti). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Odaberite termostate +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Dodirnite u nastavku da biste vidjeli popis termostata ecobee dostupnih na vašem računu za ecobee i odaberite one koje želite povezati s uslugom SmartThings. +'''Tap to choose'''=Dodirnite za odabir +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Dodirnite u nastavku da biste vidjeli popis senzora ecobee dostupnih na vašem računu za ecobee i odaberite one koje želite povezati s uslugom SmartThings. +'''Tap to choose'''=Dodirnite za odabir +'''Select Ecobee Sensors ({{numFound}} found)'''=Odaberite senzore Ecobee (pronađeno: {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=Račun za ecobee sada je povezan s uslugom SmartThings! +'''Click 'Done' to finish setup.'''=Kliknite „Done” (Gotovo) da biste dovršili postavljanje. +'''The connection could not be established!'''=Veza se nije uspostavila! +'''Click 'Done' to return to the menu.'''=Kliknite „Done” (Gotovo) za vraćanje na izbornik. +'''is connected to SmartThings'''=povezan je s uslugom SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=nije povezan s uslugom SmartThings jer su se pristupni podaci promijenili ili izgubili. Idite na Ecobee (Connect) SmartApp i ponovno unesite podatke za prijavu na račun. +'''Your Ecobee thermostat '''=Termostat Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/hu_HU.properties b/smartapps/smartthings/ecobee-connect.src/i18n/hu_HU.properties new file mode 100644 index 0000000..1ed4b71 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/hu_HU.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Ecobee termosztátot csatlakoztathat a SmartThings rendszerhez. +'''ecobee'''=ecobee +'''You are connected.'''=Kapcsolódott. +'''Click to enter Ecobee Credentials'''=Kattintson az Ecobee-hitelesítőadatok megadásához +'''Login'''=Bejelentkezés +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Az alábbi hivatkozás megérintésével bejelentkezhet az ecobee szolgáltatásba, és engedélyezheti a SmartThings-hozzáférést. Görgessen le a 2. oldalon, és nyomja meg az „Allow” (Engedélyezés) gombot. +'''ecobee'''=ecobee +'''Select Your Thermostats'''=A termosztátok kiválasztása +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Az alábbi hivatkozás megérintésével megjelenítheti az ecobee-fiókjában rendelkezésre álló ecobee termosztátok listáját, és kiválaszthatja azokat, amelyeket csatlakoztatni szeretne a SmartThings rendszerhez. +'''Tap to choose'''=Érintse meg a kiválasztáshoz +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Az alábbi hivatkozás megérintésével megjelenítheti az ecobee-fiókjában rendelkezésre álló ecobee érzékelők listáját, és kiválaszthatja azokat, amelyeket csatlakoztatni szeretne a SmartThings rendszerhez. +'''Tap to choose'''=Érintse meg a kiválasztáshoz +'''Select Ecobee Sensors ({{numFound}} found)'''=Ecobee érzékelők kiválasztása ({{numFound}} találat) +'''Your ecobee Account is now connected to SmartThings!'''=Csatlakoztatta ecobee-fiókját a SmartThings rendszerhez! +'''Click 'Done' to finish setup.'''=A telepítés befejezéséhez kattintson a „Done” (Kész) gombra. +'''The connection could not be established!'''=Nem sikerült kapcsolatot létesíteni! +'''Click 'Done' to return to the menu.'''=A menühöz való visszatéréshez kattintson a „Done” (Kész) gombra. +'''is connected to SmartThings'''=kapcsolódott a SmartThings rendszerhez +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=le lett választva a SmartThings rendszerről, mert megváltoztak vagy elvesztek a hozzáférési hitelesítő adatok. Adja meg újra a fiókja bejelentkezési hitelesítő adatait a Ecobee (Connect) SmartApp segítségével. +'''Your Ecobee thermostat '''=Az Ön Ecobee termosztátja diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/it_IT.properties b/smartapps/smartthings/ecobee-connect.src/i18n/it_IT.properties new file mode 100644 index 0000000..1265151 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/it_IT.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Connettete il termostato Ecobee a SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Connessione effettuata. +'''Click to enter Ecobee Credentials'''=Fate clic per inserire le credenziali Ecobee +'''Login'''=Accesso +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Toccate di seguito per accedere al servizio ecobee e autorizzare l'accesso a SmartThings. Scorrete fino in fondo alla pagina 2 e premete il pulsante “Allow” (Consenti). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Selezionate i termostati +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Toccate di seguito per visualizzare l'elenco dei termostati ecobee disponibili nell'account ecobee e selezionate quelli che volete connettere a SmartThings. +'''Tap to choose'''=Toccate per scegliere +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Toccate di seguito per visualizzare l'elenco dei sensori ecobee disponibili nell'account ecobee e selezionate quelli che volete connettere a SmartThings. +'''Tap to choose'''=Toccate per scegliere +'''Select Ecobee Sensors ({{numFound}} found)'''=Selezionate i sensori Ecobee ({{numFound}} trovati) +'''Your ecobee Account is now connected to SmartThings!'''=L'account ecobee è ora connesso a SmartThings. +'''Click 'Done' to finish setup.'''=Fate clic su “Done” (Fatto) per terminare la configurazione. +'''The connection could not be established!'''=Non è stato possibile stabilire la connessione. +'''Click 'Done' to return to the menu.'''=Fate clic su “Done” (Fatto) per tornare al menu. +'''is connected to SmartThings'''=connesso a SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=disconnesso da SmartThings. Le credenziali di accesso sono state modificate o sono andate perse. Andate alla SmartApp di Ecobee (Connect) e inserite nuovamente le credenziali di accesso all'account. +'''Your Ecobee thermostat '''=Il termostato Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/ko_KR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/ko_KR.properties new file mode 100644 index 0000000..71b56d1 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/ko_KR.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Ecobee 온도조절기를 SmartThings에 연결하세요. +'''ecobee'''=Ecobee +'''You are connected.'''=연결되었습니다. +'''Click to enter Ecobee Credentials'''=Ecobee 로그인 정보를 입력하려면 클릭하세요 +'''Login'''=로그인 +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Ecobee 서비스에 로그인하여 SmartThings를 사용할 수 있도록 인증하려면 아래를 누르세요. 2페이지에서 아래로 스크롤한 후 [허용]을 누르세요. +'''ecobee'''=Ecobee +'''Select Your Thermostats'''=온도조절기 선택 +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Ecobee 계정에 등록된 Ecobee 온도조절기 목록을 확인하고 SmartThings에 연결할 기기를 선택하려면 아래를 누르세요. +'''Tap to choose'''=눌러서 선택 +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Ecobee 계정에 등록된 Ecobee 센서 목록을 확인하고 SmartThings에 연결할 기기를 선택하려면 아래를 누르세요. +'''Tap to choose'''=눌러서 선택 +'''Select Ecobee Sensors ({{numFound}} found)'''=Ecobee 센서 선택 ({{numFound}}개 찾음) +'''Your ecobee Account is now connected to SmartThings!'''=Ecobee 계정이 SmartThings에 연결되었습니다! +'''Click 'Done' to finish setup.'''=설정을 완료하려면 [완료]를 클릭하세요. +'''The connection could not be established!'''=연결을 실행할 수 없습니다! +'''Click 'Done' to return to the menu.'''=메뉴로 돌아가려면 [완료]를 클릭하세요. +'''is connected to SmartThings'''=이(가) SmartThings에 연결되었습니다 +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=이(가) SmartThings에서 연결 해제되었습니다. 로그인 정보가 변경되었거나 유실되었습니다. Ecobee (연결) 스마트앱에서 계정의 로그인 정보를 다시 입력하세요. +'''Your Ecobee thermostat '''=Ecobee 온도조절기 diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/nb_NO.properties b/smartapps/smartthings/ecobee-connect.src/i18n/nb_NO.properties new file mode 100644 index 0000000..612517b --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/nb_NO.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Koble Ecobee-termostaten til SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Du er tilkoblet. +'''Click to enter Ecobee Credentials'''=Klikk for å angi Ecobee-informasjon +'''Login'''=Logg på +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Trykk nedenfor for å logge på ecobee-tjenesten og godkjenne SmartThings-tilgang. Pass på å bla ned på side 2 og trykke på Allow (Tillat)-knappen. +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Velg termostatene dine +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Trykk nedenfor for å se listen over ecobee-termostatene som er tilgjengelige i ecobee-kontoen din, og velg de du vil koble til SmartThings. +'''Tap to choose'''=Trykk for å velge +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Trykk nedenfor for å se listen over ecobee-sensorene som er tilgjengelige i ecobee-kontoen din, og velg de du vil koble til SmartThings. +'''Tap to choose'''=Trykk for å velge +'''Select Ecobee Sensors ({{numFound}} found)'''=Velg Ecobee-sensorer (fant {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=ecobee-kontoen din er nå koblet til SmartThings! +'''Click 'Done' to finish setup.'''=Klikk på Done (Ferdig) for å fullføre oppsettet. +'''The connection could not be established!'''=Kunne ikke opprette tilkoblingen! +'''Click 'Done' to return to the menu.'''=Klikk på Done (Ferdig) for å gå tilbake til menyen. +'''is connected to SmartThings'''=er koblet til SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=er koblet fra SmartThings fordi tilgangsinformasjonen ble endret eller mistet. Gå til Ecobee (Connect) SmartApp, og angi påloggingsinformasjonen for kontoen på nytt. +'''Your Ecobee thermostat '''=Ecobee-termostaten diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/nl_NL.properties b/smartapps/smartthings/ecobee-connect.src/i18n/nl_NL.properties new file mode 100644 index 0000000..1995a00 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/nl_NL.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Verbind uw Ecobee-thermostaat met SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=U bent verbonden. +'''Click to enter Ecobee Credentials'''=Klik om Ecobee-inloggegevens in te voeren +'''Login'''=Inloggen +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Tik hieronder om in te loggen bij uw ecobee-service en toegang door SmartThings toe te staan. Scrol naar beneden op pagina 2 en druk op de knop Allow (Toestaan). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Selecteer uw thermostaten +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Tik hieronder om de lijst met ecobee-thermostaten in uw ecobee-account weer te geven en de apparaten te selecteren die u wilt verbinden met SmartThings. +'''Tap to choose'''=Tik om te kiezen +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Tik hieronder om de lijst met ecobee-sensoren in uw ecobee-account weer te geven en de apparaten te selecteren die u wilt verbinden met SmartThings. +'''Tap to choose'''=Tik om te kiezen +'''Select Ecobee Sensors ({{numFound}} found)'''=Selecteer Ecobee-sensoren ({{numFound}} gevonden) +'''Your ecobee Account is now connected to SmartThings!'''=Uw ecobee-account is nu verbonden met SmartThings. +'''Click 'Done' to finish setup.'''=Klik op Done (Gereed) om het instellen te voltooien. +'''The connection could not be established!'''=Er kan geen verbinding worden gemaakt. +'''Click 'Done' to return to the menu.'''=Klik op Done (Gereed) om terug te gaan naar het menu. +'''is connected to SmartThings'''=is verbonden met SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=-verbinding met SmartThings is verbroken, omdat de inloggegevens zijn gewijzigd of verloren zijn gegaan. Ga naar de Ecobee (Connect) SmartApp en voer de inloggegevens voor uw account opnieuw in. +'''Your Ecobee thermostat '''=Uw Ecobee-thermostaat diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/pl_PL.properties b/smartapps/smartthings/ecobee-connect.src/i18n/pl_PL.properties new file mode 100644 index 0000000..be1331a --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/pl_PL.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Połącz termostat Ecobee ze SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Połączono. +'''Click to enter Ecobee Credentials'''=Kliknij, aby wprowadzić poświadczenia Ecobee +'''Login'''=Logowanie +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Dotknij poniżej, aby zalogować się do usługi ecobee i autoryzować dostęp SmartThings. Przewiń w dół na stronie 2 i naciśnij przycisk „Allow” (Zezwól). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Wybierz termostaty +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Dotknij poniżej, aby wyświetlić listę termostatów ecobee dostępnych na koncie ecobee, i wybierz te, które chcesz połączyć ze SmartThings. +'''Tap to choose'''=Dotknij, aby wybrać +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Dotknij poniżej, aby wyświetlić listę czujników ecobee dostępnych na koncie ecobee, i wybierz te, które chcesz połączyć ze SmartThings. +'''Tap to choose'''=Dotknij, aby wybrać +'''Select Ecobee Sensors ({{numFound}} found)'''=Wybierz czujniki Ecobee (znaleziono {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=Konto ecobee jest teraz połączone ze SmartThings. +'''Click 'Done' to finish setup.'''=Kliknij opcję „Done” (Gotowe), aby ukończyć instalację. +'''The connection could not be established!'''=Nie można ustanowić połączenia. +'''Click 'Done' to return to the menu.'''=Kliknij opcję „Done” (Gotowe), aby powrócić do menu. +'''is connected to SmartThings'''=jest połączony ze SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=jest odłączony od SmartThings, ponieważ poświadczenie dostępu zostało zmienione lub utracone. Przejdź do aplikacji Ecobee (Connect) SmartApp i wprowadź ponownie poświadczenia logowania konta. +'''Your Ecobee thermostat '''=Termostat Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/pt_BR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/pt_BR.properties new file mode 100644 index 0000000..cc8d54b --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/pt_BR.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Conecte seu termostato Ecobee ao SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Você está conectado. +'''Click to enter Ecobee Credentials'''=Clique para inserir as credenciais do Ecobee +'''Login'''=Conectar +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Toque abaixo para entrar no serviço ecobee e autorizar o acesso ao SmartThings. Certifique-se de rolar para baixo na página 2 e pressionar o botão 'Allow' (Permitir). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Selecionar seus termostatos +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Toque abaixo para ver a lista de termostatos ecobee disponíveis na sua conta ecobee e selecione os que deseja conectar ao SmartThings. +'''Tap to choose'''=Tocar para escolher +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Toque abaixo para ver a lista de sensores ecobee disponíveis na sua conta ecobee e selecione os que deseja conectar ao SmartThings. +'''Tap to choose'''=Tocar para escolher +'''Select Ecobee Sensors ({{numFound}} found)'''=Selecionar sensores Ecobee ({{numFound}} encontrado(s)) +'''Your ecobee Account is now connected to SmartThings!'''=Agora sua conta ecobee está conectada ao SmartThings! +'''Click 'Done' to finish setup.'''=Clique em 'Done' (Concluído) para concluir a configuração. +'''The connection could not be established!'''=Não foi possível estabelecer a conexão! +'''Click 'Done' to return to the menu.'''=Clique em 'Done' (Concluído) para retornar ao menu. +'''is connected to SmartThings'''=está conectado ao SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=foi desconectado do SmartThings, pois a credencial de acesso foi alterada ou perdida. Vá para Ecobee (Connect) SmartApp e insira novamente suas credenciais de acesso à conta. +'''Your Ecobee thermostat '''=Seu termostato Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/pt_PT.properties b/smartapps/smartthings/ecobee-connect.src/i18n/pt_PT.properties new file mode 100644 index 0000000..ef37cd5 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/pt_PT.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Ligue o seu termóstato Ecobee ao SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Está ligado. +'''Click to enter Ecobee Credentials'''=Clique para introduzir as Credenciais da Ecobee +'''Login'''=Iniciar Sessão +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Toque abaixo para iniciar sessão no serviço ecobee e autorizar o acesso ao SmartThings. Certifique-se de que se desloca para baixo na página 2 e prime o botão "Allow" (Permitir). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Seleccionar os seus Termóstatos +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Toque abaixo para ver a lista de termóstatos da ecobee disponíveis na sua conta ecobee e seleccione aqueles que pretende ligar ao SmartThings. +'''Tap to choose'''=Toque para escolher +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Toque abaixo para ver a lista de sensores da ecobee disponíveis na sua conta ecobee e seleccione aqueles que pretende ligar ao SmartThings. +'''Tap to choose'''=Toque para escolher +'''Select Ecobee Sensors ({{numFound}} found)'''=Seleccionar sensores da Ecobee ({{numFound}} encontrado) +'''Your ecobee Account is now connected to SmartThings!'''=Agora, a sua Conta ecobee está ligada ao SmartThings! +'''Click 'Done' to finish setup.'''=Clique em "Done" (Concluir) para terminar a configuração. +'''The connection could not be established!'''=Não foi possível estabelecer a ligação! +'''Click 'Done' to return to the menu.'''=Clique em "Done" (Concluir) para regressar ao menu. +'''is connected to SmartThings'''=está ligado ao SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=foi desligado do SmartThings, porque a credencial de acesso foi alterada ou perdida. Vá para Ecobee (Connect) SmartApp e introduza novamente as suas credenciais de início de sessão na conta. +'''Your Ecobee thermostat '''=O seu termóstato Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/ro_RO.properties b/smartapps/smartthings/ecobee-connect.src/i18n/ro_RO.properties new file mode 100644 index 0000000..73fbd41 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/ro_RO.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Conectați termostatul Ecobee la SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Sunteți conectat. +'''Click to enter Ecobee Credentials'''=Faceți clic pentru a introduce acreditările Ecobee +'''Login'''=Conectare +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Atingeți mai jos pentru a vă conecta la serviciul ecobee și a autoriza accesul la SmartThings. Asigurați-vă că ați derulat în jos până la pagina 2 și apăsați butonul „Allow” (Permitere). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Selectați termostatele +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Atingeți mai jos pentru a vizualiza o listă de termostate ecobee disponibile în contul dvs. ecobee și selectați-le pe cele pe care doriți să le conectați la SmartThings. +'''Tap to choose'''=Atingeți pentru a selecta +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Atingeți mai jos pentru a vizualiza o listă de senzori ecobee disponibili în contul dvs. ecobee și selectați-i pe cei pe care doriți să îi conectați la SmartThings. +'''Tap to choose'''=Atingeți pentru a selecta +'''Select Ecobee Sensors ({{numFound}} found)'''=Selectare senzori Ecobee ({{numFound}} găsiți) +'''Your ecobee Account is now connected to SmartThings!'''=Contul dvs. ecobee este acum conectat la SmartThings! +'''Click 'Done' to finish setup.'''=Faceți clic pe „Done” (Efectuat) pentru a finaliza configurarea. +'''The connection could not be established!'''=Nu a putut fi stabilită conexiunea! +'''Click 'Done' to return to the menu.'''=Faceți clic pe „Done” (Efectuat) pentru a reveni la meniu. +'''is connected to SmartThings'''=este conectat la SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=este deconectat de la SmartThings, deoarece acreditările de acces au fost schimbate sau pierdute. Accesați aplicația Ecobee (Connect) SmartApp și reintroduceți acreditările de conectare la cont. +'''Your Ecobee thermostat '''=Termostatul dvs. Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/ru_RU.properties b/smartapps/smartthings/ecobee-connect.src/i18n/ru_RU.properties new file mode 100644 index 0000000..2c7ab8e --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/ru_RU.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Подключите свой термостат Ecobee к SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Подключено. +'''Click to enter Ecobee Credentials'''=Нажмите для ввода учетных данных Ecobee +'''Login'''=Вход +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Коснитесь ниже, чтобы войти в службу ecobee и предоставить доступ SmartThings. Обязательно прокрутите страницу 2 до самого низа и нажмите кнопку «Разрешить». +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Выберите свои термостаты +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Коснитесь ниже, чтобы отобразить список доступных термостатов ecobee в вашей учетной записи ecobee, и выберите те, которые нужно подключить к SmartThings. +'''Tap to choose'''=Коснитесь, чтобы выбрать +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Коснитесь ниже, чтобы отобразить список доступных датчиков ecobee в вашей учетной записи ecobee, и выберите те, которые нужно подключить к SmartThings. +'''Tap to choose'''=Коснитесь, чтобы выбрать +'''Select Ecobee Sensors ({{numFound}} found)'''=Выбрать датчики Ecobee (найдено {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=Теперь ваша учетная запись ecobee подключена к SmartThings! +'''Click 'Done' to finish setup.'''=Для завершения настройки нажмите «Готово». +'''The connection could not be established!'''=Не удалось установить соединение! +'''Click 'Done' to return to the menu.'''=Чтобы вернуться в меню, нажмите «Готово». +'''is connected to SmartThings'''=подключено к SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=отключено от SmartThings, поскольку данные для доступа были изменены или потеряны. Перейдите в Ecobee (Подключить) SmartApp и повторно введите регистрационные данные своей учетной записи. +'''Your Ecobee thermostat '''=Ваш термостат Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/sk_SK.properties b/smartapps/smartthings/ecobee-connect.src/i18n/sk_SK.properties new file mode 100644 index 0000000..8b40983 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/sk_SK.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Pripojte termostat Ecobee k systému SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Ste pripojení. +'''Click to enter Ecobee Credentials'''=Kliknite a zadajte poverenia pre Ecobee +'''Login'''=Prihlásiť sa +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Ťuknutím nižšie sa prihláste k službe ecobee a autorizujte prístup do systému SmartThings. Prejdite nadol na stránku 2 a stlačte tlačidlo Allow (Povoliť). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Vyberte termostaty +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Ťuknutím nižšie môžete zobraziť zoznam termostatov ecobee dostupných vo vašom konte ecobee a vybrať tie, ktoré chcete pripojiť k systému SmartThings. +'''Tap to choose'''=Ťuknutím vyberte +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Ťuknutím nižšie môžete zobraziť zoznam senzorov ecobee dostupných vo vašom konte ecobee a vybrať tie, ktoré chcete pripojiť k systému SmartThings. +'''Tap to choose'''=Ťuknutím vyberte +'''Select Ecobee Sensors ({{numFound}} found)'''=Vyberte senzory Ecobee (nájdené: {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=Vaše konto ecobee je teraz prepojené so systémom SmartThings. +'''Click 'Done' to finish setup.'''=Kliknutím na tlačidlo Done (Hotovo) dokončite inštaláciu. +'''The connection could not be established!'''=Nepodarilo sa nadviazať spojenie. +'''Click 'Done' to return to the menu.'''=Kliknutím na tlačidlo Done (Hotovo) sa vráťte do menu. +'''is connected to SmartThings'''=je pripojený k systému SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=je odpojený od systému SmartThings, pretože prístupové poverenia boli zmenené alebo stratené. Prejdite do aplikácie Ecobee (Connect) SmartApp a znova zadajte prihlasovacie poverenia pre konto. +'''Your Ecobee thermostat '''=Váš termostat Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/sl_SI.properties b/smartapps/smartthings/ecobee-connect.src/i18n/sl_SI.properties new file mode 100644 index 0000000..457ec7f --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/sl_SI.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Povežite termostat Ecobee s storitvijo SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Povezani ste. +'''Click to enter Ecobee Credentials'''=Kliknite za vnos poverilnic Ecobee +'''Login'''=Prijava +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Pritisnite spodaj, da se prijavite v storitev ecobee in odobrite dostop do storitve SmartThings. Pomaknite se na 2. stran in pritisnite gumb »Allow« (Dovoli). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Izberite svoje termostate +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Pritisnite spodaj za prikaz seznama termostatov ecobee, ki so na voljo v vašem računu ecobee, in izberite tiste, ki jih želite povezati s storitvijo SmartThings. +'''Tap to choose'''=Pritisnite za izbiranje +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Pritisnite spodaj za prikaz seznama senzorjev ecobee, ki so na voljo v vašem računu ecobee, in izberite tiste, ki jih želite povezati s storitvijo SmartThings. +'''Tap to choose'''=Pritisnite za izbiranje +'''Select Ecobee Sensors ({{numFound}} found)'''=Izberite senzorje Ecobee (št. najdenih: {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=Vaš račun ecobee je zdaj povezan s storitvijo SmartThings! +'''Click 'Done' to finish setup.'''=Kliknite »Done« (Končano), da zaključite nastavitev. +'''The connection could not be established!'''=Povezave ni bilo mogoče vzpostaviti! +'''Click 'Done' to return to the menu.'''=Kliknite »Done« (Končano), da se vrnete v meni. +'''is connected to SmartThings'''=je povezan s storitvijo SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=ni povezan s storitvijo SmartThings, ker so bile poverilnice za dostop spremenjene ali izgubljene. Pojdite v aplikacijo Ecobee (Connect) SmartApp in znova vnesite poverilnice za prijavo v račun. +'''Your Ecobee thermostat '''=Vaš termostat Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/sq_AL.properties b/smartapps/smartthings/ecobee-connect.src/i18n/sq_AL.properties new file mode 100644 index 0000000..ec3a107 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/sq_AL.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Lidh termostatin Ecobee me SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Je lidhur. +'''Click to enter Ecobee Credentials'''=Kliko për të futur kredencialet Ecobee +'''Login'''=Login +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Trokit më poshtë për t’u loguar në shërbimin ecobee dhe autorizuar aksesin në SmartThings. Sigurohu që të lundrosh poshtë në faqen 2 dhe të shtypësh butonin ‘Allow’ (Lejo). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Përzgjidh termostatet e tua +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Trokit më poshtë për të parë listën e termostateve ecobee që janë në dispozicion në llogarinë tënde ecobee dhe përzgjidh ato që dëshiron të lidhen me SmartThings. +'''Tap to choose'''=Trokit për të zgjedhur +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Trokit më poshtë për të parë listën e sensorëve ecobee që janë në dispozicion në llogarinë tënde ecobee dhe përzgjidh ato që dëshiron të lidhen me SmartThings. +'''Tap to choose'''=Trokit për të zgjedhur +'''Select Ecobee Sensors ({{numFound}} found)'''=Përzgjidh sensorët Ecobee (u gjet {{numFound}}) +'''Your ecobee Account is now connected to SmartThings!'''=Llogaria jote ecobee tani është lidhur me SmartThings! +'''Click 'Done' to finish setup.'''=Kliko mbi ‘Done’ (U krye) për ta mbaruar konfigurimin. +'''The connection could not be established!'''=Lidhja nuk u vendos dot! +'''Click 'Done' to return to the menu.'''=Kliko mbi ‘Done’ (U krye) për t’u kthyer në meny. +'''is connected to SmartThings'''=është lidhur me SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=është shkëputur nga SmartThings, sepse kredenciali i aksesit ka ndryshuar ose ka humbur. Shko te Ecobee (Connect) SmartApp dhe futi sërish kredencialet e logimit në llogari. +'''Your Ecobee thermostat '''=Termostati yt Ecobee diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/sr_RS.properties b/smartapps/smartthings/ecobee-connect.src/i18n/sr_RS.properties new file mode 100644 index 0000000..9433af6 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/sr_RS.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Povežite Ecobee termostat na SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Povezani ste. +'''Click to enter Ecobee Credentials'''=Kliknite da biste uneli Ecobee akreditive +'''Login'''=Login (Prijava) +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Kucnite ispod da biste se prijavili na uslugu ecobee i odobrili pristup aplikaciji SmartThings. Obavezno listajte nadole do stranice broj 2 i pritisnite dugme „Allow” (Dozvoli). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Izaberite termostate +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Kucnite ispod da biste videli listu dostupnih ecobee termostata na svom ecobee nalogu i izaberite one koje želite da povežete na SmartThings. +'''Tap to choose'''=Kucnite da biste odabrali +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Kucnite ispod da biste videli listu dostupnih senzora na svom ecobee nalogu i izaberite one koje želite da povežete na SmartThings. +'''Tap to choose'''=Kucnite da biste odabrali +'''Select Ecobee Sensors ({{numFound}} found)'''=Izaberite Ecobee senzore ({{numFound}} pronađeno) +'''Your ecobee Account is now connected to SmartThings!'''=Vaš ecobee nalog je sada povezan na SmartThings! +'''Click 'Done' to finish setup.'''=Kliknite na „Done” (Gotovo) za kraj konfiguracije. +'''The connection could not be established!'''=Veza nije uspostavljena! +'''Click 'Done' to return to the menu.'''=Kliknite na „Done” (Gotovo) da biste se vratili na meni. +'''is connected to SmartThings'''=je povezan na SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=je prekinuo vezu sa aplikacijom SmartThings zato što su akreditivi za pristup promenjeni ili izgubljeni. Idite na aplikaciju Ecobee (Connect) SmartApp i ponovo unesite akreditive za prijavljivanje na nalog. +'''Your Ecobee thermostat '''=Vaš Ecobee termostat diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/sv_SE.properties b/smartapps/smartthings/ecobee-connect.src/i18n/sv_SE.properties new file mode 100644 index 0000000..e50ad4c --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/sv_SE.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Anslut din Ecobee-termostat till SmartThings. +'''ecobee'''=ecobee +'''You are connected.'''=Du är ansluten. +'''Click to enter Ecobee Credentials'''=Klicka för att ange dina Ecobee-inloggningsuppgifter +'''Login'''=Logga in +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Tryck nedan för att logga in på ecobee-tjänsten och ge SmartThings åtkomst. Rulla ned till sidan 2 och tryck på knappen Allow (Tillåt). +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Välj dina termostater +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Tryck nedan om du vill se listan med ecobee-termostater som är tillgängliga i ditt ecobee-konto och välj dem du vill ansluta till SmartThings. +'''Tap to choose'''=Tryck för att välja +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Tryck nedan om du vill se listan med ecobee-givare som är tillgängliga i ditt ecobee-konto och välj dem du vill ansluta till SmartThings. +'''Tap to choose'''=Tryck för att välja +'''Select Ecobee Sensors ({{numFound}} found)'''=Välj Ecobee-givare ({{numFound}} hittades) +'''Your ecobee Account is now connected to SmartThings!'''=Ditt ecobee-konto är nu anslutet till SmartThings! +'''Click 'Done' to finish setup.'''=Klicka på Done (Klart) för att slutföra konfigurationen. +'''The connection could not be established!'''=Det gick inte att upprätta anslutningen! +'''Click 'Done' to return to the menu.'''=Klicka på Done (Klart) för att återgå till menyn. +'''is connected to SmartThings'''=är ansluten till SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=är frånkopplad från SmartThings, eftersom inloggningsuppgifterna har ändrats eller gått förlorade. Starta Ecobee (Connect) SmartApp och ange kontots inloggningsuppgifter igen. +'''Your Ecobee thermostat '''=Din Ecobee-termostat diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/th.properties b/smartapps/smartthings/ecobee-connect.src/i18n/th.properties deleted file mode 100644 index 4d1318c..0000000 --- a/smartapps/smartthings/ecobee-connect.src/i18n/th.properties +++ /dev/null @@ -1,17 +0,0 @@ -'''Connect your Ecobee thermostat to SmartThings.'''.th=เชื่อมต่อตัวควบคุมอุณหภูมิ Ecobee ของคุณเข้ากับ SmartThings -'''You are connected.'''.th=คุณได้เชื่อมต่อแล้ว -'''Click to enter Ecobee Credentials'''.th=คลิกเพื่อใส่ ข้อมูลยืนยันตัวตน Ecobee -'''Login'''.th=เข้าสู่ระบบ -'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''.th=แตะด้านล่างเพื่อเข้าสู่บริการ Ecobee และอนุญาตการเข้าถึงของ SmartThings ดูให้แน่ใจว่าได้เลื่อนลงมาที่หน้า 2 แล้วกดปุ่ม 'อนุญาต' -'''Select Your Thermostats'''.th=เลือกตัวควบคุมอุณหภูมิของคุณ -'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''.th=แตะที่ด้านล่างเพื่อดูรายการตัวควบคุมอุณหภูมิ Ecobee ที่มีอยู่ในบัญชีผู้ใช้ Ecobee ของคุณ และเลือกตัวควบคุมอุณหภูมิที่คุณต้องการจะเชื่อมต่อกับ SmartThings -'''Tap to choose'''.th=แตะเพื่อเลือก -'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''.th=แตะที่ด้านล่างเพื่อดูรายการเซ็นเซอร์ Ecobee ที่มีอยู่ในบัญชีผู้ใช้ Ecobee ของคุณ และเลือกเซ็นเซอร์ที่คุณต้องการจะเชื่อมต่อกับ SmartThings -'''Select Ecobee Sensors ({{numFound} found)'''.th=เลือกเซ็นเซอร์ Ecobee ({{numFound}} found) -'''Your ecobee Account is now connected to SmartThings!'''.th=ตอนนี้บัญชีผู้ใช้ Ecobee ของคุณเชื่อมต่อกับ SmartThings แล้ว -'''Click 'Done' to finish setup.'''.th=คลิก 'เสร็จสิ้น' เพื่อทำการตั้งค่าให้เสร็จสิ้น -'''The connection could not be established!'''.th=ไม่สามารถสร้างการเชื่อมต่อได้! -'''Click 'Done' to return to the menu.'''.th=คลิก 'เสร็จสิ้น' เพื่อกลับไปยังเมนู -'''{{deviceName}} is connected to SmartThings'''.th={{deviceName}} เชื่อมต่อกับ SmartThings แล้ว -'''{{deviceName}} is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''.th={{deviceName}} ถูกตัดการเชื่อมต่อจาก SmartThings เนื่องจากข้อมูลการเข้าถึงถูกเปลี่ยนแปลงหรือหายไป กรุณาไปที่ Ecobee (การเชื่อมต่อ) SmartApp และใส่ข้อมูลยืนยันตัวตนการเข้าสู่บัญชีผู้ใช้ของคุณอีกครั้ง -'''Your Ecobee thermostat'''.th=ตัวควบคุมอุณหภูมิ Ecobee ของคุณ diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/th_TH.properties b/smartapps/smartthings/ecobee-connect.src/i18n/th_TH.properties new file mode 100644 index 0000000..8f5294c --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/th_TH.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=เชื่อมต่อตัวควบคุมอุณหภูมิ Ecobee ของคุณเข้ากับ SmartThings +'''ecobee'''=Ecobee +'''You are connected.'''=คุณได้เชื่อมต่อแล้ว +'''Click to enter Ecobee Credentials'''=คลิกเพื่อใส่ ข้อมูลยืนยันตัวตน Ecobee +'''Login'''=เข้าสู่ระบบ +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=แตะด้านล่างเพื่อเข้าสู่บริการ Ecobee และอนุญาตการเข้าถึงของ SmartThings ดูให้แน่ใจว่าได้เลื่อนลงมาที่หน้า 2 แล้วกดปุ่ม 'อนุญาต' +'''ecobee'''=Ecobee +'''Select Your Thermostats'''=เลือกตัวควบคุมอุณหภูมิของคุณ +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=แตะที่ด้านล่างเพื่อดูรายการตัวควบคุมอุณหภูมิ Ecobee ที่มีอยู่ในบัญชีผู้ใช้ Ecobee ของคุณ และเลือกตัวควบคุมอุณหภูมิที่คุณต้องการจะเชื่อมต่อกับ SmartThings +'''Tap to choose'''=แตะเพื่อเลือก +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=แตะที่ด้านล่างเพื่อดูรายการเซ็นเซอร์ Ecobee ที่มีอยู่ในบัญชีผู้ใช้ Ecobee ของคุณ และเลือกเซ็นเซอร์ที่คุณต้องการจะเชื่อมต่อกับ SmartThings +'''Tap to choose'''=แตะเพื่อเลือก +'''Select Ecobee Sensors ({{numFound}} found)'''=เลือกเซ็นเซอร์ Ecobee ({{numFound}} found) +'''Your ecobee Account is now connected to SmartThings!'''=ตอนนี้บัญชีผู้ใช้ Ecobee ของคุณเชื่อมต่อกับ SmartThings แล้ว +'''Click 'Done' to finish setup.'''=คลิก 'เสร็จสิ้น' เพื่อทำการตั้งค่าให้เสร็จสิ้น +'''The connection could not be established!'''=ไม่สามารถสร้างการเชื่อมต่อได้! +'''Click 'Done' to return to the menu.'''=คลิก 'เสร็จสิ้น' เพื่อกลับไปยังเมนู +'''is connected to SmartThings'''={{deviceName}} เชื่อมต่อกับ SmartThings แล้ว +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''={{deviceName}} ถูกตัดการเชื่อมต่อจาก SmartThings เนื่องจากข้อมูลการเข้าถึงถูกเปลี่ยนแปลงหรือหายไป กรุณาไปที่ Ecobee (การเชื่อมต่อ) SmartApp และใส่ข้อมูลยืนยันตัวตนการเข้าสู่บัญชีผู้ใช้ของคุณอีกครั้ง +'''Your Ecobee thermostat '''=ตัวควบคุมอุณหภูมิ Ecobee ของคุณ diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/tr.properties b/smartapps/smartthings/ecobee-connect.src/i18n/tr.properties deleted file mode 100644 index fb14485..0000000 --- a/smartapps/smartthings/ecobee-connect.src/i18n/tr.properties +++ /dev/null @@ -1,17 +0,0 @@ -'''Connect your Ecobee thermostat to SmartThings.'''.tr=Ecobee termostatınızı SmartThings'e bağlayın. -'''You are connected.'''.tr=Bağlantı kurdunuz. -'''Click to enter Ecobee Credentials'''.tr=Ecobee Kimlik Bilgilerinizi girmek için tıklayın -'''Login'''.tr=Oturum aç -'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''.tr=Ecobee servisinde oturum açmak ve SmartThings erişimine izin vermek için aşağıya dokunun. Ekranı 2. sayfaya kaydırdığınızdan emin olun ve 'İzin Ver' tuşuna basın. -'''Select Your Thermostats'''.tr=Termostatlarınızı Seçin -'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''.tr=Ecobee hesabınızda mevcut olan ecobee termostatlarının listesini görüntülemek için aşağıya dokunun ve SmartThings'e bağlamak istediklerinizi seçin. -'''Tap to choose'''.tr=Seçmek için dokunun -'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''.tr=Ecobee hesabınızda mevcut olan ecobee sensörlerinin listesini görüntülemek için aşağıya dokunun ve SmartThings'e bağlamak istediklerinizi seçin. -'''Select Ecobee Sensors ({{numFound}} found)'''.tr=Ecobee Sensörlerini seçin ({{numFound}} bulundu) -'''Your ecobee Account is now connected to SmartThings!'''.tr=Ecobee Hesabınız artık SmartThings'e bağlandı! -'''Click 'Done' to finish setup.'''.tr=Kurulumu bitirmek için 'Bitti' öğesine tıklayın. -'''The connection could not be established!'''.tr=Bağlantı kurulamadı! -'''Click 'Done' to return to the menu.'''.tr=Menüye dönmek için 'Bitti' öğesine tıklayın. -'''{{deviceName}} is connected to SmartThings'''.tr={{cihazİsmi}} SmartThings'e bağlandı -'''{{deviceName}} is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''.tr=Ecobee termostatınız -'''Your Ecobee thermostat'''.tr=Ecobee termostatınız diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/tr_TR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/tr_TR.properties new file mode 100644 index 0000000..449b848 --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/tr_TR.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=Ecobee termostatınızı SmartThings'e bağlayın. +'''ecobee'''=ecobee +'''You are connected.'''=Bağlantı kurdunuz. +'''Click to enter Ecobee Credentials'''=Ecobee Kimlik Bilgilerinizi girmek için tıklayın +'''Login'''=Oturum aç +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=Ecobee servisinde oturum açmak ve SmartThings erişimine izin vermek için aşağıya dokunun. Ekranı 2. sayfaya kaydırdığınızdan emin olun ve 'İzin Ver' tuşuna basın. +'''ecobee'''=ecobee +'''Select Your Thermostats'''=Termostatlarınızı Seçin +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=Ecobee hesabınızda mevcut olan ecobee termostatlarının listesini görüntülemek için aşağıya dokunun ve SmartThings'e bağlamak istediklerinizi seçin. +'''Tap to choose'''= seçmek için dokunun +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=Ecobee hesabınızda mevcut olan ecobee sensörlerinin listesini görüntülemek için aşağıya dokunun ve SmartThings'e bağlamak istediklerinizi seçin. +'''Tap to choose'''= seçmek için dokunun +'''Select Ecobee Sensors ({{numFound}} found)'''=Ecobee Sensörlerini seçin ({{numFound}} bulundu) +'''Your ecobee Account is now connected to SmartThings!'''=Ecobee Hesabınız artık SmartThings'e bağlandı! +'''Click 'Done' to finish setup.'''=Kurulumu bitirmek için 'Bitti' öğesine tıklayın. +'''The connection could not be established!'''=Bağlantı kurulamadı! +'''Click 'Done' to return to the menu.'''=Menüye dönmek için 'Bitti' öğesine tıklayın. +'''is connected to SmartThings'''={{cihazİsmi}} SmartThings'e bağlandı +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=Erişim kimlik doğruları değiştirildiğinden veya kaybolduğundan {{cihazİsmi}} ile SmartThings arasındaki bağlantı kesildi. Lütfen Ecobee (Connect) SmartApp'e gidin ve hesabınızın oturum açma kimlik bilgilerini tekrar girin. +'''Your Ecobee thermostat '''=Ecobee termostatınız diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/zh_CN.properties b/smartapps/smartthings/ecobee-connect.src/i18n/zh_CN.properties new file mode 100644 index 0000000..dca3bec --- /dev/null +++ b/smartapps/smartthings/ecobee-connect.src/i18n/zh_CN.properties @@ -0,0 +1,20 @@ +'''Connect your Ecobee thermostat to SmartThings.'''=将 Ecobee 恒温器连接至 SmartThings。 +'''ecobee'''=ecobee +'''You are connected.'''=已连接。 +'''Click to enter Ecobee Credentials'''=点击以输入 Ecobee 凭据 +'''Login'''=登录 +'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''=点击下方以登录 ecobee 服务并授予 SmartThings 访问权限。务必在第 2 页上向下滚动,然后按下“允许”按钮。 +'''ecobee'''=ecobee +'''Select Your Thermostats'''=选择恒温器 +'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''=点击下方以查看 ecobee 帐户中可用 ecobee 恒温器的列表,然后选择要连接至 SmartThings 的恒温器。 +'''Tap to choose'''=点击以选择 +'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''=点击下方以查看 ecobee 帐户中可用 ecobee 传感器的列表,然后选择要连接至 SmartThings 的传感器。 +'''Tap to choose'''=点击以选择 +'''Select Ecobee Sensors ({{numFound}} found)'''=选择 Ecobee 传感器 (发现 {{numFound}} 个) +'''Your ecobee Account is now connected to SmartThings!'''=ecobee 帐户现在已连接至 SmartThings! +'''Click 'Done' to finish setup.'''=单击“完成”以完成设置。 +'''The connection could not be established!'''=无法建立连接! +'''Click 'Done' to return to the menu.'''=单击“完成”返回菜单。 +'''is connected to SmartThings'''=已连接至 SmartThings +'''is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''=已从 SmartThings 断开,因为访问凭据已更改或丢失。请转到 Ecobee (连接) SmartApp,然后重新输入您的帐户登录凭据。 +'''Your Ecobee thermostat '''=您的 Ecobee 恒温器 diff --git a/smartapps/smartthings/lifx-connect.src/i18n/ar_AE.properties b/smartapps/smartthings/lifx-connect.src/i18n/ar_AE.properties new file mode 100644 index 0000000..5e43d0e --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/ar_AE.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=يتيح لك استخدام مصابيح LIFX الذكية من خلال SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=النقر لإدخال بيانات اعتماد LIFX +'''Connect to LIFX'''=الاتصال بـ LIFX +'''Tap here to connect your LIFX account'''=النقر هنا لتوصيل حساب LIFX +'''Connect to LIFX'''=الاتصال بـ LIFX +'''Select your location'''=تحديد موقعك +'''Select location ({{count}} found)'''=تحديد الموقع (‎{{count}} found) +'''Your LIFX Account is now connected to SmartThings!'''=حساب LIFX متصل الآن بـ SmartThings! +'''Click 'Done' to finish setup.'''=انقر فوق ”تم“ لإنهاء الإعداد. +'''The connection could not be established!'''=يتعذر إنشاء الاتصال! +'''Click 'Done' to return to the menu.'''=انقر فوق ”تم“ للعودة إلى القائمة. +'''Your LIFX Account is already connected to SmartThings!'''=حساب LIFX متصل بالفعل بـ SmartThings! +'''Click 'Done' to finish setup.'''=انقر فوق ”تم“ لإنهاء الإعداد. +'''SmartThings Connection'''=اتصال SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/bg_BG.properties b/smartapps/smartthings/lifx-connect.src/i18n/bg_BG.properties new file mode 100644 index 0000000..508727e --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/bg_BG.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Позволява да използвате интелигентни ел. крушки LIFX със SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Докоснете за въвеждане на идентификационни данни за LIFX +'''Connect to LIFX'''=Свързване към LIFX +'''Tap here to connect your LIFX account'''=Докоснете тук за свързване на вашия LIFX акаунт +'''Connect to LIFX'''=Свързване към LIFX +'''Select your location'''=Избор на местоположение +'''Select location ({{count}} found)'''=Избор на местоположение ({{count}} са намерени) +'''Your LIFX Account is now connected to SmartThings!'''=Вашият LIFX акаунт вече е свързан към SmartThings! +'''Click 'Done' to finish setup.'''=Щракнете върху Done (Готово), за да завършите настройката. +'''The connection could not be established!'''=Връзката не може да се осъществи! +'''Click 'Done' to return to the menu.'''=Щракнете върху Done (Готово), за да се върнете към менюто. +'''Your LIFX Account is already connected to SmartThings!'''=Вашият LIFX акаунт вече е свързан към SmartThings! +'''Click 'Done' to finish setup.'''=Щракнете върху Done (Готово), за да завършите настройката. +'''SmartThings Connection'''=Свързване на SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/cs_CZ.properties b/smartapps/smartthings/lifx-connect.src/i18n/cs_CZ.properties new file mode 100644 index 0000000..2ebcfa0 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/cs_CZ.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Umožní vám použít inteligentní žárovky LIFX se systémem SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Klepněte a zadejte přihlašovací údaje LIFX +'''Connect to LIFX'''=Připojit k LIFX +'''Tap here to connect your LIFX account'''=Klepnutím sem se připojíte k účtu LIFX +'''Connect to LIFX'''=Připojit k LIFX +'''Select your location'''=Vyberte vaši polohu +'''Select location ({{count}} found)'''=Vyberte polohu (nalezeno {{count}}) +'''Your LIFX Account is now connected to SmartThings!'''=Účet LIFX Account je nyní připojen k systému SmartThings! +'''Click 'Done' to finish setup.'''=Dokončete nastavení klepnutím na tlačítko „Done“ (Hotovo). +'''The connection could not be established!'''=Připojení nelze navázat! +'''Click 'Done' to return to the menu.'''=Klepnutím na tlačítko „Done“ (Hotovo) se vrátíte do menu. +'''Your LIFX Account is already connected to SmartThings!'''=Účet LIFX Account je již připojen k systému SmartThings! +'''Click 'Done' to finish setup.'''=Dokončete nastavení klepnutím na tlačítko „Done“ (Hotovo). +'''SmartThings Connection'''=Připojení SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/da_DK.properties b/smartapps/smartthings/lifx-connect.src/i18n/da_DK.properties new file mode 100644 index 0000000..736c741 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/da_DK.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Giver dig mulighed for at bruge LIFX-smartpærer sammen med SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Tryk for at indtaste LIFX-legitimationsoplysninger +'''Connect to LIFX'''=Forbind med LIFX +'''Tap here to connect your LIFX account'''=Tryk her for at forbinde din LIFX-konto +'''Connect to LIFX'''=Forbind med LIFX +'''Select your location'''=Vælg din placering +'''Select location ({{count}} found)'''=Vælg placering ({{count}} fundet) +'''Your LIFX Account is now connected to SmartThings!'''=Din LIFX-konto er nu forbundet med SmartThings! +'''Click 'Done' to finish setup.'''=Klik på “Done” (Udført) for at afslutte konfigurationen. +'''The connection could not be established!'''=Der kunne ikke oprettes forbindelse! +'''Click 'Done' to return to the menu.'''=Klik på “Done” (Udført) for at vende tilbage til menuen. +'''Your LIFX Account is already connected to SmartThings!'''=Din LIFX-konto er allerede forbundet med SmartThings! +'''Click 'Done' to finish setup.'''=Klik på “Done” (Udført) for at afslutte konfigurationen. +'''SmartThings Connection'''=SmartThings-forbindelse diff --git a/smartapps/smartthings/lifx-connect.src/i18n/de_DE.properties b/smartapps/smartthings/lifx-connect.src/i18n/de_DE.properties new file mode 100644 index 0000000..81ab993 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/de_DE.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Ermöglicht die Verwendung intelligenter Glühbirnen von LIFX mit SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Tippen, um LIFX-Zugangsdaten einzugeben +'''Connect to LIFX'''=Mit LIFX verbinden +'''Tap here to connect your LIFX account'''=Hier tippen, um Ihr LIFX-Konto zu verbinden. +'''Connect to LIFX'''=Mit LIFX verbinden +'''Select your location'''=Ihren Standort auswählen +'''Select location ({{count}} found)'''=Standortauswahl ({{count}} gefunden) +'''Your LIFX Account is now connected to SmartThings!'''=Ihr LIFX-Konto ist jetzt mit SmartThings verbunden! +'''Click 'Done' to finish setup.'''=Klicken Sie auf „Done“ (OK), um die Einrichtung abzuschließen. +'''The connection could not be established!'''=Es konnte keine Verbindung hergestellt werden! +'''Click 'Done' to return to the menu.'''=Klicken Sie auf „Done“ (OK), um zum Menü zurückzukehren. +'''Your LIFX Account is already connected to SmartThings!'''=Ihr LIFX-Konto ist bereits mit SmartThings verbunden! +'''Click 'Done' to finish setup.'''=Klicken Sie auf „Done“ (OK), um die Einrichtung abzuschließen. +'''SmartThings Connection'''=SmartThings-Verbindung diff --git a/smartapps/smartthings/lifx-connect.src/i18n/el_GR.properties b/smartapps/smartthings/lifx-connect.src/i18n/el_GR.properties new file mode 100644 index 0000000..1e3ee15 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/el_GR.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Σας επιτρέπει να χρησιμοποιείτε έξυπνους λαμπτήρες LIFX με το SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Πατήστε για να καταχωρήσετε διαπιστευτήρια LIFX +'''Connect to LIFX'''=Σύνδεση στο LIFX +'''Tap here to connect your LIFX account'''=Πατήστε εδώ για να συνδέσετε το λογαριασμό σας LIFX +'''Connect to LIFX'''=Σύνδεση στο LIFX +'''Select your location'''=Επιλέξτε την τοποθεσία σας +'''Select location ({{count}} found)'''=Επιλογή τοποθεσίας (βρέθηκαν {{count}}) +'''Your LIFX Account is now connected to SmartThings!'''=Ο λογαριασμός σας στο LIFX έχει τώρα συνδεθεί στο SmartThings! +'''Click 'Done' to finish setup.'''=Πατήστε "Done" (Τέλος) για να ολοκληρωθεί η ρύθμιση. +'''The connection could not be established!'''=Δεν ήταν δυνατή η δημιουργία σύνδεσης! +'''Click 'Done' to return to the menu.'''=Κάντε κλικ στο "Done" (Τέλος) για να επιστρέψετε στο μενού. +'''Your LIFX Account is already connected to SmartThings!'''=Ο λογαριασμός σας στο LIFX έχει ήδη συνδεθεί στο SmartThings! +'''Click 'Done' to finish setup.'''=Πατήστε "Done" (Τέλος) για να ολοκληρωθεί η ρύθμιση. +'''SmartThings Connection'''=Σύνδεση SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/en_GB.properties b/smartapps/smartthings/lifx-connect.src/i18n/en_GB.properties new file mode 100644 index 0000000..1bdcdcc --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/en_GB.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Allows you to use LIFX smart light bulbs with SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Tap to enter LIFX credentials +'''Connect to LIFX'''=Connect to LIFX +'''Tap here to connect your LIFX account'''=Tap here to connect your LIFX account +'''Connect to LIFX'''=Connect to LIFX +'''Select your location'''=Select your location +'''Select location ({{count}} found)'''=Select location ({{count}} found) +'''Your LIFX Account is now connected to SmartThings!'''=Your LIFX Account is now connected to SmartThings! +'''Click 'Done' to finish setup.'''=Click ’Done’ to exit setup. +'''The connection could not be established!'''=The connection could not be established! +'''Click 'Done' to return to the menu.'''=Click ’Done’ to return to the menu. +'''Your LIFX Account is already connected to SmartThings!'''=Your LIFX Account is already connected to SmartThings! +'''Click 'Done' to finish setup.'''=Click ’Done’ to finish setup. +'''SmartThings Connection'''=SmartThings Connection diff --git a/smartapps/smartthings/lifx-connect.src/i18n/es_ES.properties b/smartapps/smartthings/lifx-connect.src/i18n/es_ES.properties new file mode 100644 index 0000000..0e14fc8 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/es_ES.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Le permite utilizar bombillas de luz inteligente LIFX con SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Pulsar para introducir credenciales de LIFX +'''Connect to LIFX'''=Conectar a LIFX +'''Tap here to connect your LIFX account'''=Pulsar aquí para conectar la cuenta LIFX +'''Connect to LIFX'''=Conectar a LIFX +'''Select your location'''=Seleccionar ubicación +'''Select location ({{count}} found)'''=Seleccionar ubicación ({{count}} encontrado) +'''Your LIFX Account is now connected to SmartThings!'''=¡Su cuenta de LIFX ya está conectada a SmartThings! +'''Click 'Done' to finish setup.'''=Haga clic en “Done” (Hecho) para finalizar la configuración. +'''The connection could not be established!'''=¡No se ha podido establecer la conexión! +'''Click 'Done' to return to the menu.'''=Haga clic en “Done” (Hecho) para volver al menú. +'''Your LIFX Account is already connected to SmartThings!'''=¡Su cuenta de LIFX ya está conectada a SmartThings! +'''Click 'Done' to finish setup.'''=Haga clic en “Done” (Hecho) para finalizar la configuración. +'''SmartThings Connection'''=Conexión de SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/es_US.properties b/smartapps/smartthings/lifx-connect.src/i18n/es_US.properties new file mode 100644 index 0000000..9e1960e --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/es_US.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Le permite usar las bombillas inteligentes LIFX con SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Pulse para introducir las credenciales de LIFX +'''Connect to LIFX'''=Conectar a LIFX +'''Tap here to connect your LIFX account'''=Pulse aquí para conectar su cuenta de LIFX +'''Connect to LIFX'''=Conectar a LIFX +'''Select your location'''=Seleccione su ubicación +'''Select location ({{count}} found)'''=Seleccionar ubicación (hay {{count}}) +'''Your LIFX Account is now connected to SmartThings!'''=¡Su cuenta de LIFX ahora está conectada a SmartThings! +'''Click 'Done' to finish setup.'''=Haga clic en 'Done' ('Listo') para finalizar la configuración. +'''The connection could not be established!'''=¡No fue posible establecer la conexión! +'''Click 'Done' to return to the menu.'''=Haga clic en 'Done' ('Listo') para volver al menú. +'''Your LIFX Account is already connected to SmartThings!'''=¡Su cuenta de LIFX ya está conectada a SmartThings! +'''Click 'Done' to finish setup.'''=Haga clic en 'Done' ('Listo') para finalizar la configuración. +'''SmartThings Connection'''=Conexión de SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/et_EE.properties b/smartapps/smartthings/lifx-connect.src/i18n/et_EE.properties new file mode 100644 index 0000000..7403f58 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/et_EE.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Võimaldab kasutada LIFXi nutikaid lambipirne teenusega SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Toksake, et sisestada teenuse LIFX volitused +'''Connect to LIFX'''=Loo ühendus teenusega LIFX +'''Tap here to connect your LIFX account'''=Toksake siia, et luua ühendus oma LIFXi kontoga +'''Connect to LIFX'''=Loo ühendus teenusega LIFX +'''Select your location'''=Valige oma asukoht +'''Select location ({{count}} found)'''=Valige asukoht ({{count}} found) +'''Your LIFX Account is now connected to SmartThings!'''=Teie LIFXi konto on nüüd ühendatud teenusega SmartThings! +'''Click 'Done' to finish setup.'''=Klõpsake valikut Valmis, et seadistamine lõpule viia. +'''The connection could not be established!'''=Ühenduse loomine nurjus! +'''Click 'Done' to return to the menu.'''=Klõpsake valikut Valmis, et naasta menüüsse. +'''Your LIFX Account is already connected to SmartThings!'''=Teie LIFXi konto on juba ühendatud teenusega SmartThings! +'''Click 'Done' to finish setup.'''=Klõpsake valikut Valmis, et seadistamine lõpule viia. +'''SmartThings Connection'''=Teenuse SmartThings ühendus diff --git a/smartapps/smartthings/lifx-connect.src/i18n/fi_FI.properties b/smartapps/smartthings/lifx-connect.src/i18n/fi_FI.properties new file mode 100644 index 0000000..d55d5c6 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/fi_FI.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Mahdollistaa LIFX-älylamppujen käytön SmartThingsin kanssa. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Anna LIFX-tunnistetiedot +'''Connect to LIFX'''=Muodosta LIFX-yhteys +'''Tap here to connect your LIFX account'''=Napauta tätä, jos haluat muodostaa yhteyden LIFX-tiliisi +'''Connect to LIFX'''=Muodosta LIFX-yhteys +'''Select your location'''=Valitse sijaintisi +'''Select location ({{count}} found)'''=Valitse sijainti ({{count}} löydetty) +'''Your LIFX Account is now connected to SmartThings!'''=LIFX-tilisi on nyt yhdistetty SmartThingsiin! +'''Click 'Done' to finish setup.'''=Viimeistele asennus napsauttamalla Done (Valmis). +'''The connection could not be established!'''=Yhteyden muodostaminen epäonnistui! +'''Click 'Done' to return to the menu.'''=Palaa valikkoon napsauttamalla Done (Valmis). +'''Your LIFX Account is already connected to SmartThings!'''=LIFX-tilisi on jo yhdistetty SmartThingsiin! +'''Click 'Done' to finish setup.'''=Viimeistele asennus napsauttamalla Done (Valmis). +'''SmartThings Connection'''=SmartThings-yhteys diff --git a/smartapps/smartthings/lifx-connect.src/i18n/fr-CA.properties b/smartapps/smartthings/lifx-connect.src/i18n/fr-CA.properties new file mode 100644 index 0000000..c490995 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/fr-CA.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Vous permet d'utiliser des ampoules intelligentes LIFX avec SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Appuyez pour saisir les informations d'identification LIFX +'''Connect to LIFX'''=Connexion à LIFX +'''Tap here to connect your LIFX account'''=Appuyez ici pour connecter votre compte LIFX +'''Connect to LIFX'''=Connexion à LIFX +'''Select your location'''=Sélection de votre zone géographique +'''Select location ({{count}} found)'''=Sélection d'une zone géographique ({{count}} trouvée(s)) +'''Your LIFX Account is now connected to SmartThings!'''=Votre compte LIFX est maintenant connecté à SmartThings ! +'''Click 'Done' to finish setup.'''=Cliquez sur Done (Terminé) pour terminer la configuration. +'''The connection could not be established!'''=La connexion n'a pas pu être établie ! +'''Click 'Done' to return to the menu.'''=Cliquez sur Done (Terminé) pour revenir au menu. +'''Your LIFX Account is already connected to SmartThings!'''=Votre compte LIFX est déjà connecté à SmartThings ! +'''Click 'Done' to finish setup.'''=Cliquez sur Done (Terminé) pour terminer la configuration. +'''SmartThings Connection'''=Connexion SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/fr_FR.properties b/smartapps/smartthings/lifx-connect.src/i18n/fr_FR.properties new file mode 100644 index 0000000..c490995 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/fr_FR.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Vous permet d'utiliser des ampoules intelligentes LIFX avec SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Appuyez pour saisir les informations d'identification LIFX +'''Connect to LIFX'''=Connexion à LIFX +'''Tap here to connect your LIFX account'''=Appuyez ici pour connecter votre compte LIFX +'''Connect to LIFX'''=Connexion à LIFX +'''Select your location'''=Sélection de votre zone géographique +'''Select location ({{count}} found)'''=Sélection d'une zone géographique ({{count}} trouvée(s)) +'''Your LIFX Account is now connected to SmartThings!'''=Votre compte LIFX est maintenant connecté à SmartThings ! +'''Click 'Done' to finish setup.'''=Cliquez sur Done (Terminé) pour terminer la configuration. +'''The connection could not be established!'''=La connexion n'a pas pu être établie ! +'''Click 'Done' to return to the menu.'''=Cliquez sur Done (Terminé) pour revenir au menu. +'''Your LIFX Account is already connected to SmartThings!'''=Votre compte LIFX est déjà connecté à SmartThings ! +'''Click 'Done' to finish setup.'''=Cliquez sur Done (Terminé) pour terminer la configuration. +'''SmartThings Connection'''=Connexion SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/hr_HR.properties b/smartapps/smartthings/lifx-connect.src/i18n/hr_HR.properties new file mode 100644 index 0000000..515f96e --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/hr_HR.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Dopušta vam da upotrebljavate pametne žarulje LIFX s uslugom SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Dodirnite za unos podataka za prijavu za LIFX +'''Connect to LIFX'''=Povezivanje na LIFX +'''Tap here to connect your LIFX account'''=Dodirnite ovdje da biste povezali svoj račun za LIFX +'''Connect to LIFX'''=Povezivanje na LIFX +'''Select your location'''=Odaberite lokaciju +'''Select location ({{count}} found)'''=Odaberite lokaciju (pronađeno: {{count}}) +'''Your LIFX Account is now connected to SmartThings!'''=Račun za LIFX sada je povezan s uslugom SmartThings! +'''Click 'Done' to finish setup.'''=Kliknite „Done” (Gotovo) da biste dovršili postavljanje. +'''The connection could not be established!'''=Veza se nije uspostavila! +'''Click 'Done' to return to the menu.'''=Kliknite „Done” (Gotovo) za vraćanje na izbornik. +'''Your LIFX Account is already connected to SmartThings!'''=Račun za LIFX već je povezan s uslugom SmartThings! +'''Click 'Done' to finish setup.'''=Kliknite „Done” (Gotovo) da biste dovršili postavljanje. +'''SmartThings Connection'''=Veza za SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/hu_HU.properties b/smartapps/smartthings/lifx-connect.src/i18n/hu_HU.properties new file mode 100644 index 0000000..df195d9 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/hu_HU.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Lehetővé teszi a LIFX okoségők használatát a SmartThings rendszerrel. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Érintse meg a LIFX-hitelesítőadatok megadásához +'''Connect to LIFX'''=Csatlakozás a LIFX-hez +'''Tap here to connect your LIFX account'''=Érintse meg a LIFX-fiókjához való csatlakozáshoz +'''Connect to LIFX'''=Csatlakozás a LIFX-hez +'''Select your location'''=Hely kiválasztása +'''Select location ({{count}} found)'''=Hely kiválasztása ({{count}} találat) +'''Your LIFX Account is now connected to SmartThings!'''=Csatlakoztatta LIFX-fiókját a SmartThings rendszerhez! +'''Click 'Done' to finish setup.'''=A telepítés befejezéséhez kattintson a „Done” (Kész) gombra. +'''The connection could not be established!'''=Nem sikerült kapcsolatot létesíteni! +'''Click 'Done' to return to the menu.'''=A menühöz való visszatéréshez kattintson a „Done” (Kész) gombra. +'''Your LIFX Account is already connected to SmartThings!'''=LIFX-fiókja már csatlakozott a SmartThings rendszerhez! +'''Click 'Done' to finish setup.'''=A telepítés befejezéséhez kattintson a „Done” (Kész) gombra. +'''SmartThings Connection'''=SmartThings csatlakoztatása diff --git a/smartapps/smartthings/lifx-connect.src/i18n/it_IT.properties b/smartapps/smartthings/lifx-connect.src/i18n/it_IT.properties new file mode 100644 index 0000000..5319d68 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/it_IT.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Vi consente di utilizzare le lampadine intelligenti LIFX con SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Toccate per inserire le credenziali LIFX +'''Connect to LIFX'''=Connetti a LIFX +'''Tap here to connect your LIFX account'''=Toccate qui per connettere l'account LIFX +'''Connect to LIFX'''=Connetti a LIFX +'''Select your location'''=Selezionate la posizione +'''Select location ({{count}} found)'''=Selezionate la posizione ({{count}} trovate) +'''Your LIFX Account is now connected to SmartThings!'''=L'account LIFX è adesso connesso a SmartThings. +'''Click 'Done' to finish setup.'''=Fate clic su “Done” (Fatto) per terminare la configurazione. +'''The connection could not be established!'''=Non è stato possibile stabilire la connessione. +'''Click 'Done' to return to the menu.'''=Fate clic su “Done” (Fatto) per tornare al menu. +'''Your LIFX Account is already connected to SmartThings!'''=L'account LIFX è già connesso a SmartThings. +'''Click 'Done' to finish setup.'''=Fate clic su “Done” (Fatto) per terminare la configurazione. +'''SmartThings Connection'''=Connessione a SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/ko_KR.properties b/smartapps/smartthings/lifx-connect.src/i18n/ko_KR.properties new file mode 100644 index 0000000..cd65415 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/ko_KR.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=LIFX 스마트 전구를 SmartThings에서 사용할 수 있습니다. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=LIFX 로그인 정보를 입력하려면 누르세요 +'''Connect to LIFX'''=LIFX 연결 +'''Tap here to connect your LIFX account'''=LIFX 계정을 연결하려면 여기를 누르세요 +'''Connect to LIFX'''=LIFX 연결 +'''Select your location'''=위치 선택 +'''Select location ({{count}} found)'''=위치 선택 ({{count}}개 찾음) +'''Your LIFX Account is now connected to SmartThings!'''=LIFX 계정이 SmartThings에 연결되었습니다! +'''Click 'Done' to finish setup.'''=설정을 완료하려면 [완료]를 클릭하세요. +'''The connection could not be established!'''=연결을 실행할 수 없습니다! +'''Click 'Done' to return to the menu.'''=메뉴로 돌아가려면 [완료]를 클릭하세요. +'''Your LIFX Account is already connected to SmartThings!'''=LIFX 계정이 SmartThings에 연결되어 있습니다! +'''Click 'Done' to finish setup.'''=설정을 완료하려면 [완료]를 클릭하세요. +'''SmartThings Connection'''=SmartThings 연결 diff --git a/smartapps/smartthings/lifx-connect.src/i18n/nb_NO.properties b/smartapps/smartthings/lifx-connect.src/i18n/nb_NO.properties new file mode 100644 index 0000000..7a1459d --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/nb_NO.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Gjør at du kan bruke LIFX-smartlyspærer med SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Trykk for å angi LIFX-informasjon +'''Connect to LIFX'''=Koble til LIFX +'''Tap here to connect your LIFX account'''=Trykk her for å koble til LIFX-kontoen din +'''Connect to LIFX'''=Koble til LIFX +'''Select your location'''=Velg plasseringen din +'''Select location ({{count}} found)'''=Velg plassering (fant {{count}}) +'''Your LIFX Account is now connected to SmartThings!'''=LIFX-kontoen din er nå koblet til SmartThings! +'''Click 'Done' to finish setup.'''=Klikk på Done (Ferdig) for å fullføre oppsettet. +'''The connection could not be established!'''=Kunne ikke opprette tilkoblingen! +'''Click 'Done' to return to the menu.'''=Klikk på Done (Ferdig) for å gå tilbake til menyen. +'''Your LIFX Account is already connected to SmartThings!'''=LIFX-kontoen din er allerede koblet til SmartThings! +'''Click 'Done' to finish setup.'''=Klikk på Done (Ferdig) for å fullføre oppsettet. +'''SmartThings Connection'''=SmartThings-tilkobling diff --git a/smartapps/smartthings/lifx-connect.src/i18n/nl_NL.properties b/smartapps/smartthings/lifx-connect.src/i18n/nl_NL.properties new file mode 100644 index 0000000..d6ff791 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/nl_NL.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Hiermee kunt u slimme lampen van LIFX gebruiken met SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Tik om LIFX-inloggegevens in te voeren +'''Connect to LIFX'''=Verbinden met LIFX +'''Tap here to connect your LIFX account'''=Tik hier om verbinding te maken met uw LIFX-account +'''Connect to LIFX'''=Verbinden met LIFX +'''Select your location'''=Selecteer uw locatie +'''Select location ({{count}} found)'''=Selecteer locatie ({{count}} gevonden) +'''Your LIFX Account is now connected to SmartThings!'''=Uw LIFX-account is nu verbonden met SmartThings. +'''Click 'Done' to finish setup.'''=Klik op Done (Gereed) om het instellen te voltooien. +'''The connection could not be established!'''=Er kan geen verbinding worden gemaakt. +'''Click 'Done' to return to the menu.'''=Klik op Done (Gereed) om terug te gaan naar het menu. +'''Your LIFX Account is already connected to SmartThings!'''=Uw LIFX-account is al verbonden met SmartThings. +'''Click 'Done' to finish setup.'''=Klik op Done (Gereed) om het instellen te voltooien. +'''SmartThings Connection'''=SmartThings-verbinding diff --git a/smartapps/smartthings/lifx-connect.src/i18n/pl_PL.properties b/smartapps/smartthings/lifx-connect.src/i18n/pl_PL.properties new file mode 100644 index 0000000..9078b31 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/pl_PL.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Umożliwia użycie inteligentnych żarówek LIFX ze SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Dotknij, aby wprowadzić poświadczenia LIFX +'''Connect to LIFX'''=Połącz z LIFX +'''Tap here to connect your LIFX account'''=Dotknij tutaj, aby połączyć z kontem LIFX +'''Connect to LIFX'''=Połącz z LIFX +'''Select your location'''=Wybierz lokalizację +'''Select location ({{count}} found)'''=Wybierz lokalizację (znaleziono {{count}}) +'''Your LIFX Account is now connected to SmartThings!'''=Konto LIFX jest teraz połączone ze SmartThings. +'''Click 'Done' to finish setup.'''=Kliknij opcję „Done” (Gotowe), aby ukończyć instalację. +'''The connection could not be established!'''=Nie można ustanowić połączenia. +'''Click 'Done' to return to the menu.'''=Kliknij opcję „Done” (Gotowe), aby powrócić do menu. +'''Your LIFX Account is already connected to SmartThings!'''=Konto LIFX jest już połączone ze SmartThings. +'''Click 'Done' to finish setup.'''=Kliknij opcję „Done” (Gotowe), aby ukończyć instalację. +'''SmartThings Connection'''=Połączenie SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/pt_BR.properties b/smartapps/smartthings/lifx-connect.src/i18n/pt_BR.properties new file mode 100644 index 0000000..ccb8010 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/pt_BR.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Permite o uso de lâmpadas inteligentes LIFX com o SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Tocar para inserir as credenciais do LIFX +'''Connect to LIFX'''=Conectar ao LIFX +'''Tap here to connect your LIFX account'''=Tocar aqui para conectar sua conta LIFX +'''Connect to LIFX'''=Conectar ao LIFX +'''Select your location'''=Selecionar sua localização +'''Select location ({{count}} found)'''=Selecionar a localização ({{count}} encontrado) +'''Your LIFX Account is now connected to SmartThings!'''=Agora sua conta LIFX está conectada ao SmartThings! +'''Click 'Done' to finish setup.'''=Clique em 'Done' (Concluído) para concluir a configuração. +'''The connection could not be established!'''=Não foi possível estabelecer a conexão! +'''Click 'Done' to return to the menu.'''=Clique em 'Done' (Concluído) para retornar ao menu. +'''Your LIFX Account is already connected to SmartThings!'''=Sua conta LIFX já está conectada ao SmartThings! +'''Click 'Done' to finish setup.'''=Clique em 'Done' (Concluído) para concluir a configuração. +'''SmartThings Connection'''=Conexão com o SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/pt_PT.properties b/smartapps/smartthings/lifx-connect.src/i18n/pt_PT.properties new file mode 100644 index 0000000..7248239 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/pt_PT.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Permite a utilização de lâmpadas inteligentes LIFX com o SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Toque para introduzir as credenciais da LIFX +'''Connect to LIFX'''=Ligar à LIFX +'''Tap here to connect your LIFX account'''=Toque aqui para ligar a sua conta LIFX +'''Connect to LIFX'''=Ligar à LIFX +'''Select your location'''=Seleccionar a sua localização +'''Select location ({{count}} found)'''=Seleccionar a localização ({{count}} encontrado) +'''Your LIFX Account is now connected to SmartThings!'''=Agora, a sua Conta LIFX está ligada ao SmartThings! +'''Click 'Done' to finish setup.'''=Clique em "Done" (Concluir) para terminar a configuração. +'''The connection could not be established!'''=Não foi possível estabelecer a ligação! +'''Click 'Done' to return to the menu.'''=Clique em "Done" (Concluir) para regressar ao menu. +'''Your LIFX Account is already connected to SmartThings!'''=A sua conta LIFX já está ligada ao SmartThings! +'''Click 'Done' to finish setup.'''=Clique em "Done" (Concluir) para terminar a configuração. +'''SmartThings Connection'''=Ligação do SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/ro_RO.properties b/smartapps/smartthings/lifx-connect.src/i18n/ro_RO.properties new file mode 100644 index 0000000..eccc6eb --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/ro_RO.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Permite utilizarea becurilor inteligente LIFX cu SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Atingeți pentru a introduce acreditările LIFX +'''Connect to LIFX'''=Conectare la LIFX +'''Tap here to connect your LIFX account'''=Atingeți aici pentru a vă conecta la contul LIFX +'''Connect to LIFX'''=Conectare la LIFX +'''Select your location'''=Selectați locația dvs. +'''Select location ({{count}} found)'''=Selectare locație ({{count}} găsite) +'''Your LIFX Account is now connected to SmartThings!'''=Contul dvs. LIFX este acum conectat la SmartThings! +'''Click 'Done' to finish setup.'''=Faceți clic pe „Done” (Efectuat) pentru a finaliza configurarea. +'''The connection could not be established!'''=Nu a putut fi stabilită conexiunea! +'''Click 'Done' to return to the menu.'''=Faceți clic pe „Done” (Efectuat) pentru a reveni la meniu. +'''Your LIFX Account is already connected to SmartThings!'''=Contul dvs. LIFX este deja conectat la SmartThings! +'''Click 'Done' to finish setup.'''=Faceți clic pe „Done” (Efectuat) pentru a finaliza configurarea. +'''SmartThings Connection'''=Conexiune SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/ru_RU.properties b/smartapps/smartthings/lifx-connect.src/i18n/ru_RU.properties new file mode 100644 index 0000000..cbd7da1 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/ru_RU.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Позволяет использовать умные электролампы LIFX со SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Коснитесь, чтобы ввести учетные данные LIFX +'''Connect to LIFX'''=Подключиться к LIFX +'''Tap here to connect your LIFX account'''=Коснитесь здесь, чтобы подключить свою учетную запись LIFX +'''Connect to LIFX'''=Подключиться к LIFX +'''Select your location'''=Выберите свое месторасположение +'''Select location ({{count}} found)'''=Выбор местоположения (найдено {{count}}) +'''Your LIFX Account is now connected to SmartThings!'''=Теперь ваша учетная запись LIFX подключена к SmartThings! +'''Click 'Done' to finish setup.'''=Для завершения настройки нажмите «Готово». +'''The connection could not be established!'''=Не удалось установить соединение! +'''Click 'Done' to return to the menu.'''=Чтобы вернуться в меню, нажмите «Готово». +'''Your LIFX Account is already connected to SmartThings!'''=Ваша учетная запись LIFX уже подключена к SmartThings! +'''Click 'Done' to finish setup.'''=Для завершения настройки нажмите «Готово». +'''SmartThings Connection'''=Подключение SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/sk_SK.properties b/smartapps/smartthings/lifx-connect.src/i18n/sk_SK.properties new file mode 100644 index 0000000..2eec44c --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/sk_SK.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Umožňuje používať inteligentné žiarovky LIFX so systémom SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Ťuknutím zadajte poverenia pre LIFX +'''Connect to LIFX'''=Pripojenie k zariadeniu LIFX +'''Tap here to connect your LIFX account'''=Ťuknutím sem sa môžete pripojiť ku kontu LIFX +'''Connect to LIFX'''=Pripojenie k zariadeniu LIFX +'''Select your location'''=Vyberte umiestnenie +'''Select location ({{count}} found)'''=Vyberte umiestnenie (nájdené: {{count}}) +'''Your LIFX Account is now connected to SmartThings!'''=Vaše konto LIFX je teraz prepojené so systémom SmartThings. +'''Click 'Done' to finish setup.'''=Kliknutím na tlačidlo Done (Hotovo) dokončite inštaláciu. +'''The connection could not be established!'''=Nepodarilo sa nadviazať spojenie. +'''Click 'Done' to return to the menu.'''=Kliknutím na tlačidlo Done (Hotovo) sa vráťte do menu. +'''Your LIFX Account is already connected to SmartThings!'''=Vaše konto LIFX je už prepojené so systémom SmartThings. +'''Click 'Done' to finish setup.'''=Kliknutím na tlačidlo Done (Hotovo) dokončite inštaláciu. +'''SmartThings Connection'''=Pripojenie k zariadeniu SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/sl_SI.properties b/smartapps/smartthings/lifx-connect.src/i18n/sl_SI.properties new file mode 100644 index 0000000..d298313 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/sl_SI.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Omogoča uporabo pametnih žarnic LIFX s storitvijo SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Pritisnite za vnos poverilnic LIFX +'''Connect to LIFX'''=Povezava z LIFX +'''Tap here to connect your LIFX account'''=Pritisnite tukaj, da povežete račun LIFX +'''Connect to LIFX'''=Povezava z LIFX +'''Select your location'''=Izberite svojo lokacijo +'''Select location ({{count}} found)'''=Izberite lokacijo (št. najdenih: {{count}}) +'''Your LIFX Account is now connected to SmartThings!'''=Vaš račun LIFX je zdaj povezan s storitvijo SmartThings! +'''Click 'Done' to finish setup.'''=Kliknite »Done« (Končano), da zaključite nastavitev. +'''The connection could not be established!'''=Povezave ni bilo mogoče vzpostaviti! +'''Click 'Done' to return to the menu.'''=Kliknite »Done« (Končano), da se vrnete v meni. +'''Your LIFX Account is already connected to SmartThings!'''=Račun LIFX je že povezan s storitvijo SmartThings! +'''Click 'Done' to finish setup.'''=Kliknite »Done« (Končano), da zaključite nastavitev. +'''SmartThings Connection'''=Povezava SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/sq_AL.properties b/smartapps/smartthings/lifx-connect.src/i18n/sq_AL.properties new file mode 100644 index 0000000..7a313ec --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/sq_AL.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Të lejon të përdorësh llamba inteligjente LIFX me SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Trokit për të futur kredencialet LIFX +'''Connect to LIFX'''=Lidhu me LIFX +'''Tap here to connect your LIFX account'''=Trokit këtu për të lidhur llogarinë LIFX +'''Connect to LIFX'''=Lidhu me LIFX +'''Select your location'''=Përzgjidh vendndodhjen tënde +'''Select location ({{count}} found)'''=Përzgjidh vendndodhjen (u gjet {{count}}) +'''Your LIFX Account is now connected to SmartThings!'''=Llogaria jote LIFX tani është lidhur me SmartThings! +'''Click 'Done' to finish setup.'''=Kliko mbi ‘Done’ (U krye) për ta mbaruar konfigurimin. +'''The connection could not be established!'''=Lidhja nuk u vendos dot! +'''Click 'Done' to return to the menu.'''=Kliko mbi ‘Done’ (U krye) për t’u kthyer në meny. +'''Your LIFX Account is already connected to SmartThings!'''=Llogaria jote LIFX tashmë është lidhur me SmartThings! +'''Click 'Done' to finish setup.'''=Kliko mbi ‘Done’ (U krye) për ta mbaruar konfigurimin. +'''SmartThings Connection'''=Lidhja SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/sr_RS.properties b/smartapps/smartthings/lifx-connect.src/i18n/sr_RS.properties new file mode 100644 index 0000000..3e3b477 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/sr_RS.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Dozvoljava vam da koristite LIFX pametne sijalice sa aplikacijom SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Kucnite za unos LIFX akreditiva +'''Connect to LIFX'''=Povežite se na LIFX +'''Tap here to connect your LIFX account'''=Kucnite ovde da biste se povezali na svoj LIFX nalog +'''Connect to LIFX'''=Povežite se na LIFX +'''Select your location'''=Izaberite lokaciju na kojoj se nalazite +'''Select location ({{count}} found)'''=Izaberite lokaciju ({{count}} pronađeno) +'''Your LIFX Account is now connected to SmartThings!'''=Vaš LIFX nalog je sada povezan na SmartThings! +'''Click 'Done' to finish setup.'''=Kliknite na „Done” (Gotovo) za kraj konfiguracije. +'''The connection could not be established!'''=Veza nije uspostavljena! +'''Click 'Done' to return to the menu.'''=Kliknite na „Done” (Gotovo) da biste se vratili na meni. +'''Your LIFX Account is already connected to SmartThings!'''=Vaš LIFX nalog je već povezan na SmartThings! +'''Click 'Done' to finish setup.'''=Kliknite na „Done” (Gotovo) za kraj konfiguracije. +'''SmartThings Connection'''=SmartThings veza diff --git a/smartapps/smartthings/lifx-connect.src/i18n/sv_SE.properties b/smartapps/smartthings/lifx-connect.src/i18n/sv_SE.properties new file mode 100644 index 0000000..434d302 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/sv_SE.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=Gör att du kan använda de smarta LIFX-lamporna med SmartThings. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=Tryck för att ange LIFX-inloggningsuppgifter +'''Connect to LIFX'''=Anslut till LIFX +'''Tap here to connect your LIFX account'''=Tryck här för att avsluta ditt LIFX-konto +'''Connect to LIFX'''=Anslut till LIFX +'''Select your location'''=Välj din plats +'''Select location ({{count}} found)'''=Välj plats ({{count}} hittades) +'''Your LIFX Account is now connected to SmartThings!'''=Ditt LIFX-konto är nu anslutet till SmartThings! +'''Click 'Done' to finish setup.'''=Klicka på Done (Klart) för att slutföra konfigurationen. +'''The connection could not be established!'''=Det gick inte att upprätta anslutningen! +'''Click 'Done' to return to the menu.'''=Klicka på Done (Klart) för att återgå till menyn. +'''Your LIFX Account is already connected to SmartThings!'''=Ditt LIFX-konto är redan anslutet till SmartThings! +'''Click 'Done' to finish setup.'''=Klicka på Done (Klart) för att slutföra konfigurationen. +'''SmartThings Connection'''=SmartThings-anslutning diff --git a/smartapps/smartthings/lifx-connect.src/i18n/th_TH.properties b/smartapps/smartthings/lifx-connect.src/i18n/th_TH.properties new file mode 100644 index 0000000..2bccbb8 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/th_TH.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=ทำให้คุณสามารถใช้หลอดไฟอัจฉริยะ LIFX กับ SmartThings ได้ +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=แตะเพื่อใส่ข้อมูลยืนยันตัวตน LIFX +'''Connect to LIFX'''=เชื่อมต่อกับ LIFX +'''Tap here to connect your LIFX account'''=แตะที่นี่เพื่อเชื่อมต่อบัญชีผู้ใช้ LIFX ของคุณ +'''Connect to LIFX'''=เชื่อมต่อกับ LIFX +'''Select your location'''=เลือกตำแหน่งของคุณ +'''Select location ({{count}} found)'''=เลือกตำแหน่ง ({{count}} found) +'''Your LIFX Account is now connected to SmartThings!'''=ตอนนี้บัญชีผู้ใช้ LIFX ของคุณเชื่อมต่อกับ SmartThings แล้ว! +'''Click 'Done' to finish setup.'''=คลิก 'เสร็จสิ้น' เพื่อทำการตั้งค่าให้เสร็จสิ้น +'''The connection could not be established!'''=ไม่สามารถสร้างการเชื่อมต่อได้! +'''Click 'Done' to return to the menu.'''=คลิก 'เสร็จสิ้น' เพื่อกลับไปยังเมนู +'''Your LIFX Account is already connected to SmartThings!'''=บัญชีผู้ใช้ LIFX ของคุณเชื่อมต่อกับ SmartThings อยู่แล้ว! +'''Click 'Done' to finish setup.'''=คลิก 'เสร็จสิ้น' เพื่อทำการตั้งค่าให้เสร็จสิ้น +'''SmartThings Connection'''=การเชื่อมต่อ SmartThings diff --git a/smartapps/smartthings/lifx-connect.src/i18n/tr_TR.properties b/smartapps/smartthings/lifx-connect.src/i18n/tr_TR.properties new file mode 100644 index 0000000..5e6980c --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/tr_TR.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=LIFX akıllı ampulleri SmartThings ile birlikte kullanabilmenizi sağlar. +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=LIFX kimlik bilgilerini girmek için dokunun +'''Connect to LIFX'''=LIFX'e bağlan +'''Tap here to connect your LIFX account'''=LIFX hesabınıza bağlanmak için buraya dokunun +'''Connect to LIFX'''=LIFX'e bağlan +'''Select your location'''=Konumunuzu seçin +'''Select location ({{count}} found)'''=Konum seçin ({{count}} bulundu) +'''Your LIFX Account is now connected to SmartThings!'''=LIFX Hesabınız artık SmartThings'e bağlandı! +'''Click 'Done' to finish setup.'''=Kurulumu bitirmek için 'Bitti' öğesine tıklayın. +'''The connection could not be established!'''=Bağlantı kurulamadı! +'''Click 'Done' to return to the menu.'''=Menüye dönmek için 'Bitti' öğesine tıklayın. +'''Your LIFX Account is already connected to SmartThings!'''=LIFX Hesabınız zaten SmartThings'e bağlı! +'''Click 'Done' to finish setup.'''=Kurulumu bitirmek için 'Bitti' öğesine tıklayın. +'''SmartThings Connection'''=SmartThings Bağlantısı diff --git a/smartapps/smartthings/lifx-connect.src/i18n/zh_CN.properties b/smartapps/smartthings/lifx-connect.src/i18n/zh_CN.properties new file mode 100644 index 0000000..1faaee3 --- /dev/null +++ b/smartapps/smartthings/lifx-connect.src/i18n/zh_CN.properties @@ -0,0 +1,15 @@ +'''Allows you to use LIFX smart light bulbs with SmartThings.'''=允许您将 LIFX 智能灯泡与 SmartThings 一起使用。 +'''LIFX'''=LIFX +'''Tap to enter LIFX credentials'''=点击以输入 LIFX 凭据 +'''Connect to LIFX'''=连接至 LIFX +'''Tap here to connect your LIFX account'''=点击此处连接 LIFX 帐户 +'''Connect to LIFX'''=连接至 LIFX +'''Select your location'''=选择您的位置 +'''Select location ({{count}} found)'''=选择位置 (发现 {{count}} 个) +'''Your LIFX Account is now connected to SmartThings!'''=LIFX 帐户现在已连接至 SmartThings! +'''Click 'Done' to finish setup.'''=单击“完成”以完成设置。 +'''The connection could not be established!'''=无法建立连接! +'''Click 'Done' to return to the menu.'''=单击“完成”返回菜单。 +'''Your LIFX Account is already connected to SmartThings!'''=LIFX 帐户现在已连接至 SmartThings! +'''Click 'Done' to finish setup.'''=单击“完成”以完成设置。 +'''SmartThings Connection'''=SmartThings 连接 diff --git a/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy b/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy index 734889f..974561e 100644 --- a/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy +++ b/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy @@ -4,6 +4,8 @@ * Copyright 2015 LIFX * */ +include 'localization' + definition( name: "LIFX (Connect)", namespace: "smartthings", @@ -66,7 +68,7 @@ def authPage() { return dynamicPage(name:"Credentials", title:"", nextPage:"", install:true, uninstall: true) { section("Select your location") { - input "selectedLocationId", "enum", required:true, title:"Select location (${count} found)", multiple:false, options:options, submitOnChange: true + input "selectedLocationId", "enum", required:true, title:"Select location ({{count}} found)", messageArgs: [count: count], multiple:false, options:options, submitOnChange: true } } } From 379e70b3439544703323b544bbfcc3d3379b6126 Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Mon, 20 Feb 2017 17:54:54 +0530 Subject: [PATCH 057/104] [DVCSMP-2441] Standardize Page 2 of DTH UX Improvements --- .../acceleration-sensor-capability.groovy | 4 +- .../contact-sensor-capability.groovy | 4 +- .../motion-sensor-capability.groovy | 2 +- .../switch-level-capability.groovy | 4 +- .../water-sensor-capability.groovy | 2 +- .../spruce-controller.groovy | 38 +++++++++---------- .../simulated-garage-door-opener.groovy | 8 ++-- .../simulated-switch.groovy | 2 +- .../tile-basic-standard.groovy | 6 +-- .../tile-multiattribute-lighting.groovy | 16 ++++---- 10 files changed, 43 insertions(+), 43 deletions(-) diff --git a/devicetypes/capabilities/acceleration-sensor-capability.src/acceleration-sensor-capability.groovy b/devicetypes/capabilities/acceleration-sensor-capability.src/acceleration-sensor-capability.groovy index 14ec809..a1e00b7 100644 --- a/devicetypes/capabilities/acceleration-sensor-capability.src/acceleration-sensor-capability.groovy +++ b/devicetypes/capabilities/acceleration-sensor-capability.src/acceleration-sensor-capability.groovy @@ -23,8 +23,8 @@ metadata { tiles { standardTile("acceleration", "device.acceleration", width: 2, height: 2) { - state("inactive", label:'${name}', icon:"st.motion.acceleration.inactive", backgroundColor:"#ffffff") - state("active", label:'${name}', icon:"st.motion.acceleration.active", backgroundColor:"#53a7c0") + state("inactive", label:'${name}', icon:"st.motion.acceleration.inactive", backgroundColor:"#cccccc") + state("active", label:'${name}', icon:"st.motion.acceleration.active", backgroundColor:"#00A0DC") } main "acceleration" diff --git a/devicetypes/capabilities/contact-sensor-capability.src/contact-sensor-capability.groovy b/devicetypes/capabilities/contact-sensor-capability.src/contact-sensor-capability.groovy index 1aa6f22..a134693 100644 --- a/devicetypes/capabilities/contact-sensor-capability.src/contact-sensor-capability.groovy +++ b/devicetypes/capabilities/contact-sensor-capability.src/contact-sensor-capability.groovy @@ -23,8 +23,8 @@ metadata { tiles { standardTile("contact", "device.contact", width: 2, height: 2) { - state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#79b821") - state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e") + state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#00A0DC") + state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#e86d13") } main "contact" details "contact" diff --git a/devicetypes/capabilities/motion-sensor-capability.src/motion-sensor-capability.groovy b/devicetypes/capabilities/motion-sensor-capability.src/motion-sensor-capability.groovy index 52cc2b9..493173f 100644 --- a/devicetypes/capabilities/motion-sensor-capability.src/motion-sensor-capability.groovy +++ b/devicetypes/capabilities/motion-sensor-capability.src/motion-sensor-capability.groovy @@ -24,7 +24,7 @@ metadata { tiles { standardTile("motion", "device.motion", width: 2, height: 2) { state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff") - state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0") + state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00A0DC") } main "motion" details "motion" diff --git a/devicetypes/capabilities/switch-level-capability.src/switch-level-capability.groovy b/devicetypes/capabilities/switch-level-capability.src/switch-level-capability.groovy index 15230bc..58fc9aa 100644 --- a/devicetypes/capabilities/switch-level-capability.src/switch-level-capability.groovy +++ b/devicetypes/capabilities/switch-level-capability.src/switch-level-capability.groovy @@ -35,8 +35,8 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2) { state "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" - state "turningOn", label:'${name}', icon:"st.switches.switch.on", backgroundColor:"#79b821" + state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" + state "turningOn", label:'${name}', icon:"st.switches.switch.on", backgroundColor:"#00A0DC" state "turningOff", label:'${name}', icon:"st.switches.switch.off", backgroundColor:"#ffffff" } controlTile("levelSliderControl", "device.level", "slider", height: 2, width: 1, inactiveLabel: false) { diff --git a/devicetypes/capabilities/water-sensor-capability.src/water-sensor-capability.groovy b/devicetypes/capabilities/water-sensor-capability.src/water-sensor-capability.groovy index 5b338e5..567bcf0 100644 --- a/devicetypes/capabilities/water-sensor-capability.src/water-sensor-capability.groovy +++ b/devicetypes/capabilities/water-sensor-capability.src/water-sensor-capability.groovy @@ -24,7 +24,7 @@ metadata { tiles { standardTile("water", "device.water", width: 2, height: 2) { state "dry", icon:"st.alarm.water.dry", backgroundColor:"#ffffff" - state "wet", icon:"st.alarm.water.wet", backgroundColor:"#53a7c0" + state "wet", icon:"st.alarm.water.wet", backgroundColor:"#00A0DC" } main "water" diff --git a/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy b/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy index 0025def..baf2f1a 100644 --- a/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy +++ b/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy @@ -122,13 +122,13 @@ metadata { state "raintoday", label: 'Rain Today', icon: "st.custom.wuk.nt_chancerain" state "rainy", label: 'Previous Rain', icon: "st.custom.wuk.nt_chancerain" state "raintom", label: 'Rain Tomorrow', icon: "st.custom.wuk.nt_chancerain" - state "donewweek", label: 'Spruce Finished', icon: "st.Outdoor.outdoor5", backgroundColor: "#52c435" + state "donewweek", label: 'Spruce Finished', icon: "st.Outdoor.outdoor5", backgroundColor: "#00A0DC" state "skipping", label: 'Skip Today', icon: "st.Outdoor.outdoor20", backgroundColor: "#36cfe3" state "moisture", label: '', icon: "st.Weather.weather2", backgroundColor: "#36cfe3" - state "pause", label: 'PAUSE', icon: "st.contact.contact.open", backgroundColor: "#f2a51f" + state "pause", label: 'PAUSE', icon: "st.contact.contact.open", backgroundColor: "#e86d13" state "active", label: 'Active', icon: "st.Outdoor.outdoor12", backgroundColor: "#3DC72E" state "season", label: 'Seasonal Adjustment', icon: "st.Outdoor.outdoor17", backgroundColor: "#ffb900" - state "disable", label: 'Disabled', icon: "st.secondary.off", backgroundColor: "#888888" + state "disable", label: 'Disabled', icon: "st.secondary.off", backgroundColor: "#cccccc" state "warning", label: '', icon: "st.categories.damageAndDanger", backgroundColor: "#ffff7f" state "alarm", label: 'Alarm', icon: "st.categories.damageAndDanger", backgroundColor: "#f9240c" } @@ -144,67 +144,67 @@ metadata { } standardTile("switch1", "device.switch1") { state "z1off", label: '1', action: "z1on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z1on", label: '1', action: "z1off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z1on", label: '1', action: "z1off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch2", "device.switch2") { state "z2off", label: '2', action: "z2on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z2on", label: '2', action: "z2off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z2on", label: '2', action: "z2off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch3", "device.switch3", inactiveLabel: false) { state "z3off", label: '3', action: "z3on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z3on", label: '3', action: "z3off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z3on", label: '3', action: "z3off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch4", "device.switch4", inactiveLabel: false) { state "z4off", label: '4', action: "z4on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z4on", label: '4', action: "z4off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z4on", label: '4', action: "z4off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch5", "device.switch5", inactiveLabel: false) { state "z5off", label: '5', action: "z5on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z5on", label: '5', action: "z5off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z5on", label: '5', action: "z5off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch6", "device.switch6", inactiveLabel: false) { state "z6off", label: '6', action: "z6on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z6on", label: '6', action: "z6off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z6on", label: '6', action: "z6off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch7", "device.switch7", inactiveLabel: false) { state "z7off", label: '7', action: "z7on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z7on", label: '7', action: "z7off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z7on", label: '7', action: "z7off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch8", "device.switch8", inactiveLabel: false) { state "z8off", label: '8', action: "z8on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z8on", label: '8', action: "z8off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z8on", label: '8', action: "z8off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch9", "device.switch9", inactiveLabel: false) { state "z9off", label: '9', action: "z9on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z9on", label: '9', action: "z9off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z9on", label: '9', action: "z9off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch10", "device.switch10", inactiveLabel: false) { state "z10off", label: '10', action: "z10on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z10on", label: '10', action: "z10off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z10on", label: '10', action: "z10off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch11", "device.switch11", inactiveLabel: false) { state "z11off", label: '11', action: "z11on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z11on", label: '11', action: "z11off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z11on", label: '11', action: "z11off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch12", "device.switch12", inactiveLabel: false) { state "z12off", label: '12', action: "z12on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z12on", label: '12', action: "z12off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z12on", label: '12', action: "z12off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch13", "device.switch13", inactiveLabel: false) { state "z13off", label: '13', action: "z13on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z13on", label: '13', action: "z13off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z13on", label: '13', action: "z13off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch14", "device.switch14", inactiveLabel: false) { state "z14off", label: '14', action: "z14on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z14on", label: '14', action: "z14off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z14on", label: '14', action: "z14off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch15", "device.switch15", inactiveLabel: false) { state "z15off", label: '15', action: "z15on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z15on", label: '15', action: "z15off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z15on", label: '15', action: "z15off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("switch16", "device.switch16", inactiveLabel: false) { state "z16off", label: '16', action: "z16on", icon: "st.valves.water.closed", backgroundColor: "#ffffff" - state "z16on", label: '16', action: "z16off", icon: "st.valves.water.open", backgroundColor: "#46c2e8" + state "z16on", label: '16', action: "z16off", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") { state "default", action: "refresh", icon:"st.secondary.refresh" diff --git a/devicetypes/smartthings/testing/simulated-garage-door-opener.src/simulated-garage-door-opener.groovy b/devicetypes/smartthings/testing/simulated-garage-door-opener.src/simulated-garage-door-opener.groovy index a54c567..3b37682 100644 --- a/devicetypes/smartthings/testing/simulated-garage-door-opener.src/simulated-garage-door-opener.groovy +++ b/devicetypes/smartthings/testing/simulated-garage-door-opener.src/simulated-garage-door-opener.groovy @@ -29,10 +29,10 @@ metadata { tiles { standardTile("toggle", "device.door", width: 2, height: 2) { - state("closed", label:'${name}', action:"door control.open", icon:"st.doors.garage.garage-closed", backgroundColor:"#79b821", nextState:"opening") - state("open", label:'${name}', action:"door control.close", icon:"st.doors.garage.garage-open", backgroundColor:"#ffa81e", nextState:"closing") - state("opening", label:'${name}', icon:"st.doors.garage.garage-closed", backgroundColor:"#ffe71e") - state("closing", label:'${name}', icon:"st.doors.garage.garage-open", backgroundColor:"#ffe71e") + state("closed", label:'${name}', action:"door control.open", icon:"st.doors.garage.garage-closed", backgroundColor:"#00A0DC", nextState:"opening") + state("open", label:'${name}', action:"door control.close", icon:"st.doors.garage.garage-open", backgroundColor:"#e86d13", nextState:"closing") + state("opening", label:'${name}', icon:"st.doors.garage.garage-closed", backgroundColor:"#e86d13") + state("closing", label:'${name}', icon:"st.doors.garage.garage-open", backgroundColor:"#00A0DC") } standardTile("open", "device.door", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/testing/simulated-switch.src/simulated-switch.groovy b/devicetypes/smartthings/testing/simulated-switch.src/simulated-switch.groovy index a977b86..8bf8088 100644 --- a/devicetypes/smartthings/testing/simulated-switch.src/simulated-switch.groovy +++ b/devicetypes/smartthings/testing/simulated-switch.src/simulated-switch.groovy @@ -26,7 +26,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: '${currentValue}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" - state "on", label: '${currentValue}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${currentValue}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" } standardTile("on", "device.switch", decoration: "flat") { state "default", label: 'On', action: "onPhysical", backgroundColor: "#ffffff" diff --git a/devicetypes/smartthings/tile-ux/tile-basic-standard.src/tile-basic-standard.groovy b/devicetypes/smartthings/tile-ux/tile-basic-standard.src/tile-basic-standard.groovy index 1f4f029..21fcea6 100644 --- a/devicetypes/smartthings/tile-ux/tile-basic-standard.src/tile-basic-standard.groovy +++ b/devicetypes/smartthings/tile-ux/tile-basic-standard.src/tile-basic-standard.groovy @@ -24,19 +24,19 @@ metadata { // standard tile with actions standardTile("actionRings", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: '${currentValue}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" - state "on", label: '${currentValue}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${currentValue}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" } // standard flat tile with actions standardTile("actionFlat", "device.switch", width: 2, height: 2, canChangeIcon: true, decoration: "flat") { state "off", label: '${currentValue}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" - state "on", label: '${currentValue}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${currentValue}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" } // standard flat tile without actions standardTile("noActionFlat", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: '${currentValue}',icon: "st.switches.switch.off", backgroundColor: "#ffffff" - state "on", label: '${currentValue}', icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${currentValue}', icon: "st.switches.switch.on", backgroundColor: "#00A0DC" } // standard flat tile with only a label diff --git a/devicetypes/smartthings/tile-ux/tile-multiattribute-lighting.src/tile-multiattribute-lighting.groovy b/devicetypes/smartthings/tile-ux/tile-multiattribute-lighting.src/tile-multiattribute-lighting.groovy index 7ffaabc..283f5a5 100644 --- a/devicetypes/smartthings/tile-ux/tile-multiattribute-lighting.src/tile-multiattribute-lighting.groovy +++ b/devicetypes/smartthings/tile-ux/tile-multiattribute-lighting.src/tile-multiattribute-lighting.groovy @@ -33,9 +33,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true) { tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.power", key: "SECONDARY_CONTROL") { @@ -51,9 +51,9 @@ metadata { multiAttributeTile(name:"switchNoPower", type: "lighting", width: 6, height: 4, canChangeIcon: true) { tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { @@ -66,9 +66,9 @@ metadata { multiAttributeTile(name:"switchNoSlider", type: "lighting", width: 6, height: 4, canChangeIcon: true) { tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.power", key: "SECONDARY_CONTROL") { @@ -81,9 +81,9 @@ metadata { multiAttributeTile(name:"switchNoSliderOrColor", type: "lighting", width: 6, height: 4, canChangeIcon: true) { tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.power", key: "SECONDARY_CONTROL") { From 12be259779cb705be329b3751b9c3487f65db00a Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Thu, 23 Feb 2017 02:41:20 -0800 Subject: [PATCH 058/104] CON-90 fix for wemo dimming issue --- .../smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy index 460f6bc..54bf8dd 100644 --- a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy +++ b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy @@ -113,6 +113,12 @@ def refresh() { zigbee.onOffRefresh() + zigbee.levelRefresh() } +def installed() { + if ((device.getDataValue("manufacturer") == "MRVL") && (device.getDataValue("model") == "MZ100")) { + sendEvent(name: "level", value: 100) + } +} + def configure() { log.debug "Configuring Reporting and Bindings." // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time) From e787afd165f91028ab8a12351d53d4d11f5ef59b Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Thu, 23 Feb 2017 11:31:49 -0800 Subject: [PATCH 059/104] updated with more devices --- .../smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy index 54bf8dd..8fe39fc 100644 --- a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy +++ b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy @@ -114,8 +114,10 @@ def refresh() { } def installed() { - if ((device.getDataValue("manufacturer") == "MRVL") && (device.getDataValue("model") == "MZ100")) { - sendEvent(name: "level", value: 100) + if (((device.getDataValue("manufacturer") == "MRVL") && (device.getDataValue("model") == "MZ100")) || (device.getDataValue("manufacturer") == "OSRAM SYLVANIA") || (device.getDataValue("manufacturer") == "OSRAM")) { + if ((device.currentState("level")?.value == null) || (device.currentState("level")?.value == 0)) { + sendEvent(name: "level", value: 100) + } } } From a583a25ef3971d27411f903e5dc35a02b98040b1 Mon Sep 17 00:00:00 2001 From: Nicola Russo Date: Thu, 23 Feb 2017 15:31:44 -0800 Subject: [PATCH 060/104] MSA-1803: A simple web service smartapp that allows the users to control their devices through Gideon Smart home app. --- .../gideon-smart-home.groovy | 794 ++++++++++++++++++ 1 file changed, 794 insertions(+) create mode 100644 smartapps/gideon-api/gideon-smart-home.src/gideon-smart-home.groovy diff --git a/smartapps/gideon-api/gideon-smart-home.src/gideon-smart-home.groovy b/smartapps/gideon-api/gideon-smart-home.src/gideon-smart-home.groovy new file mode 100644 index 0000000..a198d72 --- /dev/null +++ b/smartapps/gideon-api/gideon-smart-home.src/gideon-smart-home.groovy @@ -0,0 +1,794 @@ +/** + * Gideon + * + * Copyright 2016 Nicola Russo + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License + * for the specific language governing permissions and limitations under the License. + * + */ +definition( + name: "Gideon Smart Home", + namespace: "gideon.api", + author: "Braindrain Solutions ltd", + description: "Gideon Smart Home SmartApp allows you to connect and control all of your SmartThings devices through the Gideon app, making your SmartThings devices even smarter.", + category: "Family", + iconUrl: "http://s33.postimg.org/t77u7y7v3/logo.png", + iconX2Url: "http://s33.postimg.org/t77u7y7v3/logo.png", + iconX3Url: "http://s33.postimg.org/t77u7y7v3/logo.png", + oauth: [displayName: "Gideon Smart Home API app", displayLink: "gideon.ai"]) + +preferences { + section("Control these contact sensors...") { + input "contact", "capability.contactSensor", multiple:true, required:false + } + section("Control these switch levels...") { + input "switchlevels", "capability.switchLevel", multiple:true, required:false + } +/* section("Control these thermostats...") { + input "thermostats", "capability.thermostat", multiple:true, required:false + }*/ + section("Control the color for these devices...") { + input "colors", "capability.colorControl", multiple:true, required:false + } + section("Control the color temperature for these devices...") { + input "kelvin", "capability.colorTemperature", multiple:true, required:false + } + section("Control these switches...") { + input "switches", "capability.switch", multiple:true, required:false + } + section("Control these smoke alarms...") { + input "smoke_alarms", "capability.smokeDetector", multiple:true, required:false + } + section("Control these window shades...") { + input "shades", "capability.windowShade", multiple:true, required:false + } + section("Control these garage doors...") { + input "garage", "capability.garageDoorControl", multiple:true, required:false + } + section("Control these water sensors...") { + input "water_sensors", "capability.waterSensor", multiple:true, required:false + } + section("Control these motion sensors...") { + input "motions", "capability.motionSensor", multiple:true, required:false + } + section("Control these presence sensors...") { + input "presence_sensors", "capability.presenceSensor", multiple:true, required:false + } + section("Control these outlets...") { + input "outlets", "capability.outlet", multiple:true, required:false + } + section("Control these power meters...") { + input "meters", "capability.powerMeter", multiple:true, required:false + } + section("Control these locks...") { + input "locks", "capability.lock", multiple:true, required:false + } + section("Control these temperature sensors...") { + input "temperature_sensors", "capability.temperatureMeasurement", multiple:true, required:false + } + section("Control these batteries...") { + input "batteries", "capability.battery", multiple:true, required:false + } +} + +def installed() { + log.debug "Installed with settings: ${settings}" + + initialize() +} + +def updated() { + log.debug "Updated with settings: ${settings}" + + unsubscribe() + initialize() +} + +def initialize() { +} + +private device(it, type) { + it ? [id: it.id, label: it.label, type: type] : null +} + +//API Mapping +mappings { + path("/getalldevices") { + action: [ + GET: "getAllDevices" + ] + } + /* + path("/thermostat/setcool/:id/:temp") { + action: [ + GET: "setCoolTemp" + ] + } + path("/thermostat/setheat/:id/:temp") { + action: [ + GET: "setHeatTemp" + ] + } + path("/thermostat/setfanmode/:id/:mode") { + action: [ + GET: "setFanMode" + ] + } + path("/thermostat/setmode/:id/:mode") { + action: [ + GET: "setThermostatMode" + ] + } + path("/thermostat/:id") { + action: [ + GET: "getThermostatStatus" + ] + } + */ + path("/light/dim/:id/:dim") { + action: [ + GET: "setLevelStatus" + ] + } + path("/light/kelvin/:id/:kelvin") { + action: [ + GET: "setKelvin" + ] + } + path("/colorlight/:id/:hue/:sat") { + action: [ + GET: "setColor" + ] + } + path("/light/status/:id") { + action: [ + GET: "getLightStatus" + ] + } + path("/light/on/:id") { + action: [ + GET: "turnOnLight" + ] + } + path("/light/off/:id") { + action: [ + GET: "turnOffLight" + ] + } + path("/doorlocks/lock/:id") { + action: [ + GET: "lockDoorLock" + ] + } + path("/doorlocks/unlock/:id") { + action: [ + GET: "unlockDoorLock" + ] + } + path("/doorlocks/:id") { + action: [ + GET: "getDoorLockStatus" + ] + } + path("/contacts/:id") { + action: [ + GET: "getContactStatus" + ] + } + path("/smoke/:id") { + action: [ + GET: "getSmokeStatus" + ] + } + path("/shades/open/:id") { + action: [ + GET: "openShade" + ] + } + path("/shades/preset/:id") { + action: [ + GET: "presetShade" + ] + } + path("/shades/close/:id") { + action: [ + GET: "closeShade" + ] + } + path("/shades/:id") { + action: [ + GET: "getShadeStatus" + ] +} + path("/garage/open/:id") { + action: [ + GET: "openGarage" + ] + } + path("/garage/close/:id") { + action: [ + GET: "closeGarage" + ] + } + path("/garage/:id") { + action: [ + GET: "getGarageStatus" + ] + } + path("/watersensors/:id") { + action: [ + GET: "getWaterSensorStatus" + ] + } + path("/tempsensors/:id") { + action: [ + GET: "getTempSensorsStatus" + ] + } + path("/meters/:id") { + action: [ + GET: "getMeterStatus" + ] + } + path("/batteries/:id") { + action: [ + GET: "getBatteryStatus" + ] + } + path("/presences/:id") { + action: [ + GET: "getPresenceStatus" + ] + } + path("/motions/:id") { + action: [ + GET: "getMotionStatus" + ] + } + path("/outlets/:id") { + action: [ + GET: "getOutletStatus" + ] + } + path("/outlets/turnon/:id") { + action: [ + GET: "turnOnOutlet" + ] + } + path("/outlets/turnoff/:id") { + action: [ + GET: "turnOffOutlet" + ] + } + path("/switches/turnon/:id") { + action: [ + GET: "turnOnSwitch" + ] + } + path("/switches/turnoff/:id") { + action: [ + GET: "turnOffSwitch" + ] + } + path("/switches/:id") { + action: [ + GET: "getSwitchStatus" + ] + } +} + +//API Methods +def getAllDevices() { + def locks_list = locks.collect{device(it,"Lock")} + /*def thermo_list = thermostats.collect{device(it,"Thermostat")}*/ + def colors_list = colors.collect{device(it,"Color")} + def kelvin_list = kelvin.collect{device(it,"Kelvin")} + def contact_list = contact.collect{device(it,"Contact Sensor")} + def smokes_list = smoke_alarms.collect{device(it,"Smoke Alarm")} + def shades_list = shades.collect{device(it,"Window Shade")} + def garage_list = garage.collect{device(it,"Garage Door")} + def water_sensors_list = water_sensors.collect{device(it,"Water Sensor")} + def presences_list = presence_sensors.collect{device(it,"Presence")} + def motions_list = motions.collect{device(it,"Motion")} + def outlets_list = outlets.collect{device(it,"Outlet")} + def switches_list = switches.collect{device(it,"Switch")} + def switchlevels_list = switchlevels.collect{device(it,"Switch Level")} + def temp_list = temperature_sensors.collect{device(it,"Temperature")} + def meters_list = meters.collect{device(it,"Power Meters")} + def battery_list = batteries.collect{device(it,"Batteries")} + return outlets_list + kelvin_list + colors_list + switchlevels_list + smokes_list + contact_list + water_sensors_list + shades_list + garage_list + locks_list + presences_list + motions_list + switches_list + temp_list + meters_list + battery_list +} + +//thermostat +/* +def setCoolTemp() { + def device = thermostats.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + if(device.hasCommand("setCoolingSetpoint")) { + device.setCoolingSetpoint(params.temp.toInteger()); + return [result_action: "200"] + } + else { + httpError(510, "Not supported!") + } + } +} +def setHeatTemp() { + def device = thermostats.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + if(device.hasCommand("setHeatingSetpoint")) { + device.setHeatingSetpoint(params.temp.toInteger()); + return [result_action: "200"] + } + else { + httpError(510, "Not supported!") + } + } +} +def setFanMode() { + def device = thermostats.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + if(device.hasCommand("setThermostatFanMode")) { + device.setThermostatFanMode(params.mode); + return [result_action: "200"] + } + else { + httpError(510, "Not supported!") + } + } +} +def setThermostatMode() { + def device = thermostats.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + if(device.hasCommand("setThermostatMode")) { + device.setThermostatMode(params.mode); + return [result_action: "200"] + } + else { + httpError(510, "Not supported!") + } + } +} +def getThermostatStatus() { + def device = thermostats.find{ it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + return [ThermostatOperatingState: device.currentValue('thermostatOperatingState'), ThermostatSetpoint: device.currentValue('thermostatSetpoint'), + ThermostatFanMode: device.currentValue('thermostatFanMode'), ThermostatMode: device.currentValue('thermostatMode')] + } +} +*/ +//light +def turnOnLight() { + def device = switches.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + device.on(); + + return [Device_id: params.id, result_action: "200"] + } + } + +def turnOffLight() { + def device = switches.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + device.off(); + + return [Device_id: params.id, result_action: "200"] + } +} + +def getLightStatus() { + def device = switches.find{ it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + return [Status: device.currentValue('switch'), Dim: getLevelStatus(params.id), Color: getColorStatus(params.id), Kelvin: getKelvinStatus(params.id)] + } +} + +//color control +def setColor() { + def device = colors.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + def map = [hue:params.hue.toInteger(), saturation:params.sat.toInteger()] + + device.setColor(map); + + return [Device_id: params.id, result_action: "200"] + } +} + +def getColorStatus(id) { + def device = colors.find { it.id == id } + if (!device) { + return [Color: "none"] + } else { + return [hue: device.currentValue('hue'), saturation: device.currentValue('saturation')] + } +} + +//kelvin control +def setKelvin() { + def device = kelvin.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + device.setColorTemperature(params.kelvin.toInteger()); + + return [Device_id: params.id, result_action: "200"] + } +} + +def getKelvinStatus(id) { + def device = kelvin.find { it.id == id } + if (!device) { + return [kelvin: "none"] + } else { + return [kelvin: device.currentValue('colorTemperature')] + } +} + +//switch level +def getLevelStatus() { + def device = switchlevels.find { it.id == params.id } + if (!device) { + [Level: "No dimmer"] + } else { + return [Level: device.currentValue('level')] + } +} + +def getLevelStatus(id) { + def device = switchlevels.find { it.id == id } + if (!device) { + [Level: "No dimmer"] + } else { + return [Level: device.currentValue('level')] + } +} + + +def setLevelStatus() { + def device = switchlevels.find { it.id == params.id } + def level = params.dim + if (!device) { + httpError(404, "Device not found") + } else { + device.setLevel(level.toInteger()) + return [result_action: "200", Level: device.currentValue('level')] + } +} + + +//contact sensors +def getContactStatus() { + def device = contact.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + def args = getTempSensorsStatus(device.id) + return [Device_state: device.currentValue('contact')] + args + } +} + +//smoke detectors +def getSmokeStatus() { + def device = smoke_alarms.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + def bat = getBatteryStatus(device.id) + return [Device_state: device.currentValue('smoke')] + bat + } +} + +//garage +def getGarageStatus() { + def device = garage.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + return [Device_state: device.currentValue('door')] + } +} + +def openGarage() { + def device = garage.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + device.open(); + + return [Device_id: params.id, result_action: "200"] + } + } + +def closeGarage() { + def device = garage.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + device.close(); + + return [Device_id: params.id, result_action: "200"] + } + } +//shades +def getShadeStatus() { + def device = shades.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + return [Device_state: device.currentValue('windowShade')] + } +} + +def openShade() { + def device = shades.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + device.open(); + + return [Device_id: params.id, result_action: "200"] + } + } + +def presetShade() { + def device = shades.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + device.presetPosition(); + + return [Device_id: params.id, result_action: "200"] + } + } + +def closeShade() { + def device = shades.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + device.close(); + + return [Device_id: params.id, result_action: "200"] + } + } + +//water sensor +def getWaterSensorStatus() { + def device = water_sensors.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + def bat = getBatteryStatus(device.id) + return [Device_state: device.currentValue('water')] + bat + } +} +//batteries +def getBatteryStatus() { + def device = batteries.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + return [Device_state: device.latestValue("battery")] + } +} + +def getBatteryStatus(id) { + def device = batteries.find { it.id == id } + if (!device) { + return [] + } else { + return [battery_state: device.latestValue("battery")] + } +} + +//LOCKS +def getDoorLockStatus() { + def device = locks.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + def bat = getBatteryStatus(device.id) + return [Device_state: device.currentValue('lock')] + bat + } +} + +def lockDoorLock() { + def device = locks.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + device.lock(); + + return [Device_id: params.id, result_action: "200"] + } + } + +def unlockDoorLock() { + def device = locks.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + device.unlock(); + + return [Device_id: params.id, result_action: "200"] + } + } +//PRESENCE +def getPresenceStatus() { + + def device = presence_sensors.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + def bat = getBatteryStatus(device.id) + return [Device_state: device.currentValue('presence')] + bat + } +} + +//MOTION +def getMotionStatus() { + + def device = motions.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + def args = getTempSensorsStatus(device.id) + return [Device_state: device.currentValue('motion')] + args + } +} + +//OUTLET +def getOutletStatus() { + + def device = outlets.find { it.id == params.id } + if (!device) { + device = switches.find { it.id == params.id } + if(!device) { + httpError(404, "Device not found") + } + } + def watt = getMeterStatus(device.id) + + return [Device_state: device.currentValue('switch')] + watt +} + +def getMeterStatus() { + + def device = meters.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + return [Device_id: device.id, Device_type: device.type, Current_watt: device.currentValue("power")] + } +} + +def getMeterStatus(id) { + + def device = meters.find { it.id == id } + if (!device) { + return [] + } else { + return [Current_watt: device.currentValue("power")] + } +} + + +def turnOnOutlet() { + def device = outlets.find { it.id == params.id } + if (!device) { + device = switches.find { it.id == params.id } + if(!device) { + httpError(404, "Device not found") + } + } + + device.on(); + + return [Device_id: params.id, result_action: "200"] +} + +def turnOffOutlet() { + def device = outlets.find { it.id == params.id } + if (!device) { + device = switches.find { it.id == params.id } + if(!device) { + httpError(404, "Device not found") + } + } + + device.off(); + + return [Device_id: params.id, result_action: "200"] +} + +//SWITCH +def getSwitchStatus() { + def device = switches.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + return [Device_state: device.currentValue('switch'), Dim: getLevelStatus(params.id)] + } +} + +def turnOnSwitch() { + def device = switches.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + device.on(); + + return [Device_id: params.id, result_action: "200"] + } +} + +def turnOffSwitch() { + def device = switches.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + device.off(); + + return [Device_id: params.id, result_action: "200"] + } +} + + +//TEMPERATURE +def getTempSensorsStatus() { + def device = temperature_sensors.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + def bat = getBatteryStatus(device.id) + def scale = [Scale: location.temperatureScale] + return [Device_state: device.currentValue('temperature')] + scale + bat + } +} + +def getTempSensorsStatus(id) { + def device = temperature_sensors.find { it.id == id } + if (!device) { + return [] + } else { + def bat = getBatteryStatus(device.id) + return [temperature: device.currentValue('temperature')] + bat + } + } \ No newline at end of file From 6ef49e92bb9b46a182becd72a5053925b8883ba0 Mon Sep 17 00:00:00 2001 From: juano2310 Date: Fri, 24 Feb 2017 14:06:50 -0500 Subject: [PATCH 061/104] Rename from _ to - --- .../i18n/{ar_AE.properties => ar-AE.properties} | 0 .../i18n/{bg_BG.properties => bg-BG.properties} | 0 .../i18n/{cs_CZ.properties => cs-CZ.properties} | 0 .../i18n/{da_DK.properties => da-DK.properties} | 0 .../i18n/{de_DE.properties => de-DE.properties} | 0 .../i18n/{el_GR.properties => el-GR.properties} | 0 .../i18n/{en_GB.properties => en-GB.properties} | 0 .../i18n/{es_ES.properties => es-ES.properties} | 0 .../i18n/{es_US.properties => es-US.properties} | 0 .../i18n/{et_EE.properties => et-EE.properties} | 0 .../i18n/{fi_FI.properties => fi-FI.properties} | 0 .../i18n/{fr_FR.properties => fr-FR.properties} | 0 .../i18n/{hr_HR.properties => hr-HR.properties} | 0 .../i18n/{hu_HU.properties => hu-HU.properties} | 0 .../i18n/{it_IT.properties => it-IT.properties} | 0 .../i18n/{ko_KR.properties => ko-KR.properties} | 0 .../i18n/{nb_NO.properties => nb-NO.properties} | 0 .../i18n/{nl_NL.properties => nl-NL.properties} | 0 .../i18n/{pl_PL.properties => pl-PL.properties} | 0 .../i18n/{pt_BR.properties => pt-BR.properties} | 0 .../i18n/{pt_PT.properties => pt-PT.properties} | 0 .../i18n/{ro_RO.properties => ro-RO.properties} | 0 .../i18n/{ru_RU.properties => ru-RU.properties} | 0 .../i18n/{sk_SK.properties => sk-SK.properties} | 0 .../i18n/{sl_SI.properties => sl-SI.properties} | 0 .../i18n/{sq_AL.properties => sq-AL.properties} | 0 .../i18n/{sr_RS.properties => sr-RS.properties} | 0 .../i18n/{sv_SE.properties => sv-SE.properties} | 0 .../i18n/{th_TH.properties => th-TH.properties} | 0 .../i18n/{tr_TR.properties => tr-TR.properties} | 0 .../i18n/{zh_CN.properties => zh-CN.properties} | 0 .../lifx-connect.src/i18n/{ar_AE.properties => ar-AE.properties} | 0 .../lifx-connect.src/i18n/{bg_BG.properties => bg-BG.properties} | 0 .../lifx-connect.src/i18n/{cs_CZ.properties => cs-CZ.properties} | 0 .../lifx-connect.src/i18n/{da_DK.properties => da-DK.properties} | 0 .../lifx-connect.src/i18n/{de_DE.properties => de-DE.properties} | 0 .../lifx-connect.src/i18n/{el_GR.properties => el-GR.properties} | 0 .../lifx-connect.src/i18n/{en_GB.properties => en-GB.properties} | 0 .../lifx-connect.src/i18n/{es_ES.properties => es-ES.properties} | 0 .../lifx-connect.src/i18n/{es_US.properties => es-US.properties} | 0 .../lifx-connect.src/i18n/{et_EE.properties => et-EE.properties} | 0 .../lifx-connect.src/i18n/{fi_FI.properties => fi-FI.properties} | 0 .../lifx-connect.src/i18n/{fr_FR.properties => fr-FR.properties} | 0 .../lifx-connect.src/i18n/{hr_HR.properties => hr-HR.properties} | 0 .../lifx-connect.src/i18n/{hu_HU.properties => hu-HU.properties} | 0 .../lifx-connect.src/i18n/{it_IT.properties => it-IT.properties} | 0 .../lifx-connect.src/i18n/{ko_KR.properties => ko-KR.properties} | 0 .../lifx-connect.src/i18n/{nb_NO.properties => nb-NO.properties} | 0 .../lifx-connect.src/i18n/{nl_NL.properties => nl-NL.properties} | 0 .../lifx-connect.src/i18n/{pl_PL.properties => pl-PL.properties} | 0 .../lifx-connect.src/i18n/{pt_BR.properties => pt-BR.properties} | 0 .../lifx-connect.src/i18n/{pt_PT.properties => pt-PT.properties} | 0 .../lifx-connect.src/i18n/{ro_RO.properties => ro-RO.properties} | 0 .../lifx-connect.src/i18n/{ru_RU.properties => ru-RU.properties} | 0 .../lifx-connect.src/i18n/{sk_SK.properties => sk-SK.properties} | 0 .../lifx-connect.src/i18n/{sl_SI.properties => sl-SI.properties} | 0 .../lifx-connect.src/i18n/{sq_AL.properties => sq-AL.properties} | 0 .../lifx-connect.src/i18n/{sr_RS.properties => sr-RS.properties} | 0 .../lifx-connect.src/i18n/{sv_SE.properties => sv-SE.properties} | 0 .../lifx-connect.src/i18n/{th_TH.properties => th-TH.properties} | 0 .../lifx-connect.src/i18n/{tr_TR.properties => tr-TR.properties} | 0 .../lifx-connect.src/i18n/{zh_CN.properties => zh-CN.properties} | 0 62 files changed, 0 insertions(+), 0 deletions(-) rename smartapps/smartthings/ecobee-connect.src/i18n/{ar_AE.properties => ar-AE.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{bg_BG.properties => bg-BG.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{cs_CZ.properties => cs-CZ.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{da_DK.properties => da-DK.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{de_DE.properties => de-DE.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{el_GR.properties => el-GR.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{en_GB.properties => en-GB.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{es_ES.properties => es-ES.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{es_US.properties => es-US.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{et_EE.properties => et-EE.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{fi_FI.properties => fi-FI.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{fr_FR.properties => fr-FR.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{hr_HR.properties => hr-HR.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{hu_HU.properties => hu-HU.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{it_IT.properties => it-IT.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{ko_KR.properties => ko-KR.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{nb_NO.properties => nb-NO.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{nl_NL.properties => nl-NL.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{pl_PL.properties => pl-PL.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{pt_BR.properties => pt-BR.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{pt_PT.properties => pt-PT.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{ro_RO.properties => ro-RO.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{ru_RU.properties => ru-RU.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{sk_SK.properties => sk-SK.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{sl_SI.properties => sl-SI.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{sq_AL.properties => sq-AL.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{sr_RS.properties => sr-RS.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{sv_SE.properties => sv-SE.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{th_TH.properties => th-TH.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{tr_TR.properties => tr-TR.properties} (100%) rename smartapps/smartthings/ecobee-connect.src/i18n/{zh_CN.properties => zh-CN.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{ar_AE.properties => ar-AE.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{bg_BG.properties => bg-BG.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{cs_CZ.properties => cs-CZ.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{da_DK.properties => da-DK.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{de_DE.properties => de-DE.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{el_GR.properties => el-GR.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{en_GB.properties => en-GB.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{es_ES.properties => es-ES.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{es_US.properties => es-US.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{et_EE.properties => et-EE.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{fi_FI.properties => fi-FI.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{fr_FR.properties => fr-FR.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{hr_HR.properties => hr-HR.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{hu_HU.properties => hu-HU.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{it_IT.properties => it-IT.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{ko_KR.properties => ko-KR.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{nb_NO.properties => nb-NO.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{nl_NL.properties => nl-NL.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{pl_PL.properties => pl-PL.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{pt_BR.properties => pt-BR.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{pt_PT.properties => pt-PT.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{ro_RO.properties => ro-RO.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{ru_RU.properties => ru-RU.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{sk_SK.properties => sk-SK.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{sl_SI.properties => sl-SI.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{sq_AL.properties => sq-AL.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{sr_RS.properties => sr-RS.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{sv_SE.properties => sv-SE.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{th_TH.properties => th-TH.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{tr_TR.properties => tr-TR.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{zh_CN.properties => zh-CN.properties} (100%) diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/ar_AE.properties b/smartapps/smartthings/ecobee-connect.src/i18n/ar-AE.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/ar_AE.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/ar-AE.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/bg_BG.properties b/smartapps/smartthings/ecobee-connect.src/i18n/bg-BG.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/bg_BG.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/bg-BG.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/cs_CZ.properties b/smartapps/smartthings/ecobee-connect.src/i18n/cs-CZ.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/cs_CZ.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/cs-CZ.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/da_DK.properties b/smartapps/smartthings/ecobee-connect.src/i18n/da-DK.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/da_DK.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/da-DK.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/de_DE.properties b/smartapps/smartthings/ecobee-connect.src/i18n/de-DE.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/de_DE.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/de-DE.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/el_GR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/el-GR.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/el_GR.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/el-GR.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/en_GB.properties b/smartapps/smartthings/ecobee-connect.src/i18n/en-GB.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/en_GB.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/en-GB.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/es_ES.properties b/smartapps/smartthings/ecobee-connect.src/i18n/es-ES.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/es_ES.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/es-ES.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/es_US.properties b/smartapps/smartthings/ecobee-connect.src/i18n/es-US.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/es_US.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/es-US.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/et_EE.properties b/smartapps/smartthings/ecobee-connect.src/i18n/et-EE.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/et_EE.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/et-EE.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/fi_FI.properties b/smartapps/smartthings/ecobee-connect.src/i18n/fi-FI.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/fi_FI.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/fi-FI.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/fr_FR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/fr-FR.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/fr_FR.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/fr-FR.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/hr_HR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/hr-HR.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/hr_HR.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/hr-HR.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/hu_HU.properties b/smartapps/smartthings/ecobee-connect.src/i18n/hu-HU.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/hu_HU.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/hu-HU.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/it_IT.properties b/smartapps/smartthings/ecobee-connect.src/i18n/it-IT.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/it_IT.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/it-IT.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/ko_KR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/ko-KR.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/ko_KR.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/ko-KR.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/nb_NO.properties b/smartapps/smartthings/ecobee-connect.src/i18n/nb-NO.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/nb_NO.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/nb-NO.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/nl_NL.properties b/smartapps/smartthings/ecobee-connect.src/i18n/nl-NL.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/nl_NL.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/nl-NL.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/pl_PL.properties b/smartapps/smartthings/ecobee-connect.src/i18n/pl-PL.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/pl_PL.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/pl-PL.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/pt_BR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/pt-BR.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/pt_BR.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/pt-BR.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/pt_PT.properties b/smartapps/smartthings/ecobee-connect.src/i18n/pt-PT.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/pt_PT.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/pt-PT.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/ro_RO.properties b/smartapps/smartthings/ecobee-connect.src/i18n/ro-RO.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/ro_RO.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/ro-RO.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/ru_RU.properties b/smartapps/smartthings/ecobee-connect.src/i18n/ru-RU.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/ru_RU.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/ru-RU.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/sk_SK.properties b/smartapps/smartthings/ecobee-connect.src/i18n/sk-SK.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/sk_SK.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/sk-SK.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/sl_SI.properties b/smartapps/smartthings/ecobee-connect.src/i18n/sl-SI.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/sl_SI.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/sl-SI.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/sq_AL.properties b/smartapps/smartthings/ecobee-connect.src/i18n/sq-AL.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/sq_AL.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/sq-AL.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/sr_RS.properties b/smartapps/smartthings/ecobee-connect.src/i18n/sr-RS.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/sr_RS.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/sr-RS.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/sv_SE.properties b/smartapps/smartthings/ecobee-connect.src/i18n/sv-SE.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/sv_SE.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/sv-SE.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/th_TH.properties b/smartapps/smartthings/ecobee-connect.src/i18n/th-TH.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/th_TH.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/th-TH.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/tr_TR.properties b/smartapps/smartthings/ecobee-connect.src/i18n/tr-TR.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/tr_TR.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/tr-TR.properties diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/zh_CN.properties b/smartapps/smartthings/ecobee-connect.src/i18n/zh-CN.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/zh_CN.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/zh-CN.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/ar_AE.properties b/smartapps/smartthings/lifx-connect.src/i18n/ar-AE.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/ar_AE.properties rename to smartapps/smartthings/lifx-connect.src/i18n/ar-AE.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/bg_BG.properties b/smartapps/smartthings/lifx-connect.src/i18n/bg-BG.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/bg_BG.properties rename to smartapps/smartthings/lifx-connect.src/i18n/bg-BG.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/cs_CZ.properties b/smartapps/smartthings/lifx-connect.src/i18n/cs-CZ.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/cs_CZ.properties rename to smartapps/smartthings/lifx-connect.src/i18n/cs-CZ.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/da_DK.properties b/smartapps/smartthings/lifx-connect.src/i18n/da-DK.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/da_DK.properties rename to smartapps/smartthings/lifx-connect.src/i18n/da-DK.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/de_DE.properties b/smartapps/smartthings/lifx-connect.src/i18n/de-DE.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/de_DE.properties rename to smartapps/smartthings/lifx-connect.src/i18n/de-DE.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/el_GR.properties b/smartapps/smartthings/lifx-connect.src/i18n/el-GR.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/el_GR.properties rename to smartapps/smartthings/lifx-connect.src/i18n/el-GR.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/en_GB.properties b/smartapps/smartthings/lifx-connect.src/i18n/en-GB.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/en_GB.properties rename to smartapps/smartthings/lifx-connect.src/i18n/en-GB.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/es_ES.properties b/smartapps/smartthings/lifx-connect.src/i18n/es-ES.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/es_ES.properties rename to smartapps/smartthings/lifx-connect.src/i18n/es-ES.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/es_US.properties b/smartapps/smartthings/lifx-connect.src/i18n/es-US.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/es_US.properties rename to smartapps/smartthings/lifx-connect.src/i18n/es-US.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/et_EE.properties b/smartapps/smartthings/lifx-connect.src/i18n/et-EE.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/et_EE.properties rename to smartapps/smartthings/lifx-connect.src/i18n/et-EE.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/fi_FI.properties b/smartapps/smartthings/lifx-connect.src/i18n/fi-FI.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/fi_FI.properties rename to smartapps/smartthings/lifx-connect.src/i18n/fi-FI.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/fr_FR.properties b/smartapps/smartthings/lifx-connect.src/i18n/fr-FR.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/fr_FR.properties rename to smartapps/smartthings/lifx-connect.src/i18n/fr-FR.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/hr_HR.properties b/smartapps/smartthings/lifx-connect.src/i18n/hr-HR.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/hr_HR.properties rename to smartapps/smartthings/lifx-connect.src/i18n/hr-HR.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/hu_HU.properties b/smartapps/smartthings/lifx-connect.src/i18n/hu-HU.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/hu_HU.properties rename to smartapps/smartthings/lifx-connect.src/i18n/hu-HU.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/it_IT.properties b/smartapps/smartthings/lifx-connect.src/i18n/it-IT.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/it_IT.properties rename to smartapps/smartthings/lifx-connect.src/i18n/it-IT.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/ko_KR.properties b/smartapps/smartthings/lifx-connect.src/i18n/ko-KR.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/ko_KR.properties rename to smartapps/smartthings/lifx-connect.src/i18n/ko-KR.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/nb_NO.properties b/smartapps/smartthings/lifx-connect.src/i18n/nb-NO.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/nb_NO.properties rename to smartapps/smartthings/lifx-connect.src/i18n/nb-NO.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/nl_NL.properties b/smartapps/smartthings/lifx-connect.src/i18n/nl-NL.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/nl_NL.properties rename to smartapps/smartthings/lifx-connect.src/i18n/nl-NL.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/pl_PL.properties b/smartapps/smartthings/lifx-connect.src/i18n/pl-PL.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/pl_PL.properties rename to smartapps/smartthings/lifx-connect.src/i18n/pl-PL.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/pt_BR.properties b/smartapps/smartthings/lifx-connect.src/i18n/pt-BR.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/pt_BR.properties rename to smartapps/smartthings/lifx-connect.src/i18n/pt-BR.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/pt_PT.properties b/smartapps/smartthings/lifx-connect.src/i18n/pt-PT.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/pt_PT.properties rename to smartapps/smartthings/lifx-connect.src/i18n/pt-PT.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/ro_RO.properties b/smartapps/smartthings/lifx-connect.src/i18n/ro-RO.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/ro_RO.properties rename to smartapps/smartthings/lifx-connect.src/i18n/ro-RO.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/ru_RU.properties b/smartapps/smartthings/lifx-connect.src/i18n/ru-RU.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/ru_RU.properties rename to smartapps/smartthings/lifx-connect.src/i18n/ru-RU.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/sk_SK.properties b/smartapps/smartthings/lifx-connect.src/i18n/sk-SK.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/sk_SK.properties rename to smartapps/smartthings/lifx-connect.src/i18n/sk-SK.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/sl_SI.properties b/smartapps/smartthings/lifx-connect.src/i18n/sl-SI.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/sl_SI.properties rename to smartapps/smartthings/lifx-connect.src/i18n/sl-SI.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/sq_AL.properties b/smartapps/smartthings/lifx-connect.src/i18n/sq-AL.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/sq_AL.properties rename to smartapps/smartthings/lifx-connect.src/i18n/sq-AL.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/sr_RS.properties b/smartapps/smartthings/lifx-connect.src/i18n/sr-RS.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/sr_RS.properties rename to smartapps/smartthings/lifx-connect.src/i18n/sr-RS.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/sv_SE.properties b/smartapps/smartthings/lifx-connect.src/i18n/sv-SE.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/sv_SE.properties rename to smartapps/smartthings/lifx-connect.src/i18n/sv-SE.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/th_TH.properties b/smartapps/smartthings/lifx-connect.src/i18n/th-TH.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/th_TH.properties rename to smartapps/smartthings/lifx-connect.src/i18n/th-TH.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/tr_TR.properties b/smartapps/smartthings/lifx-connect.src/i18n/tr-TR.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/tr_TR.properties rename to smartapps/smartthings/lifx-connect.src/i18n/tr-TR.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/zh_CN.properties b/smartapps/smartthings/lifx-connect.src/i18n/zh-CN.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/zh_CN.properties rename to smartapps/smartthings/lifx-connect.src/i18n/zh-CN.properties From e822e7137e295c1221b9a4dd6b3b6b08f1bda7a8 Mon Sep 17 00:00:00 2001 From: juano2310 Date: Fri, 24 Feb 2017 15:30:24 -0500 Subject: [PATCH 062/104] nb-NO to no-NO --- smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy | 2 +- .../i18n/{nb-NO.properties => no-NO.properties} | 0 .../i18n/{nb-NO.properties => no-NO.properties} | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename smartapps/smartthings/ecobee-connect.src/i18n/{nb-NO.properties => no-NO.properties} (100%) rename smartapps/smartthings/lifx-connect.src/i18n/{nb-NO.properties => no-NO.properties} (100%) diff --git a/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy b/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy index ec1d725..cc26358 100644 --- a/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy +++ b/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy @@ -81,7 +81,7 @@ def authPage() { return dynamicPage(name: "auth", title: "Select Your Thermostats", uninstall: true) { section("") { paragraph "Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings." - input(name: "thermostats", title:"", type: "enum", required:true, multiple:true, description: "Tap to choose", metadata:[values:stats]) + input(name: "thermostats", title:"Select Your Thermostats", type: "enum", required:true, multiple:true, description: "Tap to choose", metadata:[values:stats]) } def options = sensorsDiscovered() ?: [] diff --git a/smartapps/smartthings/ecobee-connect.src/i18n/nb-NO.properties b/smartapps/smartthings/ecobee-connect.src/i18n/no-NO.properties similarity index 100% rename from smartapps/smartthings/ecobee-connect.src/i18n/nb-NO.properties rename to smartapps/smartthings/ecobee-connect.src/i18n/no-NO.properties diff --git a/smartapps/smartthings/lifx-connect.src/i18n/nb-NO.properties b/smartapps/smartthings/lifx-connect.src/i18n/no-NO.properties similarity index 100% rename from smartapps/smartthings/lifx-connect.src/i18n/nb-NO.properties rename to smartapps/smartthings/lifx-connect.src/i18n/no-NO.properties From 31c037e7ab773d47e6fb4480c453606b8388d614 Mon Sep 17 00:00:00 2001 From: rappleg Date: Sat, 25 Feb 2017 11:05:08 -0600 Subject: [PATCH 063/104] DVCSMP-2474 Arrival Sensor HA schedule needs jitter to avoid all firing at top of minute --- .../smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy b/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy index f13b89b..6b772b3 100644 --- a/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy +++ b/devicetypes/smartthings/arrival-sensor-ha.src/arrival-sensor-ha.groovy @@ -151,7 +151,7 @@ private handlePresenceEvent(present) { private startTimer() { log.debug "Scheduling periodic timer" - schedule("0 * * * * ?", checkPresenceCallback) + runEvery1Minute("checkPresenceCallback") } private stopTimer() { From 1c83a27c40c3dcc7aafe5f5e7b9133a9fdcc761b Mon Sep 17 00:00:00 2001 From: Jason Botello Date: Mon, 27 Feb 2017 13:51:06 -0600 Subject: [PATCH 064/104] DVCSMP-2475 Netatmo Fixes (#1717) - Adds logic to invalidate auth tokens - Adds checks for auth tokens before making API requests - Improves SmartApp logic to fix execution timeout exceptions - Improves refresh token logic - Fixes API response parsing bugs - Adds auth and refresh token to atomicState rather than state - Preference / OAuth wording changes --- .../netatmo-connect.groovy | 317 ++++++++---------- 1 file changed, 149 insertions(+), 168 deletions(-) diff --git a/smartapps/dianoga/netatmo-connect.src/netatmo-connect.groovy b/smartapps/dianoga/netatmo-connect.src/netatmo-connect.groovy index faade50..3a7d663 100644 --- a/smartapps/dianoga/netatmo-connect.src/netatmo-connect.groovy +++ b/smartapps/dianoga/netatmo-connect.src/netatmo-connect.groovy @@ -5,7 +5,6 @@ import java.text.DecimalFormat import groovy.json.JsonSlurper private getApiUrl() { "https://api.netatmo.com" } -private getVendorName() { "netatmo" } private getVendorAuthPath() { "${apiUrl}/oauth2/authorize?" } private getVendorTokenPath(){ "${apiUrl}/oauth2/token" } private getVendorIcon() { "https://s3.amazonaws.com/smartapp-icons/Partner/netamo-icon-1%402x.png" } @@ -14,14 +13,13 @@ private getClientSecret() { appSettings.clientSecret } private getServerUrl() { appSettings.serverUrl } private getShardUrl() { return getApiServerUrl() } private getCallbackUrl() { "${serverUrl}/oauth/callback" } -private getBuildRedirectUrl() { "${serverUrl}/oauth/initialize?appId=${app.id}&access_token=${state.accessToken}&apiServerUrl=${shardUrl}" } +private getBuildRedirectUrl() { "${serverUrl}/oauth/initialize?appId=${app.id}&access_token=${atomicState.accessToken}&apiServerUrl=${shardUrl}" } -// Automatically generated. Make future change here. definition( name: "Netatmo (Connect)", namespace: "dianoga", author: "Brian Steere", - description: "Netatmo Integration", + description: "Integrate your Netatmo devices with SmartThings", category: "SmartThings Labs", iconUrl: "https://s3.amazonaws.com/smartapp-icons/Partner/netamo-icon-1.png", iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Partner/netamo-icon-1%402x.png", @@ -44,15 +42,16 @@ mappings { } def authPage() { - log.debug "In authPage" + // log.debug "running authPage()" def description def uninstallAllowed = false def oauthTokenProvided = false - if (!state.accessToken) { - log.debug "About to create access token." - state.accessToken = createAccessToken() + // If an access token doesn't exist, create one + if (!atomicState.accessToken) { + atomicState.accessToken = createAccessToken() + log.debug "Created access token" } if (canInstallLabs()) { @@ -60,36 +59,32 @@ def authPage() { def redirectUrl = getBuildRedirectUrl() // log.debug "Redirect url = ${redirectUrl}" - if (state.authToken) { - description = "Tap 'Next' to proceed" + if (atomicState.authToken) { + description = "Tap 'Next' to select devices" uninstallAllowed = true oauthTokenProvided = true } else { - description = "Click to enter Credentials." + description = "Tap to enter credentials" } if (!oauthTokenProvided) { - log.debug "Show the login page" + log.debug "Showing the login page" return dynamicPage(name: "Credentials", title: "Authorize Connection", nextPage:"listDevices", uninstall: uninstallAllowed, install:false) { section() { - paragraph "Tap below to log in to the netatmo and authorize SmartThings access." - href url:redirectUrl, style:"embedded", required:false, title:"Connect to ${getVendorName()}", description:description + paragraph "Tap below to login to Netatmo and authorize SmartThings access" + href url:redirectUrl, style:"embedded", required:false, title:"Connect to Netatmo", description:description } } } else { - log.debug "Show the devices page" - return dynamicPage(name: "Credentials", title: "Credentials Accepted!", nextPage:"listDevices", uninstall: uninstallAllowed, install:false) { + log.debug "Showing the devices page" + return dynamicPage(name: "Credentials", title: "Connected", nextPage:"listDevices", uninstall: uninstallAllowed, install:false) { section() { - input(name:"Devices", style:"embedded", required:false, title:"${getVendorName()} is now connected to SmartThings!", description:description) + input(name:"Devices", style:"embedded", required:false, title:"Netatmo is connected to SmartThings", description:description) } } } } else { - def upgradeNeeded = """To use SmartThings Labs, your Hub should be completely up to date. - -To update your Hub, access Location Settings in the Main Menu (tap the gear next to your location name), select your Hub, and choose "Update Hub".""" - - + def upgradeNeeded = """To use SmartThings Labs, your Hub should be completely up to date. To update your Hub, access Location Settings in the Main Menu (tap the gear next to your location name), select your Hub, and choose "Update Hub".""" return dynamicPage(name:"Credentials", title:"Upgrade needed!", nextPage:"", install:false, uninstall: true) { section { paragraph "$upgradeNeeded" @@ -100,15 +95,15 @@ To update your Hub, access Location Settings in the Main Menu (tap the gear next } def oauthInitUrl() { - log.debug "In oauthInitUrl" + // log.debug "runing oauthInitUrl()" - state.oauthInitState = UUID.randomUUID().toString() + atomicState.oauthInitState = UUID.randomUUID().toString() def oauthParams = [ response_type: "code", client_id: getClientId(), client_secret: getClientSecret(), - state: state.oauthInitState, + state: atomicState.oauthInitState, redirect_uri: getCallbackUrl(), scope: "read_station" ] @@ -119,78 +114,72 @@ def oauthInitUrl() { } def callback() { - // log.debug "callback()>> params: $params, params.code ${params.code}" + // log.debug "running callback()" def code = params.code def oauthState = params.state - if (oauthState == state.oauthInitState) { + if (oauthState == atomicState.oauthInitState) { def tokenParams = [ + grant_type: "authorization_code", client_secret: getClientSecret(), client_id : getClientId(), - grant_type: "authorization_code", - redirect_uri: getCallbackUrl(), code: code, - scope: "read_station" + scope: "read_station", + redirect_uri: getCallbackUrl() ] // log.debug "TOKEN URL: ${getVendorTokenPath() + toQueryString(tokenParams)}" def tokenUrl = getVendorTokenPath() - def params = [ + def requestTokenParams = [ uri: tokenUrl, - contentType: 'application/x-www-form-urlencoded', + requestContentType: 'application/x-www-form-urlencoded', body: tokenParams ] - - // log.debug "PARAMS: ${params}" + + // log.debug "PARAMS: ${requestTokenParams}" try { - httpPost(params) { resp -> - - def slurper = new JsonSlurper() - - resp.data.each { key, value -> - def data = slurper.parseText(key) - log.debug "Data: $data" - state.refreshToken = data.refresh_token - state.authToken = data.access_token - //state.accessToken = data.access_token - state.tokenExpires = now() + (data.expires_in * 1000) - // log.debug "swapped token: $resp.data" - } + httpPost(requestTokenParams) { resp -> + //log.debug "Data: ${resp.data}" + atomicState.refreshToken = resp.data.refresh_token + atomicState.authToken = resp.data.access_token + // resp.data.expires_in is in milliseconds so we need to convert it to seconds + atomicState.tokenExpires = now() + (resp.data.expires_in * 1000) } - } catch (Exception e) { - log.debug "callback: Call failed $e" + } catch (e) { + log.debug "callback() failed: $e" } - // Handle success and failure here, and render stuff accordingly - if (state.authToken) { + // If we successfully got an authToken run sucess(), else fail() + if (atomicState.authToken) { success() } else { fail() } } else { - log.error "callback() failed oauthState != state.oauthInitState" + log.error "callback() failed oauthState != atomicState.oauthInitState" } } def success() { - log.debug "in success" + log.debug "OAuth flow succeeded" def message = """ -

We have located your """ + getVendorName() + """ account.

-

Tap 'Done' to continue to Devices.

+

Success!

+

Tap 'Done' to continue

""" connectionStatus(message) } def fail() { - log.debug "in fail" + log.debug "OAuth flow failed" + atomicState.authToken = null def message = """ -

The connection could not be established!

-

Click 'Done' to return to the menu.

+

Error

+

Tap 'Done' to return

""" connectionStatus(message) } @@ -202,13 +191,12 @@ def connectionStatus(message, redirectUrl = null) { """ } - def html = """ - ${getVendorName()} Connection + Netatmo Connection @@ -274,46 +256,47 @@ def connectionStatus(message, redirectUrl = null) { } def refreshToken() { - log.debug "In refreshToken" + // Check if atomicState has a refresh token + if (atomicState.refreshToken) { + log.debug "running refreshToken()" - def oauthParams = [ - client_secret: getClientSecret(), - client_id: getClientId(), - grant_type: "refresh_token", - refresh_token: state.refreshToken - ] + def oauthParams = [ + grant_type: "refresh_token", + refresh_token: atomicState.refreshToken, + client_secret: getClientSecret(), + client_id: getClientId(), + ] - def tokenUrl = getVendorTokenPath() - def params = [ - uri: tokenUrl, - contentType: 'application/x-www-form-urlencoded', - body: oauthParams, - ] + def tokenUrl = getVendorTokenPath() + + def requestOauthParams = [ + uri: tokenUrl, + requestContentType: 'application/x-www-form-urlencoded', + body: oauthParams + ] + + // log.debug "PARAMS: ${requestOauthParams}" - // OAuth Step 2: Request access token with our client Secret and OAuth "Code" - try { - httpPost(params) { response -> - def slurper = new JsonSlurper(); + try { + httpPost(requestOauthParams) { resp -> + //log.debug "Data: ${resp.data}" + atomicState.refreshToken = resp.data.refresh_token + atomicState.authToken = resp.data.access_token + // resp.data.expires_in is in milliseconds so we need to convert it to seconds + atomicState.tokenExpires = now() + (resp.data.expires_in * 1000) + return true + } + } catch (e) { + log.debug "refreshToken() failed: $e" + } - response.data.each {key, value -> - def data = slurper.parseText(key); - // log.debug "Data: $data" - - state.refreshToken = data.refresh_token - state.accessToken = data.access_token - state.tokenExpires = now() + (data.expires_in * 1000) - return true - } - - } - } catch (Exception e) { - log.debug "Error: $e" - } - - // We didn't get an access token - if ( !state.accessToken ) { - return false - } + // If we didn't get an authToken + if (!atomicState.authToken) { + return false + } + } else { + return false + } } String toQueryString(Map m) { @@ -322,13 +305,11 @@ String toQueryString(Map m) { def installed() { log.debug "Installed with settings: ${settings}" - initialize() } def updated() { log.debug "Updated with settings: ${settings}" - unsubscribe() unschedule() initialize() @@ -336,9 +317,9 @@ def updated() { def initialize() { log.debug "Initialized with settings: ${settings}" - + // Pull the latest device info into state - getDeviceList(); + getDeviceList() settings.devices.each { def deviceId = it @@ -372,57 +353,56 @@ def initialize() { def delete = getChildDevices().findAll { !settings.devices.contains(it.deviceNetworkId) } log.debug "Delete: $delete" delete.each { deleteChildDevice(it.deviceNetworkId) } - - // Do the initial poll + + // Run initial poll and schedule future polls poll() - // Schedule it to run every 5 minutes runEvery5Minutes("poll") } def uninstalled() { - log.debug "In uninstalled" - + log.debug "Uninstalling" removeChildDevices(getChildDevices()) } def getDeviceList() { - log.debug "In getDeviceList" + if (atomicState.authToken) { + + log.debug "Getting stations data" - def deviceList = [:] - state.deviceDetail = [:] - state.deviceState = [:] + def deviceList = [:] + state.deviceDetail = [:] + state.deviceState = [:] - apiGet("/api/getstationsdata") { response -> - response.data.body.devices.each { value -> - def key = value._id - deviceList[key] = "${value.station_name}: ${value.module_name}" - state.deviceDetail[key] = value - state.deviceState[key] = value.dashboard_data - value.modules.each { value2 -> - def key2 = value2._id - deviceList[key2] = "${value.station_name}: ${value2.module_name}" - state.deviceDetail[key2] = value2 - state.deviceState[key2] = value2.dashboard_data + apiGet("/api/getstationsdata") { resp -> + resp.data.body.devices.each { value -> + def key = value._id + deviceList[key] = "${value.station_name}: ${value.module_name}" + state.deviceDetail[key] = value + state.deviceState[key] = value.dashboard_data + value.modules.each { value2 -> + def key2 = value2._id + deviceList[key2] = "${value.station_name}: ${value2.module_name}" + state.deviceDetail[key2] = value2 + state.deviceState[key2] = value2.dashboard_data + } } - } - } - - return deviceList.sort() { it.value.toLowerCase() } + } + + return deviceList.sort() { it.value.toLowerCase() } + + } else { + return null + } } private removeChildDevices(delete) { - log.debug "In removeChildDevices" - - log.debug "deleting ${delete.size()} devices" - + log.debug "Removing ${delete.size()} devices" delete.each { deleteChildDevice(it.deviceNetworkId) } } def createChildDevice(deviceFile, dni, name, label) { - log.debug "In createChildDevice" - try { def existingDevice = getChildDevice(dni) if(!existingDevice) { @@ -437,13 +417,13 @@ def createChildDevice(deviceFile, dni, name, label) { } def listDevices() { - log.debug "In listDevices" + log.debug "Listing devices" def devices = getDeviceList() - dynamicPage(name: "listDevices", title: "Choose devices", install: true) { + dynamicPage(name: "listDevices", title: "Choose Devices", install: true) { section("Devices") { - input "devices", "enum", title: "Select Device(s)", required: false, multiple: true, options: devices + input "devices", "enum", title: "Select Devices", required: false, multiple: true, options: devices } section("Preferences") { @@ -453,36 +433,37 @@ def listDevices() { } def apiGet(String path, Map query, Closure callback) { - - if(now() >= state.tokenExpires) { - refreshToken(); + log.debug "running apiGet()" + + // If the current time is over the expiration time, request a new token + if(now() >= atomicState.tokenExpires) { + atomicState.authToken = null + refreshToken() } - query['access_token'] = state.accessToken - def params = [ + def queryParam = [ + access_token: atomicState.authToken + ] + + def apiGetParams = [ uri: getApiUrl(), path: path, - 'query': query + query: queryParam ] - // log.debug "API Get: $params" + + // log.debug "apiGet(): $apiGetParams" try { - httpGet(params) { response -> - callback.call(response) + httpGet(apiGetParams) { resp -> + callback.call(resp) + } + } catch (e) { + log.debug "apiGet() failed: $e" + // Netatmo API has rate limits so a failure here doesn't necessarily mean our token has expired, but we will check anyways + if(now() >= atomicState.tokenExpires) { + atomicState.authToken = null + refreshToken() } - } catch (Exception e) { - // This is most likely due to an invalid token. Try to refresh it and try again. - log.debug "apiGet: Call failed $e" - if(refreshToken()) { - log.debug "apiGet: Trying again after refreshing token" - try { - httpGet(params) { response -> - callback.call(response) - } - } catch (Exception f) { - log.debug "apiGet: Call failed $f" - } - } } } @@ -491,10 +472,12 @@ def apiGet(String path, Closure callback) { } def poll() { - log.debug "In Poll" - getDeviceList(); + log.debug "Polling..." + + getDeviceList() + def children = getChildDevices() - log.debug "State: ${state.deviceState}" + //log.debug "State: ${state.deviceState}" settings.devices.each { deviceId -> def detail = state?.deviceDetail[deviceId] @@ -550,15 +533,13 @@ def rainToPref(rain) { } def debugEvent(message, displayEvent) { - def results = [ name: "appdebug", descriptionText: message, displayed: displayEvent ] log.debug "Generating AppDebug Event: ${results}" - sendEvent (results) - + sendEvent(results) } private Boolean canInstallLabs() { From 6381580e44d19169595cf944258da51a509ad616 Mon Sep 17 00:00:00 2001 From: "sushant.k1" Date: Tue, 28 Feb 2017 16:22:14 +0530 Subject: [PATCH 065/104] [DVCSMP-2447] DTH UX Improvements for the following DTHs: 1. Harmony Activity 2. Hue Bridge 3. Smartsense Garage Door Multi 4. Smartsense Garage Door Sensor Button 5. WeMo Motion 6. ZigBee Dimmer 7. ZigBee RGB Bulb 8. ZigBee Lock 9. ZLL RGB Bulb 10. Smart Block --- .../harmony-activity.src/harmony-activity.groovy | 2 +- .../smartthings/hue-bridge.src/hue-bridge.groovy | 2 +- .../smartsense-garage-door-multi.groovy | 14 +++++++------- .../smartsense-garage-door-sensor-button.groovy | 10 +++++----- .../smartthings/wemo-motion.src/wemo-motion.groovy | 6 +++--- .../zigbee-dimmer.src/zigbee-dimmer.groovy | 4 ++-- .../smartthings/zigbee-lock.src/zigbee-lock.groovy | 4 ++-- .../zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy | 4 ++-- .../zll-rgb-bulb.src/zll-rgb-bulb.groovy | 4 ++-- .../minecraft/smart-block.src/smart-block.groovy | 4 ++-- 10 files changed, 27 insertions(+), 27 deletions(-) diff --git a/devicetypes/smartthings/harmony-activity.src/harmony-activity.groovy b/devicetypes/smartthings/harmony-activity.src/harmony-activity.groovy index e87a185..56bb6d2 100644 --- a/devicetypes/smartthings/harmony-activity.src/harmony-activity.groovy +++ b/devicetypes/smartthings/harmony-activity.src/harmony-activity.groovy @@ -32,7 +32,7 @@ metadata { tiles { standardTile("button", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: 'Off', action: "switch.on", icon: "st.harmony.harmony-hub-icon", backgroundColor: "#ffffff", nextState: "on" - state "on", label: 'On', action: "switch.off", icon: "st.harmony.harmony-hub-icon", backgroundColor: "#79b821", nextState: "off" + state "on", label: 'On', action: "switch.off", icon: "st.harmony.harmony-hub-icon", backgroundColor: "#00A0DC", nextState: "off" } standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") { state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh" diff --git a/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy b/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy index 08f11ef..b6e4267 100644 --- a/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy +++ b/devicetypes/smartthings/hue-bridge.src/hue-bridge.groovy @@ -27,7 +27,7 @@ metadata { multiAttributeTile(name:"rich-control"){ tileAttribute ("device.status", key: "PRIMARY_CONTROL") { attributeState "Offline", label: '${currentValue}', action: "", icon: "st.Lighting.light99-hue", backgroundColor: "#ffffff" - attributeState "Online", label: '${currentValue}', action: "", icon: "st.Lighting.light99-hue", backgroundColor: "#79b821" + attributeState "Online", label: '${currentValue}', action: "", icon: "st.Lighting.light99-hue", backgroundColor: "#00A0DC" } } valueTile("doNotRemove", "v", decoration: "flat", height: 2, width: 6, inactiveLabel: false) { diff --git a/devicetypes/smartthings/smartsense-garage-door-multi.src/smartsense-garage-door-multi.groovy b/devicetypes/smartthings/smartsense-garage-door-multi.src/smartsense-garage-door-multi.groovy index 7cf58bf..435cb2a 100644 --- a/devicetypes/smartthings/smartsense-garage-door-multi.src/smartsense-garage-door-multi.groovy +++ b/devicetypes/smartthings/smartsense-garage-door-multi.src/smartsense-garage-door-multi.groovy @@ -50,18 +50,18 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"status", type: "generic", width: 6, height: 4){ tileAttribute ("device.status", key: "PRIMARY_CONTROL") { - attributeState "closed", label:'${name}', icon:"st.doors.garage.garage-closed", backgroundColor:"#79b821", nextState:"opening" - attributeState "open", label:'${name}', icon:"st.doors.garage.garage-open", backgroundColor:"#ffa81e", nextState:"closing" - attributeState "opening", label:'${name}', icon:"st.doors.garage.garage-opening", backgroundColor:"#ffe71e" - attributeState "closing", label:'${name}', icon:"st.doors.garage.garage-closing", backgroundColor:"#ffe71e" + attributeState "closed", label:'${name}', icon:"st.doors.garage.garage-closed", backgroundColor:"#00A0DC", nextState:"opening" + attributeState "open", label:'${name}', icon:"st.doors.garage.garage-open", backgroundColor:"#e86d13", nextState:"closing" + attributeState "opening", label:'${name}', icon:"st.doors.garage.garage-opening", backgroundColor:"#e86d13" + attributeState "closing", label:'${name}', icon:"st.doors.garage.garage-closing", backgroundColor:"#00A0DC" } } standardTile("contact", "device.contact", width: 2, height: 2) { - state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e") - state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#79b821") + state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#e86d13") + state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#00A0DC") } standardTile("acceleration", "device.acceleration", decoration: "flat", width: 2, height: 2) { - state("active", label:'${name}', icon:"st.motion.acceleration.active", backgroundColor:"#53a7c0") + state("active", label:'${name}', icon:"st.motion.acceleration.active", backgroundColor:"#00A0DC") state("inactive", label:'${name}', icon:"st.motion.acceleration.inactive", backgroundColor:"#ffffff") } valueTile("temperature", "device.temperature", decoration: "flat", width: 2, height: 2) { diff --git a/devicetypes/smartthings/smartsense-garage-door-sensor-button.src/smartsense-garage-door-sensor-button.groovy b/devicetypes/smartthings/smartsense-garage-door-sensor-button.src/smartsense-garage-door-sensor-button.groovy index 1a2345c..1ff5426 100644 --- a/devicetypes/smartthings/smartsense-garage-door-sensor-button.src/smartsense-garage-door-sensor-button.groovy +++ b/devicetypes/smartthings/smartsense-garage-door-sensor-button.src/smartsense-garage-door-sensor-button.groovy @@ -50,17 +50,17 @@ metadata { tiles { standardTile("status", "device.status", width: 2, height: 2) { - state("closed", label:'${name}', icon:"st.doors.garage.garage-closed", action: "actuate", backgroundColor:"#79b821", nextState:"opening") - state("open", label:'${name}', icon:"st.doors.garage.garage-open", action: "actuate", backgroundColor:"#ffa81e", nextState:"closing") - state("opening", label:'${name}', icon:"st.doors.garage.garage-opening", backgroundColor:"#ffe71e") - state("closing", label:'${name}', icon:"st.doors.garage.garage-closing", backgroundColor:"#ffe71e") + state("closed", label:'${name}', icon:"st.doors.garage.garage-closed", action: "actuate", backgroundColor:"#00A0DC", nextState:"opening") + state("open", label:'${name}', icon:"st.doors.garage.garage-open", action: "actuate", backgroundColor:"#e86d13", nextState:"closing") + state("opening", label:'${name}', icon:"st.doors.garage.garage-opening", backgroundColor:"#e86d13") + state("closing", label:'${name}', icon:"st.doors.garage.garage-closing", backgroundColor:"#00A0DC") } standardTile("contact", "device.contact") { state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e") state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#79b821") } standardTile("acceleration", "device.acceleration", decoration: "flat") { - state("active", label:'${name}', icon:"st.motion.acceleration.active", backgroundColor:"#53a7c0") + state("active", label:'${name}', icon:"st.motion.acceleration.active", backgroundColor:"#00A0DC") state("inactive", label:'${name}', icon:"st.motion.acceleration.inactive", backgroundColor:"#ffffff") } valueTile("temperature", "device.temperature", decoration: "flat") { diff --git a/devicetypes/smartthings/wemo-motion.src/wemo-motion.groovy b/devicetypes/smartthings/wemo-motion.src/wemo-motion.groovy index dd5f1fa..fe844f2 100644 --- a/devicetypes/smartthings/wemo-motion.src/wemo-motion.groovy +++ b/devicetypes/smartthings/wemo-motion.src/wemo-motion.groovy @@ -36,9 +36,9 @@ tiles(scale: 2) { multiAttributeTile(name:"rich-control", type: "motion", canChangeIcon: true){ tileAttribute ("device.motion", key: "PRIMARY_CONTROL") { - attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0" - attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff" - attributeState "offline", label:'${name}', icon:"st.motion.motion.active", backgroundColor:"#ff0000" + attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00A0DC" + attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc" + attributeState "offline", label:'${name}', icon:"st.motion.motion.active", backgroundColor:"#cccccc" } tileAttribute ("currentIP", key: "SECONDARY_CONTROL") { attributeState "currentIP", label: '' diff --git a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy index 8fe39fc..55b22f2 100644 --- a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy +++ b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy @@ -38,9 +38,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/zigbee-lock.src/zigbee-lock.groovy b/devicetypes/smartthings/zigbee-lock.src/zigbee-lock.groovy index 27ba626..fb31a6b 100644 --- a/devicetypes/smartthings/zigbee-lock.src/zigbee-lock.groovy +++ b/devicetypes/smartthings/zigbee-lock.src/zigbee-lock.groovy @@ -39,10 +39,10 @@ import physicalgraph.zigbee.zcl.DataType tiles(scale: 2) { multiAttributeTile(name:"toggle", type:"generic", width:6, height:4){ tileAttribute ("device.lock", key:"PRIMARY_CONTROL") { - attributeState "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#79b821", nextState:"unlocking" + attributeState "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#00A0DC", nextState:"unlocking" attributeState "unlocked", label:'unlocked', action:"lock.lock", icon:"st.locks.lock.unlocked", backgroundColor:"#ffffff", nextState:"locking" attributeState "unknown", label:"unknown", action:"lock.lock", icon:"st.locks.lock.unknown", backgroundColor:"#ffffff", nextState:"locking" - attributeState "locking", label:'locking', icon:"st.locks.lock.locked", backgroundColor:"#79b821" + attributeState "locking", label:'locking', icon:"st.locks.lock.locked", backgroundColor:"#00A0DC" attributeState "unlocking", label:'unlocking', icon:"st.locks.lock.unlocked", backgroundColor:"#ffffff" } } diff --git a/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy b/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy index 0698ddf..4b0ad25 100644 --- a/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy +++ b/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy @@ -38,9 +38,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy b/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy index 977774a..1e5345f 100644 --- a/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy +++ b/devicetypes/smartthings/zll-rgb-bulb.src/zll-rgb-bulb.groovy @@ -29,9 +29,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/vlaminck/minecraft/smart-block.src/smart-block.groovy b/devicetypes/vlaminck/minecraft/smart-block.src/smart-block.groovy index d5ec4c0..f17a4cf 100644 --- a/devicetypes/vlaminck/minecraft/smart-block.src/smart-block.groovy +++ b/devicetypes/vlaminck/minecraft/smart-block.src/smart-block.groovy @@ -39,8 +39,8 @@ metadata { tiles { standardTile("switch", "device.switch", width: 1, height: 1, canChangeIcon: true) { state "off", label: '${name}', icon: "st.switches.switch.off", backgroundColor: "#ffffff", action: "switch.on", nextState: "turningOn" - state "turningOn", label: '${name}', icon: "st.switches.switch.on", backgroundColor: "#79b821" - state "on", label: '${name}', icon: "st.switches.switch.on", backgroundColor: "#79b821", action: "switch.off", nextState: "turningOff" + state "turningOn", label: '${name}', icon: "st.switches.switch.on", backgroundColor: "#00A0DC" + state "on", label: '${name}', icon: "st.switches.switch.on", backgroundColor: "#00A0DC", action: "switch.off", nextState: "turningOff" state "turningOff", label: '${name}', icon: "st.switches.switch.off", backgroundColor: "#ffffff" } valueTile("level", "device.level", height: 1, width: 1, inactiveLabel: false) { From 2610f00a82b04110e3a5cc93cc8380c99ac8d4fc Mon Sep 17 00:00:00 2001 From: "sushant.k1" Date: Tue, 28 Feb 2017 17:23:13 +0530 Subject: [PATCH 066/104] [DVCSMP-2448] DTH UX Improvements for the following DTHs: 1. Aeon Illuminator Module 2. Foscam 3. Secure Dimmer 4. WeMo Bulb 5. Z- wave Metering Dimmer 6. TCP Bulb --- .../aeon-illuminator-module.groovy | 4 ++-- devicetypes/smartthings/foscam.src/foscam.groovy | 2 +- .../smartthings/secure-dimmer.src/secure-dimmer.groovy | 4 ++-- devicetypes/smartthings/wemo-bulb.src/wemo-bulb.groovy | 4 ++-- .../zwave-metering-dimmer.src/zwave-metering-dimmer.groovy | 4 ++-- devicetypes/wackford/tcp-bulb.src/tcp-bulb.groovy | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/devicetypes/smartthings/aeon-illuminator-module.src/aeon-illuminator-module.groovy b/devicetypes/smartthings/aeon-illuminator-module.src/aeon-illuminator-module.groovy index 2f2c747..ab84256 100644 --- a/devicetypes/smartthings/aeon-illuminator-module.src/aeon-illuminator-module.groovy +++ b/devicetypes/smartthings/aeon-illuminator-module.src/aeon-illuminator-module.groovy @@ -47,9 +47,9 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" state "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - state "turningOn", label:'${name}', icon:"st.switches.switch.on", backgroundColor:"#79b821" + state "turningOn", label:'${name}', icon:"st.switches.switch.on", backgroundColor:"#00A0DC" state "turningOff", label:'${name}', icon:"st.switches.switch.off", backgroundColor:"#ffffff" } controlTile("levelSliderControl", "device.level", "slider", height: 2, width: 1, inactiveLabel: false) { diff --git a/devicetypes/smartthings/foscam.src/foscam.groovy b/devicetypes/smartthings/foscam.src/foscam.groovy index c509e65..737ac6b 100644 --- a/devicetypes/smartthings/foscam.src/foscam.groovy +++ b/devicetypes/smartthings/foscam.src/foscam.groovy @@ -41,7 +41,7 @@ standardTile("take", "device.image", width: 1, height: 1, canChangeIcon: false, inactiveLabel: true, canChangeBackground: false) { state "take", label: "Take", action: "Image Capture.take", icon: "st.camera.dropcam", backgroundColor: "#FFFFFF", nextState:"taking" - state "taking", label:'Taking', action: "", icon: "st.camera.dropcam", backgroundColor: "#53a7c0" + state "taking", label:'Taking', action: "", icon: "st.camera.dropcam", backgroundColor: "#00A0DC" state "image", label: "Take", action: "Image Capture.take", icon: "st.camera.dropcam", backgroundColor: "#FFFFFF", nextState:"taking" } diff --git a/devicetypes/smartthings/secure-dimmer.src/secure-dimmer.groovy b/devicetypes/smartthings/secure-dimmer.src/secure-dimmer.groovy index 82af5e4..5c0f599 100644 --- a/devicetypes/smartthings/secure-dimmer.src/secure-dimmer.groovy +++ b/devicetypes/smartthings/secure-dimmer.src/secure-dimmer.groovy @@ -42,9 +42,9 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" state "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - state "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + state "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" state "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" } controlTile("levelSliderControl", "device.level", "slider", height: 1, width: 3, inactiveLabel: false) { diff --git a/devicetypes/smartthings/wemo-bulb.src/wemo-bulb.groovy b/devicetypes/smartthings/wemo-bulb.src/wemo-bulb.groovy index 243dafb..8f98b02 100644 --- a/devicetypes/smartthings/wemo-bulb.src/wemo-bulb.groovy +++ b/devicetypes/smartthings/wemo-bulb.src/wemo-bulb.groovy @@ -43,9 +43,9 @@ metadata { // UI tile definitions tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" state "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - state "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + state "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" state "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" } standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/zwave-metering-dimmer.src/zwave-metering-dimmer.groovy b/devicetypes/smartthings/zwave-metering-dimmer.src/zwave-metering-dimmer.groovy index 5e95f5a..4b2fba2 100644 --- a/devicetypes/smartthings/zwave-metering-dimmer.src/zwave-metering-dimmer.groovy +++ b/devicetypes/smartthings/zwave-metering-dimmer.src/zwave-metering-dimmer.groovy @@ -57,9 +57,9 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" state "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - state "turningOn", label:'${name}', icon:"st.switches.switch.on", backgroundColor:"#79b821" + state "turningOn", label:'${name}', icon:"st.switches.switch.on", backgroundColor:"#00A0DC" state "turningOff", label:'${name}', icon:"st.switches.switch.off", backgroundColor:"#ffffff" } valueTile("power", "device.power") { diff --git a/devicetypes/wackford/tcp-bulb.src/tcp-bulb.groovy b/devicetypes/wackford/tcp-bulb.src/tcp-bulb.groovy index 186c8b2..124808a 100644 --- a/devicetypes/wackford/tcp-bulb.src/tcp-bulb.groovy +++ b/devicetypes/wackford/tcp-bulb.src/tcp-bulb.groovy @@ -70,9 +70,9 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" state "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - state "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + state "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" state "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" } controlTile("levelSliderControl", "device.level", "slider", height: 1, width: 2, inactiveLabel: false) { From a006799ad36c29beefa5880bf34ad85d60b455fb Mon Sep 17 00:00:00 2001 From: "sushant.k1" Date: Tue, 28 Feb 2017 17:35:31 +0530 Subject: [PATCH 067/104] [DVCSMP-2449] DTH UX Improvements for the following DTHs: 1. Hue Bulb 2. Lifx Color Bulb 3. Lifx White Bulb 4. Smartpower Outlet 5. Zigbee Dimmer Power 6. ZLL RGBW Bulb 7. ZLL White Color Temperature Bulb --- devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy | 4 ++-- .../smartthings/lifx-color-bulb.src/lifx-color-bulb.groovy | 4 ++-- .../smartthings/lifx-white-bulb.src/lifx-white-bulb.groovy | 4 ++-- .../smartpower-outlet.src/smartpower-outlet.groovy | 4 ++-- .../zigbee-dimmer-power.src/zigbee-dimmer-power.groovy | 4 ++-- .../smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy | 4 ++-- .../zll-white-color-temperature-bulb.groovy | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy b/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy index a2c1a7a..377f05b 100644 --- a/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy +++ b/devicetypes/smartthings/hue-bulb.src/hue-bulb.groovy @@ -32,9 +32,9 @@ metadata { tiles (scale: 2){ multiAttributeTile(name:"rich-control", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/lifx-color-bulb.src/lifx-color-bulb.groovy b/devicetypes/smartthings/lifx-color-bulb.src/lifx-color-bulb.groovy index 5240c60..964f8bf 100644 --- a/devicetypes/smartthings/lifx-color-bulb.src/lifx-color-bulb.groovy +++ b/devicetypes/smartthings/lifx-color-bulb.src/lifx-color-bulb.groovy @@ -24,9 +24,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"http://hosted.lifx.co/smartthings/v1/196xOn.png", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"http://hosted.lifx.co/smartthings/v1/196xOn.png", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"http://hosted.lifx.co/smartthings/v1/196xOff.png", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'Turning on', action:"switch.off", icon:"http://hosted.lifx.co/smartthings/v1/196xOn.png", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'Turning on', action:"switch.off", icon:"http://hosted.lifx.co/smartthings/v1/196xOn.png", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'Turning off', action:"switch.on", icon:"http://hosted.lifx.co/smartthings/v1/196xOff.png", backgroundColor:"#ffffff", nextState:"turningOn" } diff --git a/devicetypes/smartthings/lifx-white-bulb.src/lifx-white-bulb.groovy b/devicetypes/smartthings/lifx-white-bulb.src/lifx-white-bulb.groovy index bc559c8..472f269 100644 --- a/devicetypes/smartthings/lifx-white-bulb.src/lifx-white-bulb.groovy +++ b/devicetypes/smartthings/lifx-white-bulb.src/lifx-white-bulb.groovy @@ -23,9 +23,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"http://hosted.lifx.co/smartthings/v1/196xOn.png", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"http://hosted.lifx.co/smartthings/v1/196xOn.png", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"http://hosted.lifx.co/smartthings/v1/196xOff.png", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'Turning on', action:"switch.off", icon:"http://hosted.lifx.co/smartthings/v1/196xOn.png", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'Turning on', action:"switch.off", icon:"http://hosted.lifx.co/smartthings/v1/196xOn.png", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'Turning off', action:"switch.on", icon:"http://hosted.lifx.co/smartthings/v1/196xOff.png", backgroundColor:"#ffffff", nextState:"turningOn" } diff --git a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy index 0261b47..76e0dc7 100644 --- a/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy +++ b/devicetypes/smartthings/smartpower-outlet.src/smartpower-outlet.groovy @@ -56,9 +56,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name: "switch", type: "lighting", width: 6, height: 4, canChangeIcon: true) { tileAttribute("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label: 'On', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821", nextState: "turningOff" + attributeState "on", label: 'On', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC", nextState: "turningOff" attributeState "off", label: 'Off', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff", nextState: "turningOn" - attributeState "turningOn", label: 'Turning On', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821", nextState: "turningOff" + attributeState "turningOn", label: 'Turning On', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC", nextState: "turningOff" attributeState "turningOff", label: 'Turning Off', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff", nextState: "turningOn" } tileAttribute("power", key: "SECONDARY_CONTROL") { diff --git a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy index 9b3901a..ceea649 100644 --- a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy +++ b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy @@ -34,9 +34,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy b/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy index aff9fa7..74cb921 100644 --- a/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy +++ b/devicetypes/smartthings/zll-rgbw-bulb.src/zll-rgbw-bulb.groovy @@ -38,9 +38,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/zll-white-color-temperature-bulb.src/zll-white-color-temperature-bulb.groovy b/devicetypes/smartthings/zll-white-color-temperature-bulb.src/zll-white-color-temperature-bulb.groovy index 737a933..ee3130d 100644 --- a/devicetypes/smartthings/zll-white-color-temperature-bulb.src/zll-white-color-temperature-bulb.groovy +++ b/devicetypes/smartthings/zll-white-color-temperature-bulb.src/zll-white-color-temperature-bulb.groovy @@ -39,9 +39,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { From 72c75882cf124fc284034eaa0729b276b9aae4b3 Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Tue, 28 Feb 2017 18:32:02 +0530 Subject: [PATCH 068/104] [DVCSMP-2443] Standardize Page 4 of DTH UX Improvements --- .../lock-capability.src/lock-capability.groovy | 2 +- .../momentary-capability.groovy | 2 +- .../presence-sensor-capability.groovy | 2 +- .../switch-capability.groovy | 2 +- .../aeon-key-fob.src/aeon-key-fob.groovy | 16 ++++++++-------- .../hue-white-ambiance-bulb.groovy | 4 ++-- .../motion-detector.src/motion-detector.groovy | 4 ++-- .../smartpower-outlet-v1.groovy | 2 +- .../simulated-thermostat.groovy | 10 +++++----- 9 files changed, 22 insertions(+), 22 deletions(-) diff --git a/devicetypes/capabilities/lock-capability.src/lock-capability.groovy b/devicetypes/capabilities/lock-capability.src/lock-capability.groovy index 634e7c6..dde6b62 100644 --- a/devicetypes/capabilities/lock-capability.src/lock-capability.groovy +++ b/devicetypes/capabilities/lock-capability.src/lock-capability.groovy @@ -27,7 +27,7 @@ metadata { tiles { standardTile("toggle", "device.lock", width: 2, height: 2) { state "unlocked", label:'unlocked', action:"lock.lock", icon:"st.locks.lock.unlocked", backgroundColor:"#ffffff" - state "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#79b821" + state "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#00A0DC" } standardTile("lock", "device.lock", inactiveLabel: false, decoration: "flat") { state "default", label:'lock', action:"lock.lock", icon:"st.locks.lock.locked" diff --git a/devicetypes/capabilities/momentary-capability.src/momentary-capability.groovy b/devicetypes/capabilities/momentary-capability.src/momentary-capability.groovy index 9fa0a6b..688f2e2 100644 --- a/devicetypes/capabilities/momentary-capability.src/momentary-capability.groovy +++ b/devicetypes/capabilities/momentary-capability.src/momentary-capability.groovy @@ -29,7 +29,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff", nextState: "on" - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" } main "switch" details "switch" diff --git a/devicetypes/capabilities/presence-sensor-capability.src/presence-sensor-capability.groovy b/devicetypes/capabilities/presence-sensor-capability.src/presence-sensor-capability.groovy index d90d7fa..219234b 100644 --- a/devicetypes/capabilities/presence-sensor-capability.src/presence-sensor-capability.groovy +++ b/devicetypes/capabilities/presence-sensor-capability.src/presence-sensor-capability.groovy @@ -24,7 +24,7 @@ metadata { tiles { standardTile("presence", "device.presence", width: 2, height: 2) { state("not present", label:'not present', icon:"st.presence.tile.not-present", backgroundColor:"#ffffff") - state("present", label:'present', icon:"st.presence.tile.present", backgroundColor:"#53a7c0") + state("present", label:'present', icon:"st.presence.tile.present", backgroundColor:"#00A0DC") } main "presence" details "presence" diff --git a/devicetypes/capabilities/switch-capability.src/switch-capability.groovy b/devicetypes/capabilities/switch-capability.src/switch-capability.groovy index dc2070f..3b5a01e 100644 --- a/devicetypes/capabilities/switch-capability.src/switch-capability.groovy +++ b/devicetypes/capabilities/switch-capability.src/switch-capability.groovy @@ -31,7 +31,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" } main "switch" details "switch" diff --git a/devicetypes/smartthings/aeon-key-fob.src/aeon-key-fob.groovy b/devicetypes/smartthings/aeon-key-fob.src/aeon-key-fob.groovy index 40f5403..a782169 100644 --- a/devicetypes/smartthings/aeon-key-fob.src/aeon-key-fob.groovy +++ b/devicetypes/smartthings/aeon-key-fob.src/aeon-key-fob.groovy @@ -37,14 +37,14 @@ metadata { tiles { standardTile("button", "device.button", width: 2, height: 2) { state "default", label: "", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#ffffff" - state "button 1 pushed", label: "pushed #1", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#79b821" - state "button 2 pushed", label: "pushed #2", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#79b821" - state "button 3 pushed", label: "pushed #3", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#79b821" - state "button 4 pushed", label: "pushed #4", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#79b821" - state "button 1 held", label: "held #1", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#ffa81e" - state "button 2 held", label: "held #2", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#ffa81e" - state "button 3 held", label: "held #3", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#ffa81e" - state "button 4 held", label: "held #4", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#ffa81e" + state "button 1 pushed", label: "pushed #1", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#00A0DC" + state "button 2 pushed", label: "pushed #2", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#00A0DC" + state "button 3 pushed", label: "pushed #3", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#00A0DC" + state "button 4 pushed", label: "pushed #4", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#00A0DC" + state "button 1 held", label: "held #1", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#e86d13" + state "button 2 held", label: "held #2", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#e86d13" + state "button 3 held", label: "held #3", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#e86d13" + state "button 4 held", label: "held #4", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#e86d13" } valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") { state "battery", label:'${currentValue}% battery', unit:"" diff --git a/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy b/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy index 6d1fa16..9c19381 100644 --- a/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy +++ b/devicetypes/smartthings/hue-white-ambiance-bulb.src/hue-white-ambiance-bulb.groovy @@ -28,9 +28,9 @@ metadata { tiles (scale: 2){ multiAttributeTile(name:"rich-control", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/motion-detector.src/motion-detector.groovy b/devicetypes/smartthings/motion-detector.src/motion-detector.groovy index a7c86a4..ca1de53 100644 --- a/devicetypes/smartthings/motion-detector.src/motion-detector.groovy +++ b/devicetypes/smartthings/motion-detector.src/motion-detector.groovy @@ -28,8 +28,8 @@ metadata { // UI tile definitions tiles { standardTile("motion", "device.motion", width: 2, height: 2) { - state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0") - state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff") + state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00A0DC") + state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc") } main "motion" diff --git a/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy b/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy index 4be7bce..0987f0d 100644 --- a/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy +++ b/devicetypes/smartthings/smartpower-outlet-v1.src/smartpower-outlet-v1.groovy @@ -23,7 +23,7 @@ metadata { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { attributeState "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" - attributeState "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + attributeState "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" } } main "switch" diff --git a/devicetypes/smartthings/testing/simulated-thermostat.src/simulated-thermostat.groovy b/devicetypes/smartthings/testing/simulated-thermostat.src/simulated-thermostat.groovy index 63d08f8..998dba9 100644 --- a/devicetypes/smartthings/testing/simulated-thermostat.src/simulated-thermostat.groovy +++ b/devicetypes/smartthings/testing/simulated-thermostat.src/simulated-thermostat.groovy @@ -101,9 +101,9 @@ metadata { standardTile("mode", "device.thermostatMode", width: 2, height: 2, inactiveLabel: false, decoration: "flat") { state "off", label:'${name}', action:"thermostat.heat", backgroundColor:"#ffffff" - state "heat", label:'${name}', action:"thermostat.cool", backgroundColor:"#ffa81e" - state "cool", label:'${name}', action:"thermostat.auto", backgroundColor:"#269bd2" - state "auto", label:'${name}', action:"thermostat.off", backgroundColor:"#79b821" + state "heat", label:'${name}', action:"thermostat.cool", backgroundColor:"#e86d13" + state "cool", label:'${name}', action:"thermostat.auto", backgroundColor:"#00A0DC" + state "auto", label:'${name}', action:"thermostat.off", backgroundColor:"#00A0DC" } standardTile("fanMode", "device.thermostatFanMode", width: 2, height: 2, inactiveLabel: false, decoration: "flat") { state "fanAuto", label:'${name}', action:"thermostat.fanOn", backgroundColor:"#ffffff" @@ -112,8 +112,8 @@ metadata { } standardTile("operatingState", "device.thermostatOperatingState", width: 2, height: 2) { state "idle", label:'${name}', backgroundColor:"#ffffff" - state "heating", label:'${name}', backgroundColor:"#ffa81e" - state "cooling", label:'${name}', backgroundColor:"#269bd2" + state "heating", label:'${name}', backgroundColor:"#e86d13" + state "cooling", label:'${name}', backgroundColor:"#00A0DC" } main("thermostatMulti") From fe5a965f6fa146eeefdf42137916db8e1edd5910 Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Tue, 28 Feb 2017 19:07:03 +0530 Subject: [PATCH 069/104] [DVCSMP-2444] Standardize Page 5 of DTH UX Improvements --- .../on-off-button-tile.src/on-off-button-tile.groovy | 2 +- .../open-closed-sensor.src/open-closed-sensor.groovy | 4 ++-- devicetypes/smartthings/spark.src/spark.groovy | 2 +- .../simulated-contact-sensor.groovy | 4 ++-- .../testing/simulated-lock.src/simulated-lock.groovy | 2 +- .../simulated-motion-sensor.groovy | 4 ++-- .../simulated-presence-sensor.groovy | 2 +- .../simulated-water-sensor.src/simulated-water-sensor.groovy | 2 +- .../simulated-water-valve.src/simulated-water-valve.groovy | 4 ++-- .../quirky-wink-porkfolio.src/quirky-wink-porkfolio.groovy | 4 ++-- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/devicetypes/smartthings/on-off-button-tile.src/on-off-button-tile.groovy b/devicetypes/smartthings/on-off-button-tile.src/on-off-button-tile.groovy index 59b82bf..ec86e5a 100644 --- a/devicetypes/smartthings/on-off-button-tile.src/on-off-button-tile.groovy +++ b/devicetypes/smartthings/on-off-button-tile.src/on-off-button-tile.groovy @@ -31,7 +31,7 @@ metadata { tiles { standardTile("button", "device.switch", width: 2, height: 2, canChangeIcon: true) { state "off", label: 'Off', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff", nextState: "on" - state "on", label: 'On', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821", nextState: "off" + state "on", label: 'On', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC", nextState: "off" } main "button" details "button" diff --git a/devicetypes/smartthings/open-closed-sensor.src/open-closed-sensor.groovy b/devicetypes/smartthings/open-closed-sensor.src/open-closed-sensor.groovy index 6c2e42e..8883096 100644 --- a/devicetypes/smartthings/open-closed-sensor.src/open-closed-sensor.groovy +++ b/devicetypes/smartthings/open-closed-sensor.src/open-closed-sensor.groovy @@ -29,8 +29,8 @@ metadata { // UI tile definitions tiles { standardTile("contact", "device.contact", width: 2, height: 2) { - state "open", label: '${name}', icon: "st.contact.contact.open", backgroundColor: "#ffa81e" - state "closed", label: '${name}', icon: "st.contact.contact.closed", backgroundColor: "#79b821" + state "open", label: '${name}', icon: "st.contact.contact.open", backgroundColor: "#e86d13" + state "closed", label: '${name}', icon: "st.contact.contact.closed", backgroundColor: "#00A0DC" } main "contact" diff --git a/devicetypes/smartthings/spark.src/spark.groovy b/devicetypes/smartthings/spark.src/spark.groovy index 3f74ce4..84e08d5 100644 --- a/devicetypes/smartthings/spark.src/spark.groovy +++ b/devicetypes/smartthings/spark.src/spark.groovy @@ -20,7 +20,7 @@ metadata { // tile definitions tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } diff --git a/devicetypes/smartthings/testing/simulated-contact-sensor.src/simulated-contact-sensor.groovy b/devicetypes/smartthings/testing/simulated-contact-sensor.src/simulated-contact-sensor.groovy index 0c520e8..5fa041e 100644 --- a/devicetypes/smartthings/testing/simulated-contact-sensor.src/simulated-contact-sensor.groovy +++ b/devicetypes/smartthings/testing/simulated-contact-sensor.src/simulated-contact-sensor.groovy @@ -28,8 +28,8 @@ metadata { tiles { standardTile("contact", "device.contact", width: 2, height: 2) { - state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#79b821", action: "open") - state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e", action: "close") + state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#00A0DC", action: "open") + state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#e86d13", action: "close") } main "contact" details "contact" diff --git a/devicetypes/smartthings/testing/simulated-lock.src/simulated-lock.groovy b/devicetypes/smartthings/testing/simulated-lock.src/simulated-lock.groovy index 59e6e0d..775abbb 100644 --- a/devicetypes/smartthings/testing/simulated-lock.src/simulated-lock.groovy +++ b/devicetypes/smartthings/testing/simulated-lock.src/simulated-lock.groovy @@ -23,7 +23,7 @@ metadata { tiles { standardTile("toggle", "device.lock", width: 2, height: 2) { state "unlocked", label:'unlocked', action:"lock.lock", icon:"st.locks.lock.unlocked", backgroundColor:"#ffffff" - state "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#79b821" + state "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#00A0DC" } standardTile("lock", "device.lock", inactiveLabel: false, decoration: "flat") { state "default", label:'lock', action:"lock.lock", icon:"st.locks.lock.locked" diff --git a/devicetypes/smartthings/testing/simulated-motion-sensor.src/simulated-motion-sensor.groovy b/devicetypes/smartthings/testing/simulated-motion-sensor.src/simulated-motion-sensor.groovy index cf5a773..3776ab5 100644 --- a/devicetypes/smartthings/testing/simulated-motion-sensor.src/simulated-motion-sensor.groovy +++ b/devicetypes/smartthings/testing/simulated-motion-sensor.src/simulated-motion-sensor.groovy @@ -28,8 +28,8 @@ metadata { tiles { standardTile("motion", "device.motion", width: 2, height: 2) { - state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff", action: "active") - state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0", action: "inactive") + state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc", action: "active") + state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00A0DC", action: "inactive") } main "motion" details "motion" diff --git a/devicetypes/smartthings/testing/simulated-presence-sensor.src/simulated-presence-sensor.groovy b/devicetypes/smartthings/testing/simulated-presence-sensor.src/simulated-presence-sensor.groovy index 389122a..b7ef6ca 100644 --- a/devicetypes/smartthings/testing/simulated-presence-sensor.src/simulated-presence-sensor.groovy +++ b/devicetypes/smartthings/testing/simulated-presence-sensor.src/simulated-presence-sensor.groovy @@ -29,7 +29,7 @@ metadata { tiles { standardTile("presence", "device.presence", width: 2, height: 2, canChangeBackground: true) { state("not present", label:'not present', icon:"st.presence.tile.not-present", backgroundColor:"#ffffff", action:"arrived") - state("present", label:'present', icon:"st.presence.tile.present", backgroundColor:"#53a7c0", action:"departed") + state("present", label:'present', icon:"st.presence.tile.present", backgroundColor:"#00A0DC", action:"departed") } main "presence" details "presence" diff --git a/devicetypes/smartthings/testing/simulated-water-sensor.src/simulated-water-sensor.groovy b/devicetypes/smartthings/testing/simulated-water-sensor.src/simulated-water-sensor.groovy index 4998447..b36aa67 100644 --- a/devicetypes/smartthings/testing/simulated-water-sensor.src/simulated-water-sensor.groovy +++ b/devicetypes/smartthings/testing/simulated-water-sensor.src/simulated-water-sensor.groovy @@ -29,7 +29,7 @@ metadata { tiles { standardTile("water", "device.water", width: 2, height: 2) { state "dry", icon:"st.alarm.water.dry", backgroundColor:"#ffffff", action: "wet" - state "wet", icon:"st.alarm.water.wet", backgroundColor:"#53a7c0", action: "dry" + state "wet", icon:"st.alarm.water.wet", backgroundColor:"#00A0DC", action: "dry" } standardTile("wet", "device.water", inactiveLabel: false, decoration: "flat") { state "default", label:'Wet', action:"wet", icon: "st.alarm.water.wet" diff --git a/devicetypes/smartthings/testing/simulated-water-valve.src/simulated-water-valve.groovy b/devicetypes/smartthings/testing/simulated-water-valve.src/simulated-water-valve.groovy index 478d7f6..f767a8c 100644 --- a/devicetypes/smartthings/testing/simulated-water-valve.src/simulated-water-valve.groovy +++ b/devicetypes/smartthings/testing/simulated-water-valve.src/simulated-water-valve.groovy @@ -21,8 +21,8 @@ metadata { // tile definitions tiles { standardTile("contact", "device.contact", width: 2, height: 2, canChangeIcon: true) { - state "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#e86d13" - state "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#53a7c0" + state "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff" + state "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC" } standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") { state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh" diff --git a/devicetypes/wackford/quirky-wink-porkfolio.src/quirky-wink-porkfolio.groovy b/devicetypes/wackford/quirky-wink-porkfolio.src/quirky-wink-porkfolio.groovy index 8bf827b..4765be9 100644 --- a/devicetypes/wackford/quirky-wink-porkfolio.src/quirky-wink-porkfolio.groovy +++ b/devicetypes/wackford/quirky-wink-porkfolio.src/quirky-wink-porkfolio.groovy @@ -45,8 +45,8 @@ metadata { tiles { standardTile("acceleration", "device.acceleration", width: 2, height: 2, canChangeIcon: true) { - state "inactive", label:'pig secure', icon:"st.motion.acceleration.inactive", backgroundColor:"#44b621" - state "active", label:'pig alarm', icon:"st.motion.acceleration.active", backgroundColor:"#FF1919" + state "inactive", label:'pig secure', icon:"st.motion.acceleration.inactive", backgroundColor:"#cccccc" + state "active", label:'pig alarm', icon:"st.motion.acceleration.active", backgroundColor:"#00A0DC" } standardTile("balance", "device.balance", inactiveLabel: false, canChangeIcon: true) { state "balance", label:'${currentValue}', unit:"", icon:"st.Food & Dining.dining18" From cb6304530e8242d5ae60ec008fc041ecff344ea8 Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Tue, 28 Feb 2017 18:59:38 +0530 Subject: [PATCH 070/104] [DVCSMP-2442] Standardize Page 3 of DTH UX Improvements --- .../obything-music.src/obything-music.groovy | 2 +- .../jawbone-user.src/jawbone-user.groovy | 2 +- .../fibaro-rgbw-controller.groovy | 4 ++-- .../fortrezz-water-valve.groovy | 8 +++---- .../gentle-wake-up-controller.groovy | 4 ++-- .../hue-lux-bulb.src/hue-lux-bulb.groovy | 4 ++-- .../mimolite-garage-door-controller.groovy | 10 ++++----- .../tile-multiattribute-thermostat.groovy | 22 +++++++++---------- 8 files changed, 28 insertions(+), 28 deletions(-) diff --git a/devicetypes/com-obycode/obything-music.src/obything-music.groovy b/devicetypes/com-obycode/obything-music.src/obything-music.groovy index b244e3e..878de77 100644 --- a/devicetypes/com-obycode/obything-music.src/obything-music.groovy +++ b/devicetypes/com-obycode/obything-music.src/obything-music.groovy @@ -38,7 +38,7 @@ metadata { // Main standardTile("main", "device.status", width: 1, height: 1, canChangeIcon: true) { state "paused", label:'Paused', action:"music Player.play", icon:"st.Electronics.electronics19", nextState:"playing", backgroundColor:"#ffffff" - state "playing", label:'Playing', action:"music Player.pause", icon:"st.Electronics.electronics19", nextState:"paused", backgroundColor:"#79b821" + state "playing", label:'Playing', action:"music Player.pause", icon:"st.Electronics.electronics19", nextState:"paused", backgroundColor:"#00A0DC" } // Row 1 diff --git a/devicetypes/juano2310/jawbone-user.src/jawbone-user.groovy b/devicetypes/juano2310/jawbone-user.src/jawbone-user.groovy index 4d15594..125f38c 100644 --- a/devicetypes/juano2310/jawbone-user.src/jawbone-user.groovy +++ b/devicetypes/juano2310/jawbone-user.src/jawbone-user.groovy @@ -24,7 +24,7 @@ metadata { tiles { standardTile("sleeping", "device.sleeping", width: 1, height: 1, canChangeIcon: false, canChangeBackground: false) { state("sleeping", label: "Sleeping", icon:"st.Bedroom.bedroom12", backgroundColor:"#ffffff") - state("not sleeping", label: "Awake", icon:"st.Health & Wellness.health12", backgroundColor:"#79b821") + state("not sleeping", label: "Awake", icon:"st.Health & Wellness.health12", backgroundColor:"#00A0DC") } standardTile("steps", "device.steps", width: 2, height: 2, canChangeIcon: false, canChangeBackground: false) { state("steps", label: '${currentValue} Steps', icon:"st.Health & Wellness.health11", backgroundColor:"#ffffff") diff --git a/devicetypes/smartthings/fibaro-rgbw-controller.src/fibaro-rgbw-controller.groovy b/devicetypes/smartthings/fibaro-rgbw-controller.src/fibaro-rgbw-controller.groovy index cd40f10..4385edc 100644 --- a/devicetypes/smartthings/fibaro-rgbw-controller.src/fibaro-rgbw-controller.groovy +++ b/devicetypes/smartthings/fibaro-rgbw-controller.src/fibaro-rgbw-controller.groovy @@ -89,9 +89,9 @@ state "whiteLevel", action:"setWhiteLevel", label:'White Level' } standardTile("switch", "device.switch", width: 1, height: 1, canChangeIcon: true) { - state "on", label:'${name}', action:"switch.off", icon:"st.illuminance.illuminance.bright", backgroundColor:"#79b821", nextState:"turningOff" + state "on", label:'${name}', action:"switch.off", icon:"st.illuminance.illuminance.bright", backgroundColor:"#00A0DC", nextState:"turningOff" state "off", label:'${name}', action:"switch.on", icon:"st.illuminance.illuminance.dark", backgroundColor:"#ffffff", nextState:"turningOn" - state "turningOn", label:'${name}', icon:"st.illuminance.illuminance.bright", backgroundColor:"#79b821" + state "turningOn", label:'${name}', icon:"st.illuminance.illuminance.bright", backgroundColor:"#00A0DC" state "turningOff", label:'${name}', icon:"st.illuminance.illuminance.dark", backgroundColor:"#ffffff" } valueTile("power", "device.power", decoration: "flat") { diff --git a/devicetypes/smartthings/fortrezz-water-valve.src/fortrezz-water-valve.groovy b/devicetypes/smartthings/fortrezz-water-valve.src/fortrezz-water-valve.groovy index 538694a..1b67c5d 100644 --- a/devicetypes/smartthings/fortrezz-water-valve.src/fortrezz-water-valve.groovy +++ b/devicetypes/smartthings/fortrezz-water-valve.src/fortrezz-water-valve.groovy @@ -34,10 +34,10 @@ metadata { // tile definitions tiles { standardTile("contact", "device.contact", width: 2, height: 2, canChangeIcon: true) { - state "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#53a7c0", nextState:"closing" - state "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#e86d13", nextState:"opening" - state "opening", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#ffe71e" - state "closing", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffe71e" + state "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC", nextState:"closing" + state "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff", nextState:"opening" + state "opening", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC" + state "closing", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff" } standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") { state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh" diff --git a/devicetypes/smartthings/gentle-wake-up-controller.src/gentle-wake-up-controller.groovy b/devicetypes/smartthings/gentle-wake-up-controller.src/gentle-wake-up-controller.groovy index b34a355..a142cdd 100644 --- a/devicetypes/smartthings/gentle-wake-up-controller.src/gentle-wake-up-controller.groovy +++ b/devicetypes/smartthings/gentle-wake-up-controller.src/gentle-wake-up-controller.groovy @@ -31,7 +31,7 @@ metadata { tileAttribute("sessionStatus", key: "PRIMARY_CONTROL") { attributeState "cancelled", action: "timed session.start", icon: "http://f.cl.ly/items/322n181j2K3f281r2s0A/playbutton.png", backgroundColor: "#ffffff", nextState: "running" attributeState "stopped", action: "timed session.start", icon: "http://f.cl.ly/items/322n181j2K3f281r2s0A/playbutton.png", backgroundColor: "#ffffff", nextState: "cancelled" - attributeState "running", action: "timed session.stop", icon: "http://f.cl.ly/items/0B3y3p2V3X2l3P3y3W09/stopbutton.png", backgroundColor: "#79b821", nextState: "cancelled" + attributeState "running", action: "timed session.stop", icon: "http://f.cl.ly/items/0B3y3p2V3X2l3P3y3W09/stopbutton.png", backgroundColor: "#00A0DC", nextState: "cancelled" } tileAttribute("timeRemaining", key: "SECONDARY_CONTROL") { attributeState "timeRemaining", label:'${currentValue} remaining' @@ -45,7 +45,7 @@ metadata { standardTile("sessionStatusTile", "sessionStatus", width: 1, height: 1, canChangeIcon: true) { state "cancelled", label: "Stopped", action: "timed session.start", backgroundColor: "#ffffff", icon: "http://f.cl.ly/items/1J1g0H2P0S1G1f2O1s1s/icon.png" state "stopped", label: "Stopped", action: "timed session.start", backgroundColor: "#ffffff", icon: "http://f.cl.ly/items/1J1g0H2P0S1G1f2O1s1s/icon.png" - state "running", label: "Running", action: "timed session.stop", backgroundColor: "#79b821", icon: "http://f.cl.ly/items/1J1g0H2P0S1G1f2O1s1s/icon.png" + state "running", label: "Running", action: "timed session.stop", backgroundColor: "#00A0DC", icon: "http://f.cl.ly/items/1J1g0H2P0S1G1f2O1s1s/icon.png" } // duration diff --git a/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy b/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy index c221593..387bea3 100644 --- a/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy +++ b/devicetypes/smartthings/hue-lux-bulb.src/hue-lux-bulb.groovy @@ -27,9 +27,9 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"rich-control", type: "lighting", canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "on", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "off", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" - attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#79b821", nextState:"turningOff" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.lights.philips.hue-single", backgroundColor:"#00A0DC", nextState:"turningOff" attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.lights.philips.hue-single", backgroundColor:"#ffffff", nextState:"turningOn" } tileAttribute ("device.level", key: "SLIDER_CONTROL") { diff --git a/devicetypes/smartthings/mimolite-garage-door-controller.src/mimolite-garage-door-controller.groovy b/devicetypes/smartthings/mimolite-garage-door-controller.src/mimolite-garage-door-controller.groovy index fb7407e..9af3124 100644 --- a/devicetypes/smartthings/mimolite-garage-door-controller.src/mimolite-garage-door-controller.groovy +++ b/devicetypes/smartthings/mimolite-garage-door-controller.src/mimolite-garage-door-controller.groovy @@ -53,11 +53,11 @@ metadata { // UI tile definitions tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "doorClosed", label: "Closed", action: "on", icon: "st.doors.garage.garage-closed", backgroundColor: "#79b821" - state "doorOpen", label: "Open", action: "on", icon: "st.doors.garage.garage-open", backgroundColor: "#ffa81e" - state "doorOpening", label: "Opening", action: "on", icon: "st.doors.garage.garage-opening", backgroundColor: "#ffa81e" - state "doorClosing", label: "Closing", action: "on", icon: "st.doors.garage.garage-closing", backgroundColor: "#ffa81e" - state "on", label: "Actuate", action: "off", icon: "st.doors.garage.garage-closed", backgroundColor: "#53a7c0" + state "doorClosed", label: "Closed", action: "on", icon: "st.doors.garage.garage-closed", backgroundColor: "#00A0DC" + state "doorOpen", label: "Open", action: "on", icon: "st.doors.garage.garage-open", backgroundColor: "#e86d13" + state "doorOpening", label: "Opening", action: "on", icon: "st.doors.garage.garage-opening", backgroundColor: "#e86d13" + state "doorClosing", label: "Closing", action: "on", icon: "st.doors.garage.garage-closing", backgroundColor: "#00A0DC" + state "on", label: "Actuate", action: "off", icon: "st.doors.garage.garage-closed", backgroundColor: "#00A0DC" state "off", label: '${name}', action: "on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } standardTile("contact", "device.contact", inactiveLabel: false) { diff --git a/devicetypes/smartthings/tile-ux/tile-multiattribute-thermostat.src/tile-multiattribute-thermostat.groovy b/devicetypes/smartthings/tile-ux/tile-multiattribute-thermostat.src/tile-multiattribute-thermostat.groovy index 6fb57bd..a784ac5 100644 --- a/devicetypes/smartthings/tile-ux/tile-multiattribute-thermostat.src/tile-multiattribute-thermostat.groovy +++ b/devicetypes/smartthings/tile-ux/tile-multiattribute-thermostat.src/tile-multiattribute-thermostat.groovy @@ -42,9 +42,9 @@ metadata { attributeState("humidity", label:'${currentValue}%', unit:"%", defaultState: true) } tileAttribute("device.thermostatOperatingState", key: "OPERATING_STATE") { - attributeState("idle", backgroundColor:"#44b621") - attributeState("heating", backgroundColor:"#ffa81e") - attributeState("cooling", backgroundColor:"#269bd2") + attributeState("idle", backgroundColor:"#00A0DC") + attributeState("heating", backgroundColor:"#e86d13") + attributeState("cooling", backgroundColor:"#00A0DC") } tileAttribute("device.thermostatMode", key: "THERMOSTAT_MODE") { attributeState("off", label:'${name}') @@ -69,9 +69,9 @@ metadata { attributeState("VALUE_DOWN", action: "tempDown") } tileAttribute("device.thermostatOperatingState", key: "OPERATING_STATE") { - attributeState("idle", backgroundColor:"#44b621") - attributeState("heating", backgroundColor:"#ffa81e") - attributeState("cooling", backgroundColor:"#269bd2") + attributeState("idle", backgroundColor:"#00A0DC") + attributeState("heating", backgroundColor:"#e86d13") + attributeState("cooling", backgroundColor:"#00A0DC") } tileAttribute("device.thermostatMode", key: "THERMOSTAT_MODE") { attributeState("off", label:'${name}') @@ -148,9 +148,9 @@ metadata { standardTile("mode", "device.thermostatMode", width: 2, height: 2, inactiveLabel: false, decoration: "flat") { state "off", label:'${name}', action:"thermostat.heat", backgroundColor:"#ffffff" - state "heat", label:'${name}', action:"thermostat.cool", backgroundColor:"#ffa81e" - state "cool", label:'${name}', action:"thermostat.auto", backgroundColor:"#269bd2" - state "auto", label:'${name}', action:"thermostat.off", backgroundColor:"#79b821" + state "heat", label:'${name}', action:"thermostat.cool", backgroundColor:"#e86d13" + state "cool", label:'${name}', action:"thermostat.auto", backgroundColor:"#00A0DC" + state "auto", label:'${name}', action:"thermostat.off", backgroundColor:"#00A0DC" } standardTile("fanMode", "device.thermostatFanMode", width: 2, height: 2, inactiveLabel: false, decoration: "flat") { state "fanAuto", label:'${name}', action:"thermostat.fanOn", backgroundColor:"#ffffff" @@ -159,8 +159,8 @@ metadata { } standardTile("operatingState", "device.thermostatOperatingState", width: 2, height: 2) { state "idle", label:'${name}', backgroundColor:"#ffffff" - state "heating", label:'${name}', backgroundColor:"#ffa81e" - state "cooling", label:'${name}', backgroundColor:"#269bd2" + state "heating", label:'${name}', backgroundColor:"#e86d13" + state "cooling", label:'${name}', backgroundColor:"#00A0DC" } From 28c0cc96193b124897ed5fad30015b23dbf41bd5 Mon Sep 17 00:00:00 2001 From: Tom Manley Date: Tue, 28 Feb 2017 09:52:00 -0600 Subject: [PATCH 071/104] Add fingerprint for motionv5 https://smartthings.atlassian.net/browse/DVCSMP-2481 --- .../smartsense-motion-sensor.src/smartsense-motion-sensor.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy index a93e927..7f84859 100644 --- a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy +++ b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy @@ -35,6 +35,7 @@ metadata { fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3326" fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3326-L", deviceJoinName: "Iris Motion Sensor" fingerprint inClusters: "0000,0001,0003,000F,0020,0402,0500", outClusters: "0019", manufacturer: "SmartThings", model: "motionv4", deviceJoinName: "Motion Sensor" + fingerprint inClusters: "0000,0001,0003,000F,0020,0402,0500", outClusters: "0019", manufacturer: "SmartThings", model: "motionv5", deviceJoinName: "Motion Sensor" } simulator { From b55c650637b1cae0e068808456f28e1705cd7ab6 Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Tue, 28 Feb 2017 14:29:02 -0800 Subject: [PATCH 072/104] ICP-375 Dimming level reporting with osram and wemo f/w bug --- .../zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy | 8 ++++++++ .../zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy | 8 ++++++++ .../zigbee-white-color-temperature-bulb.groovy | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy b/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy index 0698ddf..acea08c 100644 --- a/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy +++ b/devicetypes/smartthings/zigbee-rgb-bulb.src/zigbee-rgb-bulb.groovy @@ -153,4 +153,12 @@ def setHue(value) { def setSaturation(value) { def scaledSatValue = zigbee.convertToHexString(Math.round(value * 0xfe / 100.0), 2) zigbee.command(COLOR_CONTROL_CLUSTER, SATURATION_COMMAND, scaledSatValue, "0500") + "delay 1000" + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION) +} + +def installed() { + if (((device.getDataValue("manufacturer") == "MRVL") && (device.getDataValue("model") == "MZ100")) || (device.getDataValue("manufacturer") == "OSRAM SYLVANIA") || (device.getDataValue("manufacturer") == "OSRAM")) { + if ((device.currentState("level")?.value == null) || (device.currentState("level")?.value == 0)) { + sendEvent(name: "level", value: 100) + } + } } \ No newline at end of file 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 2c18873..a3094dd 100644 --- a/devicetypes/smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy +++ b/devicetypes/smartthings/zigbee-rgbw-bulb.src/zigbee-rgbw-bulb.groovy @@ -194,3 +194,11 @@ def setSaturation(value) { def scaledSatValue = zigbee.convertToHexString(Math.round(value * 0xfe / 100.0), 2) zigbee.command(COLOR_CONTROL_CLUSTER, SATURATION_COMMAND, scaledSatValue, "0500") + "delay 1000" + zigbee.readAttribute(COLOR_CONTROL_CLUSTER, ATTRIBUTE_SATURATION) } + +def installed() { + if (((device.getDataValue("manufacturer") == "MRVL") && (device.getDataValue("model") == "MZ100")) || (device.getDataValue("manufacturer") == "OSRAM SYLVANIA") || (device.getDataValue("manufacturer") == "OSRAM")) { + if ((device.currentState("level")?.value == null) || (device.currentState("level")?.value == 0)) { + sendEvent(name: "level", value: 100) + } + } +} \ No newline at end of file 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 c2ea818..5e7a2bc 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 @@ -157,3 +157,11 @@ def setGenericName(value){ sendEvent(name: "colorName", value: genericName) } } + +def installed() { + if (((device.getDataValue("manufacturer") == "MRVL") && (device.getDataValue("model") == "MZ100")) || (device.getDataValue("manufacturer") == "OSRAM SYLVANIA") || (device.getDataValue("manufacturer") == "OSRAM")) { + if ((device.currentState("level")?.value == null) || (device.currentState("level")?.value == 0)) { + sendEvent(name: "level", value: 100) + } + } +} From f45ab690455b113c09fbd352166b7690376ec451 Mon Sep 17 00:00:00 2001 From: Tom Manley Date: Wed, 1 Mar 2017 00:32:52 -0600 Subject: [PATCH 073/104] smartsense-motion-sensor: fix motion event reporting for some devices The motion event reporting for any device that used the Occupancy Sensor cluster for reporting motion was broken. I'm not sure if any devices using this DTH actually use this cluster. I think all the officially supported devices report motion throug the IAS Zone cluster. https://smartthings.atlassian.net/browse/DVCSMP-2484 --- .../smartsense-motion-sensor.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy index a93e927..362d1b8 100644 --- a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy +++ b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy @@ -107,8 +107,8 @@ def parse(String description) { } } else if (descMap.clusterInt == 0x0406 && descMap.attrInt == 0x0000) { def value = descMap.value.endsWith("01") ? "active" : "inactive" - log.warn "Doing a read attr motion event" - resultMap = getMotionResult(value) + log.debug "Doing a read attr motion event" + map = getMotionResult(value) } } } From 1ed57aab454ea34177e0539de295db0ece7a142e Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Wed, 1 Mar 2017 11:01:00 -0800 Subject: [PATCH 074/104] Revert "MSA-1408: initial submission for Curb" --- .../curb-control.src/curb-control.groovy | 103 ------------------ 1 file changed, 103 deletions(-) delete mode 100644 smartapps/curb-v2/curb-control.src/curb-control.groovy diff --git a/smartapps/curb-v2/curb-control.src/curb-control.groovy b/smartapps/curb-v2/curb-control.src/curb-control.groovy deleted file mode 100644 index f098bc9..0000000 --- a/smartapps/curb-v2/curb-control.src/curb-control.groovy +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Curb Control - * - * Copyright 2016 Savanni D'Gerinel - * - */ -definition( - name: "Curb Control", - namespace: "curb-v2", - author: "Savanni D'Gerinel", - description: "Control point for Curb/SmartThings integration", - category: "Green Living", - iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png", - iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png", - iconX3Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png", - oauth: true) - - -preferences { - section("Allow Endpoint to Control These Things...") { - input "switches", "capability.switch", title: "Which Switches?", multiple: true, required: false - } -} - -mappings { - - path("/switches") { - action: [ - GET: "listSwitches" - ] - } - path("/switches/:id") { - action: [ - GET: "showSwitch" - ] - } - path("/switches/:id/:command") { - action: [ - PUT: "updateSwitch" - ] - } -} - -def installed() {} - -def updated() {} - - -//switches -def listSwitches() { - switches.collect{device(it,"switch")} -} - -def showSwitch() { - show(switches, "switch") -} -void updateSwitch() { - update(switches) -} - - -def deviceHandler(evt) {} - -private void update(devices) { - log.debug "update, request: params: ${params}, devices: $devices.id" - - - //def command = request.JSON?.command - def command = params.command - //let's create a toggle option here - if (command) - { - def device = devices.find { it.id == params.id } - if (!device) { - httpError(404, "Device not found") - } else { - if(command == "toggle") - { - if(device.currentValue('switch') == "on") - device.off(); - else - device.on();; - } - } - } -} - -private show(devices, type) { - def device = devices.find { it.id == params.id } - if (!device) { - httpError(404, "Device not found") - } - else { - def attributeName = type == "motionSensor" ? "motion" : type - def s = device.currentState(attributeName) - [id: device.id, label: device.displayName, value: s?.value, unitTime: s?.date?.time, type: type] - } -} - - -private device(it, type) { - it ? [id: it.id, label: it.label, type: type] : null -} From 2f20a339c3cfcc44fa62328fe58c537b1b74edf1 Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Thu, 2 Mar 2017 12:16:03 -0700 Subject: [PATCH 075/104] DVCSMP-2487 OpenT2T: Update to 3/2 submission --- .../opent2t-smartapp-test.groovy | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy b/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy index 9951cfa..da82ae2 100644 --- a/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy +++ b/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy @@ -322,19 +322,27 @@ private getLocationModeInfo() { //Map each device to a type given it's capabilities private getDeviceType(device) { def deviceType - def caps = device.capabilities - log.debug "capabilities: [${device}, ${caps}]" + def capabilities = device.capabilities + log.debug "capabilities: [${device}, ${capabilities}]" log.debug "supported commands: [${device}, ${device.supportedCommands}]" - caps.each { - switch (it.name.toLowerCase()) { + + //Loop through the device capability list to determine the device type. + capabilities.each { capability -> + switch (capability.name.toLowerCase()) { case "switch": deviceType = "switch" - if (caps.any { it.name.toLowerCase() == "power meter" }) { - return deviceType - } - if (caps.any { it.name.toLowerCase() == "switch level" }) { - deviceType = "light" - return deviceType + + //If the device also contains "Switch Level" capability, identify it as a "light" device. + if (capabilities.any { it.name.toLowerCase() == "switch level" }) { + + //If the device also contains "Power Meter" capability, identify it as a "dimmerSwitch" device. + if (capabilities.any { it.name.toLowerCase() == "power meter" }) { + deviceType = "dimmerSwitch" + return deviceType + } else { + deviceType = "light" + return deviceType + } } break case "contact sensor": @@ -384,7 +392,7 @@ private deviceAttributeList(device) { } } -//Map device command and value. +//Map device command and value. //input command and value are from UWP, //returns resultCommand and resultValue that corresponds with function and value in SmartApps private mapDeviceCommands(command, value) { @@ -414,7 +422,7 @@ private mapDeviceCommands(command, value) { resultCommand = "setSaturation" resultValue = value break - case "ct": + case "colorTemperature": resultCommand = "setColorTemperature" resultValue = value break From 94a87e5c7f63e1ba95b94dea7cba4b433d6fbbf6 Mon Sep 17 00:00:00 2001 From: Jack Chi Date: Thu, 2 Mar 2017 17:53:17 -0800 Subject: [PATCH 076/104] [CHF-532] [CHF-533] Health Check Z-Wave Sleepy Fibaro Sensors (#1741) --- .../fibaro-flood-sensor-zw5.groovy | 5 ++++- .../fibaro-motion-sensor-zw5.groovy | 5 ++++- .../fibaro-flood-sensor.src/fibaro-flood-sensor.groovy | 4 ++++ .../fibaro-motion-sensor.src/fibaro-motion-sensor.groovy | 4 ++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy b/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy index bf691d8..4d7f872 100644 --- a/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy +++ b/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy @@ -21,6 +21,7 @@ metadata { capability "Tamper Alert" capability "Temperature Measurement" capability "Water Sensor" + capability "Health Check" fingerprint deviceId: "0x0701", inClusters: "0x5E, 0x22, 0x85, 0x59, 0x20, 0x80, 0x70, 0x56, 0x5A, 0x7A, 0x72, 0x8E, 0x71, 0x73, 0x98, 0x9C, 0x31, 0x86", outClusters: "" } @@ -228,7 +229,9 @@ def zwaveEvent(physicalgraph.zwave.commands.deviceresetlocallyv1.DeviceResetLoca def configure() { log.debug "Executing 'configure'" - + // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) + def cmds = [] cmds += zwave.wakeUpV2.wakeUpIntervalSet(seconds:21600, nodeid: zwaveHubNodeId)//FGFS' default wake up interval diff --git a/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy b/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy index b3be160..ca47295 100644 --- a/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy +++ b/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy @@ -22,6 +22,7 @@ metadata { capability "Sensor" capability "Tamper Alert" capability "Temperature Measurement" + capability "Health Check" fingerprint deviceId: "0x0701", inClusters: "0x5E, 0x20, 0x86, 0x72, 0x5A, 0x59, 0x85, 0x73, 0x84, 0x80, 0x71, 0x56, 0x70, 0x31, 0x8E, 0x22, 0x30, 0x9C, 0x98, 0x7A", outClusters: "" } @@ -240,7 +241,9 @@ def zwaveEvent(physicalgraph.zwave.commands.deviceresetlocallyv1.DeviceResetLoca def configure() { log.debug "Executing 'configure'" - + // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) + def cmds = [] cmds += zwave.wakeUpV2.wakeUpIntervalSet(seconds: 7200, nodeid: zwaveHubNodeId)//FGMS' default wake up interval diff --git a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy index 7759d85..ed01e44 100644 --- a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy +++ b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy @@ -39,6 +39,7 @@ metadata { capability "Temperature Measurement" capability "Configuration" capability "Battery" + capability "Health Check" command "resetParams2StDefaults" command "listCurrentParams" @@ -304,6 +305,9 @@ def lateConfigure(setConf = False) { */ def configure() { log.debug "Configuring Device..." + // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) + def cmds = [] // send associate to group 2 to get alarm data diff --git a/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy b/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy index 96258c3..891907a 100644 --- a/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy +++ b/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy @@ -46,6 +46,7 @@ capability "Illuminance Measurement" capability "Sensor" capability "Battery" + capability "Health Check" command "resetParams2StDefaults" command "listCurrentParams" @@ -125,6 +126,9 @@ */ def configure() { log.debug "Configuring Device For SmartThings Use" + // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) + def cmds = [] // send associate to group 3 to get sensor data reported only to hub From 79e2789f68790948527d15b79b1f5ebfb3878883 Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Fri, 3 Mar 2017 16:32:32 -0800 Subject: [PATCH 077/104] TECHOPS-1788 update deploy script --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2667f45..8f7b27b 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ apply plugin: 'smartthings-slack' buildscript { dependencies { - classpath "com.smartthings.deployment:executable-deployment-scripts:1.0.8" + classpath "com.smartthings.deployment:executable-deployment-scripts:1.0.11" } repositories { mavenLocal() From 4fc046f57f1d1d84732609c017b2ba10e5990a77 Mon Sep 17 00:00:00 2001 From: Jack Chi Date: Thu, 2 Mar 2017 17:53:17 -0800 Subject: [PATCH 078/104] [CHF-532] [CHF-533] Health Check Z-Wave Sleepy Fibaro Sensors (#1741) --- .../fibaro-flood-sensor-zw5.groovy | 5 ++++- .../fibaro-motion-sensor-zw5.groovy | 5 ++++- .../fibaro-flood-sensor.src/fibaro-flood-sensor.groovy | 4 ++++ .../fibaro-motion-sensor.src/fibaro-motion-sensor.groovy | 4 ++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy b/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy index 4ab0479..f1874d5 100644 --- a/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy +++ b/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy @@ -21,6 +21,7 @@ metadata { capability "Tamper Alert" capability "Temperature Measurement" capability "Water Sensor" + capability "Health Check" fingerprint deviceId: "0x0701", inClusters: "0x5E, 0x22, 0x85, 0x59, 0x20, 0x80, 0x70, 0x56, 0x5A, 0x7A, 0x72, 0x8E, 0x71, 0x73, 0x98, 0x9C, 0x31, 0x86", outClusters: "" } @@ -228,7 +229,9 @@ def zwaveEvent(physicalgraph.zwave.commands.deviceresetlocallyv1.DeviceResetLoca def configure() { log.debug "Executing 'configure'" - + // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) + def cmds = [] cmds += zwave.wakeUpV2.wakeUpIntervalSet(seconds:21600, nodeid: zwaveHubNodeId)//FGFS' default wake up interval diff --git a/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy b/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy index ae882ed..f554274 100644 --- a/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy +++ b/devicetypes/fibargroup/fibaro-motion-sensor-zw5.src/fibaro-motion-sensor-zw5.groovy @@ -22,6 +22,7 @@ metadata { capability "Sensor" capability "Tamper Alert" capability "Temperature Measurement" + capability "Health Check" fingerprint deviceId: "0x0701", inClusters: "0x5E, 0x20, 0x86, 0x72, 0x5A, 0x59, 0x85, 0x73, 0x84, 0x80, 0x71, 0x56, 0x70, 0x31, 0x8E, 0x22, 0x30, 0x9C, 0x98, 0x7A", outClusters: "" } @@ -240,7 +241,9 @@ def zwaveEvent(physicalgraph.zwave.commands.deviceresetlocallyv1.DeviceResetLoca def configure() { log.debug "Executing 'configure'" - + // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) + def cmds = [] cmds += zwave.wakeUpV2.wakeUpIntervalSet(seconds: 7200, nodeid: zwaveHubNodeId)//FGMS' default wake up interval diff --git a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy index 7759d85..ed01e44 100644 --- a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy +++ b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy @@ -39,6 +39,7 @@ metadata { capability "Temperature Measurement" capability "Configuration" capability "Battery" + capability "Health Check" command "resetParams2StDefaults" command "listCurrentParams" @@ -304,6 +305,9 @@ def lateConfigure(setConf = False) { */ def configure() { log.debug "Configuring Device..." + // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) + def cmds = [] // send associate to group 2 to get alarm data diff --git a/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy b/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy index 96258c3..891907a 100644 --- a/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy +++ b/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy @@ -46,6 +46,7 @@ capability "Illuminance Measurement" capability "Sensor" capability "Battery" + capability "Health Check" command "resetParams2StDefaults" command "listCurrentParams" @@ -125,6 +126,9 @@ */ def configure() { log.debug "Configuring Device For SmartThings Use" + // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) + def cmds = [] // send associate to group 3 to get sensor data reported only to hub From 065715f2967b42e9aec622b8cd76a391b02e8b40 Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Mon, 6 Mar 2017 21:43:42 -0700 Subject: [PATCH 079/104] DVCSMP-2497 OpenT2T: Update to 3/5 submission --- .../opent2t-smartapp-test.groovy | 127 +++++++++--------- 1 file changed, 66 insertions(+), 61 deletions(-) diff --git a/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy b/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy index da82ae2..91ddaef 100644 --- a/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy +++ b/smartapps/opent2t/opent2t-smartapp-test.src/opent2t-smartapp-test.groovy @@ -39,7 +39,7 @@ definition( * garageDoors | door | open, close | unknown, closed, open, closing, opening * cameras | image | take | * thermostats | thermostat | setHeatingSetpoint, | temperature, heatingSetpoint, coolingSetpoint, - * | | setCoolingSetpoint, | thermostatSetpoint, thermostatMode, + * | | setCoolingSetpoint, | thermostatSetpoint, thermostatMode, * | | off, heat, cool, auto,| thermostatFanMode, thermostatOperatingState * | | emergencyHeat, | * | | setThermostatMode, | @@ -55,7 +55,7 @@ preferences { input "contactSensors", "capability.contactSensor", title: "Which Contact Sensors", multiple: true, required: false input "garageDoors", "capability.garageDoorControl", title: "Which Garage Doors?", multiple: true, required: false input "locks", "capability.lock", title: "Which Locks?", multiple: true, required: false - input "cameras", "capability.videoCapture", title: "Which Cameras?", multiple: true, required: false + input "cameras", "capability.videoCapture", title: "Which Cameras?", multiple: true, required: false input "motionSensors", "capability.motionSensor", title: "Which Motion Sensors?", multiple: true, required: false input "presenceSensors", "capability.presenceSensor", title: "Which Presence Sensors", multiple: true, required: false input "switches", "capability.switch", title: "Which Switches and Lights?", multiple: true, required: false @@ -66,54 +66,48 @@ preferences { def getInputs() { def inputList = [] - inputList += contactSensors ?: [] - inputList += garageDoors ?: [] - inputList += locks ?: [] - inputList += cameras ?: [] - inputList += motionSensors ?: [] - inputList += presenceSensors ?: [] - inputList += switches ?: [] - inputList += thermostats ?: [] - inputList += waterSensors ?: [] + inputList += contactSensors?: [] + inputList += garageDoors?: [] + inputList += locks?: [] + inputList += cameras?: [] + inputList += motionSensors?: [] + inputList += presenceSensors?: [] + inputList += switches?: [] + inputList += thermostats?: [] + inputList += waterSensors?: [] return inputList } //API external Endpoints mappings { path("/subscriptionURL/:url") { - action: - [ + action: [ PUT: "updateEndpointURL" ] } path("/connectionId/:connId") { - action: - [ + action: [ PUT: "updateConnectionId" ] } path("/devices") { - action: - [ + action: [ GET: "getDevices" ] } path("/devices/:id") { - action: - [ + action: [ GET: "getDevice" ] } path("/update/:id") { - action: - [ + action: [ PUT: "updateDevice" ] } path("/subscription/:id") { - action: - [ - POST : "registerDeviceChange", + action: [ + POST: "registerDeviceChange", DELETE: "unregisterDeviceChange" ] } @@ -145,7 +139,7 @@ def registerSubscriptions() { def registerChangeHandler(myList) { myList.each { myDevice -> def theAtts = myDevice.supportedAttributes - theAtts.each { att -> + theAtts.each {att -> subscribe(myDevice, att.name, eventHandler) log.info "Registering ${myDevice.displayName}.${att.name}" } @@ -157,7 +151,7 @@ def registerDeviceChange() { def myDevice = findDevice(params.id) def theAtts = myDevice.supportedAttributes try { - theAtts.each { att -> + theAtts.each {att -> subscribe(myDevice, att.name, eventHandler) log.info "Registering ${myDevice.displayName}.${att.name}" } @@ -186,16 +180,20 @@ def eventHandler(evt) { def evt_name = evt.name def evt_device = evt.device def evt_deviceType = getDeviceType(evt_device); + def deviceInfo + + if(evt_deviceType == "thermostat") + { + deviceInfo = [name: evt_device.displayName, id: evt_device.id, status:evt_device.getStatus(), deviceType:evt_deviceType, manufacturer:evt_device.getManufacturerName(), model:evt_device.getModelName(), attributes: deviceAttributeList(evt_device), locationMode: getLocationModeInfo()] + } + else + { + deviceInfo = [name: evt_device.displayName, id: evt_device.id, status:evt_device.getStatus(), deviceType:evt_deviceType, manufacturer:evt_device.getManufacturerName(), model:evt_device.getModelName(), attributes: deviceAttributeList(evt_device)] + } + def params = [ - uri : "${state.endpointURL}/${state.connectionId}", - body: [ - name : evt_device.displayName, - id : evt_device.id, - deviceType : evt_deviceType, - manufacturer: evt_device.getManufacturerName(), - model : evt_device.getModelName(), - attributes : deviceAttributeList(evt_device) - ] + uri: "${state.endpointURL}/${state.connectionId}", + body: [ deviceInfo ] ] try { log.trace "POST URI: ${params.uri}" @@ -230,10 +228,13 @@ def getDevices() { def deviceData = [] inputs?.each { def deviceType = getDeviceType(it) - if (deviceType == "thermostat") { - deviceData << [name: it.displayName, id: it.id, deviceType: deviceType, manufacturer: it.getManufacturerName(), model: it.getModelName(), attributes: deviceAttributeList(it), locationMode: getLocationModeInfo()] - } else { - deviceData << [name: it.displayName, id: it.id, deviceType: deviceType, manufacturer: it.getManufacturerName(), model: it.getModelName(), attributes: deviceAttributeList(it)] + if(deviceType == "thermostat") + { + deviceData << [name: it.displayName, id: it.id, status:it.getStatus(), deviceType:deviceType, manufacturer:it.getManufacturerName(), model:it.getModelName(), attributes: deviceAttributeList(it), locationMode: getLocationModeInfo()] + } + else + { + deviceData << [name: it.displayName, id: it.id, status:it.getStatus(), deviceType:deviceType, manufacturer:it.getManufacturerName(), model:it.getModelName(), attributes: deviceAttributeList(it)] } } @@ -246,10 +247,13 @@ def getDevice() { def it = findDevice(params.id) def deviceType = getDeviceType(it) def device - if (deviceType == "thermostat") { - device = [name: it.displayName, id: it.id, deviceType: deviceType, manufacturer: it.getManufacturerName(), model: it.getModelName(), attributes: deviceAttributeList(it), locationMode: getLocationModeInfo()] - } else { - device = [name: it.displayName, id: it.id, deviceType: deviceType, manufacturer: it.getManufacturerName(), model: it.getModelName(), attributes: deviceAttributeList(it)] + if(deviceType == "thermostat") + { + device = [name: it.displayName, id: it.id, status:it.getStatus(), deviceType:deviceType, manufacturer:it.getManufacturerName(), model:it.getModelName(), attributes: deviceAttributeList(it), locationMode: getLocationModeInfo()] + } + else + { + device = [name: it.displayName, id: it.id, status:it.getStatus(), deviceType:deviceType, manufacturer:it.getManufacturerName(), model:it.getModelName(), attributes: deviceAttributeList(it)] } log.debug "getDevice, return: ${device}" return device @@ -261,18 +265,18 @@ void updateDevice() { request.JSON.each { def command = it.key def value = it.value - if (command) { + if (command){ def commandList = mapDeviceCommands(command, value) command = commandList[0] value = commandList[1] if (command == "setAwayMode") { log.info "Setting away mode to ${value}" - if (location.modes?.find { it.name == value }) { + if (location.modes?.find {it.name == value}) { location.setMode(value) } - } else if (command == "thermostatSetpoint") { - switch (device.currentThermostatMode) { + }else if (command == "thermostatSetpoint"){ + switch(device.currentThermostatMode){ case "cool": log.info "Update: ${device.displayName}, [${command}, ${value}]" device.setCoolingSetpoint(value) @@ -286,7 +290,7 @@ void updateDevice() { httpError(501, "this mode: ${device.currentThermostatMode} does not allow changing thermostat setpoint.") break } - } else if (!device) { + }else if (!device) { log.error "updateDevice, Device not found" httpError(404, "Device not found") } else if (!device.hasCommand(command)) { @@ -296,11 +300,11 @@ void updateDevice() { if (command == "setColor") { log.info "Update: ${device.displayName}, [${command}, ${value}]" device."$command"(hex: value) - } else if (value.isNumber()) { + } else if(value.isNumber()) { def intValue = value as Integer log.info "Update: ${device.displayName}, [${command}, ${intValue}(int)]" device."$command"(intValue) - } else if (value) { + } else if (value){ log.info "Update: ${device.displayName}, [${command}, ${value}]" device."$command"(value) } else { @@ -327,16 +331,17 @@ private getDeviceType(device) { log.debug "supported commands: [${device}, ${device.supportedCommands}]" //Loop through the device capability list to determine the device type. - capabilities.each { capability -> - switch (capability.name.toLowerCase()) { + capabilities.each {capability -> + switch(capability.name.toLowerCase()) + { case "switch": deviceType = "switch" //If the device also contains "Switch Level" capability, identify it as a "light" device. - if (capabilities.any { it.name.toLowerCase() == "switch level" }) { + if (capabilities.any{it.name.toLowerCase() == "switch level"}){ //If the device also contains "Power Meter" capability, identify it as a "dimmerSwitch" device. - if (capabilities.any { it.name.toLowerCase() == "power meter" }) { + if (capabilities.any{it.name.toLowerCase() == "power meter"}){ deviceType = "dimmerSwitch" return deviceType } else { @@ -383,11 +388,11 @@ private findDevice(deviceId) { //Return a list of device attributes private deviceAttributeList(device) { - device.supportedAttributes.collectEntries { attribute -> + device.supportedAttributes.collectEntries { attribute-> try { - [(attribute.name): device.currentValue(attribute.name)] - } catch (e) { - [(attribute.name): null] + [ (attribute.name): device.currentValue(attribute.name) ] + } catch(e) { + [ (attribute.name): null ] } } } @@ -459,7 +464,8 @@ private mapDeviceCommands(command, value) { if (value == 1 || value == "1" || value == "lock") { resultCommand = "lock" resultValue = "" - } else if (value == 0 || value == "0" || value == "unlock") { + } + else if (value == 0 || value == "0" || value == "unlock") { resultCommand = "unlock" resultValue = "" } @@ -468,6 +474,5 @@ private mapDeviceCommands(command, value) { break } - return [resultCommand, resultValue] + return [resultCommand,resultValue] } - From ef1ebc83475d15799c26366042dde66350032f78 Mon Sep 17 00:00:00 2001 From: Duncan McKee Date: Tue, 7 Mar 2017 18:13:52 -0500 Subject: [PATCH 080/104] Update Fibaro Flood Sensor configuration ICP-399 ICP-398 --- .../fibaro-flood-sensor-zw5.groovy | 266 +++++++-------- .../fibaro-flood-sensor.groovy | 304 +++++++++--------- 2 files changed, 291 insertions(+), 279 deletions(-) diff --git a/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy b/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy index 4d7f872..c9c5a30 100644 --- a/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy +++ b/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy @@ -22,28 +22,29 @@ metadata { capability "Temperature Measurement" capability "Water Sensor" capability "Health Check" - - fingerprint deviceId: "0x0701", inClusters: "0x5E, 0x22, 0x85, 0x59, 0x20, 0x80, 0x70, 0x56, 0x5A, 0x7A, 0x72, 0x8E, 0x71, 0x73, 0x98, 0x9C, 0x31, 0x86", outClusters: "" + + fingerprint deviceId: "0x0701", inClusters: "0x5E, 0x22, 0x85, 0x59, 0x20, 0x80, 0x70, 0x56, 0x5A, 0x7A, 0x72, 0x8E, 0x71, 0x73, 0x98, 0x9C, 0x31, 0x86", outClusters: "" + fingerprint mfr:"010F", prod:"0B01", model:"2002" + fingerprint mfr:"010F", prod:"0B01", model:"1002" } simulator { - } - - tiles(scale: 2) { - multiAttributeTile(name:"FGFS", type:"lighting", width:6, height:4) {//with generic type secondary control text is not displayed in Android app - tileAttribute("device.water", key:"PRIMARY_CONTROL") { - attributeState("dry", icon:"st.alarm.water.dry", backgroundColor:"#00a0dc") - attributeState("wet", icon:"st.alarm.water.wet", backgroundColor:"#e86d13") - } - - tileAttribute("device.tamper", key:"SECONDARY_CONTROL") { + + tiles(scale: 2) { + multiAttributeTile(name:"FGFS", type:"lighting", width:6, height:4) {//with generic type secondary control text is not displayed in Android app + tileAttribute("device.water", key:"PRIMARY_CONTROL") { + attributeState("dry", icon:"st.alarm.water.dry", backgroundColor:"#00a0dc") + attributeState("wet", icon:"st.alarm.water.wet", backgroundColor:"#e86d13") + } + + tileAttribute("device.tamper", key:"SECONDARY_CONTROL") { attributeState("active", label:'tamper active', backgroundColor:"#00a0dc") attributeState("inactive", label:'tamper inactive', backgroundColor:"#cccccc") - } - } - - valueTile("temperature", "device.temperature", inactiveLabel: false, width: 2, height: 2) { + } + } + + valueTile("temperature", "device.temperature", inactiveLabel: false, width: 2, height: 2) { state "temperature", label:'${currentValue}°', backgroundColors:[ [value: 31, color: "#153591"], @@ -55,22 +56,22 @@ metadata { [value: 96, color: "#bc2323"] ] } - - valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { - state "battery", label:'${currentValue}% battery', unit:"" - } - - main "FGFS" - details(["FGFS","battery", "temperature"]) - } + + valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { + state "battery", label:'${currentValue}% battery', unit:"" + } + + main "FGFS" + details(["FGFS","battery", "temperature"]) + } } // parse events into attributes def parse(String description) { log.debug "Parsing '${description}'" def result = [] - - if (description.startsWith("Err 106")) { + + if (description.startsWith("Err 106")) { if (state.sec) { result = createEvent(descriptionText:description, displayed:false) } else { @@ -85,13 +86,13 @@ def parse(String description) { } else if (description == "updated") { return null } else { - def cmd = zwave.parse(description, [0x31: 5, 0x56: 1, 0x71: 3, 0x72:2, 0x80: 1, 0x84: 2, 0x85: 2, 0x86: 1, 0x98: 1]) + def cmd = zwave.parse(description, [0x31: 5, 0x56: 1, 0x71: 3, 0x72:2, 0x80: 1, 0x84: 2, 0x85: 2, 0x86: 1, 0x98: 1]) - if (cmd) { - log.debug "Parsed '${cmd}'" - zwaveEvent(cmd) - } - } + if (cmd) { + log.debug "Parsed '${cmd}'" + zwaveEvent(cmd) + } + } } //security @@ -108,7 +109,7 @@ def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulat //crc16 def zwaveEvent(physicalgraph.zwave.commands.crc16encapv1.Crc16Encap cmd) { - def versions = [0x31: 5, 0x72: 2, 0x80: 1] + def versions = [0x31: 5, 0x72: 2, 0x80: 1] def version = versions[cmd.commandClass as Integer] def ccObj = version ? zwave.commandClass(cmd.commandClass, version) : zwave.commandClass(cmd.commandClass) def encapsulatedCommand = ccObj?.command(cmd.command)?.parse(cmd.data) @@ -122,105 +123,124 @@ def zwaveEvent(physicalgraph.zwave.commands.crc16encapv1.Crc16Encap cmd) def zwaveEvent(physicalgraph.zwave.commands.wakeupv2.WakeUpNotification cmd) { def event = createEvent(descriptionText: "${device.displayName} woke up", displayed: false) - def cmds = [] - cmds << encap(zwave.batteryV1.batteryGet()) - cmds << "delay 500" - cmds << encap(zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 1, scale: 0)) - cmds << "delay 1200" - cmds << encap(zwave.wakeUpV1.wakeUpNoMoreInformation()) - [event, response(cmds)] + def cmds = [] + // cmds << encap(zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 1, scale: 0)) + // cmds << "delay 500" + cmds << encap(zwave.batteryV1.batteryGet()) + [event, response(cmds)] } def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) { log.debug "manufacturerId: ${cmd.manufacturerId}" - log.debug "manufacturerName: ${cmd.manufacturerName}" - log.debug "productId: ${cmd.productId}" - log.debug "productTypeId: ${cmd.productTypeId}" + log.debug "manufacturerName: ${cmd.manufacturerName}" + log.debug "productId: ${cmd.productId}" + log.debug "productTypeId: ${cmd.productTypeId}" } def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.DeviceSpecificReport cmd) { log.debug "deviceIdData: ${cmd.deviceIdData}" - log.debug "deviceIdDataFormat: ${cmd.deviceIdDataFormat}" - log.debug "deviceIdDataLengthIndicator: ${cmd.deviceIdDataLengthIndicator}" - log.debug "deviceIdType: ${cmd.deviceIdType}" - - if (cmd.deviceIdType == 1 && cmd.deviceIdDataFormat == 1) {//serial number in binary format + log.debug "deviceIdDataFormat: ${cmd.deviceIdDataFormat}" + log.debug "deviceIdDataLengthIndicator: ${cmd.deviceIdDataLengthIndicator}" + log.debug "deviceIdType: ${cmd.deviceIdType}" + + if (cmd.deviceIdType == 1 && cmd.deviceIdDataFormat == 1) { //serial number in binary format String serialNumber = "h'" - - cmd.deviceIdData.each{ data -> - serialNumber += "${String.format("%02X", data)}" - } - - updateDataValue("serialNumber", serialNumber) - log.debug "${device.displayName} - serial number: ${serialNumber}" - } + + cmd.deviceIdData.each{ data -> + serialNumber += "${String.format("%02X", data)}" + } + + updateDataValue("serialNumber", serialNumber) + log.debug "${device.displayName} - serial number: ${serialNumber}" + } + + def response_cmds = [] + if (!device.currentState("temperature")) { + response_cmds << encap(zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 1, scale: 0)) + } + if (!getDataValue("version") && !zwaveInfo.ver) { + log.debug "Requesting Version Report" + response_cmds << "delay 500" + response_cmds << encap(zwave.versionV1.versionGet()) + } + response_cmds << "delay 1000" + response_cmds << encap(zwave.wakeUpV2.wakeUpNoMoreInformation()) + [[:], response(response_cmds)] } -def zwaveEvent(physicalgraph.zwave.commands.versionv1.VersionReport cmd) { - updateDataValue("version", "${cmd.applicationVersion}.${cmd.applicationSubVersion}") - log.debug "applicationVersion: ${cmd.applicationVersion}" - log.debug "applicationSubVersion: ${cmd.applicationSubVersion}" - log.debug "zWaveLibraryType: ${cmd.zWaveLibraryType}" - log.debug "zWaveProtocolVersion: ${cmd.zWaveProtocolVersion}" - log.debug "zWaveProtocolSubVersion: ${cmd.zWaveProtocolSubVersion}" +def zwaveEvent(physicalgraph.zwave.commands.versionv1.VersionReport cmd) { + updateDataValue("version", "${cmd.applicationVersion}.${cmd.applicationSubVersion}") + log.debug "applicationVersion: ${cmd.applicationVersion}" + log.debug "applicationSubVersion: ${cmd.applicationSubVersion}" + log.debug "zWaveLibraryType: ${cmd.zWaveLibraryType}" + log.debug "zWaveProtocolVersion: ${cmd.zWaveProtocolVersion}" + log.debug "zWaveProtocolSubVersion: ${cmd.zWaveProtocolSubVersion}" } def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd) { + def result = [] def map = [:] map.name = "battery" map.value = cmd.batteryLevel == 255 ? 1 : cmd.batteryLevel.toString() map.unit = "%" - map.displayed = true - createEvent(map) + + result << createEvent(map) + + if (!getDataValue("serialNumber")) { + result << response(encap(zwave.manufacturerSpecificV2.deviceSpecificGet())) + } else { + result << response(encap(zwave.wakeUpV2.wakeUpNoMoreInformation())) + } + result } def zwaveEvent(physicalgraph.zwave.commands.notificationv3.NotificationReport cmd) { def map = [:] - if (cmd.notificationType == 5) { - switch (cmd.event) { - case 2: - map.name = "water" - map.value = "wet" - map.descriptionText = "${device.displayName} is ${map.value}" - break - - case 0: - map.name = "water" - map.value = "dry" - map.descriptionText = "${device.displayName} is ${map.value}" - break - } - } else if (cmd.notificationType == 7) { - switch (cmd.event) { - case 0: - map.name = "tamper" - map.value = "inactive" - map.descriptionText = "${device.displayName}: tamper alarm has been deactivated" + if (cmd.notificationType == 5) { + switch (cmd.event) { + case 2: + map.name = "water" + map.value = "wet" + map.descriptionText = "${device.displayName} is ${map.value}" break - - case 3: - map.name = "tamper" - map.value = "active" - map.descriptionText = "${device.displayName}: tamper alarm activated" - break - } - } - - createEvent(map) + + case 0: + map.name = "water" + map.value = "dry" + map.descriptionText = "${device.displayName} is ${map.value}" + break + } + } else if (cmd.notificationType == 7) { + switch (cmd.event) { + case 0: + map.name = "tamper" + map.value = "inactive" + map.descriptionText = "${device.displayName}: tamper alarm has been deactivated" + break + + case 3: + map.name = "tamper" + map.value = "active" + map.descriptionText = "${device.displayName}: tamper alarm activated" + break + } + } + + createEvent(map) } def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv5.SensorMultilevelReport cmd) { def map = [:] if (cmd.sensorType == 1) { - // temperature - def cmdScale = cmd.scale == 1 ? "F" : "C" - map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision) - map.unit = getTemperatureScale() - map.name = "temperature" - map.displayed = true + // temperature + def cmdScale = cmd.scale == 1 ? "F" : "C" + map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision) + map.unit = getTemperatureScale() + map.name = "temperature" + map.displayed = true } - - createEvent(map) + + createEvent(map) } def zwaveEvent(physicalgraph.zwave.commands.deviceresetlocallyv1.DeviceResetLocallyNotification cmd) { @@ -229,21 +249,18 @@ def zwaveEvent(physicalgraph.zwave.commands.deviceresetlocallyv1.DeviceResetLoca def configure() { log.debug "Executing 'configure'" - // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + // Device wakes up every 4 hours, this interval of 8h 2m allows us to miss one wakeup notification before marking offline sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) - def cmds = [] - - cmds += zwave.wakeUpV2.wakeUpIntervalSet(seconds:21600, nodeid: zwaveHubNodeId)//FGFS' default wake up interval - cmds += zwave.manufacturerSpecificV2.manufacturerSpecificGet() - cmds += zwave.manufacturerSpecificV2.deviceSpecificGet() - cmds += zwave.versionV1.versionGet() - cmds += zwave.batteryV1.batteryGet() - cmds += zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 1, scale: 0) - cmds += zwave.associationV2.associationSet(groupingIdentifier:1, nodeId: [zwaveHubNodeId]) - cmds += zwave.wakeUpV2.wakeUpNoMoreInformation() + // default initial state + sendEvent(name: "water", value: "dry") - encapSequence(cmds, 500) + def cmds = [] + + cmds << zwave.associationV2.associationSet(groupingIdentifier:1, nodeId: [zwaveHubNodeId]) + cmds << zwave.batteryV1.batteryGet() // other queries sent as response to BatteryReport + + encapSequence(cmds, 200) } private secure(physicalgraph.zwave.Command cmd) { @@ -252,7 +269,7 @@ private secure(physicalgraph.zwave.Command cmd) { private crc16(physicalgraph.zwave.Command cmd) { //zwave.crc16EncapV1.crc16Encap().encapsulate(cmd).format() - "5601${cmd.format()}0000" + "5601${cmd.format()}0000" } private encapSequence(commands, delay=200) { @@ -260,13 +277,10 @@ private encapSequence(commands, delay=200) { } private encap(physicalgraph.zwave.Command cmd) { - def secureClasses = [0x20, 0x5A, 0x70, 0x71, 0x84, 0x85, 0x8E, 0x9C] - - //todo: check if secure inclusion was successful - //if not do not send security-encapsulated command - if (secureClasses.find{ it == cmd.commandClassId }) { - secure(cmd) - } else { - crc16(cmd) - } -} \ No newline at end of file + if (zwaveInfo.zw && !zwaveInfo.zw.contains("s")) { + // Secure inclusion failed + crc16(cmd) + } else { + secure(cmd) + } +} diff --git a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy index ed01e44..ed19b2e 100644 --- a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy +++ b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy @@ -1,12 +1,12 @@ /** * Device Type Definition File * - * Device Type: Fibaro Flood Sensor - * File Name: fibaro-flood-sensor.groovy - * Initial Release: 2014-12-10 - * @author: Todd Wackford - * Email: todd@wackford.net - * @version: 1.0 + * Device Type: Fibaro Flood Sensor + * File Name: fibaro-flood-sensor.groovy + * Initial Release: 2014-12-10 + * @author: Todd Wackford + * Email: todd@wackford.net + * @version: 1.0 * * Copyright 2014 SmartThings * @@ -26,8 +26,8 @@ * not displayed to the user. We do this so we can receive events and display on device * activity. If the user wants to display the tamper tile, adjust the tile display lines * with the following: - * main(["water", "temperature", "tamper"]) - * details(["water", "temperature", "battery", "tamper"]) + * main(["water", "temperature", "tamper"]) + * details(["water", "temperature", "battery", "tamper"]) * * @param none * @@ -40,13 +40,16 @@ metadata { capability "Configuration" capability "Battery" capability "Health Check" - - command "resetParams2StDefaults" - command "listCurrentParams" - command "updateZwaveParam" - command "test" - + + command "resetParams2StDefaults" + command "listCurrentParams" + command "updateZwaveParam" + command "test" + fingerprint deviceId: "0xA102", inClusters: "0x30,0x9C,0x60,0x85,0x8E,0x72,0x70,0x86,0x80,0x84" + fingerprint mfr:"010F", prod:"0000", model:"2002" + fingerprint mfr:"010F", prod:"0000", model:"1002" + fingerprint mfr:"010F", prod:"0B00", model:"1001" } simulator { @@ -87,9 +90,9 @@ metadata { [value: 96, color: "#bc2323"] ] } - standardTile("tamper", "device.tamper") { - state("secure", label:"secure", icon:"st.locks.lock.locked", backgroundColor:"#ffffff") - state("tampered", label:"tampered", icon:"st.locks.lock.unlocked", backgroundColor:"#53a7c0") + standardTile("tamper", "device.tamper") { + state("secure", label:"secure", icon:"st.locks.lock.locked", backgroundColor:"#ffffff") + state("tampered", label:"tampered", icon:"st.locks.lock.unlocked", backgroundColor:"#53a7c0") } valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") { state "battery", label:'${currentValue}% battery', unit:"" @@ -107,26 +110,17 @@ metadata { def parse(String description) { def result = [] - - if (description == "updated") { - if (!state.MSR) { - result << response(zwave.wakeUpV1.wakeUpIntervalSet(seconds: 60*60, nodeid:zwaveHubNodeId)) - result << response(zwave.manufacturerSpecificV2.manufacturerSpecificGet()) - } - } else { - def cmd = zwave.parse(description, [0x31: 2, 0x30: 1, 0x70: 2, 0x71: 1, 0x84: 1, 0x80: 1, 0x9C: 1, 0x72: 2, 0x56: 2, 0x60: 3]) - - if (cmd) { - result += zwaveEvent(cmd) //createEvent(zwaveEvent(cmd)) - } - } - - result << response(zwave.batteryV1.batteryGet().format()) - - if ( result[0] != null ) { + + def cmd = zwave.parse(description, [0x31: 2, 0x30: 1, 0x70: 2, 0x71: 1, 0x84: 1, 0x80: 1, 0x9C: 1, 0x72: 2, 0x56: 2, 0x60: 3]) + + if (cmd) { + result += zwaveEvent(cmd) //createEvent(zwaveEvent(cmd)) + } + + if ( result[0] != null ) { log.debug "Parse returned ${result}" result - } + } } @@ -143,10 +137,9 @@ def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd) { def result = [createEvent(descriptionText: "${device.displayName} woke up", isStateChange: false)] if (!isConfigured()) { // we're still in the process of configuring a newly joined device - result += lateConfigure(true) + result << lateConfigure(true) } else { - result += response(zwave.wakeUpV1.wakeUpNoMoreInformation()) - log.debug "We're done with WakeUp!" + result << response(zwave.wakeUpV1.wakeUpNoMoreInformation()) } result } @@ -154,7 +147,7 @@ def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd) { def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv2.SensorMultilevelReport cmd) { def map = [:] - + switch (cmd.sensorType) { case 1: // temperature @@ -185,7 +178,7 @@ def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv1.SensorBinaryReport cm def map = [:] map.value = cmd.sensorValue ? "active" : "inactive" map.name = "acceleration" - + if (map.value == "active") { map.descriptionText = "$device.displayName detected vibration" } @@ -200,49 +193,49 @@ def zwaveEvent(physicalgraph.zwave.commands.configurationv2.ConfigurationReport } def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd) { - log.debug "BasicSet with CMD = ${cmd}" - - if (!isConfigured()) { - def result = [] - def map = [:] - - map.name = "water" + log.debug "BasicSet with CMD = ${cmd}" + + if (!isConfigured()) { + def result = [] + def map = [:] + + map.name = "water" map.value = cmd.value ? "wet" : "dry" map.descriptionText = "${device.displayName} is ${map.value}" - - // If we are getting a BasicSet, and isConfigured == false, then we are likely NOT properly configured. - result += lateConfigure(true) - - result << createEvent(map) - - result - } + + // If we are getting a BasicSet, and isConfigured == false, then we are likely NOT properly configured. + result += lateConfigure(true) + + result << createEvent(map) + + result + } } def zwaveEvent(physicalgraph.zwave.commands.sensoralarmv1.SensorAlarmReport cmd) { def map = [:] - + if (cmd.sensorType == 0x05) { map.name = "water" map.value = cmd.sensorState ? "wet" : "dry" map.descriptionText = "${device.displayName} is ${map.value}" - - log.debug "CMD = SensorAlarmReport: ${cmd}" - setConfigured() - } else if ( cmd.sensorType == 0) { - map.name = "tamper" - map.isStateChange = true - map.value = cmd.sensorState ? "tampered" : "secure" - map.descriptionText = "${device.displayName} has been tampered with" - runIn(30, "resetTamper") //device does not send alarm cancelation - - } else if ( cmd.sensorType == 1) { - map.name = "tamper" - map.value = cmd.sensorState ? "tampered" : "secure" - map.descriptionText = "${device.displayName} has been tampered with" - runIn(30, "resetTamper") //device does not send alarm cancelation - + + log.debug "CMD = SensorAlarmReport: ${cmd}" + setConfigured() + } else if ( cmd.sensorType == 0) { + map.name = "tamper" + map.isStateChange = true + map.value = cmd.sensorState ? "tampered" : "secure" + map.descriptionText = "${device.displayName} has been tampered with" + runIn(30, "resetTamper") //device does not send alarm cancelation + + } else if ( cmd.sensorType == 1) { + map.name = "tamper" + map.value = cmd.sensorState ? "tampered" : "secure" + map.descriptionText = "${device.displayName} has been tampered with" + runIn(30, "resetTamper") //device does not send alarm cancelation + } else { map.descriptionText = "${device.displayName}: ${cmd}" } @@ -251,10 +244,10 @@ def zwaveEvent(physicalgraph.zwave.commands.sensoralarmv1.SensorAlarmReport cmd) def resetTamper() { def map = [:] - map.name = "tamper" - map.value = "secure" - map.descriptionText = "$device.displayName is secure" - sendEvent(map) + map.name = "tamper" + map.value = "secure" + map.descriptionText = "$device.displayName is secure" + sendEvent(map) } def zwaveEvent(physicalgraph.zwave.Command cmd) { @@ -268,10 +261,10 @@ def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerS def msr = String.format("%04X-%04X-%04X", cmd.manufacturerId, cmd.productTypeId, cmd.productId) log.debug "msr: $msr" device.updateDataValue(["MSR", msr]) - - if ( msr == "010F-0B00-2001" ) { //this is the msr and device type for the fibaro flood sensor - result += lateConfigure(true) - } + + if ( msr == "010F-0B00-2001" ) { //this is the msr and device type for the fibaro flood sensor + result += lateConfigure(true) + } result << createEvent(descriptionText: "$device.displayName MSR: $msr", isStateChange: false) result @@ -283,17 +276,17 @@ def setConfigured() { def isConfigured() { Boolean configured = device.getDataValue(["configured"]) as Boolean - - return configured + + return configured } def lateConfigure(setConf = False) { def res = response(configure()) - - if (setConf) - setConfigured() - - return res + + if (setConf) + setConfigured() + + return res } /** @@ -305,29 +298,34 @@ def lateConfigure(setConf = False) { */ def configure() { log.debug "Configuring Device..." - // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + // Device wakes up every 4 hours, this interval allows us to miss one wakeup notification before marking offline sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) - def cmds = [] - - // send associate to group 2 to get alarm data - cmds << zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format() - - cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format() - - // send associate to group 3 to get sensor data reported only to hub - cmds << zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format() + // default initial state + sendEvent(name: "water", value: "dry") - // temp hysteresis set to .5 degrees celcius - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,50], parameterNumber: 12, size: 2).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format() + def cmds = [] + + // send associate to group 2 to get alarm data + cmds << zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format() + + cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format() + + // send associate to group 3 to get sensor data reported only to hub + cmds << zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format() // reporting frequency of temps and battery set to one hour cmds << zwave.configurationV1.configurationSet(configurationValue: [0,60*60], parameterNumber: 10, size: 2).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format() - - cmds << zwave.wakeUpV1.wakeUpNoMoreInformation().format() - + // cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format() + + // temp hysteresis set to .5 degrees celcius + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,50], parameterNumber: 12, size: 2).format() + // cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format() + + cmds << zwave.batteryV1.batteryGet().format() + + cmds << zwave.wakeUpV1.wakeUpNoMoreInformation().format() + delayBetween(cmds, 100) } @@ -353,18 +351,18 @@ def test() { * @return none */ def updateZwaveParam(params) { - if ( params ) { - def pNumber = params.paramNumber - def pSize = params.size - def pValue = [params.value] - log.debug "Make sure device is awake and in recieve mode (triple-click?)" - log.debug "Updating ${device.displayName} parameter number '${pNumber}' with value '${pValue}' with size of '${pSize}'" + if ( params ) { + def pNumber = params.paramNumber + def pSize = params.size + def pValue = [params.value] + log.debug "Make sure device is awake and in recieve mode (triple-click?)" + log.debug "Updating ${device.displayName} parameter number '${pNumber}' with value '${pValue}' with size of '${pSize}'" def cmds = [] - cmds << zwave.configurationV1.configurationSet(configurationValue: pValue, parameterNumber: pNumber, size: pSize).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: pNumber).format() - delayBetween(cmds, 1000) - } + cmds << zwave.configurationV1.configurationSet(configurationValue: pValue, parameterNumber: pNumber, size: pSize).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: pNumber).format() + delayBetween(cmds, 1000) + } } /** @@ -381,26 +379,26 @@ def updateZwaveParam(params) { def resetParams2StDefaults() { log.debug "Resetting ${device.displayName} parameters to SmartThings compatible defaults" def cmds = [] - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 1, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [3], parameterNumber: 2, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 7, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 9, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,60*60], parameterNumber: 10, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,50], parameterNumber: 12, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 13, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [5,220], parameterNumber: 50, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [13,172], parameterNumber: 51, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0,0,225], parameterNumber: 61, size: 4).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,255,0,0], parameterNumber: 62, size: 4).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [2], parameterNumber: 63, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 73, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [2], parameterNumber: 74, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 75, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 76, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 77, size: 1).format() - - delayBetween(cmds, 1200) + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 1, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [3], parameterNumber: 2, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 7, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 9, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,60*60], parameterNumber: 10, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,50], parameterNumber: 12, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 13, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [5,220], parameterNumber: 50, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [13,172], parameterNumber: 51, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0,0,225], parameterNumber: 61, size: 4).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,255,0,0], parameterNumber: 62, size: 4).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [2], parameterNumber: 63, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 73, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [2], parameterNumber: 74, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 75, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 76, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 77, size: 1).format() + + delayBetween(cmds, 1200) } /** @@ -417,25 +415,25 @@ def resetParams2StDefaults() { def listCurrentParams() { log.debug "Listing of current parameter settings of ${device.displayName}" def cmds = [] - cmds << zwave.configurationV1.configurationGet(parameterNumber: 1).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 2).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 5).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 7).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 9).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 13).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 50).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 51).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 61).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 62).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 63).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 73).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 74).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 75).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 76).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 77).format() - + cmds << zwave.configurationV1.configurationGet(parameterNumber: 1).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 2).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 5).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 7).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 9).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 13).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 50).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 51).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 61).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 62).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 63).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 73).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 74).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 75).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 76).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 77).format() + delayBetween(cmds, 1200) } From 1f69ab66342b62dcb412d5f215dd8c0bc5b85801 Mon Sep 17 00:00:00 2001 From: Duncan McKee Date: Tue, 7 Mar 2017 18:13:52 -0500 Subject: [PATCH 081/104] Update Fibaro Flood Sensor configuration ICP-399 ICP-398 --- .../fibaro-flood-sensor-zw5.groovy | 266 +++++++-------- .../fibaro-flood-sensor.groovy | 304 +++++++++--------- 2 files changed, 291 insertions(+), 279 deletions(-) diff --git a/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy b/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy index 4d7f872..c9c5a30 100644 --- a/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy +++ b/devicetypes/fibargroup/fibaro-flood-sensor-zw5.src/fibaro-flood-sensor-zw5.groovy @@ -22,28 +22,29 @@ metadata { capability "Temperature Measurement" capability "Water Sensor" capability "Health Check" - - fingerprint deviceId: "0x0701", inClusters: "0x5E, 0x22, 0x85, 0x59, 0x20, 0x80, 0x70, 0x56, 0x5A, 0x7A, 0x72, 0x8E, 0x71, 0x73, 0x98, 0x9C, 0x31, 0x86", outClusters: "" + + fingerprint deviceId: "0x0701", inClusters: "0x5E, 0x22, 0x85, 0x59, 0x20, 0x80, 0x70, 0x56, 0x5A, 0x7A, 0x72, 0x8E, 0x71, 0x73, 0x98, 0x9C, 0x31, 0x86", outClusters: "" + fingerprint mfr:"010F", prod:"0B01", model:"2002" + fingerprint mfr:"010F", prod:"0B01", model:"1002" } simulator { - } - - tiles(scale: 2) { - multiAttributeTile(name:"FGFS", type:"lighting", width:6, height:4) {//with generic type secondary control text is not displayed in Android app - tileAttribute("device.water", key:"PRIMARY_CONTROL") { - attributeState("dry", icon:"st.alarm.water.dry", backgroundColor:"#00a0dc") - attributeState("wet", icon:"st.alarm.water.wet", backgroundColor:"#e86d13") - } - - tileAttribute("device.tamper", key:"SECONDARY_CONTROL") { + + tiles(scale: 2) { + multiAttributeTile(name:"FGFS", type:"lighting", width:6, height:4) {//with generic type secondary control text is not displayed in Android app + tileAttribute("device.water", key:"PRIMARY_CONTROL") { + attributeState("dry", icon:"st.alarm.water.dry", backgroundColor:"#00a0dc") + attributeState("wet", icon:"st.alarm.water.wet", backgroundColor:"#e86d13") + } + + tileAttribute("device.tamper", key:"SECONDARY_CONTROL") { attributeState("active", label:'tamper active', backgroundColor:"#00a0dc") attributeState("inactive", label:'tamper inactive', backgroundColor:"#cccccc") - } - } - - valueTile("temperature", "device.temperature", inactiveLabel: false, width: 2, height: 2) { + } + } + + valueTile("temperature", "device.temperature", inactiveLabel: false, width: 2, height: 2) { state "temperature", label:'${currentValue}°', backgroundColors:[ [value: 31, color: "#153591"], @@ -55,22 +56,22 @@ metadata { [value: 96, color: "#bc2323"] ] } - - valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { - state "battery", label:'${currentValue}% battery', unit:"" - } - - main "FGFS" - details(["FGFS","battery", "temperature"]) - } + + valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { + state "battery", label:'${currentValue}% battery', unit:"" + } + + main "FGFS" + details(["FGFS","battery", "temperature"]) + } } // parse events into attributes def parse(String description) { log.debug "Parsing '${description}'" def result = [] - - if (description.startsWith("Err 106")) { + + if (description.startsWith("Err 106")) { if (state.sec) { result = createEvent(descriptionText:description, displayed:false) } else { @@ -85,13 +86,13 @@ def parse(String description) { } else if (description == "updated") { return null } else { - def cmd = zwave.parse(description, [0x31: 5, 0x56: 1, 0x71: 3, 0x72:2, 0x80: 1, 0x84: 2, 0x85: 2, 0x86: 1, 0x98: 1]) + def cmd = zwave.parse(description, [0x31: 5, 0x56: 1, 0x71: 3, 0x72:2, 0x80: 1, 0x84: 2, 0x85: 2, 0x86: 1, 0x98: 1]) - if (cmd) { - log.debug "Parsed '${cmd}'" - zwaveEvent(cmd) - } - } + if (cmd) { + log.debug "Parsed '${cmd}'" + zwaveEvent(cmd) + } + } } //security @@ -108,7 +109,7 @@ def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulat //crc16 def zwaveEvent(physicalgraph.zwave.commands.crc16encapv1.Crc16Encap cmd) { - def versions = [0x31: 5, 0x72: 2, 0x80: 1] + def versions = [0x31: 5, 0x72: 2, 0x80: 1] def version = versions[cmd.commandClass as Integer] def ccObj = version ? zwave.commandClass(cmd.commandClass, version) : zwave.commandClass(cmd.commandClass) def encapsulatedCommand = ccObj?.command(cmd.command)?.parse(cmd.data) @@ -122,105 +123,124 @@ def zwaveEvent(physicalgraph.zwave.commands.crc16encapv1.Crc16Encap cmd) def zwaveEvent(physicalgraph.zwave.commands.wakeupv2.WakeUpNotification cmd) { def event = createEvent(descriptionText: "${device.displayName} woke up", displayed: false) - def cmds = [] - cmds << encap(zwave.batteryV1.batteryGet()) - cmds << "delay 500" - cmds << encap(zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 1, scale: 0)) - cmds << "delay 1200" - cmds << encap(zwave.wakeUpV1.wakeUpNoMoreInformation()) - [event, response(cmds)] + def cmds = [] + // cmds << encap(zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 1, scale: 0)) + // cmds << "delay 500" + cmds << encap(zwave.batteryV1.batteryGet()) + [event, response(cmds)] } def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) { log.debug "manufacturerId: ${cmd.manufacturerId}" - log.debug "manufacturerName: ${cmd.manufacturerName}" - log.debug "productId: ${cmd.productId}" - log.debug "productTypeId: ${cmd.productTypeId}" + log.debug "manufacturerName: ${cmd.manufacturerName}" + log.debug "productId: ${cmd.productId}" + log.debug "productTypeId: ${cmd.productTypeId}" } def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.DeviceSpecificReport cmd) { log.debug "deviceIdData: ${cmd.deviceIdData}" - log.debug "deviceIdDataFormat: ${cmd.deviceIdDataFormat}" - log.debug "deviceIdDataLengthIndicator: ${cmd.deviceIdDataLengthIndicator}" - log.debug "deviceIdType: ${cmd.deviceIdType}" - - if (cmd.deviceIdType == 1 && cmd.deviceIdDataFormat == 1) {//serial number in binary format + log.debug "deviceIdDataFormat: ${cmd.deviceIdDataFormat}" + log.debug "deviceIdDataLengthIndicator: ${cmd.deviceIdDataLengthIndicator}" + log.debug "deviceIdType: ${cmd.deviceIdType}" + + if (cmd.deviceIdType == 1 && cmd.deviceIdDataFormat == 1) { //serial number in binary format String serialNumber = "h'" - - cmd.deviceIdData.each{ data -> - serialNumber += "${String.format("%02X", data)}" - } - - updateDataValue("serialNumber", serialNumber) - log.debug "${device.displayName} - serial number: ${serialNumber}" - } + + cmd.deviceIdData.each{ data -> + serialNumber += "${String.format("%02X", data)}" + } + + updateDataValue("serialNumber", serialNumber) + log.debug "${device.displayName} - serial number: ${serialNumber}" + } + + def response_cmds = [] + if (!device.currentState("temperature")) { + response_cmds << encap(zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 1, scale: 0)) + } + if (!getDataValue("version") && !zwaveInfo.ver) { + log.debug "Requesting Version Report" + response_cmds << "delay 500" + response_cmds << encap(zwave.versionV1.versionGet()) + } + response_cmds << "delay 1000" + response_cmds << encap(zwave.wakeUpV2.wakeUpNoMoreInformation()) + [[:], response(response_cmds)] } -def zwaveEvent(physicalgraph.zwave.commands.versionv1.VersionReport cmd) { - updateDataValue("version", "${cmd.applicationVersion}.${cmd.applicationSubVersion}") - log.debug "applicationVersion: ${cmd.applicationVersion}" - log.debug "applicationSubVersion: ${cmd.applicationSubVersion}" - log.debug "zWaveLibraryType: ${cmd.zWaveLibraryType}" - log.debug "zWaveProtocolVersion: ${cmd.zWaveProtocolVersion}" - log.debug "zWaveProtocolSubVersion: ${cmd.zWaveProtocolSubVersion}" +def zwaveEvent(physicalgraph.zwave.commands.versionv1.VersionReport cmd) { + updateDataValue("version", "${cmd.applicationVersion}.${cmd.applicationSubVersion}") + log.debug "applicationVersion: ${cmd.applicationVersion}" + log.debug "applicationSubVersion: ${cmd.applicationSubVersion}" + log.debug "zWaveLibraryType: ${cmd.zWaveLibraryType}" + log.debug "zWaveProtocolVersion: ${cmd.zWaveProtocolVersion}" + log.debug "zWaveProtocolSubVersion: ${cmd.zWaveProtocolSubVersion}" } def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd) { + def result = [] def map = [:] map.name = "battery" map.value = cmd.batteryLevel == 255 ? 1 : cmd.batteryLevel.toString() map.unit = "%" - map.displayed = true - createEvent(map) + + result << createEvent(map) + + if (!getDataValue("serialNumber")) { + result << response(encap(zwave.manufacturerSpecificV2.deviceSpecificGet())) + } else { + result << response(encap(zwave.wakeUpV2.wakeUpNoMoreInformation())) + } + result } def zwaveEvent(physicalgraph.zwave.commands.notificationv3.NotificationReport cmd) { def map = [:] - if (cmd.notificationType == 5) { - switch (cmd.event) { - case 2: - map.name = "water" - map.value = "wet" - map.descriptionText = "${device.displayName} is ${map.value}" - break - - case 0: - map.name = "water" - map.value = "dry" - map.descriptionText = "${device.displayName} is ${map.value}" - break - } - } else if (cmd.notificationType == 7) { - switch (cmd.event) { - case 0: - map.name = "tamper" - map.value = "inactive" - map.descriptionText = "${device.displayName}: tamper alarm has been deactivated" + if (cmd.notificationType == 5) { + switch (cmd.event) { + case 2: + map.name = "water" + map.value = "wet" + map.descriptionText = "${device.displayName} is ${map.value}" break - - case 3: - map.name = "tamper" - map.value = "active" - map.descriptionText = "${device.displayName}: tamper alarm activated" - break - } - } - - createEvent(map) + + case 0: + map.name = "water" + map.value = "dry" + map.descriptionText = "${device.displayName} is ${map.value}" + break + } + } else if (cmd.notificationType == 7) { + switch (cmd.event) { + case 0: + map.name = "tamper" + map.value = "inactive" + map.descriptionText = "${device.displayName}: tamper alarm has been deactivated" + break + + case 3: + map.name = "tamper" + map.value = "active" + map.descriptionText = "${device.displayName}: tamper alarm activated" + break + } + } + + createEvent(map) } def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv5.SensorMultilevelReport cmd) { def map = [:] if (cmd.sensorType == 1) { - // temperature - def cmdScale = cmd.scale == 1 ? "F" : "C" - map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision) - map.unit = getTemperatureScale() - map.name = "temperature" - map.displayed = true + // temperature + def cmdScale = cmd.scale == 1 ? "F" : "C" + map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision) + map.unit = getTemperatureScale() + map.name = "temperature" + map.displayed = true } - - createEvent(map) + + createEvent(map) } def zwaveEvent(physicalgraph.zwave.commands.deviceresetlocallyv1.DeviceResetLocallyNotification cmd) { @@ -229,21 +249,18 @@ def zwaveEvent(physicalgraph.zwave.commands.deviceresetlocallyv1.DeviceResetLoca def configure() { log.debug "Executing 'configure'" - // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + // Device wakes up every 4 hours, this interval of 8h 2m allows us to miss one wakeup notification before marking offline sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) - def cmds = [] - - cmds += zwave.wakeUpV2.wakeUpIntervalSet(seconds:21600, nodeid: zwaveHubNodeId)//FGFS' default wake up interval - cmds += zwave.manufacturerSpecificV2.manufacturerSpecificGet() - cmds += zwave.manufacturerSpecificV2.deviceSpecificGet() - cmds += zwave.versionV1.versionGet() - cmds += zwave.batteryV1.batteryGet() - cmds += zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 1, scale: 0) - cmds += zwave.associationV2.associationSet(groupingIdentifier:1, nodeId: [zwaveHubNodeId]) - cmds += zwave.wakeUpV2.wakeUpNoMoreInformation() + // default initial state + sendEvent(name: "water", value: "dry") - encapSequence(cmds, 500) + def cmds = [] + + cmds << zwave.associationV2.associationSet(groupingIdentifier:1, nodeId: [zwaveHubNodeId]) + cmds << zwave.batteryV1.batteryGet() // other queries sent as response to BatteryReport + + encapSequence(cmds, 200) } private secure(physicalgraph.zwave.Command cmd) { @@ -252,7 +269,7 @@ private secure(physicalgraph.zwave.Command cmd) { private crc16(physicalgraph.zwave.Command cmd) { //zwave.crc16EncapV1.crc16Encap().encapsulate(cmd).format() - "5601${cmd.format()}0000" + "5601${cmd.format()}0000" } private encapSequence(commands, delay=200) { @@ -260,13 +277,10 @@ private encapSequence(commands, delay=200) { } private encap(physicalgraph.zwave.Command cmd) { - def secureClasses = [0x20, 0x5A, 0x70, 0x71, 0x84, 0x85, 0x8E, 0x9C] - - //todo: check if secure inclusion was successful - //if not do not send security-encapsulated command - if (secureClasses.find{ it == cmd.commandClassId }) { - secure(cmd) - } else { - crc16(cmd) - } -} \ No newline at end of file + if (zwaveInfo.zw && !zwaveInfo.zw.contains("s")) { + // Secure inclusion failed + crc16(cmd) + } else { + secure(cmd) + } +} diff --git a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy index ed01e44..ed19b2e 100644 --- a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy +++ b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy @@ -1,12 +1,12 @@ /** * Device Type Definition File * - * Device Type: Fibaro Flood Sensor - * File Name: fibaro-flood-sensor.groovy - * Initial Release: 2014-12-10 - * @author: Todd Wackford - * Email: todd@wackford.net - * @version: 1.0 + * Device Type: Fibaro Flood Sensor + * File Name: fibaro-flood-sensor.groovy + * Initial Release: 2014-12-10 + * @author: Todd Wackford + * Email: todd@wackford.net + * @version: 1.0 * * Copyright 2014 SmartThings * @@ -26,8 +26,8 @@ * not displayed to the user. We do this so we can receive events and display on device * activity. If the user wants to display the tamper tile, adjust the tile display lines * with the following: - * main(["water", "temperature", "tamper"]) - * details(["water", "temperature", "battery", "tamper"]) + * main(["water", "temperature", "tamper"]) + * details(["water", "temperature", "battery", "tamper"]) * * @param none * @@ -40,13 +40,16 @@ metadata { capability "Configuration" capability "Battery" capability "Health Check" - - command "resetParams2StDefaults" - command "listCurrentParams" - command "updateZwaveParam" - command "test" - + + command "resetParams2StDefaults" + command "listCurrentParams" + command "updateZwaveParam" + command "test" + fingerprint deviceId: "0xA102", inClusters: "0x30,0x9C,0x60,0x85,0x8E,0x72,0x70,0x86,0x80,0x84" + fingerprint mfr:"010F", prod:"0000", model:"2002" + fingerprint mfr:"010F", prod:"0000", model:"1002" + fingerprint mfr:"010F", prod:"0B00", model:"1001" } simulator { @@ -87,9 +90,9 @@ metadata { [value: 96, color: "#bc2323"] ] } - standardTile("tamper", "device.tamper") { - state("secure", label:"secure", icon:"st.locks.lock.locked", backgroundColor:"#ffffff") - state("tampered", label:"tampered", icon:"st.locks.lock.unlocked", backgroundColor:"#53a7c0") + standardTile("tamper", "device.tamper") { + state("secure", label:"secure", icon:"st.locks.lock.locked", backgroundColor:"#ffffff") + state("tampered", label:"tampered", icon:"st.locks.lock.unlocked", backgroundColor:"#53a7c0") } valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") { state "battery", label:'${currentValue}% battery', unit:"" @@ -107,26 +110,17 @@ metadata { def parse(String description) { def result = [] - - if (description == "updated") { - if (!state.MSR) { - result << response(zwave.wakeUpV1.wakeUpIntervalSet(seconds: 60*60, nodeid:zwaveHubNodeId)) - result << response(zwave.manufacturerSpecificV2.manufacturerSpecificGet()) - } - } else { - def cmd = zwave.parse(description, [0x31: 2, 0x30: 1, 0x70: 2, 0x71: 1, 0x84: 1, 0x80: 1, 0x9C: 1, 0x72: 2, 0x56: 2, 0x60: 3]) - - if (cmd) { - result += zwaveEvent(cmd) //createEvent(zwaveEvent(cmd)) - } - } - - result << response(zwave.batteryV1.batteryGet().format()) - - if ( result[0] != null ) { + + def cmd = zwave.parse(description, [0x31: 2, 0x30: 1, 0x70: 2, 0x71: 1, 0x84: 1, 0x80: 1, 0x9C: 1, 0x72: 2, 0x56: 2, 0x60: 3]) + + if (cmd) { + result += zwaveEvent(cmd) //createEvent(zwaveEvent(cmd)) + } + + if ( result[0] != null ) { log.debug "Parse returned ${result}" result - } + } } @@ -143,10 +137,9 @@ def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd) { def result = [createEvent(descriptionText: "${device.displayName} woke up", isStateChange: false)] if (!isConfigured()) { // we're still in the process of configuring a newly joined device - result += lateConfigure(true) + result << lateConfigure(true) } else { - result += response(zwave.wakeUpV1.wakeUpNoMoreInformation()) - log.debug "We're done with WakeUp!" + result << response(zwave.wakeUpV1.wakeUpNoMoreInformation()) } result } @@ -154,7 +147,7 @@ def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd) { def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv2.SensorMultilevelReport cmd) { def map = [:] - + switch (cmd.sensorType) { case 1: // temperature @@ -185,7 +178,7 @@ def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv1.SensorBinaryReport cm def map = [:] map.value = cmd.sensorValue ? "active" : "inactive" map.name = "acceleration" - + if (map.value == "active") { map.descriptionText = "$device.displayName detected vibration" } @@ -200,49 +193,49 @@ def zwaveEvent(physicalgraph.zwave.commands.configurationv2.ConfigurationReport } def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd) { - log.debug "BasicSet with CMD = ${cmd}" - - if (!isConfigured()) { - def result = [] - def map = [:] - - map.name = "water" + log.debug "BasicSet with CMD = ${cmd}" + + if (!isConfigured()) { + def result = [] + def map = [:] + + map.name = "water" map.value = cmd.value ? "wet" : "dry" map.descriptionText = "${device.displayName} is ${map.value}" - - // If we are getting a BasicSet, and isConfigured == false, then we are likely NOT properly configured. - result += lateConfigure(true) - - result << createEvent(map) - - result - } + + // If we are getting a BasicSet, and isConfigured == false, then we are likely NOT properly configured. + result += lateConfigure(true) + + result << createEvent(map) + + result + } } def zwaveEvent(physicalgraph.zwave.commands.sensoralarmv1.SensorAlarmReport cmd) { def map = [:] - + if (cmd.sensorType == 0x05) { map.name = "water" map.value = cmd.sensorState ? "wet" : "dry" map.descriptionText = "${device.displayName} is ${map.value}" - - log.debug "CMD = SensorAlarmReport: ${cmd}" - setConfigured() - } else if ( cmd.sensorType == 0) { - map.name = "tamper" - map.isStateChange = true - map.value = cmd.sensorState ? "tampered" : "secure" - map.descriptionText = "${device.displayName} has been tampered with" - runIn(30, "resetTamper") //device does not send alarm cancelation - - } else if ( cmd.sensorType == 1) { - map.name = "tamper" - map.value = cmd.sensorState ? "tampered" : "secure" - map.descriptionText = "${device.displayName} has been tampered with" - runIn(30, "resetTamper") //device does not send alarm cancelation - + + log.debug "CMD = SensorAlarmReport: ${cmd}" + setConfigured() + } else if ( cmd.sensorType == 0) { + map.name = "tamper" + map.isStateChange = true + map.value = cmd.sensorState ? "tampered" : "secure" + map.descriptionText = "${device.displayName} has been tampered with" + runIn(30, "resetTamper") //device does not send alarm cancelation + + } else if ( cmd.sensorType == 1) { + map.name = "tamper" + map.value = cmd.sensorState ? "tampered" : "secure" + map.descriptionText = "${device.displayName} has been tampered with" + runIn(30, "resetTamper") //device does not send alarm cancelation + } else { map.descriptionText = "${device.displayName}: ${cmd}" } @@ -251,10 +244,10 @@ def zwaveEvent(physicalgraph.zwave.commands.sensoralarmv1.SensorAlarmReport cmd) def resetTamper() { def map = [:] - map.name = "tamper" - map.value = "secure" - map.descriptionText = "$device.displayName is secure" - sendEvent(map) + map.name = "tamper" + map.value = "secure" + map.descriptionText = "$device.displayName is secure" + sendEvent(map) } def zwaveEvent(physicalgraph.zwave.Command cmd) { @@ -268,10 +261,10 @@ def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerS def msr = String.format("%04X-%04X-%04X", cmd.manufacturerId, cmd.productTypeId, cmd.productId) log.debug "msr: $msr" device.updateDataValue(["MSR", msr]) - - if ( msr == "010F-0B00-2001" ) { //this is the msr and device type for the fibaro flood sensor - result += lateConfigure(true) - } + + if ( msr == "010F-0B00-2001" ) { //this is the msr and device type for the fibaro flood sensor + result += lateConfigure(true) + } result << createEvent(descriptionText: "$device.displayName MSR: $msr", isStateChange: false) result @@ -283,17 +276,17 @@ def setConfigured() { def isConfigured() { Boolean configured = device.getDataValue(["configured"]) as Boolean - - return configured + + return configured } def lateConfigure(setConf = False) { def res = response(configure()) - - if (setConf) - setConfigured() - - return res + + if (setConf) + setConfigured() + + return res } /** @@ -305,29 +298,34 @@ def lateConfigure(setConf = False) { */ def configure() { log.debug "Configuring Device..." - // Device-Watch simply pings if no device events received for 8 hrs & 2 minutes + // Device wakes up every 4 hours, this interval allows us to miss one wakeup notification before marking offline sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) - def cmds = [] - - // send associate to group 2 to get alarm data - cmds << zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format() - - cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format() - - // send associate to group 3 to get sensor data reported only to hub - cmds << zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format() + // default initial state + sendEvent(name: "water", value: "dry") - // temp hysteresis set to .5 degrees celcius - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,50], parameterNumber: 12, size: 2).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format() + def cmds = [] + + // send associate to group 2 to get alarm data + cmds << zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format() + + cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format() + + // send associate to group 3 to get sensor data reported only to hub + cmds << zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format() // reporting frequency of temps and battery set to one hour cmds << zwave.configurationV1.configurationSet(configurationValue: [0,60*60], parameterNumber: 10, size: 2).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format() - - cmds << zwave.wakeUpV1.wakeUpNoMoreInformation().format() - + // cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format() + + // temp hysteresis set to .5 degrees celcius + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,50], parameterNumber: 12, size: 2).format() + // cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format() + + cmds << zwave.batteryV1.batteryGet().format() + + cmds << zwave.wakeUpV1.wakeUpNoMoreInformation().format() + delayBetween(cmds, 100) } @@ -353,18 +351,18 @@ def test() { * @return none */ def updateZwaveParam(params) { - if ( params ) { - def pNumber = params.paramNumber - def pSize = params.size - def pValue = [params.value] - log.debug "Make sure device is awake and in recieve mode (triple-click?)" - log.debug "Updating ${device.displayName} parameter number '${pNumber}' with value '${pValue}' with size of '${pSize}'" + if ( params ) { + def pNumber = params.paramNumber + def pSize = params.size + def pValue = [params.value] + log.debug "Make sure device is awake and in recieve mode (triple-click?)" + log.debug "Updating ${device.displayName} parameter number '${pNumber}' with value '${pValue}' with size of '${pSize}'" def cmds = [] - cmds << zwave.configurationV1.configurationSet(configurationValue: pValue, parameterNumber: pNumber, size: pSize).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: pNumber).format() - delayBetween(cmds, 1000) - } + cmds << zwave.configurationV1.configurationSet(configurationValue: pValue, parameterNumber: pNumber, size: pSize).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: pNumber).format() + delayBetween(cmds, 1000) + } } /** @@ -381,26 +379,26 @@ def updateZwaveParam(params) { def resetParams2StDefaults() { log.debug "Resetting ${device.displayName} parameters to SmartThings compatible defaults" def cmds = [] - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 1, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [3], parameterNumber: 2, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 7, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 9, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,60*60], parameterNumber: 10, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,50], parameterNumber: 12, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 13, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [5,220], parameterNumber: 50, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [13,172], parameterNumber: 51, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0,0,225], parameterNumber: 61, size: 4).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,255,0,0], parameterNumber: 62, size: 4).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [2], parameterNumber: 63, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 73, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [2], parameterNumber: 74, size: 1).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 75, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 76, size: 2).format() - cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 77, size: 1).format() - - delayBetween(cmds, 1200) + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 1, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [3], parameterNumber: 2, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 7, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 9, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,60*60], parameterNumber: 10, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,50], parameterNumber: 12, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 13, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [5,220], parameterNumber: 50, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [13,172], parameterNumber: 51, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0,0,225], parameterNumber: 61, size: 4).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,255,0,0], parameterNumber: 62, size: 4).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [2], parameterNumber: 63, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 73, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [2], parameterNumber: 74, size: 1).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 75, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 76, size: 2).format() + cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 77, size: 1).format() + + delayBetween(cmds, 1200) } /** @@ -417,25 +415,25 @@ def resetParams2StDefaults() { def listCurrentParams() { log.debug "Listing of current parameter settings of ${device.displayName}" def cmds = [] - cmds << zwave.configurationV1.configurationGet(parameterNumber: 1).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 2).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 5).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 7).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 9).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 13).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 50).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 51).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 61).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 62).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 63).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 73).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 74).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 75).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 76).format() - cmds << zwave.configurationV1.configurationGet(parameterNumber: 77).format() - + cmds << zwave.configurationV1.configurationGet(parameterNumber: 1).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 2).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 5).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 7).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 9).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 13).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 50).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 51).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 61).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 62).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 63).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 73).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 74).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 75).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 76).format() + cmds << zwave.configurationV1.configurationGet(parameterNumber: 77).format() + delayBetween(cmds, 1200) } From 8484f18a0e0111c91599c6dd5fc004043da3dbc1 Mon Sep 17 00:00:00 2001 From: CosmicPuppy Date: Thu, 9 Mar 2017 00:05:14 -0800 Subject: [PATCH 082/104] To Nyce sensor DTHs, added Capability "Sensor" per http://docs.smartthings.com/en/latest/device-type-developers-guide/overview.html?highlight=sensor%20actuator#actuator-and-sensor. There are some SmartApps out there using the "Actuator" and "Sensor" Capabilities and this Device doesn't show up for them (e.g., ActionTiles). --- .../smartthings/nyce-motion-sensor.src/nyce-motion-sensor.groovy | 1 + .../nyce-open-closed-sensor.src/nyce-open-closed-sensor.groovy | 1 + 2 files changed, 2 insertions(+) diff --git a/devicetypes/smartthings/nyce-motion-sensor.src/nyce-motion-sensor.groovy b/devicetypes/smartthings/nyce-motion-sensor.src/nyce-motion-sensor.groovy index f48e788..a3ddb49 100644 --- a/devicetypes/smartthings/nyce-motion-sensor.src/nyce-motion-sensor.groovy +++ b/devicetypes/smartthings/nyce-motion-sensor.src/nyce-motion-sensor.groovy @@ -21,6 +21,7 @@ metadata { capability "Configuration" capability "Battery" capability "Refresh" + capability "Sensor" command "enrollResponse" diff --git a/devicetypes/smartthings/nyce-open-closed-sensor.src/nyce-open-closed-sensor.groovy b/devicetypes/smartthings/nyce-open-closed-sensor.src/nyce-open-closed-sensor.groovy index 7f75068..8c66292 100644 --- a/devicetypes/smartthings/nyce-open-closed-sensor.src/nyce-open-closed-sensor.groovy +++ b/devicetypes/smartthings/nyce-open-closed-sensor.src/nyce-open-closed-sensor.groovy @@ -24,6 +24,7 @@ metadata { capability "Contact Sensor" capability "Refresh" capability "Health Check" + capability "Sensor" command "enrollResponse" From e3168793bdb42e16298a7fa76600d5f15b9519e1 Mon Sep 17 00:00:00 2001 From: CosmicPuppy Date: Sat, 11 Mar 2017 00:47:36 -0800 Subject: [PATCH 083/104] To Fibaro Flood Sensor DTHs, added Capability "Sensor" per http://docs.smartthings.com/en/latest/device-type-developers-guide/overview.html?highlight=sensor%20actuator#actuator-and-sensor. There are some SmartApps out there using the "Actuator" and "Sensor" Capabilities and this Device doesn't show up for them (e.g., ActionTiles). --- .../fibaro-flood-sensor.src/fibaro-flood-sensor.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy index ed01e44..9dc3ab2 100644 --- a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy +++ b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy @@ -40,6 +40,7 @@ metadata { capability "Configuration" capability "Battery" capability "Health Check" + capability "Sensor" command "resetParams2StDefaults" command "listCurrentParams" From 950a33dc74af2952f5ec2109271954511d4358fa Mon Sep 17 00:00:00 2001 From: Parijat Das Date: Mon, 13 Mar 2017 16:26:46 -0700 Subject: [PATCH 084/104] Added health-check for FortrezZ Water Valve --- .../fortrezz-water-valve.src/.st-ignore | 2 + .../fortrezz-water-valve.src/README.md | 39 +++++++++++++++++++ .../fortrezz-water-valve.groovy | 14 +++++++ 3 files changed, 55 insertions(+) create mode 100644 devicetypes/smartthings/fortrezz-water-valve.src/.st-ignore create mode 100644 devicetypes/smartthings/fortrezz-water-valve.src/README.md diff --git a/devicetypes/smartthings/fortrezz-water-valve.src/.st-ignore b/devicetypes/smartthings/fortrezz-water-valve.src/.st-ignore new file mode 100644 index 0000000..f78b46e --- /dev/null +++ b/devicetypes/smartthings/fortrezz-water-valve.src/.st-ignore @@ -0,0 +1,2 @@ +.st-ignore +README.md diff --git a/devicetypes/smartthings/fortrezz-water-valve.src/README.md b/devicetypes/smartthings/fortrezz-water-valve.src/README.md new file mode 100644 index 0000000..40c31df --- /dev/null +++ b/devicetypes/smartthings/fortrezz-water-valve.src/README.md @@ -0,0 +1,39 @@ +# FortrezZ Water Valve + +Cloud Execution + +Works with: + +* [FortrezZ Water Valve](https://www.smartthings.com/works-with-smartthings/other/fortrezz-water-valve) + +## Table of contents + +* [Capabilities](#capabilities) +* [Health](#device-health) +* [Troubleshooting](#troubleshooting) + +## Capabilities + +* **Actuator** - represents that a Device has commands +* **Health Check** - indicates ability to get device health notifications +* **Valve** - allows for the control of a valve device +* **Refresh** - _refresh()_ command for status updates +* **Sensor** - detects sensor events + +## Device Health + +FortrezZ Water Valve is polled by the hub. +As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed. +Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins. +Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for +the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row, +it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time. + +* __32min__ checkInterval + +## Troubleshooting + +If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. +Pairing needs to be tried again by placing the device closer to the hub. +Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link: +* [FortrezZ Water Valve Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/202088434-FortrezZ-Water-Valve-Shutoff) \ No newline at end of file diff --git a/devicetypes/smartthings/fortrezz-water-valve.src/fortrezz-water-valve.groovy b/devicetypes/smartthings/fortrezz-water-valve.src/fortrezz-water-valve.groovy index 1b67c5d..77b9595 100644 --- a/devicetypes/smartthings/fortrezz-water-valve.src/fortrezz-water-valve.groovy +++ b/devicetypes/smartthings/fortrezz-water-valve.src/fortrezz-water-valve.groovy @@ -14,11 +14,13 @@ metadata { definition (name: "Fortrezz Water Valve", namespace: "smartthings", author: "SmartThings") { capability "Actuator" + capability "Health Check" capability "Valve" capability "Refresh" capability "Sensor" fingerprint deviceId: "0x1000", inClusters: "0x25,0x72,0x86,0x71,0x22,0x70" + fingerprint mfr:"0084", prod:"0213", model:"0215", deviceJoinName: "FortrezZ Water Valve" } // simulator metadata @@ -48,6 +50,11 @@ metadata { } } +def updated(){ +// Device-Watch simply pings if no device events received for 32min(checkInterval) + sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) +} + def parse(String description) { log.trace description def result = null @@ -76,6 +83,13 @@ def close() { zwave.switchBinaryV1.switchBinarySet(switchValue: 0xFF).format() } +/** + * PING is used by Device-Watch in attempt to reach the Device + * */ +def ping() { + refresh() +} + def refresh() { zwave.switchBinaryV1.switchBinaryGet().format() } From 7a7a08ea6ea413de32a5fb67ba219fff077e1bbc Mon Sep 17 00:00:00 2001 From: Parijat Das Date: Mon, 13 Mar 2017 18:05:22 -0700 Subject: [PATCH 085/104] Added health-check for FortrezZ Siren Strobe Alarm --- .../smartthings/zwave-siren.src/.st-ignore | 2 + .../smartthings/zwave-siren.src/README.md | 42 +++++++++++++++++++ .../zwave-siren.src/zwave-siren.groovy | 14 +++++++ 3 files changed, 58 insertions(+) create mode 100644 devicetypes/smartthings/zwave-siren.src/.st-ignore create mode 100644 devicetypes/smartthings/zwave-siren.src/README.md diff --git a/devicetypes/smartthings/zwave-siren.src/.st-ignore b/devicetypes/smartthings/zwave-siren.src/.st-ignore new file mode 100644 index 0000000..f78b46e --- /dev/null +++ b/devicetypes/smartthings/zwave-siren.src/.st-ignore @@ -0,0 +1,2 @@ +.st-ignore +README.md diff --git a/devicetypes/smartthings/zwave-siren.src/README.md b/devicetypes/smartthings/zwave-siren.src/README.md new file mode 100644 index 0000000..ed17b1e --- /dev/null +++ b/devicetypes/smartthings/zwave-siren.src/README.md @@ -0,0 +1,42 @@ +# Z-wave Siren + +Cloud Execution + +Works with: + +* [FortrezZ Siren Strobe Alarm](https://www.smartthings.com/works-with-smartthings/other/fortrezz-water-valve) + +## Table of contents + +* [Capabilities](#capabilities) +* [Health](#device-health) +* [Troubleshooting](#troubleshooting) + +## Capabilities + +* **Actuator** - represents that a Device has commands +* **Alarm** - allows for interacting with devices that serve as alarms +* **Battery** - defines device uses a battery +* **Health Check** - indicates ability to get device health notifications +* **Polling** - represents that poll() can be implemented for the device +* **Refresh** - _refresh()_ command for status updates +* **Sensor** - detects sensor events +* **Switch** - can detect state (possible values: on/off) + +## Device Health + +FortrezZ Siren Strobe Alarm is polled by the hub. +As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed. +Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins. +Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for +the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row, +it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time. + +* __32min__ checkInterval + +## Troubleshooting + +If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. +Pairing needs to be tried again by placing the device closer to the hub. +Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link: +* [FortrezZ Siren Strobe Alarm Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/202294760-FortrezZ-Siren-Strobe-Alarm) \ No newline at end of file diff --git a/devicetypes/smartthings/zwave-siren.src/zwave-siren.groovy b/devicetypes/smartthings/zwave-siren.src/zwave-siren.groovy index 9ee8071..d368610 100644 --- a/devicetypes/smartthings/zwave-siren.src/zwave-siren.groovy +++ b/devicetypes/smartthings/zwave-siren.src/zwave-siren.groovy @@ -20,6 +20,7 @@ metadata { capability "Actuator" capability "Alarm" capability "Battery" + capability "Health Check" capability "Polling" capability "Refresh" capability "Sensor" @@ -27,6 +28,7 @@ metadata { fingerprint inClusters: "0x20,0x25,0x86,0x80,0x85,0x72,0x71" + fingerprint mfr:"0084", prod:"0313", model:"010B", deviceJoinName: "FortrezZ Siren Strobe Alarm" } simulator { @@ -58,6 +60,11 @@ metadata { } } +def updated(){ +// Device-Watch simply pings if no device events received for 32min(checkInterval) + sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) +} + def createEvents(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd) { def map = [ name: "battery", unit: "%" ] if (cmd.batteryLevel == 0xFF) { @@ -119,6 +126,13 @@ def both() { on() } +/** + * PING is used by Device-Watch in attempt to reach the Device + * */ +def ping() { + refresh() +} + def refresh() { log.debug "sending battery refresh command" zwave.batteryV1.batteryGet().format() From 9a53e12427a3e8068a01e857b6e572442cea1846 Mon Sep 17 00:00:00 2001 From: Donald Kirker Date: Tue, 14 Mar 2017 02:20:58 -0700 Subject: [PATCH 086/104] DVCSMP-2472: Add Eaton Halo downlight --- ...-white-color-temperature-bulb-5000k.groovy | 169 ++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 devicetypes/smartthings/zll-white-color-temperature-bulb-5000k.src/zll-white-color-temperature-bulb-5000k.groovy diff --git a/devicetypes/smartthings/zll-white-color-temperature-bulb-5000k.src/zll-white-color-temperature-bulb-5000k.groovy b/devicetypes/smartthings/zll-white-color-temperature-bulb-5000k.src/zll-white-color-temperature-bulb-5000k.groovy new file mode 100644 index 0000000..3c88380 --- /dev/null +++ b/devicetypes/smartthings/zll-white-color-temperature-bulb-5000k.src/zll-white-color-temperature-bulb-5000k.groovy @@ -0,0 +1,169 @@ +/** + * Copyright 2016 SmartThings + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License + * for the specific language governing permissions and limitations under the License. + * + */ +import groovy.transform.Field + +@Field Boolean hasConfiguredHealthCheck = false + +metadata { + definition (name: "ZLL White Color Temperature Bulb 5000K", namespace: "smartthings", author: "SmartThings") { + + capability "Actuator" + capability "Color Temperature" + capability "Configuration" + capability "Polling" + capability "Refresh" + capability "Switch" + capability "Switch Level" + capability "Health Check" + + attribute "colorName", "string" + command "setGenericName" + + fingerprint profileId: "C05E", deviceId: "0220", inClusters: "0000, 0004, 0003, 0006, 0008, 0005, 0300", outClusters: "0019", manufacturer: "Eaton", model: "Halo_LT01", deviceJoinName: "Halo RL56 Wireless" + } + + // UI tile definitions + tiles(scale: 2) { + multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ + tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { + attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00A0DC", nextState:"turningOff" + attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn" + attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00A0DC", nextState:"turningOff" + attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn" + } + tileAttribute ("device.level", key: "SLIDER_CONTROL") { + attributeState "level", action:"switch level.setLevel" + } + tileAttribute ("colorName", key: "SECONDARY_CONTROL") { + attributeState "colorName", label:'${currentValue}' + } + } + + standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { + state "default", label:"", action:"refresh.refresh", icon:"st.secondary.refresh" + } + + controlTile("colorTempSliderControl", "device.colorTemperature", "slider", width: 4, height: 2, inactiveLabel: false, range:"(2700..5000)") { + state "colorTemperature", action:"color temperature.setColorTemperature" + } + valueTile("colorTemp", "device.colorTemperature", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { + state "colorTemperature", label: '${currentValue} K' + } + + main(["switch"]) + details(["switch", "colorTempSliderControl", "colorTemp", "refresh"]) + } +} + +// Parse incoming device messages to generate events +def parse(String description) { + log.debug "description is $description" + def event = zigbee.getEvent(description) + if (event) { + if (event.name == "colorTemperature") { + event.unit = "K" + } + sendEvent(event) + } + else { + log.warn "DID NOT PARSE MESSAGE for description : $description" + log.debug zigbee.parseDescriptionAsMap(description) + } +} + +def off() { + zigbee.off() + ["delay 1500"] + zigbee.onOffRefresh() +} + +def on() { + zigbee.on() + ["delay 1500"] + zigbee.onOffRefresh() +} + +def setLevel(value) { + zigbee.setLevel(value) + zigbee.onOffRefresh() + zigbee.levelRefresh() +} + +def refresh() { + def cmds = zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.colorTemperatureRefresh() + + // Do NOT config if the device is the Eaton Halo_LT01, it responds with "switch:off" to onOffConfig, and maybe other weird things with the others + if (!((device.getDataValue("manufacturer") == "Eaton") && (device.getDataValue("model") == "Halo_LT01"))) { + cmds = cmds + zigbee.onOffConfig() + zigbee.levelConfig() + zigbee.colorTemperatureConfig() + } + + cmds +} + +def poll() { + zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.colorTemperatureRefresh() +} + +/** + * PING is used by Device-Watch in attempt to reach the Device + * */ +def ping() { + return zigbee.levelRefresh() +} + +def healthPoll() { + log.debug "healthPoll()" + def cmds = zigbee.onOffRefresh() + zigbee.levelRefresh() + cmds.each{ sendHubCommand(new physicalgraph.device.HubAction(it))} +} + +def configureHealthCheck() { + Integer hcIntervalMinutes = 12 + if (!hasConfiguredHealthCheck) { + log.debug "Configuring Health Check, Reporting" + unschedule("healthPoll") + runEvery5Minutes("healthPoll") + // Device-Watch allows 2 check-in misses from device + sendEvent(name: "checkInterval", value: hcIntervalMinutes * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + hasConfiguredHealthCheck = true + } +} + +def configure() { + log.debug "configure()" + configureHealthCheck() + // Implementation note: for the Eaton Halo_LT01, it responds with "switch:off" to onOffConfig, so be sure this is before the call to onOffRefresh + zigbee.onOffConfig() + zigbee.levelConfig() + zigbee.colorTemperatureConfig() + zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.colorTemperatureRefresh() +} + +def updated() { + log.debug "updated()" + configureHealthCheck() +} + +def setColorTemperature(value) { + setGenericName(value) + zigbee.setColorTemperature(value) + ["delay 1500"] + zigbee.colorTemperatureRefresh() +} + +//Naming based on the wiki article here: http://en.wikipedia.org/wiki/Color_temperature +def setGenericName(value){ + if (value != null) { + def genericName = "" + if (value < 3300) { + genericName = "Soft White" + } else if (value < 4150) { + genericName = "Moonlight" + } else if (value <= 5000) { + genericName = "Cool White" + } else { + genericName = "Daylight" + } + sendEvent(name: "colorName", value: genericName, displayed: false) + } +} From 8a41fb609082844969f3c0846232667d480e1e46 Mon Sep 17 00:00:00 2001 From: jackchi Date: Tue, 14 Mar 2017 14:47:56 -0700 Subject: [PATCH 087/104] [DVCSMP-2510] Standardize Page 15 of DTH UX Improvements --- .../homeseer-multisensor.src/homeseer-multisensor.groovy | 4 ++-- .../nyce-motion-sensor.src/nyce-motion-sensor.groovy | 4 ++-- .../smartsense-open-closed-sensor.groovy | 4 ++-- devicetypes/smartthings/zwave-device.src/zwave-device.groovy | 2 +- .../zwave-metering-switch.src/zwave-metering-switch.groovy | 2 +- .../zwave-motion-sensor.src/zwave-motion-sensor.groovy | 4 ++-- devicetypes/smartthings/zwave-sensor.src/zwave-sensor.groovy | 4 ++-- .../zwave-switch-generic.src/zwave-switch-generic.groovy | 2 +- devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy | 2 +- .../zwave-water-sensor.src/zwave-water-sensor.groovy | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/devicetypes/smartthings/homeseer-multisensor.src/homeseer-multisensor.groovy b/devicetypes/smartthings/homeseer-multisensor.src/homeseer-multisensor.groovy index 778eda8..9dd7510 100644 --- a/devicetypes/smartthings/homeseer-multisensor.src/homeseer-multisensor.groovy +++ b/devicetypes/smartthings/homeseer-multisensor.src/homeseer-multisensor.groovy @@ -39,8 +39,8 @@ metadata { tiles { standardTile("motion", "device.motion", width: 2, height: 2) { - state "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0" - state "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff" + state "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00A0DC" + state "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc" } valueTile("temperature", "device.temperature", inactiveLabel: false) { state "temperature", label:'${currentValue}°', diff --git a/devicetypes/smartthings/nyce-motion-sensor.src/nyce-motion-sensor.groovy b/devicetypes/smartthings/nyce-motion-sensor.src/nyce-motion-sensor.groovy index f48e788..da30ed1 100644 --- a/devicetypes/smartthings/nyce-motion-sensor.src/nyce-motion-sensor.groovy +++ b/devicetypes/smartthings/nyce-motion-sensor.src/nyce-motion-sensor.groovy @@ -31,8 +31,8 @@ metadata { tiles { standardTile("motion", "device.motion", width: 2, height: 2) { - state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0") - state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff") + state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00A0DC") + state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc") } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false) { diff --git a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy index 294717e..cf68b3a 100644 --- a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy +++ b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy @@ -45,8 +45,8 @@ metadata { tiles(scale: 2) { multiAttributeTile(name: "contact", type: "generic", width: 6, height: 4) { tileAttribute("device.contact", key: "PRIMARY_CONTROL") { - attributeState "open", label: '${name}', icon: "st.contact.contact.open", backgroundColor: "#ffa81e" - attributeState "closed", label: '${name}', icon: "st.contact.contact.closed", backgroundColor: "#79b821" + attributeState "open", label: '${name}', icon: "st.contact.contact.open", backgroundColor: "#e86d13" + attributeState "closed", label: '${name}', icon: "st.contact.contact.closed", backgroundColor: "#00A0DC" } } diff --git a/devicetypes/smartthings/zwave-device.src/zwave-device.groovy b/devicetypes/smartthings/zwave-device.src/zwave-device.groovy index 2c4958f..932f4bf 100644 --- a/devicetypes/smartthings/zwave-device.src/zwave-device.groovy +++ b/devicetypes/smartthings/zwave-device.src/zwave-device.groovy @@ -33,7 +33,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label: '${name}', action: "switch.off", icon: "st.unknown.zwave.device", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.unknown.zwave.device", backgroundColor: "#00A0DC" state "off", label: '${name}', action: "switch.on", icon: "st.unknown.zwave.device", backgroundColor: "#ffffff" } standardTile("switchOn", "device.switch", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy b/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy index 7939170..d8892e4 100644 --- a/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy +++ b/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy @@ -51,7 +51,7 @@ metadata { // tile definitions tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } valueTile("power", "device.power") { diff --git a/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy b/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy index 46d8be2..a5003c3 100644 --- a/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy +++ b/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy @@ -38,8 +38,8 @@ metadata { tiles { standardTile("motion", "device.motion", width: 2, height: 2) { - state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0") - state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff") + state("active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00A0DC") + state("inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc") } valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") { state("battery", label:'${currentValue}% battery', unit:"") diff --git a/devicetypes/smartthings/zwave-sensor.src/zwave-sensor.groovy b/devicetypes/smartthings/zwave-sensor.src/zwave-sensor.groovy index 16f991c..3d5746c 100644 --- a/devicetypes/smartthings/zwave-sensor.src/zwave-sensor.groovy +++ b/devicetypes/smartthings/zwave-sensor.src/zwave-sensor.groovy @@ -32,8 +32,8 @@ metadata { tiles { standardTile("sensor", "device.sensor", width: 2, height: 2) { - state("inactive", label:'inactive', icon:"st.unknown.zwave.sensor", backgroundColor:"#ffffff") - state("active", label:'active', icon:"st.unknown.zwave.sensor", backgroundColor:"#53a7c0") + state("inactive", label:'inactive', icon:"st.unknown.zwave.sensor", backgroundColor:"#cccccc") + state("active", label:'active', icon:"st.unknown.zwave.sensor", backgroundColor:"#00A0DC") } valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") { state "battery", label:'${currentValue}% battery', unit:"" diff --git a/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy b/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy index 8d063ad..ced18ce 100644 --- a/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy +++ b/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy @@ -47,7 +47,7 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + attributeState "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" attributeState "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } } diff --git a/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy b/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy index e196a71..b7c7106 100644 --- a/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy +++ b/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy @@ -46,7 +46,7 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { - attributeState "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + attributeState "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" attributeState "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } } diff --git a/devicetypes/smartthings/zwave-water-sensor.src/zwave-water-sensor.groovy b/devicetypes/smartthings/zwave-water-sensor.src/zwave-water-sensor.groovy index 7f50063..bd867b9 100644 --- a/devicetypes/smartthings/zwave-water-sensor.src/zwave-water-sensor.groovy +++ b/devicetypes/smartthings/zwave-water-sensor.src/zwave-water-sensor.groovy @@ -33,7 +33,7 @@ metadata { tiles { standardTile("water", "device.water", width: 2, height: 2) { state "dry", icon:"st.alarm.water.dry", backgroundColor:"#ffffff" - state "wet", icon:"st.alarm.water.wet", backgroundColor:"#53a7c0" + state "wet", icon:"st.alarm.water.wet", backgroundColor:"#00A0DC" } valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") { state "battery", label:'${currentValue}% battery', unit:"" From 4ba55e7f0a8302e9bee2c2c7f89d124faeb1ce70 Mon Sep 17 00:00:00 2001 From: jackchi Date: Tue, 14 Mar 2017 15:29:37 -0700 Subject: [PATCH 088/104] [DVCSMP-2511] Standardize Page 16 of DTH UX Improvements --- .../aeon-multisensor-gen5.groovy | 4 ++-- .../fibaro-flood-sensor.src/fibaro-flood-sensor.groovy | 4 ++-- .../fibaro-motion-sensor.src/fibaro-motion-sensor.groovy | 4 ++-- .../smartsense-multi.src/smartsense-multi.groovy | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/devicetypes/smartthings/aeon-multisensor-gen5.src/aeon-multisensor-gen5.groovy b/devicetypes/smartthings/aeon-multisensor-gen5.src/aeon-multisensor-gen5.groovy index 04888d3..2190eed 100644 --- a/devicetypes/smartthings/aeon-multisensor-gen5.src/aeon-multisensor-gen5.groovy +++ b/devicetypes/smartthings/aeon-multisensor-gen5.src/aeon-multisensor-gen5.groovy @@ -64,8 +64,8 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"motion", type: "generic", width: 6, height: 4){ tileAttribute ("device.motion", key: "PRIMARY_CONTROL") { - attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0" - attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff" + attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00a0dc" + attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc" } } valueTile("temperature", "device.temperature", inactiveLabel: false, width: 2, height: 2) { diff --git a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy index ed19b2e..d8d2140 100644 --- a/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy +++ b/devicetypes/smartthings/fibaro-flood-sensor.src/fibaro-flood-sensor.groovy @@ -76,7 +76,7 @@ metadata { tiles { standardTile("water", "device.water", width: 2, height: 2) { state "dry", icon:"st.alarm.water.dry", backgroundColor:"#ffffff" - state "wet", icon:"st.alarm.water.wet", backgroundColor:"#53a7c0" + state "wet", icon:"st.alarm.water.wet", backgroundColor:"#00a0dc" } valueTile("temperature", "device.temperature", inactiveLabel: false) { state "temperature", label:'${currentValue}°', @@ -92,7 +92,7 @@ metadata { } standardTile("tamper", "device.tamper") { state("secure", label:"secure", icon:"st.locks.lock.locked", backgroundColor:"#ffffff") - state("tampered", label:"tampered", icon:"st.locks.lock.unlocked", backgroundColor:"#53a7c0") + state("tampered", label:"tampered", icon:"st.locks.lock.unlocked", backgroundColor:"#00a0dc") } valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") { state "battery", label:'${currentValue}% battery', unit:"" diff --git a/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy b/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy index 891907a..c07a019 100644 --- a/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy +++ b/devicetypes/smartthings/fibaro-motion-sensor.src/fibaro-motion-sensor.groovy @@ -82,8 +82,8 @@ tiles { standardTile("motion", "device.motion", width: 2, height: 2) { - state "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0" - state "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff" + state "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00a0dc" + state "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc" } valueTile("temperature", "device.temperature", inactiveLabel: false) { state "temperature", label:'${currentValue}°', diff --git a/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy b/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy index 5adabde..328c9a7 100644 --- a/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy +++ b/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy @@ -52,14 +52,14 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"contact", type: "generic", width: 6, height: 4){ tileAttribute ("device.contact", key: "PRIMARY_CONTROL") { - attributeState "open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e" - attributeState "closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#79b821" + attributeState "open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"##e86d13" + attributeState "closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#00a0dc" } } standardTile("acceleration", "device.acceleration", width: 2, height: 2) { - state("active", label:'${name}', icon:"st.motion.acceleration.active", backgroundColor:"#53a7c0") - state("inactive", label:'${name}', icon:"st.motion.acceleration.inactive", backgroundColor:"#ffffff") + state("active", label:'${name}', icon:"st.motion.acceleration.active", backgroundColor:"#00a0dc") + state("inactive", label:'${name}', icon:"st.motion.acceleration.inactive", backgroundColor:"#cccccc") } valueTile("temperature", "device.temperature", width: 2, height: 2) { state("temperature", label:'${currentValue}°', From 6d0f9d101d2e48c39f33e2071bcf2aadc305ba15 Mon Sep 17 00:00:00 2001 From: ShunmugaSundar Date: Wed, 15 Mar 2017 05:03:28 +0530 Subject: [PATCH 089/104] [DVCSMP-2509] Standardize Page 14 of DTH UX Improvements [DVCSMP-2509] Standardize Page 14 of DTH UX Improvements --- .../keen-home-smart-vent.groovy | 6 +++--- .../simple-sync.src/simple-sync.groovy | 2 +- .../aeon-multisensor.src/aeon-multisensor.groovy | 4 ++-- .../arrival-sensor.src/arrival-sensor.groovy | 4 ++-- .../smartthings/econet-vent.src/econet-vent.groovy | 2 +- .../smartthings/fibaro-dimmer.src/fibaro-dimmer.groovy | 4 ++-- .../zwave-garage-door-opener.groovy | 10 +++++----- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/devicetypes/keen-home/keen-home-smart-vent.src/keen-home-smart-vent.groovy b/devicetypes/keen-home/keen-home-smart-vent.src/keen-home-smart-vent.groovy index 9f64b2c..93703ef 100644 --- a/devicetypes/keen-home/keen-home-smart-vent.src/keen-home-smart-vent.groovy +++ b/devicetypes/keen-home/keen-home-smart-vent.src/keen-home-smart-vent.groovy @@ -40,10 +40,10 @@ metadata { // UI tile definitions tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", action: "switch.off", icon: "st.vents.vent-open-text", backgroundColor: "#53a7c0" + state "on", action: "switch.off", icon: "st.vents.vent-open-text", backgroundColor: "#00a0dc" state "off", action: "switch.on", icon: "st.vents.vent-closed", backgroundColor: "#ffffff" - state "obstructed", action: "clearObstruction", icon: "st.vents.vent-closed", backgroundColor: "#ff0000" - state "clearing", action: "", icon: "st.vents.vent-closed", backgroundColor: "#ffff33" + state "obstructed", action: "clearObstruction", icon: "st.vents.vent-closed", backgroundColor: "#e86d13" + state "clearing", action: "", icon: "st.vents.vent-closed", backgroundColor: "#ffffff" } controlTile("levelSliderControl", "device.level", "slider", height: 1, width: 2, inactiveLabel: false) { state "level", action:"switch level.setLevel" diff --git a/devicetypes/roomieremote-agent/simple-sync.src/simple-sync.groovy b/devicetypes/roomieremote-agent/simple-sync.src/simple-sync.groovy index b54321a..053172c 100644 --- a/devicetypes/roomieremote-agent/simple-sync.src/simple-sync.groovy +++ b/devicetypes/roomieremote-agent/simple-sync.src/simple-sync.groovy @@ -22,7 +22,7 @@ metadata { standardTile("mainTile", "device.status", width: 1, height: 1, icon: "st.Entertainment.entertainment11") { - state "default", label: "Simple Sync", icon: "st.Home.home2", backgroundColor: "#55A7FF" + state "default", label: "Simple Sync", icon: "st.Home.home2", backgroundColor: "#00a0dc" } def detailTiles = ["mainTile"] diff --git a/devicetypes/smartthings/aeon-multisensor.src/aeon-multisensor.groovy b/devicetypes/smartthings/aeon-multisensor.src/aeon-multisensor.groovy index 5d6de58..fa1fa37 100644 --- a/devicetypes/smartthings/aeon-multisensor.src/aeon-multisensor.groovy +++ b/devicetypes/smartthings/aeon-multisensor.src/aeon-multisensor.groovy @@ -59,8 +59,8 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"motion", type: "generic", width: 6, height: 4){ tileAttribute ("device.motion", key: "PRIMARY_CONTROL") { - attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0" - attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff" + attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00a0dc" + attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc" } } valueTile("temperature", "device.temperature", inactiveLabel: false, width: 2, height: 2) { diff --git a/devicetypes/smartthings/arrival-sensor.src/arrival-sensor.groovy b/devicetypes/smartthings/arrival-sensor.src/arrival-sensor.groovy index 5b87cc1..4fbd53d 100644 --- a/devicetypes/smartthings/arrival-sensor.src/arrival-sensor.groovy +++ b/devicetypes/smartthings/arrival-sensor.src/arrival-sensor.groovy @@ -42,8 +42,8 @@ metadata { tiles { standardTile("presence", "device.presence", width: 2, height: 2, canChangeBackground: true) { - state "present", labelIcon:"st.presence.tile.present", backgroundColor:"#53a7c0" - state "not present", labelIcon:"st.presence.tile.not-present", backgroundColor:"#ebeef2" + state "present", labelIcon:"st.presence.tile.present", backgroundColor:"#00a0dc" + state "not present", labelIcon:"st.presence.tile.not-present", backgroundColor:"#ffffff" } standardTile("beep", "device.beep", decoration: "flat") { state "beep", label:'', action:"tone.beep", icon:"st.secondary.beep", backgroundColor:"#ffffff" diff --git a/devicetypes/smartthings/econet-vent.src/econet-vent.groovy b/devicetypes/smartthings/econet-vent.src/econet-vent.groovy index e2651b7..56a3249 100644 --- a/devicetypes/smartthings/econet-vent.src/econet-vent.groovy +++ b/devicetypes/smartthings/econet-vent.src/econet-vent.groovy @@ -53,7 +53,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", action:"switch.off", icon:"st.vents.vent-open-text", backgroundColor:"#53a7c0" + state "on", action:"switch.off", icon:"st.vents.vent-open-text", backgroundColor:"#00a0dc" state "off", action:"switch.on", icon:"st.vents.vent-closed", backgroundColor:"#ffffff" } valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/fibaro-dimmer.src/fibaro-dimmer.groovy b/devicetypes/smartthings/fibaro-dimmer.src/fibaro-dimmer.groovy index 1c9081a..39ecee2 100644 --- a/devicetypes/smartthings/fibaro-dimmer.src/fibaro-dimmer.groovy +++ b/devicetypes/smartthings/fibaro-dimmer.src/fibaro-dimmer.groovy @@ -56,9 +56,9 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + state "on", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00a0dc", nextState:"turningOff" state "off", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" - state "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#79b821", nextState:"turningOff" + state "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00a0dc", nextState:"turningOff" state "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn" } standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/zwave-garage-door-opener.src/zwave-garage-door-opener.groovy b/devicetypes/smartthings/zwave-garage-door-opener.src/zwave-garage-door-opener.groovy index f22faf8..c578de6 100644 --- a/devicetypes/smartthings/zwave-garage-door-opener.src/zwave-garage-door-opener.groovy +++ b/devicetypes/smartthings/zwave-garage-door-opener.src/zwave-garage-door-opener.groovy @@ -39,11 +39,11 @@ metadata { tiles { standardTile("toggle", "device.door", width: 2, height: 2) { - state("unknown", label:'${name}', action:"refresh.refresh", icon:"st.doors.garage.garage-open", backgroundColor:"#ffa81e") - state("closed", label:'${name}', action:"door control.open", icon:"st.doors.garage.garage-closed", backgroundColor:"#79b821", nextState:"opening") - state("open", label:'${name}', action:"door control.close", icon:"st.doors.garage.garage-open", backgroundColor:"#ffa81e", nextState:"closing") - state("opening", label:'${name}', icon:"st.doors.garage.garage-opening", backgroundColor:"#ffe71e") - state("closing", label:'${name}', icon:"st.doors.garage.garage-closing", backgroundColor:"#ffe71e") + state("unknown", label:'${name}', action:"refresh.refresh", icon:"st.doors.garage.garage-open", backgroundColor:"#ffffff") + state("closed", label:'${name}', action:"door control.open", icon:"st.doors.garage.garage-closed", backgroundColor:"#00a0dc", nextState:"opening") + state("open", label:'${name}', action:"door control.close", icon:"st.doors.garage.garage-open", backgroundColor:"#e86d13", nextState:"closing") + state("opening", label:'${name}', icon:"st.doors.garage.garage-opening", backgroundColor:"#e86d13") + state("closing", label:'${name}', icon:"st.doors.garage.garage-closing", backgroundColor:"#00a0dc") } standardTile("open", "device.door", inactiveLabel: false, decoration: "flat") { From 74552420bae66eef271a844d96660f180e3a7617 Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Tue, 14 Mar 2017 19:28:15 -0600 Subject: [PATCH 090/104] Hue: Re-add Hue bridge if deleted -Add Hue Bridge if missing during deviceSync --- smartapps/smartthings/hue-connect.src/hue-connect.groovy | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/smartapps/smartthings/hue-connect.src/hue-connect.groovy b/smartapps/smartthings/hue-connect.src/hue-connect.groovy index 047a8dd..26128be 100644 --- a/smartapps/smartthings/hue-connect.src/hue-connect.groovy +++ b/smartapps/smartthings/hue-connect.src/hue-connect.groovy @@ -472,8 +472,6 @@ def addBridge() { log.error "Failed to create Hue Bridge device" } } - } else { - log.debug "found ${d.displayName} with id $selectedHue already exists" } } } @@ -715,6 +713,9 @@ def doDeviceSync(){ log.warn "state.updating failed to clear" } + if (selectedHue) { + addBridge() + } convertBulbListToMap() poll() ssdpSubscribe() From 65f5597ccc66028af01f38ddde8db42f6f6246da Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Tue, 14 Mar 2017 21:00:22 -0700 Subject: [PATCH 091/104] Revert "Hue: Re-add Hue bridge if deleted" --- smartapps/smartthings/hue-connect.src/hue-connect.groovy | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/smartapps/smartthings/hue-connect.src/hue-connect.groovy b/smartapps/smartthings/hue-connect.src/hue-connect.groovy index 26128be..047a8dd 100644 --- a/smartapps/smartthings/hue-connect.src/hue-connect.groovy +++ b/smartapps/smartthings/hue-connect.src/hue-connect.groovy @@ -472,6 +472,8 @@ def addBridge() { log.error "Failed to create Hue Bridge device" } } + } else { + log.debug "found ${d.displayName} with id $selectedHue already exists" } } } @@ -713,9 +715,6 @@ def doDeviceSync(){ log.warn "state.updating failed to clear" } - if (selectedHue) { - addBridge() - } convertBulbListToMap() poll() ssdpSubscribe() From b5e8a46143af3f4328fea30b76f0e16906123d74 Mon Sep 17 00:00:00 2001 From: jackchi Date: Wed, 15 Mar 2017 09:57:37 -0700 Subject: [PATCH 092/104] [DVCSMP-2512] Standardize Page 17 of DTH UX Improvements --- .../aeon-multisensor-6.src/aeon-multisensor-6.groovy | 4 ++-- .../aeon-secure-smart-energy-switch-uk.groovy | 2 +- .../smartsense-moisture-sensor.groovy | 2 +- .../smartsense-motion.src/smartsense-motion.groovy | 4 ++-- .../tyco-door-window-sensor.groovy | 4 ++-- .../smartthings/zigbee-button.src/zigbee-button.groovy | 2 +- .../zwave-device-multichannel.groovy | 2 +- .../zwave-door-window-sensor.groovy | 4 ++-- devicetypes/smartthings/zwave-lock.src/zwave-lock.groovy | 4 ++-- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/devicetypes/smartthings/aeon-multisensor-6.src/aeon-multisensor-6.groovy b/devicetypes/smartthings/aeon-multisensor-6.src/aeon-multisensor-6.groovy index 4b194db..02f5ccc 100644 --- a/devicetypes/smartthings/aeon-multisensor-6.src/aeon-multisensor-6.groovy +++ b/devicetypes/smartthings/aeon-multisensor-6.src/aeon-multisensor-6.groovy @@ -82,8 +82,8 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"motion", type: "generic", width: 6, height: 4){ tileAttribute ("device.motion", key: "PRIMARY_CONTROL") { - attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0" - attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff" + attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00A0DC" + attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc" } } valueTile("temperature", "device.temperature", inactiveLabel: false, width: 2, height: 2) { diff --git a/devicetypes/smartthings/aeon-secure-smart-energy-switch-uk.src/aeon-secure-smart-energy-switch-uk.groovy b/devicetypes/smartthings/aeon-secure-smart-energy-switch-uk.src/aeon-secure-smart-energy-switch-uk.groovy index 70cfee6..d7e6eac 100644 --- a/devicetypes/smartthings/aeon-secure-smart-energy-switch-uk.src/aeon-secure-smart-energy-switch-uk.groovy +++ b/devicetypes/smartthings/aeon-secure-smart-energy-switch-uk.src/aeon-secure-smart-energy-switch-uk.groovy @@ -53,7 +53,7 @@ metadata { // tile definitions tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC" state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" } valueTile("power", "device.power", decoration: "flat") { diff --git a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy index 4d27081..b09d534 100644 --- a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy +++ b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy @@ -58,7 +58,7 @@ metadata { multiAttributeTile(name: "water", type: "generic", width: 6, height: 4) { tileAttribute("device.water", key: "PRIMARY_CONTROL") { attributeState "dry", label: "Dry", icon: "st.alarm.water.dry", backgroundColor: "#ffffff" - attributeState "wet", label: "Wet", icon: "st.alarm.water.wet", backgroundColor: "#53a7c0" + attributeState "wet", label: "Wet", icon: "st.alarm.water.wet", backgroundColor: "#00A0DC" } } valueTile("temperature", "device.temperature", inactiveLabel: false, width: 2, height: 2) { diff --git a/devicetypes/smartthings/smartsense-motion.src/smartsense-motion.groovy b/devicetypes/smartthings/smartsense-motion.src/smartsense-motion.groovy index bfcefb7..acb69fa 100644 --- a/devicetypes/smartthings/smartsense-motion.src/smartsense-motion.groovy +++ b/devicetypes/smartthings/smartsense-motion.src/smartsense-motion.groovy @@ -30,8 +30,8 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"motion", type: "generic", width: 6, height: 4){ tileAttribute ("device.motion", key: "PRIMARY_CONTROL") { - attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0" - attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff" + attributeState "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#00A0DC" + attributeState "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#cccccc" } } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false, width: 2, height: 2) { diff --git a/devicetypes/smartthings/tyco-door-window-sensor.src/tyco-door-window-sensor.groovy b/devicetypes/smartthings/tyco-door-window-sensor.src/tyco-door-window-sensor.groovy index 95238d4..305d3fe 100644 --- a/devicetypes/smartthings/tyco-door-window-sensor.src/tyco-door-window-sensor.groovy +++ b/devicetypes/smartthings/tyco-door-window-sensor.src/tyco-door-window-sensor.groovy @@ -41,8 +41,8 @@ metadata { tiles { standardTile("contact", "device.contact", width: 2, height: 2) { - state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e") - state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#79b821") + state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#e86d13") + state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#00A0DC") } valueTile("temperature", "device.temperature", inactiveLabel: false) { diff --git a/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy b/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy index 47dd320..f3e04f1 100644 --- a/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy +++ b/devicetypes/smartthings/zigbee-button.src/zigbee-button.groovy @@ -44,7 +44,7 @@ metadata { tiles { standardTile("button", "device.button", width: 2, height: 2) { state "default", label: "", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#ffffff" - state "button 1 pushed", label: "pushed #1", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#79b821" + state "button 1 pushed", label: "pushed #1", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#00A0DC" } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false) { diff --git a/devicetypes/smartthings/zwave-device-multichannel.src/zwave-device-multichannel.groovy b/devicetypes/smartthings/zwave-device-multichannel.src/zwave-device-multichannel.groovy index 14b05d0..89b972b 100644 --- a/devicetypes/smartthings/zwave-device-multichannel.src/zwave-device-multichannel.groovy +++ b/devicetypes/smartthings/zwave-device-multichannel.src/zwave-device-multichannel.groovy @@ -40,7 +40,7 @@ metadata { tiles { standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) { - state "on", label: '${name}', action: "switch.off", icon: "st.unknown.zwave.device", backgroundColor: "#79b821" + state "on", label: '${name}', action: "switch.off", icon: "st.unknown.zwave.device", backgroundColor: "#00A0DC" state "off", label: '${name}', action: "switch.on", icon: "st.unknown.zwave.device", backgroundColor: "#ffffff" } standardTile("switchOn", "device.switch", inactiveLabel: false, decoration: "flat") { diff --git a/devicetypes/smartthings/zwave-door-window-sensor.src/zwave-door-window-sensor.groovy b/devicetypes/smartthings/zwave-door-window-sensor.src/zwave-door-window-sensor.groovy index fb46c0e..ff8491d 100644 --- a/devicetypes/smartthings/zwave-door-window-sensor.src/zwave-door-window-sensor.groovy +++ b/devicetypes/smartthings/zwave-door-window-sensor.src/zwave-door-window-sensor.groovy @@ -41,8 +41,8 @@ metadata { // UI tile definitions tiles { standardTile("contact", "device.contact", width: 2, height: 2) { - state "open", label: '${name}', icon: "st.contact.contact.open", backgroundColor: "#ffa81e" - state "closed", label: '${name}', icon: "st.contact.contact.closed", backgroundColor: "#79b821" + state "open", label: '${name}', icon: "st.contact.contact.open", backgroundColor: "#e86d13" + state "closed", label: '${name}', icon: "st.contact.contact.closed", backgroundColor: "#00A0DC" } valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") { state "battery", label:'${currentValue}% battery', unit:"" diff --git a/devicetypes/smartthings/zwave-lock.src/zwave-lock.groovy b/devicetypes/smartthings/zwave-lock.src/zwave-lock.groovy index 0535ffa..6817e8b 100644 --- a/devicetypes/smartthings/zwave-lock.src/zwave-lock.groovy +++ b/devicetypes/smartthings/zwave-lock.src/zwave-lock.groovy @@ -38,10 +38,10 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"toggle", type: "generic", width: 6, height: 4){ tileAttribute ("device.lock", key: "PRIMARY_CONTROL") { - attributeState "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#79b821", nextState:"unlocking" + attributeState "locked", label:'locked', action:"lock.unlock", icon:"st.locks.lock.locked", backgroundColor:"#00A0DC", nextState:"unlocking" attributeState "unlocked", label:'unlocked', action:"lock.lock", icon:"st.locks.lock.unlocked", backgroundColor:"#ffffff", nextState:"locking" attributeState "unknown", label:"unknown", action:"lock.lock", icon:"st.locks.lock.unknown", backgroundColor:"#ffffff", nextState:"locking" - attributeState "locking", label:'locking', icon:"st.locks.lock.locked", backgroundColor:"#79b821" + attributeState "locking", label:'locking', icon:"st.locks.lock.locked", backgroundColor:"#00A0DC" attributeState "unlocking", label:'unlocking', icon:"st.locks.lock.unlocked", backgroundColor:"#ffffff" } } From 2678480244cbc295f136eefe7051eabad45590c7 Mon Sep 17 00:00:00 2001 From: ShunmugaSundar Date: Wed, 15 Mar 2017 23:58:43 +0530 Subject: [PATCH 093/104] [DVCSMP-2513] Standardize Page 18 of DTH UX Improvements --- .../smartthings/bose-soundtouch.src/bose-soundtouch.groovy | 4 ++-- .../smartthings/ct100-thermostat.src/ct100-thermostat.groovy | 4 ++-- .../nyce-open-closed-sensor.groovy | 4 ++-- .../zwave-plus-door-window-sensor.groovy | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/devicetypes/smartthings/bose-soundtouch.src/bose-soundtouch.groovy b/devicetypes/smartthings/bose-soundtouch.src/bose-soundtouch.groovy index 090be56..5aafc08 100644 --- a/devicetypes/smartthings/bose-soundtouch.src/bose-soundtouch.groovy +++ b/devicetypes/smartthings/bose-soundtouch.src/bose-soundtouch.groovy @@ -67,10 +67,10 @@ metadata { } standardTile("switch", "device.switch", width: 1, height: 1, canChangeIcon: true) { - state "on", label: '${name}', action: "forceOff", icon: "st.Electronics.electronics16", backgroundColor: "#79b821", nextState:"turningOff" + state "on", label: '${name}', action: "forceOff", icon: "st.Electronics.electronics16", backgroundColor: "#00a0dc", nextState:"turningOff" state "turningOff", label:'TURNING OFF', icon:"st.Electronics.electronics16", backgroundColor:"#ffffff" state "off", label: '${name}', action: "forceOn", icon: "st.Electronics.electronics16", backgroundColor: "#ffffff", nextState:"turningOn" - state "turningOn", label:'TURNING ON', icon:"st.Electronics.electronics16", backgroundColor:"#79b821" + state "turningOn", label:'TURNING ON', icon:"st.Electronics.electronics16", backgroundColor:"#00a0dc" } valueTile("1", "device.station1", decoration: "flat", canChangeIcon: false) { state "station1", label:'${currentValue}', action:"preset1" diff --git a/devicetypes/smartthings/ct100-thermostat.src/ct100-thermostat.groovy b/devicetypes/smartthings/ct100-thermostat.src/ct100-thermostat.groovy index 1737fed..93203fd 100644 --- a/devicetypes/smartthings/ct100-thermostat.src/ct100-thermostat.groovy +++ b/devicetypes/smartthings/ct100-thermostat.src/ct100-thermostat.groovy @@ -81,13 +81,13 @@ metadata { state "fanCirculate", label:'${name}', action:"switchFanMode" } controlTile("heatSliderControl", "device.heatingSetpoint", "slider", height: 1, width: 2, inactiveLabel: false) { - state "setHeatingSetpoint", action:"quickSetHeat", backgroundColor:"#d04e00" + state "setHeatingSetpoint", action:"quickSetHeat", backgroundColor:"#e86d13" } valueTile("heatingSetpoint", "device.heatingSetpoint", inactiveLabel: false, decoration: "flat") { state "heat", label:'${currentValue}° heat', backgroundColor:"#ffffff" } controlTile("coolSliderControl", "device.coolingSetpoint", "slider", height: 1, width: 2, inactiveLabel: false) { - state "setCoolingSetpoint", action:"quickSetCool", backgroundColor: "#1e9cbb" + state "setCoolingSetpoint", action:"quickSetCool", backgroundColor: "#00a0dc" } valueTile("coolingSetpoint", "device.coolingSetpoint", inactiveLabel: false, decoration: "flat") { state "cool", label:'${currentValue}° cool', backgroundColor:"#ffffff" diff --git a/devicetypes/smartthings/nyce-open-closed-sensor.src/nyce-open-closed-sensor.groovy b/devicetypes/smartthings/nyce-open-closed-sensor.src/nyce-open-closed-sensor.groovy index 8c66292..70e414d 100644 --- a/devicetypes/smartthings/nyce-open-closed-sensor.src/nyce-open-closed-sensor.groovy +++ b/devicetypes/smartthings/nyce-open-closed-sensor.src/nyce-open-closed-sensor.groovy @@ -42,8 +42,8 @@ metadata { tiles { standardTile("contact", "device.contact", width: 2, height: 2) { - state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e") - state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#79b821") + state("open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#e86d13") + state("closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#00a0dc") } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false) { diff --git a/devicetypes/smartthings/zwave-plus-door-window-sensor.src/zwave-plus-door-window-sensor.groovy b/devicetypes/smartthings/zwave-plus-door-window-sensor.src/zwave-plus-door-window-sensor.groovy index 93df68a..403e5d9 100644 --- a/devicetypes/smartthings/zwave-plus-door-window-sensor.src/zwave-plus-door-window-sensor.groovy +++ b/devicetypes/smartthings/zwave-plus-door-window-sensor.src/zwave-plus-door-window-sensor.groovy @@ -37,8 +37,8 @@ metadata { tiles(scale: 2) { multiAttributeTile(name:"contact", type: "generic", width: 6, height: 4){ tileAttribute ("device.contact", key: "PRIMARY_CONTROL") { - attributeState "open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#ffa81e" - attributeState "closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#79b821" + attributeState "open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#e86d13" + attributeState "closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#00a0dc" } } valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false, width: 2, height: 2) { From d30494172f9996f0fde5a20b339e76ef52199e1a Mon Sep 17 00:00:00 2001 From: Parijat Das Date: Wed, 15 Mar 2017 14:34:04 -0700 Subject: [PATCH 094/104] Added health-check for Linear GoControl Garage Door Opener --- .../zwave-garage-door-opener.src/.st-ignore | 2 + .../zwave-garage-door-opener.src/README.md | 41 +++++++++++++++++++ .../zwave-garage-door-opener.groovy | 14 +++++++ 3 files changed, 57 insertions(+) create mode 100644 devicetypes/smartthings/zwave-garage-door-opener.src/.st-ignore create mode 100644 devicetypes/smartthings/zwave-garage-door-opener.src/README.md diff --git a/devicetypes/smartthings/zwave-garage-door-opener.src/.st-ignore b/devicetypes/smartthings/zwave-garage-door-opener.src/.st-ignore new file mode 100644 index 0000000..f78b46e --- /dev/null +++ b/devicetypes/smartthings/zwave-garage-door-opener.src/.st-ignore @@ -0,0 +1,2 @@ +.st-ignore +README.md diff --git a/devicetypes/smartthings/zwave-garage-door-opener.src/README.md b/devicetypes/smartthings/zwave-garage-door-opener.src/README.md new file mode 100644 index 0000000..188521d --- /dev/null +++ b/devicetypes/smartthings/zwave-garage-door-opener.src/README.md @@ -0,0 +1,41 @@ +# Z-wave Garage Door Opener + +Cloud Execution + +Works with: + +* [Linear GoControl Garage Door Opener](https://www.smartthings.com/works-with-smartthings/other/linear-gocontrol-garage-door-opener) + +## Table of contents + +* [Capabilities](#capabilities) +* [Health](#device-health) +* [Troubleshooting](#troubleshooting) + +## Capabilities + +* **Actuator** - represents that a Device has commands +* **Door Control** - allow for the control of a door +* **Garage Door Control** - allow for the control of a garage door +* **Health Check** - indicates ability to get device health notifications +* **Contact Sensor** - can detect contact (with possible values - open/closed) +* **Refresh** - _refresh()_ command for status updates +* **Sensor** - detects sensor events + +## Device Health + +Linear GoControl Garage Door Opener is polled by the hub. +As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed. +Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins. +Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for +the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row, +it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time. + +* __32min__ checkInterval + +## Troubleshooting + +If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. +Pairing needs to be tried again by placing the device closer to the hub. +Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link: +* [Linear GoControl Garage Door Opener Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/204831116-GoControl-Linear-Garage-Door-Opener-GD00Z-4-) \ No newline at end of file diff --git a/devicetypes/smartthings/zwave-garage-door-opener.src/zwave-garage-door-opener.groovy b/devicetypes/smartthings/zwave-garage-door-opener.src/zwave-garage-door-opener.groovy index f22faf8..a0fa61e 100644 --- a/devicetypes/smartthings/zwave-garage-door-opener.src/zwave-garage-door-opener.groovy +++ b/devicetypes/smartthings/zwave-garage-door-opener.src/zwave-garage-door-opener.groovy @@ -18,12 +18,14 @@ metadata { capability "Actuator" capability "Door Control" capability "Garage Door Control" + capability "Health Check" capability "Contact Sensor" capability "Refresh" capability "Sensor" fingerprint deviceId: "0x4007", inClusters: "0x98" fingerprint deviceId: "0x4006", inClusters: "0x98" + fingerprint mfr:"014F", prod:"4744", model:"3030", deviceJoinName: "Linear GoControl Garage Door Opener" } simulator { @@ -63,6 +65,11 @@ metadata { import physicalgraph.zwave.commands.barrieroperatorv1.* +def updated(){ +// Device-Watch simply pings if no device events received for 32min(checkInterval) + sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) +} + def parse(String description) { def result = null if (description.startsWith("Err")) { @@ -287,6 +294,13 @@ def close() { secure(zwave.barrierOperatorV1.barrierOperatorSet(requestedBarrierState: BarrierOperatorSet.REQUESTED_BARRIER_STATE_CLOSE)) } +/** + * PING is used by Device-Watch in attempt to reach the Device + * */ +def ping() { + refresh() +} + def refresh() { secure(zwave.barrierOperatorV1.barrierOperatorGet()) } From 1326881142d8f516b82729760ca0d4bb7ed04ef8 Mon Sep 17 00:00:00 2001 From: "sushant.k1" Date: Wed, 15 Mar 2017 19:46:07 +0530 Subject: [PATCH 095/104] Implemented of Health Check for Aeon Siren. --- .../smartthings/aeon-siren.src/.st-ignore | 2 + .../smartthings/aeon-siren.src/README.md | 37 +++++++++++++++++++ .../aeon-siren.src/aeon-siren.groovy | 13 ++++++- 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 devicetypes/smartthings/aeon-siren.src/.st-ignore create mode 100644 devicetypes/smartthings/aeon-siren.src/README.md diff --git a/devicetypes/smartthings/aeon-siren.src/.st-ignore b/devicetypes/smartthings/aeon-siren.src/.st-ignore new file mode 100644 index 0000000..f78b46e --- /dev/null +++ b/devicetypes/smartthings/aeon-siren.src/.st-ignore @@ -0,0 +1,2 @@ +.st-ignore +README.md diff --git a/devicetypes/smartthings/aeon-siren.src/README.md b/devicetypes/smartthings/aeon-siren.src/README.md new file mode 100644 index 0000000..f4e0166 --- /dev/null +++ b/devicetypes/smartthings/aeon-siren.src/README.md @@ -0,0 +1,37 @@ +# Aeon Siren + +Cloud Execution + +Works with: + +* [Aeon Labs Siren (Gen 5)](https://www.smartthings.com/works-with-smartthings/aeon-labs/aeon-labs-siren-gen-5) + +## Table of contents + +* [Capabilities](#capabilities) +* [Health](#device-health) + +## Capabilities + +* **Actuator** - represents that a Device has commands +* **Alarm** - allows for interacting with devices that serve as alarms +* **Switch** - can detect state (possible values: on/off) +* **Health Check** - indicates ability to get device health notifications + +## Device Health + +Aeon Labs Siren (Gen 5) is polled by the hub. +As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed. +Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins. +Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for +the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row, +it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time. + +* __32min__ checkInterval + +## Troubleshooting + +If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. +Pairing needs to be tried again by placing the device closer to the hub. +Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link: +* [Aeon Labs Siren (Gen 5) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/204555240-Aeon-Labs-Siren-Gen-5-) \ No newline at end of file diff --git a/devicetypes/smartthings/aeon-siren.src/aeon-siren.groovy b/devicetypes/smartthings/aeon-siren.src/aeon-siren.groovy index a0fafb3..8b961aa 100644 --- a/devicetypes/smartthings/aeon-siren.src/aeon-siren.groovy +++ b/devicetypes/smartthings/aeon-siren.src/aeon-siren.groovy @@ -20,10 +20,11 @@ metadata { capability "Actuator" capability "Alarm" capability "Switch" + capability "Health Check" command "test" - fingerprint deviceId: "0x1005", inClusters: "0x5E,0x98" + fingerprint deviceId: "0x1005", inClusters: "0x5E,0x98", deviceJoinName: "Aeon Labs Siren (Gen 5)" } simulator { @@ -58,6 +59,9 @@ metadata { } def updated() { +// Device-Watch simply pings if no device events received for 32min(checkInterval) + sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) + if(!state.sound) state.sound = 1 if(!state.volume) state.volume = 3 @@ -148,3 +152,10 @@ def test() { private secure(physicalgraph.zwave.Command cmd) { zwave.securityV1.securityMessageEncapsulation().encapsulate(cmd).format() } + +/** + * PING is used by Device-Watch in attempt to reach the Device + * */ +def ping() { + secure(zwave.basicV1.basicGet()) +} \ No newline at end of file From 0a4d56be04e22c58a7caf929be1f4cd082008a6f Mon Sep 17 00:00:00 2001 From: "piyush.c" Date: Wed, 15 Mar 2017 19:09:17 +0530 Subject: [PATCH 096/104] [CHF-551] Health Check Z-Wave Lock --- .../smartthings/zwave-lock.src/.st-ignore | 2 + .../smartthings/zwave-lock.src/README.md | 45 +++++++++++++++++++ .../zwave-lock.src/zwave-lock.groovy | 11 +++++ 3 files changed, 58 insertions(+) create mode 100644 devicetypes/smartthings/zwave-lock.src/.st-ignore create mode 100644 devicetypes/smartthings/zwave-lock.src/README.md diff --git a/devicetypes/smartthings/zwave-lock.src/.st-ignore b/devicetypes/smartthings/zwave-lock.src/.st-ignore new file mode 100644 index 0000000..f78b46e --- /dev/null +++ b/devicetypes/smartthings/zwave-lock.src/.st-ignore @@ -0,0 +1,2 @@ +.st-ignore +README.md diff --git a/devicetypes/smartthings/zwave-lock.src/README.md b/devicetypes/smartthings/zwave-lock.src/README.md new file mode 100644 index 0000000..ae64536 --- /dev/null +++ b/devicetypes/smartthings/zwave-lock.src/README.md @@ -0,0 +1,45 @@ +# Z-Wave Switch + +Cloud Execution + +Works with: + +* [Yale Key Free Touchscreen Deadbolt (YRD240)](https://www.smartthings.com/works-with-smartthings/yale/yale-key-free-touchscreen-deadbolt-yrd240) + + +## Table of contents + +* [Capabilities](#capabilities) +* [Health](#device-health) +* [Troubleshooting](#Troubleshooting) + +## Capabilities + +* **Actuator** - represents that a Device has commands +* **Battery** - defines device uses a battery +* **Lock** - allows for the control of a lock device +* **Lock Codes** - allows for the lock code control of a lock device +* **Polling** - represents that poll() can be implemented for the device +* **Refresh** - _refresh()_ command for status updates +* **Sensor** - detects sensor events +* **Health Check** - indicates ability to get device health notifications + +## Device Health + +Z-Wave Locks are polled by the hub. +As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed. +Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins. +Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for +the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row, +it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time. + +* __32min__ checkInterval + +## Troubleshooting + +If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. +Pairing needs to be tried again by placing the device closer to the hub. +Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link: +* [General Z-Wave/ZigBee Yale Lock Troubleshooting](https://support.smartthings.com/hc/en-us/articles/205138400-How-to-connect-Yale-locks) + + diff --git a/devicetypes/smartthings/zwave-lock.src/zwave-lock.groovy b/devicetypes/smartthings/zwave-lock.src/zwave-lock.groovy index 0535ffa..2785467 100644 --- a/devicetypes/smartthings/zwave-lock.src/zwave-lock.groovy +++ b/devicetypes/smartthings/zwave-lock.src/zwave-lock.groovy @@ -20,11 +20,13 @@ metadata { capability "Sensor" capability "Lock Codes" capability "Battery" + capability "Health Check" command "unlockwtimeout" fingerprint deviceId: "0x4003", inClusters: "0x98" fingerprint deviceId: "0x4004", inClusters: "0x98" + fingerprint mfr:"0129", prod:"0002", model:"0000", deviceJoinName: "Yale Key Free Touchscreen Deadbolt" } simulator { @@ -67,6 +69,8 @@ import physicalgraph.zwave.commands.doorlockv1.* import physicalgraph.zwave.commands.usercodev1.* def updated() { + // Device-Watch simply pings if no device events received for 32min(checkInterval) + sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) try { if (!state.init) { state.init = true @@ -504,6 +508,13 @@ def unlockwtimeout() { lockAndCheck(DoorLockOperationSet.DOOR_LOCK_MODE_DOOR_UNSECURED_WITH_TIMEOUT) } +/** + * PING is used by Device-Watch in attempt to reach the Device + * */ +def ping() { + refresh() +} + def refresh() { def cmds = [secure(zwave.doorLockV1.doorLockOperationGet())] if (state.assoc == zwaveHubNodeId) { From 0f00c3c7c060bdaceb6d35e2d6f1d80b12eec51b Mon Sep 17 00:00:00 2001 From: Vinay Rao Date: Thu, 16 Mar 2017 04:37:35 -0700 Subject: [PATCH 097/104] Revert "Revert "Hue: Re-add Hue bridge if deleted"" --- smartapps/smartthings/hue-connect.src/hue-connect.groovy | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/smartapps/smartthings/hue-connect.src/hue-connect.groovy b/smartapps/smartthings/hue-connect.src/hue-connect.groovy index 047a8dd..26128be 100644 --- a/smartapps/smartthings/hue-connect.src/hue-connect.groovy +++ b/smartapps/smartthings/hue-connect.src/hue-connect.groovy @@ -472,8 +472,6 @@ def addBridge() { log.error "Failed to create Hue Bridge device" } } - } else { - log.debug "found ${d.displayName} with id $selectedHue already exists" } } } @@ -715,6 +713,9 @@ def doDeviceSync(){ log.warn "state.updating failed to clear" } + if (selectedHue) { + addBridge() + } convertBulbListToMap() poll() ssdpSubscribe() From a79d56e4676ee651519fe4459715b20e913d770e Mon Sep 17 00:00:00 2001 From: Zach Varberg Date: Thu, 16 Mar 2017 08:24:10 -0500 Subject: [PATCH 098/104] Properly handle tempOffset in smartsense sensors This was accidentally dropped as a part of the zigbee DTH cleanup that was done a while ago. This properly adjusts according to the offset. This resolves: https://smartthings.atlassian.net/browse/DVCSMP-2516 --- .../smartsense-moisture-sensor.groovy | 6 ++++++ .../smartsense-motion-sensor.groovy | 6 ++++++ .../smartsense-open-closed-sensor.groovy | 6 ++++++ .../smartsense-temp-humidity-sensor.groovy | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy index 4d27081..a9b68cd 100644 --- a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy +++ b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy @@ -106,6 +106,12 @@ def parse(String description) { } } } + } else if (map.name == "temperature") { + if (tempOffset) { + map.value = (int) map.value + (int) tempOffset + } + map.descriptionText = temperatureScale == 'C' ? '{{ device.displayName }} was {{ value }}°C' : '{{ device.displayName }} was {{ value }}°F' + map.translatable = true } log.debug "Parse returned $map" diff --git a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy index 2032d3f..c2265a2 100644 --- a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy +++ b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy @@ -112,6 +112,12 @@ def parse(String description) { map = getMotionResult(value) } } + } else if (map.name == "temperature") { + if (tempOffset) { + map.value = (int) map.value + (int) tempOffset + } + map.descriptionText = temperatureScale == 'C' ? '{{ device.displayName }} was {{ value }}°C' : '{{ device.displayName }} was {{ value }}°F' + map.translatable = true } log.debug "Parse returned $map" diff --git a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy index cf68b3a..fc08a0a 100644 --- a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy +++ b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy @@ -95,6 +95,12 @@ def parse(String description) { } } } + } else if (map.name == "temperature") { + if (tempOffset) { + map.value = (int) map.value + (int) tempOffset + } + map.descriptionText = temperatureScale == 'C' ? '{{ device.displayName }} was {{ value }}°C' : '{{ device.displayName }} was {{ value }}°F' + map.translatable = true } log.debug "Parse returned $map" diff --git a/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy b/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy index c0fe4b0..a655c21 100644 --- a/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy +++ b/devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy @@ -88,6 +88,12 @@ def parse(String description) { log.warn "TEMP REPORTING CONFIG FAILED- error code: ${descMap.data[0]}" } } + } else if (map.name == "temperature") { + if (tempOffset) { + map.value = (int) map.value + (int) tempOffset + } + map.descriptionText = temperatureScale == 'C' ? '{{ device.displayName }} was {{ value }}°C' : '{{ device.displayName }} was {{ value }}°F' + map.translatable = true } log.debug "Parse returned $map" From b93a05d450613f2e838e97e5159e4e0a4b7da7a6 Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Thu, 16 Mar 2017 19:09:23 -0600 Subject: [PATCH 099/104] DVCSMP-2453 HUE: add code to enable localization for Service Manage -Updated strings in app -Added i18 files --- .../hue-connect.src/hue-connect.groovy | 264 +++++++++--------- .../hue-connect.src/i18n/ar_AE.properties | 19 ++ .../hue-connect.src/i18n/ar_IL.properties | 19 ++ .../hue-connect.src/i18n/bg_BG.properties | 19 ++ .../hue-connect.src/i18n/cs_CZ.properties | 19 ++ .../hue-connect.src/i18n/da_DK.properties | 19 ++ .../hue-connect.src/i18n/de_AT.properties | 19 ++ .../hue-connect.src/i18n/de_CH.properties | 19 ++ .../hue-connect.src/i18n/de_DE.properties | 19 ++ .../hue-connect.src/i18n/el_GR.properties | 19 ++ .../hue-connect.src/i18n/en_AU.properties | 19 ++ .../hue-connect.src/i18n/en_CA.properties | 19 ++ .../hue-connect.src/i18n/en_GB.properties | 19 ++ .../hue-connect.src/i18n/en_IE.properties | 19 ++ .../hue-connect.src/i18n/en_NZ.properties | 19 ++ .../hue-connect.src/i18n/en_PH.properties | 19 ++ .../hue-connect.src/i18n/en_ZA.properties | 19 ++ .../hue-connect.src/i18n/es_ES.properties | 19 ++ .../hue-connect.src/i18n/es_US.properties | 19 ++ .../hue-connect.src/i18n/et_EE.properties | 19 ++ .../hue-connect.src/i18n/fi_FI.properties | 19 ++ .../hue-connect.src/i18n/fr_BE.properties | 19 ++ .../hue-connect.src/i18n/fr_CA.properties | 19 ++ .../hue-connect.src/i18n/fr_CH.properties | 19 ++ .../hue-connect.src/i18n/fr_FR.properties | 19 ++ .../hue-connect.src/i18n/hr_HR.properties | 19 ++ .../hue-connect.src/i18n/hu_HU.properties | 19 ++ .../hue-connect.src/i18n/it_IT.properties | 19 ++ .../hue-connect.src/i18n/ko_KR.properties | 19 ++ .../hue-connect.src/i18n/nb_NO.properties | 19 ++ .../hue-connect.src/i18n/nl_BE.properties | 19 ++ .../hue-connect.src/i18n/nl_NL.properties | 19 ++ .../hue-connect.src/i18n/pl_PL.properties | 19 ++ .../hue-connect.src/i18n/pt_BR.properties | 19 ++ .../hue-connect.src/i18n/pt_PT.properties | 19 ++ .../hue-connect.src/i18n/ro_RO.properties | 19 ++ .../hue-connect.src/i18n/ru_RU.properties | 19 ++ .../hue-connect.src/i18n/sk_SK.properties | 19 ++ .../hue-connect.src/i18n/sl_SI.properties | 19 ++ .../hue-connect.src/i18n/sq_AL.properties | 19 ++ .../hue-connect.src/i18n/sr_RS.properties | 19 ++ .../hue-connect.src/i18n/sv_SE.properties | 19 ++ .../hue-connect.src/i18n/th_TH.properties | 19 ++ .../hue-connect.src/i18n/tr_TR.properties | 19 ++ .../hue-connect.src/i18n/zh_CN.properties | 19 ++ 45 files changed, 965 insertions(+), 135 deletions(-) create mode 100644 smartapps/smartthings/hue-connect.src/i18n/ar_AE.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/ar_IL.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/bg_BG.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/cs_CZ.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/da_DK.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/de_AT.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/de_CH.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/de_DE.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/el_GR.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_AU.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_CA.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_GB.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_IE.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_NZ.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_PH.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_ZA.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/es_ES.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/es_US.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/et_EE.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/fi_FI.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/fr_BE.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/fr_CA.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/fr_CH.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/fr_FR.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/hr_HR.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/hu_HU.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/it_IT.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/ko_KR.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/nb_NO.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/nl_BE.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/nl_NL.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/pl_PL.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/pt_BR.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/pt_PT.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/ro_RO.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/ru_RU.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/sk_SK.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/sl_SI.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/sq_AL.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/sr_RS.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/sv_SE.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/th_TH.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/tr_TR.properties create mode 100644 smartapps/smartthings/hue-connect.src/i18n/zh_CN.properties diff --git a/smartapps/smartthings/hue-connect.src/hue-connect.groovy b/smartapps/smartthings/hue-connect.src/hue-connect.groovy index 047a8dd..b9c6dc6 100644 --- a/smartapps/smartthings/hue-connect.src/hue-connect.groovy +++ b/smartapps/smartthings/hue-connect.src/hue-connect.groovy @@ -15,12 +15,13 @@ * for the specific language governing permissions and limitations under the License. * */ +include 'localization' definition( name: "Hue (Connect)", namespace: "smartthings", author: "SmartThings", - description: "Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Adjust colors by going to the Thing detail screen for your Hue lights (tap the gear on Hue tiles).\n\nPlease update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.", + description: "Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please setup your Hue Bridge first, outside of the SmartThings app, using the Philips Hue application.", category: "SmartThings Labs", iconUrl: "https://s3.amazonaws.com/smartapp-icons/Partner/hue.png", iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Partner/hue@2x.png", @@ -28,11 +29,11 @@ definition( ) preferences { - page(name:"mainPage", title:"Hue Device Setup", content:"mainPage", refreshTimeout:5) - page(name:"bridgeDiscovery", title:"Hue Bridge Discovery", content:"bridgeDiscovery", refreshTimeout:5) - page(name:"bridgeDiscoveryFailed", title:"Bridge Discovery Failed", content:"bridgeDiscoveryFailed", refreshTimeout:0) - page(name:"bridgeBtnPush", title:"Linking with your Hue", content:"bridgeLinking", refreshTimeout:5) - page(name:"bulbDiscovery", title:"Hue Device Setup", content:"bulbDiscovery", refreshTimeout:5) + page(name: "mainPage", title: "", content: "mainPage", refreshTimeout: 5) + page(name: "bridgeDiscovery", title: "", content: "bridgeDiscovery", refreshTimeout: 5) + page(name: "bridgeDiscoveryFailed", title: "", content: "bridgeDiscoveryFailed", refreshTimeout: 0) + page(name: "bridgeBtnPush", title: "", content: "bridgeLinking", refreshTimeout: 5) + page(name: "bulbDiscovery", title: "", content: "bulbDiscovery", refreshTimeout: 5) } def mainPage() { @@ -47,15 +48,14 @@ def mainPage() { } } -def bridgeDiscovery(params=[:]) -{ +def bridgeDiscovery(params = [:]) { def bridges = bridgesDiscovered() int bridgeRefreshCount = !state.bridgeRefreshCount ? 0 : state.bridgeRefreshCount as int state.bridgeRefreshCount = bridgeRefreshCount + 1 def refreshInterval = 3 def options = bridges ?: [] - def numFound = options.size() ?: 0 + def numFound = options.size() ?: "0" if (numFound == 0) { if (state.bridgeRefreshCount == 25) { log.trace "Cleaning old bridges memory" @@ -75,25 +75,26 @@ def bridgeDiscovery(params=[:]) ssdpSubscribe() //bridge discovery request every 15 //25 seconds - if((bridgeRefreshCount % 5) == 0) { + if ((bridgeRefreshCount % 5) == 0) { discoverBridges() } //setup.xml request every 3 seconds except on discoveries - if(((bridgeRefreshCount % 3) == 0) && ((bridgeRefreshCount % 5) != 0)) { + if (((bridgeRefreshCount % 3) == 0) && ((bridgeRefreshCount % 5) != 0)) { verifyHueBridges() } - return dynamicPage(name:"bridgeDiscovery", title:"Discovery Started!", nextPage:"bridgeBtnPush", refreshInterval:refreshInterval, uninstall: true) { - section("Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. " + - "Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.") { - input "selectedHue", "enum", required:false, title:"Select Hue Bridge (${numFound} found)", multiple:false, options:options, submitOnChange: true + return dynamicPage(name: "bridgeDiscovery", title: "Discovery Started!", nextPage: "bridgeBtnPush", refreshInterval: refreshInterval, uninstall: true) { + section("Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.") { + + + input(name: "selectedHue", type: "enum", required: false, title: "Select Hue Bridge ({{numFound}} found)", messageArgs: [numFound: numFound], multiple: false, options: options, submitOnChange: true) } } } def bridgeDiscoveryFailed() { - return dynamicPage(name:"bridgeDiscoveryFailed", title: "Bridge Discovery Failed", nextPage: "bridgeDiscovery") { + return dynamicPage(name: "bridgeDiscoveryFailed", title: "Bridge Discovery Failed!", nextPage: "bridgeDiscovery") { section("Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.") { } } @@ -109,12 +110,12 @@ def bridgeLinking() { 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. " + paragraphText = "The current Hue username is invalid. Please press the button on your Hue Bridge to relink." } else { - paragraphText = "Press the button on your Hue Bridge to setup a link. " + 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." + 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) { @@ -127,13 +128,13 @@ def bridgeLinking() { paragraphText = "Linking to your hub was a success! Please click 'Next'!" } - if((linkRefreshcount % 2) == 0 && !state.username) { + if ((linkRefreshcount % 2) == 0 && !state.username) { sendDeveloperReq() } - return dynamicPage(name:"bridgeBtnPush", title:title, nextPage:nextPage, refreshInterval:refreshInterval) { + return dynamicPage(name: "bridgeBtnPush", title: title, nextPage: nextPage, refreshInterval: refreshInterval) { section("") { - paragraph """${paragraphText}""" + paragraph "$paragraphText" } } } @@ -149,18 +150,18 @@ def bulbDiscovery() { def allLightsFound = bulbsDiscovered() ?: [:] // List lights currently not added to the user (editable) - def newLights = allLightsFound.findAll {getChildDevice(it.key) == null} ?: [:] - newLights = newLights.sort {it.value.toLowerCase()} + def newLights = allLightsFound.findAll { getChildDevice(it.key) == null } ?: [:] + newLights = newLights.sort { it.value.toLowerCase() } // List lights already added to the user (not editable) - def existingLights = allLightsFound.findAll {getChildDevice(it.key) != null} ?: [:] - existingLights = existingLights.sort {it.value.toLowerCase()} + def existingLights = allLightsFound.findAll { getChildDevice(it.key) != null } ?: [:] + existingLights = existingLights.sort { it.value.toLowerCase() } - def numFound = newLights.size() ?: 0 - if (numFound == 0) + def numFound = newLights.size() ?: "0" + if (numFound == "0") app.updateSetting("selectedBulbs", "") - if((bulbRefreshCount % 5) == 0) { + if ((bulbRefreshCount % 5) == 0) { discoverHueBulbs() } def selectedBridge = state.bridges.find { key, value -> value?.serialNumber?.equalsIgnoreCase(selectedHue) } @@ -178,14 +179,14 @@ def bulbDiscovery() { } } - if (bulbRefreshCount > 200 && numFound == 0) { + def existingLightsSize = "${existingLights.size()}" + if (bulbRefreshCount > 200 && numFound == "0") { // Time out after 10 minutes state.inBulbDiscovery = false bulbRefreshCount = 0 - return dynamicPage(name:"bulbDiscovery", title:"Light Discovery Failed!", nextPage:"", refreshInterval:0, install:true, uninstall: true) { + return dynamicPage(name: "bulbDiscovery", title: "Light Discovery Failed!", nextPage: "", refreshInterval: 0, install: true, uninstall: true) { section("Failed to discover any lights, please try again later. Click Done to exit.") { - //input "selectedBulbs", "enum", required:false, title:"Select Hue Lights to add (${numFound} found)", multiple:true, submitOnChange: true, options:newLights - paragraph title: "Previously added Hue Lights (${existingLights.size()} added)", existingLightsDescription + paragraph title: "Previously added Hue Lights ({{existingLightsSize}} added)", messageArgs: [existingLightsSize: existingLightsSize], existingLightsDescription } section { href "bridgeDiscovery", title: title, description: "", state: selectedHue ? "complete" : "incomplete", params: [override: true] @@ -193,10 +194,10 @@ def bulbDiscovery() { } } else { - return dynamicPage(name:"bulbDiscovery", title:"Light Discovery Started!", nextPage:"", refreshInterval:refreshInterval, install:true, uninstall: true) { + return dynamicPage(name: "bulbDiscovery", title: "Light Discovery Started!", nextPage: "", refreshInterval: refreshInterval, install: true, uninstall: true) { section("Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.") { - input "selectedBulbs", "enum", required:false, title:"Select Hue Lights to add (${numFound} found)", multiple:true, submitOnChange: true, options:newLights - paragraph title: "Previously added Hue Lights (${existingLights.size()} added)", existingLightsDescription + input(name: "selectedBulbs", type: "enum", required: false, title: "Select Hue Lights to add ({{numFound}} found)", messageArgs: [numFound: numFound], multiple: true, submitOnChange: true, options: newLights) + paragraph title: "Previously added Hue Lights ({{existingLightsSize}} added)", messageArgs: [existingLightsSize: existingLightsSize], existingLightsDescription } section { href "bridgeDiscovery", title: title, description: "", state: selectedHue ? "complete" : "incomplete", params: [override: true] @@ -217,19 +218,19 @@ private sendDeveloperReq() { def token = app.id def host = getBridgeIP() sendHubCommand(new physicalgraph.device.HubAction([ - method: "POST", - path: "/api", + method : "POST", + path : "/api", headers: [ HOST: host ], - body: [devicetype: "$token-0"]], "${selectedHue}", [callback: "usernameHandler"])) + body : [devicetype: "$token-0"]], "${selectedHue}", [callback: "usernameHandler"])) } private discoverHueBulbs() { def host = getBridgeIP() sendHubCommand(new physicalgraph.device.HubAction([ - method: "GET", - path: "/api/${state.username}/lights", + method : "GET", + path : "/api/${state.username}/lights", headers: [ HOST: host ]], "${selectedHue}", [callback: "lightsHandler"])) @@ -238,8 +239,8 @@ private discoverHueBulbs() { private verifyHueBridge(String deviceNetworkId, String host) { log.trace "Verify Hue Bridge $deviceNetworkId" sendHubCommand(new physicalgraph.device.HubAction([ - method: "GET", - path: "/description.xml", + method : "GET", + path : "/description.xml", headers: [ HOST: host ]], deviceNetworkId, [callback: "bridgeDescriptionHandler"])) @@ -266,18 +267,18 @@ Map bridgesDiscovered() { } Map bulbsDiscovered() { - def bulbs = getHueBulbs() + def bulbs = getHueBulbs() def bulbmap = [:] if (bulbs instanceof java.util.Map) { bulbs.each { def value = "${it.value.name}" - def key = app.id +"/"+ it.value.id + def key = app.id + "/" + it.value.id bulbmap["${key}"] = value } } else { //backwards compatable bulbs.each { def value = "${it.name}" - def key = app.id +"/"+ it.id + def key = app.id + "/" + it.id logg += "$value - $key, " bulbmap["${key}"] = value } @@ -294,7 +295,7 @@ def getHueBridges() { } def getVerifiedHueBridges() { - getHueBridges().findAll{ it?.value?.verified == true } + getHueBridges().findAll { it?.value?.verified == true } } def installed() { @@ -331,7 +332,7 @@ def manualRefresh() { poll() } -def uninstalled(){ +def uninstalled() { // Remove bridgedevice connection to allow uninstall of smartapp even though bridge is listed // as user of smartapp app.updateSetting("bridgeDevice", null) @@ -371,7 +372,7 @@ private getDeviceType(hueType) { return null } -private addChildBulb(dni, hueType, name, hub, update=false, device = null) { +private addChildBulb(dni, hueType, name, hub, update = false, device = null) { def deviceType = getDeviceType(hueType) if (deviceType) { @@ -386,7 +387,7 @@ def addBulbs() { def bulbs = getHueBulbs() selectedBulbs?.each { dni -> def d = getChildDevice(dni) - if(!d) { + if (!d) { def newHueBulb if (bulbs instanceof java.util.Map) { newHueBulb = bulbs.find { (app.id + "/" + it.value.id) == dni } @@ -419,11 +420,11 @@ def addBulbs() { def addBridge() { def vbridges = getVerifiedHueBridges() - def vbridge = vbridges.find {"${it.value.mac}" == selectedHue} + def vbridge = vbridges.find { "${it.value.mac}" == selectedHue } - if(vbridge) { + if (vbridge) { def d = getChildDevice(selectedHue) - if(!d) { + if (!d) { // compatibility with old devices def newbridge = true childDevices.each { @@ -458,15 +459,15 @@ def addBridge() { childDevice?.sendEvent(name: "idNumber", value: idNumber) if (vbridge.value.ip && vbridge.value.port) { if (vbridge.value.ip.contains(".")) { - childDevice.sendEvent(name: "networkAddress", value: vbridge.value.ip + ":" + vbridge.value.port) - childDevice.updateDataValue("networkAddress", vbridge.value.ip + ":" + vbridge.value.port) + childDevice.sendEvent(name: "networkAddress", value: vbridge.value.ip + ":" + vbridge.value.port) + childDevice.updateDataValue("networkAddress", vbridge.value.ip + ":" + vbridge.value.port) } else { - childDevice.sendEvent(name: "networkAddress", value: convertHexToIP(vbridge.value.ip) + ":" + convertHexToInt(vbridge.value.port)) - childDevice.updateDataValue("networkAddress", convertHexToIP(vbridge.value.ip) + ":" + convertHexToInt(vbridge.value.port)) + childDevice.sendEvent(name: "networkAddress", value: convertHexToIP(vbridge.value.ip) + ":" + convertHexToInt(vbridge.value.port)) + childDevice.updateDataValue("networkAddress", convertHexToIP(vbridge.value.ip) + ":" + convertHexToInt(vbridge.value.port)) } } else { - childDevice.sendEvent(name: "networkAddress", value: convertHexToIP(vbridge.value.networkAddress) + ":" + convertHexToInt(vbridge.value.deviceAddress)) - childDevice.updateDataValue("networkAddress", convertHexToIP(vbridge.value.networkAddress) + ":" + convertHexToInt(vbridge.value.deviceAddress)) + childDevice.sendEvent(name: "networkAddress", value: convertHexToIP(vbridge.value.networkAddress) + ":" + convertHexToInt(vbridge.value.deviceAddress)) + childDevice.updateDataValue("networkAddress", convertHexToIP(vbridge.value.networkAddress) + ":" + convertHexToInt(vbridge.value.deviceAddress)) } } else { log.error "Failed to create Hue Bridge device" @@ -484,14 +485,14 @@ def ssdpBridgeHandler(evt) { def hub = evt?.hubId def parsedEvent = parseLanMessage(description) - parsedEvent << ["hub":hub] + parsedEvent << ["hub": hub] def bridges = getHueBridges() log.trace bridges.toString() if (!(bridges."${parsedEvent.ssdpUSN.toString()}")) { //bridge does not exist log.trace "Adding bridge ${parsedEvent.ssdpUSN}" - bridges << ["${parsedEvent.ssdpUSN.toString()}":parsedEvent] + bridges << ["${parsedEvent.ssdpUSN.toString()}": parsedEvent] } else { // update the values def ip = convertHexToIP(parsedEvent.networkAddress) @@ -512,7 +513,7 @@ def ssdpBridgeHandler(evt) { bridge.setDeviceNetworkId("${dniReceived}") dstate.mac = dniReceived // Check to see if selectedHue is a valid bridge, otherwise update it - def isSelectedValid = bridges?.find {it.value?.mac == selectedHue} + def isSelectedValid = bridges?.find { it.value?.mac == selectedHue } if (isSelectedValid == null) { log.warn "Correcting selectedHue in state" app.updateSetting("selectedHue", dniReceived) @@ -532,7 +533,7 @@ def ssdpBridgeHandler(evt) { dstate.ip = ip dstate.port = port dstate.name = "Philips hue ($ip)" - d.sendEvent(name:"networkAddress", value: host) + d.sendEvent(name: "networkAddress", value: host) d.updateDataValue("networkAddress", host) } if (dstate.mac != dniReceived) { @@ -541,7 +542,7 @@ def ssdpBridgeHandler(evt) { } if (selectedHue != dniReceived) { // Check to see if selectedHue is a valid bridge, otherwise update it - def isSelectedValid = bridges?.find {it.value?.mac == selectedHue} + def isSelectedValid = bridges?.find { it.value?.mac == selectedHue } if (isSelectedValid == null) { log.warn "Correcting selectedHue in state" app.updateSetting("selectedHue", dniReceived) @@ -556,7 +557,7 @@ void bridgeDescriptionHandler(physicalgraph.device.HubResponse hubResponse) { def body = hubResponse.xml if (body?.device?.modelName?.text()?.startsWith("Philips hue bridge")) { def bridges = getHueBridges() - def bridge = bridges.find {it?.key?.contains(body?.device?.UDN?.text())} + def bridge = bridges.find { it?.key?.contains(body?.device?.UDN?.text()) } if (bridge) { def idNumber = getBridgeIdNumber(body?.device?.serialNumber?.text()) @@ -565,10 +566,10 @@ void bridgeDescriptionHandler(physicalgraph.device.HubResponse hubResponse) { def name = body?.device?.friendlyName?.text() def index = name?.indexOf('(') if (index != -1) { - name = name.substring(0,index) + name = name.substring(0, index) name += " ($idNumber)" } - bridge.value << [name:name, serialNumber:body?.device?.serialNumber?.text(), idNumber: idNumber, verified: true] + bridge.value << [name: name, serialNumber: body?.device?.serialNumber?.text(), idNumber: idNumber, verified: true] } else { log.error "/description.xml returned a bridge that didn't exist" } @@ -611,7 +612,7 @@ def locationHandler(evt) { def hub = evt?.hubId def parsedEvent = parseLanMessage(description) - parsedEvent << ["hub":hub] + parsedEvent << ["hub": hub] if (parsedEvent?.ssdpTerm?.contains("urn:schemas-upnp-org:device:basic:1")) { //SSDP DISCOVERY EVENTS @@ -621,7 +622,7 @@ def locationHandler(evt) { if (!(bridges."${parsedEvent.ssdpUSN.toString()}")) { //bridge does not exist log.trace "Adding bridge ${parsedEvent.ssdpUSN}" - bridges << ["${parsedEvent.ssdpUSN.toString()}":parsedEvent] + bridges << ["${parsedEvent.ssdpUSN.toString()}": parsedEvent] } else { // update the values def ip = convertHexToIP(parsedEvent.networkAddress) @@ -656,12 +657,12 @@ def locationHandler(evt) { networkAddress = d.latestState('networkAddress').stringValue } log.trace "Host: $host - $networkAddress" - if(host != networkAddress) { + if (host != networkAddress) { log.debug "Device's port or ip changed for device $d..." dstate.ip = ip dstate.port = port dstate.name = "Philips hue ($ip)" - d.sendEvent(name:"networkAddress", value: host) + d.sendEvent(name: "networkAddress", value: host) d.updateDataValue("networkAddress", host) } } @@ -674,14 +675,14 @@ def locationHandler(evt) { def body = new XmlSlurper().parseText(parsedEvent.body) if (body?.device?.modelName?.text().startsWith("Philips hue bridge")) { def bridges = getHueBridges() - def bridge = bridges.find {it?.key?.contains(body?.device?.UDN?.text())} + def bridge = bridges.find { it?.key?.contains(body?.device?.UDN?.text()) } if (bridge) { - bridge.value << [name:body?.device?.friendlyName?.text(), serialNumber:body?.device?.serialNumber?.text(), verified: true] + bridge.value << [name: body?.device?.friendlyName?.text(), serialNumber: body?.device?.serialNumber?.text(), verified: true] } else { log.error "/description.xml returned a bridge that didn't exist" } } - } else if(headerString?.contains("json") && isValidSource(parsedEvent.mac)) { + } else if (headerString?.contains("json") && isValidSource(parsedEvent.mac)) { log.trace "description.xml response (application/json)" def body = new groovy.json.JsonSlurper().parseText(parsedEvent.body) if (body.success != null) { @@ -706,7 +707,7 @@ def locationHandler(evt) { } } -def doDeviceSync(){ +def doDeviceSync() { log.trace "Doing Hue Device Sync!" // Check if state.updating failed to clear @@ -787,7 +788,7 @@ private void checkBridgeStatus() { def isValidSource(macAddress) { def vbridges = getVerifiedHueBridges() - return (vbridges?.find {"${it.value.mac}" == macAddress}) != null + return (vbridges?.find { "${it.value.mac}" == macAddress }) != null } def isInBulbDiscovery() { @@ -801,19 +802,19 @@ private updateBulbState(messageBody, hub) { def toRemove = [:] toRemove << bulbs - messageBody.each { k,v -> + messageBody.each { k, v -> if (v instanceof Map) { if (bulbs[k] == null) { bulbs[k] = [:] } - bulbs[k] << [id: k, name: v.name, type: v.type, modelid: v.modelid, hub:hub, remove: false] + bulbs[k] << [id: k, name: v.name, type: v.type, modelid: v.modelid, hub: hub, remove: false] toRemove.remove(k) } } // Remove bulbs from state that are no longer discovered - toRemove.each { k,v -> + toRemove.each { k, v -> log.warn "${bulbs[k].name} no longer exists on bridge, removing" bulbs.remove(k) } @@ -937,12 +938,11 @@ private sendBasicEvents(device, param, value) { * * Example payload * [, - * {"success":{"/lights/5/state/bri":87}}, - * {"success":{"/lights/5/state/transitiontime":4}}, - * {"success":{"/lights/5/state/on":true}}, - * {"success":{"/lights/5/state/xy":[0.4152,0.5336]}}, - * {"success":{"/lights/5/state/alert":"none"}} - * ] + *{"success":{"/lights/5/state/bri":87}}, + *{"success":{"/lights/5/state/transitiontime":4}}, + *{"success":{"/lights/5/state/on":true}}, + *{"success":{"/lights/5/state/xy":[0.4152,0.5336]}}, + *{"success":{"/lights/5/state/alert":"none"}}* ] * * @param body a data structure of lists and maps based on a JSON data * @return empty array @@ -995,7 +995,7 @@ private handleCommandResponse(body) { * * Example payload * - * {"5":{"state": {"on":true,"bri":102,"hue":25600,"sat":254,"effect":"none","xy":[0.1700,0.7000],"ct":153,"alert":"none", + *{"5":{"state": {"on":true,"bri":102,"hue":25600,"sat":254,"effect":"none","xy":[0.1700,0.7000],"ct":153,"alert":"none", * "colormode":"xy","reachable":true}, "type": "Extended color light", "name": "Go", "modelid": "LLC020", "manufacturername": "Philips", * "uniqueid":"00:17:88:01:01:13:d5:11-0b", "swversion": "5.38.1.14378"}, * "6":{"state": {"on":true,"bri":103,"hue":14910,"sat":144,"effect":"none","xy":[0.4596,0.4105],"ct":370,"alert":"none", @@ -1069,9 +1069,9 @@ def hubVerification(bodytext) { def body = new XmlSlurper().parseText(bodytext) if (body?.device?.modelName?.text().startsWith("Philips hue bridge")) { def bridges = getHueBridges() - def bridge = bridges.find {it?.key?.contains(body?.device?.UDN?.text())} + def bridge = bridges.find { it?.key?.contains(body?.device?.UDN?.text()) } if (bridge) { - bridge.value << [name:body?.device?.friendlyName?.text(), serialNumber:body?.device?.serialNumber?.text(), verified: true] + bridge.value << [name: body?.device?.friendlyName?.text(), serialNumber: body?.device?.serialNumber?.text(), verified: true] } else { log.error "/description.xml returned a bridge that didn't exist" } @@ -1107,7 +1107,7 @@ def setLevel(childDevice, percent) { else level = Math.min(Math.round(percent * 254 / 100), 254) - createSwitchEvent(childDevice, level > 0 ,percent) + createSwitchEvent(childDevice, level > 0, percent) // For Zigbee lights, if level is set to 0 ST just turns them off without changing level // that means that the light will still be on when on is called next time @@ -1137,7 +1137,7 @@ def setHue(childDevice, percent) { def id = getId(childDevice) updateInProgress() // 0 - 65535 - def level = Math.min(Math.round(percent * 65535 / 100), 65535) + def level = Math.min(Math.round(percent * 65535 / 100), 65535) // TODO should this be done by app only or should we default to on? createSwitchEvent(childDevice, "on") put("lights/$id/state", [hue: level, on: true]) @@ -1149,7 +1149,7 @@ def setColorTemperature(childDevice, huesettings) { def id = getId(childDevice) updateInProgress() // 153 (6500K) to 500 (2000K) - def ct = hueSettings == 6500 ? 153 : Math.round(1000000/huesettings) + def ct = hueSettings == 6500 ? 153 : Math.round(1000000 / huesettings) createSwitchEvent(childDevice, "on") put("lights/$id/state", [ct: ct, on: true]) return "Setting color temperature to $ct" @@ -1267,7 +1267,7 @@ private getBridgeIP() { def d = getChildDevice(selectedHue) if (d) { if (d.getDeviceDataByName("networkAddress")) - host = d.getDeviceDataByName("networkAddress") + host = d.getDeviceDataByName("networkAddress") else host = d.latestState('networkAddress').stringValue } @@ -1291,26 +1291,26 @@ private getBridgeIP() { } private Integer convertHexToInt(hex) { - Integer.parseInt(hex,16) + Integer.parseInt(hex, 16) } def convertBulbListToMap() { try { if (state.bulbs instanceof java.util.List) { def map = [:] - state.bulbs?.unique {it.id}.each { bulb -> - map << ["${bulb.id}":["id":bulb.id, "name":bulb.name, "type": bulb.type, "modelid": bulb.modelid, "hub":bulb.hub, "online": bulb.online]] + state.bulbs?.unique { it.id }.each { bulb -> + map << ["${bulb.id}": ["id": bulb.id, "name": bulb.name, "type": bulb.type, "modelid": bulb.modelid, "hub": bulb.hub, "online": bulb.online]] } state.bulbs = map } } - catch(Exception e) { + catch (Exception e) { log.error "Caught error attempting to convert bulb list to map: $e" } } private String convertHexToIP(hex) { - [convertHexToInt(hex[0..1]),convertHexToInt(hex[2..3]),convertHexToInt(hex[4..5]),convertHexToInt(hex[6..7])].join(".") + [convertHexToInt(hex[0..1]), convertHexToInt(hex[2..3]), convertHexToInt(hex[4..5]), convertHexToInt(hex[6..7])].join(".") } private Boolean hasAllHubsOver(String desiredFirmware) { @@ -1327,7 +1327,7 @@ private List getRealHubFirmwareVersions() { * @param childDevice device to send event for * @param setSwitch The new switch state, "on" or "off" * @param setLevel Optional, switchLevel between 0-100, used if you set level to 0 for example since - * that should generate "off" instead of level change + * that should generate "off" instead of level change */ private void createSwitchEvent(childDevice, setSwitch, setLevel = null) { @@ -1358,7 +1358,7 @@ private void createSwitchEvent(childDevice, setSwitch, setLevel = null) { private colorPointsForModel(model = null) { def result = null switch (model) { - // Gamut A + // Gamut A case "LLC001": /* Monet, Renoir, Mondriaan (gen II) */ case "LLC005": /* Bloom (gen II) */ case "LLC006": /* Iris (gen III) */ @@ -1368,21 +1368,21 @@ private colorPointsForModel(model = null) { case "LLC013": /* Storylight */ case "LST001": /* Light Strips */ case "LLC010": /* Hue Living Colors Iris + */ - result = [r:[x: 0.704f, y: 0.296f], g:[x: 0.2151f, y: 0.7106f], b:[x: 0.138f, y: 0.08f]]; + result = [r: [x: 0.704f, y: 0.296f], g: [x: 0.2151f, y: 0.7106f], b: [x: 0.138f, y: 0.08f]]; break - // Gamut C + // Gamut C case "LLC020": /* Hue Go */ case "LST002": /* Hue LightStrips Plus */ - result = [r:[x: 0.692f, y: 0.308f], g:[x: 0.17f, y: 0.7f], b:[x: 0.153f, y: 0.048f]]; + result = [r: [x: 0.692f, y: 0.308f], g: [x: 0.17f, y: 0.7f], b: [x: 0.153f, y: 0.048f]]; break - // Gamut B + // Gamut B case "LCT001": /* Hue A19 */ case "LCT002": /* Hue BR30 */ case "LCT003": /* Hue GU10 */ case "LCT007": /* Hue A19 + */ case "LLM001": /* Color Light Module + */ default: - result = [r:[x: 0.675f, y: 0.322f], g:[x: 0.4091f, y: 0.518f], b:[x: 0.167f, y: 0.04f]]; + result = [r: [x: 0.675f, y: 0.322f], g: [x: 0.4091f, y: 0.518f], b: [x: 0.167f, y: 0.04f]]; } return result; @@ -1401,9 +1401,9 @@ private colorPointsForModel(model = null) { private float[] calculateXY(colorStr, model = null) { // #ffa013 - def cred = Integer.valueOf( colorStr.substring( 1, 3 ), 16 ) - def cgreen = Integer.valueOf( colorStr.substring( 3, 5 ), 16 ) - def cblue = Integer.valueOf( colorStr.substring( 5, 7 ), 16 ) + def cred = Integer.valueOf(colorStr.substring(1, 3), 16) + def cgreen = Integer.valueOf(colorStr.substring(3, 5), 16) + def cblue = Integer.valueOf(colorStr.substring(5, 7), 16) float red = cred / 255.0f; float green = cgreen / 255.0f; @@ -1473,7 +1473,6 @@ private float[] calculateXY(colorStr, model = null) { // xy[0] = PHHueHelper.precision(4, xy[0]); // xy[1] = PHHueHelper.precision(4, xy[1]); - // TODO needed, assume it just sets number of decimals? //xy[0] = PHHueHelper.precision(xy[0]); //xy[1] = PHHueHelper.precision(xy[1]); @@ -1489,10 +1488,10 @@ private float[] calculateXY(colorStr, model = null) { * * @param points the float array contain x and the y value. [x,y] * @param model the model of the lamp, example: "LCT001" for hue bulb. Used to calculate the color gamut. - * If this value is empty the default gamut values are used. + * If this value is empty the default gamut values are used. * @return the color value in hex (#ff03d3). If xy is null OR xy is not an array of size 2, Color. BLACK will be returned */ -private String colorFromXY(points, model ) { +private String colorFromXY(points, model) { if (points == null || model == null) { log.warn "Input color missing" @@ -1550,9 +1549,9 @@ private String colorFromXY(points, model ) { // float b = X * 0.0556f - Y * 0.2040f + Z * 1.0570f; // sRGB D65 conversion - float r = x2 * 1.656492f - y2 * 0.354851f - z2 * 0.255038f; - float g = -x2 * 0.707196f + y2 * 1.655397f + z2 * 0.036152f; - float b = x2 * 0.051713f - y2 * 0.121364f + z2 * 1.011530f; + float r = x2 * 1.656492f - y2 * 0.354851f - z2 * 0.255038f; + float g = -x2 * 0.707196f + y2 * 1.655397f + z2 * 0.036152f; + float b = x2 * 0.051713f - y2 * 0.121364f + z2 * 1.011530f; if (r > b && r > g && r > 1.0f) { // red is too big @@ -1614,7 +1613,6 @@ private String colorFromXY(points, model ) { return "#$r1$g1$b1" } - /** * Calculates crossProduct of two 2D vectors / points. * @@ -1643,8 +1641,8 @@ private getClosestPointToPoints(A, B, P) { def AP = [x: (P.x - A.x), y: (P.y - A.y)]; def AB = [x: (B.x - A.x), y: (B.y - A.y)]; - float ab2 = AB.x*AB.x + AB.y*AB.y; - float ap_ab = AP.x*AB.x + AP.y*AB.y; + float ab2 = AB.x * AB.x + AB.y * AB.y; + float ap_ab = AP.x * AB.x + AP.y * AB.y; float t = ap_ab / ab2; @@ -1684,9 +1682,9 @@ private float getDistanceBetweenTwoPoints(one, two) { */ private boolean checkPointInLampsReach(p, colorPoints) { - def red = colorPoints.r; + def red = colorPoints.r; def green = colorPoints.g; - def blue = colorPoints.b; + def blue = colorPoints.b; def v1 = [x: (green.x - red.x), y: (green.y - red.y)]; def v2 = [x: (blue.x - red.x), y: (blue.y - red.y)]; @@ -1696,12 +1694,9 @@ private boolean checkPointInLampsReach(p, colorPoints) { float s = crossProduct(q, v2) / crossProduct(v1, v2); float t = crossProduct(v1, q) / crossProduct(v1, v2); - if ( (s >= 0.0f) && (t >= 0.0f) && (s + t <= 1.0f)) - { + if ((s >= 0.0f) && (t >= 0.0f) && (s + t <= 1.0f)) { return true; - } - else - { + } else { return false; } } @@ -1714,10 +1709,10 @@ private boolean checkPointInLampsReach(p, colorPoints) { * * @return HSV representation in an array (0-100) [hue, sat, value] */ -def hexToHsv(colorStr){ - def r = Integer.valueOf( colorStr.substring( 1, 3 ), 16 ) / 255 - def g = Integer.valueOf( colorStr.substring( 3, 5 ), 16 ) / 255 - def b = Integer.valueOf( colorStr.substring( 5, 7 ), 16 ) / 255 +def hexToHsv(colorStr) { + def r = Integer.valueOf(colorStr.substring(1, 3), 16) / 255 + def g = Integer.valueOf(colorStr.substring(3, 5), 16) / 255 + def b = Integer.valueOf(colorStr.substring(5, 7), 16) / 255 def max = Math.max(Math.max(r, g), b) def min = Math.min(Math.min(r, g), b) @@ -1727,10 +1722,10 @@ def hexToHsv(colorStr){ def d = max - min s = max == 0 ? 0 : d / max - if(max == min){ + if (max == min) { h = 0 - }else{ - switch(max){ + } else { + switch (max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break case g: h = (b - r) / d + 2; break case b: h = (r - g) / d + 4; break @@ -1745,13 +1740,13 @@ def hexToHsv(colorStr){ * Converts HSV/HSB color to RGB in hex. * Algorithm based on http://en.wikipedia.org/wiki/HSV_color_space. * - * @param hue hue 0-100 - * @param sat saturation 0-100 - * @param value value 0-100 (defaults to 100) + * @param hue hue 0-100 + * @param sat saturation 0-100 + * @param value value 0-100 (defaults to 100) * @return the color in hex (#ff03d3) */ -def hsvToHex(hue, sat, value = 100){ +def hsvToHex(hue, sat, value = 100) { def r, g, b; def h = hue / 100 def s = sat / 100 @@ -1803,4 +1798,3 @@ def hsvToHex(hue, sat, value = 100){ return "#$r1$g1$b1" } - diff --git a/smartapps/smartthings/hue-connect.src/i18n/ar_AE.properties b/smartapps/smartthings/hue-connect.src/i18n/ar_AE.properties new file mode 100644 index 0000000..f637d4c --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/ar_AE.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=يوفر لك إمكانية توصيل مصابيح Philips Hue بـ SmartThings والتحكم بها من منطقة Things أو لوحة المعلومات في تطبيق SmartThings للهواتف المحمولة. يُرجى تحديث Hue Bridge أولاً، خارج تطبيق SmartThings، باستخدام تطبيق Philips Hue. +'''Discovery Started!'''=بدأ الاكتشاف! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=يُرجى الانتظار ريثما نكتشف Hue Bridge الخاص بك. تجدر الإشارة إلى أنه عليك أوّلاً تكوين Hue Bridge والمصابيح باستخدام تطبيق Philips Hue. قد يستغرق الاكتشاف خمس دقائق أو أكثر، لذا اجلس واسترخِ! اختر جهازك أدناه بمجرد اكتشافه. +'''Select Hue Bridge ({{numFound}} found)'''=تحديد Hue Bridge ‏(تم العثور على ‎{{numFound}}‎) +'''Bridge Discovery Failed!'''=فشل اكتشاف Bridge +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=فشل اكتشاف أي Hue Bridges. يُرجى التأكد من اتصال Hue Bridge بالشبكة نفسها التي يتصل بها موزع SmartThings الخاص بك، ومن أنه متصل بمصدر طاقة أيضاً. +'''Linking with your Hue'''=الارتباط بجهاز Hue الخاص بك +'''The current Hue username is invalid. Please press the button on your Hue Bridge to relink.'''=اسم مستخدم Hue الحالي غير صالح. يُرجى الضغط على الزر الموجود على Hue Bridge الخاص بك لإعادة الارتباط. +'''Press the button on your Hue Bridge to setup a link.'''=اضغط على الزر الموجود على Hue Bridge الخاص بك لإعداد رابط. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=لم تحدد Hue Bridge، يُرجى الضغط على 'تم' وتحديد واحد قبل النقر فوق التالي. +'''Success!'''=نجحت العملية! +'''Linking to your hub was a success! Please click 'Next'!'''=نجح الارتباط بالموزع الخاص بك! يُرجى النقر فوق ”التالي“! +'''Find bridges'''=بحث عن أجهزة bridges +'''Light Discovery Failed!'''=فشل اكتشاف المصباح! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=فشل اكتشاف أي مصابيح، يُرجى المحاولة مرة أخرى لاحقاً. انقر فوق تم للخروج. +'''Select Hue Lights to add ({{numFound}} found)'''=حدد مصابيح Hue التي تريد إضافتها ‏(تم العثور على ‎{{numFound}}‎) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=مصابيح Hue المضافة مُسبقاً (تمت إضافة ‎{{existingLightsSize}}‎) +'''Light Discovery Started!'''=بدأ اكتشاف المصباح! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=يُرجى الانتظار ريثما نكتشف مصابيح Hue الخاصة بك. قد يستغرق الاكتشاف خمس دقائق أو أكثر، لذا اجلس واسترخِ! اختر جهازك أدناه بمجرد اكتشافه. diff --git a/smartapps/smartthings/hue-connect.src/i18n/ar_IL.properties b/smartapps/smartthings/hue-connect.src/i18n/ar_IL.properties new file mode 100644 index 0000000..f637d4c --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/ar_IL.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=يوفر لك إمكانية توصيل مصابيح Philips Hue بـ SmartThings والتحكم بها من منطقة Things أو لوحة المعلومات في تطبيق SmartThings للهواتف المحمولة. يُرجى تحديث Hue Bridge أولاً، خارج تطبيق SmartThings، باستخدام تطبيق Philips Hue. +'''Discovery Started!'''=بدأ الاكتشاف! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=يُرجى الانتظار ريثما نكتشف Hue Bridge الخاص بك. تجدر الإشارة إلى أنه عليك أوّلاً تكوين Hue Bridge والمصابيح باستخدام تطبيق Philips Hue. قد يستغرق الاكتشاف خمس دقائق أو أكثر، لذا اجلس واسترخِ! اختر جهازك أدناه بمجرد اكتشافه. +'''Select Hue Bridge ({{numFound}} found)'''=تحديد Hue Bridge ‏(تم العثور على ‎{{numFound}}‎) +'''Bridge Discovery Failed!'''=فشل اكتشاف Bridge +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=فشل اكتشاف أي Hue Bridges. يُرجى التأكد من اتصال Hue Bridge بالشبكة نفسها التي يتصل بها موزع SmartThings الخاص بك، ومن أنه متصل بمصدر طاقة أيضاً. +'''Linking with your Hue'''=الارتباط بجهاز Hue الخاص بك +'''The current Hue username is invalid. Please press the button on your Hue Bridge to relink.'''=اسم مستخدم Hue الحالي غير صالح. يُرجى الضغط على الزر الموجود على Hue Bridge الخاص بك لإعادة الارتباط. +'''Press the button on your Hue Bridge to setup a link.'''=اضغط على الزر الموجود على Hue Bridge الخاص بك لإعداد رابط. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=لم تحدد Hue Bridge، يُرجى الضغط على 'تم' وتحديد واحد قبل النقر فوق التالي. +'''Success!'''=نجحت العملية! +'''Linking to your hub was a success! Please click 'Next'!'''=نجح الارتباط بالموزع الخاص بك! يُرجى النقر فوق ”التالي“! +'''Find bridges'''=بحث عن أجهزة bridges +'''Light Discovery Failed!'''=فشل اكتشاف المصباح! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=فشل اكتشاف أي مصابيح، يُرجى المحاولة مرة أخرى لاحقاً. انقر فوق تم للخروج. +'''Select Hue Lights to add ({{numFound}} found)'''=حدد مصابيح Hue التي تريد إضافتها ‏(تم العثور على ‎{{numFound}}‎) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=مصابيح Hue المضافة مُسبقاً (تمت إضافة ‎{{existingLightsSize}}‎) +'''Light Discovery Started!'''=بدأ اكتشاف المصباح! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=يُرجى الانتظار ريثما نكتشف مصابيح Hue الخاصة بك. قد يستغرق الاكتشاف خمس دقائق أو أكثر، لذا اجلس واسترخِ! اختر جهازك أدناه بمجرد اكتشافه. diff --git a/smartapps/smartthings/hue-connect.src/i18n/bg_BG.properties b/smartapps/smartthings/hue-connect.src/i18n/bg_BG.properties new file mode 100644 index 0000000..bb61c1b --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/bg_BG.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Позволява да свържете Philips Hue lights (лампи) със SmartThings и да ги управлявате от областта Things (Уреди) или Dashboard (Табло) в приложението SmartThings Mobile. Първо актуализирайте своя Hue Bridge (Мост) извън приложението SmartThings, като използвате приложението Philips Hue. +'''Discovery Started!'''=Откриването е стартирано! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Изчакайте, докато намерим вашия Hue Bridge (Мост). Обърнете внимание, че първо трябва да конфигурирате своя Hue Bridge (Мост) и Lights (Лампи) с помощта на приложението Philips Hue. Намирането може да отнеме пет минути или повече, така че седнете и се отпуснете! Изберете устройството си по-долу, след като бъде открито. +'''Select Hue Bridge ({{numFound}} found)'''=Избор на Hue Bridge (Мост) ({{numFound}} са открити) +'''Bridge Discovery Failed!'''=Откриването на Bridge (Мост) е неуспешно! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Неуспешно откриване на Hue Bridges (Мост). Уверете се, че Hue Bridge (Мост) е свързан към същата мрежа като концентратора на SmartThings, както и че има захранване. +'''Linking with your Hue'''=Свързване с Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Текущото потребителско име за Hue е невалидно. Натиснете бутона на вашия Hue Bridge (Мост) за повторно свързване. +'''Press the button on your Hue Bridge to setup a link.'''=Натиснете бутона на вашия Hue Bridge (Мост), за да установите връзка. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Не сте избрали Hue Bridge (Мост), натиснете „Done“ (Готово) и изберете един, преди да щракнете върху Next (Напред). +'''Success!'''=Успех! +'''Linking to your hub was a success! Please click 'Next'!'''=Свързването с вашия концентратор е успешно. Щракнете върху „Next“ (Напред)! +'''Find bridges'''=Откриване на мостове +'''Light Discovery Failed!'''=Откриването на лампата е неуспешно! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Неуспешно откриване на лампи, опитайте отново по-късно. Щракнете върху Done (Готово) за изход. +'''Select Hue Lights to add ({{numFound}} found)'''=Изберете Hue Lights (Лампи) за добавяне ({{numFound}} са открити) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=По-рано добавени Hue Lights (Лампи) ({{existingLightsSize}} са добавени) +'''Light Discovery Started!'''=Откриването на лампи е стартирано! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Изчакайте, докато намерим вашите Hue Lights (Лампи). Намирането може да отнеме пет минути или повече, така че седнете и се отпуснете! Изберете устройството си по-долу, след като бъде открито. diff --git a/smartapps/smartthings/hue-connect.src/i18n/cs_CZ.properties b/smartapps/smartthings/hue-connect.src/i18n/cs_CZ.properties new file mode 100644 index 0000000..0f23b67 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/cs_CZ.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Umožňuje připojit světla Philips Hue lights (světla) pomocí SmartThings a ovládat je z oblasti Things (Věci) nebo z Dashboard (Řídicí panel) v mobilní aplikaci SmartThings. Nejprve aktualizujte Hue Bridge (můstek) mimo aplikaci SmartThings, pomocí aplikace Philips Hue. +'''Discovery Started!'''=Zjišťování byla zahájeno! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počkejte na rozpoznání Hue Bridge (můstek). Uvědomte si, že musíte nejprve nakonfigurovat Hue Bridge (můstek) a Lights (světla) pomocí aplikace Philips Hue. Rozpoznání může trvat pět minut i déle, proto se klidně posaďte a počkejte! Po rozpoznání vyberte níže dané zařízení. +'''Select Hue Bridge ({{numFound}} found)'''=Vyberte Hue Bridge (můstek) (nalezeno {{numFound}}) +'''Bridge Discovery Failed!'''=Zjišťování Bridge (můstek) se nezdařilo! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nepodařilo se najít žádný Hue Bridge (můstek). Zkontrolujte, zda je Hue Bridge (můstek) připojený ke stejné síti jako SmartThings Hub a zda je napájený. +'''Linking with your Hue'''=Propojení s Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Aktuální uživatelské jméno Hue je neplatné. Stiskněte tlačítko na Hue Bridge (můstek) a obnovte propojení. +'''Press the button on your Hue Bridge to setup a link.'''=Stiskněte tlačítko na Hue Bridge (můstek) a nastavte propojení. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nevybrali jste Hue Bridge (můstek); stiskněte tlačítko „Done“ (Hotovo) a jeden vyberte, než klepnete na tlačítko Next (Další). +'''Success!'''=Úspěch! +'''Linking to your hub was a success! Please click 'Next'!'''=Propojení s hub bylo úspěšně navázáno! Klepněte na tlačítko „Next“ (Další)! +'''Find bridges'''=Najít bridge +'''Light Discovery Failed!'''=Zjišťování světel se nezdařilo! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nepodařilo najít žádná světla, opakujte akci později. Ukončete akci klepnutím na tlačítko Done (Hotovo). +'''Select Hue Lights to add ({{numFound}} found)'''=Vyberte Hue lights (světla), která chcete přidat (nalezeno {{numFound}}) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Dříve přidaná Hue Lights (světla) (přidáno {{existingLightsSize}}) +'''Light Discovery Started!'''=Zjišťování světel bylo zahájeno! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počkejte na rozpoznání Hue Lights (světla). Rozpoznání může trvat pět minut i déle, proto se klidně posaďte a počkejte! Po rozpoznání vyberte níže dané zařízení. diff --git a/smartapps/smartthings/hue-connect.src/i18n/da_DK.properties b/smartapps/smartthings/hue-connect.src/i18n/da_DK.properties new file mode 100644 index 0000000..281a0ac --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/da_DK.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Giver dig mulighed for at forbinde dine Philips Hue Lights (Philips Hue-lamper) med SmartThings og styre dem fra dit Things-område eller dit Dashboard i SmartThings-mobilappen. Opdater din Hue Bridge (Hue-bro) først (uden for SmartThings-appen) ved hjælp af Philips Hue-appen. +'''Discovery Started!'''=Opdagelse er startet! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vent, mens vi finder din Hue Bridge (Hue-bro). Bemærk, at du først skal konfigurere din Hue Bridge og Lights (Lamper) med Philips Hue-applikationen. Det kan tage fem minutter eller mere at finde enheden, så bare læn dig tilbage, og slap af! Vælg din enhed herunder, når den er fundet. +'''Select Hue Bridge ({{numFound}} found)'''=Vælg Hue Bridge (Hue-bro) ({{numFound}} fundet) +'''Bridge Discovery Failed!'''=Opdagelse af Bridge (bro) mislykkedes! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Kunne ikke finde nogen Hue Bridges (Hue-broer). Bekræft, at Hue Bridge (Hue-broen) er tilsluttet det samme netværk som din SmartThings-hub, og at der er strøm på den. +'''Linking with your Hue'''=Sammenkædning med din Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Det aktuelle Hue-brugernavn er ugyldigt. Tryk på knappen på din Hue Bridge (Hue-bro) for at tilknytte igen. +'''Press the button on your Hue Bridge to setup a link.'''=Tryk på knappen på din Hue Bridge (Hue-bro) for at oprette et link. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Du har ikke valgt en Hue Bridge (Hue-bro). Tryk på “Done” (Udført), og vælg én, inden du klikker på Next (Næste). +'''Success!'''=Succes! +'''Linking to your hub was a success! Please click 'Next'!'''=Sammenkædningen med din hub blev gennemført! Klik på “Next” (Næste)! +'''Find bridges'''=Find bridges (broer) +'''Light Discovery Failed!'''=Opdagelse af lights (lamper) mislykkedes! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Kunne ikke finde nogen lights (lamper). Prøv igen senere. Klik på Done (Udført) for at afslutte. +'''Select Hue Lights to add ({{numFound}} found)'''=Vælg Hue Lights (Hue-lamper), der skal tilføjes ({{numFound}} fundet) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Tidligere tilføjede Hue Lights (Hue-lamper) ({{existingLightsSize}} tilføjet) +'''Light Discovery Started!'''=Opdagelse af lights (lamper) er startet! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vent, mens vi finder dine Hue Lights (Hue-lamper). Det kan tage fem minutter eller mere at finde enheden, så bare læn dig tilbage, og slap af! Vælg din enhed herunder, når den er fundet. diff --git a/smartapps/smartthings/hue-connect.src/i18n/de_AT.properties b/smartapps/smartthings/hue-connect.src/i18n/de_AT.properties new file mode 100644 index 0000000..def2273 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/de_AT.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Sie können Ihre Phillips Hue Lights (Lichter) mit SmartThings verbinden und aus Ihrem Things-Bereich oder dem Dashboard in der SmartThings-Mobile-App aus steuern. Bitte aktualisieren Sie zunächst Ihre Hue Bridge (Brücke) außerhalb der SmartThings-App mit der Phillips-Hue-App. +'''Discovery Started!'''=Erkennung gestartet! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Bridge (Brücke) erkannt wurde. Beachten Sie bitte, dass Sie Ihre Hue Bridge (Brücke) und Lights (Lichter) zunächst mit der Philips Hue-Anwendung konfigurieren müssen. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. +'''Select Hue Bridge ({{numFound}} found)'''=Hue Bridge (Brücke) auswählen ({{numFound}} gefunden) +'''Bridge Discovery Failed!'''=Bridge (Brücke)-Erkennung fehlgeschlagen! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Es konnten keine Hue Bridges (Brücken) gefunden werden. Bitte bestätigen Sie, dass die Hue Bridge (Brücke) am gleichen Netzwerk wie Ihr SmartThings Hub angeschlossen ist und Strom erhält. +'''Linking with your Hue'''=Kopplung mit Ihrem Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Der aktuelle Hue-Benutzername ist ungültig. Bitte drücken Sie für eine erneute Kopplung die Taste auf Ihrer Hue Bridge (Brücke). +'''Press the button on your Hue Bridge to setup a link.'''=Drücken Sie die Taste auf Ihrer Hue-Bridge (Brücke), um eine Kopplung einzurichten. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Sie haben keine Hue Bridge (Brücke) ausgewählt. Bitte drücken Sie ‚Done‘ (OK) und wählen Sie eine aus, bevor Sie auf Next (Weiter) drücken. +'''Success!'''=Erfolgreich verbunden! +'''Linking to your hub was a success! Please click 'Next'!'''=Die Kopplung mit Ihrem Hub war erfolgreich! Bitte klicken Sie auf ‚Next‘ (Weiter)! +'''Find bridges'''=Bridges (Brücken) suchen +'''Light Discovery Failed!'''=Lichterkennung fehlgeschlagen! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Es wurden keine Lichter erkannt. Bitte versuchen Sie es später erneut. Klicken Sie zum Beenden auf „Done“ (OK). +'''Select Hue Lights to add ({{numFound}} found)'''=Wählen Sie die hinzuzufügenden Hue Lights (Lichter) aus ({{numFound}} gefunden) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Zuvor hinzugefügte Hue Lights (Lichter) ({{existingLightsSize}} hinzugefügt) +'''Light Discovery Started!'''=Lichterkennung gestartet! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Lights (Lichter) erkannt wurden. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. diff --git a/smartapps/smartthings/hue-connect.src/i18n/de_CH.properties b/smartapps/smartthings/hue-connect.src/i18n/de_CH.properties new file mode 100644 index 0000000..def2273 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/de_CH.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Sie können Ihre Phillips Hue Lights (Lichter) mit SmartThings verbinden und aus Ihrem Things-Bereich oder dem Dashboard in der SmartThings-Mobile-App aus steuern. Bitte aktualisieren Sie zunächst Ihre Hue Bridge (Brücke) außerhalb der SmartThings-App mit der Phillips-Hue-App. +'''Discovery Started!'''=Erkennung gestartet! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Bridge (Brücke) erkannt wurde. Beachten Sie bitte, dass Sie Ihre Hue Bridge (Brücke) und Lights (Lichter) zunächst mit der Philips Hue-Anwendung konfigurieren müssen. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. +'''Select Hue Bridge ({{numFound}} found)'''=Hue Bridge (Brücke) auswählen ({{numFound}} gefunden) +'''Bridge Discovery Failed!'''=Bridge (Brücke)-Erkennung fehlgeschlagen! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Es konnten keine Hue Bridges (Brücken) gefunden werden. Bitte bestätigen Sie, dass die Hue Bridge (Brücke) am gleichen Netzwerk wie Ihr SmartThings Hub angeschlossen ist und Strom erhält. +'''Linking with your Hue'''=Kopplung mit Ihrem Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Der aktuelle Hue-Benutzername ist ungültig. Bitte drücken Sie für eine erneute Kopplung die Taste auf Ihrer Hue Bridge (Brücke). +'''Press the button on your Hue Bridge to setup a link.'''=Drücken Sie die Taste auf Ihrer Hue-Bridge (Brücke), um eine Kopplung einzurichten. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Sie haben keine Hue Bridge (Brücke) ausgewählt. Bitte drücken Sie ‚Done‘ (OK) und wählen Sie eine aus, bevor Sie auf Next (Weiter) drücken. +'''Success!'''=Erfolgreich verbunden! +'''Linking to your hub was a success! Please click 'Next'!'''=Die Kopplung mit Ihrem Hub war erfolgreich! Bitte klicken Sie auf ‚Next‘ (Weiter)! +'''Find bridges'''=Bridges (Brücken) suchen +'''Light Discovery Failed!'''=Lichterkennung fehlgeschlagen! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Es wurden keine Lichter erkannt. Bitte versuchen Sie es später erneut. Klicken Sie zum Beenden auf „Done“ (OK). +'''Select Hue Lights to add ({{numFound}} found)'''=Wählen Sie die hinzuzufügenden Hue Lights (Lichter) aus ({{numFound}} gefunden) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Zuvor hinzugefügte Hue Lights (Lichter) ({{existingLightsSize}} hinzugefügt) +'''Light Discovery Started!'''=Lichterkennung gestartet! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Lights (Lichter) erkannt wurden. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. diff --git a/smartapps/smartthings/hue-connect.src/i18n/de_DE.properties b/smartapps/smartthings/hue-connect.src/i18n/de_DE.properties new file mode 100644 index 0000000..def2273 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/de_DE.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Sie können Ihre Phillips Hue Lights (Lichter) mit SmartThings verbinden und aus Ihrem Things-Bereich oder dem Dashboard in der SmartThings-Mobile-App aus steuern. Bitte aktualisieren Sie zunächst Ihre Hue Bridge (Brücke) außerhalb der SmartThings-App mit der Phillips-Hue-App. +'''Discovery Started!'''=Erkennung gestartet! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Bridge (Brücke) erkannt wurde. Beachten Sie bitte, dass Sie Ihre Hue Bridge (Brücke) und Lights (Lichter) zunächst mit der Philips Hue-Anwendung konfigurieren müssen. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. +'''Select Hue Bridge ({{numFound}} found)'''=Hue Bridge (Brücke) auswählen ({{numFound}} gefunden) +'''Bridge Discovery Failed!'''=Bridge (Brücke)-Erkennung fehlgeschlagen! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Es konnten keine Hue Bridges (Brücken) gefunden werden. Bitte bestätigen Sie, dass die Hue Bridge (Brücke) am gleichen Netzwerk wie Ihr SmartThings Hub angeschlossen ist und Strom erhält. +'''Linking with your Hue'''=Kopplung mit Ihrem Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Der aktuelle Hue-Benutzername ist ungültig. Bitte drücken Sie für eine erneute Kopplung die Taste auf Ihrer Hue Bridge (Brücke). +'''Press the button on your Hue Bridge to setup a link.'''=Drücken Sie die Taste auf Ihrer Hue-Bridge (Brücke), um eine Kopplung einzurichten. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Sie haben keine Hue Bridge (Brücke) ausgewählt. Bitte drücken Sie ‚Done‘ (OK) und wählen Sie eine aus, bevor Sie auf Next (Weiter) drücken. +'''Success!'''=Erfolgreich verbunden! +'''Linking to your hub was a success! Please click 'Next'!'''=Die Kopplung mit Ihrem Hub war erfolgreich! Bitte klicken Sie auf ‚Next‘ (Weiter)! +'''Find bridges'''=Bridges (Brücken) suchen +'''Light Discovery Failed!'''=Lichterkennung fehlgeschlagen! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Es wurden keine Lichter erkannt. Bitte versuchen Sie es später erneut. Klicken Sie zum Beenden auf „Done“ (OK). +'''Select Hue Lights to add ({{numFound}} found)'''=Wählen Sie die hinzuzufügenden Hue Lights (Lichter) aus ({{numFound}} gefunden) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Zuvor hinzugefügte Hue Lights (Lichter) ({{existingLightsSize}} hinzugefügt) +'''Light Discovery Started!'''=Lichterkennung gestartet! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Lights (Lichter) erkannt wurden. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. diff --git a/smartapps/smartthings/hue-connect.src/i18n/el_GR.properties b/smartapps/smartthings/hue-connect.src/i18n/el_GR.properties new file mode 100644 index 0000000..4024ba9 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/el_GR.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Σας επιτρέπει να συνδέσετε τους λαμπτήρες Philips Hue με το SmartThings και να τους ελέγχετε από την περιοχή Things στο Dashboard της εφαρμογής SmartThings για κινητές συσκευές. Ενημερώστε πρώτα το Hue Bridge εκτός της εφαρμογής SmartThings, χρησιμοποιώντας την εφαρμογή Philips Hue. +'''Discovery Started!'''=Η ανακάλυψη ξεκίνησε! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Περιμένετε μέχρι να ολοκληρωθεί η ανακάλυψη του Hue Bridge σας. Έχετε υπόψη ότι θα πρέπει πρώτα να διαμορφώσετε το Hue Bridge και τους λαμπτήρες, χρησιμοποιώντας την εφαρμογή Philips Hue. Η ανακάλυψη μπορεί να διαρκέσει πέντε λεπτά ή περισσότερο, επομένως, χαλαρώστε και περιμένετε! Επιλέξτε τη συσκευή σας παρακάτω μόλις ανακαλυφθεί. +'''Select Hue Bridge ({{numFound}} found)'''=Επιλογή Hue Bridge (βρέθηκαν {{numFound}}) +'''Bridge Discovery Failed!'''=Η ανακάλυψη Bridge απέτυχε! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Δεν ανακαλύφθηκε κανένα Hue Bridge. Βεβαιωθείτε ότι το Hue Bridge είναι συνδεδεμένο στο ίδιο δίκτυο με το SmartThings Hub και ότι τροφοδοτείται με ρεύμα. +'''Linking with your Hue'''=Γίνεται σύνδεση με το Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Το τρέχον όνομα χρήστη Hue δεν είναι έγκυρο. Πατήστε το κουμπί στο Hue Bridge για επανασύνδεση. +'''Press the button on your Hue Bridge to setup a link.'''=Πατήστε το κουμπί στο Hue Bridge σας για να ρυθμίσετε μια σύνδεση. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Δεν έχετε επιλέξτε ένα Hue Bridge. Πατήστε «Done» (Τέλος) και επιλέξτε ένα πριν κάνετε κλικ στην επιλογή Next (Επόμενο). +'''Success!'''=Επιτυχία! +'''Linking to your hub was a success! Please click 'Next'!'''=Η σύνδεση με το διανομέα σας ολοκληρώθηκε με επιτυχία. Κάντε κλικ στην επιλογή 'Next' (Επόμενο)! +'''Find bridges'''=Εύρεση bridge +'''Light Discovery Failed!'''=Η ανακάλυψη λαμπτήρων απέτυχε! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Η ανακάλυψη λαμπτήρων απέτυχε, δοκιμάστε ξανά αργότερα. Κάντε κλικ στην επιλογή "Done" (Τέλος) για έξοδο. +'''Select Hue Lights to add ({{numFound}} found)'''=Επιλογή λαμπτήρων Hue για προσθήκη (βρέθηκαν {{numFound}}) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Λαμπτήρες Hue που προστέθηκαν παλαιότερα (προστέθηκαν {{existingLightsSize}}) +'''Light Discovery Started!'''=Η ανακάλυψη λαμπτήρων ξεκίνησε! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Περιμένετε μέχρι να ολοκληρωθεί η ανακάλυψη των λαμπτήρων Hue σας. Η ανακάλυψη μπορεί να διαρκέσει πέντε λεπτά ή περισσότερο, επομένως, χαλαρώστε και περιμένετε! Επιλέξτε τη συσκευή σας παρακάτω μόλις ανακαλυφθεί. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_AU.properties b/smartapps/smartthings/hue-connect.src/i18n/en_AU.properties new file mode 100644 index 0000000..2d11c28 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/en_AU.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. +'''Discovery Started!'''=Discovery Started! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. +'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) +'''Bridge Discovery Failed!'''=Bridge Discovery Failed +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. +'''Linking with your Hue'''=Linking with your Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. +'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. +'''Success!'''=Success! +'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! +'''Find bridges'''=Find Bridges +'''Light Discovery Failed!'''=Light Discovery Failed! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. +'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) +'''Light Discovery Started!'''=Light Discovery Started! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_CA.properties b/smartapps/smartthings/hue-connect.src/i18n/en_CA.properties new file mode 100644 index 0000000..2d11c28 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/en_CA.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. +'''Discovery Started!'''=Discovery Started! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. +'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) +'''Bridge Discovery Failed!'''=Bridge Discovery Failed +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. +'''Linking with your Hue'''=Linking with your Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. +'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. +'''Success!'''=Success! +'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! +'''Find bridges'''=Find Bridges +'''Light Discovery Failed!'''=Light Discovery Failed! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. +'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) +'''Light Discovery Started!'''=Light Discovery Started! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_GB.properties b/smartapps/smartthings/hue-connect.src/i18n/en_GB.properties new file mode 100644 index 0000000..2d11c28 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/en_GB.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. +'''Discovery Started!'''=Discovery Started! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. +'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) +'''Bridge Discovery Failed!'''=Bridge Discovery Failed +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. +'''Linking with your Hue'''=Linking with your Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. +'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. +'''Success!'''=Success! +'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! +'''Find bridges'''=Find Bridges +'''Light Discovery Failed!'''=Light Discovery Failed! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. +'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) +'''Light Discovery Started!'''=Light Discovery Started! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_IE.properties b/smartapps/smartthings/hue-connect.src/i18n/en_IE.properties new file mode 100644 index 0000000..2d11c28 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/en_IE.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. +'''Discovery Started!'''=Discovery Started! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. +'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) +'''Bridge Discovery Failed!'''=Bridge Discovery Failed +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. +'''Linking with your Hue'''=Linking with your Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. +'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. +'''Success!'''=Success! +'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! +'''Find bridges'''=Find Bridges +'''Light Discovery Failed!'''=Light Discovery Failed! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. +'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) +'''Light Discovery Started!'''=Light Discovery Started! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_NZ.properties b/smartapps/smartthings/hue-connect.src/i18n/en_NZ.properties new file mode 100644 index 0000000..2d11c28 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/en_NZ.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. +'''Discovery Started!'''=Discovery Started! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. +'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) +'''Bridge Discovery Failed!'''=Bridge Discovery Failed +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. +'''Linking with your Hue'''=Linking with your Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. +'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. +'''Success!'''=Success! +'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! +'''Find bridges'''=Find Bridges +'''Light Discovery Failed!'''=Light Discovery Failed! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. +'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) +'''Light Discovery Started!'''=Light Discovery Started! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_PH.properties b/smartapps/smartthings/hue-connect.src/i18n/en_PH.properties new file mode 100644 index 0000000..2d11c28 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/en_PH.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. +'''Discovery Started!'''=Discovery Started! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. +'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) +'''Bridge Discovery Failed!'''=Bridge Discovery Failed +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. +'''Linking with your Hue'''=Linking with your Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. +'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. +'''Success!'''=Success! +'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! +'''Find bridges'''=Find Bridges +'''Light Discovery Failed!'''=Light Discovery Failed! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. +'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) +'''Light Discovery Started!'''=Light Discovery Started! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_ZA.properties b/smartapps/smartthings/hue-connect.src/i18n/en_ZA.properties new file mode 100644 index 0000000..2d11c28 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/en_ZA.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. +'''Discovery Started!'''=Discovery Started! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. +'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) +'''Bridge Discovery Failed!'''=Bridge Discovery Failed +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. +'''Linking with your Hue'''=Linking with your Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. +'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. +'''Success!'''=Success! +'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! +'''Find bridges'''=Find Bridges +'''Light Discovery Failed!'''=Light Discovery Failed! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. +'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) +'''Light Discovery Started!'''=Light Discovery Started! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/es_ES.properties b/smartapps/smartthings/hue-connect.src/i18n/es_ES.properties new file mode 100644 index 0000000..149f802 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/es_ES.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Permite conectar sus Philips Hue Lights (Luces) con SmartThings y controlarlas desde Things area (Área de cosas) o Dashboard (Panel) en la aplicación móvil SmartThings. Actualice primero el Hue Bridge (Puente), fuera de la aplicación SmartThings, usando la aplicación Philips Hue. +'''Discovery Started!'''=¡Se ha iniciado la detección! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Espere mientras detectamos su Hue Bridge (Puente). Tenga en cuenta que primero tiene que configurar su Hue Bridge (Puente) y Hue Lights (Luces) mediante la aplicación Philips Hue. La detección puede tardar cinco minutos o más. Así que tómeselo con tranquilidad. Seleccione su dispositivo cuando se haya detectado. +'''Select Hue Bridge ({{numFound}} found)'''=Seleccionar Hue Bridge (Puente) ({{numFound}} encontrados) +'''Bridge Discovery Failed!'''=¡Error al detectar Bridge (Puente)! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Error al detectar Hue Bridges (Puentes). Confirme que el Hue Bridge (Puente) está conectado a la misma red que su Hub SmartThings y que está enchufado a una toma eléctrica. +'''Linking with your Hue'''=Vincular con su Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=El nombre de usuario del Hue actual no es válido. Pulse el botón en su Hue Bridge (Puente) para volver a vincular. +'''Press the button on your Hue Bridge to setup a link.'''=Pulse el botón en su Hue Bridge (Puente) para configurar el vínculo. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=No ha seleccionado ningún Hue Bridge (Puente). Pulse “Done” (Hecho) y seleccione uno antes de hacer clic en Next (Siguiente). +'''Success!'''=Operación realizada correctamente. +'''Linking to your hub was a success! Please click 'Next'!'''=Se ha vinculado su Hub correctamente. Haga clic en Next (Siguiente). +'''Find bridges'''=Encontrar Bridges (Puentes) +'''Light Discovery Failed!'''=Error al detectar luces. +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Error al detectar luces. Inténtelo de nuevo más tarde. Haga clic en Done (Hecho) para salir. +'''Select Hue Lights to add ({{numFound}} found)'''=Seleccione Hue Lights (Luces) para añadir ({{numFound}} encontradas) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (Luces) añadidas anteriormente ({{existingLightsSize}} añadidas) +'''Light Discovery Started!'''=Se ha iniciado la detección de luces. +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Espere mientras detectamos sus Hue Lights (Luces). La detección puede tardar cinco minutos o más. Así que tómeselo con tranquilidad. Seleccione su dispositivo cuando se haya detectado. diff --git a/smartapps/smartthings/hue-connect.src/i18n/es_US.properties b/smartapps/smartthings/hue-connect.src/i18n/es_US.properties new file mode 100644 index 0000000..e32b020 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/es_US.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Le permite conectar sus Philips Hue lights (luces Philips Hue) con SmartThings y controlarlas desde el área de Objetos o el Panel de la aplicación SmartThings Mobile. Primero actualice su Hue Bridge (puente Hue) desde fuera de la aplicación de SmartThings, mediante la aplicación de Philips Hue. +'''Discovery Started!'''=Descubrimiento iniciado +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Espere mientras descubrimos su Hue Bridge (puente Hue). Tenga en cuenta que primero debe configurar Hue Bridge y Hue Lights (luces Hue) mediante la aplicación de Hue. El descubrimiento puede tomar cinco minutos o más, por lo que le sugerimos que se ponga cómodo y se relaje. Una vez descubierto, seleccione su dispositivo. +'''Select Hue Bridge ({{numFound}} found)'''=Seleccione Hue Bridge (Puente Hue) (se encontraron {{numFound}}) +'''Bridge Discovery Failed!'''=Error al descubrir Bridges (puentes). +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No se descubrieron Hue Bridges (Puentes Hue). Confirme que el Hue Bridge (Puente Hue) está conectado a la misma red que su unidad central de SmartThings, y que está conectado a la red eléctrica. +'''Linking with your Hue'''=Vinculando con su Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=El nombre de usuario Hue actual no es válido. Presione el botón de su Hue Bridge (Puente Hue) para volver a vincular. +'''Press the button on your Hue Bridge to setup a link.'''=Presione el botón de su Hue Bridge (Puente Hue) para configurar un vínculo. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=No seleccionó un Hue Bridge (puente Hue). Presione “Done” (Realizado) y seleccione uno antes de hacer clic en Next (Siguiente). +'''Success!'''=¡Logrado! +'''Linking to your hub was a success! Please click 'Next'!'''=El vínculo con su unidad central se realizó correctamente. Haga clic en 'Next' (Siguiente). +'''Find bridges'''=Encontrar puentes +'''Light Discovery Failed!'''=Error al descubrir luces +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No se descubrió ninguna luz. Vuelva a intentarlo de nuevo más tarde. Haga clic en Done (Realizado) para salir. +'''Select Hue Lights to add ({{numFound}} found)'''=Seleccione Hue Lights (Luces Hue) que desea agregar (se encontraron {{numFound}}) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (Luces Hue) agregadas anteriormente (se agregaron {{existingLightsSize}}) +'''Light Discovery Started!'''=Descubrimiento de luces iniciado +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Espere mientras descubrimos sus Hue Lights (Luces Hue). El descubrimiento puede tomar cinco minutos o más, por lo que le sugerimos que se ponga cómodo y se relaje. Una vez descubierto, seleccione su dispositivo. diff --git a/smartapps/smartthings/hue-connect.src/i18n/et_EE.properties b/smartapps/smartthings/hue-connect.src/i18n/et_EE.properties new file mode 100644 index 0000000..d5f3c29 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/et_EE.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Võimaldab teil ühendada teie Philips Hue tuled SmartThingsiga ja juhtida neid oma Thingsi piirkonnast või SmartThingsi mobiilirakenduse esipaneelilt. Värskendage esmalt oma Hue Bridge’i väljaspool SmartThingsi rakendust, kasutades Philips Hue rakendust. +'''Discovery Started!'''=Tuvastamine algas! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Oodake, kuni me tuvastame teie Hue Bridge’i. Pange tähele, et peate esmalt oma Hue Bridge and Lights’i süsteemi rakenduse Philips Hue abil konfigureerima. Tuvastamisele võib kuluda üle viie minuti, seega oodake rahulikult! Pärast tuvastamist valige all oma seade. +'''Select Hue Bridge ({{numFound}} found)'''=Valige Hue Bridge ({{numFound}} leitud) +'''Bridge Discovery Failed!'''=Bridge’i tuvastamine nurjus! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Ei leitud ühtki Hue Bridge’i. Kontrollige, kas Hue Bridge on ühendatud teie SmartThingsi jaoturiga samasse võrku ja et sellel on toide olemas. +'''Linking with your Hue'''=Huega ühendamine +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Praegune Hue kasutajanimi on vale. Vajutage nuppu oma Hue Bridge’il, et uuesti ühendada. +'''Press the button on your Hue Bridge to setup a link.'''=Vajutage nuppu oma Hue Bridge’il, et ühendust seadistada. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Te pole valinud Hue Bridge’i, vajutage nuppu „Valmis” ja valige mõni, enne kui klõpsate jätkamiseks. +'''Success!'''=Edukas! +'''Linking to your hub was a success! Please click 'Next'!'''=Teie jaoturiga ühendamine õnnestus! Klõpsake nuppu Järgmine! +'''Find bridges'''=Bridge’ide leidmine +'''Light Discovery Failed!'''=Tulede tuvastamine nurjus! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Tulede tuvastamine nurjus, proovige hiljem uuesti. Klõpsake väljumiseks nuppu Valmis. +'''Select Hue Lights to add ({{numFound}} found)'''=Valige lisamiseks Hue tuled ({{numFound}} leitud) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Varem lisatud Hue tuled ({{existingLightsSize}} lisatud) +'''Light Discovery Started!'''=Tulede tuvastamine algas! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Oodake, kuni me tuvastame teie Hue tuled. Tuvastamisele võib kuluda üle viie minuti, seega oodake rahulikult! Pärast tuvastamist valige all oma seade. diff --git a/smartapps/smartthings/hue-connect.src/i18n/fi_FI.properties b/smartapps/smartthings/hue-connect.src/i18n/fi_FI.properties new file mode 100644 index 0000000..8e329e8 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/fi_FI.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Antaa sinun yhdistää Philips Hue Lights -valot SmartThingsiin ja hallita niitä SmartThings-mobiilisovelluksen Things (Laitteet) -alueelta tai koontinäytöstä. Päivitä ensin Hue Bridge -silta SmartThings-sovelluksen ulkopuolella Philips Hue -sovelluksen avulla. +'''Discovery Started!'''=Etsintä aloitettu! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Odota, kunnes Hue Bridge -silta löytyy. Huomaa, että sinun on ensin päivitettävä Hue Bridge -silta ja Hue Lights -valot Philips Hue -sovelluksen avulla. Etsintä voi kestää jopa yli viisi minuuttia, joten odota kärsivällisesti! Valitse laite alta, kun se on löytynyt. +'''Select Hue Bridge ({{numFound}} found)'''=Valitse Hue Bridge -silta ({{numFound}} löydetty) +'''Bridge Discovery Failed!'''=Sillan etsintä epäonnistui! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Hue Bridge -siltoja ei löytynyt. Varmista, että Hue Bridge -silta on yhdistetty SmartThings-keskittimen kanssa samaan verkkoon ja että se saa virtaa. +'''Linking with your Hue'''=Hue-linkin muodostaminen +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Huen nykyinen käyttäjänimi ei kelpaa. Muodosta linkki uudelleen painamalla Hue Bridge -sillassa olevaa painiketta. +'''Press the button on your Hue Bridge to setup a link.'''=Määritä linkki painamalla Hue Bridge -sillassa olevaa painiketta. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Et ole valinnut Hue Bridge -siltaa. Paina Done (Valmis) -painiketta ja valitse silta, ennen kuin napsautat Next (Seuraava) -painiketta. +'''Success!'''=Onnistui! +'''Linking to your hub was a success! Please click 'Next'!'''=Keskittimen linkittäminen onnistui! Valitse Next (Seuraava)! +'''Find bridges'''=Etsi siltoja +'''Light Discovery Failed!'''=Valojen etsintä epäonnistui! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Valoja ei löytynyt. Yritä myöhemmin uudelleen. Lopeta valitsemalla Done (Valmis). +'''Select Hue Lights to add ({{numFound}} found)'''=Valitse lisättävät Hue Lights -valot ({{numFound}} löydetty) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Aikaisemmin lisätyt Hue Lights -valot ({{existingLightsSize}} lisätty) +'''Light Discovery Started!'''=Valojen etsintä aloitettu! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Odota, kunnes Hue Lights -valot löytyvät. Etsintä voi kestää jopa yli viisi minuuttia, joten odota kärsivällisesti! Valitse laite alta, kun se on löytynyt. diff --git a/smartapps/smartthings/hue-connect.src/i18n/fr_BE.properties b/smartapps/smartthings/hue-connect.src/i18n/fr_BE.properties new file mode 100644 index 0000000..9119bfc --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/fr_BE.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Vous permet de connecter vos lampes Philips Hue à SmartThings et de les contrôler depuis votre zone Things (Objets) ou du tableau de bord dans l'application mobile SmartThings. Veuillez d'abord mettre à jour votre pont Hue, en dehors de l'application SmartThings, à l'aide de l'application Philips Hue. +'''Discovery Started!'''=La détection a commencé ! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de votre pont Hue. Vous devez d'abord configurer votre pont et vos lampes Hue à l'aide de l'application Philips Hue. La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. +'''Select Hue Bridge ({{numFound}} found)'''=Sélectionnez le pont Hue ({{numFound}} trouvé(s)) +'''Bridge Discovery Failed!'''=Échec de la détection du pont ! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=La détection des ponts Hue a échoué. Veuillez confirmer que le pont Hue est connecté au même réseau que votre concentrateur SmartThings, et qu'il est sous tension. +'''Linking with your Hue'''=Association avec votre Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Le nom d'utilisateur Hue actuel n'est pas valide. Veuillez appuyer sur la touche de votre pont Hue pour l'associer de nouveau. +'''Press the button on your Hue Bridge to setup a link.'''=Appuyez sur la touche de votre pont Hue pour configurer une association. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Vous n'avez pas sélectionné de pont Hue. Appuyez sur “Done” (Terminé), puis sélectionnez-en un avant de cliquer sur Next (Suivant). +'''Success!'''=Opération réussie ! +'''Linking to your hub was a success! Please click 'Next'!'''=Vous avez réussi à associer votre concentrateur. Veuillez cliquer sur « Suivant » ! +'''Find bridges'''=Trouver des ponts +'''Light Discovery Failed!'''=La détection du pont a échoué ! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Échec de la détection des lampes, veuillez réessayer ultérieurement. Cliquez sur Done (Terminé) pour quitter. +'''Select Hue Lights to add ({{numFound}} found)'''=Sélectionnez les lampes Hue à ajouter ({{numFound}} trouvée(s)) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Lampes Hue précédemment ajoutées ({{existingLightsSize}} ajoutée(s)) +'''Light Discovery Started!'''=La détection des lampes a commencé ! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de vos lampes Hue La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. diff --git a/smartapps/smartthings/hue-connect.src/i18n/fr_CA.properties b/smartapps/smartthings/hue-connect.src/i18n/fr_CA.properties new file mode 100644 index 0000000..1ee3a16 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/fr_CA.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Vous permet de connecter vos Philips Hue Lights (lumières Philips Hue) avec SmartThings et de les contrôler depuis Things (choses) ou Dashboard (tableau de bord) dans l’application mobile SmartThings. Veuillez d’abord mettre à jour votre Hue Bridge (pont Hue) à l’extérieur de l’application SmartThings, à l’aide de l’application Philips Hue. +'''Discovery Started!'''=Début de la détection. +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant que nous détectons votre Hue Bridge (pont Hue). Veuillez noter que vous devez d’abord configurer votre Hue Bridge (pont Hue) et vos Hue Lights (lumières Hue) à l’aide de l’application Philips Hue. La détection peut prendre cinq minutes ou plus, donc détendez-vous. Sélectionnez votre appareil ci-dessous une fois qu’il est détecté. +'''Select Hue Bridge ({{numFound}} found)'''=Sélectionnez le Hue Bridge (pont Hue; {{numFound}} trouvé(s)) +'''Bridge Discovery Failed!'''=Échec de détection du pont! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Échec de détection d’un Hue Bridge (pont Hue). Veuillez vous assurer que le Hue Bridge (pont Hue) est connecté au même réseau que votre borne SmartThings et qu’il est alimenté. +'''Linking with your Hue'''=Jumelage avec votre Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Le nom d’utilisateur Hue que vous utilisez n’est pas valide. Appuyez sur le bouton qui se trouve sur votre Hue Bridge (pont Hue) pour effectuer le jumelage de nouveau. +'''Press the button on your Hue Bridge to setup a link.'''=Appuyez sur le bouton qui se trouve sur le Hue Bridge (pont Hue) afin de configurer un lien. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Vous n’avez pas sélectionné de Hue Bridge (pont Hue). Veuillez appuyez sur « Done » (terminé) et sélectionnez-en un avant de cliquer sur Next (suivant). +'''Success!'''=Réussite! +'''Linking to your hub was a success! Please click 'Next'!'''=Le jumelage avec votre portail est un succès! Veuillez cliquer sur Next (suivant)! +'''Find bridges'''=Trouver des ponts +'''Light Discovery Failed!'''=Échec de détection de lumière! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Impossible de détecter de la lumière. Veuillez réessayer plus tard. Cliquez sur Done (terminé) pour quitter. +'''Select Hue Lights to add ({{numFound}} found)'''=Sélectionnez les Hue Lights (lumières Hue) que vous souhaitez ajouter ({{numFound}} trouvée(s)) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (lumières Hue) ajoutées précédemment ({{existingLightsSize}} ajoutée(s)) +'''Light Discovery Started!'''=Début de la détection de lumières! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant que nous détectons vos Hue Lights (lumières Hue). La détection peut prendre cinq minutes ou plus, donc détendez-vous. Sélectionnez votre appareil ci-dessous une fois qu’il est détecté. diff --git a/smartapps/smartthings/hue-connect.src/i18n/fr_CH.properties b/smartapps/smartthings/hue-connect.src/i18n/fr_CH.properties new file mode 100644 index 0000000..9119bfc --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/fr_CH.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Vous permet de connecter vos lampes Philips Hue à SmartThings et de les contrôler depuis votre zone Things (Objets) ou du tableau de bord dans l'application mobile SmartThings. Veuillez d'abord mettre à jour votre pont Hue, en dehors de l'application SmartThings, à l'aide de l'application Philips Hue. +'''Discovery Started!'''=La détection a commencé ! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de votre pont Hue. Vous devez d'abord configurer votre pont et vos lampes Hue à l'aide de l'application Philips Hue. La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. +'''Select Hue Bridge ({{numFound}} found)'''=Sélectionnez le pont Hue ({{numFound}} trouvé(s)) +'''Bridge Discovery Failed!'''=Échec de la détection du pont ! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=La détection des ponts Hue a échoué. Veuillez confirmer que le pont Hue est connecté au même réseau que votre concentrateur SmartThings, et qu'il est sous tension. +'''Linking with your Hue'''=Association avec votre Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Le nom d'utilisateur Hue actuel n'est pas valide. Veuillez appuyer sur la touche de votre pont Hue pour l'associer de nouveau. +'''Press the button on your Hue Bridge to setup a link.'''=Appuyez sur la touche de votre pont Hue pour configurer une association. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Vous n'avez pas sélectionné de pont Hue. Appuyez sur “Done” (Terminé), puis sélectionnez-en un avant de cliquer sur Next (Suivant). +'''Success!'''=Opération réussie ! +'''Linking to your hub was a success! Please click 'Next'!'''=Vous avez réussi à associer votre concentrateur. Veuillez cliquer sur « Suivant » ! +'''Find bridges'''=Trouver des ponts +'''Light Discovery Failed!'''=La détection du pont a échoué ! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Échec de la détection des lampes, veuillez réessayer ultérieurement. Cliquez sur Done (Terminé) pour quitter. +'''Select Hue Lights to add ({{numFound}} found)'''=Sélectionnez les lampes Hue à ajouter ({{numFound}} trouvée(s)) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Lampes Hue précédemment ajoutées ({{existingLightsSize}} ajoutée(s)) +'''Light Discovery Started!'''=La détection des lampes a commencé ! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de vos lampes Hue La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. diff --git a/smartapps/smartthings/hue-connect.src/i18n/fr_FR.properties b/smartapps/smartthings/hue-connect.src/i18n/fr_FR.properties new file mode 100644 index 0000000..9119bfc --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/fr_FR.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Vous permet de connecter vos lampes Philips Hue à SmartThings et de les contrôler depuis votre zone Things (Objets) ou du tableau de bord dans l'application mobile SmartThings. Veuillez d'abord mettre à jour votre pont Hue, en dehors de l'application SmartThings, à l'aide de l'application Philips Hue. +'''Discovery Started!'''=La détection a commencé ! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de votre pont Hue. Vous devez d'abord configurer votre pont et vos lampes Hue à l'aide de l'application Philips Hue. La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. +'''Select Hue Bridge ({{numFound}} found)'''=Sélectionnez le pont Hue ({{numFound}} trouvé(s)) +'''Bridge Discovery Failed!'''=Échec de la détection du pont ! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=La détection des ponts Hue a échoué. Veuillez confirmer que le pont Hue est connecté au même réseau que votre concentrateur SmartThings, et qu'il est sous tension. +'''Linking with your Hue'''=Association avec votre Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Le nom d'utilisateur Hue actuel n'est pas valide. Veuillez appuyer sur la touche de votre pont Hue pour l'associer de nouveau. +'''Press the button on your Hue Bridge to setup a link.'''=Appuyez sur la touche de votre pont Hue pour configurer une association. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Vous n'avez pas sélectionné de pont Hue. Appuyez sur “Done” (Terminé), puis sélectionnez-en un avant de cliquer sur Next (Suivant). +'''Success!'''=Opération réussie ! +'''Linking to your hub was a success! Please click 'Next'!'''=Vous avez réussi à associer votre concentrateur. Veuillez cliquer sur « Suivant » ! +'''Find bridges'''=Trouver des ponts +'''Light Discovery Failed!'''=La détection du pont a échoué ! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Échec de la détection des lampes, veuillez réessayer ultérieurement. Cliquez sur Done (Terminé) pour quitter. +'''Select Hue Lights to add ({{numFound}} found)'''=Sélectionnez les lampes Hue à ajouter ({{numFound}} trouvée(s)) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Lampes Hue précédemment ajoutées ({{existingLightsSize}} ajoutée(s)) +'''Light Discovery Started!'''=La détection des lampes a commencé ! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de vos lampes Hue La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. diff --git a/smartapps/smartthings/hue-connect.src/i18n/hr_HR.properties b/smartapps/smartthings/hue-connect.src/i18n/hr_HR.properties new file mode 100644 index 0000000..541bde5 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/hr_HR.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Omogućava vam da povežete Philips Hue lights (svjetla Philips Hue) i SmartThings te da upravljate njima iz dijela Things area (Područje za stvari) ili Dashboard (Nadzorna ploča) u mobilnoj aplikaciji SmartThings. Najprije aktualizirajte Hue Bridge (Hue most) izvan aplikacije SmartThings s pomoću aplikacije Philips Hue. +'''Discovery Started!'''=Otkrivanje je započelo! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Pričekajte dok otkrivamo vaš Hue Bridge (Hue most). Imajte na umu da najprije morate konfigurirati vaš Hue Bridge (Hue most) i Lights (svjetla) s pomoću aplikacije Philips Hue. Otkrivanje može trajati pet minuta ili dulje, stoga sjednite i opustite se! Kada bude otkriven, odaberite svoj uređaj u nastavku. +'''Select Hue Bridge ({{numFound}} found)'''=Odaberite Hue Bridge (Hue most) (pronađeno: {{numFound}}) +'''Bridge Discovery Failed!'''=Neuspješno otkrivanje Bridgea (mosta)! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nije otkriven nijedan Hue Bridge (Hue most). Potvrdite da je Hue Bridge (Hue most) povezan na istu mrežu kao i SmartThings Hub i da je uključen. +'''Linking with your Hue'''=Povezivanje s uređajem Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Neispravno je trenutačno korisničko ime za Hue. Pritisnite gumb za ponovno povezivanje na Hue Bridgeu (Hue most). +'''Press the button on your Hue Bridge to setup a link.'''=Pritisnite gumb na uređaju Hue Bridge (Hue most) da biste postavili vezu. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Niste odabrali nijedan Hue Bridge (Hue most), pritisnite „Done” (Gotovo) i odaberite jedan prije nego što kliknete next (dalje). +'''Success!'''=Uspjeh! +'''Linking to your hub was a success! Please click 'Next'!'''=Povezivanje na koncentrator bilo je uspješno! Kliknite „Next” (Dalje)! +'''Find bridges'''=Pronađi mostove +'''Light Discovery Failed!'''=Otkrivanje svjetla nije uspjelo! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nije otkriveno nijedno svjetlo, pokušajte ponovno kasnije. Kliknite Done (Gotovo) za izlaz. +'''Select Hue Lights to add ({{numFound}} found)'''=Odaberite Hue Lights (svjetla Hue) za dodavanje (pronađeno: {{numFound}}) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (svjetla Hue) koja su prethodno dodana (dodano: {{existingLightsSize}}) +'''Light Discovery Started!'''=Započelo je otkrivanje svjetla! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Pričekajte dok otkrivamo Hue Lights (svjetla Hue). Otkrivanje može trajati pet minuta ili dulje, stoga sjednite i opustite se! Kada bude otkriven, odaberite svoj uređaj u nastavku. diff --git a/smartapps/smartthings/hue-connect.src/i18n/hu_HU.properties b/smartapps/smartthings/hue-connect.src/i18n/hu_HU.properties new file mode 100644 index 0000000..ae106f6 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/hu_HU.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Lehetővé teszi a Philips Hue Lights (lámpák) összekapcsolását a SmartThings rendszerrel és vezérlésüket a SmartThings Mobile alkalmazás Things (Tárgyak) területéről vagy a Dashboard (Vezérlőpult) segítségével. Előbb frissítse a Hue Bridge (híd) eszközt a SmartThings alkalmazáson kívülről, a Philips Hue alkalmazás segítségével. +'''Discovery Started!'''=Megkezdődött a keresés! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Kis türelmet kérünk, amíg megtaláljuk a Hue Bridge (híd) eszközt. Felhívjuk figyelmét, hogy előbb el kell végeznie a Hue Bridge (híd) és Lights (lámpák) konfigurálását a Philips Hue alkalmazással. Ez akár öt percnél is tovább tarthat, így némi türelemre lesz szükség! Az eszköz megtalálása után alább kiválaszthatja azt. +'''Select Hue Bridge ({{numFound}} found)'''=Válassza ki a Hue Bridge (híd) eszközt ({{numFound}} találat) +'''Bridge Discovery Failed!'''=A Bridge (híd) keresése sikertelen volt! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nem sikerült Hue Bridge (híd) eszközt találni. Győződjön meg róla, hogy a Hue Bridge (híd) ugyanahhoz a hálózathoz kapcsolódik, mint a SmartThings Hub, és be van kapcsolva. +'''Linking with your Hue'''=Összekapcsolás a Hue-val +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=A jelenleg Hue-felhasználónév érvénytelen. Nyomja meg a Hue Bridge (híd) gombját az újbóli összekapcsoláshoz. +'''Press the button on your Hue Bridge to setup a link.'''=Az összekapcsolás beállításához nyomja meg a Hue Bridge (híd) gombját. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nem választott ki Hue Bridge (híd) eszközt. Nyomja meg a „Done” (Kész) gombot, és válasszon, mielőtt a Next (Tovább) gombra kattintana. +'''Success!'''=Sikerült! +'''Linking to your hub was a success! Please click 'Next'!'''=Sikeresen összekapcsolódott a hubbal! Kattintson a „Next” (Tovább) gombra! +'''Find bridges'''=Bridge (híd) eszközök keresése +'''Light Discovery Failed!'''=A Light (lámpa) keresése sikertelen volt! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nem sikerült Light (lámpa) eszközt találni, próbálja meg később. Kattintson a Done (Kész) gombra a kilépéshez. +'''Select Hue Lights to add ({{numFound}} found)'''=Válassza ki a hozzáadni kívánt Hue Light (lámpa) eszközöket ({{numFound}} találat) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Előzőleg hozzáadott Hue Lights (lámpák) ({{existingLightsSize}} hozzáadva) +'''Light Discovery Started!'''=Megkezdődött a Light (lámpa) eszközök keresése! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Kis türelmet kérünk, amíg megtaláljuk a Hue Light (lámpa) eszközöket. Ez akár öt percnél is tovább tarthat, így némi türelemre lesz szükség! Az eszköz megtalálása után alább kiválaszthatja azt. diff --git a/smartapps/smartthings/hue-connect.src/i18n/it_IT.properties b/smartapps/smartthings/hue-connect.src/i18n/it_IT.properties new file mode 100644 index 0000000..891cf93 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/it_IT.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Consente di collegare le Philips Hue Light (lampadine Philips Hue) con SmartThings e di controllarle dall'area Things o dalla dashboard nell'applicazione mobile SmartThings. Aggiornate innanzitutto il bridge Hue, fuori dall'applicazione SmartThings, tramite l'applicazione Philips Hue. +'''Discovery Started!'''=Rilevamento avviato. +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Attendete mentre è in corso il rilevamento del bridge Hue. Tenete presente che occorre innanzitutto configurare il bridge e le lampadine Hue tramite l'applicazione Philips Hue. La procedura di rilevamento può richiede almeno cinque minuti, quindi sedetevi e rilassatevi! Selezionate il dispositivo in uso tra quelli riportati di seguito dopo il rilevamento. +'''Select Hue Bridge ({{numFound}} found)'''=Selezionate il bridge Hue ({{numFound}} trovati) +'''Bridge Discovery Failed!'''=Rilevamento bridge non riuscito. +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Impossibile rilevare i bridge Hue. Verificate che il bridge Hue sia connesso alla stessa rete dell'hub SmartThings e che sia collegato all'alimentazione. +'''Linking with your Hue'''=Collegamento con Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Il nome utente Hue corrente non è valido. Premete il pulsante sul bridge Hue per ripetere il collegamento. +'''Press the button on your Hue Bridge to setup a link.'''=Premete il pulsante sul bridge Hue per configurare un collegamento. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Non avete selezionato nessun bridge Hue. Premete “Done” (Fatto) e selezionatene uno prima di fare clic su Next (Avanti). +'''Success!'''=Operazione riuscita. +'''Linking to your hub was a success! Please click 'Next'!'''=Il collegamento all'hub è stato effettuato correttamente. Fate clic su “Next” (Avanti). +'''Find bridges'''=Cerca bridge +'''Light Discovery Failed!'''=Rilevamento lampadina non riuscito. +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Impossibile rilevare le lampadine. Riprovate più tardi. Fate clic su Done (Fatto) per uscire. +'''Select Hue Lights to add ({{numFound}} found)'''=Selezionate le Hue Light (lampadine Hue) da aggiungere ({{numFound}} trovate) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Light (lampadine Hue) aggiunte in precedenza ({{existingLightsSize}} aggiunte) +'''Light Discovery Started!'''=Rilevamento lampadine avviato. +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Attendete mentre è in corso il rilevamento delle Hue Light (lampadine Hue). La procedura di rilevamento può richiede almeno cinque minuti, quindi sedetevi e rilassatevi! Selezionate il dispositivo in uso tra quelli riportati di seguito dopo il rilevamento. diff --git a/smartapps/smartthings/hue-connect.src/i18n/ko_KR.properties b/smartapps/smartthings/hue-connect.src/i18n/ko_KR.properties new file mode 100644 index 0000000..2f40e11 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/ko_KR.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Philips Hue 조명을 SmartThings와 연결하여 SmartThings 모바일 앱의 개별 기기 정보 영역이나 대시보드에서 조명을 조절할 수 있도록 지원합니다. SmartThings 앱을 빠져나와 Philips Hue 앱을 이용하여 먼저 Hue 브릿지를 업데이트하세요. +'''Discovery Started!'''=찾기 시작! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Hue 브릿지 검색이 완료될 때까지 잠시 기다리세요. Philips Hue 앱을 이용하여 Hue 브릿지와 조명을 먼저 설정해야 합니다. 검색에는 5분 이상 걸릴 수 있으므로 편히 쉬면서 기다리세요! 검색이 완료되면 아래에서 기기를 선택하세요. +'''Select Hue Bridge ({{numFound}} found)'''=Hue 브릿지 선택 ({{numFound}}개 찾음) +'''Bridge Discovery Failed!'''=브릿지 찾기 실패! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Hue 브릿지를 찾지 못했습니다. Hue 브릿지가 SmartThings 허브와 같은 네트워크에 연결되어 있고 전원이 켜져 있는지 확인하세요. +'''Linking with your Hue'''=Hue와 연결 중 +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=현재 Hue 사용자 이름이 바르지 않습니다. Hue 브릿지의 버튼을 눌러 다시 연결하세요. +'''Press the button on your Hue Bridge to setup a link.'''=Hue 브릿지의 버튼을 눌러 다시 연결하세요. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=선택된 Hue 브릿지가 없습니다. [완료]를 누르고 Hue 브릿지를 선택한 후 [다음]을 클릭하세요. +'''Success!'''=성공! +'''Linking to your hub was a success! Please click 'Next'!'''=허브와 성공적으로 연결했습니다! [다음]을 클릭하세요. +'''Find bridges'''=브릿지 검색 +'''Light Discovery Failed!'''=조명 찾기 실패! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=조명을 찾지 못했습니다. 나중에 다시 시도하세요. 종료하려면 [완료]를 클릭하세요. +'''Select Hue Lights to add ({{numFound}} found)'''=추가할 Hue 조명 선택 ({{numFound}}개 찾음) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=이전에 추가한 Hue 조명 ({{existingLightsSize}} 추가됨) +'''Light Discovery Started!'''=조명 찾기 시작! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Hue 조명 검색이 완료될 때까지 잠시 기다리세요. 검색에는 5분 이상 걸릴 수 있으므로 편히 쉬면서 기다리세요! 검색이 완료되면 아래에서 기기를 선택하세요. diff --git a/smartapps/smartthings/hue-connect.src/i18n/nb_NO.properties b/smartapps/smartthings/hue-connect.src/i18n/nb_NO.properties new file mode 100644 index 0000000..ee833dc --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/nb_NO.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Lar deg koble Philips Hue Lights (lys) med SmartThings og kontrollere dem fra Things (Ting)-området eller dashbordet i SmartThings-mobilappen. Oppdater Hue Bridge (bro) først, utenfor SmartThings-appen, ved å bruke Philips Hue-appen. +'''Discovery Started!'''=Oppdagelse startet! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vent litt mens vi oppdager Hue Bridge (bro). Vær oppmerksom på at du må først sette opp Hue Bridge (bro) og Lights (lysene) ved å bruke Philips Hue-appen. Det kan ta fem minutter eller mer å oppdage den, så len deg tilbake og slapp av! Velg enheten nedenfor når den er oppdaget. +'''Select Hue Bridge ({{numFound}} found)'''=Velg Hue Bridge (bro) ({{numFound}} funnet) +'''Bridge Discovery Failed!'''=Oppdagelse av Bridge (bro) mislyktes! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Kunne ikke oppdage noen Hue Bridge (bro). Bekreft at Hue Bridge (bro) er koblet til det samme nettverket som SmartThings-huben, og at den har strøm. +'''Linking with your Hue'''=Kobler sammen med Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Det gjeldende Hue-brukernavnet er ugyldig. Trykk på knappen på Hue Bridge (bro) for å koble til igjen. +'''Press the button on your Hue Bridge to setup a link.'''=Trykk på knappen på Hue Bridge (bro) for å sette opp en kobling. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Du har ikke valgt en Hue Bridge (bro), trykk på “Done” (Utført), og velg en før du klikker på Next (Neste). +'''Success!'''=Suksess! +'''Linking to your hub was a success! Please click 'Next'!'''=Tilkobling til huben var vellykket! Klikk på 'Next' (Neste)! +'''Find bridges'''=Finn broer +'''Light Discovery Failed!'''=Lysoppdagelse mislyktes! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Kunne ikke oppdage noen lys, prøv igjen senere. Klikk på Done (Utført) for å avslutte. +'''Select Hue Lights to add ({{numFound}} found)'''=Velg Hue Ligths (lys) du vil legge til ({{numFound}} funnet) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (lys) tidligere lagt til ({{existingLightsSize}} lagt til) +'''Light Discovery Started!'''=Lysoppdagelse startet! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vent litt mens vi oppdager Hue Lights (lys). Det kan ta fem minutter eller mer å oppdage den, så len deg tilbake og slapp av! Velg enheten nedenfor når den er oppdaget. diff --git a/smartapps/smartthings/hue-connect.src/i18n/nl_BE.properties b/smartapps/smartthings/hue-connect.src/i18n/nl_BE.properties new file mode 100644 index 0000000..cbf8841 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/nl_BE.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Hiermee kunt u uw Philips Hue lights (lampen) verbinden met SmartThings en ze bedienen via uw Things-gebied of het Dashboard in de SmartThings Mobiele app. Werk eerst met de Philips Hue-app uw Hue Bridge (brug) bij buiten de SmartThings-app. +'''Discovery Started!'''=Detectie gestart! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Even geduld terwijl wij uw Hue Bridge (brug) detecteren. Houd er rekening mee dat u eerst uw Hue Bridge en Lights (lampen) moet configureren met de applicatie Philips Hue. Het detecteren kan wel vijf minuten of langer duren, dus even geduld! Selecteer uw apparaat hieronder na het detecteren. +'''Select Hue Bridge ({{numFound}} found)'''=Selecteer Hue Bridge (brug) ({{numFound}} gevonden) +'''Bridge Discovery Failed!'''=Detectie brug mislukt! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Kan geen Hue Bridges (bruggen) detecteren. Bevestig dat de Hue Bridge (brug) is verbonden met hetzelfde netwerk als uw SmartThings-hub en wordt voorzien van voeding. +'''Linking with your Hue'''=Koppelen met uw Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=De huidige Hue-gebruikersnaam is ongeldig. Druk op de knop op uw Hue Bridge (brug) om opnieuw te koppelen. +'''Press the button on your Hue Bridge to setup a link.'''=Druk op de knop op uw Hue Bridge (brug) om een koppeling in te stellen. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=U hebt geen Hue Bridge (brug) geselecteerd. Druk op “Done” (Gereed) en selecteer één brug voordat u op Next (Volgende) klikt. +'''Success!'''=Succes! +'''Linking to your hub was a success! Please click 'Next'!'''=De koppeling met uw hub is geslaagd! Klik op Next (Volgende)! +'''Find bridges'''=Bruggen zoeken +'''Light Discovery Failed!'''=Lampdetectie mislukt +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Kan geen lampen detecteren, probeer het later opnieuw. Klik op Done (Gereed) om af te sluiten. +'''Select Hue Lights to add ({{numFound}} found)'''=Selecteer Hue Lights (lampen) om toe te voegen ({{numFound}} gevonden) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Eerder toegevoegde Hue Lights (lampen) ({{existingLightsSize}} toegevoegd) +'''Light Discovery Started!'''=Lampdetectie gestart. +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Even geduld terwijl wij uw Hue Lights (lampen) detecteren. Het detecteren kan wel vijf minuten of langer duren, dus even geduld! Selecteer uw apparaat hieronder na het detecteren. diff --git a/smartapps/smartthings/hue-connect.src/i18n/nl_NL.properties b/smartapps/smartthings/hue-connect.src/i18n/nl_NL.properties new file mode 100644 index 0000000..cbf8841 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/nl_NL.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Hiermee kunt u uw Philips Hue lights (lampen) verbinden met SmartThings en ze bedienen via uw Things-gebied of het Dashboard in de SmartThings Mobiele app. Werk eerst met de Philips Hue-app uw Hue Bridge (brug) bij buiten de SmartThings-app. +'''Discovery Started!'''=Detectie gestart! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Even geduld terwijl wij uw Hue Bridge (brug) detecteren. Houd er rekening mee dat u eerst uw Hue Bridge en Lights (lampen) moet configureren met de applicatie Philips Hue. Het detecteren kan wel vijf minuten of langer duren, dus even geduld! Selecteer uw apparaat hieronder na het detecteren. +'''Select Hue Bridge ({{numFound}} found)'''=Selecteer Hue Bridge (brug) ({{numFound}} gevonden) +'''Bridge Discovery Failed!'''=Detectie brug mislukt! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Kan geen Hue Bridges (bruggen) detecteren. Bevestig dat de Hue Bridge (brug) is verbonden met hetzelfde netwerk als uw SmartThings-hub en wordt voorzien van voeding. +'''Linking with your Hue'''=Koppelen met uw Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=De huidige Hue-gebruikersnaam is ongeldig. Druk op de knop op uw Hue Bridge (brug) om opnieuw te koppelen. +'''Press the button on your Hue Bridge to setup a link.'''=Druk op de knop op uw Hue Bridge (brug) om een koppeling in te stellen. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=U hebt geen Hue Bridge (brug) geselecteerd. Druk op “Done” (Gereed) en selecteer één brug voordat u op Next (Volgende) klikt. +'''Success!'''=Succes! +'''Linking to your hub was a success! Please click 'Next'!'''=De koppeling met uw hub is geslaagd! Klik op Next (Volgende)! +'''Find bridges'''=Bruggen zoeken +'''Light Discovery Failed!'''=Lampdetectie mislukt +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Kan geen lampen detecteren, probeer het later opnieuw. Klik op Done (Gereed) om af te sluiten. +'''Select Hue Lights to add ({{numFound}} found)'''=Selecteer Hue Lights (lampen) om toe te voegen ({{numFound}} gevonden) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Eerder toegevoegde Hue Lights (lampen) ({{existingLightsSize}} toegevoegd) +'''Light Discovery Started!'''=Lampdetectie gestart. +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Even geduld terwijl wij uw Hue Lights (lampen) detecteren. Het detecteren kan wel vijf minuten of langer duren, dus even geduld! Selecteer uw apparaat hieronder na het detecteren. diff --git a/smartapps/smartthings/hue-connect.src/i18n/pl_PL.properties b/smartapps/smartthings/hue-connect.src/i18n/pl_PL.properties new file mode 100644 index 0000000..eb51180 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/pl_PL.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Umożliwia łączenie Philips Hue Lights (lamp Philips Hue) z rozwiązaniem SmartThings oraz sterowanie nimi w obszarze Things (Rzeczy) lub na pulpicie nawigacyjnym w aplikacji mobilnej SmartThings. Najpierw zaktualizuj Hue Bridge (mostek Hue) poza aplikacją SmartThings, korzystając z aplikacji Philips Hue. +'''Discovery Started!'''=Rozpoczęto wykrywanie. +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Poczekaj na wykrycie Hue Bridge (mostka Hue). Pamiętaj, że najpierw musisz skonfigurować Hue Bridge (mostek Hue) i Hue Lights (lampy Hue) za pomocą aplikacji Philips Hue. Wykrywanie może potrwać co najmniej pięć minut, więc usiądź i zrelaksuj się. Po wykryciu Twojego urządzenia wybierz je poniżej. +'''Select Hue Bridge ({{numFound}} found)'''=Wybierz Hue Bridge (mostek Hue) (znaleziono {{numFound}}) +'''Bridge Discovery Failed!'''=Wykrywanie mostka nie powiodło się! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Wykrywanie Hue Bridges (mostków Hue) nie powiodło się. Potwierdź, że Hue Bridge (mostek Hue) został podłączony do tej samej sieci, co koncentrator SmartThings Hub, oraz że jego zasilanie działa. +'''Linking with your Hue'''=Łączenie z urządzeniem Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Bieżąca nazwa użytkownika urządzenia Hue jest nieprawidłowa. Naciśnij przycisk na Hue Bridge (mostku Hue), aby ponownie go podłączyć. +'''Press the button on your Hue Bridge to setup a link.'''=Naciśnij przycisk na Hue Bridge (mostku Hue), aby skonfigurować połączenie. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nie wybrano Hue Bridge (mostka Hue), naciśnij opcję „Done” (Gotowe) i wybierz go przed kliknięciem opcji Next (Dalej). +'''Success!'''=Sukces! +'''Linking to your hub was a success! Please click 'Next'!'''=Łączenie z koncentratorem zakończyło się pomyślnie. Kliknij opcję „Next” (Dalej). +'''Find bridges'''=Wyszukaj mostki +'''Light Discovery Failed!'''=Wykrywanie lampy nie powiodło się. +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nie można wykryć lamp, spróbuj ponownie później. Kliknij opcję Done (Gotowe), aby zakończyć. +'''Select Hue Lights to add ({{numFound}} found)'''=Wybierz Hue Lights (lampy Hue) do dodania (znaleziono {{numFound}}) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Poprzednio dodane Hue Lights (lampy Hue) (dodano {{existingLightsSize}}) +'''Light Discovery Started!'''=Rozpoczęto wykrywanie lamp. +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Poczekaj na wykrycie Hue Lights (lamp Hue). Wykrywanie może potrwać co najmniej pięć minut, więc usiądź i zrelaksuj się. Po wykryciu Twojego urządzenia wybierz je poniżej. diff --git a/smartapps/smartthings/hue-connect.src/i18n/pt_BR.properties b/smartapps/smartthings/hue-connect.src/i18n/pt_BR.properties new file mode 100644 index 0000000..81d8f13 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/pt_BR.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Permite conectar as luzes da Philips Hue com o SmartThings e controlá-las a partir da área "Things" (Coisas) ou do "Dashboard" (Painel) do aplicativo SmartThings Mobile. Primeiro atualize a ponte da Hue fora do aplicativo SmartThings, usando o aplicativo Philips Hue. +'''Discovery Started!'''=Detecção iniciada! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Aguarde enquanto detectamos a ponte da Hue. Note que você deve primeiro configurar a ponte da Hue e as luzes usando o aplicativo Philips Hue. A detecção pode levar cinco minutos ou mais, portanto, sente-se e relaxe! Selecione abaixo o seu aparelho após a detecção. +'''Select Hue Bridge ({{numFound}} found)'''=Selecionar ponte da Hue ({{numFound}} encontrado(s)) +'''Bridge Discovery Failed!'''=Falha ao detectar a ponte! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Falha ao detectar pontes da Hue. Verifique se a ponte da Hue está conectada à mesma rede do seu SmartThings Hub e ligada na tomada. +'''Linking with your Hue'''=Vinculando com a Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=O nome de usuário da Hue atual é inválido. Pressione o botão na ponte da Hue para vincular novamente. +'''Press the button on your Hue Bridge to setup a link.'''=Pressione o botão na ponte da Hue para configurar a vinculação. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Você não selecionou uma ponte da Hue. Pressione 'Done' (Concluir) e selecione a ponte antes de clicar em Next (Avançar). +'''Success!'''=Sucesso! +'''Linking to your hub was a success! Please click 'Next'!'''=A vinculação com o hub foi concluída com êxito. Clique em "Next" (Avançar). +'''Find bridges'''=Encontrar pontes +'''Light Discovery Failed!'''=Falha ao detectar luz! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Falha ao detectar as luzes. Tente novamente mais tarde. Clique em \"Done\" (Concluir) para sair. +'''Select Hue Lights to add ({{numFound}} found)'''=Selecione as luzes da Hue a serem adicionadas ({{numFound}} encontrada(s)) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Luzes da Hue adicionadas anteriormente ({{existingLightsSize}} adicionada(s)) +'''Light Discovery Started!'''=Detecção de luz iniciada! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Aguarde enquanto detectamos as luzes da Hue. A detecção pode levar cinco minutos ou mais, portanto, sente-se e relaxe! Selecione abaixo o seu aparelho após a detecção. diff --git a/smartapps/smartthings/hue-connect.src/i18n/pt_PT.properties b/smartapps/smartthings/hue-connect.src/i18n/pt_PT.properties new file mode 100644 index 0000000..6298f90 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/pt_PT.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Permite-lhe ligar as luzes Philips Hue com o SmartThings e controlá-las a partir da sua área Things (Coisas) ou do Dashboard (Painel) na aplicação SmartThings Mobile. Actualize primeiro o seu Hue Bridge, fora da aplicação SmartThings, utilizando a aplicação Philips Hue. +'''Discovery Started!'''=Detecção Iniciada! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Aguarde enquanto detectamos o seu Hue Bridge. Note que tem de configurar primeiro os seus Hue Bridge e Hue Lights (Luzes Hue) utilizando a aplicação Philips Hue. A detecção pode demorar cinco minutos ou mais, por isso, sente-se e relaxe! Seleccione o seu dispositivo abaixo depois de ter sido detectado. +'''Select Hue Bridge ({{numFound}} found)'''=Seleccionar Hue Bridge ({{numFound}} encontrado) +'''Bridge Discovery Failed!'''=Falha na Detecção de Bridge! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Falha ao detectar quaisquer Hue Bridges. Confirme se o Hue Bridge está ligado à mesma rede que o seu Hub SmartThings e que tem carga. +'''Linking with your Hue'''=Ligar com o Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=O nome de utilizador do Hue actual é inválido. Prima o botão no seu Hue Bridge para ligar novamente. +'''Press the button on your Hue Bridge to setup a link.'''=Prima o botão no Hue Bridge para configurar uma ligação. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Done' (Concluído) e seleccione um antes de clicar em Next (Seguinte). +'''Success!'''=Sucesso! +'''Linking to your hub was a success! Please click 'Next'!'''=A ligação ao seu Hub foi um sucesso! Clique em "Next" (Seguinte)! +'''Find bridges'''=Localizar bridges +'''Light Discovery Failed!'''=Falha na Detecção de Luzes! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Falha ao detectar quaisquer luzes, tente novamente mais tarde. Clique em \"Done\" (Concluído). +'''Select Hue Lights to add ({{numFound}} found)'''=Seleccione Hue Lights (Luzez Hue) para adicionar ({{numFound}} encontrado) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (Luzes Hue) anteriormente adicionado ({{existingLightsSize}} adicionado) +'''Light Discovery Started!'''=Detecção de Luzes Iniciada! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Aguarde enquanto detectamos o seu Hue Lights (Luzes Hue). A detecção pode demorar cinco minutos ou mais, por isso, sente-se e relaxe! Seleccione o seu dispositivo abaixo depois de ter sido detectado. diff --git a/smartapps/smartthings/hue-connect.src/i18n/ro_RO.properties b/smartapps/smartthings/hue-connect.src/i18n/ro_RO.properties new file mode 100644 index 0000000..02faf38 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/ro_RO.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Vă permite să conectați Philips Hue lights (luminile Philips Hue) cu SmartThings și să le controlați din zona Things sau Dashboard aflate în aplicația SmartThings Mobile. Actualizați mai întâi Hue Bridge, în afara aplicației SmartThings, utilizând aplicația Philips Hue. +'''Discovery Started!'''=Descoperire pornită! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Așteptați până când descoperim dispozitivul Hue Bridge. Rețineți că trebuie să configurați mai întâi Hue Bridge și Hue Lights (lumini Hue) utilizând aplicația Philips Hue. Descoperirea poate dura aproximativ cinci sau mai multe minute; relaxați-vă și așteptați! Selectați dispozitivul mai jos după ce este descoperit. +'''Select Hue Bridge ({{numFound}} found)'''=Selectare Hue Bridge ({{numFound}} găsite) +'''Bridge Discovery Failed!'''=Descoperirea Hue Bridge nu a reușit! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nu s-a descoperit niciun dispozitiv Hue Bridge. Confirmați că dispozitivul Hue Bridge este conectat la aceeași rețea ca și SmartThings Hub și că este alimentat. +'''Linking with your Hue'''=Asociere cu Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Numele de utilizator actual pentru Hue este nevalid. Apăsați butonul de pe Hue Bridge pentru a relua asocierea. +'''Press the button on your Hue Bridge to setup a link.'''=Apăsați butonul Hue Bridge pentru a configura o asociere. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nu ați a selectat un dispozitive Hue Bridge; apăsați „Done” (Efectuat) și selectați unul, apoi faceți clic pe Next (Înainte). +'''Success!'''=Succes! +'''Linking to your hub was a success! Please click 'Next'!'''=Asocierea cu hubul dvs. a reușit! Faceți clic pe „Next” (Înainte)! +'''Find bridges'''=Găsire dispozitive bridge +'''Light Discovery Failed!'''=Descoperirea luminii nu a reușit! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nu au fost găsită nicio lumină, încercați din nou mai târziu. Faceți clic pe Done (Efectuat) pentru a ieși. +'''Select Hue Lights to add ({{numFound}} found)'''=Selectați Hue Lights (lumini Hue) de adăugat ({{numFound}} găsite) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (lumini Hue) adăugate anterior ({{existingLightsSize}} adăugate) +'''Light Discovery Started!'''=Descoperire lumini pornită! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Așteptați până când descoperim Hue Lights (luminile Hue). Descoperirea poate dura aproximativ cinci sau mai multe minute; relaxați-vă și așteptați! Selectați dispozitivul mai jos după ce este descoperit. diff --git a/smartapps/smartthings/hue-connect.src/i18n/ru_RU.properties b/smartapps/smartthings/hue-connect.src/i18n/ru_RU.properties new file mode 100644 index 0000000..2a9880f --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/ru_RU.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Позволяет подключить лампы Philips Hue к концентратору SmartThings и управлять ими из области “Вещи” или с информационной панели в мобильном приложении SmartThings.\n\nПрежде чем перейти к настройке, обновите мост Hue при помощи приложения Philips Hue, вне приложения SmartThings. +'''Discovery Started!'''=Поиск начат! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Идет поиск моста Hue. Обратите внимание, что сначала необходимо настроить мост и лампы Hue с помощью приложения Philips Hue. Пожалуйста, подождите. Поиск может занять больше 5 минут. В это время можно отдохнуть и расслабиться! Когда необходимое устройство будет обнаружено, выберите его из списка ниже. +'''Select Hue Bridge ({{numFound}} found)'''=Выберите мост Hue (найдено: {{numFound}}) +'''Bridge Discovery Failed!'''=Не удалось обнаружить мост Hue! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Не обнаружено ни одного моста Hue. Убедитесь, что мост Hue подключен к одной сети с концентратором SmartThings, а его питание — включено. +'''Linking with your Hue'''=Установка связи с Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Текущее имя пользователя Hue недопустимо. Нажмите кнопку на мосту Hue, чтобы установить связь повторно. +'''Press the button on your Hue Bridge to setup a link.'''=Нажмите кнопку на мосту Hue, чтобы установить связь. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Мост Hue не выбран. Прежде чем перейти к следующему шагу, нажмите “Готово” и выберите мост. +'''Success!'''=Успешно завершено! +'''Linking to your hub was a success! Please click 'Next'!'''=Связь с концентратором установлена! Нажмите “Далее”! +'''Find bridges'''=Поиск мостов +'''Light Discovery Failed!'''=Не удалось обнаружить лампу! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Не обнаружено ни одной лампы. Повторите попытку позже. Нажмите “Готово” для выхода. +'''Select Hue Lights to add ({{numFound}} found)'''=Выберите лампы Hue для добавления (найдено: {{numFound}}) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Уже добавленные лампы Hue (добавлено: {{existingLightsSize}}) +'''Light Discovery Started!'''=Поиск ламп начат! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Идет поиск ламп Hue. Пожалуйста, подождите. Поиск может занять больше 5 минут. В это время можно отдохнуть и расслабиться! Когда необходимое устройство будет обнаружено, выберите его из списка ниже. diff --git a/smartapps/smartthings/hue-connect.src/i18n/sk_SK.properties b/smartapps/smartthings/hue-connect.src/i18n/sk_SK.properties new file mode 100644 index 0000000..83d7776 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/sk_SK.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Umožňuje pripojiť svetlá Philips Hue pomocou centrály SmartThings a ovládať ich z oblasti Things (Veci) alebo z tabule v mobilnej aplikácii SmartThings. Najskôr aktualizujte sieťový most Hue mimo aplikácie SmartThings pomocou aplikácie Philips Hue. +'''Discovery Started!'''=Spustilo sa vyhľadávanie. +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počkajte, kým sa nenájde sieťový most Hue. Najskôr musíte nakonfigurovať svetlá a sieťový most Hue pomocou aplikácie Philips Hue. Vyhľadávanie môže trvať aj päť minút alebo dlhšie, preto sa pokojne posaďte a počkajte. Po nájdení zariadenia ho nižšie vyberte. +'''Select Hue Bridge ({{numFound}} found)'''=Vyberte sieťový most Hue (nájdené: {{numFound}}) +'''Bridge Discovery Failed!'''=Vyhľadanie sieťového mostu zlyhalo. +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nepodarilo sa nájsť žiadne sieťové mosty Hue. Skontrolujte, či je sieťový most Hue pripojený k rovnakej sieti ako sieťový most SmartThings a či je zapnutý. +'''Linking with your Hue'''=Prepojenie so zariadením Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Aktuálne meno používateľa zariadenia Hue je neplatné. Stlačením tlačidla na sieťovom moste Hue obnovte prepojenie. +'''Press the button on your Hue Bridge to setup a link.'''=Stlačením tlačidla na sieťovom moste Hue nastavte prepojenie. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nevybrali ste žiadny sieťový most Hue. Stlačte tlačidlo „Done“ (Hotovo) a pred kliknutím na tlačidlo Next (Ďalej) nejaký vyberte. +'''Success!'''=Hotovo. +'''Linking to your hub was a success! Please click 'Next'!'''=Úspešne sa nadviazalo prepojenie s centrálou. Kliknite na tlačidlo Next (Ďalej). +'''Find bridges'''=Hľadať sieťové mosty +'''Light Discovery Failed!'''=Nepodarilo sa nájsť svetlo. +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nepodarilo sa nájsť žiadne svetlá, skúste to znova neskôr. Kliknutím na tlačidlo Done (Hotovo) to ukončíte. +'''Select Hue Lights to add ({{numFound}} found)'''=Vyberte svetlá Hue, ktoré chcete pridať (nájdené: {{numFound}}) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Predtým pridané svetlá Hue (pridané: {{existingLightsSize}}) +'''Light Discovery Started!'''=Spustilo sa vyhľadávanie svetiel. +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počkajte, kým sa nenájdu svetlá Hue. Vyhľadávanie môže trvať aj päť minút alebo dlhšie, preto sa pokojne posaďte a počkajte. Po nájdení zariadenia ho nižšie vyberte. diff --git a/smartapps/smartthings/hue-connect.src/i18n/sl_SI.properties b/smartapps/smartthings/hue-connect.src/i18n/sl_SI.properties new file mode 100644 index 0000000..05f1a48 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/sl_SI.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Omogoča povezavo Philips Hue lights (luči) s storitvijo SmartThings in njihovo upravljanje v razdelku Things (Stvari) ali na nadzorni plošči v mobilni aplikaciji SmartThings. Zunaj aplikacije SmartThings z aplikacijo Philips Hue najprej posodobite Hue Bridge (most). +'''Discovery Started!'''=Iskanje se je začelo! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počakajte, da poiščemo vaš Hue Bridge (most). Najprej morate z aplikacijo Philips Hue konfigurirati Hue Bridge (most) in Lights (luči). Iskanje lahko traja pet ali več minut, zato se udobno namestite in sprostite! Ko bo najdena, spodaj izberite svojo napravo. +'''Select Hue Bridge ({{numFound}} found)'''=Izberite Hue Bridge (most) (število najdenih: {{numFound}}) +'''Bridge Discovery Failed!'''=Iskanje mostu ni bilo uspešno! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nobenega Hue Bridge (most) ni bilo mogoče najti. Preverite, ali je Hue Bridge (most) povezan z istim omrežjem kot zvezdišče SmartThings in priključen na napajanje. +'''Linking with your Hue'''=Povezovanje z izdelkom Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Trenutno uporabniško ime Hue ni veljavno. Za vnovično povezavo pritisnite gumb na Hue Bridge (most). +'''Press the button on your Hue Bridge to setup a link.'''=Za nastavitev povezave pritisnite gumb na Hue Bridge (most). +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Hue Bridge (most) niste izbrali. Pritisnite »Done« (Končano) in izberite most, preden kliknete Next (Naprej). +'''Success!'''=Uspeh! +'''Linking to your hub was a success! Please click 'Next'!'''=Povezava z zvezdiščem je bila uspešna! Kliknite »Next« (Naprej)! +'''Find bridges'''=Poišči mostove +'''Light Discovery Failed!'''=Iskanje luči ni bilo uspešno! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nobene luči ni bilo mogoče najti, poskusite znova pozneje. Kliknite »Done« (Končano) za izhod. +'''Select Hue Lights to add ({{numFound}} found)'''=Izberite Hue Lights (luči), da jih dodate (število najdenih: {{numFound}}) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Predhodno dodane Hue Lights (luči) (dodano: {{existingLightsSize}}) +'''Light Discovery Started!'''=Iskanje luči se je začelo! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počakajte, da poiščemo vaše Hue Lights (luči). Iskanje lahko traja pet ali več minut, zato se udobno namestite in sprostite! Ko bo najdena, spodaj izberite svojo napravo. diff --git a/smartapps/smartthings/hue-connect.src/i18n/sq_AL.properties b/smartapps/smartthings/hue-connect.src/i18n/sq_AL.properties new file mode 100644 index 0000000..499dde3 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/sq_AL.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Të lejon të lidhësh (dritat) Philips Hue lights me SmartThings dhe t’i kontrollosh që nga zona jote Things ose Paneli i drejtimit në App-in celular SmartThings. Përditëso (urën) Hue Bridge më parë, jashtë app-it SmartThings, me anë të app-it Philips Hue. +'''Discovery Started!'''=Zbulimi filloi! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Prit pak sa të zbulojmë (urën) Hue Bridge. Mbaj parasysh se më parë duhet të konfigurosh (urën) Hue Bridge dhe Lights (dritat) me anë të aplikacionit Philips Hue. Zbulimi mund të kërkojë pesë minuta ose më shumë, prandaj bëj pak durim! Pasi të mbarojë zbulimi, përzgjidhe pajisjen tënde më poshtë. +'''Select Hue Bridge ({{numFound}} found)'''=Përzgjidh (urën) Hue Bridge ({{numFound}} u gjetën) +'''Bridge Discovery Failed!'''=Zbulimi i Bridge (urës) dështoi! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Dështova të zbuloj ndonjë (urë) Hue Bridge. Konfirmo që (ura) Hue Bridge është e lidhur me të njëjtin rrjet si Qendra SmartThings, dhe se ka energji. +'''Linking with your Hue'''=Për t’u lidhur me Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Emri i përdoruesit i tanishëm për Hue është i pavlefshëm. Shtyp butonin në (urën) Hue Bridge për t’u rilidhur. +'''Press the button on your Hue Bridge to setup a link.'''=Shtyp butonin në (urën) Hue Bridge për të konfiguruar lidhjen. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nuk ke përzgjedhur ndonjë (urë) Hue Bridge, shtyp 'Done' (U krye) dhe përzgjidh një, para se të klikosh mbi Next (Tjetri). +'''Success!'''=Sukses! +'''Linking to your hub was a success! Please click 'Next'!'''=Lidhja me qendrën doli me sukses! Kliko mbi ‘Next’ (Tjetri)! +'''Find bridges'''=Gjej ura +'''Light Discovery Failed!'''=Zbulimi i dritës dështoi! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Dështova të zbuloj drita, provo sërish më vonë. Kliko mbi Done (U krye) për të dalë. +'''Select Hue Lights to add ({{numFound}} found)'''=Përzgjidh (dritat) Hue Lights për të shtuar ({{numFound}} u gjetën) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=(Dritat) Hue Lights të shtuara më parë ({{existingLightsSize}} u shtuan) +'''Light Discovery Started!'''=Zbulimi i dritave filloi! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Prit pak sa të zbulojmë (dritat) Hue Lights. Zbulimi mund të kërkojë pesë minuta ose më shumë, prandaj bëj pak durim! Pasi të mbarojë zbulimi, përzgjidhe pajisjen tënde më poshtë. diff --git a/smartapps/smartthings/hue-connect.src/i18n/sr_RS.properties b/smartapps/smartthings/hue-connect.src/i18n/sr_RS.properties new file mode 100644 index 0000000..033dbb0 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/sr_RS.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Omogućava vam da povežete Philips Hue svetla i SmartThings i da ih kontrolišete iz oblasti Things area (Oblast za stvari) ili sa Dashboard (Komandna tabla) u aplikaciji SmartThings Mobile. Prvo ažurirajte Hue Bridge, izvan aplikacije SmartThings, koristeći aplikaciju Philips Hue. +'''Discovery Started!'''=Otkrivanje je pokrenuto! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Sačekajte da otkrijemo uređaj Hue Bridge. Imajte na umu da prvo morate da konfigurišete Hue Bridge (Hue most) i Hue Lights (Hue svetla) koristeći aplikaciju Philips Hue. Otkrivanje može da traje pet minuta ili duže i zato sedite i opustite se! Izaberite uređaj u nastavku kada bude otkriven. +'''Select Hue Bridge ({{numFound}} found)'''=Izaberite Hue Bridge ({{numFound}} pronađeno) +'''Bridge Discovery Failed!'''=Otkrivanje uređaja Bridge nije uspelo! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nije otkriven nijedan Hue Bridge uređaj. Potvrdite da je uređaj Hue Bridge povezan na istu mrežu kao i SmartThings Hub i da je uključen. +'''Linking with your Hue'''=Povezivanje sa uređajem Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Trenutno korisničko ime za Hue je nevažeće. Pritisnite dugme na uređaju Hue Bridge da biste se ponovo povezali. +'''Press the button on your Hue Bridge to setup a link.'''=Pritisnite dugme na uređaju Hue Bridge da biste konfigurisali link. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Niste izabrali uređaj Hue Bridge, pritisnite „Done“ (Gotovo) i izaberite jedan pre nego što kliknete na sledeće. +'''Success!'''=Uspeh! +'''Linking to your hub was a success! Please click 'Next'!'''=Povezivanje na čvorište je bilo uspešno! Kliknite na „Next“ (Sledeće)! +'''Find bridges'''=Pronađi mostove +'''Light Discovery Failed!'''=Otkrivanje svetla nije uspelo! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nije otkriveno nijedno svetlo, pokušajte ponovo kasnije. Kliknite na Done (Gotovo) radi izlaska. +'''Select Hue Lights to add ({{numFound}} found)'''=Izaberite svetla Hue Lights radi dodavanja (pronađeno: {{numFound}}) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Prethodno dodata svetla Hue Lights (dodato: {{existingLightsSize}}) +'''Light Discovery Started!'''=Otkrivanje svetla je pokrenuto! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Sačekajte da otkrijemo svetla Hue Lights. Otkrivanje može da traje pet minuta ili duže i zato sedite i opustite se! Izaberite uređaj u nastavku kada bude otkriven. diff --git a/smartapps/smartthings/hue-connect.src/i18n/sv_SE.properties b/smartapps/smartthings/hue-connect.src/i18n/sv_SE.properties new file mode 100644 index 0000000..e98192b --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/sv_SE.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Gör att du kan ansluta dina Philips Hue-lampor till SmartThings och styra dem från området Things (Saker) eller Dashboard (Instrumentpanelen) i programmet SmartThings Mobile. Uppdatera Hue-bryggan först, utanför programmet SmartThings, med programmet Philips Hue. +'''Discovery Started!'''=Identifieringen har startat! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vänta medan vi identifierar din Hue-brygga. Observera att du först måste konfigurera Hue-bryggan och lamporna med programmet Philips Hue. Identifieringen kan ta fem minuter eller mer, så ta det bara lugnt! Välj enheten nedan när den har identifierats. +'''Select Hue Bridge ({{numFound}} found)'''=Välj Hue-brygga ({{numFound}} hittades) +'''Bridge Discovery Failed!'''=Bryggidentifieringen misslyckades! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Det gick inte att identifiera några Hue-bryggor. Bekräfta att Hue-bryggan är ansluten till samma nätverk som SmartThings-hubben och att den är på. +'''Linking with your Hue'''=Länka till din Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Det nuvarande Hue-användarnamnet är ogiltigt. Tryck på knappen på Hue-bryggan för att göra om länkningen. +'''Press the button on your Hue Bridge to setup a link.'''=Tryck på knappen på Hue-bryggan för att konfigurera en länk. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Du har inte valt någon Hue-brygga. Tryck på ”Done” (Klart) och välj en innan du klickar på Next (Nästa). +'''Success!'''=Det lyckades! +'''Linking to your hub was a success! Please click 'Next'!'''=Det gick att länka till hubben! Klicka på Next (Nästa). +'''Find bridges'''=Hitta bryggor +'''Light Discovery Failed!'''=Lampidentifieringen misslyckades! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Det gick inte att identifiera några lampor. Försök igen senare. Avsluta genom att klicka på Done (Klart). +'''Select Hue Lights to add ({{numFound}} found)'''=Välj Hue-lampor att lägga till ({{numFound}} hittades) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Tidigare tillagda Hue-lampor ({{existingLightsSize}} tillagda) +'''Light Discovery Started!'''=Lampidentifieringen har startat! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vänta medan vi identifierar dina Hue-lampor. Identifieringen kan ta fem minuter eller mer, så ta det bara lugnt! Välj enheten nedan när den har identifierats. diff --git a/smartapps/smartthings/hue-connect.src/i18n/th_TH.properties b/smartapps/smartthings/hue-connect.src/i18n/th_TH.properties new file mode 100644 index 0000000..281e714 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/th_TH.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=ช่วยให้คุณเชื่อมต่อไฟ Philips Hue ของคุณกับ SmartThings และทำการควบคุมไฟได้จากพื้นที่ Things หรือแดชบอร์ดของคุณในแอพมือถือ SmartThings โปรดอัพเดท Hue Bridge ของคุณก่อน ที่ด้านนอกแอพ SmartThings โดยใช้แอพ Philips Hue +'''Discovery Started!'''=การค้นหาเริ่มต้นแล้ว +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=โปรดรอขณะเราค้นหา Hue Bridge ของคุณ ให้ทราบว่าคุณจะต้องกำหนดค่า Hue Bridge และไฟโดยใช้แอพพลิเคชั่น Phillips Hue ซึ่งขั้นตอนการค้นหาอาจใช้เวลาห้านาทีหรือมากกว่านั้น คุณสามารถนั่งรอได้โดยไม่ต้องกังวลใจ เลือกอุปกรณ์ของคุณที่ด้านล่างเมื่อถูกค้นพบ +'''Select Hue Bridge ({{numFound}} found)'''=เลือก Hue Bridge (พบ {{numFound}}) +'''Bridge Discovery Failed!'''=การค้นหา Bridge ล้มเหลว! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=ไม่พบ Hue Bridge ใดๆ โปรดยืนยันว่า Hue Bridge เชื่อมต่ออยู่กับเครือข่ายเดียวกันกับ SmartThings Hub ของคุณ และมีไฟเข้าอยู่ +'''Linking with your Hue'''=การเชื่อมโยงกับ Hue ของคุณ +'''The current Hue username is invalid. Please press the button on your Hue Bridge to relink.'''=ชื่อผู้ใช้ Hue ในปัจจุบันไม่ถูกต้อง โปรดกดปุ่มบน Hue Bridge ของคุณ เพื่อทำการเชื่อมโยงใหม่ +'''Press the button on your Hue Bridge to setup a link.'''=กดปุ่มบน Hue Bridge ของคุณเพื่อตั้งค่าลิงก์ +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=คุณยังไม่ได้เลือก Hue Bridge โปรดกด 'เรียบร้อย' และเลือกหนึ่งรายการก่อนคลิก ถัดไป +'''Success!'''=เสร็จสิ้น +'''Linking to your hub was a success! Please click 'Next'!'''=เชื่อมโยงกับ Hub ของคุณสำเร็จแล้ว โปรดคลิก 'ถัดไป' +'''Find bridges'''=พบ Bridge +'''Light Discovery Failed!'''=การค้นหาไฟล้มเหลว +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=ไม่พบไฟใดๆ โปรดลองอีกครั้งในภายหลัง คลิก เรียบร้อย เพื่อออก +'''Select Hue Lights to add ({{numFound}} found)'''=เลือกไฟ Hue เพื่อเพิ่ม (พบ {{numFound}}) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=ไฟ Hue ที่เพิ่มก่อนหน้านี้ ({{existingLightsSize}} ถูกเพิ่ม) +'''Light Discovery Started!'''=การค้นหาไฟเริ่มต้นแล้ว +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=โปรดรอขณะเราค้นหาไฟ Hue ของคุณ ขั้นตอนการค้นหาอาจใช้เวลาห้านาทีหรือมากกว่านั้น คุณสามารถนั่งรอได้โดยไม่ต้องกังวลใจ เลือกอุปกรณ์ของคุณที่ด้านล่างเมื่อถูกค้นพบ diff --git a/smartapps/smartthings/hue-connect.src/i18n/tr_TR.properties b/smartapps/smartthings/hue-connect.src/i18n/tr_TR.properties new file mode 100644 index 0000000..eba2abb --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/tr_TR.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Philips Hue ışıklarınızı SmartThings'e bağlamanıza ve Things alanınız veya SmartThings uygulamasındaki Kontrol Paneli'nden kontrol etmenize olanak tanır. Lütfen önce SmartThings uygulamasının dışında Philips Hue uygulamasını kullanarak Hue Bridge'inizi güncelleyin. +'''Discovery Started!'''=Keşif Başladı! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Hue Bridge'iniz keşfedilirken lütfen bekleyin. Hue Bridge ve Işıkları Philips Hue uygulamasını kullanarak yapılandırabileceğinizi lütfen unutmayın. Keşif beş dakika veya daha uzun sürebilir, biraz arkanıza yaslanıp rahatlayın! Keşfedildikten sonra aşağıda cihazınızı seçin. +'''Select Hue Bridge ({{numFound}} found)'''=Hue Bridge'i seçin ({{numFound}} bulundu) +'''Bridge Discovery Failed!'''=Bridge Keşfi Başarısız Oldu! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Hiçbir Hue Bridge keşfedilemedi. Lütfen Hue Bridge'in SmartThings Hub'ınızla aynı ağa bağlı olduğunu ve gücünün olduğunu doğrulayın. +'''Linking with your Hue'''=Hue'nuzu bağlama +'''The current Hue username is invalid. Please press the button on your Hue Bridge to relink.'''=Mevcut Hue kullanıcı ismi geçersiz. Yeniden bağlamak için lütfen Hue Bridge'inizin üzerindeki tuşa basın. +'''Press the button on your Hue Bridge to setup a link.'''=Bağlantı kurmak için Hue Bridge'inizin üzerindeki tuşa basın. +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Hue Bridge seçmediniz. İleri öğesine tıklamadan önce lütfen 'Bitti' öğesine basıp bir tane seçin. +'''Success!'''=Başarılı! +'''Linking to your hub was a success! Please click 'Next'!'''=Hub'ınız başarıyla bağlandı! Lütfen "İleri" öğesine tıklayın! +'''Find bridges'''=Bridge'leri bul +'''Light Discovery Failed!'''=Işık Keşfi Başarısız Oldu! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Hiçbir ışık keşfedilemedi. Lütfen daha sonra tekrar deneyin. Çıkmak için Bitti öğesine tıklayın. +'''Select Hue Lights to add ({{numFound}} found)'''=Eklemek için Hue Işıklarını seçin ({{numFound}} bulundu) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Önceden eklenen Hue Işıkları ({{existingLightsSize}} eklendi) +'''Light Discovery Started!'''=Işık Keşfi Başladı! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Hue Işıklarınız keşfedilirken lütfen bekleyin. Keşif beş dakika veya daha uzun sürebilir, biraz arkanıza yaslanıp rahatlayın! Keşfedildikten sonra aşağıda cihazınızı seçin. diff --git a/smartapps/smartthings/hue-connect.src/i18n/zh_CN.properties b/smartapps/smartthings/hue-connect.src/i18n/zh_CN.properties new file mode 100644 index 0000000..92e7352 --- /dev/null +++ b/smartapps/smartthings/hue-connect.src/i18n/zh_CN.properties @@ -0,0 +1,19 @@ +'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=可将 Philips Hue 灯连接到 SmartThings,并从 SmartThings 移动应用程序中的“设备”区域或仪表板控制它们。请首先使用 (SmartThings 应用程序以外的) Philips Hue 应用程序更新您的 Hue 桥接器。 +'''Discovery Started!'''=已开始查找! +'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=我们正在查找您的 Hue 桥接器,请稍候。请注意,首先您必须使用 Philips Hue 应用程序配置 Hue 桥接器。查找过程可能需要五分钟或更长时间,请耐心等待!找到之后,请在下方选择您的设备。 +'''Select Hue Bridge ({{numFound}} found)'''=选择 Hue 桥接器 (找到 {{numFound}} 个) +'''Bridge Discovery Failed!'''=桥接器查找失败! +'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=未能找到任何 Hue 桥接器。请确认 Hue 桥接器连接到与 SmartThings Hub 相同的网络,并且该桥接器已接通电源。 +'''Linking with your Hue'''=正在连接您的 Hue +'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Hue 当前用户名无效。请按 Hue 桥接器上的按钮重新链接。 +'''Press the button on your Hue Bridge to setup a link.'''=按 Hue 桥接器上的按钮以设置链接。 +'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=您尚未选择 Hue 桥接器,请按“完成”,选择一个桥接器,然后单击“下一步”。 +'''Success!'''=成功! +'''Linking to your hub was a success! Please click 'Next'!'''=成功链接到您的 Hub!请单击“下一步”! +'''Find bridges'''=查找桥接器 +'''Light Discovery Failed!'''=灯查找失败! +'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=未能找到任何灯,请稍候重试。单击“完成”以退出。 +'''Select Hue Lights to add ({{numFound}} found)'''=选择 Hue 灯进行添加 (找到 {{numFound}} 个) +'''Previously added Hue Lights ({{existingLightsSize}} added)'''=以前添加的 Hue 灯 (已添加 {{existingLightsSize}} 个) +'''Light Discovery Started!'''=已开始查找灯! +'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=我们正在查找您的 Hue 灯,请稍候。查找过程可能需要五分钟或更长时间,请耐心等待!找到之后,请在下方选择您的设备。 From 7ac7bd30342fb09be4f386770bfa0163a071bc46 Mon Sep 17 00:00:00 2001 From: Donald Kirker Date: Mon, 20 Mar 2017 07:39:37 -0700 Subject: [PATCH 100/104] DVCSMP-2504: Add fingerprints for Centrailte generic multi, motion, water leak --- .../smartsense-moisture-sensor.groovy | 1 + .../smartsense-motion-sensor.src/smartsense-motion-sensor.groovy | 1 + .../smartsense-multi-sensor.src/smartsense-multi-sensor.groovy | 1 + 3 files changed, 3 insertions(+) diff --git a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy index 4d27081..38ba5df 100644 --- a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy +++ b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy @@ -33,6 +33,7 @@ metadata { fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315" fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-Seu", deviceJoinName: "Water Leak Sensor" fingerprint inClusters: "0000,0001,0003,0020,0402,0500,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-L", deviceJoinName: "Iris Smart Water Sensor" + fingerprint inClusters: "0000,0001,0003,0020,0402,0500,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-G", deviceJoinName: "Centralite Water Sensor" fingerprint inClusters: "0000,0001,0003,000F,0020,0402,0500", outClusters: "0019", manufacturer: "SmartThings", model: "moisturev4", deviceJoinName: "Water Leak Sensor" } diff --git a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy index 2032d3f..83d42da 100644 --- a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy +++ b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy @@ -34,6 +34,7 @@ metadata { fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3325" fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3326" fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3326-L", deviceJoinName: "Iris Motion Sensor" + fingerprint inClusters: "0000,0001,0003,0020,0402,0500,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3328-G", deviceJoinName: "Centralite Micro Motion Sensor" fingerprint inClusters: "0000,0001,0003,000F,0020,0402,0500", outClusters: "0019", manufacturer: "SmartThings", model: "motionv4", deviceJoinName: "Motion Sensor" fingerprint inClusters: "0000,0001,0003,000F,0020,0402,0500", outClusters: "0019", manufacturer: "SmartThings", model: "motionv5", deviceJoinName: "Motion Sensor" } diff --git a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy index 8229414..62a7fc3 100644 --- a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy +++ b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy @@ -33,6 +33,7 @@ metadata { fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05,FC02", outClusters: "0019", manufacturer: "CentraLite", model: "3320" fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05,FC02", outClusters: "0019", manufacturer: "CentraLite", model: "3321" fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05,FC02", outClusters: "0019", manufacturer: "CentraLite", model: "3321-S", deviceJoinName: "Multipurpose Sensor" + fingerprint inClusters: "0000,0001,0003,0020,0402,0500,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3323-G", deviceJoinName: "Centralite Micro Door Sensor" fingerprint inClusters: "0000,0001,0003,000F,0020,0402,0500,FC02", outClusters: "0019", manufacturer: "SmartThings", model: "multiv4", deviceJoinName: "Multipurpose Sensor" attribute "status", "string" From 8a3c9edf0ab0fc6abf2d1721327f76eafc6a95d5 Mon Sep 17 00:00:00 2001 From: Parijat Das Date: Mon, 20 Mar 2017 14:54:14 -0700 Subject: [PATCH 101/104] Added health-check for Aeon Multisensor Gen5 --- .../aeon-multisensor-gen5.src/.st-ignore | 2 + .../aeon-multisensor-gen5.src/README.md | 43 +++++++++++++++++++ .../aeon-multisensor-gen5.groovy | 14 ++++++ 3 files changed, 59 insertions(+) create mode 100644 devicetypes/smartthings/aeon-multisensor-gen5.src/.st-ignore create mode 100644 devicetypes/smartthings/aeon-multisensor-gen5.src/README.md diff --git a/devicetypes/smartthings/aeon-multisensor-gen5.src/.st-ignore b/devicetypes/smartthings/aeon-multisensor-gen5.src/.st-ignore new file mode 100644 index 0000000..f78b46e --- /dev/null +++ b/devicetypes/smartthings/aeon-multisensor-gen5.src/.st-ignore @@ -0,0 +1,2 @@ +.st-ignore +README.md diff --git a/devicetypes/smartthings/aeon-multisensor-gen5.src/README.md b/devicetypes/smartthings/aeon-multisensor-gen5.src/README.md new file mode 100644 index 0000000..62a8f9a --- /dev/null +++ b/devicetypes/smartthings/aeon-multisensor-gen5.src/README.md @@ -0,0 +1,43 @@ +# Aeon Multisensor Gen5 + +Cloud Execution + +Works with: + +* [Aeon Labs MultiSensor (Gen 5)](https://www.smartthings.com/works-with-smartthings/sensors/aeon-labs-multisensor-gen-5) + +## Table of contents + +* [Capabilities](#capabilities) +* [Health](#device-health) +* [Troubleshooting](#troubleshooting) + +## Capabilities + +* **Motion Sensor** - can detect motion +* **Temperature Measurement** - defines device measures current temperature +* **Relative Humidity Measurement** - allow reading the relative humidity from devices that support it +* **Illuminance Measurement** - gives the illuminance reading from devices that support it +* **Configuration** - _configure()_ command called when device is installed or device preferences updated +* **Sensor** - detects sensor events +* **Battery** - defines device uses a battery +* **Health Check** - indicates ability to get device health notifications + + +## Device Health + +Aeon Labs MultiSensor (Gen 5) is polled by the hub. +As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed. +Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins. +Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for +the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row, +it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time. + +* __32min__ checkInterval + +## Troubleshooting + +If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. +Pairing needs to be tried again by placing the device closer to the hub. +Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link: +* [Aeon Labs MultiSensor (Gen 5) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206157226-Aeon-Labs-MultiSensor-Gen-5-) \ No newline at end of file diff --git a/devicetypes/smartthings/aeon-multisensor-gen5.src/aeon-multisensor-gen5.groovy b/devicetypes/smartthings/aeon-multisensor-gen5.src/aeon-multisensor-gen5.groovy index 04888d3..09e3f2b 100644 --- a/devicetypes/smartthings/aeon-multisensor-gen5.src/aeon-multisensor-gen5.groovy +++ b/devicetypes/smartthings/aeon-multisensor-gen5.src/aeon-multisensor-gen5.groovy @@ -20,10 +20,12 @@ metadata { capability "Configuration" capability "Sensor" capability "Battery" + capability "Health Check" command "configureAfterSecure" fingerprint deviceId: "0x0701", inClusters: "0x5E,0x86,0x72,0x59,0x85,0x73,0x71,0x84,0x80,0x30,0x31,0x70,0x98,0x7A", outClusters:"0x5A" + fingerprint mfr:"0086", prod:"0102", model:"004A", deviceJoinName: "Aeon Labs MultiSensor (Gen 5)" } simulator { @@ -98,6 +100,11 @@ metadata { } } +def updated(){ +// Device-Watch simply pings if no device events received for 32min(checkInterval) + sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) +} + def parse(String description) { def result = null @@ -244,6 +251,13 @@ def configureAfterSecure() { secureSequence(request) + ["delay 20000", zwave.wakeUpV1.wakeUpNoMoreInformation().format()] } +/** + * PING is used by Device-Watch in attempt to reach the Device + * */ +def ping() { + secure(zwave.batteryV1.batteryGet()) +} + def configure() { // log.debug "configure()" //["delay 30000"] + secure(zwave.securityV1.securityCommandsSupportedGet()) From d233a65ef517d93477ee13e227b4058dcf64ff5c Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Mon, 20 Mar 2017 16:43:22 -0600 Subject: [PATCH 102/104] Hue: Updated errors in text not matching i18 files --- smartapps/smartthings/hue-connect.src/hue-connect.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smartapps/smartthings/hue-connect.src/hue-connect.groovy b/smartapps/smartthings/hue-connect.src/hue-connect.groovy index b9c6dc6..5ded2b2 100644 --- a/smartapps/smartthings/hue-connect.src/hue-connect.groovy +++ b/smartapps/smartthings/hue-connect.src/hue-connect.groovy @@ -21,7 +21,7 @@ definition( name: "Hue (Connect)", namespace: "smartthings", author: "SmartThings", - description: "Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please setup your Hue Bridge first, outside of the SmartThings app, using the Philips Hue application.", + description: "Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.", category: "SmartThings Labs", iconUrl: "https://s3.amazonaws.com/smartapp-icons/Partner/hue.png", iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Partner/hue@2x.png", @@ -185,7 +185,7 @@ def bulbDiscovery() { state.inBulbDiscovery = false bulbRefreshCount = 0 return dynamicPage(name: "bulbDiscovery", title: "Light Discovery Failed!", nextPage: "", refreshInterval: 0, install: true, uninstall: true) { - section("Failed to discover any lights, please try again later. Click Done to exit.") { + section("Failed to discover any lights, please try again later. Click 'Done' to exit.") { paragraph title: "Previously added Hue Lights ({{existingLightsSize}} added)", messageArgs: [existingLightsSize: existingLightsSize], existingLightsDescription } section { From ce07c065c8494bbc598d756a44c57fde31c89424 Mon Sep 17 00:00:00 2001 From: Lars Finander Date: Mon, 20 Mar 2017 17:31:05 -0600 Subject: [PATCH 103/104] Hue: Revert i18 changes --- .../hue-connect.src/hue-connect.groovy | 264 +++++++++--------- .../hue-connect.src/i18n/ar_AE.properties | 19 -- .../hue-connect.src/i18n/ar_IL.properties | 19 -- .../hue-connect.src/i18n/bg_BG.properties | 19 -- .../hue-connect.src/i18n/cs_CZ.properties | 19 -- .../hue-connect.src/i18n/da_DK.properties | 19 -- .../hue-connect.src/i18n/de_AT.properties | 19 -- .../hue-connect.src/i18n/de_CH.properties | 19 -- .../hue-connect.src/i18n/de_DE.properties | 19 -- .../hue-connect.src/i18n/el_GR.properties | 19 -- .../hue-connect.src/i18n/en_AU.properties | 19 -- .../hue-connect.src/i18n/en_CA.properties | 19 -- .../hue-connect.src/i18n/en_GB.properties | 19 -- .../hue-connect.src/i18n/en_IE.properties | 19 -- .../hue-connect.src/i18n/en_NZ.properties | 19 -- .../hue-connect.src/i18n/en_PH.properties | 19 -- .../hue-connect.src/i18n/en_ZA.properties | 19 -- .../hue-connect.src/i18n/es_ES.properties | 19 -- .../hue-connect.src/i18n/es_US.properties | 19 -- .../hue-connect.src/i18n/et_EE.properties | 19 -- .../hue-connect.src/i18n/fi_FI.properties | 19 -- .../hue-connect.src/i18n/fr_BE.properties | 19 -- .../hue-connect.src/i18n/fr_CA.properties | 19 -- .../hue-connect.src/i18n/fr_CH.properties | 19 -- .../hue-connect.src/i18n/fr_FR.properties | 19 -- .../hue-connect.src/i18n/hr_HR.properties | 19 -- .../hue-connect.src/i18n/hu_HU.properties | 19 -- .../hue-connect.src/i18n/it_IT.properties | 19 -- .../hue-connect.src/i18n/ko_KR.properties | 19 -- .../hue-connect.src/i18n/nb_NO.properties | 19 -- .../hue-connect.src/i18n/nl_BE.properties | 19 -- .../hue-connect.src/i18n/nl_NL.properties | 19 -- .../hue-connect.src/i18n/pl_PL.properties | 19 -- .../hue-connect.src/i18n/pt_BR.properties | 19 -- .../hue-connect.src/i18n/pt_PT.properties | 19 -- .../hue-connect.src/i18n/ro_RO.properties | 19 -- .../hue-connect.src/i18n/ru_RU.properties | 19 -- .../hue-connect.src/i18n/sk_SK.properties | 19 -- .../hue-connect.src/i18n/sl_SI.properties | 19 -- .../hue-connect.src/i18n/sq_AL.properties | 19 -- .../hue-connect.src/i18n/sr_RS.properties | 19 -- .../hue-connect.src/i18n/sv_SE.properties | 19 -- .../hue-connect.src/i18n/th_TH.properties | 19 -- .../hue-connect.src/i18n/tr_TR.properties | 19 -- .../hue-connect.src/i18n/zh_CN.properties | 19 -- 45 files changed, 135 insertions(+), 965 deletions(-) delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/ar_AE.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/ar_IL.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/bg_BG.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/cs_CZ.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/da_DK.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/de_AT.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/de_CH.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/de_DE.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/el_GR.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_AU.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_CA.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_GB.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_IE.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_NZ.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_PH.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/en_ZA.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/es_ES.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/es_US.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/et_EE.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/fi_FI.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/fr_BE.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/fr_CA.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/fr_CH.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/fr_FR.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/hr_HR.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/hu_HU.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/it_IT.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/ko_KR.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/nb_NO.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/nl_BE.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/nl_NL.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/pl_PL.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/pt_BR.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/pt_PT.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/ro_RO.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/ru_RU.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/sk_SK.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/sl_SI.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/sq_AL.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/sr_RS.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/sv_SE.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/th_TH.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/tr_TR.properties delete mode 100644 smartapps/smartthings/hue-connect.src/i18n/zh_CN.properties diff --git a/smartapps/smartthings/hue-connect.src/hue-connect.groovy b/smartapps/smartthings/hue-connect.src/hue-connect.groovy index 5ded2b2..8870987 100644 --- a/smartapps/smartthings/hue-connect.src/hue-connect.groovy +++ b/smartapps/smartthings/hue-connect.src/hue-connect.groovy @@ -15,13 +15,12 @@ * for the specific language governing permissions and limitations under the License. * */ -include 'localization' definition( name: "Hue (Connect)", namespace: "smartthings", author: "SmartThings", - description: "Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.", + description: "Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Adjust colors by going to the Thing detail screen for your Hue lights (tap the gear on Hue tiles).\n\nPlease update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.", category: "SmartThings Labs", iconUrl: "https://s3.amazonaws.com/smartapp-icons/Partner/hue.png", iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Partner/hue@2x.png", @@ -29,11 +28,11 @@ definition( ) preferences { - page(name: "mainPage", title: "", content: "mainPage", refreshTimeout: 5) - page(name: "bridgeDiscovery", title: "", content: "bridgeDiscovery", refreshTimeout: 5) - page(name: "bridgeDiscoveryFailed", title: "", content: "bridgeDiscoveryFailed", refreshTimeout: 0) - page(name: "bridgeBtnPush", title: "", content: "bridgeLinking", refreshTimeout: 5) - page(name: "bulbDiscovery", title: "", content: "bulbDiscovery", refreshTimeout: 5) + page(name:"mainPage", title:"Hue Device Setup", content:"mainPage", refreshTimeout:5) + page(name:"bridgeDiscovery", title:"Hue Bridge Discovery", content:"bridgeDiscovery", refreshTimeout:5) + page(name:"bridgeDiscoveryFailed", title:"Bridge Discovery Failed", content:"bridgeDiscoveryFailed", refreshTimeout:0) + page(name:"bridgeBtnPush", title:"Linking with your Hue", content:"bridgeLinking", refreshTimeout:5) + page(name:"bulbDiscovery", title:"Hue Device Setup", content:"bulbDiscovery", refreshTimeout:5) } def mainPage() { @@ -48,14 +47,15 @@ def mainPage() { } } -def bridgeDiscovery(params = [:]) { +def bridgeDiscovery(params=[:]) +{ def bridges = bridgesDiscovered() int bridgeRefreshCount = !state.bridgeRefreshCount ? 0 : state.bridgeRefreshCount as int state.bridgeRefreshCount = bridgeRefreshCount + 1 def refreshInterval = 3 def options = bridges ?: [] - def numFound = options.size() ?: "0" + def numFound = options.size() ?: 0 if (numFound == 0) { if (state.bridgeRefreshCount == 25) { log.trace "Cleaning old bridges memory" @@ -75,26 +75,25 @@ def bridgeDiscovery(params = [:]) { ssdpSubscribe() //bridge discovery request every 15 //25 seconds - if ((bridgeRefreshCount % 5) == 0) { + if((bridgeRefreshCount % 5) == 0) { discoverBridges() } //setup.xml request every 3 seconds except on discoveries - if (((bridgeRefreshCount % 3) == 0) && ((bridgeRefreshCount % 5) != 0)) { + if(((bridgeRefreshCount % 3) == 0) && ((bridgeRefreshCount % 5) != 0)) { verifyHueBridges() } - return dynamicPage(name: "bridgeDiscovery", title: "Discovery Started!", nextPage: "bridgeBtnPush", refreshInterval: refreshInterval, uninstall: true) { - section("Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.") { - - - input(name: "selectedHue", type: "enum", required: false, title: "Select Hue Bridge ({{numFound}} found)", messageArgs: [numFound: numFound], multiple: false, options: options, submitOnChange: true) + return dynamicPage(name:"bridgeDiscovery", title:"Discovery Started!", nextPage:"bridgeBtnPush", refreshInterval:refreshInterval, uninstall: true) { + section("Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. " + + "Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.") { + input "selectedHue", "enum", required:false, title:"Select Hue Bridge (${numFound} found)", multiple:false, options:options, submitOnChange: true } } } def bridgeDiscoveryFailed() { - return dynamicPage(name: "bridgeDiscoveryFailed", title: "Bridge Discovery Failed!", nextPage: "bridgeDiscovery") { + return dynamicPage(name:"bridgeDiscoveryFailed", title: "Bridge Discovery Failed", nextPage: "bridgeDiscovery") { section("Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.") { } } @@ -110,12 +109,12 @@ def bridgeLinking() { def paragraphText if (selectedHue) { if (state.refreshUsernameNeeded) { - paragraphText = "The current Hue username is invalid. Please press the button on your Hue Bridge to relink." + 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." + 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." + 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) { @@ -128,13 +127,13 @@ def bridgeLinking() { paragraphText = "Linking to your hub was a success! Please click 'Next'!" } - if ((linkRefreshcount % 2) == 0 && !state.username) { + if((linkRefreshcount % 2) == 0 && !state.username) { sendDeveloperReq() } - return dynamicPage(name: "bridgeBtnPush", title: title, nextPage: nextPage, refreshInterval: refreshInterval) { + return dynamicPage(name:"bridgeBtnPush", title:title, nextPage:nextPage, refreshInterval:refreshInterval) { section("") { - paragraph "$paragraphText" + paragraph """${paragraphText}""" } } } @@ -150,18 +149,18 @@ def bulbDiscovery() { def allLightsFound = bulbsDiscovered() ?: [:] // List lights currently not added to the user (editable) - def newLights = allLightsFound.findAll { getChildDevice(it.key) == null } ?: [:] - newLights = newLights.sort { it.value.toLowerCase() } + def newLights = allLightsFound.findAll {getChildDevice(it.key) == null} ?: [:] + newLights = newLights.sort {it.value.toLowerCase()} // List lights already added to the user (not editable) - def existingLights = allLightsFound.findAll { getChildDevice(it.key) != null } ?: [:] - existingLights = existingLights.sort { it.value.toLowerCase() } + def existingLights = allLightsFound.findAll {getChildDevice(it.key) != null} ?: [:] + existingLights = existingLights.sort {it.value.toLowerCase()} - def numFound = newLights.size() ?: "0" - if (numFound == "0") + def numFound = newLights.size() ?: 0 + if (numFound == 0) app.updateSetting("selectedBulbs", "") - if ((bulbRefreshCount % 5) == 0) { + if((bulbRefreshCount % 5) == 0) { discoverHueBulbs() } def selectedBridge = state.bridges.find { key, value -> value?.serialNumber?.equalsIgnoreCase(selectedHue) } @@ -179,14 +178,14 @@ def bulbDiscovery() { } } - def existingLightsSize = "${existingLights.size()}" - if (bulbRefreshCount > 200 && numFound == "0") { + if (bulbRefreshCount > 200 && numFound == 0) { // Time out after 10 minutes state.inBulbDiscovery = false bulbRefreshCount = 0 - return dynamicPage(name: "bulbDiscovery", title: "Light Discovery Failed!", nextPage: "", refreshInterval: 0, install: true, uninstall: true) { - section("Failed to discover any lights, please try again later. Click 'Done' to exit.") { - paragraph title: "Previously added Hue Lights ({{existingLightsSize}} added)", messageArgs: [existingLightsSize: existingLightsSize], existingLightsDescription + return dynamicPage(name:"bulbDiscovery", title:"Light Discovery Failed!", nextPage:"", refreshInterval:0, install:true, uninstall: true) { + section("Failed to discover any lights, please try again later. Click Done to exit.") { + //input "selectedBulbs", "enum", required:false, title:"Select Hue Lights to add (${numFound} found)", multiple:true, submitOnChange: true, options:newLights + paragraph title: "Previously added Hue Lights (${existingLights.size()} added)", existingLightsDescription } section { href "bridgeDiscovery", title: title, description: "", state: selectedHue ? "complete" : "incomplete", params: [override: true] @@ -194,10 +193,10 @@ def bulbDiscovery() { } } else { - return dynamicPage(name: "bulbDiscovery", title: "Light Discovery Started!", nextPage: "", refreshInterval: refreshInterval, install: true, uninstall: true) { + return dynamicPage(name:"bulbDiscovery", title:"Light Discovery Started!", nextPage:"", refreshInterval:refreshInterval, install:true, uninstall: true) { section("Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.") { - input(name: "selectedBulbs", type: "enum", required: false, title: "Select Hue Lights to add ({{numFound}} found)", messageArgs: [numFound: numFound], multiple: true, submitOnChange: true, options: newLights) - paragraph title: "Previously added Hue Lights ({{existingLightsSize}} added)", messageArgs: [existingLightsSize: existingLightsSize], existingLightsDescription + input "selectedBulbs", "enum", required:false, title:"Select Hue Lights to add (${numFound} found)", multiple:true, submitOnChange: true, options:newLights + paragraph title: "Previously added Hue Lights (${existingLights.size()} added)", existingLightsDescription } section { href "bridgeDiscovery", title: title, description: "", state: selectedHue ? "complete" : "incomplete", params: [override: true] @@ -218,19 +217,19 @@ private sendDeveloperReq() { def token = app.id def host = getBridgeIP() sendHubCommand(new physicalgraph.device.HubAction([ - method : "POST", - path : "/api", + method: "POST", + path: "/api", headers: [ HOST: host ], - body : [devicetype: "$token-0"]], "${selectedHue}", [callback: "usernameHandler"])) + body: [devicetype: "$token-0"]], "${selectedHue}", [callback: "usernameHandler"])) } private discoverHueBulbs() { def host = getBridgeIP() sendHubCommand(new physicalgraph.device.HubAction([ - method : "GET", - path : "/api/${state.username}/lights", + method: "GET", + path: "/api/${state.username}/lights", headers: [ HOST: host ]], "${selectedHue}", [callback: "lightsHandler"])) @@ -239,8 +238,8 @@ private discoverHueBulbs() { private verifyHueBridge(String deviceNetworkId, String host) { log.trace "Verify Hue Bridge $deviceNetworkId" sendHubCommand(new physicalgraph.device.HubAction([ - method : "GET", - path : "/description.xml", + method: "GET", + path: "/description.xml", headers: [ HOST: host ]], deviceNetworkId, [callback: "bridgeDescriptionHandler"])) @@ -267,18 +266,18 @@ Map bridgesDiscovered() { } Map bulbsDiscovered() { - def bulbs = getHueBulbs() + def bulbs = getHueBulbs() def bulbmap = [:] if (bulbs instanceof java.util.Map) { bulbs.each { def value = "${it.value.name}" - def key = app.id + "/" + it.value.id + def key = app.id +"/"+ it.value.id bulbmap["${key}"] = value } } else { //backwards compatable bulbs.each { def value = "${it.name}" - def key = app.id + "/" + it.id + def key = app.id +"/"+ it.id logg += "$value - $key, " bulbmap["${key}"] = value } @@ -295,7 +294,7 @@ def getHueBridges() { } def getVerifiedHueBridges() { - getHueBridges().findAll { it?.value?.verified == true } + getHueBridges().findAll{ it?.value?.verified == true } } def installed() { @@ -332,7 +331,7 @@ def manualRefresh() { poll() } -def uninstalled() { +def uninstalled(){ // Remove bridgedevice connection to allow uninstall of smartapp even though bridge is listed // as user of smartapp app.updateSetting("bridgeDevice", null) @@ -372,7 +371,7 @@ private getDeviceType(hueType) { return null } -private addChildBulb(dni, hueType, name, hub, update = false, device = null) { +private addChildBulb(dni, hueType, name, hub, update=false, device = null) { def deviceType = getDeviceType(hueType) if (deviceType) { @@ -387,7 +386,7 @@ def addBulbs() { def bulbs = getHueBulbs() selectedBulbs?.each { dni -> def d = getChildDevice(dni) - if (!d) { + if(!d) { def newHueBulb if (bulbs instanceof java.util.Map) { newHueBulb = bulbs.find { (app.id + "/" + it.value.id) == dni } @@ -420,11 +419,11 @@ def addBulbs() { def addBridge() { def vbridges = getVerifiedHueBridges() - def vbridge = vbridges.find { "${it.value.mac}" == selectedHue } + def vbridge = vbridges.find {"${it.value.mac}" == selectedHue} - if (vbridge) { + if(vbridge) { def d = getChildDevice(selectedHue) - if (!d) { + if(!d) { // compatibility with old devices def newbridge = true childDevices.each { @@ -459,22 +458,20 @@ def addBridge() { childDevice?.sendEvent(name: "idNumber", value: idNumber) if (vbridge.value.ip && vbridge.value.port) { if (vbridge.value.ip.contains(".")) { - childDevice.sendEvent(name: "networkAddress", value: vbridge.value.ip + ":" + vbridge.value.port) - childDevice.updateDataValue("networkAddress", vbridge.value.ip + ":" + vbridge.value.port) + childDevice.sendEvent(name: "networkAddress", value: vbridge.value.ip + ":" + vbridge.value.port) + childDevice.updateDataValue("networkAddress", vbridge.value.ip + ":" + vbridge.value.port) } else { - childDevice.sendEvent(name: "networkAddress", value: convertHexToIP(vbridge.value.ip) + ":" + convertHexToInt(vbridge.value.port)) - childDevice.updateDataValue("networkAddress", convertHexToIP(vbridge.value.ip) + ":" + convertHexToInt(vbridge.value.port)) + childDevice.sendEvent(name: "networkAddress", value: convertHexToIP(vbridge.value.ip) + ":" + convertHexToInt(vbridge.value.port)) + childDevice.updateDataValue("networkAddress", convertHexToIP(vbridge.value.ip) + ":" + convertHexToInt(vbridge.value.port)) } } else { - childDevice.sendEvent(name: "networkAddress", value: convertHexToIP(vbridge.value.networkAddress) + ":" + convertHexToInt(vbridge.value.deviceAddress)) - childDevice.updateDataValue("networkAddress", convertHexToIP(vbridge.value.networkAddress) + ":" + convertHexToInt(vbridge.value.deviceAddress)) + childDevice.sendEvent(name: "networkAddress", value: convertHexToIP(vbridge.value.networkAddress) + ":" + convertHexToInt(vbridge.value.deviceAddress)) + childDevice.updateDataValue("networkAddress", convertHexToIP(vbridge.value.networkAddress) + ":" + convertHexToInt(vbridge.value.deviceAddress)) } } else { log.error "Failed to create Hue Bridge device" } } - } else { - log.debug "found ${d.displayName} with id $selectedHue already exists" } } } @@ -485,14 +482,14 @@ def ssdpBridgeHandler(evt) { def hub = evt?.hubId def parsedEvent = parseLanMessage(description) - parsedEvent << ["hub": hub] + parsedEvent << ["hub":hub] def bridges = getHueBridges() log.trace bridges.toString() if (!(bridges."${parsedEvent.ssdpUSN.toString()}")) { //bridge does not exist log.trace "Adding bridge ${parsedEvent.ssdpUSN}" - bridges << ["${parsedEvent.ssdpUSN.toString()}": parsedEvent] + bridges << ["${parsedEvent.ssdpUSN.toString()}":parsedEvent] } else { // update the values def ip = convertHexToIP(parsedEvent.networkAddress) @@ -513,7 +510,7 @@ def ssdpBridgeHandler(evt) { bridge.setDeviceNetworkId("${dniReceived}") dstate.mac = dniReceived // Check to see if selectedHue is a valid bridge, otherwise update it - def isSelectedValid = bridges?.find { it.value?.mac == selectedHue } + def isSelectedValid = bridges?.find {it.value?.mac == selectedHue} if (isSelectedValid == null) { log.warn "Correcting selectedHue in state" app.updateSetting("selectedHue", dniReceived) @@ -533,7 +530,7 @@ def ssdpBridgeHandler(evt) { dstate.ip = ip dstate.port = port dstate.name = "Philips hue ($ip)" - d.sendEvent(name: "networkAddress", value: host) + d.sendEvent(name:"networkAddress", value: host) d.updateDataValue("networkAddress", host) } if (dstate.mac != dniReceived) { @@ -542,7 +539,7 @@ def ssdpBridgeHandler(evt) { } if (selectedHue != dniReceived) { // Check to see if selectedHue is a valid bridge, otherwise update it - def isSelectedValid = bridges?.find { it.value?.mac == selectedHue } + def isSelectedValid = bridges?.find {it.value?.mac == selectedHue} if (isSelectedValid == null) { log.warn "Correcting selectedHue in state" app.updateSetting("selectedHue", dniReceived) @@ -557,7 +554,7 @@ void bridgeDescriptionHandler(physicalgraph.device.HubResponse hubResponse) { def body = hubResponse.xml if (body?.device?.modelName?.text()?.startsWith("Philips hue bridge")) { def bridges = getHueBridges() - def bridge = bridges.find { it?.key?.contains(body?.device?.UDN?.text()) } + def bridge = bridges.find {it?.key?.contains(body?.device?.UDN?.text())} if (bridge) { def idNumber = getBridgeIdNumber(body?.device?.serialNumber?.text()) @@ -566,10 +563,10 @@ void bridgeDescriptionHandler(physicalgraph.device.HubResponse hubResponse) { def name = body?.device?.friendlyName?.text() def index = name?.indexOf('(') if (index != -1) { - name = name.substring(0, index) + name = name.substring(0,index) name += " ($idNumber)" } - bridge.value << [name: name, serialNumber: body?.device?.serialNumber?.text(), idNumber: idNumber, verified: true] + bridge.value << [name:name, serialNumber:body?.device?.serialNumber?.text(), idNumber: idNumber, verified: true] } else { log.error "/description.xml returned a bridge that didn't exist" } @@ -612,7 +609,7 @@ def locationHandler(evt) { def hub = evt?.hubId def parsedEvent = parseLanMessage(description) - parsedEvent << ["hub": hub] + parsedEvent << ["hub":hub] if (parsedEvent?.ssdpTerm?.contains("urn:schemas-upnp-org:device:basic:1")) { //SSDP DISCOVERY EVENTS @@ -622,7 +619,7 @@ def locationHandler(evt) { if (!(bridges."${parsedEvent.ssdpUSN.toString()}")) { //bridge does not exist log.trace "Adding bridge ${parsedEvent.ssdpUSN}" - bridges << ["${parsedEvent.ssdpUSN.toString()}": parsedEvent] + bridges << ["${parsedEvent.ssdpUSN.toString()}":parsedEvent] } else { // update the values def ip = convertHexToIP(parsedEvent.networkAddress) @@ -657,12 +654,12 @@ def locationHandler(evt) { networkAddress = d.latestState('networkAddress').stringValue } log.trace "Host: $host - $networkAddress" - if (host != networkAddress) { + if(host != networkAddress) { log.debug "Device's port or ip changed for device $d..." dstate.ip = ip dstate.port = port dstate.name = "Philips hue ($ip)" - d.sendEvent(name: "networkAddress", value: host) + d.sendEvent(name:"networkAddress", value: host) d.updateDataValue("networkAddress", host) } } @@ -675,14 +672,14 @@ def locationHandler(evt) { def body = new XmlSlurper().parseText(parsedEvent.body) if (body?.device?.modelName?.text().startsWith("Philips hue bridge")) { def bridges = getHueBridges() - def bridge = bridges.find { it?.key?.contains(body?.device?.UDN?.text()) } + def bridge = bridges.find {it?.key?.contains(body?.device?.UDN?.text())} if (bridge) { - bridge.value << [name: body?.device?.friendlyName?.text(), serialNumber: body?.device?.serialNumber?.text(), verified: true] + bridge.value << [name:body?.device?.friendlyName?.text(), serialNumber:body?.device?.serialNumber?.text(), verified: true] } else { log.error "/description.xml returned a bridge that didn't exist" } } - } else if (headerString?.contains("json") && isValidSource(parsedEvent.mac)) { + } else if(headerString?.contains("json") && isValidSource(parsedEvent.mac)) { log.trace "description.xml response (application/json)" def body = new groovy.json.JsonSlurper().parseText(parsedEvent.body) if (body.success != null) { @@ -707,7 +704,7 @@ def locationHandler(evt) { } } -def doDeviceSync() { +def doDeviceSync(){ log.trace "Doing Hue Device Sync!" // Check if state.updating failed to clear @@ -716,6 +713,9 @@ def doDeviceSync() { log.warn "state.updating failed to clear" } + if (selectedHue) { + addBridge() + } convertBulbListToMap() poll() ssdpSubscribe() @@ -788,7 +788,7 @@ private void checkBridgeStatus() { def isValidSource(macAddress) { def vbridges = getVerifiedHueBridges() - return (vbridges?.find { "${it.value.mac}" == macAddress }) != null + return (vbridges?.find {"${it.value.mac}" == macAddress}) != null } def isInBulbDiscovery() { @@ -802,19 +802,19 @@ private updateBulbState(messageBody, hub) { def toRemove = [:] toRemove << bulbs - messageBody.each { k, v -> + messageBody.each { k,v -> if (v instanceof Map) { if (bulbs[k] == null) { bulbs[k] = [:] } - bulbs[k] << [id: k, name: v.name, type: v.type, modelid: v.modelid, hub: hub, remove: false] + bulbs[k] << [id: k, name: v.name, type: v.type, modelid: v.modelid, hub:hub, remove: false] toRemove.remove(k) } } // Remove bulbs from state that are no longer discovered - toRemove.each { k, v -> + toRemove.each { k,v -> log.warn "${bulbs[k].name} no longer exists on bridge, removing" bulbs.remove(k) } @@ -938,11 +938,12 @@ private sendBasicEvents(device, param, value) { * * Example payload * [, - *{"success":{"/lights/5/state/bri":87}}, - *{"success":{"/lights/5/state/transitiontime":4}}, - *{"success":{"/lights/5/state/on":true}}, - *{"success":{"/lights/5/state/xy":[0.4152,0.5336]}}, - *{"success":{"/lights/5/state/alert":"none"}}* ] + * {"success":{"/lights/5/state/bri":87}}, + * {"success":{"/lights/5/state/transitiontime":4}}, + * {"success":{"/lights/5/state/on":true}}, + * {"success":{"/lights/5/state/xy":[0.4152,0.5336]}}, + * {"success":{"/lights/5/state/alert":"none"}} + * ] * * @param body a data structure of lists and maps based on a JSON data * @return empty array @@ -995,7 +996,7 @@ private handleCommandResponse(body) { * * Example payload * - *{"5":{"state": {"on":true,"bri":102,"hue":25600,"sat":254,"effect":"none","xy":[0.1700,0.7000],"ct":153,"alert":"none", + * {"5":{"state": {"on":true,"bri":102,"hue":25600,"sat":254,"effect":"none","xy":[0.1700,0.7000],"ct":153,"alert":"none", * "colormode":"xy","reachable":true}, "type": "Extended color light", "name": "Go", "modelid": "LLC020", "manufacturername": "Philips", * "uniqueid":"00:17:88:01:01:13:d5:11-0b", "swversion": "5.38.1.14378"}, * "6":{"state": {"on":true,"bri":103,"hue":14910,"sat":144,"effect":"none","xy":[0.4596,0.4105],"ct":370,"alert":"none", @@ -1069,9 +1070,9 @@ def hubVerification(bodytext) { def body = new XmlSlurper().parseText(bodytext) if (body?.device?.modelName?.text().startsWith("Philips hue bridge")) { def bridges = getHueBridges() - def bridge = bridges.find { it?.key?.contains(body?.device?.UDN?.text()) } + def bridge = bridges.find {it?.key?.contains(body?.device?.UDN?.text())} if (bridge) { - bridge.value << [name: body?.device?.friendlyName?.text(), serialNumber: body?.device?.serialNumber?.text(), verified: true] + bridge.value << [name:body?.device?.friendlyName?.text(), serialNumber:body?.device?.serialNumber?.text(), verified: true] } else { log.error "/description.xml returned a bridge that didn't exist" } @@ -1107,7 +1108,7 @@ def setLevel(childDevice, percent) { else level = Math.min(Math.round(percent * 254 / 100), 254) - createSwitchEvent(childDevice, level > 0, percent) + createSwitchEvent(childDevice, level > 0 ,percent) // For Zigbee lights, if level is set to 0 ST just turns them off without changing level // that means that the light will still be on when on is called next time @@ -1137,7 +1138,7 @@ def setHue(childDevice, percent) { def id = getId(childDevice) updateInProgress() // 0 - 65535 - def level = Math.min(Math.round(percent * 65535 / 100), 65535) + def level = Math.min(Math.round(percent * 65535 / 100), 65535) // TODO should this be done by app only or should we default to on? createSwitchEvent(childDevice, "on") put("lights/$id/state", [hue: level, on: true]) @@ -1149,7 +1150,7 @@ def setColorTemperature(childDevice, huesettings) { def id = getId(childDevice) updateInProgress() // 153 (6500K) to 500 (2000K) - def ct = hueSettings == 6500 ? 153 : Math.round(1000000 / huesettings) + def ct = hueSettings == 6500 ? 153 : Math.round(1000000/huesettings) createSwitchEvent(childDevice, "on") put("lights/$id/state", [ct: ct, on: true]) return "Setting color temperature to $ct" @@ -1267,7 +1268,7 @@ private getBridgeIP() { def d = getChildDevice(selectedHue) if (d) { if (d.getDeviceDataByName("networkAddress")) - host = d.getDeviceDataByName("networkAddress") + host = d.getDeviceDataByName("networkAddress") else host = d.latestState('networkAddress').stringValue } @@ -1291,26 +1292,26 @@ private getBridgeIP() { } private Integer convertHexToInt(hex) { - Integer.parseInt(hex, 16) + Integer.parseInt(hex,16) } def convertBulbListToMap() { try { if (state.bulbs instanceof java.util.List) { def map = [:] - state.bulbs?.unique { it.id }.each { bulb -> - map << ["${bulb.id}": ["id": bulb.id, "name": bulb.name, "type": bulb.type, "modelid": bulb.modelid, "hub": bulb.hub, "online": bulb.online]] + state.bulbs?.unique {it.id}.each { bulb -> + map << ["${bulb.id}":["id":bulb.id, "name":bulb.name, "type": bulb.type, "modelid": bulb.modelid, "hub":bulb.hub, "online": bulb.online]] } state.bulbs = map } } - catch (Exception e) { + catch(Exception e) { log.error "Caught error attempting to convert bulb list to map: $e" } } private String convertHexToIP(hex) { - [convertHexToInt(hex[0..1]), convertHexToInt(hex[2..3]), convertHexToInt(hex[4..5]), convertHexToInt(hex[6..7])].join(".") + [convertHexToInt(hex[0..1]),convertHexToInt(hex[2..3]),convertHexToInt(hex[4..5]),convertHexToInt(hex[6..7])].join(".") } private Boolean hasAllHubsOver(String desiredFirmware) { @@ -1327,7 +1328,7 @@ private List getRealHubFirmwareVersions() { * @param childDevice device to send event for * @param setSwitch The new switch state, "on" or "off" * @param setLevel Optional, switchLevel between 0-100, used if you set level to 0 for example since - * that should generate "off" instead of level change + * that should generate "off" instead of level change */ private void createSwitchEvent(childDevice, setSwitch, setLevel = null) { @@ -1368,12 +1369,12 @@ private colorPointsForModel(model = null) { case "LLC013": /* Storylight */ case "LST001": /* Light Strips */ case "LLC010": /* Hue Living Colors Iris + */ - result = [r: [x: 0.704f, y: 0.296f], g: [x: 0.2151f, y: 0.7106f], b: [x: 0.138f, y: 0.08f]]; + result = [r:[x: 0.704f, y: 0.296f], g:[x: 0.2151f, y: 0.7106f], b:[x: 0.138f, y: 0.08f]]; break // Gamut C case "LLC020": /* Hue Go */ case "LST002": /* Hue LightStrips Plus */ - result = [r: [x: 0.692f, y: 0.308f], g: [x: 0.17f, y: 0.7f], b: [x: 0.153f, y: 0.048f]]; + result = [r:[x: 0.692f, y: 0.308f], g:[x: 0.17f, y: 0.7f], b:[x: 0.153f, y: 0.048f]]; break // Gamut B case "LCT001": /* Hue A19 */ @@ -1382,7 +1383,7 @@ private colorPointsForModel(model = null) { case "LCT007": /* Hue A19 + */ case "LLM001": /* Color Light Module + */ default: - result = [r: [x: 0.675f, y: 0.322f], g: [x: 0.4091f, y: 0.518f], b: [x: 0.167f, y: 0.04f]]; + result = [r:[x: 0.675f, y: 0.322f], g:[x: 0.4091f, y: 0.518f], b:[x: 0.167f, y: 0.04f]]; } return result; @@ -1401,9 +1402,9 @@ private colorPointsForModel(model = null) { private float[] calculateXY(colorStr, model = null) { // #ffa013 - def cred = Integer.valueOf(colorStr.substring(1, 3), 16) - def cgreen = Integer.valueOf(colorStr.substring(3, 5), 16) - def cblue = Integer.valueOf(colorStr.substring(5, 7), 16) + def cred = Integer.valueOf( colorStr.substring( 1, 3 ), 16 ) + def cgreen = Integer.valueOf( colorStr.substring( 3, 5 ), 16 ) + def cblue = Integer.valueOf( colorStr.substring( 5, 7 ), 16 ) float red = cred / 255.0f; float green = cgreen / 255.0f; @@ -1473,6 +1474,7 @@ private float[] calculateXY(colorStr, model = null) { // xy[0] = PHHueHelper.precision(4, xy[0]); // xy[1] = PHHueHelper.precision(4, xy[1]); + // TODO needed, assume it just sets number of decimals? //xy[0] = PHHueHelper.precision(xy[0]); //xy[1] = PHHueHelper.precision(xy[1]); @@ -1488,10 +1490,10 @@ private float[] calculateXY(colorStr, model = null) { * * @param points the float array contain x and the y value. [x,y] * @param model the model of the lamp, example: "LCT001" for hue bulb. Used to calculate the color gamut. - * If this value is empty the default gamut values are used. + * If this value is empty the default gamut values are used. * @return the color value in hex (#ff03d3). If xy is null OR xy is not an array of size 2, Color. BLACK will be returned */ -private String colorFromXY(points, model) { +private String colorFromXY(points, model ) { if (points == null || model == null) { log.warn "Input color missing" @@ -1549,9 +1551,9 @@ private String colorFromXY(points, model) { // float b = X * 0.0556f - Y * 0.2040f + Z * 1.0570f; // sRGB D65 conversion - float r = x2 * 1.656492f - y2 * 0.354851f - z2 * 0.255038f; - float g = -x2 * 0.707196f + y2 * 1.655397f + z2 * 0.036152f; - float b = x2 * 0.051713f - y2 * 0.121364f + z2 * 1.011530f; + float r = x2 * 1.656492f - y2 * 0.354851f - z2 * 0.255038f; + float g = -x2 * 0.707196f + y2 * 1.655397f + z2 * 0.036152f; + float b = x2 * 0.051713f - y2 * 0.121364f + z2 * 1.011530f; if (r > b && r > g && r > 1.0f) { // red is too big @@ -1613,6 +1615,7 @@ private String colorFromXY(points, model) { return "#$r1$g1$b1" } + /** * Calculates crossProduct of two 2D vectors / points. * @@ -1641,8 +1644,8 @@ private getClosestPointToPoints(A, B, P) { def AP = [x: (P.x - A.x), y: (P.y - A.y)]; def AB = [x: (B.x - A.x), y: (B.y - A.y)]; - float ab2 = AB.x * AB.x + AB.y * AB.y; - float ap_ab = AP.x * AB.x + AP.y * AB.y; + float ab2 = AB.x*AB.x + AB.y*AB.y; + float ap_ab = AP.x*AB.x + AP.y*AB.y; float t = ap_ab / ab2; @@ -1682,9 +1685,9 @@ private float getDistanceBetweenTwoPoints(one, two) { */ private boolean checkPointInLampsReach(p, colorPoints) { - def red = colorPoints.r; + def red = colorPoints.r; def green = colorPoints.g; - def blue = colorPoints.b; + def blue = colorPoints.b; def v1 = [x: (green.x - red.x), y: (green.y - red.y)]; def v2 = [x: (blue.x - red.x), y: (blue.y - red.y)]; @@ -1694,9 +1697,12 @@ private boolean checkPointInLampsReach(p, colorPoints) { float s = crossProduct(q, v2) / crossProduct(v1, v2); float t = crossProduct(v1, q) / crossProduct(v1, v2); - if ((s >= 0.0f) && (t >= 0.0f) && (s + t <= 1.0f)) { + if ( (s >= 0.0f) && (t >= 0.0f) && (s + t <= 1.0f)) + { return true; - } else { + } + else + { return false; } } @@ -1709,10 +1715,10 @@ private boolean checkPointInLampsReach(p, colorPoints) { * * @return HSV representation in an array (0-100) [hue, sat, value] */ -def hexToHsv(colorStr) { - def r = Integer.valueOf(colorStr.substring(1, 3), 16) / 255 - def g = Integer.valueOf(colorStr.substring(3, 5), 16) / 255 - def b = Integer.valueOf(colorStr.substring(5, 7), 16) / 255 +def hexToHsv(colorStr){ + def r = Integer.valueOf( colorStr.substring( 1, 3 ), 16 ) / 255 + def g = Integer.valueOf( colorStr.substring( 3, 5 ), 16 ) / 255 + def b = Integer.valueOf( colorStr.substring( 5, 7 ), 16 ) / 255 def max = Math.max(Math.max(r, g), b) def min = Math.min(Math.min(r, g), b) @@ -1722,10 +1728,10 @@ def hexToHsv(colorStr) { def d = max - min s = max == 0 ? 0 : d / max - if (max == min) { + if(max == min){ h = 0 - } else { - switch (max) { + }else{ + switch(max){ case r: h = (g - b) / d + (g < b ? 6 : 0); break case g: h = (b - r) / d + 2; break case b: h = (r - g) / d + 4; break @@ -1740,13 +1746,13 @@ def hexToHsv(colorStr) { * Converts HSV/HSB color to RGB in hex. * Algorithm based on http://en.wikipedia.org/wiki/HSV_color_space. * - * @param hue hue 0-100 - * @param sat saturation 0-100 - * @param value value 0-100 (defaults to 100) + * @param hue hue 0-100 + * @param sat saturation 0-100 + * @param value value 0-100 (defaults to 100) * @return the color in hex (#ff03d3) */ -def hsvToHex(hue, sat, value = 100) { +def hsvToHex(hue, sat, value = 100){ def r, g, b; def h = hue / 100 def s = sat / 100 diff --git a/smartapps/smartthings/hue-connect.src/i18n/ar_AE.properties b/smartapps/smartthings/hue-connect.src/i18n/ar_AE.properties deleted file mode 100644 index f637d4c..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/ar_AE.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=يوفر لك إمكانية توصيل مصابيح Philips Hue بـ SmartThings والتحكم بها من منطقة Things أو لوحة المعلومات في تطبيق SmartThings للهواتف المحمولة. يُرجى تحديث Hue Bridge أولاً، خارج تطبيق SmartThings، باستخدام تطبيق Philips Hue. -'''Discovery Started!'''=بدأ الاكتشاف! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=يُرجى الانتظار ريثما نكتشف Hue Bridge الخاص بك. تجدر الإشارة إلى أنه عليك أوّلاً تكوين Hue Bridge والمصابيح باستخدام تطبيق Philips Hue. قد يستغرق الاكتشاف خمس دقائق أو أكثر، لذا اجلس واسترخِ! اختر جهازك أدناه بمجرد اكتشافه. -'''Select Hue Bridge ({{numFound}} found)'''=تحديد Hue Bridge ‏(تم العثور على ‎{{numFound}}‎) -'''Bridge Discovery Failed!'''=فشل اكتشاف Bridge -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=فشل اكتشاف أي Hue Bridges. يُرجى التأكد من اتصال Hue Bridge بالشبكة نفسها التي يتصل بها موزع SmartThings الخاص بك، ومن أنه متصل بمصدر طاقة أيضاً. -'''Linking with your Hue'''=الارتباط بجهاز Hue الخاص بك -'''The current Hue username is invalid. Please press the button on your Hue Bridge to relink.'''=اسم مستخدم Hue الحالي غير صالح. يُرجى الضغط على الزر الموجود على Hue Bridge الخاص بك لإعادة الارتباط. -'''Press the button on your Hue Bridge to setup a link.'''=اضغط على الزر الموجود على Hue Bridge الخاص بك لإعداد رابط. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=لم تحدد Hue Bridge، يُرجى الضغط على 'تم' وتحديد واحد قبل النقر فوق التالي. -'''Success!'''=نجحت العملية! -'''Linking to your hub was a success! Please click 'Next'!'''=نجح الارتباط بالموزع الخاص بك! يُرجى النقر فوق ”التالي“! -'''Find bridges'''=بحث عن أجهزة bridges -'''Light Discovery Failed!'''=فشل اكتشاف المصباح! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=فشل اكتشاف أي مصابيح، يُرجى المحاولة مرة أخرى لاحقاً. انقر فوق تم للخروج. -'''Select Hue Lights to add ({{numFound}} found)'''=حدد مصابيح Hue التي تريد إضافتها ‏(تم العثور على ‎{{numFound}}‎) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=مصابيح Hue المضافة مُسبقاً (تمت إضافة ‎{{existingLightsSize}}‎) -'''Light Discovery Started!'''=بدأ اكتشاف المصباح! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=يُرجى الانتظار ريثما نكتشف مصابيح Hue الخاصة بك. قد يستغرق الاكتشاف خمس دقائق أو أكثر، لذا اجلس واسترخِ! اختر جهازك أدناه بمجرد اكتشافه. diff --git a/smartapps/smartthings/hue-connect.src/i18n/ar_IL.properties b/smartapps/smartthings/hue-connect.src/i18n/ar_IL.properties deleted file mode 100644 index f637d4c..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/ar_IL.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=يوفر لك إمكانية توصيل مصابيح Philips Hue بـ SmartThings والتحكم بها من منطقة Things أو لوحة المعلومات في تطبيق SmartThings للهواتف المحمولة. يُرجى تحديث Hue Bridge أولاً، خارج تطبيق SmartThings، باستخدام تطبيق Philips Hue. -'''Discovery Started!'''=بدأ الاكتشاف! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=يُرجى الانتظار ريثما نكتشف Hue Bridge الخاص بك. تجدر الإشارة إلى أنه عليك أوّلاً تكوين Hue Bridge والمصابيح باستخدام تطبيق Philips Hue. قد يستغرق الاكتشاف خمس دقائق أو أكثر، لذا اجلس واسترخِ! اختر جهازك أدناه بمجرد اكتشافه. -'''Select Hue Bridge ({{numFound}} found)'''=تحديد Hue Bridge ‏(تم العثور على ‎{{numFound}}‎) -'''Bridge Discovery Failed!'''=فشل اكتشاف Bridge -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=فشل اكتشاف أي Hue Bridges. يُرجى التأكد من اتصال Hue Bridge بالشبكة نفسها التي يتصل بها موزع SmartThings الخاص بك، ومن أنه متصل بمصدر طاقة أيضاً. -'''Linking with your Hue'''=الارتباط بجهاز Hue الخاص بك -'''The current Hue username is invalid. Please press the button on your Hue Bridge to relink.'''=اسم مستخدم Hue الحالي غير صالح. يُرجى الضغط على الزر الموجود على Hue Bridge الخاص بك لإعادة الارتباط. -'''Press the button on your Hue Bridge to setup a link.'''=اضغط على الزر الموجود على Hue Bridge الخاص بك لإعداد رابط. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=لم تحدد Hue Bridge، يُرجى الضغط على 'تم' وتحديد واحد قبل النقر فوق التالي. -'''Success!'''=نجحت العملية! -'''Linking to your hub was a success! Please click 'Next'!'''=نجح الارتباط بالموزع الخاص بك! يُرجى النقر فوق ”التالي“! -'''Find bridges'''=بحث عن أجهزة bridges -'''Light Discovery Failed!'''=فشل اكتشاف المصباح! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=فشل اكتشاف أي مصابيح، يُرجى المحاولة مرة أخرى لاحقاً. انقر فوق تم للخروج. -'''Select Hue Lights to add ({{numFound}} found)'''=حدد مصابيح Hue التي تريد إضافتها ‏(تم العثور على ‎{{numFound}}‎) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=مصابيح Hue المضافة مُسبقاً (تمت إضافة ‎{{existingLightsSize}}‎) -'''Light Discovery Started!'''=بدأ اكتشاف المصباح! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=يُرجى الانتظار ريثما نكتشف مصابيح Hue الخاصة بك. قد يستغرق الاكتشاف خمس دقائق أو أكثر، لذا اجلس واسترخِ! اختر جهازك أدناه بمجرد اكتشافه. diff --git a/smartapps/smartthings/hue-connect.src/i18n/bg_BG.properties b/smartapps/smartthings/hue-connect.src/i18n/bg_BG.properties deleted file mode 100644 index bb61c1b..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/bg_BG.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Позволява да свържете Philips Hue lights (лампи) със SmartThings и да ги управлявате от областта Things (Уреди) или Dashboard (Табло) в приложението SmartThings Mobile. Първо актуализирайте своя Hue Bridge (Мост) извън приложението SmartThings, като използвате приложението Philips Hue. -'''Discovery Started!'''=Откриването е стартирано! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Изчакайте, докато намерим вашия Hue Bridge (Мост). Обърнете внимание, че първо трябва да конфигурирате своя Hue Bridge (Мост) и Lights (Лампи) с помощта на приложението Philips Hue. Намирането може да отнеме пет минути или повече, така че седнете и се отпуснете! Изберете устройството си по-долу, след като бъде открито. -'''Select Hue Bridge ({{numFound}} found)'''=Избор на Hue Bridge (Мост) ({{numFound}} са открити) -'''Bridge Discovery Failed!'''=Откриването на Bridge (Мост) е неуспешно! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Неуспешно откриване на Hue Bridges (Мост). Уверете се, че Hue Bridge (Мост) е свързан към същата мрежа като концентратора на SmartThings, както и че има захранване. -'''Linking with your Hue'''=Свързване с Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Текущото потребителско име за Hue е невалидно. Натиснете бутона на вашия Hue Bridge (Мост) за повторно свързване. -'''Press the button on your Hue Bridge to setup a link.'''=Натиснете бутона на вашия Hue Bridge (Мост), за да установите връзка. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Не сте избрали Hue Bridge (Мост), натиснете „Done“ (Готово) и изберете един, преди да щракнете върху Next (Напред). -'''Success!'''=Успех! -'''Linking to your hub was a success! Please click 'Next'!'''=Свързването с вашия концентратор е успешно. Щракнете върху „Next“ (Напред)! -'''Find bridges'''=Откриване на мостове -'''Light Discovery Failed!'''=Откриването на лампата е неуспешно! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Неуспешно откриване на лампи, опитайте отново по-късно. Щракнете върху Done (Готово) за изход. -'''Select Hue Lights to add ({{numFound}} found)'''=Изберете Hue Lights (Лампи) за добавяне ({{numFound}} са открити) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=По-рано добавени Hue Lights (Лампи) ({{existingLightsSize}} са добавени) -'''Light Discovery Started!'''=Откриването на лампи е стартирано! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Изчакайте, докато намерим вашите Hue Lights (Лампи). Намирането може да отнеме пет минути или повече, така че седнете и се отпуснете! Изберете устройството си по-долу, след като бъде открито. diff --git a/smartapps/smartthings/hue-connect.src/i18n/cs_CZ.properties b/smartapps/smartthings/hue-connect.src/i18n/cs_CZ.properties deleted file mode 100644 index 0f23b67..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/cs_CZ.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Umožňuje připojit světla Philips Hue lights (světla) pomocí SmartThings a ovládat je z oblasti Things (Věci) nebo z Dashboard (Řídicí panel) v mobilní aplikaci SmartThings. Nejprve aktualizujte Hue Bridge (můstek) mimo aplikaci SmartThings, pomocí aplikace Philips Hue. -'''Discovery Started!'''=Zjišťování byla zahájeno! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počkejte na rozpoznání Hue Bridge (můstek). Uvědomte si, že musíte nejprve nakonfigurovat Hue Bridge (můstek) a Lights (světla) pomocí aplikace Philips Hue. Rozpoznání může trvat pět minut i déle, proto se klidně posaďte a počkejte! Po rozpoznání vyberte níže dané zařízení. -'''Select Hue Bridge ({{numFound}} found)'''=Vyberte Hue Bridge (můstek) (nalezeno {{numFound}}) -'''Bridge Discovery Failed!'''=Zjišťování Bridge (můstek) se nezdařilo! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nepodařilo se najít žádný Hue Bridge (můstek). Zkontrolujte, zda je Hue Bridge (můstek) připojený ke stejné síti jako SmartThings Hub a zda je napájený. -'''Linking with your Hue'''=Propojení s Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Aktuální uživatelské jméno Hue je neplatné. Stiskněte tlačítko na Hue Bridge (můstek) a obnovte propojení. -'''Press the button on your Hue Bridge to setup a link.'''=Stiskněte tlačítko na Hue Bridge (můstek) a nastavte propojení. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nevybrali jste Hue Bridge (můstek); stiskněte tlačítko „Done“ (Hotovo) a jeden vyberte, než klepnete na tlačítko Next (Další). -'''Success!'''=Úspěch! -'''Linking to your hub was a success! Please click 'Next'!'''=Propojení s hub bylo úspěšně navázáno! Klepněte na tlačítko „Next“ (Další)! -'''Find bridges'''=Najít bridge -'''Light Discovery Failed!'''=Zjišťování světel se nezdařilo! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nepodařilo najít žádná světla, opakujte akci později. Ukončete akci klepnutím na tlačítko Done (Hotovo). -'''Select Hue Lights to add ({{numFound}} found)'''=Vyberte Hue lights (světla), která chcete přidat (nalezeno {{numFound}}) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Dříve přidaná Hue Lights (světla) (přidáno {{existingLightsSize}}) -'''Light Discovery Started!'''=Zjišťování světel bylo zahájeno! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počkejte na rozpoznání Hue Lights (světla). Rozpoznání může trvat pět minut i déle, proto se klidně posaďte a počkejte! Po rozpoznání vyberte níže dané zařízení. diff --git a/smartapps/smartthings/hue-connect.src/i18n/da_DK.properties b/smartapps/smartthings/hue-connect.src/i18n/da_DK.properties deleted file mode 100644 index 281a0ac..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/da_DK.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Giver dig mulighed for at forbinde dine Philips Hue Lights (Philips Hue-lamper) med SmartThings og styre dem fra dit Things-område eller dit Dashboard i SmartThings-mobilappen. Opdater din Hue Bridge (Hue-bro) først (uden for SmartThings-appen) ved hjælp af Philips Hue-appen. -'''Discovery Started!'''=Opdagelse er startet! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vent, mens vi finder din Hue Bridge (Hue-bro). Bemærk, at du først skal konfigurere din Hue Bridge og Lights (Lamper) med Philips Hue-applikationen. Det kan tage fem minutter eller mere at finde enheden, så bare læn dig tilbage, og slap af! Vælg din enhed herunder, når den er fundet. -'''Select Hue Bridge ({{numFound}} found)'''=Vælg Hue Bridge (Hue-bro) ({{numFound}} fundet) -'''Bridge Discovery Failed!'''=Opdagelse af Bridge (bro) mislykkedes! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Kunne ikke finde nogen Hue Bridges (Hue-broer). Bekræft, at Hue Bridge (Hue-broen) er tilsluttet det samme netværk som din SmartThings-hub, og at der er strøm på den. -'''Linking with your Hue'''=Sammenkædning med din Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Det aktuelle Hue-brugernavn er ugyldigt. Tryk på knappen på din Hue Bridge (Hue-bro) for at tilknytte igen. -'''Press the button on your Hue Bridge to setup a link.'''=Tryk på knappen på din Hue Bridge (Hue-bro) for at oprette et link. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Du har ikke valgt en Hue Bridge (Hue-bro). Tryk på “Done” (Udført), og vælg én, inden du klikker på Next (Næste). -'''Success!'''=Succes! -'''Linking to your hub was a success! Please click 'Next'!'''=Sammenkædningen med din hub blev gennemført! Klik på “Next” (Næste)! -'''Find bridges'''=Find bridges (broer) -'''Light Discovery Failed!'''=Opdagelse af lights (lamper) mislykkedes! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Kunne ikke finde nogen lights (lamper). Prøv igen senere. Klik på Done (Udført) for at afslutte. -'''Select Hue Lights to add ({{numFound}} found)'''=Vælg Hue Lights (Hue-lamper), der skal tilføjes ({{numFound}} fundet) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Tidligere tilføjede Hue Lights (Hue-lamper) ({{existingLightsSize}} tilføjet) -'''Light Discovery Started!'''=Opdagelse af lights (lamper) er startet! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vent, mens vi finder dine Hue Lights (Hue-lamper). Det kan tage fem minutter eller mere at finde enheden, så bare læn dig tilbage, og slap af! Vælg din enhed herunder, når den er fundet. diff --git a/smartapps/smartthings/hue-connect.src/i18n/de_AT.properties b/smartapps/smartthings/hue-connect.src/i18n/de_AT.properties deleted file mode 100644 index def2273..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/de_AT.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Sie können Ihre Phillips Hue Lights (Lichter) mit SmartThings verbinden und aus Ihrem Things-Bereich oder dem Dashboard in der SmartThings-Mobile-App aus steuern. Bitte aktualisieren Sie zunächst Ihre Hue Bridge (Brücke) außerhalb der SmartThings-App mit der Phillips-Hue-App. -'''Discovery Started!'''=Erkennung gestartet! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Bridge (Brücke) erkannt wurde. Beachten Sie bitte, dass Sie Ihre Hue Bridge (Brücke) und Lights (Lichter) zunächst mit der Philips Hue-Anwendung konfigurieren müssen. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. -'''Select Hue Bridge ({{numFound}} found)'''=Hue Bridge (Brücke) auswählen ({{numFound}} gefunden) -'''Bridge Discovery Failed!'''=Bridge (Brücke)-Erkennung fehlgeschlagen! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Es konnten keine Hue Bridges (Brücken) gefunden werden. Bitte bestätigen Sie, dass die Hue Bridge (Brücke) am gleichen Netzwerk wie Ihr SmartThings Hub angeschlossen ist und Strom erhält. -'''Linking with your Hue'''=Kopplung mit Ihrem Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Der aktuelle Hue-Benutzername ist ungültig. Bitte drücken Sie für eine erneute Kopplung die Taste auf Ihrer Hue Bridge (Brücke). -'''Press the button on your Hue Bridge to setup a link.'''=Drücken Sie die Taste auf Ihrer Hue-Bridge (Brücke), um eine Kopplung einzurichten. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Sie haben keine Hue Bridge (Brücke) ausgewählt. Bitte drücken Sie ‚Done‘ (OK) und wählen Sie eine aus, bevor Sie auf Next (Weiter) drücken. -'''Success!'''=Erfolgreich verbunden! -'''Linking to your hub was a success! Please click 'Next'!'''=Die Kopplung mit Ihrem Hub war erfolgreich! Bitte klicken Sie auf ‚Next‘ (Weiter)! -'''Find bridges'''=Bridges (Brücken) suchen -'''Light Discovery Failed!'''=Lichterkennung fehlgeschlagen! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Es wurden keine Lichter erkannt. Bitte versuchen Sie es später erneut. Klicken Sie zum Beenden auf „Done“ (OK). -'''Select Hue Lights to add ({{numFound}} found)'''=Wählen Sie die hinzuzufügenden Hue Lights (Lichter) aus ({{numFound}} gefunden) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Zuvor hinzugefügte Hue Lights (Lichter) ({{existingLightsSize}} hinzugefügt) -'''Light Discovery Started!'''=Lichterkennung gestartet! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Lights (Lichter) erkannt wurden. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. diff --git a/smartapps/smartthings/hue-connect.src/i18n/de_CH.properties b/smartapps/smartthings/hue-connect.src/i18n/de_CH.properties deleted file mode 100644 index def2273..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/de_CH.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Sie können Ihre Phillips Hue Lights (Lichter) mit SmartThings verbinden und aus Ihrem Things-Bereich oder dem Dashboard in der SmartThings-Mobile-App aus steuern. Bitte aktualisieren Sie zunächst Ihre Hue Bridge (Brücke) außerhalb der SmartThings-App mit der Phillips-Hue-App. -'''Discovery Started!'''=Erkennung gestartet! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Bridge (Brücke) erkannt wurde. Beachten Sie bitte, dass Sie Ihre Hue Bridge (Brücke) und Lights (Lichter) zunächst mit der Philips Hue-Anwendung konfigurieren müssen. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. -'''Select Hue Bridge ({{numFound}} found)'''=Hue Bridge (Brücke) auswählen ({{numFound}} gefunden) -'''Bridge Discovery Failed!'''=Bridge (Brücke)-Erkennung fehlgeschlagen! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Es konnten keine Hue Bridges (Brücken) gefunden werden. Bitte bestätigen Sie, dass die Hue Bridge (Brücke) am gleichen Netzwerk wie Ihr SmartThings Hub angeschlossen ist und Strom erhält. -'''Linking with your Hue'''=Kopplung mit Ihrem Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Der aktuelle Hue-Benutzername ist ungültig. Bitte drücken Sie für eine erneute Kopplung die Taste auf Ihrer Hue Bridge (Brücke). -'''Press the button on your Hue Bridge to setup a link.'''=Drücken Sie die Taste auf Ihrer Hue-Bridge (Brücke), um eine Kopplung einzurichten. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Sie haben keine Hue Bridge (Brücke) ausgewählt. Bitte drücken Sie ‚Done‘ (OK) und wählen Sie eine aus, bevor Sie auf Next (Weiter) drücken. -'''Success!'''=Erfolgreich verbunden! -'''Linking to your hub was a success! Please click 'Next'!'''=Die Kopplung mit Ihrem Hub war erfolgreich! Bitte klicken Sie auf ‚Next‘ (Weiter)! -'''Find bridges'''=Bridges (Brücken) suchen -'''Light Discovery Failed!'''=Lichterkennung fehlgeschlagen! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Es wurden keine Lichter erkannt. Bitte versuchen Sie es später erneut. Klicken Sie zum Beenden auf „Done“ (OK). -'''Select Hue Lights to add ({{numFound}} found)'''=Wählen Sie die hinzuzufügenden Hue Lights (Lichter) aus ({{numFound}} gefunden) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Zuvor hinzugefügte Hue Lights (Lichter) ({{existingLightsSize}} hinzugefügt) -'''Light Discovery Started!'''=Lichterkennung gestartet! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Lights (Lichter) erkannt wurden. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. diff --git a/smartapps/smartthings/hue-connect.src/i18n/de_DE.properties b/smartapps/smartthings/hue-connect.src/i18n/de_DE.properties deleted file mode 100644 index def2273..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/de_DE.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Sie können Ihre Phillips Hue Lights (Lichter) mit SmartThings verbinden und aus Ihrem Things-Bereich oder dem Dashboard in der SmartThings-Mobile-App aus steuern. Bitte aktualisieren Sie zunächst Ihre Hue Bridge (Brücke) außerhalb der SmartThings-App mit der Phillips-Hue-App. -'''Discovery Started!'''=Erkennung gestartet! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Bridge (Brücke) erkannt wurde. Beachten Sie bitte, dass Sie Ihre Hue Bridge (Brücke) und Lights (Lichter) zunächst mit der Philips Hue-Anwendung konfigurieren müssen. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. -'''Select Hue Bridge ({{numFound}} found)'''=Hue Bridge (Brücke) auswählen ({{numFound}} gefunden) -'''Bridge Discovery Failed!'''=Bridge (Brücke)-Erkennung fehlgeschlagen! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Es konnten keine Hue Bridges (Brücken) gefunden werden. Bitte bestätigen Sie, dass die Hue Bridge (Brücke) am gleichen Netzwerk wie Ihr SmartThings Hub angeschlossen ist und Strom erhält. -'''Linking with your Hue'''=Kopplung mit Ihrem Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Der aktuelle Hue-Benutzername ist ungültig. Bitte drücken Sie für eine erneute Kopplung die Taste auf Ihrer Hue Bridge (Brücke). -'''Press the button on your Hue Bridge to setup a link.'''=Drücken Sie die Taste auf Ihrer Hue-Bridge (Brücke), um eine Kopplung einzurichten. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Sie haben keine Hue Bridge (Brücke) ausgewählt. Bitte drücken Sie ‚Done‘ (OK) und wählen Sie eine aus, bevor Sie auf Next (Weiter) drücken. -'''Success!'''=Erfolgreich verbunden! -'''Linking to your hub was a success! Please click 'Next'!'''=Die Kopplung mit Ihrem Hub war erfolgreich! Bitte klicken Sie auf ‚Next‘ (Weiter)! -'''Find bridges'''=Bridges (Brücken) suchen -'''Light Discovery Failed!'''=Lichterkennung fehlgeschlagen! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Es wurden keine Lichter erkannt. Bitte versuchen Sie es später erneut. Klicken Sie zum Beenden auf „Done“ (OK). -'''Select Hue Lights to add ({{numFound}} found)'''=Wählen Sie die hinzuzufügenden Hue Lights (Lichter) aus ({{numFound}} gefunden) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Zuvor hinzugefügte Hue Lights (Lichter) ({{existingLightsSize}} hinzugefügt) -'''Light Discovery Started!'''=Lichterkennung gestartet! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Bitte warten Sie, bis Ihre Hue Lights (Lichter) erkannt wurden. Die Erkennung kann fünf Minuten oder länger dauern. Lehnen Sie sich zurück und entspannen Sie sich! Wählen Sie nach der Erkennung unten ein Gerät aus. diff --git a/smartapps/smartthings/hue-connect.src/i18n/el_GR.properties b/smartapps/smartthings/hue-connect.src/i18n/el_GR.properties deleted file mode 100644 index 4024ba9..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/el_GR.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Σας επιτρέπει να συνδέσετε τους λαμπτήρες Philips Hue με το SmartThings και να τους ελέγχετε από την περιοχή Things στο Dashboard της εφαρμογής SmartThings για κινητές συσκευές. Ενημερώστε πρώτα το Hue Bridge εκτός της εφαρμογής SmartThings, χρησιμοποιώντας την εφαρμογή Philips Hue. -'''Discovery Started!'''=Η ανακάλυψη ξεκίνησε! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Περιμένετε μέχρι να ολοκληρωθεί η ανακάλυψη του Hue Bridge σας. Έχετε υπόψη ότι θα πρέπει πρώτα να διαμορφώσετε το Hue Bridge και τους λαμπτήρες, χρησιμοποιώντας την εφαρμογή Philips Hue. Η ανακάλυψη μπορεί να διαρκέσει πέντε λεπτά ή περισσότερο, επομένως, χαλαρώστε και περιμένετε! Επιλέξτε τη συσκευή σας παρακάτω μόλις ανακαλυφθεί. -'''Select Hue Bridge ({{numFound}} found)'''=Επιλογή Hue Bridge (βρέθηκαν {{numFound}}) -'''Bridge Discovery Failed!'''=Η ανακάλυψη Bridge απέτυχε! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Δεν ανακαλύφθηκε κανένα Hue Bridge. Βεβαιωθείτε ότι το Hue Bridge είναι συνδεδεμένο στο ίδιο δίκτυο με το SmartThings Hub και ότι τροφοδοτείται με ρεύμα. -'''Linking with your Hue'''=Γίνεται σύνδεση με το Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Το τρέχον όνομα χρήστη Hue δεν είναι έγκυρο. Πατήστε το κουμπί στο Hue Bridge για επανασύνδεση. -'''Press the button on your Hue Bridge to setup a link.'''=Πατήστε το κουμπί στο Hue Bridge σας για να ρυθμίσετε μια σύνδεση. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Δεν έχετε επιλέξτε ένα Hue Bridge. Πατήστε «Done» (Τέλος) και επιλέξτε ένα πριν κάνετε κλικ στην επιλογή Next (Επόμενο). -'''Success!'''=Επιτυχία! -'''Linking to your hub was a success! Please click 'Next'!'''=Η σύνδεση με το διανομέα σας ολοκληρώθηκε με επιτυχία. Κάντε κλικ στην επιλογή 'Next' (Επόμενο)! -'''Find bridges'''=Εύρεση bridge -'''Light Discovery Failed!'''=Η ανακάλυψη λαμπτήρων απέτυχε! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Η ανακάλυψη λαμπτήρων απέτυχε, δοκιμάστε ξανά αργότερα. Κάντε κλικ στην επιλογή "Done" (Τέλος) για έξοδο. -'''Select Hue Lights to add ({{numFound}} found)'''=Επιλογή λαμπτήρων Hue για προσθήκη (βρέθηκαν {{numFound}}) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Λαμπτήρες Hue που προστέθηκαν παλαιότερα (προστέθηκαν {{existingLightsSize}}) -'''Light Discovery Started!'''=Η ανακάλυψη λαμπτήρων ξεκίνησε! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Περιμένετε μέχρι να ολοκληρωθεί η ανακάλυψη των λαμπτήρων Hue σας. Η ανακάλυψη μπορεί να διαρκέσει πέντε λεπτά ή περισσότερο, επομένως, χαλαρώστε και περιμένετε! Επιλέξτε τη συσκευή σας παρακάτω μόλις ανακαλυφθεί. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_AU.properties b/smartapps/smartthings/hue-connect.src/i18n/en_AU.properties deleted file mode 100644 index 2d11c28..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/en_AU.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. -'''Discovery Started!'''=Discovery Started! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. -'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) -'''Bridge Discovery Failed!'''=Bridge Discovery Failed -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. -'''Linking with your Hue'''=Linking with your Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. -'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. -'''Success!'''=Success! -'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! -'''Find bridges'''=Find Bridges -'''Light Discovery Failed!'''=Light Discovery Failed! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. -'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) -'''Light Discovery Started!'''=Light Discovery Started! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_CA.properties b/smartapps/smartthings/hue-connect.src/i18n/en_CA.properties deleted file mode 100644 index 2d11c28..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/en_CA.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. -'''Discovery Started!'''=Discovery Started! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. -'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) -'''Bridge Discovery Failed!'''=Bridge Discovery Failed -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. -'''Linking with your Hue'''=Linking with your Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. -'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. -'''Success!'''=Success! -'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! -'''Find bridges'''=Find Bridges -'''Light Discovery Failed!'''=Light Discovery Failed! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. -'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) -'''Light Discovery Started!'''=Light Discovery Started! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_GB.properties b/smartapps/smartthings/hue-connect.src/i18n/en_GB.properties deleted file mode 100644 index 2d11c28..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/en_GB.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. -'''Discovery Started!'''=Discovery Started! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. -'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) -'''Bridge Discovery Failed!'''=Bridge Discovery Failed -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. -'''Linking with your Hue'''=Linking with your Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. -'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. -'''Success!'''=Success! -'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! -'''Find bridges'''=Find Bridges -'''Light Discovery Failed!'''=Light Discovery Failed! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. -'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) -'''Light Discovery Started!'''=Light Discovery Started! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_IE.properties b/smartapps/smartthings/hue-connect.src/i18n/en_IE.properties deleted file mode 100644 index 2d11c28..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/en_IE.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. -'''Discovery Started!'''=Discovery Started! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. -'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) -'''Bridge Discovery Failed!'''=Bridge Discovery Failed -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. -'''Linking with your Hue'''=Linking with your Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. -'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. -'''Success!'''=Success! -'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! -'''Find bridges'''=Find Bridges -'''Light Discovery Failed!'''=Light Discovery Failed! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. -'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) -'''Light Discovery Started!'''=Light Discovery Started! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_NZ.properties b/smartapps/smartthings/hue-connect.src/i18n/en_NZ.properties deleted file mode 100644 index 2d11c28..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/en_NZ.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. -'''Discovery Started!'''=Discovery Started! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. -'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) -'''Bridge Discovery Failed!'''=Bridge Discovery Failed -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. -'''Linking with your Hue'''=Linking with your Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. -'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. -'''Success!'''=Success! -'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! -'''Find bridges'''=Find Bridges -'''Light Discovery Failed!'''=Light Discovery Failed! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. -'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) -'''Light Discovery Started!'''=Light Discovery Started! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_PH.properties b/smartapps/smartthings/hue-connect.src/i18n/en_PH.properties deleted file mode 100644 index 2d11c28..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/en_PH.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. -'''Discovery Started!'''=Discovery Started! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. -'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) -'''Bridge Discovery Failed!'''=Bridge Discovery Failed -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. -'''Linking with your Hue'''=Linking with your Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. -'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. -'''Success!'''=Success! -'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! -'''Find bridges'''=Find Bridges -'''Light Discovery Failed!'''=Light Discovery Failed! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. -'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) -'''Light Discovery Started!'''=Light Discovery Started! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/en_ZA.properties b/smartapps/smartthings/hue-connect.src/i18n/en_ZA.properties deleted file mode 100644 index 2d11c28..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/en_ZA.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Enables you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, from outside the SmartThings app, using the Philips Hue app. -'''Discovery Started!'''=Discovery Started! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or longer, so sit back and relax! Select your device below once it's been discovered. -'''Select Hue Bridge ({{numFound}} found)'''=Select Hue Bridge ({{numFound}} found) -'''Bridge Discovery Failed!'''=Bridge Discovery Failed -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No Hue Bridges discovered. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power. -'''Linking with your Hue'''=Linking with your Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=The current Hue username is invalid. Please press the button on your Hue Bridge to re-link. -'''Press the button on your Hue Bridge to setup a link.'''=Press the button on your Hue Bridge to set up a link. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=You haven't selected a Hue Bridge. Please press 'Done' and select one before clicking 'Next'. -'''Success!'''=Success! -'''Linking to your hub was a success! Please click 'Next'!'''=Linking to your hub was successful! Please click 'Next'! -'''Find bridges'''=Find Bridges -'''Light Discovery Failed!'''=Light Discovery Failed! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No lights discovered. Please try again later. Click Done to exit. -'''Select Hue Lights to add ({{numFound}} found)'''=Select Hue Lights to add ({{numFound}} found) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Previously added Hue Lights ({{existingLightsSize}} added) -'''Light Discovery Started!'''=Light Discovery Started! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Please wait while we discover your Hue Lights. Discovery can take five minutes or longer, so sit back and relax! Select your light below once it's been discovered. diff --git a/smartapps/smartthings/hue-connect.src/i18n/es_ES.properties b/smartapps/smartthings/hue-connect.src/i18n/es_ES.properties deleted file mode 100644 index 149f802..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/es_ES.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Permite conectar sus Philips Hue Lights (Luces) con SmartThings y controlarlas desde Things area (Área de cosas) o Dashboard (Panel) en la aplicación móvil SmartThings. Actualice primero el Hue Bridge (Puente), fuera de la aplicación SmartThings, usando la aplicación Philips Hue. -'''Discovery Started!'''=¡Se ha iniciado la detección! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Espere mientras detectamos su Hue Bridge (Puente). Tenga en cuenta que primero tiene que configurar su Hue Bridge (Puente) y Hue Lights (Luces) mediante la aplicación Philips Hue. La detección puede tardar cinco minutos o más. Así que tómeselo con tranquilidad. Seleccione su dispositivo cuando se haya detectado. -'''Select Hue Bridge ({{numFound}} found)'''=Seleccionar Hue Bridge (Puente) ({{numFound}} encontrados) -'''Bridge Discovery Failed!'''=¡Error al detectar Bridge (Puente)! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Error al detectar Hue Bridges (Puentes). Confirme que el Hue Bridge (Puente) está conectado a la misma red que su Hub SmartThings y que está enchufado a una toma eléctrica. -'''Linking with your Hue'''=Vincular con su Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=El nombre de usuario del Hue actual no es válido. Pulse el botón en su Hue Bridge (Puente) para volver a vincular. -'''Press the button on your Hue Bridge to setup a link.'''=Pulse el botón en su Hue Bridge (Puente) para configurar el vínculo. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=No ha seleccionado ningún Hue Bridge (Puente). Pulse “Done” (Hecho) y seleccione uno antes de hacer clic en Next (Siguiente). -'''Success!'''=Operación realizada correctamente. -'''Linking to your hub was a success! Please click 'Next'!'''=Se ha vinculado su Hub correctamente. Haga clic en Next (Siguiente). -'''Find bridges'''=Encontrar Bridges (Puentes) -'''Light Discovery Failed!'''=Error al detectar luces. -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Error al detectar luces. Inténtelo de nuevo más tarde. Haga clic en Done (Hecho) para salir. -'''Select Hue Lights to add ({{numFound}} found)'''=Seleccione Hue Lights (Luces) para añadir ({{numFound}} encontradas) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (Luces) añadidas anteriormente ({{existingLightsSize}} añadidas) -'''Light Discovery Started!'''=Se ha iniciado la detección de luces. -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Espere mientras detectamos sus Hue Lights (Luces). La detección puede tardar cinco minutos o más. Así que tómeselo con tranquilidad. Seleccione su dispositivo cuando se haya detectado. diff --git a/smartapps/smartthings/hue-connect.src/i18n/es_US.properties b/smartapps/smartthings/hue-connect.src/i18n/es_US.properties deleted file mode 100644 index e32b020..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/es_US.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Le permite conectar sus Philips Hue lights (luces Philips Hue) con SmartThings y controlarlas desde el área de Objetos o el Panel de la aplicación SmartThings Mobile. Primero actualice su Hue Bridge (puente Hue) desde fuera de la aplicación de SmartThings, mediante la aplicación de Philips Hue. -'''Discovery Started!'''=Descubrimiento iniciado -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Espere mientras descubrimos su Hue Bridge (puente Hue). Tenga en cuenta que primero debe configurar Hue Bridge y Hue Lights (luces Hue) mediante la aplicación de Hue. El descubrimiento puede tomar cinco minutos o más, por lo que le sugerimos que se ponga cómodo y se relaje. Una vez descubierto, seleccione su dispositivo. -'''Select Hue Bridge ({{numFound}} found)'''=Seleccione Hue Bridge (Puente Hue) (se encontraron {{numFound}}) -'''Bridge Discovery Failed!'''=Error al descubrir Bridges (puentes). -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=No se descubrieron Hue Bridges (Puentes Hue). Confirme que el Hue Bridge (Puente Hue) está conectado a la misma red que su unidad central de SmartThings, y que está conectado a la red eléctrica. -'''Linking with your Hue'''=Vinculando con su Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=El nombre de usuario Hue actual no es válido. Presione el botón de su Hue Bridge (Puente Hue) para volver a vincular. -'''Press the button on your Hue Bridge to setup a link.'''=Presione el botón de su Hue Bridge (Puente Hue) para configurar un vínculo. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=No seleccionó un Hue Bridge (puente Hue). Presione “Done” (Realizado) y seleccione uno antes de hacer clic en Next (Siguiente). -'''Success!'''=¡Logrado! -'''Linking to your hub was a success! Please click 'Next'!'''=El vínculo con su unidad central se realizó correctamente. Haga clic en 'Next' (Siguiente). -'''Find bridges'''=Encontrar puentes -'''Light Discovery Failed!'''=Error al descubrir luces -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=No se descubrió ninguna luz. Vuelva a intentarlo de nuevo más tarde. Haga clic en Done (Realizado) para salir. -'''Select Hue Lights to add ({{numFound}} found)'''=Seleccione Hue Lights (Luces Hue) que desea agregar (se encontraron {{numFound}}) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (Luces Hue) agregadas anteriormente (se agregaron {{existingLightsSize}}) -'''Light Discovery Started!'''=Descubrimiento de luces iniciado -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Espere mientras descubrimos sus Hue Lights (Luces Hue). El descubrimiento puede tomar cinco minutos o más, por lo que le sugerimos que se ponga cómodo y se relaje. Una vez descubierto, seleccione su dispositivo. diff --git a/smartapps/smartthings/hue-connect.src/i18n/et_EE.properties b/smartapps/smartthings/hue-connect.src/i18n/et_EE.properties deleted file mode 100644 index d5f3c29..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/et_EE.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Võimaldab teil ühendada teie Philips Hue tuled SmartThingsiga ja juhtida neid oma Thingsi piirkonnast või SmartThingsi mobiilirakenduse esipaneelilt. Värskendage esmalt oma Hue Bridge’i väljaspool SmartThingsi rakendust, kasutades Philips Hue rakendust. -'''Discovery Started!'''=Tuvastamine algas! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Oodake, kuni me tuvastame teie Hue Bridge’i. Pange tähele, et peate esmalt oma Hue Bridge and Lights’i süsteemi rakenduse Philips Hue abil konfigureerima. Tuvastamisele võib kuluda üle viie minuti, seega oodake rahulikult! Pärast tuvastamist valige all oma seade. -'''Select Hue Bridge ({{numFound}} found)'''=Valige Hue Bridge ({{numFound}} leitud) -'''Bridge Discovery Failed!'''=Bridge’i tuvastamine nurjus! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Ei leitud ühtki Hue Bridge’i. Kontrollige, kas Hue Bridge on ühendatud teie SmartThingsi jaoturiga samasse võrku ja et sellel on toide olemas. -'''Linking with your Hue'''=Huega ühendamine -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Praegune Hue kasutajanimi on vale. Vajutage nuppu oma Hue Bridge’il, et uuesti ühendada. -'''Press the button on your Hue Bridge to setup a link.'''=Vajutage nuppu oma Hue Bridge’il, et ühendust seadistada. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Te pole valinud Hue Bridge’i, vajutage nuppu „Valmis” ja valige mõni, enne kui klõpsate jätkamiseks. -'''Success!'''=Edukas! -'''Linking to your hub was a success! Please click 'Next'!'''=Teie jaoturiga ühendamine õnnestus! Klõpsake nuppu Järgmine! -'''Find bridges'''=Bridge’ide leidmine -'''Light Discovery Failed!'''=Tulede tuvastamine nurjus! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Tulede tuvastamine nurjus, proovige hiljem uuesti. Klõpsake väljumiseks nuppu Valmis. -'''Select Hue Lights to add ({{numFound}} found)'''=Valige lisamiseks Hue tuled ({{numFound}} leitud) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Varem lisatud Hue tuled ({{existingLightsSize}} lisatud) -'''Light Discovery Started!'''=Tulede tuvastamine algas! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Oodake, kuni me tuvastame teie Hue tuled. Tuvastamisele võib kuluda üle viie minuti, seega oodake rahulikult! Pärast tuvastamist valige all oma seade. diff --git a/smartapps/smartthings/hue-connect.src/i18n/fi_FI.properties b/smartapps/smartthings/hue-connect.src/i18n/fi_FI.properties deleted file mode 100644 index 8e329e8..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/fi_FI.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Antaa sinun yhdistää Philips Hue Lights -valot SmartThingsiin ja hallita niitä SmartThings-mobiilisovelluksen Things (Laitteet) -alueelta tai koontinäytöstä. Päivitä ensin Hue Bridge -silta SmartThings-sovelluksen ulkopuolella Philips Hue -sovelluksen avulla. -'''Discovery Started!'''=Etsintä aloitettu! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Odota, kunnes Hue Bridge -silta löytyy. Huomaa, että sinun on ensin päivitettävä Hue Bridge -silta ja Hue Lights -valot Philips Hue -sovelluksen avulla. Etsintä voi kestää jopa yli viisi minuuttia, joten odota kärsivällisesti! Valitse laite alta, kun se on löytynyt. -'''Select Hue Bridge ({{numFound}} found)'''=Valitse Hue Bridge -silta ({{numFound}} löydetty) -'''Bridge Discovery Failed!'''=Sillan etsintä epäonnistui! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Hue Bridge -siltoja ei löytynyt. Varmista, että Hue Bridge -silta on yhdistetty SmartThings-keskittimen kanssa samaan verkkoon ja että se saa virtaa. -'''Linking with your Hue'''=Hue-linkin muodostaminen -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Huen nykyinen käyttäjänimi ei kelpaa. Muodosta linkki uudelleen painamalla Hue Bridge -sillassa olevaa painiketta. -'''Press the button on your Hue Bridge to setup a link.'''=Määritä linkki painamalla Hue Bridge -sillassa olevaa painiketta. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Et ole valinnut Hue Bridge -siltaa. Paina Done (Valmis) -painiketta ja valitse silta, ennen kuin napsautat Next (Seuraava) -painiketta. -'''Success!'''=Onnistui! -'''Linking to your hub was a success! Please click 'Next'!'''=Keskittimen linkittäminen onnistui! Valitse Next (Seuraava)! -'''Find bridges'''=Etsi siltoja -'''Light Discovery Failed!'''=Valojen etsintä epäonnistui! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Valoja ei löytynyt. Yritä myöhemmin uudelleen. Lopeta valitsemalla Done (Valmis). -'''Select Hue Lights to add ({{numFound}} found)'''=Valitse lisättävät Hue Lights -valot ({{numFound}} löydetty) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Aikaisemmin lisätyt Hue Lights -valot ({{existingLightsSize}} lisätty) -'''Light Discovery Started!'''=Valojen etsintä aloitettu! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Odota, kunnes Hue Lights -valot löytyvät. Etsintä voi kestää jopa yli viisi minuuttia, joten odota kärsivällisesti! Valitse laite alta, kun se on löytynyt. diff --git a/smartapps/smartthings/hue-connect.src/i18n/fr_BE.properties b/smartapps/smartthings/hue-connect.src/i18n/fr_BE.properties deleted file mode 100644 index 9119bfc..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/fr_BE.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Vous permet de connecter vos lampes Philips Hue à SmartThings et de les contrôler depuis votre zone Things (Objets) ou du tableau de bord dans l'application mobile SmartThings. Veuillez d'abord mettre à jour votre pont Hue, en dehors de l'application SmartThings, à l'aide de l'application Philips Hue. -'''Discovery Started!'''=La détection a commencé ! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de votre pont Hue. Vous devez d'abord configurer votre pont et vos lampes Hue à l'aide de l'application Philips Hue. La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. -'''Select Hue Bridge ({{numFound}} found)'''=Sélectionnez le pont Hue ({{numFound}} trouvé(s)) -'''Bridge Discovery Failed!'''=Échec de la détection du pont ! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=La détection des ponts Hue a échoué. Veuillez confirmer que le pont Hue est connecté au même réseau que votre concentrateur SmartThings, et qu'il est sous tension. -'''Linking with your Hue'''=Association avec votre Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Le nom d'utilisateur Hue actuel n'est pas valide. Veuillez appuyer sur la touche de votre pont Hue pour l'associer de nouveau. -'''Press the button on your Hue Bridge to setup a link.'''=Appuyez sur la touche de votre pont Hue pour configurer une association. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Vous n'avez pas sélectionné de pont Hue. Appuyez sur “Done” (Terminé), puis sélectionnez-en un avant de cliquer sur Next (Suivant). -'''Success!'''=Opération réussie ! -'''Linking to your hub was a success! Please click 'Next'!'''=Vous avez réussi à associer votre concentrateur. Veuillez cliquer sur « Suivant » ! -'''Find bridges'''=Trouver des ponts -'''Light Discovery Failed!'''=La détection du pont a échoué ! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Échec de la détection des lampes, veuillez réessayer ultérieurement. Cliquez sur Done (Terminé) pour quitter. -'''Select Hue Lights to add ({{numFound}} found)'''=Sélectionnez les lampes Hue à ajouter ({{numFound}} trouvée(s)) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Lampes Hue précédemment ajoutées ({{existingLightsSize}} ajoutée(s)) -'''Light Discovery Started!'''=La détection des lampes a commencé ! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de vos lampes Hue La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. diff --git a/smartapps/smartthings/hue-connect.src/i18n/fr_CA.properties b/smartapps/smartthings/hue-connect.src/i18n/fr_CA.properties deleted file mode 100644 index 1ee3a16..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/fr_CA.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Vous permet de connecter vos Philips Hue Lights (lumières Philips Hue) avec SmartThings et de les contrôler depuis Things (choses) ou Dashboard (tableau de bord) dans l’application mobile SmartThings. Veuillez d’abord mettre à jour votre Hue Bridge (pont Hue) à l’extérieur de l’application SmartThings, à l’aide de l’application Philips Hue. -'''Discovery Started!'''=Début de la détection. -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant que nous détectons votre Hue Bridge (pont Hue). Veuillez noter que vous devez d’abord configurer votre Hue Bridge (pont Hue) et vos Hue Lights (lumières Hue) à l’aide de l’application Philips Hue. La détection peut prendre cinq minutes ou plus, donc détendez-vous. Sélectionnez votre appareil ci-dessous une fois qu’il est détecté. -'''Select Hue Bridge ({{numFound}} found)'''=Sélectionnez le Hue Bridge (pont Hue; {{numFound}} trouvé(s)) -'''Bridge Discovery Failed!'''=Échec de détection du pont! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Échec de détection d’un Hue Bridge (pont Hue). Veuillez vous assurer que le Hue Bridge (pont Hue) est connecté au même réseau que votre borne SmartThings et qu’il est alimenté. -'''Linking with your Hue'''=Jumelage avec votre Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Le nom d’utilisateur Hue que vous utilisez n’est pas valide. Appuyez sur le bouton qui se trouve sur votre Hue Bridge (pont Hue) pour effectuer le jumelage de nouveau. -'''Press the button on your Hue Bridge to setup a link.'''=Appuyez sur le bouton qui se trouve sur le Hue Bridge (pont Hue) afin de configurer un lien. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Vous n’avez pas sélectionné de Hue Bridge (pont Hue). Veuillez appuyez sur « Done » (terminé) et sélectionnez-en un avant de cliquer sur Next (suivant). -'''Success!'''=Réussite! -'''Linking to your hub was a success! Please click 'Next'!'''=Le jumelage avec votre portail est un succès! Veuillez cliquer sur Next (suivant)! -'''Find bridges'''=Trouver des ponts -'''Light Discovery Failed!'''=Échec de détection de lumière! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Impossible de détecter de la lumière. Veuillez réessayer plus tard. Cliquez sur Done (terminé) pour quitter. -'''Select Hue Lights to add ({{numFound}} found)'''=Sélectionnez les Hue Lights (lumières Hue) que vous souhaitez ajouter ({{numFound}} trouvée(s)) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (lumières Hue) ajoutées précédemment ({{existingLightsSize}} ajoutée(s)) -'''Light Discovery Started!'''=Début de la détection de lumières! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant que nous détectons vos Hue Lights (lumières Hue). La détection peut prendre cinq minutes ou plus, donc détendez-vous. Sélectionnez votre appareil ci-dessous une fois qu’il est détecté. diff --git a/smartapps/smartthings/hue-connect.src/i18n/fr_CH.properties b/smartapps/smartthings/hue-connect.src/i18n/fr_CH.properties deleted file mode 100644 index 9119bfc..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/fr_CH.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Vous permet de connecter vos lampes Philips Hue à SmartThings et de les contrôler depuis votre zone Things (Objets) ou du tableau de bord dans l'application mobile SmartThings. Veuillez d'abord mettre à jour votre pont Hue, en dehors de l'application SmartThings, à l'aide de l'application Philips Hue. -'''Discovery Started!'''=La détection a commencé ! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de votre pont Hue. Vous devez d'abord configurer votre pont et vos lampes Hue à l'aide de l'application Philips Hue. La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. -'''Select Hue Bridge ({{numFound}} found)'''=Sélectionnez le pont Hue ({{numFound}} trouvé(s)) -'''Bridge Discovery Failed!'''=Échec de la détection du pont ! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=La détection des ponts Hue a échoué. Veuillez confirmer que le pont Hue est connecté au même réseau que votre concentrateur SmartThings, et qu'il est sous tension. -'''Linking with your Hue'''=Association avec votre Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Le nom d'utilisateur Hue actuel n'est pas valide. Veuillez appuyer sur la touche de votre pont Hue pour l'associer de nouveau. -'''Press the button on your Hue Bridge to setup a link.'''=Appuyez sur la touche de votre pont Hue pour configurer une association. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Vous n'avez pas sélectionné de pont Hue. Appuyez sur “Done” (Terminé), puis sélectionnez-en un avant de cliquer sur Next (Suivant). -'''Success!'''=Opération réussie ! -'''Linking to your hub was a success! Please click 'Next'!'''=Vous avez réussi à associer votre concentrateur. Veuillez cliquer sur « Suivant » ! -'''Find bridges'''=Trouver des ponts -'''Light Discovery Failed!'''=La détection du pont a échoué ! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Échec de la détection des lampes, veuillez réessayer ultérieurement. Cliquez sur Done (Terminé) pour quitter. -'''Select Hue Lights to add ({{numFound}} found)'''=Sélectionnez les lampes Hue à ajouter ({{numFound}} trouvée(s)) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Lampes Hue précédemment ajoutées ({{existingLightsSize}} ajoutée(s)) -'''Light Discovery Started!'''=La détection des lampes a commencé ! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de vos lampes Hue La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. diff --git a/smartapps/smartthings/hue-connect.src/i18n/fr_FR.properties b/smartapps/smartthings/hue-connect.src/i18n/fr_FR.properties deleted file mode 100644 index 9119bfc..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/fr_FR.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Vous permet de connecter vos lampes Philips Hue à SmartThings et de les contrôler depuis votre zone Things (Objets) ou du tableau de bord dans l'application mobile SmartThings. Veuillez d'abord mettre à jour votre pont Hue, en dehors de l'application SmartThings, à l'aide de l'application Philips Hue. -'''Discovery Started!'''=La détection a commencé ! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de votre pont Hue. Vous devez d'abord configurer votre pont et vos lampes Hue à l'aide de l'application Philips Hue. La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. -'''Select Hue Bridge ({{numFound}} found)'''=Sélectionnez le pont Hue ({{numFound}} trouvé(s)) -'''Bridge Discovery Failed!'''=Échec de la détection du pont ! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=La détection des ponts Hue a échoué. Veuillez confirmer que le pont Hue est connecté au même réseau que votre concentrateur SmartThings, et qu'il est sous tension. -'''Linking with your Hue'''=Association avec votre Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Le nom d'utilisateur Hue actuel n'est pas valide. Veuillez appuyer sur la touche de votre pont Hue pour l'associer de nouveau. -'''Press the button on your Hue Bridge to setup a link.'''=Appuyez sur la touche de votre pont Hue pour configurer une association. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Vous n'avez pas sélectionné de pont Hue. Appuyez sur “Done” (Terminé), puis sélectionnez-en un avant de cliquer sur Next (Suivant). -'''Success!'''=Opération réussie ! -'''Linking to your hub was a success! Please click 'Next'!'''=Vous avez réussi à associer votre concentrateur. Veuillez cliquer sur « Suivant » ! -'''Find bridges'''=Trouver des ponts -'''Light Discovery Failed!'''=La détection du pont a échoué ! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Échec de la détection des lampes, veuillez réessayer ultérieurement. Cliquez sur Done (Terminé) pour quitter. -'''Select Hue Lights to add ({{numFound}} found)'''=Sélectionnez les lampes Hue à ajouter ({{numFound}} trouvée(s)) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Lampes Hue précédemment ajoutées ({{existingLightsSize}} ajoutée(s)) -'''Light Discovery Started!'''=La détection des lampes a commencé ! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Veuillez patienter pendant la détection de vos lampes Hue La détection peut prendre cinq minutes voire plus. Alors, détendez-vous en attendant ! Une fois qu'il a été détecté, sélectionnez votre appareil ci-dessous. diff --git a/smartapps/smartthings/hue-connect.src/i18n/hr_HR.properties b/smartapps/smartthings/hue-connect.src/i18n/hr_HR.properties deleted file mode 100644 index 541bde5..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/hr_HR.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Omogućava vam da povežete Philips Hue lights (svjetla Philips Hue) i SmartThings te da upravljate njima iz dijela Things area (Područje za stvari) ili Dashboard (Nadzorna ploča) u mobilnoj aplikaciji SmartThings. Najprije aktualizirajte Hue Bridge (Hue most) izvan aplikacije SmartThings s pomoću aplikacije Philips Hue. -'''Discovery Started!'''=Otkrivanje je započelo! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Pričekajte dok otkrivamo vaš Hue Bridge (Hue most). Imajte na umu da najprije morate konfigurirati vaš Hue Bridge (Hue most) i Lights (svjetla) s pomoću aplikacije Philips Hue. Otkrivanje može trajati pet minuta ili dulje, stoga sjednite i opustite se! Kada bude otkriven, odaberite svoj uređaj u nastavku. -'''Select Hue Bridge ({{numFound}} found)'''=Odaberite Hue Bridge (Hue most) (pronađeno: {{numFound}}) -'''Bridge Discovery Failed!'''=Neuspješno otkrivanje Bridgea (mosta)! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nije otkriven nijedan Hue Bridge (Hue most). Potvrdite da je Hue Bridge (Hue most) povezan na istu mrežu kao i SmartThings Hub i da je uključen. -'''Linking with your Hue'''=Povezivanje s uređajem Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Neispravno je trenutačno korisničko ime za Hue. Pritisnite gumb za ponovno povezivanje na Hue Bridgeu (Hue most). -'''Press the button on your Hue Bridge to setup a link.'''=Pritisnite gumb na uređaju Hue Bridge (Hue most) da biste postavili vezu. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Niste odabrali nijedan Hue Bridge (Hue most), pritisnite „Done” (Gotovo) i odaberite jedan prije nego što kliknete next (dalje). -'''Success!'''=Uspjeh! -'''Linking to your hub was a success! Please click 'Next'!'''=Povezivanje na koncentrator bilo je uspješno! Kliknite „Next” (Dalje)! -'''Find bridges'''=Pronađi mostove -'''Light Discovery Failed!'''=Otkrivanje svjetla nije uspjelo! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nije otkriveno nijedno svjetlo, pokušajte ponovno kasnije. Kliknite Done (Gotovo) za izlaz. -'''Select Hue Lights to add ({{numFound}} found)'''=Odaberite Hue Lights (svjetla Hue) za dodavanje (pronađeno: {{numFound}}) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (svjetla Hue) koja su prethodno dodana (dodano: {{existingLightsSize}}) -'''Light Discovery Started!'''=Započelo je otkrivanje svjetla! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Pričekajte dok otkrivamo Hue Lights (svjetla Hue). Otkrivanje može trajati pet minuta ili dulje, stoga sjednite i opustite se! Kada bude otkriven, odaberite svoj uređaj u nastavku. diff --git a/smartapps/smartthings/hue-connect.src/i18n/hu_HU.properties b/smartapps/smartthings/hue-connect.src/i18n/hu_HU.properties deleted file mode 100644 index ae106f6..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/hu_HU.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Lehetővé teszi a Philips Hue Lights (lámpák) összekapcsolását a SmartThings rendszerrel és vezérlésüket a SmartThings Mobile alkalmazás Things (Tárgyak) területéről vagy a Dashboard (Vezérlőpult) segítségével. Előbb frissítse a Hue Bridge (híd) eszközt a SmartThings alkalmazáson kívülről, a Philips Hue alkalmazás segítségével. -'''Discovery Started!'''=Megkezdődött a keresés! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Kis türelmet kérünk, amíg megtaláljuk a Hue Bridge (híd) eszközt. Felhívjuk figyelmét, hogy előbb el kell végeznie a Hue Bridge (híd) és Lights (lámpák) konfigurálását a Philips Hue alkalmazással. Ez akár öt percnél is tovább tarthat, így némi türelemre lesz szükség! Az eszköz megtalálása után alább kiválaszthatja azt. -'''Select Hue Bridge ({{numFound}} found)'''=Válassza ki a Hue Bridge (híd) eszközt ({{numFound}} találat) -'''Bridge Discovery Failed!'''=A Bridge (híd) keresése sikertelen volt! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nem sikerült Hue Bridge (híd) eszközt találni. Győződjön meg róla, hogy a Hue Bridge (híd) ugyanahhoz a hálózathoz kapcsolódik, mint a SmartThings Hub, és be van kapcsolva. -'''Linking with your Hue'''=Összekapcsolás a Hue-val -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=A jelenleg Hue-felhasználónév érvénytelen. Nyomja meg a Hue Bridge (híd) gombját az újbóli összekapcsoláshoz. -'''Press the button on your Hue Bridge to setup a link.'''=Az összekapcsolás beállításához nyomja meg a Hue Bridge (híd) gombját. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nem választott ki Hue Bridge (híd) eszközt. Nyomja meg a „Done” (Kész) gombot, és válasszon, mielőtt a Next (Tovább) gombra kattintana. -'''Success!'''=Sikerült! -'''Linking to your hub was a success! Please click 'Next'!'''=Sikeresen összekapcsolódott a hubbal! Kattintson a „Next” (Tovább) gombra! -'''Find bridges'''=Bridge (híd) eszközök keresése -'''Light Discovery Failed!'''=A Light (lámpa) keresése sikertelen volt! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nem sikerült Light (lámpa) eszközt találni, próbálja meg később. Kattintson a Done (Kész) gombra a kilépéshez. -'''Select Hue Lights to add ({{numFound}} found)'''=Válassza ki a hozzáadni kívánt Hue Light (lámpa) eszközöket ({{numFound}} találat) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Előzőleg hozzáadott Hue Lights (lámpák) ({{existingLightsSize}} hozzáadva) -'''Light Discovery Started!'''=Megkezdődött a Light (lámpa) eszközök keresése! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Kis türelmet kérünk, amíg megtaláljuk a Hue Light (lámpa) eszközöket. Ez akár öt percnél is tovább tarthat, így némi türelemre lesz szükség! Az eszköz megtalálása után alább kiválaszthatja azt. diff --git a/smartapps/smartthings/hue-connect.src/i18n/it_IT.properties b/smartapps/smartthings/hue-connect.src/i18n/it_IT.properties deleted file mode 100644 index 891cf93..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/it_IT.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Consente di collegare le Philips Hue Light (lampadine Philips Hue) con SmartThings e di controllarle dall'area Things o dalla dashboard nell'applicazione mobile SmartThings. Aggiornate innanzitutto il bridge Hue, fuori dall'applicazione SmartThings, tramite l'applicazione Philips Hue. -'''Discovery Started!'''=Rilevamento avviato. -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Attendete mentre è in corso il rilevamento del bridge Hue. Tenete presente che occorre innanzitutto configurare il bridge e le lampadine Hue tramite l'applicazione Philips Hue. La procedura di rilevamento può richiede almeno cinque minuti, quindi sedetevi e rilassatevi! Selezionate il dispositivo in uso tra quelli riportati di seguito dopo il rilevamento. -'''Select Hue Bridge ({{numFound}} found)'''=Selezionate il bridge Hue ({{numFound}} trovati) -'''Bridge Discovery Failed!'''=Rilevamento bridge non riuscito. -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Impossibile rilevare i bridge Hue. Verificate che il bridge Hue sia connesso alla stessa rete dell'hub SmartThings e che sia collegato all'alimentazione. -'''Linking with your Hue'''=Collegamento con Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Il nome utente Hue corrente non è valido. Premete il pulsante sul bridge Hue per ripetere il collegamento. -'''Press the button on your Hue Bridge to setup a link.'''=Premete il pulsante sul bridge Hue per configurare un collegamento. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Non avete selezionato nessun bridge Hue. Premete “Done” (Fatto) e selezionatene uno prima di fare clic su Next (Avanti). -'''Success!'''=Operazione riuscita. -'''Linking to your hub was a success! Please click 'Next'!'''=Il collegamento all'hub è stato effettuato correttamente. Fate clic su “Next” (Avanti). -'''Find bridges'''=Cerca bridge -'''Light Discovery Failed!'''=Rilevamento lampadina non riuscito. -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Impossibile rilevare le lampadine. Riprovate più tardi. Fate clic su Done (Fatto) per uscire. -'''Select Hue Lights to add ({{numFound}} found)'''=Selezionate le Hue Light (lampadine Hue) da aggiungere ({{numFound}} trovate) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Light (lampadine Hue) aggiunte in precedenza ({{existingLightsSize}} aggiunte) -'''Light Discovery Started!'''=Rilevamento lampadine avviato. -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Attendete mentre è in corso il rilevamento delle Hue Light (lampadine Hue). La procedura di rilevamento può richiede almeno cinque minuti, quindi sedetevi e rilassatevi! Selezionate il dispositivo in uso tra quelli riportati di seguito dopo il rilevamento. diff --git a/smartapps/smartthings/hue-connect.src/i18n/ko_KR.properties b/smartapps/smartthings/hue-connect.src/i18n/ko_KR.properties deleted file mode 100644 index 2f40e11..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/ko_KR.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Philips Hue 조명을 SmartThings와 연결하여 SmartThings 모바일 앱의 개별 기기 정보 영역이나 대시보드에서 조명을 조절할 수 있도록 지원합니다. SmartThings 앱을 빠져나와 Philips Hue 앱을 이용하여 먼저 Hue 브릿지를 업데이트하세요. -'''Discovery Started!'''=찾기 시작! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Hue 브릿지 검색이 완료될 때까지 잠시 기다리세요. Philips Hue 앱을 이용하여 Hue 브릿지와 조명을 먼저 설정해야 합니다. 검색에는 5분 이상 걸릴 수 있으므로 편히 쉬면서 기다리세요! 검색이 완료되면 아래에서 기기를 선택하세요. -'''Select Hue Bridge ({{numFound}} found)'''=Hue 브릿지 선택 ({{numFound}}개 찾음) -'''Bridge Discovery Failed!'''=브릿지 찾기 실패! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Hue 브릿지를 찾지 못했습니다. Hue 브릿지가 SmartThings 허브와 같은 네트워크에 연결되어 있고 전원이 켜져 있는지 확인하세요. -'''Linking with your Hue'''=Hue와 연결 중 -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=현재 Hue 사용자 이름이 바르지 않습니다. Hue 브릿지의 버튼을 눌러 다시 연결하세요. -'''Press the button on your Hue Bridge to setup a link.'''=Hue 브릿지의 버튼을 눌러 다시 연결하세요. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=선택된 Hue 브릿지가 없습니다. [완료]를 누르고 Hue 브릿지를 선택한 후 [다음]을 클릭하세요. -'''Success!'''=성공! -'''Linking to your hub was a success! Please click 'Next'!'''=허브와 성공적으로 연결했습니다! [다음]을 클릭하세요. -'''Find bridges'''=브릿지 검색 -'''Light Discovery Failed!'''=조명 찾기 실패! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=조명을 찾지 못했습니다. 나중에 다시 시도하세요. 종료하려면 [완료]를 클릭하세요. -'''Select Hue Lights to add ({{numFound}} found)'''=추가할 Hue 조명 선택 ({{numFound}}개 찾음) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=이전에 추가한 Hue 조명 ({{existingLightsSize}} 추가됨) -'''Light Discovery Started!'''=조명 찾기 시작! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Hue 조명 검색이 완료될 때까지 잠시 기다리세요. 검색에는 5분 이상 걸릴 수 있으므로 편히 쉬면서 기다리세요! 검색이 완료되면 아래에서 기기를 선택하세요. diff --git a/smartapps/smartthings/hue-connect.src/i18n/nb_NO.properties b/smartapps/smartthings/hue-connect.src/i18n/nb_NO.properties deleted file mode 100644 index ee833dc..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/nb_NO.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Lar deg koble Philips Hue Lights (lys) med SmartThings og kontrollere dem fra Things (Ting)-området eller dashbordet i SmartThings-mobilappen. Oppdater Hue Bridge (bro) først, utenfor SmartThings-appen, ved å bruke Philips Hue-appen. -'''Discovery Started!'''=Oppdagelse startet! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vent litt mens vi oppdager Hue Bridge (bro). Vær oppmerksom på at du må først sette opp Hue Bridge (bro) og Lights (lysene) ved å bruke Philips Hue-appen. Det kan ta fem minutter eller mer å oppdage den, så len deg tilbake og slapp av! Velg enheten nedenfor når den er oppdaget. -'''Select Hue Bridge ({{numFound}} found)'''=Velg Hue Bridge (bro) ({{numFound}} funnet) -'''Bridge Discovery Failed!'''=Oppdagelse av Bridge (bro) mislyktes! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Kunne ikke oppdage noen Hue Bridge (bro). Bekreft at Hue Bridge (bro) er koblet til det samme nettverket som SmartThings-huben, og at den har strøm. -'''Linking with your Hue'''=Kobler sammen med Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Det gjeldende Hue-brukernavnet er ugyldig. Trykk på knappen på Hue Bridge (bro) for å koble til igjen. -'''Press the button on your Hue Bridge to setup a link.'''=Trykk på knappen på Hue Bridge (bro) for å sette opp en kobling. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Du har ikke valgt en Hue Bridge (bro), trykk på “Done” (Utført), og velg en før du klikker på Next (Neste). -'''Success!'''=Suksess! -'''Linking to your hub was a success! Please click 'Next'!'''=Tilkobling til huben var vellykket! Klikk på 'Next' (Neste)! -'''Find bridges'''=Finn broer -'''Light Discovery Failed!'''=Lysoppdagelse mislyktes! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Kunne ikke oppdage noen lys, prøv igjen senere. Klikk på Done (Utført) for å avslutte. -'''Select Hue Lights to add ({{numFound}} found)'''=Velg Hue Ligths (lys) du vil legge til ({{numFound}} funnet) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (lys) tidligere lagt til ({{existingLightsSize}} lagt til) -'''Light Discovery Started!'''=Lysoppdagelse startet! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vent litt mens vi oppdager Hue Lights (lys). Det kan ta fem minutter eller mer å oppdage den, så len deg tilbake og slapp av! Velg enheten nedenfor når den er oppdaget. diff --git a/smartapps/smartthings/hue-connect.src/i18n/nl_BE.properties b/smartapps/smartthings/hue-connect.src/i18n/nl_BE.properties deleted file mode 100644 index cbf8841..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/nl_BE.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Hiermee kunt u uw Philips Hue lights (lampen) verbinden met SmartThings en ze bedienen via uw Things-gebied of het Dashboard in de SmartThings Mobiele app. Werk eerst met de Philips Hue-app uw Hue Bridge (brug) bij buiten de SmartThings-app. -'''Discovery Started!'''=Detectie gestart! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Even geduld terwijl wij uw Hue Bridge (brug) detecteren. Houd er rekening mee dat u eerst uw Hue Bridge en Lights (lampen) moet configureren met de applicatie Philips Hue. Het detecteren kan wel vijf minuten of langer duren, dus even geduld! Selecteer uw apparaat hieronder na het detecteren. -'''Select Hue Bridge ({{numFound}} found)'''=Selecteer Hue Bridge (brug) ({{numFound}} gevonden) -'''Bridge Discovery Failed!'''=Detectie brug mislukt! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Kan geen Hue Bridges (bruggen) detecteren. Bevestig dat de Hue Bridge (brug) is verbonden met hetzelfde netwerk als uw SmartThings-hub en wordt voorzien van voeding. -'''Linking with your Hue'''=Koppelen met uw Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=De huidige Hue-gebruikersnaam is ongeldig. Druk op de knop op uw Hue Bridge (brug) om opnieuw te koppelen. -'''Press the button on your Hue Bridge to setup a link.'''=Druk op de knop op uw Hue Bridge (brug) om een koppeling in te stellen. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=U hebt geen Hue Bridge (brug) geselecteerd. Druk op “Done” (Gereed) en selecteer één brug voordat u op Next (Volgende) klikt. -'''Success!'''=Succes! -'''Linking to your hub was a success! Please click 'Next'!'''=De koppeling met uw hub is geslaagd! Klik op Next (Volgende)! -'''Find bridges'''=Bruggen zoeken -'''Light Discovery Failed!'''=Lampdetectie mislukt -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Kan geen lampen detecteren, probeer het later opnieuw. Klik op Done (Gereed) om af te sluiten. -'''Select Hue Lights to add ({{numFound}} found)'''=Selecteer Hue Lights (lampen) om toe te voegen ({{numFound}} gevonden) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Eerder toegevoegde Hue Lights (lampen) ({{existingLightsSize}} toegevoegd) -'''Light Discovery Started!'''=Lampdetectie gestart. -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Even geduld terwijl wij uw Hue Lights (lampen) detecteren. Het detecteren kan wel vijf minuten of langer duren, dus even geduld! Selecteer uw apparaat hieronder na het detecteren. diff --git a/smartapps/smartthings/hue-connect.src/i18n/nl_NL.properties b/smartapps/smartthings/hue-connect.src/i18n/nl_NL.properties deleted file mode 100644 index cbf8841..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/nl_NL.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Hiermee kunt u uw Philips Hue lights (lampen) verbinden met SmartThings en ze bedienen via uw Things-gebied of het Dashboard in de SmartThings Mobiele app. Werk eerst met de Philips Hue-app uw Hue Bridge (brug) bij buiten de SmartThings-app. -'''Discovery Started!'''=Detectie gestart! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Even geduld terwijl wij uw Hue Bridge (brug) detecteren. Houd er rekening mee dat u eerst uw Hue Bridge en Lights (lampen) moet configureren met de applicatie Philips Hue. Het detecteren kan wel vijf minuten of langer duren, dus even geduld! Selecteer uw apparaat hieronder na het detecteren. -'''Select Hue Bridge ({{numFound}} found)'''=Selecteer Hue Bridge (brug) ({{numFound}} gevonden) -'''Bridge Discovery Failed!'''=Detectie brug mislukt! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Kan geen Hue Bridges (bruggen) detecteren. Bevestig dat de Hue Bridge (brug) is verbonden met hetzelfde netwerk als uw SmartThings-hub en wordt voorzien van voeding. -'''Linking with your Hue'''=Koppelen met uw Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=De huidige Hue-gebruikersnaam is ongeldig. Druk op de knop op uw Hue Bridge (brug) om opnieuw te koppelen. -'''Press the button on your Hue Bridge to setup a link.'''=Druk op de knop op uw Hue Bridge (brug) om een koppeling in te stellen. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=U hebt geen Hue Bridge (brug) geselecteerd. Druk op “Done” (Gereed) en selecteer één brug voordat u op Next (Volgende) klikt. -'''Success!'''=Succes! -'''Linking to your hub was a success! Please click 'Next'!'''=De koppeling met uw hub is geslaagd! Klik op Next (Volgende)! -'''Find bridges'''=Bruggen zoeken -'''Light Discovery Failed!'''=Lampdetectie mislukt -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Kan geen lampen detecteren, probeer het later opnieuw. Klik op Done (Gereed) om af te sluiten. -'''Select Hue Lights to add ({{numFound}} found)'''=Selecteer Hue Lights (lampen) om toe te voegen ({{numFound}} gevonden) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Eerder toegevoegde Hue Lights (lampen) ({{existingLightsSize}} toegevoegd) -'''Light Discovery Started!'''=Lampdetectie gestart. -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Even geduld terwijl wij uw Hue Lights (lampen) detecteren. Het detecteren kan wel vijf minuten of langer duren, dus even geduld! Selecteer uw apparaat hieronder na het detecteren. diff --git a/smartapps/smartthings/hue-connect.src/i18n/pl_PL.properties b/smartapps/smartthings/hue-connect.src/i18n/pl_PL.properties deleted file mode 100644 index eb51180..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/pl_PL.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Umożliwia łączenie Philips Hue Lights (lamp Philips Hue) z rozwiązaniem SmartThings oraz sterowanie nimi w obszarze Things (Rzeczy) lub na pulpicie nawigacyjnym w aplikacji mobilnej SmartThings. Najpierw zaktualizuj Hue Bridge (mostek Hue) poza aplikacją SmartThings, korzystając z aplikacji Philips Hue. -'''Discovery Started!'''=Rozpoczęto wykrywanie. -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Poczekaj na wykrycie Hue Bridge (mostka Hue). Pamiętaj, że najpierw musisz skonfigurować Hue Bridge (mostek Hue) i Hue Lights (lampy Hue) za pomocą aplikacji Philips Hue. Wykrywanie może potrwać co najmniej pięć minut, więc usiądź i zrelaksuj się. Po wykryciu Twojego urządzenia wybierz je poniżej. -'''Select Hue Bridge ({{numFound}} found)'''=Wybierz Hue Bridge (mostek Hue) (znaleziono {{numFound}}) -'''Bridge Discovery Failed!'''=Wykrywanie mostka nie powiodło się! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Wykrywanie Hue Bridges (mostków Hue) nie powiodło się. Potwierdź, że Hue Bridge (mostek Hue) został podłączony do tej samej sieci, co koncentrator SmartThings Hub, oraz że jego zasilanie działa. -'''Linking with your Hue'''=Łączenie z urządzeniem Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Bieżąca nazwa użytkownika urządzenia Hue jest nieprawidłowa. Naciśnij przycisk na Hue Bridge (mostku Hue), aby ponownie go podłączyć. -'''Press the button on your Hue Bridge to setup a link.'''=Naciśnij przycisk na Hue Bridge (mostku Hue), aby skonfigurować połączenie. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nie wybrano Hue Bridge (mostka Hue), naciśnij opcję „Done” (Gotowe) i wybierz go przed kliknięciem opcji Next (Dalej). -'''Success!'''=Sukces! -'''Linking to your hub was a success! Please click 'Next'!'''=Łączenie z koncentratorem zakończyło się pomyślnie. Kliknij opcję „Next” (Dalej). -'''Find bridges'''=Wyszukaj mostki -'''Light Discovery Failed!'''=Wykrywanie lampy nie powiodło się. -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nie można wykryć lamp, spróbuj ponownie później. Kliknij opcję Done (Gotowe), aby zakończyć. -'''Select Hue Lights to add ({{numFound}} found)'''=Wybierz Hue Lights (lampy Hue) do dodania (znaleziono {{numFound}}) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Poprzednio dodane Hue Lights (lampy Hue) (dodano {{existingLightsSize}}) -'''Light Discovery Started!'''=Rozpoczęto wykrywanie lamp. -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Poczekaj na wykrycie Hue Lights (lamp Hue). Wykrywanie może potrwać co najmniej pięć minut, więc usiądź i zrelaksuj się. Po wykryciu Twojego urządzenia wybierz je poniżej. diff --git a/smartapps/smartthings/hue-connect.src/i18n/pt_BR.properties b/smartapps/smartthings/hue-connect.src/i18n/pt_BR.properties deleted file mode 100644 index 81d8f13..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/pt_BR.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Permite conectar as luzes da Philips Hue com o SmartThings e controlá-las a partir da área "Things" (Coisas) ou do "Dashboard" (Painel) do aplicativo SmartThings Mobile. Primeiro atualize a ponte da Hue fora do aplicativo SmartThings, usando o aplicativo Philips Hue. -'''Discovery Started!'''=Detecção iniciada! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Aguarde enquanto detectamos a ponte da Hue. Note que você deve primeiro configurar a ponte da Hue e as luzes usando o aplicativo Philips Hue. A detecção pode levar cinco minutos ou mais, portanto, sente-se e relaxe! Selecione abaixo o seu aparelho após a detecção. -'''Select Hue Bridge ({{numFound}} found)'''=Selecionar ponte da Hue ({{numFound}} encontrado(s)) -'''Bridge Discovery Failed!'''=Falha ao detectar a ponte! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Falha ao detectar pontes da Hue. Verifique se a ponte da Hue está conectada à mesma rede do seu SmartThings Hub e ligada na tomada. -'''Linking with your Hue'''=Vinculando com a Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=O nome de usuário da Hue atual é inválido. Pressione o botão na ponte da Hue para vincular novamente. -'''Press the button on your Hue Bridge to setup a link.'''=Pressione o botão na ponte da Hue para configurar a vinculação. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Você não selecionou uma ponte da Hue. Pressione 'Done' (Concluir) e selecione a ponte antes de clicar em Next (Avançar). -'''Success!'''=Sucesso! -'''Linking to your hub was a success! Please click 'Next'!'''=A vinculação com o hub foi concluída com êxito. Clique em "Next" (Avançar). -'''Find bridges'''=Encontrar pontes -'''Light Discovery Failed!'''=Falha ao detectar luz! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Falha ao detectar as luzes. Tente novamente mais tarde. Clique em \"Done\" (Concluir) para sair. -'''Select Hue Lights to add ({{numFound}} found)'''=Selecione as luzes da Hue a serem adicionadas ({{numFound}} encontrada(s)) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Luzes da Hue adicionadas anteriormente ({{existingLightsSize}} adicionada(s)) -'''Light Discovery Started!'''=Detecção de luz iniciada! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Aguarde enquanto detectamos as luzes da Hue. A detecção pode levar cinco minutos ou mais, portanto, sente-se e relaxe! Selecione abaixo o seu aparelho após a detecção. diff --git a/smartapps/smartthings/hue-connect.src/i18n/pt_PT.properties b/smartapps/smartthings/hue-connect.src/i18n/pt_PT.properties deleted file mode 100644 index 6298f90..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/pt_PT.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Permite-lhe ligar as luzes Philips Hue com o SmartThings e controlá-las a partir da sua área Things (Coisas) ou do Dashboard (Painel) na aplicação SmartThings Mobile. Actualize primeiro o seu Hue Bridge, fora da aplicação SmartThings, utilizando a aplicação Philips Hue. -'''Discovery Started!'''=Detecção Iniciada! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Aguarde enquanto detectamos o seu Hue Bridge. Note que tem de configurar primeiro os seus Hue Bridge e Hue Lights (Luzes Hue) utilizando a aplicação Philips Hue. A detecção pode demorar cinco minutos ou mais, por isso, sente-se e relaxe! Seleccione o seu dispositivo abaixo depois de ter sido detectado. -'''Select Hue Bridge ({{numFound}} found)'''=Seleccionar Hue Bridge ({{numFound}} encontrado) -'''Bridge Discovery Failed!'''=Falha na Detecção de Bridge! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Falha ao detectar quaisquer Hue Bridges. Confirme se o Hue Bridge está ligado à mesma rede que o seu Hub SmartThings e que tem carga. -'''Linking with your Hue'''=Ligar com o Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=O nome de utilizador do Hue actual é inválido. Prima o botão no seu Hue Bridge para ligar novamente. -'''Press the button on your Hue Bridge to setup a link.'''=Prima o botão no Hue Bridge para configurar uma ligação. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Done' (Concluído) e seleccione um antes de clicar em Next (Seguinte). -'''Success!'''=Sucesso! -'''Linking to your hub was a success! Please click 'Next'!'''=A ligação ao seu Hub foi um sucesso! Clique em "Next" (Seguinte)! -'''Find bridges'''=Localizar bridges -'''Light Discovery Failed!'''=Falha na Detecção de Luzes! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Falha ao detectar quaisquer luzes, tente novamente mais tarde. Clique em \"Done\" (Concluído). -'''Select Hue Lights to add ({{numFound}} found)'''=Seleccione Hue Lights (Luzez Hue) para adicionar ({{numFound}} encontrado) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (Luzes Hue) anteriormente adicionado ({{existingLightsSize}} adicionado) -'''Light Discovery Started!'''=Detecção de Luzes Iniciada! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Aguarde enquanto detectamos o seu Hue Lights (Luzes Hue). A detecção pode demorar cinco minutos ou mais, por isso, sente-se e relaxe! Seleccione o seu dispositivo abaixo depois de ter sido detectado. diff --git a/smartapps/smartthings/hue-connect.src/i18n/ro_RO.properties b/smartapps/smartthings/hue-connect.src/i18n/ro_RO.properties deleted file mode 100644 index 02faf38..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/ro_RO.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Vă permite să conectați Philips Hue lights (luminile Philips Hue) cu SmartThings și să le controlați din zona Things sau Dashboard aflate în aplicația SmartThings Mobile. Actualizați mai întâi Hue Bridge, în afara aplicației SmartThings, utilizând aplicația Philips Hue. -'''Discovery Started!'''=Descoperire pornită! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Așteptați până când descoperim dispozitivul Hue Bridge. Rețineți că trebuie să configurați mai întâi Hue Bridge și Hue Lights (lumini Hue) utilizând aplicația Philips Hue. Descoperirea poate dura aproximativ cinci sau mai multe minute; relaxați-vă și așteptați! Selectați dispozitivul mai jos după ce este descoperit. -'''Select Hue Bridge ({{numFound}} found)'''=Selectare Hue Bridge ({{numFound}} găsite) -'''Bridge Discovery Failed!'''=Descoperirea Hue Bridge nu a reușit! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nu s-a descoperit niciun dispozitiv Hue Bridge. Confirmați că dispozitivul Hue Bridge este conectat la aceeași rețea ca și SmartThings Hub și că este alimentat. -'''Linking with your Hue'''=Asociere cu Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Numele de utilizator actual pentru Hue este nevalid. Apăsați butonul de pe Hue Bridge pentru a relua asocierea. -'''Press the button on your Hue Bridge to setup a link.'''=Apăsați butonul Hue Bridge pentru a configura o asociere. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nu ați a selectat un dispozitive Hue Bridge; apăsați „Done” (Efectuat) și selectați unul, apoi faceți clic pe Next (Înainte). -'''Success!'''=Succes! -'''Linking to your hub was a success! Please click 'Next'!'''=Asocierea cu hubul dvs. a reușit! Faceți clic pe „Next” (Înainte)! -'''Find bridges'''=Găsire dispozitive bridge -'''Light Discovery Failed!'''=Descoperirea luminii nu a reușit! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nu au fost găsită nicio lumină, încercați din nou mai târziu. Faceți clic pe Done (Efectuat) pentru a ieși. -'''Select Hue Lights to add ({{numFound}} found)'''=Selectați Hue Lights (lumini Hue) de adăugat ({{numFound}} găsite) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Hue Lights (lumini Hue) adăugate anterior ({{existingLightsSize}} adăugate) -'''Light Discovery Started!'''=Descoperire lumini pornită! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Așteptați până când descoperim Hue Lights (luminile Hue). Descoperirea poate dura aproximativ cinci sau mai multe minute; relaxați-vă și așteptați! Selectați dispozitivul mai jos după ce este descoperit. diff --git a/smartapps/smartthings/hue-connect.src/i18n/ru_RU.properties b/smartapps/smartthings/hue-connect.src/i18n/ru_RU.properties deleted file mode 100644 index 2a9880f..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/ru_RU.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Позволяет подключить лампы Philips Hue к концентратору SmartThings и управлять ими из области “Вещи” или с информационной панели в мобильном приложении SmartThings.\n\nПрежде чем перейти к настройке, обновите мост Hue при помощи приложения Philips Hue, вне приложения SmartThings. -'''Discovery Started!'''=Поиск начат! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Идет поиск моста Hue. Обратите внимание, что сначала необходимо настроить мост и лампы Hue с помощью приложения Philips Hue. Пожалуйста, подождите. Поиск может занять больше 5 минут. В это время можно отдохнуть и расслабиться! Когда необходимое устройство будет обнаружено, выберите его из списка ниже. -'''Select Hue Bridge ({{numFound}} found)'''=Выберите мост Hue (найдено: {{numFound}}) -'''Bridge Discovery Failed!'''=Не удалось обнаружить мост Hue! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Не обнаружено ни одного моста Hue. Убедитесь, что мост Hue подключен к одной сети с концентратором SmartThings, а его питание — включено. -'''Linking with your Hue'''=Установка связи с Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Текущее имя пользователя Hue недопустимо. Нажмите кнопку на мосту Hue, чтобы установить связь повторно. -'''Press the button on your Hue Bridge to setup a link.'''=Нажмите кнопку на мосту Hue, чтобы установить связь. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Мост Hue не выбран. Прежде чем перейти к следующему шагу, нажмите “Готово” и выберите мост. -'''Success!'''=Успешно завершено! -'''Linking to your hub was a success! Please click 'Next'!'''=Связь с концентратором установлена! Нажмите “Далее”! -'''Find bridges'''=Поиск мостов -'''Light Discovery Failed!'''=Не удалось обнаружить лампу! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Не обнаружено ни одной лампы. Повторите попытку позже. Нажмите “Готово” для выхода. -'''Select Hue Lights to add ({{numFound}} found)'''=Выберите лампы Hue для добавления (найдено: {{numFound}}) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Уже добавленные лампы Hue (добавлено: {{existingLightsSize}}) -'''Light Discovery Started!'''=Поиск ламп начат! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Идет поиск ламп Hue. Пожалуйста, подождите. Поиск может занять больше 5 минут. В это время можно отдохнуть и расслабиться! Когда необходимое устройство будет обнаружено, выберите его из списка ниже. diff --git a/smartapps/smartthings/hue-connect.src/i18n/sk_SK.properties b/smartapps/smartthings/hue-connect.src/i18n/sk_SK.properties deleted file mode 100644 index 83d7776..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/sk_SK.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Umožňuje pripojiť svetlá Philips Hue pomocou centrály SmartThings a ovládať ich z oblasti Things (Veci) alebo z tabule v mobilnej aplikácii SmartThings. Najskôr aktualizujte sieťový most Hue mimo aplikácie SmartThings pomocou aplikácie Philips Hue. -'''Discovery Started!'''=Spustilo sa vyhľadávanie. -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počkajte, kým sa nenájde sieťový most Hue. Najskôr musíte nakonfigurovať svetlá a sieťový most Hue pomocou aplikácie Philips Hue. Vyhľadávanie môže trvať aj päť minút alebo dlhšie, preto sa pokojne posaďte a počkajte. Po nájdení zariadenia ho nižšie vyberte. -'''Select Hue Bridge ({{numFound}} found)'''=Vyberte sieťový most Hue (nájdené: {{numFound}}) -'''Bridge Discovery Failed!'''=Vyhľadanie sieťového mostu zlyhalo. -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nepodarilo sa nájsť žiadne sieťové mosty Hue. Skontrolujte, či je sieťový most Hue pripojený k rovnakej sieti ako sieťový most SmartThings a či je zapnutý. -'''Linking with your Hue'''=Prepojenie so zariadením Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Aktuálne meno používateľa zariadenia Hue je neplatné. Stlačením tlačidla na sieťovom moste Hue obnovte prepojenie. -'''Press the button on your Hue Bridge to setup a link.'''=Stlačením tlačidla na sieťovom moste Hue nastavte prepojenie. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nevybrali ste žiadny sieťový most Hue. Stlačte tlačidlo „Done“ (Hotovo) a pred kliknutím na tlačidlo Next (Ďalej) nejaký vyberte. -'''Success!'''=Hotovo. -'''Linking to your hub was a success! Please click 'Next'!'''=Úspešne sa nadviazalo prepojenie s centrálou. Kliknite na tlačidlo Next (Ďalej). -'''Find bridges'''=Hľadať sieťové mosty -'''Light Discovery Failed!'''=Nepodarilo sa nájsť svetlo. -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nepodarilo sa nájsť žiadne svetlá, skúste to znova neskôr. Kliknutím na tlačidlo Done (Hotovo) to ukončíte. -'''Select Hue Lights to add ({{numFound}} found)'''=Vyberte svetlá Hue, ktoré chcete pridať (nájdené: {{numFound}}) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Predtým pridané svetlá Hue (pridané: {{existingLightsSize}}) -'''Light Discovery Started!'''=Spustilo sa vyhľadávanie svetiel. -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počkajte, kým sa nenájdu svetlá Hue. Vyhľadávanie môže trvať aj päť minút alebo dlhšie, preto sa pokojne posaďte a počkajte. Po nájdení zariadenia ho nižšie vyberte. diff --git a/smartapps/smartthings/hue-connect.src/i18n/sl_SI.properties b/smartapps/smartthings/hue-connect.src/i18n/sl_SI.properties deleted file mode 100644 index 05f1a48..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/sl_SI.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Omogoča povezavo Philips Hue lights (luči) s storitvijo SmartThings in njihovo upravljanje v razdelku Things (Stvari) ali na nadzorni plošči v mobilni aplikaciji SmartThings. Zunaj aplikacije SmartThings z aplikacijo Philips Hue najprej posodobite Hue Bridge (most). -'''Discovery Started!'''=Iskanje se je začelo! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počakajte, da poiščemo vaš Hue Bridge (most). Najprej morate z aplikacijo Philips Hue konfigurirati Hue Bridge (most) in Lights (luči). Iskanje lahko traja pet ali več minut, zato se udobno namestite in sprostite! Ko bo najdena, spodaj izberite svojo napravo. -'''Select Hue Bridge ({{numFound}} found)'''=Izberite Hue Bridge (most) (število najdenih: {{numFound}}) -'''Bridge Discovery Failed!'''=Iskanje mostu ni bilo uspešno! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nobenega Hue Bridge (most) ni bilo mogoče najti. Preverite, ali je Hue Bridge (most) povezan z istim omrežjem kot zvezdišče SmartThings in priključen na napajanje. -'''Linking with your Hue'''=Povezovanje z izdelkom Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Trenutno uporabniško ime Hue ni veljavno. Za vnovično povezavo pritisnite gumb na Hue Bridge (most). -'''Press the button on your Hue Bridge to setup a link.'''=Za nastavitev povezave pritisnite gumb na Hue Bridge (most). -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Hue Bridge (most) niste izbrali. Pritisnite »Done« (Končano) in izberite most, preden kliknete Next (Naprej). -'''Success!'''=Uspeh! -'''Linking to your hub was a success! Please click 'Next'!'''=Povezava z zvezdiščem je bila uspešna! Kliknite »Next« (Naprej)! -'''Find bridges'''=Poišči mostove -'''Light Discovery Failed!'''=Iskanje luči ni bilo uspešno! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nobene luči ni bilo mogoče najti, poskusite znova pozneje. Kliknite »Done« (Končano) za izhod. -'''Select Hue Lights to add ({{numFound}} found)'''=Izberite Hue Lights (luči), da jih dodate (število najdenih: {{numFound}}) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Predhodno dodane Hue Lights (luči) (dodano: {{existingLightsSize}}) -'''Light Discovery Started!'''=Iskanje luči se je začelo! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Počakajte, da poiščemo vaše Hue Lights (luči). Iskanje lahko traja pet ali več minut, zato se udobno namestite in sprostite! Ko bo najdena, spodaj izberite svojo napravo. diff --git a/smartapps/smartthings/hue-connect.src/i18n/sq_AL.properties b/smartapps/smartthings/hue-connect.src/i18n/sq_AL.properties deleted file mode 100644 index 499dde3..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/sq_AL.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Të lejon të lidhësh (dritat) Philips Hue lights me SmartThings dhe t’i kontrollosh që nga zona jote Things ose Paneli i drejtimit në App-in celular SmartThings. Përditëso (urën) Hue Bridge më parë, jashtë app-it SmartThings, me anë të app-it Philips Hue. -'''Discovery Started!'''=Zbulimi filloi! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Prit pak sa të zbulojmë (urën) Hue Bridge. Mbaj parasysh se më parë duhet të konfigurosh (urën) Hue Bridge dhe Lights (dritat) me anë të aplikacionit Philips Hue. Zbulimi mund të kërkojë pesë minuta ose më shumë, prandaj bëj pak durim! Pasi të mbarojë zbulimi, përzgjidhe pajisjen tënde më poshtë. -'''Select Hue Bridge ({{numFound}} found)'''=Përzgjidh (urën) Hue Bridge ({{numFound}} u gjetën) -'''Bridge Discovery Failed!'''=Zbulimi i Bridge (urës) dështoi! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Dështova të zbuloj ndonjë (urë) Hue Bridge. Konfirmo që (ura) Hue Bridge është e lidhur me të njëjtin rrjet si Qendra SmartThings, dhe se ka energji. -'''Linking with your Hue'''=Për t’u lidhur me Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Emri i përdoruesit i tanishëm për Hue është i pavlefshëm. Shtyp butonin në (urën) Hue Bridge për t’u rilidhur. -'''Press the button on your Hue Bridge to setup a link.'''=Shtyp butonin në (urën) Hue Bridge për të konfiguruar lidhjen. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Nuk ke përzgjedhur ndonjë (urë) Hue Bridge, shtyp 'Done' (U krye) dhe përzgjidh një, para se të klikosh mbi Next (Tjetri). -'''Success!'''=Sukses! -'''Linking to your hub was a success! Please click 'Next'!'''=Lidhja me qendrën doli me sukses! Kliko mbi ‘Next’ (Tjetri)! -'''Find bridges'''=Gjej ura -'''Light Discovery Failed!'''=Zbulimi i dritës dështoi! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Dështova të zbuloj drita, provo sërish më vonë. Kliko mbi Done (U krye) për të dalë. -'''Select Hue Lights to add ({{numFound}} found)'''=Përzgjidh (dritat) Hue Lights për të shtuar ({{numFound}} u gjetën) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=(Dritat) Hue Lights të shtuara më parë ({{existingLightsSize}} u shtuan) -'''Light Discovery Started!'''=Zbulimi i dritave filloi! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Prit pak sa të zbulojmë (dritat) Hue Lights. Zbulimi mund të kërkojë pesë minuta ose më shumë, prandaj bëj pak durim! Pasi të mbarojë zbulimi, përzgjidhe pajisjen tënde më poshtë. diff --git a/smartapps/smartthings/hue-connect.src/i18n/sr_RS.properties b/smartapps/smartthings/hue-connect.src/i18n/sr_RS.properties deleted file mode 100644 index 033dbb0..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/sr_RS.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Omogućava vam da povežete Philips Hue svetla i SmartThings i da ih kontrolišete iz oblasti Things area (Oblast za stvari) ili sa Dashboard (Komandna tabla) u aplikaciji SmartThings Mobile. Prvo ažurirajte Hue Bridge, izvan aplikacije SmartThings, koristeći aplikaciju Philips Hue. -'''Discovery Started!'''=Otkrivanje je pokrenuto! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Sačekajte da otkrijemo uređaj Hue Bridge. Imajte na umu da prvo morate da konfigurišete Hue Bridge (Hue most) i Hue Lights (Hue svetla) koristeći aplikaciju Philips Hue. Otkrivanje može da traje pet minuta ili duže i zato sedite i opustite se! Izaberite uređaj u nastavku kada bude otkriven. -'''Select Hue Bridge ({{numFound}} found)'''=Izaberite Hue Bridge ({{numFound}} pronađeno) -'''Bridge Discovery Failed!'''=Otkrivanje uređaja Bridge nije uspelo! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Nije otkriven nijedan Hue Bridge uređaj. Potvrdite da je uređaj Hue Bridge povezan na istu mrežu kao i SmartThings Hub i da je uključen. -'''Linking with your Hue'''=Povezivanje sa uređajem Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Trenutno korisničko ime za Hue je nevažeće. Pritisnite dugme na uređaju Hue Bridge da biste se ponovo povezali. -'''Press the button on your Hue Bridge to setup a link.'''=Pritisnite dugme na uređaju Hue Bridge da biste konfigurisali link. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Niste izabrali uređaj Hue Bridge, pritisnite „Done“ (Gotovo) i izaberite jedan pre nego što kliknete na sledeće. -'''Success!'''=Uspeh! -'''Linking to your hub was a success! Please click 'Next'!'''=Povezivanje na čvorište je bilo uspešno! Kliknite na „Next“ (Sledeće)! -'''Find bridges'''=Pronađi mostove -'''Light Discovery Failed!'''=Otkrivanje svetla nije uspelo! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Nije otkriveno nijedno svetlo, pokušajte ponovo kasnije. Kliknite na Done (Gotovo) radi izlaska. -'''Select Hue Lights to add ({{numFound}} found)'''=Izaberite svetla Hue Lights radi dodavanja (pronađeno: {{numFound}}) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Prethodno dodata svetla Hue Lights (dodato: {{existingLightsSize}}) -'''Light Discovery Started!'''=Otkrivanje svetla je pokrenuto! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Sačekajte da otkrijemo svetla Hue Lights. Otkrivanje može da traje pet minuta ili duže i zato sedite i opustite se! Izaberite uređaj u nastavku kada bude otkriven. diff --git a/smartapps/smartthings/hue-connect.src/i18n/sv_SE.properties b/smartapps/smartthings/hue-connect.src/i18n/sv_SE.properties deleted file mode 100644 index e98192b..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/sv_SE.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Gör att du kan ansluta dina Philips Hue-lampor till SmartThings och styra dem från området Things (Saker) eller Dashboard (Instrumentpanelen) i programmet SmartThings Mobile. Uppdatera Hue-bryggan först, utanför programmet SmartThings, med programmet Philips Hue. -'''Discovery Started!'''=Identifieringen har startat! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vänta medan vi identifierar din Hue-brygga. Observera att du först måste konfigurera Hue-bryggan och lamporna med programmet Philips Hue. Identifieringen kan ta fem minuter eller mer, så ta det bara lugnt! Välj enheten nedan när den har identifierats. -'''Select Hue Bridge ({{numFound}} found)'''=Välj Hue-brygga ({{numFound}} hittades) -'''Bridge Discovery Failed!'''=Bryggidentifieringen misslyckades! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Det gick inte att identifiera några Hue-bryggor. Bekräfta att Hue-bryggan är ansluten till samma nätverk som SmartThings-hubben och att den är på. -'''Linking with your Hue'''=Länka till din Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Det nuvarande Hue-användarnamnet är ogiltigt. Tryck på knappen på Hue-bryggan för att göra om länkningen. -'''Press the button on your Hue Bridge to setup a link.'''=Tryck på knappen på Hue-bryggan för att konfigurera en länk. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Du har inte valt någon Hue-brygga. Tryck på ”Done” (Klart) och välj en innan du klickar på Next (Nästa). -'''Success!'''=Det lyckades! -'''Linking to your hub was a success! Please click 'Next'!'''=Det gick att länka till hubben! Klicka på Next (Nästa). -'''Find bridges'''=Hitta bryggor -'''Light Discovery Failed!'''=Lampidentifieringen misslyckades! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Det gick inte att identifiera några lampor. Försök igen senare. Avsluta genom att klicka på Done (Klart). -'''Select Hue Lights to add ({{numFound}} found)'''=Välj Hue-lampor att lägga till ({{numFound}} hittades) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Tidigare tillagda Hue-lampor ({{existingLightsSize}} tillagda) -'''Light Discovery Started!'''=Lampidentifieringen har startat! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Vänta medan vi identifierar dina Hue-lampor. Identifieringen kan ta fem minuter eller mer, så ta det bara lugnt! Välj enheten nedan när den har identifierats. diff --git a/smartapps/smartthings/hue-connect.src/i18n/th_TH.properties b/smartapps/smartthings/hue-connect.src/i18n/th_TH.properties deleted file mode 100644 index 281e714..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/th_TH.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=ช่วยให้คุณเชื่อมต่อไฟ Philips Hue ของคุณกับ SmartThings และทำการควบคุมไฟได้จากพื้นที่ Things หรือแดชบอร์ดของคุณในแอพมือถือ SmartThings โปรดอัพเดท Hue Bridge ของคุณก่อน ที่ด้านนอกแอพ SmartThings โดยใช้แอพ Philips Hue -'''Discovery Started!'''=การค้นหาเริ่มต้นแล้ว -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=โปรดรอขณะเราค้นหา Hue Bridge ของคุณ ให้ทราบว่าคุณจะต้องกำหนดค่า Hue Bridge และไฟโดยใช้แอพพลิเคชั่น Phillips Hue ซึ่งขั้นตอนการค้นหาอาจใช้เวลาห้านาทีหรือมากกว่านั้น คุณสามารถนั่งรอได้โดยไม่ต้องกังวลใจ เลือกอุปกรณ์ของคุณที่ด้านล่างเมื่อถูกค้นพบ -'''Select Hue Bridge ({{numFound}} found)'''=เลือก Hue Bridge (พบ {{numFound}}) -'''Bridge Discovery Failed!'''=การค้นหา Bridge ล้มเหลว! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=ไม่พบ Hue Bridge ใดๆ โปรดยืนยันว่า Hue Bridge เชื่อมต่ออยู่กับเครือข่ายเดียวกันกับ SmartThings Hub ของคุณ และมีไฟเข้าอยู่ -'''Linking with your Hue'''=การเชื่อมโยงกับ Hue ของคุณ -'''The current Hue username is invalid. Please press the button on your Hue Bridge to relink.'''=ชื่อผู้ใช้ Hue ในปัจจุบันไม่ถูกต้อง โปรดกดปุ่มบน Hue Bridge ของคุณ เพื่อทำการเชื่อมโยงใหม่ -'''Press the button on your Hue Bridge to setup a link.'''=กดปุ่มบน Hue Bridge ของคุณเพื่อตั้งค่าลิงก์ -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=คุณยังไม่ได้เลือก Hue Bridge โปรดกด 'เรียบร้อย' และเลือกหนึ่งรายการก่อนคลิก ถัดไป -'''Success!'''=เสร็จสิ้น -'''Linking to your hub was a success! Please click 'Next'!'''=เชื่อมโยงกับ Hub ของคุณสำเร็จแล้ว โปรดคลิก 'ถัดไป' -'''Find bridges'''=พบ Bridge -'''Light Discovery Failed!'''=การค้นหาไฟล้มเหลว -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=ไม่พบไฟใดๆ โปรดลองอีกครั้งในภายหลัง คลิก เรียบร้อย เพื่อออก -'''Select Hue Lights to add ({{numFound}} found)'''=เลือกไฟ Hue เพื่อเพิ่ม (พบ {{numFound}}) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=ไฟ Hue ที่เพิ่มก่อนหน้านี้ ({{existingLightsSize}} ถูกเพิ่ม) -'''Light Discovery Started!'''=การค้นหาไฟเริ่มต้นแล้ว -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=โปรดรอขณะเราค้นหาไฟ Hue ของคุณ ขั้นตอนการค้นหาอาจใช้เวลาห้านาทีหรือมากกว่านั้น คุณสามารถนั่งรอได้โดยไม่ต้องกังวลใจ เลือกอุปกรณ์ของคุณที่ด้านล่างเมื่อถูกค้นพบ diff --git a/smartapps/smartthings/hue-connect.src/i18n/tr_TR.properties b/smartapps/smartthings/hue-connect.src/i18n/tr_TR.properties deleted file mode 100644 index eba2abb..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/tr_TR.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=Philips Hue ışıklarınızı SmartThings'e bağlamanıza ve Things alanınız veya SmartThings uygulamasındaki Kontrol Paneli'nden kontrol etmenize olanak tanır. Lütfen önce SmartThings uygulamasının dışında Philips Hue uygulamasını kullanarak Hue Bridge'inizi güncelleyin. -'''Discovery Started!'''=Keşif Başladı! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Hue Bridge'iniz keşfedilirken lütfen bekleyin. Hue Bridge ve Işıkları Philips Hue uygulamasını kullanarak yapılandırabileceğinizi lütfen unutmayın. Keşif beş dakika veya daha uzun sürebilir, biraz arkanıza yaslanıp rahatlayın! Keşfedildikten sonra aşağıda cihazınızı seçin. -'''Select Hue Bridge ({{numFound}} found)'''=Hue Bridge'i seçin ({{numFound}} bulundu) -'''Bridge Discovery Failed!'''=Bridge Keşfi Başarısız Oldu! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=Hiçbir Hue Bridge keşfedilemedi. Lütfen Hue Bridge'in SmartThings Hub'ınızla aynı ağa bağlı olduğunu ve gücünün olduğunu doğrulayın. -'''Linking with your Hue'''=Hue'nuzu bağlama -'''The current Hue username is invalid. Please press the button on your Hue Bridge to relink.'''=Mevcut Hue kullanıcı ismi geçersiz. Yeniden bağlamak için lütfen Hue Bridge'inizin üzerindeki tuşa basın. -'''Press the button on your Hue Bridge to setup a link.'''=Bağlantı kurmak için Hue Bridge'inizin üzerindeki tuşa basın. -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=Hue Bridge seçmediniz. İleri öğesine tıklamadan önce lütfen 'Bitti' öğesine basıp bir tane seçin. -'''Success!'''=Başarılı! -'''Linking to your hub was a success! Please click 'Next'!'''=Hub'ınız başarıyla bağlandı! Lütfen "İleri" öğesine tıklayın! -'''Find bridges'''=Bridge'leri bul -'''Light Discovery Failed!'''=Işık Keşfi Başarısız Oldu! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=Hiçbir ışık keşfedilemedi. Lütfen daha sonra tekrar deneyin. Çıkmak için Bitti öğesine tıklayın. -'''Select Hue Lights to add ({{numFound}} found)'''=Eklemek için Hue Işıklarını seçin ({{numFound}} bulundu) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=Önceden eklenen Hue Işıkları ({{existingLightsSize}} eklendi) -'''Light Discovery Started!'''=Işık Keşfi Başladı! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=Hue Işıklarınız keşfedilirken lütfen bekleyin. Keşif beş dakika veya daha uzun sürebilir, biraz arkanıza yaslanıp rahatlayın! Keşfedildikten sonra aşağıda cihazınızı seçin. diff --git a/smartapps/smartthings/hue-connect.src/i18n/zh_CN.properties b/smartapps/smartthings/hue-connect.src/i18n/zh_CN.properties deleted file mode 100644 index 92e7352..0000000 --- a/smartapps/smartthings/hue-connect.src/i18n/zh_CN.properties +++ /dev/null @@ -1,19 +0,0 @@ -'''Allows you to connect your Philips Hue lights with SmartThings and control them from your Things area or Dashboard in the SmartThings Mobile app. Please update your Hue Bridge first, outside of the SmartThings app, using the Philips Hue app.'''=可将 Philips Hue 灯连接到 SmartThings,并从 SmartThings 移动应用程序中的“设备”区域或仪表板控制它们。请首先使用 (SmartThings 应用程序以外的) Philips Hue 应用程序更新您的 Hue 桥接器。 -'''Discovery Started!'''=已开始查找! -'''Please wait while we discover your Hue Bridge. Kindly note that you must first configure your Hue Bridge and Lights using the Philips Hue application. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=我们正在查找您的 Hue 桥接器,请稍候。请注意,首先您必须使用 Philips Hue 应用程序配置 Hue 桥接器。查找过程可能需要五分钟或更长时间,请耐心等待!找到之后,请在下方选择您的设备。 -'''Select Hue Bridge ({{numFound}} found)'''=选择 Hue 桥接器 (找到 {{numFound}} 个) -'''Bridge Discovery Failed!'''=桥接器查找失败! -'''Failed to discover any Hue Bridges. Please confirm that the Hue Bridge is connected to the same network as your SmartThings Hub, and that it has power.'''=未能找到任何 Hue 桥接器。请确认 Hue 桥接器连接到与 SmartThings Hub 相同的网络,并且该桥接器已接通电源。 -'''Linking with your Hue'''=正在连接您的 Hue -'''The current Hue username is invalid. Please press the button on your Hue Bridge to re-link.'''=Hue 当前用户名无效。请按 Hue 桥接器上的按钮重新链接。 -'''Press the button on your Hue Bridge to setup a link.'''=按 Hue 桥接器上的按钮以设置链接。 -'''You haven't selected a Hue Bridge, please Press 'Done' and select one before clicking next.'''=您尚未选择 Hue 桥接器,请按“完成”,选择一个桥接器,然后单击“下一步”。 -'''Success!'''=成功! -'''Linking to your hub was a success! Please click 'Next'!'''=成功链接到您的 Hub!请单击“下一步”! -'''Find bridges'''=查找桥接器 -'''Light Discovery Failed!'''=灯查找失败! -'''Failed to discover any lights, please try again later. Click 'Done' to exit.'''=未能找到任何灯,请稍候重试。单击“完成”以退出。 -'''Select Hue Lights to add ({{numFound}} found)'''=选择 Hue 灯进行添加 (找到 {{numFound}} 个) -'''Previously added Hue Lights ({{existingLightsSize}} added)'''=以前添加的 Hue 灯 (已添加 {{existingLightsSize}} 个) -'''Light Discovery Started!'''=已开始查找灯! -'''Please wait while we discover your Hue Lights. Discovery can take five minutes or more, so sit back and relax! Select your device below once discovered.'''=我们正在查找您的 Hue 灯,请稍候。查找过程可能需要五分钟或更长时间,请耐心等待!找到之后,请在下方选择您的设备。 From 26f9690190b4e412269903642674151284082a11 Mon Sep 17 00:00:00 2001 From: Parijat Das Date: Wed, 15 Mar 2017 15:29:45 -0700 Subject: [PATCH 104/104] Added health-check for First Alert Smoke Detector and Carbon Monoxide Alarm (ZCOMBO) --- .../zwave-smoke-alarm.src/.st-ignore | 2 + .../zwave-smoke-alarm.src/README.md | 40 +++++++++++++++++++ .../zwave-smoke-alarm.groovy | 8 +++- 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 devicetypes/smartthings/zwave-smoke-alarm.src/.st-ignore create mode 100644 devicetypes/smartthings/zwave-smoke-alarm.src/README.md diff --git a/devicetypes/smartthings/zwave-smoke-alarm.src/.st-ignore b/devicetypes/smartthings/zwave-smoke-alarm.src/.st-ignore new file mode 100644 index 0000000..f78b46e --- /dev/null +++ b/devicetypes/smartthings/zwave-smoke-alarm.src/.st-ignore @@ -0,0 +1,2 @@ +.st-ignore +README.md diff --git a/devicetypes/smartthings/zwave-smoke-alarm.src/README.md b/devicetypes/smartthings/zwave-smoke-alarm.src/README.md new file mode 100644 index 0000000..846990c --- /dev/null +++ b/devicetypes/smartthings/zwave-smoke-alarm.src/README.md @@ -0,0 +1,40 @@ +# Z-wave Smoke Alarm + +Cloud Execution + +Works with: + +* [First Alert Smoke Detector and Carbon Monoxide Alarm (ZCOMBO)](https://www.smartthings.com/works-with-smartthings/sensors/first-alert-smoke-detector-and-carbon-monoxide-alarm-zcombo) + +## Table of contents + +* [Capabilities](#capabilities) +* [Health](#device-health) +* [Battery](#battery-specification) +* [Troubleshooting](#troubleshooting) + +## Capabilities + +* **Smoke Detector** - measure smoke and optionally carbon monoxide levels +* **Carbon Monoxide Detector** - measure carbon monoxide levels +* **Sensor** - detects sensor events +* **Battery** - defines device uses a battery +* **Health Check** - indicates ability to get device health notifications + +## Device Health + +First Alert Smoke Detector and Carbon Monoxide Alarm (ZCOMBO) is a Z-wave sleepy device and checks in every 1 hour. +Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*60 + 2)mins = 122 mins. + +* __122min__ checkInterval + +## Battery Specification + +Two AA 1.5V batteries are required. + +## Troubleshooting + +If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. +Pairing needs to be tried again by placing the device closer to the hub. +Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link: +* [First Alert Smoke Detector and Carbon Monoxide Alarm (ZCOMBO) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/201581984-First-Alert-Smoke-Detector-and-Carbon-Monoxide-Alarm-ZCOMBO-) \ No newline at end of file diff --git a/devicetypes/smartthings/zwave-smoke-alarm.src/zwave-smoke-alarm.groovy b/devicetypes/smartthings/zwave-smoke-alarm.src/zwave-smoke-alarm.groovy index aa426e4..f644386 100644 --- a/devicetypes/smartthings/zwave-smoke-alarm.src/zwave-smoke-alarm.groovy +++ b/devicetypes/smartthings/zwave-smoke-alarm.src/zwave-smoke-alarm.groovy @@ -17,10 +17,12 @@ metadata { capability "Carbon Monoxide Detector" capability "Sensor" capability "Battery" + capability "Health Check" attribute "alarmState", "string" fingerprint deviceId: "0xA100", inClusters: "0x20,0x80,0x70,0x85,0x71,0x72,0x86" + fingerprint mfr:"0138", prod:"0001", model:"0002", deviceJoinName: "First Alert Smoke Detector and Carbon Monoxide Alarm (ZCOMBO)" } simulator { @@ -51,6 +53,11 @@ metadata { } } +def updated(){ +// Device checks in every hour, this interval allows us to miss one check-in notification before marking offline + sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID]) +} + def parse(String description) { def results = [] if (description.startsWith("Err")) { @@ -65,7 +72,6 @@ def parse(String description) { return results } - def createSmokeOrCOEvents(name, results) { def text = null switch (name) {