/* HubiThings Replica Samsung Oven Driver HubiThings Replica Applications Copyright 2023 by Bloodtick Replica RangeOven Copyright 2023 by Dave Gutheinz 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. Changes: 1.0-1 a. Changed link to help file and moved to library samsungDryerCommon b. Added logging prefs to library logging. c. Changed sendRawCommand to use dataValue replica vice description. Issues with this driver: Contact davegut via Private Message on the Hubitat Community site: https://community.hubitat.com/ ==========================================================================*/ def driverVer() { return "1.0-1" } def appliance() { return "ReplicaSamsungOven" } metadata { definition (name: appliance(), namespace: "replica", author: "David Gutheinz", importUrl: "https://raw.githubusercontent.com/DaveGut/HubithingsReplica/main/Drivers/${appliance()}.groovy" ){ capability "Configuration" capability "Refresh" attribute "healthStatus", "enum", ["offline", "online"] attribute "lockState", "string" command "setOvenLight", [[name: "from state.supported BrightnessLevels", type: "STRING"]] attribute "brightnessLevel", "string" attribute "remoteControlEnabled", "boolean" attribute "doorState", "string" attribute "cooktopOperatingState", "string" command "setProbeSetpoint", [[name: "probe alert temperature", type: "NUMBER"]] attribute "probeSetpoint", "number" attribute "probeStatus", "string" attribute "probeTemperature", "number" } preferences { } } // ===== Installation, setup and update ===== def installed() { updateDataValue("componentId", "main") runIn(1, updated) } def updated() { unschedule() pauseExecution(2000) 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] runIn(3, configure) logInfo("updated: ${updStatus}") } def designCapabilities() { return ["refresh", "remoteControlStatus", "ovenSetpoint", "ovenMode", "ovenOperatingState", "temperatureMeasurement", "samsungce.doorState", "samsungce.ovenMode", "samsungce.ovenOperatingState", "samsungce.meatProbe", "samsungce.lamp", "samsungce.kidsLock", "custom.cooktopOperatingState"] } Map designChildren() { return ["cavity-01": "Cavity"] } def sendRawCommand(component, capability, command, arguments = []) { Map status = [:] def rcEnabled = device.currentValue("remoteControlEnabled") if (rcEnabled) { def deviceId = new JSONObject(getDataValue("replica")).deviceId def cmdStatus = parent.setSmartDeviceCommand(deviceId, component, capability, command, arguments) def cmdData = [component, capability, command, arguments, cmdStatus] status << [cmdData: cmdData] } else { status << [FAILED: [rcEnabled: rcEnabled]] } return status } // ===== Device Commands ===== // Common parent/child Oven commands are in library replica.samsungReplicaOvenCommon def setProbeSetpoint(temperature) { temperature = temperature.toInteger() def isCapability = state.deviceCapabilities.contains("samsungce.meatProbe") Map cmdStatus = [temperature: temperature, isCapability: isCapability] def probeStatus = device.currentValue("probeStatus") if (isCapability && probeStatus == "connected") { if (temperature > 0) { cmdStatus << sendRawCommand(getDataValue("componentId"), "samsungce.meatProbe", "setTemperatureSetpoint", [temperature]) } else { cmdStatus << [FAILED: "invalidTemperature"] } } else { cmdStatus << [FAILED: [probeStatus: probeStatus]] } logInfo("setProbeSetpoint: ${cmdStatus}") } def setOvenLight(lightLevel) { lightLevel = state.supportedBrightnessLevel.find { it.toLowerCase() == lightLevel.toLowerCase() } def isCapability = state.deviceCapabilities.contains("samsungce.lamp") Map cmdStatus = [lightLevel: lightLevel, isCapability: isCapability] if (lightLevel != null && isCapability) { cmdStatus << sendRawCommand(getDataValue("componentId"), "samsungce.lamp", "setBrightnessLevel", [lightLevel]) } else { cmdStatus << [FAILED: "invalidLightLevel"] } logInfo("setOvenLight: ${cmdStatus}") } // ===== 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 (1305) replica.samsungReplicaCommon ~~~~~ library ( // library marker replica.samsungReplicaCommon, line 1 name: "samsungReplicaCommon", // library marker replica.samsungReplicaCommon, line 2 namespace: "replica", // library marker replica.samsungReplicaCommon, line 3 author: "Dave Gutheinz", // library marker replica.samsungReplicaCommon, line 4 description: "Common Methods for replica Samsung Appliances", // library marker replica.samsungReplicaCommon, line 5 category: "utilities", // library marker replica.samsungReplicaCommon, line 6 documentationLink: "" // library marker replica.samsungReplicaCommon, line 7 ) // library marker replica.samsungReplicaCommon, line 8 // version 1.0 // library marker replica.samsungReplicaCommon, line 9 import org.json.JSONObject // library marker replica.samsungReplicaCommon, line 11 import groovy.json.JsonOutput // library marker replica.samsungReplicaCommon, line 12 import groovy.json.JsonSlurper // library marker replica.samsungReplicaCommon, line 13 def configure() { // library marker replica.samsungReplicaCommon, line 15 Map logData = [:] // library marker replica.samsungReplicaCommon, line 16 updateDataValue("triggers", groovy.json.JsonOutput.toJson(getReplicaTriggers())) // library marker replica.samsungReplicaCommon, line 17 updateDataValue("commands", groovy.json.JsonOutput.toJson(getReplicaCommands())) // library marker replica.samsungReplicaCommon, line 18 updateDataValue("rules", getReplicaRules()) // library marker replica.samsungReplicaCommon, line 19 logData << [triggers: "initialized", commands: "initialized", rules: "initialized"] // library marker replica.samsungReplicaCommon, line 20 logData << [replicaRules: "initialized"] // library marker replica.samsungReplicaCommon, line 21 state.checkCapabilities = true // library marker replica.samsungReplicaCommon, line 22 sendCommand("configure") // library marker replica.samsungReplicaCommon, line 23 logData: [device: "configuring HubiThings"] // library marker replica.samsungReplicaCommon, line 24 runIn(5, listAttributes,[data:true]) // library marker replica.samsungReplicaCommon, line 25 logInfo("configure: ${logData}") // library marker replica.samsungReplicaCommon, line 26 } // library marker replica.samsungReplicaCommon, line 27 Map getReplicaCommands() { // library marker replica.samsungReplicaCommon, line 29 return (["replicaEvent":[[name:"parent*",type:"OBJECT"],[name:"event*",type:"JSON_OBJECT"]], // library marker replica.samsungReplicaCommon, line 30 "replicaStatus":[[name:"parent*",type:"OBJECT"],[name:"event*",type:"JSON_OBJECT"]], // library marker replica.samsungReplicaCommon, line 31 "replicaHealth":[[name:"parent*",type:"OBJECT"],[name:"health*",type:"JSON_OBJECT"]], // library marker replica.samsungReplicaCommon, line 32 "setHealthStatusValue":[[name:"healthStatus*",type:"ENUM"]]]) // library marker replica.samsungReplicaCommon, line 33 } // library marker replica.samsungReplicaCommon, line 34 Map getReplicaTriggers() { // library marker replica.samsungReplicaCommon, line 36 return [refresh:[], deviceRefresh: []] // library marker replica.samsungReplicaCommon, line 37 } // library marker replica.samsungReplicaCommon, line 38 String getReplicaRules() { // library marker replica.samsungReplicaCommon, line 40 return """{"version":1,"components":[{"trigger":{"type":"attribute","properties":{"value":{"title":"HealthState","type":"string"}},"additionalProperties":false,"required":["value"],"capability":"healthCheck","attribute":"healthStatus","label":"attribute: healthStatus.*"},"command":{"name":"setHealthStatusValue","label":"command: setHealthStatusValue(healthStatus*)","type":"command","parameters":[{"name":"healthStatus*","type":"ENUM"}]},"type":"smartTrigger","mute":true},{"trigger":{"name":"refresh","label":"command: refresh()","type":"command"},"command":{"name":"refresh","type":"command","capability":"refresh","label":"command: refresh()"},"type":"hubitatTrigger"},{"trigger":{"name":"deviceRefresh","label":"command: deviceRefresh()","type":"command"},"command":{"name":"refresh","type":"command","capability":"refresh","label":"command: refresh()"},"type":"hubitatTrigger"}]}""" // library marker replica.samsungReplicaCommon, line 41 } // library marker replica.samsungReplicaCommon, line 42 // ===== Event Parse Interface s===== // library marker replica.samsungReplicaCommon, line 44 void replicaStatus(def parent=null, Map status=null) { // library marker replica.samsungReplicaCommon, line 45 def logData = [parent: parent, status: status] // library marker replica.samsungReplicaCommon, line 46 if (state.checkCapabilities) { // library marker replica.samsungReplicaCommon, line 47 runIn(10, checkCapabilities, [data: status.components]) // library marker replica.samsungReplicaCommon, line 48 } else if (state.refreshAttributes) { // library marker replica.samsungReplicaCommon, line 49 refreshAttributes(status.components) // library marker replica.samsungReplicaCommon, line 50 } // library marker replica.samsungReplicaCommon, line 51 logDebug("replicaStatus: ${logData}") // library marker replica.samsungReplicaCommon, line 52 } // library marker replica.samsungReplicaCommon, line 53 def checkCapabilities(components) { // library marker replica.samsungReplicaCommon, line 55 state.checkCapabilities = false // library marker replica.samsungReplicaCommon, line 56 def componentId = getDataValue("componentId") // library marker replica.samsungReplicaCommon, line 57 def disabledCapabilities = [] // library marker replica.samsungReplicaCommon, line 58 try { // library marker replica.samsungReplicaCommon, line 59 disabledCapabilities << components[componentId]["custom.disabledCapabilities"].disabledCapabilities.value // library marker replica.samsungReplicaCommon, line 60 } catch (e) { } // library marker replica.samsungReplicaCommon, line 61 def enabledCapabilities = [] // library marker replica.samsungReplicaCommon, line 63 Map description // library marker replica.samsungReplicaCommon, line 64 try { // library marker replica.samsungReplicaCommon, line 65 description = new JsonSlurper().parseText(getDataValue("description")) // library marker replica.samsungReplicaCommon, line 66 } catch (error) { // library marker replica.samsungReplicaCommon, line 67 logWarn("checkCapabilities. Data element Description not loaded. Run Configure") // library marker replica.samsungReplicaCommon, line 68 } // library marker replica.samsungReplicaCommon, line 69 def thisComponent = description.components.find { it.id == componentId } // library marker replica.samsungReplicaCommon, line 70 thisComponent.capabilities.each { capability -> // library marker replica.samsungReplicaCommon, line 71 if (designCapabilities().contains(capability.id) && // library marker replica.samsungReplicaCommon, line 72 !disabledCapabilities.contains(capability.id)) { // library marker replica.samsungReplicaCommon, line 73 enabledCapabilities << capability.id // library marker replica.samsungReplicaCommon, line 74 } // library marker replica.samsungReplicaCommon, line 75 } // library marker replica.samsungReplicaCommon, line 76 state.deviceCapabilities = enabledCapabilities // library marker replica.samsungReplicaCommon, line 77 runIn(1, configureChildren, [data: components]) // library marker replica.samsungReplicaCommon, line 78 runIn(5, refreshAttributes, [data: components]) // library marker replica.samsungReplicaCommon, line 79 logInfo("checkCapabilities: [design: ${designCapabilities()}, disabled: ${disabledCapabilities}, enabled: ${enabledCapabilities}]") // library marker replica.samsungReplicaCommon, line 80 } // library marker replica.samsungReplicaCommon, line 81 // ===== Child Configure / Install ===== // library marker replica.samsungReplicaCommon, line 83 def configureChildren(components) { // library marker replica.samsungReplicaCommon, line 84 def logData = [:] // library marker replica.samsungReplicaCommon, line 85 def componentId = getDataValue("componentId") // library marker replica.samsungReplicaCommon, line 86 def disabledComponents = [] // library marker replica.samsungReplicaCommon, line 87 try { // library marker replica.samsungReplicaCommon, line 88 disabledComponents << components[componentId]["custom.disabledComponents"].disabledComponents.value // library marker replica.samsungReplicaCommon, line 89 } catch (e) { } // library marker replica.samsungReplicaCommon, line 90 designChildren().each { designChild -> // library marker replica.samsungReplicaCommon, line 91 if (disabledComponents.contains(designChild.key)) { // library marker replica.samsungReplicaCommon, line 92 logData << ["${designChild.key}": [status: "SmartThingsDisabled"]] // library marker replica.samsungReplicaCommon, line 93 } else { // library marker replica.samsungReplicaCommon, line 94 def dni = device.getDeviceNetworkId() // library marker replica.samsungReplicaCommon, line 95 def childDni = "${dni}-${designChild.key}" // library marker replica.samsungReplicaCommon, line 96 def child = getChildDevice(childDni) // library marker replica.samsungReplicaCommon, line 97 def name = "${device.displayName} ${designChild.key}" // library marker replica.samsungReplicaCommon, line 98 if (child == null) { // library marker replica.samsungReplicaCommon, line 99 def type = "${appliance()}${designChild.value}" // library marker replica.samsungReplicaCommon, line 100 try { // library marker replica.samsungReplicaCommon, line 101 addChildDevice("replica", "${type}", "${childDni}", [ // library marker replica.samsungReplicaCommon, line 102 name: type, // library marker replica.samsungReplicaCommon, line 103 label: name, // library marker replica.samsungReplicaCommon, line 104 componentId: designChild.key // library marker replica.samsungReplicaCommon, line 105 ]) // library marker replica.samsungReplicaCommon, line 106 logData << ["${name}": [status: "installed"]] // library marker replica.samsungReplicaCommon, line 107 } catch (error) { // library marker replica.samsungReplicaCommon, line 108 logData << ["${name}": [status: "FAILED", reason: error]] // library marker replica.samsungReplicaCommon, line 109 } // library marker replica.samsungReplicaCommon, line 110 } else { // library marker replica.samsungReplicaCommon, line 111 child.checkCapabilities(components) // library marker replica.samsungReplicaCommon, line 112 logData << ["${name}": [status: "already installed"]] // library marker replica.samsungReplicaCommon, line 113 } // library marker replica.samsungReplicaCommon, line 114 } // library marker replica.samsungReplicaCommon, line 115 } // library marker replica.samsungReplicaCommon, line 116 runIn(1, checkChildren, [data: components]) // library marker replica.samsungReplicaCommon, line 117 runIn(3, refreshAttributes, [data: components]) // library marker replica.samsungReplicaCommon, line 118 logInfo("configureChildren: ${logData}") // library marker replica.samsungReplicaCommon, line 119 } // library marker replica.samsungReplicaCommon, line 120 def checkChildren(components) { // library marker replica.samsungReplicaCommon, line 122 getChildDevices().each { // library marker replica.samsungReplicaCommon, line 123 it.checkCapabilities(components) // library marker replica.samsungReplicaCommon, line 124 } // library marker replica.samsungReplicaCommon, line 125 } // library marker replica.samsungReplicaCommon, line 126 // ===== Attributes // library marker replica.samsungReplicaCommon, line 128 def refreshAttributes(components) { // library marker replica.samsungReplicaCommon, line 129 state.refreshAttributes = false // library marker replica.samsungReplicaCommon, line 130 def component = components."${getDataValue("componentId")}" // library marker replica.samsungReplicaCommon, line 131 logDebug("refreshAttributes: ${component}") // library marker replica.samsungReplicaCommon, line 132 component.each { capability -> // library marker replica.samsungReplicaCommon, line 133 capability.value.each { attribute -> // library marker replica.samsungReplicaCommon, line 134 parseEvent([capability: capability.key, // library marker replica.samsungReplicaCommon, line 135 attribute: attribute.key, // library marker replica.samsungReplicaCommon, line 136 value: attribute.value.value, // library marker replica.samsungReplicaCommon, line 137 unit: attribute.value.unit]) // library marker replica.samsungReplicaCommon, line 138 pauseExecution(50) // library marker replica.samsungReplicaCommon, line 139 } // library marker replica.samsungReplicaCommon, line 140 } // library marker replica.samsungReplicaCommon, line 141 getChildDevices().each { // library marker replica.samsungReplicaCommon, line 142 it.refreshAttributes(components) // library marker replica.samsungReplicaCommon, line 143 } // library marker replica.samsungReplicaCommon, line 144 } // library marker replica.samsungReplicaCommon, line 145 void replicaHealth(def parent=null, Map health=null) { // library marker replica.samsungReplicaCommon, line 147 if(parent) { logInfo("replicaHealth: ${parent?.getLabel()}") } // library marker replica.samsungReplicaCommon, line 148 if(health) { logInfo("replicaHealth: ${health}") } // library marker replica.samsungReplicaCommon, line 149 } // library marker replica.samsungReplicaCommon, line 150 def setHealthStatusValue(value) { // library marker replica.samsungReplicaCommon, line 152 sendEvent(name: "healthStatus", value: value, descriptionText: "${device.displayName} healthStatus set to $value") // library marker replica.samsungReplicaCommon, line 153 } // library marker replica.samsungReplicaCommon, line 154 void replicaEvent(def parent=null, Map event=null) { // library marker replica.samsungReplicaCommon, line 156 if (event && event.deviceEvent.componentId == getDataValue("componentId")) { // library marker replica.samsungReplicaCommon, line 157 try { // library marker replica.samsungReplicaCommon, line 158 parseEvent(event.deviceEvent) // library marker replica.samsungReplicaCommon, line 159 } catch (err) { // library marker replica.samsungReplicaCommon, line 160 logWarn("replicaEvent: [event = ${event}, error: ${err}") // library marker replica.samsungReplicaCommon, line 161 } // library marker replica.samsungReplicaCommon, line 162 } else { // library marker replica.samsungReplicaCommon, line 163 getChildDevices().each { // library marker replica.samsungReplicaCommon, line 164 it.parentEvent(event) // library marker replica.samsungReplicaCommon, line 165 } // library marker replica.samsungReplicaCommon, line 166 } // library marker replica.samsungReplicaCommon, line 167 } // library marker replica.samsungReplicaCommon, line 168 def sendCommand(String name, def value=null, String unit=null, data=[:]) { // library marker replica.samsungReplicaCommon, line 170 parent?.deviceTriggerHandler(device, [name:name, value:value, unit:unit, data:data, now:now]) // library marker replica.samsungReplicaCommon, line 171 } // library marker replica.samsungReplicaCommon, line 172 // ===== Refresh Commands ===== // library marker replica.samsungReplicaCommon, line 174 def refresh() { // library marker replica.samsungReplicaCommon, line 175 logDebug("refresh") // library marker replica.samsungReplicaCommon, line 176 state.refreshAttributes = true // library marker replica.samsungReplicaCommon, line 177 sendCommand("deviceRefresh") // library marker replica.samsungReplicaCommon, line 178 runIn(1, sendCommand, [data: ["refresh"]]) // library marker replica.samsungReplicaCommon, line 179 } // library marker replica.samsungReplicaCommon, line 180 def deviceRefresh() { // library marker replica.samsungReplicaCommon, line 182 sendCommand("deviceRefresh") // library marker replica.samsungReplicaCommon, line 183 } // library marker replica.samsungReplicaCommon, line 184 // ~~~~~ end include (1305) replica.samsungReplicaCommon ~~~~~ // ~~~~~ 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 ~~~~~