mirror of
https://github.com/mtan93/SmartThingsPublic.git
synced 2026-03-16 05:10:50 +00:00
Compare commits
19 Commits
PROD_2016.
...
PROD_2016.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
566425c531 | ||
|
|
e7448e7908 | ||
|
|
973c16f088 | ||
|
|
77f880af6e | ||
|
|
1c4386a67b | ||
|
|
88dd510e72 | ||
|
|
e278a3b57d | ||
|
|
7786df3262 | ||
|
|
5ac08e5a92 | ||
|
|
72b51d50bc | ||
|
|
1e27ff5d4a | ||
|
|
c7e8079ff1 | ||
|
|
481d13a571 | ||
|
|
9d83b850ca | ||
|
|
84de336a1a | ||
|
|
8b465b03b4 | ||
|
|
2f81964479 | ||
|
|
327f8dfb00 | ||
|
|
235e3f5507 |
@@ -24,6 +24,7 @@ metadata {
|
|||||||
command "enrollResponse"
|
command "enrollResponse"
|
||||||
|
|
||||||
|
|
||||||
|
fingerprint inClusters: "0000,0001,0003,0500,0020", manufacturer: "NYCE", model: "3010", deviceJoinName: "NYCE Door Hinge Sensor"
|
||||||
fingerprint inClusters: "0000,0001,0003,0406,0500,0020", manufacturer: "NYCE", model: "3011", deviceJoinName: "NYCE Door/Window Sensor"
|
fingerprint inClusters: "0000,0001,0003,0406,0500,0020", manufacturer: "NYCE", model: "3011", deviceJoinName: "NYCE Door/Window Sensor"
|
||||||
fingerprint inClusters: "0000,0001,0003,0500,0020", manufacturer: "NYCE", model: "3011", deviceJoinName: "NYCE Door/Window Sensor"
|
fingerprint inClusters: "0000,0001,0003,0500,0020", manufacturer: "NYCE", model: "3011", deviceJoinName: "NYCE Door/Window Sensor"
|
||||||
fingerprint inClusters: "0000,0001,0003,0406,0500,0020", manufacturer: "NYCE", model: "3014", deviceJoinName: "NYCE Tilt Sensor"
|
fingerprint inClusters: "0000,0001,0003,0406,0500,0020", manufacturer: "NYCE", model: "3014", deviceJoinName: "NYCE Tilt Sensor"
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ metadata {
|
|||||||
capability "Configuration"
|
capability "Configuration"
|
||||||
capability "Refresh"
|
capability "Refresh"
|
||||||
capability "Sensor"
|
capability "Sensor"
|
||||||
|
capability "Health Check"
|
||||||
|
|
||||||
// indicates that device keeps track of heartbeat (in state.heartbeat)
|
// indicates that device keeps track of heartbeat (in state.heartbeat)
|
||||||
attribute "heartbeat", "string"
|
attribute "heartbeat", "string"
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ metadata {
|
|||||||
capability "Refresh"
|
capability "Refresh"
|
||||||
capability "Temperature Measurement"
|
capability "Temperature Measurement"
|
||||||
capability "Water Sensor"
|
capability "Water Sensor"
|
||||||
|
capability "Health Check"
|
||||||
|
|
||||||
command "enrollResponse"
|
command "enrollResponse"
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ metadata {
|
|||||||
capability "Battery"
|
capability "Battery"
|
||||||
capability "Temperature Measurement"
|
capability "Temperature Measurement"
|
||||||
capability "Refresh"
|
capability "Refresh"
|
||||||
|
capability "Health Check"
|
||||||
|
|
||||||
command "enrollResponse"
|
command "enrollResponse"
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ metadata {
|
|||||||
capability "Acceleration Sensor"
|
capability "Acceleration Sensor"
|
||||||
capability "Refresh"
|
capability "Refresh"
|
||||||
capability "Temperature Measurement"
|
capability "Temperature Measurement"
|
||||||
|
capability "Health Check"
|
||||||
|
|
||||||
command "enrollResponse"
|
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: "3320"
|
||||||
|
|||||||
@@ -23,8 +23,9 @@
|
|||||||
capability "Acceleration Sensor"
|
capability "Acceleration Sensor"
|
||||||
capability "Refresh"
|
capability "Refresh"
|
||||||
capability "Temperature Measurement"
|
capability "Temperature Measurement"
|
||||||
command "enrollResponse"
|
capability "Health Check"
|
||||||
|
|
||||||
|
command "enrollResponse"
|
||||||
}
|
}
|
||||||
|
|
||||||
simulator {
|
simulator {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ metadata {
|
|||||||
capability "Refresh"
|
capability "Refresh"
|
||||||
capability "Temperature Measurement"
|
capability "Temperature Measurement"
|
||||||
capability "Relative Humidity Measurement"
|
capability "Relative Humidity Measurement"
|
||||||
|
capability "Health Check"
|
||||||
|
|
||||||
fingerprint endpointId: "01", inClusters: "0001,0003,0020,0402,0B05,FC45", outClusters: "0019,0003"
|
fingerprint endpointId: "01", inClusters: "0001,0003,0020,0402,0B05,FC45", outClusters: "0019,0003"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,19 +80,31 @@ metadata {
|
|||||||
state "default", label:''
|
state "default", label:''
|
||||||
}
|
}
|
||||||
|
|
||||||
main("standard1")
|
// multi-line text (explicit newlines)
|
||||||
|
standardTile("multiLine", "device.multiLine", width: 2, height: 2) {
|
||||||
|
state "default", label: '${currentValue}'
|
||||||
|
}
|
||||||
|
|
||||||
|
standardTile("multiLineWithIcon", "device.multiLine", width: 2, height: 2) {
|
||||||
|
state "default", label: '${currentValue}', icon: "st.switches.switch.off"
|
||||||
|
}
|
||||||
|
|
||||||
|
main("actionRings")
|
||||||
details([
|
details([
|
||||||
"actionRings", "actionFlat", "noActionFlat",
|
"actionRings", "actionFlat", "noActionFlat",
|
||||||
|
|
||||||
"flatLabel", "flatIconLabel", "flatIcon",
|
"flatLabel", "flatIconLabel", "flatIcon",
|
||||||
|
|
||||||
"flatDefaultState", "flatImplicitDefaultState1", "flatImplicitDefaultState2",
|
"flatDefaultState", "flatImplicitDefaultState1", "flatImplicitDefaultState2",
|
||||||
|
|
||||||
|
"multiLine", "multiLineWithIcon"
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def installed() {
|
def installed() {
|
||||||
sendEvent(name: "switch", value: "off")
|
sendEvent(name: "switch", value: "off")
|
||||||
|
sendEvent(name: "multiLine", value: "Line 1\nLine 2\nLine 3")
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse(String description) {
|
def parse(String description) {
|
||||||
|
|||||||
@@ -69,16 +69,25 @@ metadata {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
valueTile("noValue", "device.nada", width: 2, height: 2) {
|
valueTile("noValue", "device.nada", width: 4, height: 2) {
|
||||||
state "default", label:'${currentValue}'
|
state "default", label:'${currentValue}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
valueTile("multiLine", "device.multiLine", width: 3, height: 2) {
|
||||||
|
state "default", label: '${currentValue}'
|
||||||
|
}
|
||||||
|
|
||||||
|
valueTile("multiLineWithIcon", "device.multiLine", width: 3, height: 2) {
|
||||||
|
state "default", label: '${currentValue}', icon: "st.switches.switch.off"
|
||||||
|
}
|
||||||
|
|
||||||
main("text")
|
main("text")
|
||||||
details([
|
details([
|
||||||
"text", "longText", "integer",
|
"text", "longText", "integer",
|
||||||
"integerFloat", "pi", "floatAsText",
|
"integerFloat", "pi", "floatAsText",
|
||||||
"bgColor", "bgColorRange", "bgColorRangeSingleItem",
|
"bgColor", "bgColorRange", "bgColorRangeSingleItem",
|
||||||
"bgColorRangeConflict", "noValue"
|
"bgColorRangeConflict", "noValue",
|
||||||
|
"multiLine", "multiLineWithIcon"
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,6 +99,7 @@ def installed() {
|
|||||||
sendEvent(name: "integerFloat", value: 47.0)
|
sendEvent(name: "integerFloat", value: 47.0)
|
||||||
sendEvent(name: "pi", value: 3.14159)
|
sendEvent(name: "pi", value: 3.14159)
|
||||||
sendEvent(name: "floatAsText", value: "3.14159")
|
sendEvent(name: "floatAsText", value: "3.14159")
|
||||||
|
sendEvent(name: "multiLine", value: "Line 1\nLine 2\nLine 3")
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse(String description) {
|
def parse(String description) {
|
||||||
|
|||||||
@@ -67,14 +67,47 @@ metadata {
|
|||||||
attributeState "VALUE_DOWN", action: "levelDown"
|
attributeState "VALUE_DOWN", action: "levelDown"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
multiAttributeTile(name:"lengthyTile", type:"generic", width:6, height:4) {
|
||||||
|
tileAttribute("device.lengthyText", key: "PRIMARY_CONTROL") {
|
||||||
|
attributeState "default", label:'The value of this tile is long and should wrap to two lines', backgroundColor:"#79b821"
|
||||||
|
}
|
||||||
|
tileAttribute("device.lengthyText", key: "SECONDARY_CONTROL") {
|
||||||
|
attributeState "default", label:'The value of this tile is long and should wrap to two lines', backgroundColor:"#79b821"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
multiAttributeTile(name:"multilineTile", type:"generic", width:6, height:4) {
|
||||||
|
tileAttribute("device.multilineText", key: "PRIMARY_CONTROL") {
|
||||||
|
attributeState "default", label:'Line 1 YES\nLine 2 YES\nLine 3 NO', backgroundColor:"#79b821"
|
||||||
|
}
|
||||||
|
tileAttribute("device.multilineText", key: "SECONDARY_CONTROL") {
|
||||||
|
attributeState "default", label:'Line 1 YES\nLine 2 YES\nLine 3 NO', backgroundColor:"#79b821"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
multiAttributeTile(name:"lengthyTileWithIcon", type:"generic", width:6, height:4) {
|
||||||
|
tileAttribute("device.lengthyText", key: "PRIMARY_CONTROL") {
|
||||||
|
attributeState "default", label:'The value of this tile is long and should wrap to two lines', backgroundColor:"#79b821", icon: "st.switches.switch.on"
|
||||||
|
}
|
||||||
|
tileAttribute("device.lengthyText", key: "SECONDARY_CONTROL") {
|
||||||
|
attributeState "default", label:'The value of this tile is long and should wrap to two lines', backgroundColor:"#79b821", icon: "st.switches.switch.on"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
multiAttributeTile(name:"multilineTileWithIcon", type:"generic", width:6, height:4) {
|
||||||
|
tileAttribute("device.multilineText", key: "PRIMARY_CONTROL") {
|
||||||
|
attributeState "default", label:'Line 1 YES\nLine 2 YES\nLine 3 NO', backgroundColor:"#79b821", icon: "st.switches.switch.on"
|
||||||
|
}
|
||||||
|
tileAttribute("device.multilineText", key: "SECONDARY_CONTROL") {
|
||||||
|
attributeState "default", label:'Line 1 YES\nLine 2 YES\nLine 3 NO', backgroundColor:"#79b821", icon: "st.switches.switch.on"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
main(["basicTile"])
|
main(["basicTile"])
|
||||||
details(["basicTile", "sliderTile", "valueTile"])
|
details(["basicTile", "sliderTile", "valueTile", "lengthyTile", "multilineTile", "lengthyTileWithIcon", "multilineTileWithIcon"])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def installed() {
|
def installed() {
|
||||||
|
sendEvent(name: "lengthyText", value: "The value of this tile is long and should wrap to two lines")
|
||||||
|
sendEvent(name: "multilineText", value: "Line 1 YES\nLine 2 YES\nLine 3 NO")
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse() {
|
def parse() {
|
||||||
|
|||||||
@@ -332,8 +332,7 @@ private addChildBulb(dni, hueType, name, hub, update=false, device = null) {
|
|||||||
|
|
||||||
if (deviceType) {
|
if (deviceType) {
|
||||||
return addChildDevice("smartthings", deviceType, dni, hub, ["label": name])
|
return addChildDevice("smartthings", deviceType, dni, hub, ["label": name])
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
log.warn "Device type $hueType not supported"
|
log.warn "Device type $hueType not supported"
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@@ -349,8 +348,10 @@ def addBulbs() {
|
|||||||
newHueBulb = bulbs.find { (app.id + "/" + it.value.id) == dni }
|
newHueBulb = bulbs.find { (app.id + "/" + it.value.id) == dni }
|
||||||
if (newHueBulb != null) {
|
if (newHueBulb != null) {
|
||||||
d = addChildBulb(dni, newHueBulb?.value?.type, newHueBulb?.value?.name, newHueBulb?.value?.hub)
|
d = addChildBulb(dni, newHueBulb?.value?.type, newHueBulb?.value?.name, newHueBulb?.value?.hub)
|
||||||
log.debug "created ${d.displayName} with id $dni"
|
if (d) {
|
||||||
d.refresh()
|
log.debug "created ${d.displayName} with id $dni"
|
||||||
|
d.refresh()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
log.debug "$dni in not longer paired to the Hue Bridge or ID changed"
|
log.debug "$dni in not longer paired to the Hue Bridge or ID changed"
|
||||||
}
|
}
|
||||||
@@ -358,7 +359,7 @@ def addBulbs() {
|
|||||||
//backwards compatable
|
//backwards compatable
|
||||||
newHueBulb = bulbs.find { (app.id + "/" + it.id) == dni }
|
newHueBulb = bulbs.find { (app.id + "/" + it.id) == dni }
|
||||||
d = addChildBulb(dni, "Extended Color Light", newHueBulb?.value?.name, newHueBulb?.value?.hub)
|
d = addChildBulb(dni, "Extended Color Light", newHueBulb?.value?.name, newHueBulb?.value?.hub)
|
||||||
d.refresh()
|
d?.refresh()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.debug "found ${d.displayName} with id $dni already exists, type: '$d.typeName'"
|
log.debug "found ${d.displayName} with id $dni already exists, type: '$d.typeName'"
|
||||||
@@ -824,7 +825,7 @@ def setColor(childDevice, huesettings) {
|
|||||||
value.bri = Math.min(Math.round(huesettings.level * 255 / 100), 255)
|
value.bri = Math.min(Math.round(huesettings.level * 255 / 100), 255)
|
||||||
}
|
}
|
||||||
value.alert = huesettings.alert ? huesettings.alert : "none"
|
value.alert = huesettings.alert ? huesettings.alert : "none"
|
||||||
value.transition = huesettings.transition ? huesettings.transition : 4
|
value.transitiontime = huesettings.transitiontime ? huesettings.transitiontime : 4
|
||||||
|
|
||||||
// Make sure to turn off light if requested
|
// Make sure to turn off light if requested
|
||||||
if (huesettings.switch == "off")
|
if (huesettings.switch == "off")
|
||||||
|
|||||||
@@ -236,23 +236,22 @@ def addSwitches() {
|
|||||||
d = getChildDevices()?.find {
|
d = getChildDevices()?.find {
|
||||||
it.deviceNetworkId == selectedSwitch.value.mac || it.device.getDataValue("mac") == selectedSwitch.value.mac
|
it.deviceNetworkId == selectedSwitch.value.mac || it.device.getDataValue("mac") == selectedSwitch.value.mac
|
||||||
}
|
}
|
||||||
}
|
if (!d) {
|
||||||
|
log.debug "Creating WeMo Switch with dni: ${selectedSwitch.value.mac}"
|
||||||
if (!d) {
|
d = addChildDevice("smartthings", "Wemo Switch", selectedSwitch.value.mac, selectedSwitch?.value.hub, [
|
||||||
log.debug "Creating WeMo Switch with dni: ${selectedSwitch.value.mac}"
|
"label": selectedSwitch?.value?.name ?: "Wemo Switch",
|
||||||
d = addChildDevice("smartthings", "Wemo Switch", selectedSwitch.value.mac, selectedSwitch?.value.hub, [
|
"data": [
|
||||||
"label": selectedSwitch?.value?.name ?: "Wemo Switch",
|
"mac": selectedSwitch.value.mac,
|
||||||
"data": [
|
"ip": selectedSwitch.value.ip,
|
||||||
"mac": selectedSwitch.value.mac,
|
"port": selectedSwitch.value.port
|
||||||
"ip": selectedSwitch.value.ip,
|
]
|
||||||
"port": selectedSwitch.value.port
|
])
|
||||||
]
|
def ipvalue = convertHexToIP(selectedSwitch.value.ip)
|
||||||
])
|
d.sendEvent(name: "currentIP", value: ipvalue, descriptionText: "IP is ${ipvalue}")
|
||||||
def ipvalue = convertHexToIP(selectedSwitch.value.ip)
|
log.debug "Created ${d.displayName} with id: ${d.id}, dni: ${d.deviceNetworkId}"
|
||||||
d.sendEvent(name: "currentIP", value: ipvalue, descriptionText: "IP is ${ipvalue}")
|
} else {
|
||||||
log.debug "Created ${d.displayName} with id: ${d.id}, dni: ${d.deviceNetworkId}"
|
log.debug "found ${d.displayName} with id $dni already exists"
|
||||||
} else {
|
}
|
||||||
log.debug "found ${d.displayName} with id $dni already exists"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -267,23 +266,22 @@ def addMotions() {
|
|||||||
d = getChildDevices()?.find {
|
d = getChildDevices()?.find {
|
||||||
it.deviceNetworkId == selectedMotion.value.mac || it.device.getDataValue("mac") == selectedMotion.value.mac
|
it.deviceNetworkId == selectedMotion.value.mac || it.device.getDataValue("mac") == selectedMotion.value.mac
|
||||||
}
|
}
|
||||||
}
|
if (!d) {
|
||||||
|
log.debug "Creating WeMo Motion with dni: ${selectedMotion.value.mac}"
|
||||||
if (!d) {
|
d = addChildDevice("smartthings", "Wemo Motion", selectedMotion.value.mac, selectedMotion?.value.hub, [
|
||||||
log.debug "Creating WeMo Motion with dni: ${selectedMotion.value.mac}"
|
"label": selectedMotion?.value?.name ?: "Wemo Motion",
|
||||||
d = addChildDevice("smartthings", "Wemo Motion", selectedMotion.value.mac, selectedMotion?.value.hub, [
|
"data": [
|
||||||
"label": selectedMotion?.value?.name ?: "Wemo Motion",
|
"mac": selectedMotion.value.mac,
|
||||||
"data": [
|
"ip": selectedMotion.value.ip,
|
||||||
"mac": selectedMotion.value.mac,
|
"port": selectedMotion.value.port
|
||||||
"ip": selectedMotion.value.ip,
|
]
|
||||||
"port": selectedMotion.value.port
|
])
|
||||||
]
|
def ipvalue = convertHexToIP(selectedMotion.value.ip)
|
||||||
])
|
d.sendEvent(name: "currentIP", value: ipvalue, descriptionText: "IP is ${ipvalue}")
|
||||||
def ipvalue = convertHexToIP(selectedMotion.value.ip)
|
log.debug "Created ${d.displayName} with id: ${d.id}, dni: ${d.deviceNetworkId}"
|
||||||
d.sendEvent(name: "currentIP", value: ipvalue, descriptionText: "IP is ${ipvalue}")
|
} else {
|
||||||
log.debug "Created ${d.displayName} with id: ${d.id}, dni: ${d.deviceNetworkId}"
|
log.debug "found ${d.displayName} with id $dni already exists"
|
||||||
} else {
|
}
|
||||||
log.debug "found ${d.displayName} with id $dni already exists"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -298,23 +296,22 @@ def addLightSwitches() {
|
|||||||
d = getChildDevices()?.find {
|
d = getChildDevices()?.find {
|
||||||
it.deviceNetworkId == selectedLightSwitch.value.mac || it.device.getDataValue("mac") == selectedLightSwitch.value.mac
|
it.deviceNetworkId == selectedLightSwitch.value.mac || it.device.getDataValue("mac") == selectedLightSwitch.value.mac
|
||||||
}
|
}
|
||||||
}
|
if (!d) {
|
||||||
|
log.debug "Creating WeMo Light Switch with dni: ${selectedLightSwitch.value.mac}"
|
||||||
if (!d) {
|
d = addChildDevice("smartthings", "Wemo Light Switch", selectedLightSwitch.value.mac, selectedLightSwitch?.value.hub, [
|
||||||
log.debug "Creating WeMo Light Switch with dni: ${selectedLightSwitch.value.mac}"
|
"label": selectedLightSwitch?.value?.name ?: "Wemo Light Switch",
|
||||||
d = addChildDevice("smartthings", "Wemo Light Switch", selectedLightSwitch.value.mac, selectedLightSwitch?.value.hub, [
|
"data": [
|
||||||
"label": selectedLightSwitch?.value?.name ?: "Wemo Light Switch",
|
"mac": selectedLightSwitch.value.mac,
|
||||||
"data": [
|
"ip": selectedLightSwitch.value.ip,
|
||||||
"mac": selectedLightSwitch.value.mac,
|
"port": selectedLightSwitch.value.port
|
||||||
"ip": selectedLightSwitch.value.ip,
|
]
|
||||||
"port": selectedLightSwitch.value.port
|
])
|
||||||
]
|
def ipvalue = convertHexToIP(selectedLightSwitch.value.ip)
|
||||||
])
|
d.sendEvent(name: "currentIP", value: ipvalue, descriptionText: "IP is ${ipvalue}")
|
||||||
def ipvalue = convertHexToIP(selectedLightSwitch.value.ip)
|
log.debug "created ${d.displayName} with id $dni"
|
||||||
d.sendEvent(name: "currentIP", value: ipvalue, descriptionText: "IP is ${ipvalue}")
|
} else {
|
||||||
log.debug "created ${d.displayName} with id $dni"
|
log.debug "found ${d.displayName} with id $dni already exists"
|
||||||
} else {
|
}
|
||||||
log.debug "found ${d.displayName} with id $dni already exists"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user