/* HubiThings Replica Samsung Oven cavity Driver
HubiThings Replica Applications Copyright 2023 by Bloodtick
Replica RangeOvenCavity Copyright 2023 by Dave Gutheinz
See parent driver for added information.
==========================================================================*/
def driverVer() { return "1.0-1" }
def appliance() { return "ReplicaSamsungOvenCavity" }
metadata {
definition (name: appliance(),
namespace: "replica",
author: "David Gutheinz",
importUrl: "https://raw.githubusercontent.com/DaveGut/HubithingsReplica/main/Drivers/${appliance()}.groovy"
){
capability "Refresh"
attribute "ovenCavityStatus", "string"
}
preferences {
}
}
// ===== Installation, setup and update =====
def installed() {
runIn(1, updated)
}
def updated() {
unschedule()
def updStatus = [:]
if (!getDataValue("driverVersion") || getDataValue("driverVersion") != driverVer()) {
updateDataValue("driverVersion", driverVer())
updStatus << [driverVer: driverVer()]
}
if (logEnable) { runIn(1800, debugLogOff) }
if (traceLog) { runIn(600, traceLogOff) }
updStatus << [logEnable: logEnable, infoLog: infoLog, traceLog: traceLog]
listAttributes(true)
logInfo("updated: ${updStatus}")
}
// ===== Event Parse Interface s=====
def designCapabilities() {
return ["ovenSetpoint", "ovenMode", "ovenOperatingState", "temperatureMeasurement",
"samsungce.ovenMode", "samsungce.ovenOperatingState", "custom.ovenCavityStatus"]
}
def sendRawCommand(component, capability, command, arguments = []) {
Map status = [:]
def cavityInst = device.currentValue("ovenCavityStatus")
if (cavityInst == "on") {
status << parent.sendRawCommand(component, capability, command, arguments)
} else {
status << [FAILED: [cavityInst: cavityInst]]
}
return status
}
// ===== Device Commands =====
// Common parent/child Oven commands are in library replica.samsungReplicaOvenCommon
// ===== Libraries =====
// ~~~~~ start include (1315) replica.samsungOvenCommon ~~~~~
library ( // library marker replica.samsungOvenCommon, line 1
name: "samsungOvenCommon", // library marker replica.samsungOvenCommon, line 2
namespace: "replica", // library marker replica.samsungOvenCommon, line 3
author: "Dave Gutheinz", // library marker replica.samsungOvenCommon, line 4
description: "Common Methods for replica Samsung Oven parent/children", // library marker replica.samsungOvenCommon, line 5
category: "utilities", // library marker replica.samsungOvenCommon, line 6
documentationLink: "" // library marker replica.samsungOvenCommon, line 7
) // library marker replica.samsungOvenCommon, line 8
// Version 1.0 // library marker replica.samsungOvenCommon, line 9
// ===== Common Capabilities, Commands, and Attributes ===== // library marker replica.samsungOvenCommon, line 11
command "setOvenSetpoint", [[name: "oven temperature", type: "NUMBER"]] // library marker replica.samsungOvenCommon, line 12
attribute "ovenSetpoint", "number" // library marker replica.samsungOvenCommon, line 13
attribute "ovenTemperature", "number" // attr.temperature // library marker replica.samsungOvenCommon, line 14
command "setOvenMode", [[name: "from state.supported OvenModes", type:"STRING"]] // library marker replica.samsungOvenCommon, line 15
attribute "ovenMode", "string" // library marker replica.samsungOvenCommon, line 16
command "stop" // library marker replica.samsungOvenCommon, line 17
command "pause" // library marker replica.samsungOvenCommon, line 18
command "start", [[name: "mode", type: "STRING"], // library marker replica.samsungOvenCommon, line 19
[name: "time (hh:mm:ss OR secs)", type: "STRING"], // library marker replica.samsungOvenCommon, line 20
[name: "setpoint", type: "NUMBER"]] // library marker replica.samsungOvenCommon, line 21
attribute "completionTime", "string" // time string // library marker replica.samsungOvenCommon, line 22
attribute "progress", "number" // percent // library marker replica.samsungOvenCommon, line 23
attribute "operatingState", "string" // attr.machineState // library marker replica.samsungOvenCommon, line 24
attribute "ovenJobState", "string" // library marker replica.samsungOvenCommon, line 25
attribute "operationTime", "string" // library marker replica.samsungOvenCommon, line 26
command "setOperationTime", [[name: "time (hh:mm:ss OR secs)", type: "STRING"]] // library marker replica.samsungOvenCommon, line 27
String helpLogo() { // library marker replica.samsungOvenCommon, line 29
return """""" + // library marker replica.samsungOvenCommon, line 30
"""Oven Help
""" // library marker replica.samsungOvenCommon, line 31
} // library marker replica.samsungOvenCommon, line 32
def parseEvent(event) { // library marker replica.samsungOvenCommon, line 34
logDebug("parseEvent: ${event}") // library marker replica.samsungOvenCommon, line 35
if (state.deviceCapabilities.contains(event.capability)) { // library marker replica.samsungOvenCommon, line 36
logTrace("parseEvent: ${event}") // library marker replica.samsungOvenCommon, line 37
if (event.value != null) { // library marker replica.samsungOvenCommon, line 38
switch(event.attribute) { // library marker replica.samsungOvenCommon, line 39
case "machineState": // library marker replica.samsungOvenCommon, line 40
if (!state.deviceCapabilities.contains("samsungce.ovenOperatingState")) { // library marker replica.samsungOvenCommon, line 41
event.attribute = "operatingState" // library marker replica.samsungOvenCommon, line 42
setEvent(event) // library marker replica.samsungOvenCommon, line 43
} // library marker replica.samsungOvenCommon, line 44
break // library marker replica.samsungOvenCommon, line 45
case "operationTime": // library marker replica.samsungOvenCommon, line 46
def opTime = formatTime(event.value, "hhmmss", "parseEvent") // library marker replica.samsungOvenCommon, line 47
event.value = opTime // library marker replica.samsungOvenCommon, line 48
case "completionTime": // library marker replica.samsungOvenCommon, line 49
case "progress": // library marker replica.samsungOvenCommon, line 50
case "ovenJobState": // library marker replica.samsungOvenCommon, line 51
case "operationTime": // library marker replica.samsungOvenCommon, line 52
if (state.deviceCapabilities.contains("samsungce.ovenOperatingState")) { // library marker replica.samsungOvenCommon, line 53
if (event.capability == "samsungce.ovenOperatingState") { // library marker replica.samsungOvenCommon, line 54
setEvent(event) // library marker replica.samsungOvenCommon, line 55
} // library marker replica.samsungOvenCommon, line 56
} else { // library marker replica.samsungOvenCommon, line 57
setEvent(event) // library marker replica.samsungOvenCommon, line 58
} // library marker replica.samsungOvenCommon, line 59
break // library marker replica.samsungOvenCommon, line 60
case "temperature": // library marker replica.samsungOvenCommon, line 61
def attr = "ovenTemperature" // library marker replica.samsungOvenCommon, line 62
if (event.capability == "samsungce.meatProbe") { // library marker replica.samsungOvenCommon, line 63
attr = "probeTemperature" // library marker replica.samsungOvenCommon, line 64
} // library marker replica.samsungOvenCommon, line 65
event["attribute"] = attr // library marker replica.samsungOvenCommon, line 66
setEvent(event) // library marker replica.samsungOvenCommon, line 67
break // library marker replica.samsungOvenCommon, line 68
case "temperatureSetpoint": // library marker replica.samsungOvenCommon, line 69
event["attribute"] = "probeSetpoint" // library marker replica.samsungOvenCommon, line 70
setEvent(event) // library marker replica.samsungOvenCommon, line 71
break // library marker replica.samsungOvenCommon, line 72
case "status": // library marker replica.samsungOvenCommon, line 73
event["attribute"] = "probeStatus" // library marker replica.samsungOvenCommon, line 74
setEvent(event) // library marker replica.samsungOvenCommon, line 75
break // library marker replica.samsungOvenCommon, line 76
case "ovenMode": // library marker replica.samsungOvenCommon, line 77
if (state.deviceCapabilities.contains("samsungce.ovenMode")) { // library marker replica.samsungOvenCommon, line 78
if (event.capability == "samsungce.ovenMode") { // library marker replica.samsungOvenCommon, line 79
setEvent(event) // library marker replica.samsungOvenCommon, line 80
} // library marker replica.samsungOvenCommon, line 81
} else { // library marker replica.samsungOvenCommon, line 82
setEvent(event) // library marker replica.samsungOvenCommon, line 83
} // library marker replica.samsungOvenCommon, line 84
break // library marker replica.samsungOvenCommon, line 85
case "supportedOvenModes": // library marker replica.samsungOvenCommon, line 86
// if samsungce.ovenMode, use that, otherwise use // library marker replica.samsungOvenCommon, line 87
// ovenMode. Format always hh:mm:ss. // library marker replica.samsungOvenCommon, line 88
if (state.deviceCapabilities.contains("samsungce.ovenMode")) { // library marker replica.samsungOvenCommon, line 89
if (event.capability == "samsungce.ovenMode") { // library marker replica.samsungOvenCommon, line 90
setState(event) // library marker replica.samsungOvenCommon, line 91
} // library marker replica.samsungOvenCommon, line 92
} else { // library marker replica.samsungOvenCommon, line 93
setState(event) // library marker replica.samsungOvenCommon, line 94
} // library marker replica.samsungOvenCommon, line 95
break // library marker replica.samsungOvenCommon, line 96
case "supportedBrightnessLevel": // library marker replica.samsungOvenCommon, line 97
setState(event) // library marker replica.samsungOvenCommon, line 98
break // library marker replica.samsungOvenCommon, line 99
case "supportedCooktopOperatingState": // library marker replica.samsungOvenCommon, line 100
break // library marker replica.samsungOvenCommon, line 101
default: // library marker replica.samsungOvenCommon, line 102
setEvent(event) // library marker replica.samsungOvenCommon, line 103
break // library marker replica.samsungOvenCommon, line 104
} // library marker replica.samsungOvenCommon, line 105
} // library marker replica.samsungOvenCommon, line 106
} // library marker replica.samsungOvenCommon, line 107
} // library marker replica.samsungOvenCommon, line 108
def setState(event) { // library marker replica.samsungOvenCommon, line 110
def attribute = event.attribute // library marker replica.samsungOvenCommon, line 111
if (state."${attribute}" != event.value) { // library marker replica.samsungOvenCommon, line 112
state."${event.attribute}" = event.value // library marker replica.samsungOvenCommon, line 113
logInfo("setState: [event: ${event}]") // library marker replica.samsungOvenCommon, line 114
} // library marker replica.samsungOvenCommon, line 115
} // library marker replica.samsungOvenCommon, line 116
def setEvent(event) { // library marker replica.samsungOvenCommon, line 118
logTrace("setEvent: ${event}") // library marker replica.samsungOvenCommon, line 119
sendEvent(name: event.attribute, value: event.value, unit: event.unit) // library marker replica.samsungOvenCommon, line 120
if (device.currentValue(event.attribute).toString() != event.value.toString()) { // library marker replica.samsungOvenCommon, line 121
logInfo("setEvent: [event: ${event}]") // library marker replica.samsungOvenCommon, line 122
} // library marker replica.samsungOvenCommon, line 123
} // library marker replica.samsungOvenCommon, line 124
// ===== Device Commands ===== // library marker replica.samsungOvenCommon, line 126
def setOvenMode(mode) { // library marker replica.samsungOvenCommon, line 127
def ovenMode = checkMode(mode) // library marker replica.samsungOvenCommon, line 128
def hasAdvCap = state.deviceCapabilities.contains("samsungce.ovenOperatingState") // library marker replica.samsungOvenCommon, line 129
Map cmdStatus = [mode: mode, ovenMode: ovenMode, hasAdvCap: hasAdvCap] // library marker replica.samsungOvenCommon, line 130
if (ovenMode == "notSupported") { // library marker replica.samsungOvenCommon, line 131
cmdStatus << [FAILED: ovenMode] // library marker replica.samsungOvenCommon, line 132
} else if (hasAdvCap) { // library marker replica.samsungOvenCommon, line 133
cmdStatus << sendRawCommand(getDataValue("componentId"), // library marker replica.samsungOvenCommon, line 134
"samsungce.ovenMode", "setOvenMode", [ovenMode]) // library marker replica.samsungOvenCommon, line 135
} else { // library marker replica.samsungOvenCommon, line 136
cmdStatus << sendRawCommand(getDataValue("componentId"), // library marker replica.samsungOvenCommon, line 137
"ovenMode", "setOvenMode", [ovenMode]) // library marker replica.samsungOvenCommon, line 138
} // library marker replica.samsungOvenCommon, line 139
logInfo("setOvenMode: ${cmdStatus}") // library marker replica.samsungOvenCommon, line 140
} // library marker replica.samsungOvenCommon, line 141
def checkMode(mode) { // library marker replica.samsungOvenCommon, line 143
mode = state.supportedOvenModes.find { it.toLowerCase() == mode.toLowerCase() } // library marker replica.samsungOvenCommon, line 144
if (mode == null) { // library marker replica.samsungOvenCommon, line 145
mode = "notSupported" // library marker replica.samsungOvenCommon, line 146
} // library marker replica.samsungOvenCommon, line 147
return mode // library marker replica.samsungOvenCommon, line 148
} // library marker replica.samsungOvenCommon, line 149
def setOvenSetpoint(setpoint) { // library marker replica.samsungOvenCommon, line 151
setpoint = setpoint.toInteger() // library marker replica.samsungOvenCommon, line 152
Map cmdStatus = [setpoint: setpoint] // library marker replica.samsungOvenCommon, line 153
if (setpoint >= 0) { // library marker replica.samsungOvenCommon, line 154
cmdStatus << sendRawCommand(getDataValue("componentId"), "ovenSetpoint", "setOvenSetpoint", [setpoint]) // library marker replica.samsungOvenCommon, line 155
logInfo("setOvenSetpoint: ${setpoint}") // library marker replica.samsungOvenCommon, line 156
} else { // library marker replica.samsungOvenCommon, line 157
cmdStatus << [FAILED: "invalidSetpoint"] // library marker replica.samsungOvenCommon, line 158
} // library marker replica.samsungOvenCommon, line 159
logInfo("setOvenSetpoint: ${cmdStatus}") // library marker replica.samsungOvenCommon, line 160
} // library marker replica.samsungOvenCommon, line 161
def setOperationTime(opTime) { // library marker replica.samsungOvenCommon, line 163
def hasAdvCap = state.deviceCapabilities.contains("samsungce.ovenOperatingState") // library marker replica.samsungOvenCommon, line 164
Map cmdStatus = [opTime: opTime, hasAdvCap: hasAdvCap] // library marker replica.samsungOvenCommon, line 165
def success = true // library marker replica.samsungOvenCommon, line 166
def hhmmss = formatTime(opTime, "hhmmss", "setOperationTime") // library marker replica.samsungOvenCommon, line 167
if (hasAdvCap) { // library marker replica.samsungOvenCommon, line 168
cmdStatus << [formatedOpTime: opTime] // library marker replica.samsungOvenCommon, line 169
if (opTime == "invalidEntry") { // library marker replica.samsungOvenCommon, line 170
cmdStatus << [FAILED: opTime] // library marker replica.samsungOvenCommon, line 171
success = false // library marker replica.samsungOvenCommon, line 172
} else { // library marker replica.samsungOvenCommon, line 173
cmdStatus << sendRawCommand(getDataValue("componentId"), // library marker replica.samsungOvenCommon, line 174
"samsungce.ovenOperatingState", // library marker replica.samsungOvenCommon, line 175
"setOperationTime", [hhmmss]) // library marker replica.samsungOvenCommon, line 176
} // library marker replica.samsungOvenCommon, line 177
} else { // library marker replica.samsungOvenCommon, line 178
opTime = formatTime(opTime, "seconds", "setOperationTime") // library marker replica.samsungOvenCommon, line 179
cmdStatus << [formatedOpTime: opTime] // library marker replica.samsungOvenCommon, line 180
if (opTime == "invalidEntry") { // library marker replica.samsungOvenCommon, line 181
cmdStatus << [FAILED: opTime] // library marker replica.samsungOvenCommon, line 182
success = false // library marker replica.samsungOvenCommon, line 183
} else { // library marker replica.samsungOvenCommon, line 184
Map opCmd = [time: opTime] // library marker replica.samsungOvenCommon, line 185
cmdStatus << sendRawCommand(getDataValue("componentId"), // library marker replica.samsungOvenCommon, line 186
"ovenOperatingState", // library marker replica.samsungOvenCommon, line 187
"start", [opCmd]) // library marker replica.samsungOvenCommon, line 188
} // library marker replica.samsungOvenCommon, line 189
} // library marker replica.samsungOvenCommon, line 190
logInfo("setOperationTime: ${cmdStatus}") // library marker replica.samsungOvenCommon, line 191
if (success) { // library marker replica.samsungOvenCommon, line 192
runIn(10, checkAttribute, [data: ["setOperationTime", "operationTime", hhmmss]]) // library marker replica.samsungOvenCommon, line 193
} // library marker replica.samsungOvenCommon, line 194
} // library marker replica.samsungOvenCommon, line 195
def stop() { // library marker replica.samsungOvenCommon, line 197
def hasAdvCap = state.deviceCapabilities.contains("samsungce.ovenOperatingState") // library marker replica.samsungOvenCommon, line 198
Map cmdStatus = [hasAdvCap: hasAdvCap] // library marker replica.samsungOvenCommon, line 199
if (hasAdvCap) { // library marker replica.samsungOvenCommon, line 200
cmdStatus << sendRawCommand(getDataValue("componentId"), // library marker replica.samsungOvenCommon, line 201
"samsungce.ovenOperatingState", "stop") // library marker replica.samsungOvenCommon, line 202
} else { // library marker replica.samsungOvenCommon, line 203
cmdStatus << sendRawCommand(getDataValue("componentId"), // library marker replica.samsungOvenCommon, line 204
"ovenOperatingState", "stop") // library marker replica.samsungOvenCommon, line 205
} // library marker replica.samsungOvenCommon, line 206
logInfo("stop: ${cmdStatus}") // library marker replica.samsungOvenCommon, line 207
} // library marker replica.samsungOvenCommon, line 208
def pause() { // library marker replica.samsungOvenCommon, line 210
def hasAdvCap = state.deviceCapabilities.contains("samsungce.ovenOperatingState") // library marker replica.samsungOvenCommon, line 211
Map cmdStatus = [hasAdvCap: hasAdvCap] // library marker replica.samsungOvenCommon, line 212
if (hasAdvCap) { // library marker replica.samsungOvenCommon, line 213
cmdStatus << sendRawCommand(getDataValue("componentId"), // library marker replica.samsungOvenCommon, line 214
"samsungce.ovenOperatingState", "pause") // library marker replica.samsungOvenCommon, line 215
runIn(10, checkAttribute, [data: ["pause", "operatingState", "paused"]]) // library marker replica.samsungOvenCommon, line 216
} else { // library marker replica.samsungOvenCommon, line 217
cmdStatus << [FAILED: "pause not available on device"] // library marker replica.samsungOvenCommon, line 218
} // library marker replica.samsungOvenCommon, line 219
logInfo("pause: ${cmdStatus}") // library marker replica.samsungOvenCommon, line 220
} // library marker replica.samsungOvenCommon, line 221
def start(mode = null, opTime = null, setpoint = null) { // library marker replica.samsungOvenCommon, line 223
def hasAdvCap = state.deviceCapabilities.contains("samsungce.ovenOperatingState") // library marker replica.samsungOvenCommon, line 224
Map cmdStatus = [hasAdvCap: hasAdvCap, input: // library marker replica.samsungOvenCommon, line 225
[mode: mode, opTime: opTime, setpoint: setpoint]] // library marker replica.samsungOvenCommon, line 226
if (hasAdvCap) { // library marker replica.samsungOvenCommon, line 227
if (mode != null) { // library marker replica.samsungOvenCommon, line 228
setOvenMode(mode) // library marker replica.samsungOvenCommon, line 229
pauseExecution(2000) // library marker replica.samsungOvenCommon, line 230
} // library marker replica.samsungOvenCommon, line 231
if (setpoint != null) { // library marker replica.samsungOvenCommon, line 232
setOvenSetpoint(setpoint) // library marker replica.samsungOvenCommon, line 233
pauseExecution(2000) // library marker replica.samsungOvenCommon, line 234
} // library marker replica.samsungOvenCommon, line 235
if (opTime != null) { // library marker replica.samsungOvenCommon, line 236
setOperationTime(opTime) // library marker replica.samsungOvenCommon, line 237
pauseExecution(2000) // library marker replica.samsungOvenCommon, line 238
} // library marker replica.samsungOvenCommon, line 239
cmdStatus << sendRawCommand(getDataValue("componentId"), // library marker replica.samsungOvenCommon, line 240
"samsungce.ovenOperatingState", "start", []) // library marker replica.samsungOvenCommon, line 241
runIn(10, checkAttribute, [data: ["start", "operatingState", "running"]]) // library marker replica.samsungOvenCommon, line 242
} else { // library marker replica.samsungOvenCommon, line 243
Map opCmd = [:] // library marker replica.samsungOvenCommon, line 244
def failed = false // library marker replica.samsungOvenCommon, line 245
if (mode != null) { // library marker replica.samsungOvenCommon, line 246
def ovenMode = checkMode(mode) // library marker replica.samsungOvenCommon, line 247
cmdStatus << [cmdMode: ovenMode] // library marker replica.samsungOvenCommon, line 248
opCmd << [mode: ovenMode] // library marker replica.samsungOvenCommon, line 249
if (ovenMode == "notSupported") { // library marker replica.samsungOvenCommon, line 250
failed = true // library marker replica.samsungOvenCommon, line 251
} // library marker replica.samsungOvenCommon, line 252
} // library marker replica.samsungOvenCommon, line 253
if (opTime != null) { // library marker replica.samsungOvenCommon, line 254
opTime = formatTime(opTime, "seconds", "setOperationTime") // library marker replica.samsungOvenCommon, line 255
cmdStatus << [cmdOpTime: opTime] // library marker replica.samsungOvenCommon, line 256
opCmd << [time: opTime] // library marker replica.samsungOvenCommon, line 257
if (opTime == "invalidEntry") { // library marker replica.samsungOvenCommon, line 258
failed = true // library marker replica.samsungOvenCommon, line 259
} // library marker replica.samsungOvenCommon, line 260
} // library marker replica.samsungOvenCommon, line 261
if (setpoint != null) { // library marker replica.samsungOvenCommon, line 262
setpoint = setpoint.toInteger() // library marker replica.samsungOvenCommon, line 263
cmdStatus << [cmdSetpoint: setpoint] // library marker replica.samsungOvenCommon, line 264
opCmd << [setpoint: setpoint] // library marker replica.samsungOvenCommon, line 265
if (setpoint < 0) { // library marker replica.samsungOvenCommon, line 266
failed = true // library marker replica.samsungOvenCommon, line 267
} // library marker replica.samsungOvenCommon, line 268
} // library marker replica.samsungOvenCommon, line 269
if (failed == false) { // library marker replica.samsungOvenCommon, line 270
cmdStatus << sendRawCommand(getDataValue("componentId"), // library marker replica.samsungOvenCommon, line 271
"ovenOperatingState", "start", [opCmd]) // library marker replica.samsungOvenCommon, line 272
runIn(10, checkAttribute, [data: ["start", "operatingState", "running"]]) // library marker replica.samsungOvenCommon, line 273
} else { // library marker replica.samsungOvenCommon, line 274
cmdStatus << [FAILED: "invalidInput"] // library marker replica.samsungOvenCommon, line 275
} // library marker replica.samsungOvenCommon, line 276
} // library marker replica.samsungOvenCommon, line 277
logInfo("start: ${cmdStatus}") // library marker replica.samsungOvenCommon, line 278
} // library marker replica.samsungOvenCommon, line 279
def checkAttribute(setCommand, attrName, attrValue) { // library marker replica.samsungOvenCommon, line 281
def checkValue = device.currentValue(attrName).toString() // library marker replica.samsungOvenCommon, line 282
if (checkValue != attrValue.toString()) { // library marker replica.samsungOvenCommon, line 283
Map warnTxt = [command: setCommand, // library marker replica.samsungOvenCommon, line 284
attribute: attrName, // library marker replica.samsungOvenCommon, line 285
checkValue: checkValue, // library marker replica.samsungOvenCommon, line 286
attrValue: attrValue, // library marker replica.samsungOvenCommon, line 287
failed: "Function may be disabled by SmartThings"] // library marker replica.samsungOvenCommon, line 288
logWarn("checkAttribute: ${warnTxt}") // library marker replica.samsungOvenCommon, line 289
} // library marker replica.samsungOvenCommon, line 290
} // library marker replica.samsungOvenCommon, line 291
def formatTime(timeValue, desiredFormat, callMethod) { // library marker replica.samsungOvenCommon, line 293
timeValue = timeValue.toString() // library marker replica.samsungOvenCommon, line 294
def currentFormat = "seconds" // library marker replica.samsungOvenCommon, line 295
if (timeValue.contains(":")) { // library marker replica.samsungOvenCommon, line 296
currentFormat = "hhmmss" // library marker replica.samsungOvenCommon, line 297
} // library marker replica.samsungOvenCommon, line 298
def formatedTime // library marker replica.samsungOvenCommon, line 299
if (currentFormat == "hhmmss") { // library marker replica.samsungOvenCommon, line 300
formatedTime = formatHhmmss(timeValue) // library marker replica.samsungOvenCommon, line 301
if (desiredFormat == "seconds") { // library marker replica.samsungOvenCommon, line 302
formatedTime = convertHhMmSsToInt(formatedTime) // library marker replica.samsungOvenCommon, line 303
} // library marker replica.samsungOvenCommon, line 304
} else { // library marker replica.samsungOvenCommon, line 305
formatedTime = timeValue // library marker replica.samsungOvenCommon, line 306
if (desiredFormat == "hhmmss") { // library marker replica.samsungOvenCommon, line 307
formatedTime = convertIntToHhMmSs(timeValue) // library marker replica.samsungOvenCommon, line 308
} // library marker replica.samsungOvenCommon, line 309
} // library marker replica.samsungOvenCommon, line 310
if (formatedTime == "invalidEntry") { // library marker replica.samsungOvenCommon, line 311
Map errorData = [callMethod: callMethod, timeValue: timeValue, // library marker replica.samsungOvenCommon, line 312
desiredFormat: desiredFormat] // library marker replica.samsungOvenCommon, line 313
logWarn("formatTime: [error: ${formatedTime}, data: ${errorData}") // library marker replica.samsungOvenCommon, line 314
} // library marker replica.samsungOvenCommon, line 315
return formatedTime // library marker replica.samsungOvenCommon, line 316
} // library marker replica.samsungOvenCommon, line 317
def formatHhmmss(timeValue) { // library marker replica.samsungOvenCommon, line 319
def timeArray = timeValue.split(":") // library marker replica.samsungOvenCommon, line 320
def hours = 0 // library marker replica.samsungOvenCommon, line 321
def minutes = 0 // library marker replica.samsungOvenCommon, line 322
def seconds = 0 // library marker replica.samsungOvenCommon, line 323
if (timeArray.size() != timeValue.count(":") + 1) { // library marker replica.samsungOvenCommon, line 324
return "invalidEntry" // library marker replica.samsungOvenCommon, line 325
} else { // library marker replica.samsungOvenCommon, line 326
try { // library marker replica.samsungOvenCommon, line 327
if (timeArray.size() == 3) { // library marker replica.samsungOvenCommon, line 328
hours = timeArray[0].toInteger() // library marker replica.samsungOvenCommon, line 329
minutes = timeArray[1].toInteger() // library marker replica.samsungOvenCommon, line 330
seconds = timeArray[2].toInteger() // library marker replica.samsungOvenCommon, line 331
} else if (timeArray.size() == 2) { // library marker replica.samsungOvenCommon, line 332
minutes = timeArray[0].toInteger() // library marker replica.samsungOvenCommon, line 333
seconds = timeArray[1].toInteger() // library marker replica.samsungOvenCommon, line 334
} // library marker replica.samsungOvenCommon, line 335
} catch (error) { // library marker replica.samsungOvenCommon, line 336
return "invalidEntry" // library marker replica.samsungOvenCommon, line 337
} // library marker replica.samsungOvenCommon, line 338
} // library marker replica.samsungOvenCommon, line 339
if (hours < 10) { hours = "0${hours}" } // library marker replica.samsungOvenCommon, line 340
if (minutes < 10) { minutes = "0${minutes}" } // library marker replica.samsungOvenCommon, line 341
if (seconds < 10) { seconds = "0${seconds}" } // library marker replica.samsungOvenCommon, line 342
return "${hours}:${minutes}:${seconds}" // library marker replica.samsungOvenCommon, line 343
} // library marker replica.samsungOvenCommon, line 344
def convertIntToHhMmSs(timeSeconds) { // library marker replica.samsungOvenCommon, line 346
def hhmmss // library marker replica.samsungOvenCommon, line 347
try { // library marker replica.samsungOvenCommon, line 348
hhmmss = new GregorianCalendar( 0, 0, 0, 0, 0, timeSeconds.toInteger(), 0 ).time.format( 'HH:mm:ss' ) // library marker replica.samsungOvenCommon, line 349
} catch (error) { // library marker replica.samsungOvenCommon, line 350
hhmmss = "invalidEntry" // library marker replica.samsungOvenCommon, line 351
} // library marker replica.samsungOvenCommon, line 352
return hhmmss // library marker replica.samsungOvenCommon, line 353
} // library marker replica.samsungOvenCommon, line 354
def convertHhMmSsToInt(timeValue) { // library marker replica.samsungOvenCommon, line 356
def timeArray = timeValue.split(":") // library marker replica.samsungOvenCommon, line 357
def seconds = 0 // library marker replica.samsungOvenCommon, line 358
if (timeArray.size() != timeValue.count(":") + 1) { // library marker replica.samsungOvenCommon, line 359
return "invalidEntry" // library marker replica.samsungOvenCommon, line 360
} else { // library marker replica.samsungOvenCommon, line 361
try { // library marker replica.samsungOvenCommon, line 362
if (timeArray.size() == 3) { // library marker replica.samsungOvenCommon, line 363
seconds = timeArray[0].toInteger() * 3600 + // library marker replica.samsungOvenCommon, line 364
timeArray[1].toInteger() * 60 + timeArray[2].toInteger() // library marker replica.samsungOvenCommon, line 365
} else if (timeArray.size() == 2) { // library marker replica.samsungOvenCommon, line 366
seconds = timeArray[0].toInteger() * 60 + timeArray[1].toInteger() // library marker replica.samsungOvenCommon, line 367
} // library marker replica.samsungOvenCommon, line 368
} catch (error) { // library marker replica.samsungOvenCommon, line 369
seconds = "invalidEntry" // library marker replica.samsungOvenCommon, line 370
} // library marker replica.samsungOvenCommon, line 371
} // library marker replica.samsungOvenCommon, line 372
return seconds // library marker replica.samsungOvenCommon, line 373
} // library marker replica.samsungOvenCommon, line 374
// ~~~~~ end include (1315) replica.samsungOvenCommon ~~~~~
// ~~~~~ start include (1304) replica.samsungReplicaChildCommon ~~~~~
library ( // library marker replica.samsungReplicaChildCommon, line 1
name: "samsungReplicaChildCommon", // library marker replica.samsungReplicaChildCommon, line 2
namespace: "replica", // library marker replica.samsungReplicaChildCommon, line 3
author: "Dave Gutheinz", // library marker replica.samsungReplicaChildCommon, line 4
description: "Common Methods for replica Samsung Appliances children", // library marker replica.samsungReplicaChildCommon, line 5
category: "utilities", // library marker replica.samsungReplicaChildCommon, line 6
documentationLink: "" // library marker replica.samsungReplicaChildCommon, line 7
) // library marker replica.samsungReplicaChildCommon, line 8
// Version 1.0 // library marker replica.samsungReplicaChildCommon, line 9
import groovy.json.JsonSlurper // library marker replica.samsungReplicaChildCommon, line 10
def checkCapabilities(components) { // library marker replica.samsungReplicaChildCommon, line 12
def componentId = getDataValue("componentId") // library marker replica.samsungReplicaChildCommon, line 13
def disabledCapabilities = [] // library marker replica.samsungReplicaChildCommon, line 14
try { // library marker replica.samsungReplicaChildCommon, line 15
disabledCapabilities << components[componentId]["custom.disabledCapabilities"].disabledCapabilities.value // library marker replica.samsungReplicaChildCommon, line 16
} catch (e) { } // library marker replica.samsungReplicaChildCommon, line 17
def enabledCapabilities = [] // library marker replica.samsungReplicaChildCommon, line 18
Map description = new JsonSlurper().parseText(parent.getDataValue("description")) // library marker replica.samsungReplicaChildCommon, line 19
def descComponent = description.components.find { it.id == componentId } // library marker replica.samsungReplicaChildCommon, line 20
descComponent.capabilities.each { capability -> // library marker replica.samsungReplicaChildCommon, line 21
if (designCapabilities().contains(capability.id) && // library marker replica.samsungReplicaChildCommon, line 22
!disabledCapabilities.contains(capability.id)) { // library marker replica.samsungReplicaChildCommon, line 23
enabledCapabilities << capability.id // library marker replica.samsungReplicaChildCommon, line 24
} // library marker replica.samsungReplicaChildCommon, line 25
} // library marker replica.samsungReplicaChildCommon, line 26
state.deviceCapabilities = enabledCapabilities // library marker replica.samsungReplicaChildCommon, line 27
runIn(1, refreshAttributes, [data: components]) // library marker replica.samsungReplicaChildCommon, line 28
logInfo("checkCapabilities: [disabled: ${disabledCapabilities}, enabled: ${enabledCapabilities}]") // library marker replica.samsungReplicaChildCommon, line 29
} // library marker replica.samsungReplicaChildCommon, line 30
def refreshAttributes(components) { // library marker replica.samsungReplicaChildCommon, line 32
logDebug("refreshAttributes: ${component}") // library marker replica.samsungReplicaChildCommon, line 33
def component = components."${getDataValue("componentId")}" // library marker replica.samsungReplicaChildCommon, line 34
component.each { capability -> // library marker replica.samsungReplicaChildCommon, line 35
capability.value.each { attribute -> // library marker replica.samsungReplicaChildCommon, line 36
parseEvent([capability: capability.key, // library marker replica.samsungReplicaChildCommon, line 37
attribute: attribute.key, // library marker replica.samsungReplicaChildCommon, line 38
value: attribute.value.value, // library marker replica.samsungReplicaChildCommon, line 39
unit: attribute.value.unit]) // library marker replica.samsungReplicaChildCommon, line 40
pauseExecution(100) // library marker replica.samsungReplicaChildCommon, line 41
} // library marker replica.samsungReplicaChildCommon, line 42
} // library marker replica.samsungReplicaChildCommon, line 43
listAttributes(false) // library marker replica.samsungReplicaChildCommon, line 44
} // library marker replica.samsungReplicaChildCommon, line 45
void parentEvent(Map event) { // library marker replica.samsungReplicaChildCommon, line 47
if (event.deviceEvent.componentId == getDataValue("componentId")) { // library marker replica.samsungReplicaChildCommon, line 48
try { // library marker replica.samsungReplicaChildCommon, line 49
parseEvent(event.deviceEvent) // library marker replica.samsungReplicaChildCommon, line 50
} catch (err) { // library marker replica.samsungReplicaChildCommon, line 51
logWarn("replicaEvent: [event = ${event}, error: ${err}") // library marker replica.samsungReplicaChildCommon, line 52
} // library marker replica.samsungReplicaChildCommon, line 53
} // library marker replica.samsungReplicaChildCommon, line 54
} // library marker replica.samsungReplicaChildCommon, line 55
// ===== Device Commands ===== // library marker replica.samsungReplicaChildCommon, line 57
def refresh() { parent.refresh() } // library marker replica.samsungReplicaChildCommon, line 58
// ~~~~~ end include (1304) replica.samsungReplicaChildCommon ~~~~~
// ~~~~~ start include (1303) davegut.Logging ~~~~~
library ( // library marker davegut.Logging, line 1
name: "Logging", // library marker davegut.Logging, line 2
namespace: "davegut", // library marker davegut.Logging, line 3
author: "Dave Gutheinz", // library marker davegut.Logging, line 4
description: "Common Logging Methods", // library marker davegut.Logging, line 5
category: "utilities", // library marker davegut.Logging, line 6
documentationLink: "" // library marker davegut.Logging, line 7
) // library marker davegut.Logging, line 8
preferences { // library marker davegut.Logging, line 10
input ("logEnable", "bool", title: "Enable debug logging for 30 minutes", defaultValue: false) // library marker davegut.Logging, line 11
input ("infoLog", "bool", title: "Enable information logging${helpLogo()}",defaultValue: true) // library marker davegut.Logging, line 12
input ("traceLog", "bool", title: "Enable trace logging as directed by developer", defaultValue: false) // library marker davegut.Logging, line 13
} // library marker davegut.Logging, line 14
// Logging during development // library marker davegut.Logging, line 16
def listAttributes(trace = false) { // library marker davegut.Logging, line 17
def attrs = device.getSupportedAttributes() // library marker davegut.Logging, line 18
def attrList = [:] // library marker davegut.Logging, line 19
attrs.each { // library marker davegut.Logging, line 20
def val = device.currentValue("${it}") // library marker davegut.Logging, line 21
attrList << ["${it}": val] // library marker davegut.Logging, line 22
} // library marker davegut.Logging, line 23
if (trace == true) { // library marker davegut.Logging, line 24
logInfo("Attributes: ${attrList}") // library marker davegut.Logging, line 25
} else { // library marker davegut.Logging, line 26
logDebug("Attributes: ${attrList}") // library marker davegut.Logging, line 27
} // library marker davegut.Logging, line 28
} // library marker davegut.Logging, line 29
def logTrace(msg){ // library marker davegut.Logging, line 31
if (traceLog == true) { // library marker davegut.Logging, line 32
log.trace "${device.displayName}-${driverVer()}: ${msg}" // library marker davegut.Logging, line 33
} // library marker davegut.Logging, line 34
} // library marker davegut.Logging, line 35
def traceLogOff() { // library marker davegut.Logging, line 37
device.updateSetting("traceLog", [type:"bool", value: false]) // library marker davegut.Logging, line 38
logInfo("traceLogOff") // library marker davegut.Logging, line 39
} // library marker davegut.Logging, line 40
def logInfo(msg) { // library marker davegut.Logging, line 42
if (textEnable || infoLog) { // library marker davegut.Logging, line 43
log.info "${device.displayName}-${driverVer()}: ${msg}" // library marker davegut.Logging, line 44
} // library marker davegut.Logging, line 45
} // library marker davegut.Logging, line 46
def debugLogOff() { // library marker davegut.Logging, line 48
device.updateSetting("logEnable", [type:"bool", value: false]) // library marker davegut.Logging, line 49
logInfo("debugLogOff") // library marker davegut.Logging, line 50
} // library marker davegut.Logging, line 51
def logDebug(msg) { // library marker davegut.Logging, line 53
if (logEnable || debugLog) { // library marker davegut.Logging, line 54
log.debug "${device.displayName}-${driverVer()}: ${msg}" // library marker davegut.Logging, line 55
} // library marker davegut.Logging, line 56
} // library marker davegut.Logging, line 57
def logWarn(msg) { log.warn "${device.displayName}-${driverVer()}: ${msg}" } // library marker davegut.Logging, line 59
// ~~~~~ end include (1303) davegut.Logging ~~~~~