mirror of
https://github.com/mtan93/SmartThingsPublic.git
synced 2026-03-24 21:04:00 +00:00
DEVFRWK-78 Fix First Alert smoke alarm check-in handling
This commit is contained in:
@@ -61,37 +61,44 @@ def parse(String description) {
|
|||||||
zwaveEvent(cmd, results)
|
zwaveEvent(cmd, results)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// log.debug "\"$description\" parsed to ${results.inspect()}"
|
log.debug "'$description' parsed to ${results.inspect()}"
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def createSmokeOrCOEvents(name, results) {
|
def createSmokeOrCOEvents(name, results) {
|
||||||
def text = null
|
def text = null
|
||||||
if (name == "smoke") {
|
switch (name) {
|
||||||
text = "$device.displayName smoke was detected!"
|
case "smoke":
|
||||||
// these are displayed:false because the composite event is the one we want to see in the app
|
text = "$device.displayName smoke was detected!"
|
||||||
results << createEvent(name: "smoke", value: "detected", descriptionText: text, displayed: false)
|
// these are displayed:false because the composite event is the one we want to see in the app
|
||||||
} else if (name == "carbonMonoxide") {
|
results << createEvent(name: "smoke", value: "detected", descriptionText: text, displayed: false)
|
||||||
text = "$device.displayName carbon monoxide was detected!"
|
break
|
||||||
results << createEvent(name: "carbonMonoxide", value: "detected", descriptionText: text, displayed: false)
|
case "carbonMonoxide":
|
||||||
} else if (name == "tested") {
|
text = "$device.displayName carbon monoxide was detected!"
|
||||||
text = "$device.displayName was tested"
|
results << createEvent(name: "carbonMonoxide", value: "detected", descriptionText: text, displayed: false)
|
||||||
results << createEvent(name: "smoke", value: "tested", descriptionText: text, displayed: false)
|
break
|
||||||
results << createEvent(name: "carbonMonoxide", value: "tested", descriptionText: text, displayed: false)
|
case "tested":
|
||||||
} else if (name == "smokeClear") {
|
text = "$device.displayName was tested"
|
||||||
text = "$device.displayName smoke is clear"
|
results << createEvent(name: "smoke", value: "tested", descriptionText: text, displayed: false)
|
||||||
results << createEvent(name: "smoke", value: "clear", descriptionText: text, displayed: false)
|
results << createEvent(name: "carbonMonoxide", value: "tested", descriptionText: text, displayed: false)
|
||||||
name = "clear"
|
break
|
||||||
} else if (name == "carbonMonoxideClear") {
|
case "smokeClear":
|
||||||
text = "$device.displayName carbon monoxide is clear"
|
text = "$device.displayName smoke is clear"
|
||||||
results << createEvent(name: "carbonMonoxide", value: "clear", descriptionText: text, displayed: false)
|
results << createEvent(name: "smoke", value: "clear", descriptionText: text, displayed: false)
|
||||||
name = "clear"
|
name = "clear"
|
||||||
} else if (name == "testClear") {
|
break
|
||||||
text = "$device.displayName smoke is clear"
|
case "carbonMonoxideClear":
|
||||||
results << createEvent(name: "smoke", value: "clear", descriptionText: text, displayed: false)
|
text = "$device.displayName carbon monoxide is clear"
|
||||||
results << createEvent(name: "carbonMonoxide", value: "clear", displayed: false)
|
results << createEvent(name: "carbonMonoxide", value: "clear", descriptionText: text, displayed: false)
|
||||||
name = "clear"
|
name = "clear"
|
||||||
|
break
|
||||||
|
case "testClear":
|
||||||
|
text = "$device.displayName test cleared"
|
||||||
|
results << createEvent(name: "smoke", value: "clear", descriptionText: text, displayed: false)
|
||||||
|
results << createEvent(name: "carbonMonoxide", value: "clear", displayed: false)
|
||||||
|
name = "clear"
|
||||||
|
break
|
||||||
}
|
}
|
||||||
// This composite event is used for updating the tile
|
// This composite event is used for updating the tile
|
||||||
results << createEvent(name: "alarmState", value: name, descriptionText: text)
|
results << createEvent(name: "alarmState", value: name, descriptionText: text)
|
||||||
@@ -117,8 +124,10 @@ def zwaveEvent(physicalgraph.zwave.commands.alarmv2.AlarmReport cmd, results) {
|
|||||||
createSmokeOrCOEvents(cmd.alarmLevel ? "tested" : "testClear", results)
|
createSmokeOrCOEvents(cmd.alarmLevel ? "tested" : "testClear", results)
|
||||||
break
|
break
|
||||||
case 13: // sent every hour -- not sure what this means, just a wake up notification?
|
case 13: // sent every hour -- not sure what this means, just a wake up notification?
|
||||||
if (cmd.alarmLevel != 255) {
|
if (cmd.alarmLevel == 255) {
|
||||||
results << createEvent(descriptionText: "$device.displayName code 13 is $cmd.alarmLevel", displayed: true)
|
results << createEvent(descriptionText: "$device.displayName checked in", isStateChange: false)
|
||||||
|
} else {
|
||||||
|
results << createEvent(descriptionText: "$device.displayName code 13 is $cmd.alarmLevel", isStateChange:true, displayed:false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear smoke in case they pulled batteries and we missed the clear msg
|
// Clear smoke in case they pulled batteries and we missed the clear msg
|
||||||
@@ -127,9 +136,8 @@ def zwaveEvent(physicalgraph.zwave.commands.alarmv2.AlarmReport cmd, results) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check battery if we don't have a recent battery event
|
// Check battery if we don't have a recent battery event
|
||||||
def prevBattery = device.currentState("battery")
|
if (!state.lastbatt || (now() - state.lastbatt) >= 48*60*60*1000) {
|
||||||
if (!prevBattery || (new Date().time - prevBattery.date.time)/60000 >= 60 * 53) {
|
results << response(zwave.batteryV1.batteryGet())
|
||||||
results << new physicalgraph.device.HubAction(zwave.batteryV1.batteryGet().format())
|
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
@@ -158,12 +166,17 @@ def zwaveEvent(physicalgraph.zwave.commands.sensoralarmv1.SensorAlarmReport cmd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd, results) {
|
def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd, results) {
|
||||||
results << new physicalgraph.device.HubAction(zwave.wakeUpV1.wakeUpNoMoreInformation().format())
|
|
||||||
results << createEvent(descriptionText: "$device.displayName woke up", isStateChange: false)
|
results << createEvent(descriptionText: "$device.displayName woke up", isStateChange: false)
|
||||||
|
if (!state.lastbatt || (now() - state.lastbatt) >= 56*60*60*1000) {
|
||||||
|
results << response(zwave.batteryV1.batteryGet(), "delay 2000", zwave.wakeUpV1.wakeUpNoMoreInformation())
|
||||||
|
} else {
|
||||||
|
results << response(zwave.wakeUpV1.wakeUpNoMoreInformation())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd, results) {
|
def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd, results) {
|
||||||
def map = [ name: "battery", unit: "%" ]
|
def map = [ name: "battery", unit: "%", isStateChange: true ]
|
||||||
|
state.lastbatt = now()
|
||||||
if (cmd.batteryLevel == 0xFF) {
|
if (cmd.batteryLevel == 0xFF) {
|
||||||
map.value = 1
|
map.value = 1
|
||||||
map.descriptionText = "$device.displayName battery is low!"
|
map.descriptionText = "$device.displayName battery is low!"
|
||||||
|
|||||||
Reference in New Issue
Block a user