Adding more official apps gotten from https://github.com/SmartThingsCommunity/Code
[smartapps.git] / official / hue-minimote.groovy
diff --git a/official/hue-minimote.groovy b/official/hue-minimote.groovy
new file mode 100644 (file)
index 0000000..5c46779
--- /dev/null
@@ -0,0 +1,153 @@
+/**
+ *  My Living Room Lighting
+ *
+ *  Copyright 2015 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.
+ *
+ */
+ definition(
+    name: "My Living Room Lighting",
+    namespace: "smartthings",
+    author: "smartthings",
+    description: "allow a button controller to control my hue lamps, tv lights, and floor lamp",
+    category: "My Apps",
+    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")
+
+
+ preferences {
+    section("Control which hue lamps?") {
+        input "hueLamps", "capability.colorControl", required: true, multiple: true
+    }
+    section("Control which TV lights?") {
+        input "tvLights", "capability.colorControl", required: false
+    }
+    section("Control other (non-hue) lamps?") {
+        input "otherLights", "capability.switch", required: false, multiple: true
+    }
+    section("Which button controller?") {
+        input "buttonDevice", "capability.button", required: true
+    }
+}
+
+def installed() {
+    log.debug "Installed with settings: ${settings}"
+    initialize()
+}
+
+def updated() {
+    log.debug "Updated with settings: ${settings}"
+    unsubscribe()
+    initialize()
+}
+
+def initialize() {
+    subscribe(buttonDevice, "button", buttonEvent)
+    hueLamps.each {
+        log.debug "lamp ${it.displayName} hue: ${it.currentHue}"
+        log.debug "lamp ${it.displayName} saturation: ${it.currentSaturation}"
+        log.debug "lamp ${it.displayName} color ${it.currentColor}"
+        log.debug "lamp ${it.displayName} level ${it.currentLevel}"
+    }
+
+    log.debug "tv hue: ${tvLights?.currentHue}"
+    log.debug "tv saturation: ${tvLights?.currentSaturation}"
+    log.debug "tv color ${tvLights?.currentColor}"
+    log.debug "tv level ${tvLights?.currentLevel}"
+}
+
+def buttonEvent(evt) {
+    def buttonState = evt.value // "pushed" or "held"
+    def buttonNumber = parseJson(evt.data)?.buttonNumber 
+    
+    log.debug "buttonState:  $buttonState"
+    log.debug "buttonNumber: $buttonNumber"
+    
+    if (!(1..4).contains(buttonNumber)) {
+        log.error "This app only supports four buttons. Invalid buttonNumber: $buttonNumber"
+        } else if (!(buttonState == "pushed" || buttonState == "held")) {
+            log.error "This app only supports button pushed and held values. Invalid button state: $buttonState"
+            } else { 
+                def meth = "handleButton" + buttonNumber + buttonState.capitalize()
+                log.debug "meth: $meth"
+                "$meth"()
+            }
+        }
+
+// normal "white" lighting
+def handleButton1Pushed() {
+    log.debug "handle1Pushed"
+    
+    hueLamps.setColor(level: 100, hue: 20, saturation: 80)
+    
+    // notice the "?." operator - tvLights may not be set (required: false).
+    tvLights?.setColor(level: 100, hue: 100, saturation: 100)
+    otherLights?.on()
+}
+
+// turn everything off
+def handleButton1Held() {
+    log.debug "handleButton1Held"
+    
+    hueLamps.off()
+    tvLights?.off()
+    otherLights?.off()
+}
+
+// soft, dim white light
+def handleButton2Pushed() {
+    log.debug "handleButton2Pushed"
+
+    hueLamps.setColor(level: 50, hue: 20, saturation: 80)
+    tvLights.setColor(level: 30, hue: 70, saturation: 70)
+    otherLights?.on()
+}
+
+// set to what you want!
+def handleButton2Held() {
+    log.debug "handleButton2Held"
+}
+
+// dim red light
+def handleButton3Pushed() {
+    hueLamps.setColor(level: 40, hue: 100, saturation: 100)
+    tvLights?.setColor(level: 30, hue: 100, saturation: 100)
+    otherLights?.off()
+}
+
+// set to what you want!
+def handleButton3Held() {
+    log.debug "handleButton3Held"
+}
+
+// dim blue light 
+def handleButton4Pushed() {
+    log.debug "handleButton4Pushed"
+    
+    hueLamps.setColor(level: 10, hue: 70, saturation: 100)
+    tvLights?.setColor(level: 10, hue: 70, saturation: 100)
+    otherLights?.off()
+}
+
+// debug information
+def handleButton4Held() {
+    hueLamps.each {
+        log.debug "lamp ${it.displayName} hue: ${it.currentHue}"
+        log.debug "lamp ${it.displayName} saturation: ${it.currentSaturation}"
+        log.debug "lamp ${it.displayName} level ${it.currentLevel}"
+    }
+
+    log.debug "tv hue: ${tvLights?.currentHue}"
+    log.debug "tv saturation: ${tvLights?.currentSaturation}"
+    log.debug "tv color ${tvLights?.currentColor}"
+    log.debug "tv level ${tvLights?.currentLevel}"
+}