From ca6ee26ecce668e546c9f7ff148832093f147833 Mon Sep 17 00:00:00 2001 From: timberjoegithub Date: Sun, 12 Feb 2017 12:50:08 -0500 Subject: [PATCH] Create PhotonDS18B20 --- PhotonDS18B20 | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 PhotonDS18B20 diff --git a/PhotonDS18B20 b/PhotonDS18B20 new file mode 100644 index 0000000..24456a9 --- /dev/null +++ b/PhotonDS18B20 @@ -0,0 +1,78 @@ +/** + * Copyright 2015 SmartThings + * + * 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. + * + */ +metadata { + definition (name: "DS18B20 Temperature Sensor", namespace: "smartthings", author: "github@josephsteele.com") { + capability "Temperature Measurement" + capability "Sensor" + + fingerprint profileId: "0104", deviceId: "0302", inClusters: "0000,0001,0003,0009,0402,0405" + } + + // simulator metadata + simulator { + for (int i = 0; i <= 100; i += 10) { + status "${i}F": "temperature: $i F" + } + } + + // UI tile definitions + tiles { + valueTile("temperature", "device.temperature", width: 2, height: 2) { + state("temperature", label:'${currentValue}°', + backgroundColors:[ + [value: 31, color: "#153591"], + [value: 44, color: "#1e9cbb"], + [value: 59, color: "#90d2a7"], + [value: 74, color: "#44b621"], + [value: 84, color: "#f1d801"], + [value: 95, color: "#d04e00"], + [value: 96, color: "#bc2323"] + ] + ) + } + + + main(["temperature"]) + details(["temperature"]) + } +} + +// Parse incoming device messages to generate events +def parse(String description) { + def name = parseName(description) + def value = parseValue(description) + def unit = name == "temperature" ? getTemperatureScale() : (name == "humidity" ? "%" : null) + def result = createEvent(name: name, value: value, unit: unit) + log.debug "Parse returned ${result?.descriptionText}" + return result +} + +private String parseName(String description) { + if (description?.startsWith("temperature: ")) { + return "temperature" + } + null +} + +private String parseValue(String description) { + if (description?.startsWith("temperature: ")) { + return zigbee.parseHATemperatureValue(description, "temperature: ", getTemperatureScale()) + } else if (description?.startsWith("humidity: ")) { + def pct = (description - "humidity: " - "%").trim() + if (pct.isNumber()) { + return Math.round(new BigDecimal(pct)).toString() + } + } + null +}