/**
* **************** Freezer Alarm ****************
*
* Usage:
* This was designed to detect when a freezer temperature is no longer updating.
*
*
*
*
**/
definition (
name: "Freezer Alarm",
namespace: "Hubitat",
author: "cb",
description: "",
category: "My Apps",
iconUrl: "",
iconX2Url: ""
)
preferences {
page name: "mainPage", title: "", install: true, uninstall: true
}
def mainPage() {
dynamicPage(name: "mainPage") {
section("App Name") {
label title: "", required: false
}
section("Freezer Temperature Device") {
input (
name: "freezerTemp",
type: "capability.temperatureMeasurment",
title: "Select Freezer Temp Device",
required: true,
multiple: false,
submitOnChange: true
)
}
section("Alarm Variable Device") {
input (
name: "alarmVariable",
type: "capability.variable",
title: "Select Alarm Variable Device",
required: true,
multiple: false,
submitOnChange: true
)
}
section("") {
input (
name: "alarmWait",
type: "number",
title: "Enter how many minutes to wait before new temp update",
required: true,
defaultValue: false
)
}
section("") {
input (
name: "debugMode",
type: "bool",
title: "Enable logging",
required: true,
defaultValue: false
)
}
section("") {
input (
name: "logLevel",
type: "enum",
title: "Logging Level",
options: [1:"Info", 2:"Warning", 3:"Debug"],
multiple: false,
defaultValue: 2,
required: true
)
}
}
}
def installed() {
initialize()
}
def updated() {
if (settings?.debugMode) {
if (settings?.logLevel == "3") {
runIn(3600, logDebugOff) // one hour
logDebug("Debug log level enabled",3)
logDebug("Log Level will change from Debug to Info after 1 hour",2)
} else if (settings?.logLevel == "1") {
logDebug("Info logging Enabled",1)
} else logDebug("Warning log level enabled",2)
}
initialize()
}
def initialize() {
subscribe(freezerTemp, "temperature", tempHandler)
}
def tempHandler(evt) {
logDebug("Received temperature ${evt.value}")
def seconds = alarmWait.toInteger() * 60
runIn(seconds, alarmHandler)
}
def alarmHandler() {
logDebug("Alarm Handler Fired")
alarmVariable.setVariable("ALARM")
}
// log debug if no logLevel added
def logDebug(txt) {
try {
if (settings?.debugMode) {
log.debug("${app.label} - ${txt}") // debug
}
} catch(ex) {
log.error("bad debug message")
}
}
// log by level when lvl supplied
def logDebug(txt, lvl){
try {
logLevel = settings?.logLevel.toInteger()
if (settings?.debugMode) {
if (lvl == 3 && logLevel == 3) log.debug("${app.label} - ${txt}") // debug
else if (lvl >= 2 && logLevel >= 2) log.warn("${app.label} - ${txt}") // warn
else if (lvl >= 1 && logLevel >= 1) log.info("${app.label} - ${txt}") // info
}
} catch(ex) {
log.error("bad debug message")
}
}
def logDebugOff() {
logDebug("Turning off debugMode")
app.updateSetting("logLevel",[value:"1",type:"enum"])
}