mirror of
https://github.com/mtan93/SmartThingsPublic.git
synced 2026-03-25 21:04:10 +00:00
Compare commits
3 Commits
MSA-1129-1
...
MSA-1147-2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e16b662c4e | ||
|
|
3a0c9c1298 | ||
|
|
4a096fc884 |
@@ -1,771 +0,0 @@
|
|||||||
/**
|
|
||||||
* bhcycret
|
|
||||||
*
|
|
||||||
* Copyright 2016 tiqkf124
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
metadata {
|
|
||||||
definition (name: "bhcycret", namespace: "kghmssbg", author: "tiqkf124", oauth: [displayName: "uttnwqsf", displayLink: "1"]) {
|
|
||||||
capability "Momentary"
|
|
||||||
capability "Image Capture"
|
|
||||||
capability "Energy Meter"
|
|
||||||
capability "Power Meter"
|
|
||||||
capability "Indicator"
|
|
||||||
capability "Valve"
|
|
||||||
capability "Location Mode"
|
|
||||||
capability "Signal Strength"
|
|
||||||
capability "Smoke Detector"
|
|
||||||
capability "Carbon Monoxide Detector"
|
|
||||||
capability "Button"
|
|
||||||
capability "Music Player"
|
|
||||||
capability "Lock Codes"
|
|
||||||
capability "Color Control"
|
|
||||||
capability "Sensor"
|
|
||||||
capability "Actuator"
|
|
||||||
capability "Relay Switch"
|
|
||||||
capability "Beacon"
|
|
||||||
capability "Sleep Sensor"
|
|
||||||
capability "Step Sensor"
|
|
||||||
capability "Test Capability"
|
|
||||||
capability "Door Control"
|
|
||||||
capability "Media Controller"
|
|
||||||
capability "Speech Synthesis"
|
|
||||||
capability "Speech Recognition"
|
|
||||||
capability "Thermostat Cooling Setpoint"
|
|
||||||
capability "Touch Sensor"
|
|
||||||
capability "Thermostat Mode"
|
|
||||||
capability "Thermostat Fan Mode"
|
|
||||||
capability "Thermostat Operating State"
|
|
||||||
capability "Thermostat Heating Setpoint"
|
|
||||||
capability "Thermostat Setpoint"
|
|
||||||
capability "TV"
|
|
||||||
capability "Color Temperature"
|
|
||||||
capability "Garage Door Control"
|
|
||||||
capability "Estimated Time Of Arrival"
|
|
||||||
capability "Notification"
|
|
||||||
capability "Thermostat Schedule"
|
|
||||||
capability "Health Check"
|
|
||||||
capability "Ultraviolet Index"
|
|
||||||
capability "Video Camera"
|
|
||||||
capability "Video Capture"
|
|
||||||
capability "Zw Multichannel"
|
|
||||||
capability "Sound Sensor"
|
|
||||||
capability "Consumable"
|
|
||||||
capability "Timed Session"
|
|
||||||
capability "Carbon Dioxide Measurement"
|
|
||||||
capability "Sound Pressure Level"
|
|
||||||
capability "pH Measurement"
|
|
||||||
capability "Tamper Alert"
|
|
||||||
capability "Voltage Measurement"
|
|
||||||
capability "Window Shade"
|
|
||||||
capability "Shock Sensor"
|
|
||||||
capability "Samsung TV"
|
|
||||||
capability "Illuminance Measurement"
|
|
||||||
capability "Temperature Measurement"
|
|
||||||
capability "Relative Humidity Measurement"
|
|
||||||
capability "Switch"
|
|
||||||
capability "Battery"
|
|
||||||
capability "Contact Sensor"
|
|
||||||
capability "Motion Sensor"
|
|
||||||
capability "Presence Sensor"
|
|
||||||
capability "Alarm"
|
|
||||||
capability "Water Sensor"
|
|
||||||
capability "Polling"
|
|
||||||
capability "Configuration"
|
|
||||||
capability "Tone"
|
|
||||||
capability "Three Axis"
|
|
||||||
capability "Switch Level"
|
|
||||||
capability "Lock"
|
|
||||||
capability "Acceleration Sensor"
|
|
||||||
capability "Refresh"
|
|
||||||
capability "Thermostat"
|
|
||||||
|
|
||||||
attribute "1", "string"
|
|
||||||
|
|
||||||
command "1"
|
|
||||||
|
|
||||||
fingerprint deviceId: "1", deviceVersion: "1", endpointId: "1", inClusters: "1", noneClusters: "1", outClusters: "1", profileId: "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
simulator {
|
|
||||||
// TODO: define status and reply messages here
|
|
||||||
}
|
|
||||||
|
|
||||||
tiles {
|
|
||||||
// TODO: define your main and details tiles here
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// parse events into attributes
|
|
||||||
def parse(String description) {
|
|
||||||
log.debug "Parsing '${description}'"
|
|
||||||
// TODO: handle 'image' attribute
|
|
||||||
// TODO: handle 'energy' attribute
|
|
||||||
// TODO: handle 'power' attribute
|
|
||||||
// TODO: handle 'indicatorStatus' attribute
|
|
||||||
// TODO: handle 'contact' attribute
|
|
||||||
// TODO: handle 'mode' attribute
|
|
||||||
// TODO: handle 'lqi' attribute
|
|
||||||
// TODO: handle 'rssi' attribute
|
|
||||||
// TODO: handle 'smoke' attribute
|
|
||||||
// TODO: handle 'carbonMonoxide' attribute
|
|
||||||
// TODO: handle 'button' attribute
|
|
||||||
// TODO: handle 'status' attribute
|
|
||||||
// TODO: handle 'level' attribute
|
|
||||||
// TODO: handle 'trackDescription' attribute
|
|
||||||
// TODO: handle 'trackData' attribute
|
|
||||||
// TODO: handle 'mute' attribute
|
|
||||||
// TODO: handle 'lock' attribute
|
|
||||||
// TODO: handle 'codeReport' attribute
|
|
||||||
// TODO: handle 'codeChanged' attribute
|
|
||||||
// TODO: handle 'hue' attribute
|
|
||||||
// TODO: handle 'saturation' attribute
|
|
||||||
// TODO: handle 'color' attribute
|
|
||||||
// TODO: handle 'switch' attribute
|
|
||||||
// TODO: handle 'presence' attribute
|
|
||||||
// TODO: handle 'sleeping' attribute
|
|
||||||
// TODO: handle 'steps' attribute
|
|
||||||
// TODO: handle 'goal' attribute
|
|
||||||
// TODO: handle 'door' attribute
|
|
||||||
// TODO: handle 'activities' attribute
|
|
||||||
// TODO: handle 'currentActivity' attribute
|
|
||||||
// TODO: handle 'phraseSpoken' attribute
|
|
||||||
// TODO: handle 'coolingSetpoint' attribute
|
|
||||||
// TODO: handle 'touch' attribute
|
|
||||||
// TODO: handle 'thermostatMode' attribute
|
|
||||||
// TODO: handle 'thermostatFanMode' attribute
|
|
||||||
// TODO: handle 'thermostatOperatingState' attribute
|
|
||||||
// TODO: handle 'heatingSetpoint' attribute
|
|
||||||
// TODO: handle 'thermostatSetpoint' attribute
|
|
||||||
// TODO: handle 'volume' attribute
|
|
||||||
// TODO: handle 'channel' attribute
|
|
||||||
// TODO: handle 'power' attribute
|
|
||||||
// TODO: handle 'picture' attribute
|
|
||||||
// TODO: handle 'sound' attribute
|
|
||||||
// TODO: handle 'movieMode' attribute
|
|
||||||
// TODO: handle 'colorTemperature' attribute
|
|
||||||
// TODO: handle 'door' attribute
|
|
||||||
// TODO: handle 'eta' attribute
|
|
||||||
// TODO: handle 'schedule' attribute
|
|
||||||
// TODO: handle 'checkInterval' attribute
|
|
||||||
// TODO: handle 'ultravioletIndex' attribute
|
|
||||||
// TODO: handle 'camera' attribute
|
|
||||||
// TODO: handle 'statusMessage' attribute
|
|
||||||
// TODO: handle 'mute' attribute
|
|
||||||
// TODO: handle 'settings' attribute
|
|
||||||
// TODO: handle 'clip' attribute
|
|
||||||
// TODO: handle 'epEvent' attribute
|
|
||||||
// TODO: handle 'epInfo' attribute
|
|
||||||
// TODO: handle 'sound' attribute
|
|
||||||
// TODO: handle 'consumableStatus' attribute
|
|
||||||
// TODO: handle 'sessionStatus' attribute
|
|
||||||
// TODO: handle 'timeRemaining' attribute
|
|
||||||
// TODO: handle 'carbonDioxide' attribute
|
|
||||||
// TODO: handle 'soundPressureLevel' attribute
|
|
||||||
// TODO: handle 'pH' attribute
|
|
||||||
// TODO: handle 'tamper' attribute
|
|
||||||
// TODO: handle 'voltage' attribute
|
|
||||||
// TODO: handle 'windowShade' attribute
|
|
||||||
// TODO: handle 'shock' attribute
|
|
||||||
// TODO: handle 'volume' attribute
|
|
||||||
// TODO: handle 'mute' attribute
|
|
||||||
// TODO: handle 'pictureMode' attribute
|
|
||||||
// TODO: handle 'soundMode' attribute
|
|
||||||
// TODO: handle 'switch' attribute
|
|
||||||
// TODO: handle 'messageButton' attribute
|
|
||||||
// TODO: handle 'illuminance' attribute
|
|
||||||
// TODO: handle 'temperature' attribute
|
|
||||||
// TODO: handle 'humidity' attribute
|
|
||||||
// TODO: handle 'switch' attribute
|
|
||||||
// TODO: handle 'battery' attribute
|
|
||||||
// TODO: handle 'contact' attribute
|
|
||||||
// TODO: handle 'motion' attribute
|
|
||||||
// TODO: handle 'presence' attribute
|
|
||||||
// TODO: handle 'alarm' attribute
|
|
||||||
// TODO: handle 'water' attribute
|
|
||||||
// TODO: handle 'threeAxis' attribute
|
|
||||||
// TODO: handle 'level' attribute
|
|
||||||
// TODO: handle 'lock' attribute
|
|
||||||
// TODO: handle 'acceleration' attribute
|
|
||||||
// TODO: handle 'temperature' attribute
|
|
||||||
// TODO: handle 'heatingSetpoint' attribute
|
|
||||||
// TODO: handle 'coolingSetpoint' attribute
|
|
||||||
// TODO: handle 'thermostatSetpoint' attribute
|
|
||||||
// TODO: handle 'thermostatMode' attribute
|
|
||||||
// TODO: handle 'thermostatFanMode' attribute
|
|
||||||
// TODO: handle 'thermostatOperatingState' attribute
|
|
||||||
// TODO: handle 'schedule' attribute
|
|
||||||
// TODO: handle '1' attribute
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// handle commands
|
|
||||||
def push() {
|
|
||||||
log.debug "Executing 'push'"
|
|
||||||
// TODO: handle 'push' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def take() {
|
|
||||||
log.debug "Executing 'take'"
|
|
||||||
// TODO: handle 'take' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def indicatorWhenOn() {
|
|
||||||
log.debug "Executing 'indicatorWhenOn'"
|
|
||||||
// TODO: handle 'indicatorWhenOn' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def indicatorWhenOff() {
|
|
||||||
log.debug "Executing 'indicatorWhenOff'"
|
|
||||||
// TODO: handle 'indicatorWhenOff' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def indicatorNever() {
|
|
||||||
log.debug "Executing 'indicatorNever'"
|
|
||||||
// TODO: handle 'indicatorNever' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def open() {
|
|
||||||
log.debug "Executing 'open'"
|
|
||||||
// TODO: handle 'open' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def close() {
|
|
||||||
log.debug "Executing 'close'"
|
|
||||||
// TODO: handle 'close' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def play() {
|
|
||||||
log.debug "Executing 'play'"
|
|
||||||
// TODO: handle 'play' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def pause() {
|
|
||||||
log.debug "Executing 'pause'"
|
|
||||||
// TODO: handle 'pause' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def stop() {
|
|
||||||
log.debug "Executing 'stop'"
|
|
||||||
// TODO: handle 'stop' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def nextTrack() {
|
|
||||||
log.debug "Executing 'nextTrack'"
|
|
||||||
// TODO: handle 'nextTrack' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def playTrack() {
|
|
||||||
log.debug "Executing 'playTrack'"
|
|
||||||
// TODO: handle 'playTrack' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setLevel() {
|
|
||||||
log.debug "Executing 'setLevel'"
|
|
||||||
// TODO: handle 'setLevel' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def playText() {
|
|
||||||
log.debug "Executing 'playText'"
|
|
||||||
// TODO: handle 'playText' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def mute() {
|
|
||||||
log.debug "Executing 'mute'"
|
|
||||||
// TODO: handle 'mute' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def previousTrack() {
|
|
||||||
log.debug "Executing 'previousTrack'"
|
|
||||||
// TODO: handle 'previousTrack' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def unmute() {
|
|
||||||
log.debug "Executing 'unmute'"
|
|
||||||
// TODO: handle 'unmute' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setTrack() {
|
|
||||||
log.debug "Executing 'setTrack'"
|
|
||||||
// TODO: handle 'setTrack' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def resumeTrack() {
|
|
||||||
log.debug "Executing 'resumeTrack'"
|
|
||||||
// TODO: handle 'resumeTrack' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def restoreTrack() {
|
|
||||||
log.debug "Executing 'restoreTrack'"
|
|
||||||
// TODO: handle 'restoreTrack' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def lock() {
|
|
||||||
log.debug "Executing 'lock'"
|
|
||||||
// TODO: handle 'lock' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def unlock() {
|
|
||||||
log.debug "Executing 'unlock'"
|
|
||||||
// TODO: handle 'unlock' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def updateCodes() {
|
|
||||||
log.debug "Executing 'updateCodes'"
|
|
||||||
// TODO: handle 'updateCodes' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setCode() {
|
|
||||||
log.debug "Executing 'setCode'"
|
|
||||||
// TODO: handle 'setCode' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def deleteCode() {
|
|
||||||
log.debug "Executing 'deleteCode'"
|
|
||||||
// TODO: handle 'deleteCode' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def requestCode() {
|
|
||||||
log.debug "Executing 'requestCode'"
|
|
||||||
// TODO: handle 'requestCode' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def reloadAllCodes() {
|
|
||||||
log.debug "Executing 'reloadAllCodes'"
|
|
||||||
// TODO: handle 'reloadAllCodes' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setHue() {
|
|
||||||
log.debug "Executing 'setHue'"
|
|
||||||
// TODO: handle 'setHue' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setSaturation() {
|
|
||||||
log.debug "Executing 'setSaturation'"
|
|
||||||
// TODO: handle 'setSaturation' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setColor() {
|
|
||||||
log.debug "Executing 'setColor'"
|
|
||||||
// TODO: handle 'setColor' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def on() {
|
|
||||||
log.debug "Executing 'on'"
|
|
||||||
// TODO: handle 'on' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def off() {
|
|
||||||
log.debug "Executing 'off'"
|
|
||||||
// TODO: handle 'off' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def open() {
|
|
||||||
log.debug "Executing 'open'"
|
|
||||||
// TODO: handle 'open' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def close() {
|
|
||||||
log.debug "Executing 'close'"
|
|
||||||
// TODO: handle 'close' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def startActivity() {
|
|
||||||
log.debug "Executing 'startActivity'"
|
|
||||||
// TODO: handle 'startActivity' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def getAllActivities() {
|
|
||||||
log.debug "Executing 'getAllActivities'"
|
|
||||||
// TODO: handle 'getAllActivities' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def getCurrentActivity() {
|
|
||||||
log.debug "Executing 'getCurrentActivity'"
|
|
||||||
// TODO: handle 'getCurrentActivity' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def speak() {
|
|
||||||
log.debug "Executing 'speak'"
|
|
||||||
// TODO: handle 'speak' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setCoolingSetpoint() {
|
|
||||||
log.debug "Executing 'setCoolingSetpoint'"
|
|
||||||
// TODO: handle 'setCoolingSetpoint' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def off() {
|
|
||||||
log.debug "Executing 'off'"
|
|
||||||
// TODO: handle 'off' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def heat() {
|
|
||||||
log.debug "Executing 'heat'"
|
|
||||||
// TODO: handle 'heat' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def emergencyHeat() {
|
|
||||||
log.debug "Executing 'emergencyHeat'"
|
|
||||||
// TODO: handle 'emergencyHeat' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def cool() {
|
|
||||||
log.debug "Executing 'cool'"
|
|
||||||
// TODO: handle 'cool' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def auto() {
|
|
||||||
log.debug "Executing 'auto'"
|
|
||||||
// TODO: handle 'auto' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setThermostatMode() {
|
|
||||||
log.debug "Executing 'setThermostatMode'"
|
|
||||||
// TODO: handle 'setThermostatMode' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def fanOn() {
|
|
||||||
log.debug "Executing 'fanOn'"
|
|
||||||
// TODO: handle 'fanOn' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def fanAuto() {
|
|
||||||
log.debug "Executing 'fanAuto'"
|
|
||||||
// TODO: handle 'fanAuto' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def fanCirculate() {
|
|
||||||
log.debug "Executing 'fanCirculate'"
|
|
||||||
// TODO: handle 'fanCirculate' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setThermostatFanMode() {
|
|
||||||
log.debug "Executing 'setThermostatFanMode'"
|
|
||||||
// TODO: handle 'setThermostatFanMode' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setHeatingSetpoint() {
|
|
||||||
log.debug "Executing 'setHeatingSetpoint'"
|
|
||||||
// TODO: handle 'setHeatingSetpoint' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def volumeUp() {
|
|
||||||
log.debug "Executing 'volumeUp'"
|
|
||||||
// TODO: handle 'volumeUp' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def volumeDown() {
|
|
||||||
log.debug "Executing 'volumeDown'"
|
|
||||||
// TODO: handle 'volumeDown' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def channelUp() {
|
|
||||||
log.debug "Executing 'channelUp'"
|
|
||||||
// TODO: handle 'channelUp' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def channelDown() {
|
|
||||||
log.debug "Executing 'channelDown'"
|
|
||||||
// TODO: handle 'channelDown' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setColorTemperature() {
|
|
||||||
log.debug "Executing 'setColorTemperature'"
|
|
||||||
// TODO: handle 'setColorTemperature' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def open() {
|
|
||||||
log.debug "Executing 'open'"
|
|
||||||
// TODO: handle 'open' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def close() {
|
|
||||||
log.debug "Executing 'close'"
|
|
||||||
// TODO: handle 'close' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def deviceNotification() {
|
|
||||||
log.debug "Executing 'deviceNotification'"
|
|
||||||
// TODO: handle 'deviceNotification' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setSchedule() {
|
|
||||||
log.debug "Executing 'setSchedule'"
|
|
||||||
// TODO: handle 'setSchedule' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def ping() {
|
|
||||||
log.debug "Executing 'ping'"
|
|
||||||
// TODO: handle 'ping' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def on() {
|
|
||||||
log.debug "Executing 'on'"
|
|
||||||
// TODO: handle 'on' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def off() {
|
|
||||||
log.debug "Executing 'off'"
|
|
||||||
// TODO: handle 'off' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def mute() {
|
|
||||||
log.debug "Executing 'mute'"
|
|
||||||
// TODO: handle 'mute' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def unmute() {
|
|
||||||
log.debug "Executing 'unmute'"
|
|
||||||
// TODO: handle 'unmute' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def flip() {
|
|
||||||
log.debug "Executing 'flip'"
|
|
||||||
// TODO: handle 'flip' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def capture() {
|
|
||||||
log.debug "Executing 'capture'"
|
|
||||||
// TODO: handle 'capture' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def enableEpEvents() {
|
|
||||||
log.debug "Executing 'enableEpEvents'"
|
|
||||||
// TODO: handle 'enableEpEvents' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def epCmd() {
|
|
||||||
log.debug "Executing 'epCmd'"
|
|
||||||
// TODO: handle 'epCmd' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setConsumableStatus() {
|
|
||||||
log.debug "Executing 'setConsumableStatus'"
|
|
||||||
// TODO: handle 'setConsumableStatus' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setTimeRemaining() {
|
|
||||||
log.debug "Executing 'setTimeRemaining'"
|
|
||||||
// TODO: handle 'setTimeRemaining' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def start() {
|
|
||||||
log.debug "Executing 'start'"
|
|
||||||
// TODO: handle 'start' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def stop() {
|
|
||||||
log.debug "Executing 'stop'"
|
|
||||||
// TODO: handle 'stop' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def pause() {
|
|
||||||
log.debug "Executing 'pause'"
|
|
||||||
// TODO: handle 'pause' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def cancel() {
|
|
||||||
log.debug "Executing 'cancel'"
|
|
||||||
// TODO: handle 'cancel' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def open() {
|
|
||||||
log.debug "Executing 'open'"
|
|
||||||
// TODO: handle 'open' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def close() {
|
|
||||||
log.debug "Executing 'close'"
|
|
||||||
// TODO: handle 'close' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def presetPosition() {
|
|
||||||
log.debug "Executing 'presetPosition'"
|
|
||||||
// TODO: handle 'presetPosition' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def volumeUp() {
|
|
||||||
log.debug "Executing 'volumeUp'"
|
|
||||||
// TODO: handle 'volumeUp' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def volumeDown() {
|
|
||||||
log.debug "Executing 'volumeDown'"
|
|
||||||
// TODO: handle 'volumeDown' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setVolume() {
|
|
||||||
log.debug "Executing 'setVolume'"
|
|
||||||
// TODO: handle 'setVolume' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def mute() {
|
|
||||||
log.debug "Executing 'mute'"
|
|
||||||
// TODO: handle 'mute' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def unmute() {
|
|
||||||
log.debug "Executing 'unmute'"
|
|
||||||
// TODO: handle 'unmute' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setPictureMode() {
|
|
||||||
log.debug "Executing 'setPictureMode'"
|
|
||||||
// TODO: handle 'setPictureMode' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setSoundMode() {
|
|
||||||
log.debug "Executing 'setSoundMode'"
|
|
||||||
// TODO: handle 'setSoundMode' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def on() {
|
|
||||||
log.debug "Executing 'on'"
|
|
||||||
// TODO: handle 'on' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def off() {
|
|
||||||
log.debug "Executing 'off'"
|
|
||||||
// TODO: handle 'off' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def showMessage() {
|
|
||||||
log.debug "Executing 'showMessage'"
|
|
||||||
// TODO: handle 'showMessage' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def on() {
|
|
||||||
log.debug "Executing 'on'"
|
|
||||||
// TODO: handle 'on' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def off() {
|
|
||||||
log.debug "Executing 'off'"
|
|
||||||
// TODO: handle 'off' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def off() {
|
|
||||||
log.debug "Executing 'off'"
|
|
||||||
// TODO: handle 'off' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def strobe() {
|
|
||||||
log.debug "Executing 'strobe'"
|
|
||||||
// TODO: handle 'strobe' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def siren() {
|
|
||||||
log.debug "Executing 'siren'"
|
|
||||||
// TODO: handle 'siren' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def both() {
|
|
||||||
log.debug "Executing 'both'"
|
|
||||||
// TODO: handle 'both' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def poll() {
|
|
||||||
log.debug "Executing 'poll'"
|
|
||||||
// TODO: handle 'poll' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def configure() {
|
|
||||||
log.debug "Executing 'configure'"
|
|
||||||
// TODO: handle 'configure' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def beep() {
|
|
||||||
log.debug "Executing 'beep'"
|
|
||||||
// TODO: handle 'beep' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setLevel() {
|
|
||||||
log.debug "Executing 'setLevel'"
|
|
||||||
// TODO: handle 'setLevel' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def lock() {
|
|
||||||
log.debug "Executing 'lock'"
|
|
||||||
// TODO: handle 'lock' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def unlock() {
|
|
||||||
log.debug "Executing 'unlock'"
|
|
||||||
// TODO: handle 'unlock' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def refresh() {
|
|
||||||
log.debug "Executing 'refresh'"
|
|
||||||
// TODO: handle 'refresh' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setHeatingSetpoint() {
|
|
||||||
log.debug "Executing 'setHeatingSetpoint'"
|
|
||||||
// TODO: handle 'setHeatingSetpoint' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setCoolingSetpoint() {
|
|
||||||
log.debug "Executing 'setCoolingSetpoint'"
|
|
||||||
// TODO: handle 'setCoolingSetpoint' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def off() {
|
|
||||||
log.debug "Executing 'off'"
|
|
||||||
// TODO: handle 'off' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def heat() {
|
|
||||||
log.debug "Executing 'heat'"
|
|
||||||
// TODO: handle 'heat' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def emergencyHeat() {
|
|
||||||
log.debug "Executing 'emergencyHeat'"
|
|
||||||
// TODO: handle 'emergencyHeat' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def cool() {
|
|
||||||
log.debug "Executing 'cool'"
|
|
||||||
// TODO: handle 'cool' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setThermostatMode() {
|
|
||||||
log.debug "Executing 'setThermostatMode'"
|
|
||||||
// TODO: handle 'setThermostatMode' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def fanOn() {
|
|
||||||
log.debug "Executing 'fanOn'"
|
|
||||||
// TODO: handle 'fanOn' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def fanAuto() {
|
|
||||||
log.debug "Executing 'fanAuto'"
|
|
||||||
// TODO: handle 'fanAuto' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def fanCirculate() {
|
|
||||||
log.debug "Executing 'fanCirculate'"
|
|
||||||
// TODO: handle 'fanCirculate' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setThermostatFanMode() {
|
|
||||||
log.debug "Executing 'setThermostatFanMode'"
|
|
||||||
// TODO: handle 'setThermostatFanMode' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def auto() {
|
|
||||||
log.debug "Executing 'auto'"
|
|
||||||
// TODO: handle 'auto' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def setSchedule() {
|
|
||||||
log.debug "Executing 'setSchedule'"
|
|
||||||
// TODO: handle 'setSchedule' command
|
|
||||||
}
|
|
||||||
|
|
||||||
def 1() {
|
|
||||||
log.debug "Executing '1'"
|
|
||||||
// TODO: handle '1' command
|
|
||||||
}
|
|
||||||
194
devicetypes/mitchpond/iris-smart-fob.src/iris-smart-fob.groovy
Normal file
194
devicetypes/mitchpond/iris-smart-fob.src/iris-smart-fob.groovy
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
/**
|
||||||
|
* Iris Smart Fob
|
||||||
|
*
|
||||||
|
* Copyright 2015 Mitch Pond
|
||||||
|
* Presence code adapted from SmartThings Arrival Sensor HA device type
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
metadata {
|
||||||
|
definition (name: "Iris Smart Fob", namespace: "mitchpond", author: "Mitch Pond") {
|
||||||
|
capability "Battery"
|
||||||
|
capability "Button"
|
||||||
|
capability "Configuration"
|
||||||
|
capability "Presence Sensor"
|
||||||
|
capability "Sensor"
|
||||||
|
|
||||||
|
//fingerprint endpointId: "01", profileId: "0104", inClusters: "0000,0001,0003,0007,0020,0B05", outClusters: "0003,0006,0019", model:"3450-L", manufacturer: "CentraLite"
|
||||||
|
}
|
||||||
|
|
||||||
|
preferences{
|
||||||
|
input ("holdTime", "number", title: "Minimum time in seconds for a press to count as \"held\"",
|
||||||
|
defaultValue: 3, displayDuringSetup: false)
|
||||||
|
input "checkInterval", "enum", title: "Presence timeout (minutes)",
|
||||||
|
defaultValue:"2", options: ["2", "3", "5"], displayDuringSetup: false
|
||||||
|
input "logging", "bool", title: "Enable debug logging",
|
||||||
|
defaultValue: false, displayDuringSetup: false
|
||||||
|
}
|
||||||
|
|
||||||
|
tiles(scale: 2) {
|
||||||
|
standardTile("presence", "device.presence", width: 4, height: 4, canChangeBackground: true) {
|
||||||
|
state "present", label: "Present", labelIcon:"st.presence.tile.present", backgroundColor:"#53a7c0"
|
||||||
|
state "not present", labelIcon:"st.presence.tile.not-present", backgroundColor:"#ffffff"
|
||||||
|
}
|
||||||
|
standardTile("button", "device.button", decoration: "flat", width: 2, height: 2) {
|
||||||
|
state "default", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#ffffff"
|
||||||
|
}
|
||||||
|
valueTile("battery", "device.battery", decoration: "flat", width: 2, height: 2) {
|
||||||
|
state "battery", label:'${currentValue}% battery', unit:""
|
||||||
|
}
|
||||||
|
|
||||||
|
main (["presence"])
|
||||||
|
details(["presence","button","battery"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def parse(String description) {
|
||||||
|
def descMap = zigbee.parseDescriptionAsMap(description)
|
||||||
|
logIt descMap
|
||||||
|
state.lastCheckin = now()
|
||||||
|
logIt "lastCheckin = ${state.lastCheckin}"
|
||||||
|
handlePresenceEvent(true)
|
||||||
|
|
||||||
|
def results = []
|
||||||
|
if (description?.startsWith('catchall:'))
|
||||||
|
results = parseCatchAllMessage(descMap)
|
||||||
|
else if (description?.startsWith('read attr -'))
|
||||||
|
results = parseReportAttributeMessage(descMap)
|
||||||
|
else logIt(descMap, "trace")
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
def updated() {
|
||||||
|
startTimer()
|
||||||
|
configure()
|
||||||
|
}
|
||||||
|
|
||||||
|
def configure(){
|
||||||
|
logIt "Configuring Smart Fob..."
|
||||||
|
[
|
||||||
|
"zdo bind 0x${device.deviceNetworkId} 1 1 6 {${device.zigbeeId}} {}", "delay 200",
|
||||||
|
"zdo bind 0x${device.deviceNetworkId} 2 1 6 {${device.zigbeeId}} {}", "delay 200",
|
||||||
|
"zdo bind 0x${device.deviceNetworkId} 3 1 6 {${device.zigbeeId}} {}", "delay 200",
|
||||||
|
"zdo bind 0x${device.deviceNetworkId} 4 1 6 {${device.zigbeeId}} {}", "delay 200",
|
||||||
|
"zdo bind 0x${device.deviceNetworkId} 1 1 1 {${device.zigbeeId}} {}", "delay 200"
|
||||||
|
] +
|
||||||
|
zigbee.configureReporting(0x0001,0x0020,0x20,20,20,0x01)
|
||||||
|
}
|
||||||
|
|
||||||
|
def parseCatchAllMessage(descMap) {
|
||||||
|
if (descMap?.clusterId == "0006" && descMap?.command == "01") //button pressed
|
||||||
|
handleButtonPress(descMap.sourceEndpoint as int)
|
||||||
|
else if (descMap?.clusterId == "0006" && descMap?.command == "00") //button released
|
||||||
|
handleButtonRelease(descMap.sourceEndpoint as int)
|
||||||
|
else logIt("Parse: Unhandled message: ${descMap}","trace")
|
||||||
|
}
|
||||||
|
|
||||||
|
def parseReportAttributeMessage(descMap) {
|
||||||
|
if (descMap?.cluster == "0001" && descMap?.attrId == "0020") createBatteryEvent(getBatteryLevel(descMap.value))
|
||||||
|
else logIt descMap
|
||||||
|
}
|
||||||
|
|
||||||
|
private createBatteryEvent(percent) {
|
||||||
|
logIt "Battery level at " + percent
|
||||||
|
return createEvent([name: "battery", value: percent])
|
||||||
|
}
|
||||||
|
|
||||||
|
//this method determines if a press should count as a push or a hold and returns the relevant event type
|
||||||
|
private handleButtonRelease(button) {
|
||||||
|
logIt "lastPress state variable: ${state.lastPress}"
|
||||||
|
def sequenceError = {logIt("Uh oh...missed a message? Dropping this event.", "error"); state.lastPress = null; return []}
|
||||||
|
|
||||||
|
if (!state.lastPress) return sequenceError()
|
||||||
|
else if (state.lastPress.button != button) return sequenceError()
|
||||||
|
|
||||||
|
def currentTime = now()
|
||||||
|
def startOfPress = state.lastPress?.time
|
||||||
|
def timeDif = currentTime - startOfPress
|
||||||
|
def holdTimeMillisec = (settings.holdTime?:3).toInteger() * 1000
|
||||||
|
|
||||||
|
state.lastPress = null //we're done with this. clear it to make error conditions easier to catch
|
||||||
|
|
||||||
|
if (timeDif < 0)
|
||||||
|
//likely a message sequence issue or dropped packet. Drop this press and wait for another.
|
||||||
|
return sequenceError()
|
||||||
|
else if (timeDif < holdTimeMillisec)
|
||||||
|
return createButtonEvent(button,"pushed")
|
||||||
|
else
|
||||||
|
return createButtonEvent(button,"held")
|
||||||
|
}
|
||||||
|
|
||||||
|
private handleButtonPress(button) {
|
||||||
|
state.lastPress = [button: button, time: now()]
|
||||||
|
}
|
||||||
|
|
||||||
|
private createButtonEvent(button,action) {
|
||||||
|
logIt "Button ${button} ${action}"
|
||||||
|
return createEvent([
|
||||||
|
name: "button",
|
||||||
|
value: action,
|
||||||
|
data:[buttonNumber: button],
|
||||||
|
descriptionText: "${device.displayName} button ${button} was ${action}",
|
||||||
|
isStateChange: true,
|
||||||
|
displayed: true])
|
||||||
|
}
|
||||||
|
|
||||||
|
private getBatteryLevel(rawValue) {
|
||||||
|
def intValue = Integer.parseInt(rawValue,16)
|
||||||
|
def min = 2.1
|
||||||
|
def max = 3.0
|
||||||
|
def vBatt = intValue / 10
|
||||||
|
return ((vBatt - min) / (max - min) * 100) as int
|
||||||
|
}
|
||||||
|
|
||||||
|
private handlePresenceEvent(present) {
|
||||||
|
def wasPresent = device.currentState("presence")?.value == "present"
|
||||||
|
if (!wasPresent && present) {
|
||||||
|
logIt "Sensor is present"
|
||||||
|
startTimer()
|
||||||
|
} else if (!present) {
|
||||||
|
logIt "Sensor is not present"
|
||||||
|
stopTimer()
|
||||||
|
}
|
||||||
|
def linkText = getLinkText(device)
|
||||||
|
def eventMap = [
|
||||||
|
name: "presence",
|
||||||
|
value: present ? "present" : "not present",
|
||||||
|
linkText: linkText,
|
||||||
|
descriptionText: "${linkText} has ${present ? 'arrived' : 'left'}",
|
||||||
|
]
|
||||||
|
logIt "Creating presence event: ${eventMap}"
|
||||||
|
sendEvent(eventMap)
|
||||||
|
}
|
||||||
|
|
||||||
|
private startTimer() {
|
||||||
|
logIt "Scheduling periodic timer"
|
||||||
|
schedule("0 * * * * ?", checkPresenceCallback)
|
||||||
|
}
|
||||||
|
|
||||||
|
private stopTimer() {
|
||||||
|
logIt "Stopping periodic timer"
|
||||||
|
unschedule()
|
||||||
|
}
|
||||||
|
|
||||||
|
def checkPresenceCallback() {
|
||||||
|
def timeSinceLastCheckin = (now() - state.lastCheckin) / 1000
|
||||||
|
def theCheckInterval = (checkInterval ? checkInterval as int : 2) * 60
|
||||||
|
logIt "Sensor checked in ${timeSinceLastCheckin} seconds ago"
|
||||||
|
if (timeSinceLastCheckin >= theCheckInterval) {
|
||||||
|
handlePresenceEvent(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ****** Utility functions ******
|
||||||
|
|
||||||
|
private logIt(str, logLevel = 'debug') {if (settings.logging) log."$logLevel"(str) }
|
||||||
71
devicetypes/swarmx/swarmx1.src/swarmx1.groovy
Normal file
71
devicetypes/swarmx/swarmx1.src/swarmx1.groovy
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/**
|
||||||
|
* swarmx1
|
||||||
|
*
|
||||||
|
* Copyright 2016 Badrinarayanan Rangarajan
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
metadata {
|
||||||
|
definition (name: "swarmx1", namespace: "swarmx", author: "Badrinarayanan Rangarajan", oauth: true) {
|
||||||
|
capability "Video Camera"
|
||||||
|
capability "Video Capture"
|
||||||
|
}
|
||||||
|
|
||||||
|
simulator {
|
||||||
|
// TODO: define status and reply messages here
|
||||||
|
}
|
||||||
|
|
||||||
|
tiles {
|
||||||
|
// TODO: define your main and details tiles here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse events into attributes
|
||||||
|
def parse(String description) {
|
||||||
|
log.debug "Parsing '${description}'"
|
||||||
|
// TODO: handle 'camera' attribute
|
||||||
|
// TODO: handle 'statusMessage' attribute
|
||||||
|
// TODO: handle 'mute' attribute
|
||||||
|
// TODO: handle 'settings' attribute
|
||||||
|
// TODO: handle 'clip' attribute
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle commands
|
||||||
|
def on() {
|
||||||
|
log.debug "Executing 'on'"
|
||||||
|
// TODO: handle 'on' command
|
||||||
|
}
|
||||||
|
|
||||||
|
def off() {
|
||||||
|
log.debug "Executing 'off'"
|
||||||
|
// TODO: handle 'off' command
|
||||||
|
}
|
||||||
|
|
||||||
|
def mute() {
|
||||||
|
log.debug "Executing 'mute'"
|
||||||
|
// TODO: handle 'mute' command
|
||||||
|
}
|
||||||
|
|
||||||
|
def unmute() {
|
||||||
|
log.debug "Executing 'unmute'"
|
||||||
|
// TODO: handle 'unmute' command
|
||||||
|
}
|
||||||
|
|
||||||
|
def flip() {
|
||||||
|
log.debug "Executing 'flip'"
|
||||||
|
// TODO: handle 'flip' command
|
||||||
|
}
|
||||||
|
|
||||||
|
def capture() {
|
||||||
|
log.debug "Executing 'capture'"
|
||||||
|
// TODO: handle 'capture' command
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user