Skip to content

Instantly share code, notes, and snippets.

@jimmyjames
Created March 31, 2015 21:36
Show Gist options
  • Save jimmyjames/39fa29e8ae926435bdc7 to your computer and use it in GitHub Desktop.
Save jimmyjames/39fa29e8ae926435bdc7 to your computer and use it in GitHub Desktop.
hue-minimote.groovy
/**
* 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"()
}
}
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()
}
def handleButton1Held() {
log.debug "handleButton1Held"
hueLamps.off()
tvLights?.off()
otherLights?.off()
}
def handleButton2Pushed() {
log.debug "handleButton2Pushed"
hueLamps.setColor(level: 50, hue: 20, saturation: 80)
tvLights.setColor(level: 30, hue: 70, saturation: 70)
otherLights?.on()
}
def handleButton2Held() {
log.debug "handleButton2Held"
}
def handleButton3Pushed() {
hueLamps.setColor(level: 40, hue: 70, saturation: 70)
tvLights?.setColor(level: 30, hue: 70, saturation: 70)
otherLights?.off()
}
def handleButton3Held() {
log.debug "handleButton3Held"
}
def handleButton4Pushed() {
log.debug "handleButton4Pushed"
hueLamps.setColor(level: 10, hue: 100, saturation: 100)
tvLights?.setColor(level: 10, hue: 100, saturation: 100)
otherLights?.off()
}
def handleButton4Held() {
log.debug "handleButton4Held"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment