Open utocen opened 6 years ago
I propose the following addition to support Xiaomi Outlet temperature offset:
metadata { <snip> preferences { section { input title: "Temperature Offset", description: "This feature allows you to correct any temperature variations by selecting an offset. Ex: If your sensor consistently reports a temp that's 5 degrees too warm, you'd enter '-5'. If 3 degrees too cold, enter '+3'. Please note, any changes will take effect only on the NEXT temperature change.", displayDuringSetup: false, type: "paragraph", element: "paragraph" input "tempOffset", "number", title: "Degrees", description: "Adjust temperature by this many degrees", range: "*..*", displayDuringSetup: false } } <snip> private Map parseReportAttributeMessage(String description) { Map descMap = (description - "read attr - ").split(",").inject([:]) { map, param -> def nameAndValue = param.split(":") map += [(nameAndValue[0].trim()):nameAndValue[1].trim()] } //log.debug "Desc Map: $descMap" Map resultMap = [:] if (descMap.cluster == "0001" && descMap.attrId == "0020") { resultMap = getBatteryResult(convertHexToInt(descMap.value / 2)) } if (descMap.cluster == "0002" && descMap.attrId == "0000") { def value = zigbee.parseHATemperatureValue("temperature: " + (convertHexToInt(descMap.value) / 2), "temperature: ", getTemperatureScale()) as Float log.debug "Value is $value, tempOffset is $tempOffset" def correctedtemp if (getTemperatureScale() == "C") { if (tempOffset) { correctedtemp= (Math.round(value * 10))/ 10 + tempOffset as Float } else { correctedtemp= (Math.round(value * 10))/ 10 as Float } } else { if (tempOffset) { correctedtemp= (Math.round(value * 90/5))/10 + 32 + tempOffset as Float } else { correctedtemp= (Math.round(value * 90/5))/10 + 32 as Float } } log.debug "Corrected temp is $correctedtemp" resultMap = createEvent(name: "temperature", value: correctedtemp, unit: getTemperatureScale()) log.debug "Temperature Hex convert to ${resultMap.value}%" } else if (descMap.cluster == "0008" && descMap.attrId == "0000") { resultMap = createEvent(name: "switch", value: "off") } return resultMap }
I second this. My outlet reports 6 deg c less than the temp sensor, in the same spot.
I propose the following addition to support Xiaomi Outlet temperature offset: