Aeotec aerQ temp/humidity/sensor?

Hi all.

Have any of you seen or tried this yet? I’ve been looking for a z-wave temp/humidity sensor (only) and this looks like it could fit the bill. Doesn’t appear to be working with Smartthings entirely just yet but has potential.

Thanks!

When I read the Q&A on Amazon, it stated the following:

aerQ Sensor is not yet compatible with SmartThings, but you could manually change the device handler to use “Z-Wave Water/Temp/Humidity Sensor” which should work in SmartThings IDE to get Temperature and Humidity reports. This sensor should be compatible with SmartThings in the near future.
By Aeotec Home on December 29, 2020

You have to create a new DH. I have attached a JPEG file with the customer DH that Aeotec gave to me. After you create the DH and then publish it to yourself, the Temperature and Humidity can bee added to you SmartThings app.

Thanks. What attribute does the tile display for this device handler, temp or humidity?

This device handler will give you temperature, humidity and battery for the Aeotec Temperature and Humidity sensor.

Thanks. I think what I was asking is that when you look at the tile in a room on the app you see one of the attributes; for this device/handler which is it? Temperature I assume?

Is there any chance you can upload as a plain text file? I’ve tried copy pasting from your other thread on this and no luck. Looks like the jpg isn’t the complete handler either.

Thank you!! Just got one of these sensors and the DH aeotech has on there site for the device is from 2018 and diff from what you’ve posted. Doesn’t seem to have any auto updates nor display batt level or temp correctly

I’m not really sure how to upload a txt file. Here it is just pasted into this reply.

/**

  • Copyright 2020 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.
  • Generic Z-Wave Water/Temp/Humidity Sensor
  • Author: SmartThings
  • Date: 2020-07-06
    */

metadata {
definition(name: “Z-Wave Temp/Humidity Sensor”, namespace: “smartthings”, author: “SmartThings”, mnmn: “SmartThings”, vid: “generic-leak-5”, ocfDeviceType: “x.com.st.d.sensor.moisture”) {
capability “Water Sensor”
capability “Temperature Measurement”
capability “Relative Humidity Measurement”
capability “Tamper Alert”
capability “Battery”
capability “Sensor”
capability “Health Check”
capability “Configuration”

	fingerprint mfr:"0154", prod:"0004", model:"0014", deviceJoinName: "Popp Mold Detector", mnmn: "SmartThings", vid: "aeotec-water-sensor-7-pro" //EU //Mold Detector
    fingerprint mfr:"0371", prod:"0002", model:"0009", deviceJoinName: "Temperature Humidity Sensor", mnmn: "SmartThings", vid: "aeotec-water-sensor-7-pro" //EU //aerQ Sensor
    fingerprint mfr:"0371", prod:"0102", model:"0009", deviceJoinName: "Temperature Humidity Sensor", mnmn: "SmartThings", vid: "aeotec-water-sensor-7-pro" //US //aerQ Sensor
}

tiles(scale: 2) {
	multiAttributeTile(name: "water", type: "generic", width: 6, height: 4) {
		tileAttribute("device.water", key: "PRIMARY_CONTROL") {
			attributeState("dry", label:'${name}', icon: "st.alarm.water.dry", backgroundColor: "#ffffff")
			attributeState("wet", label:'${name}', icon: "st.alarm.water.wet", backgroundColor: "#00A0DC")
		}
	}
	valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat", width: 2, height: 2) {
		state "battery", label: '${currentValue}% battery'
	}
	valueTile("humidity", "device.humidity", inactiveLabel: false, width: 2, height: 2) {
		state "humidity", label: '${currentValue}% humidity', unit: ""
	}
	valueTile("temperature", "device.temperature", width: 2, height: 2) {
		state("temperature", label: '${currentValue}°',
				backgroundColors: [
						// Celsius
						[value: 0, color: "#153591"],
						[value: 7, color: "#1e9cbb"],
						[value: 15, color: "#90d2a7"],
						[value: 23, color: "#44b621"],
						[value: 28, color: "#f1d801"],
						[value: 35, color: "#d04e00"],
						[value: 37, color: "#bc2323"],
						// Fahrenheit
						[value: 40, 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"]
				])
	}
    /*valueTile("dewpoint", "device.dewpoint", width: 2, height: 2) {
		state("dewpoint", label: '${currentValue}°',
				backgroundColors: [
						// Celsius
						[value: 0, color: "#153591"],
						[value: 7, color: "#1e9cbb"],
						[value: 15, color: "#90d2a7"],
						[value: 23, color: "#44b621"],
						[value: 28, color: "#f1d801"],
						[value: 35, color: "#d04e00"],
						[value: 37, color: "#bc2323"],
						// Fahrenheit
						[value: 40, 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"]
				])
	}*/
	valueTile("tamper", "device.tamper", height: 2, width: 2, decoration: "flat") {
		state "clear", label: 'tamper clear', backgroundColor: "#ffffff"
		state "detected", label: 'tampered', backgroundColor: "#ff0000"
	}

	main (["humidity", "temperature"])
	details(["humidity", "temperature", "battery", "tamper"])
}

}

def installed() {
clearTamper()
response([
secure(zwave.batteryV1.batteryGet()),
“delay 500”,
secure(zwave.notificationV3.notificationGet(notificationType: 0x05)), // water
“delay 500”,
secure(zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 0x01)), // temperature
“delay 500”,
secure(zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 0x05)), // humidity
“delay 500”,
//secure(zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 0x0B)), // dewpoint
//“delay 500”,
secure(zwave.wakeUpV2.wakeUpNoMoreInformation())
])
}

def updated() {
configure()
}

def configure() {
sendEvent(name: “checkInterval”, value: 8 * 60 * 60 + 10 * 60, displayed: false, data: [protocol: “zwave”, hubHardwareId: device.hub.hardwareID])
}

def parse(String description) {
def results =

if (description.startsWith("Err")) {
	results += createEvent(descriptionText: description, displayed: true)
} else {
	def cmd = zwave.parse(description)
	if (cmd) {
		results += zwaveEvent(cmd)
	}
}

log.debug "parse() result ${results.inspect()}"

return results

}

def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulation cmd) {
def encapsulatedCommand = cmd.encapsulatedCommand()

if (encapsulatedCommand) {
	zwaveEvent(encapsulatedCommand)
} else {
	log.warn "Unable to extract encapsulated cmd from $cmd"
	createEvent(descriptionText: cmd.toString())
}

}

def zwaveEvent(physicalgraph.zwave.commands.notificationv3.NotificationReport cmd) {
log.debug "Notification " +cmd
if (cmd.notificationType == 0x05) {
if (cmd.event == 0x01 || cmd.event == 0x02) {
sensorWaterEvent(1)
} else if (cmd.event == 0x00) {
sensorWaterEvent(0)
}
} else if (cmd.notificationType == 0x07) {
if (cmd.event == 0x03) {
runIn(10, clearTamper, [overwrite: true, forceForLocallyExecuting: true])
createEvent(name: “tamper”, value: “detected”, descriptionText: “$device.displayName was tampered”)
} else if (cmd.event == 0x00) {
createEvent(name: “tamper”, value: “clear”)
}
}
}

def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv2.SensorBinaryReport cmd) {
log.debug "Sensor Binary " +cmd
return sensorWaterEvent(cmd.sensorValue)
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd) {
log.debug "BASIC " +cmd
return sensorWaterEvent(cmd.value)
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd) {
log.debug "BASIC " +cmd
return sensorWaterEvent(cmd.value)
}

def zwaveEvent(physicalgraph.zwave.commands.sensoralarmv1.SensorAlarmReport cmd) {
log.debug "Sensor Alarm " +cmd
return sensorWaterEvent(cmd.sensorState)
}

def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd) {
def map = [name: “battery”, unit: “%”, isStateChange: true]
state.lastbatt = now()

if (cmd.batteryLevel == 0xFF) {
	map.value = 1
	map.descriptionText = "$device.displayName battery is low!"
} else {
	map.value = cmd.batteryLevel
}

createEvent(map)

}

def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv5.SensorMultilevelReport cmd) {
def map = [:]

switch (cmd.sensorType) {
	case 0x01:
		map.name = "temperature"
        map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmd.scale == 1 ? "F" : "C", cmd.precision)
		map.unit = temperatureScale
		break
	case 0x05:
		map.name = "humidity"
		map.value = cmd.scaledSensorValue.toInteger()
		map.unit = "%"
		break
	/*case 0x0B:
    	map.name = "dewpoint"
		map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmd.scale == 1 ? "F" : "C", cmd.precision)
		map.unit = temperatureScale
		break*/
    default:
		map.descriptionText = cmd.toString()
}

createEvent(map)

}

def zwaveEvent(physicalgraph.zwave.commands.wakeupv2.WakeUpNotification cmd) {
def cmds =
def result = createEvent(descriptionText: “$device.displayName woke up”, isStateChange: false)
//cmds += secure(zwave.batteryV1.batteryGet())

if (!state.lastbatt || (now() - state.lastbatt) >= 10 * 60 * 60 * 1000) {
	cmds += ["delay 1000",
			 secure(zwave.batteryV1.batteryGet()),
			 "delay 2000"
	]
}

cmds += secure(zwave.wakeUpV2.wakeUpNoMoreInformation())

[result, response(cmds)]

}

def zwaveEvent(physicalgraph.zwave.Command cmd) {
log.warn “Unhandled command: ${cmd}”
}

def sensorWaterEvent(value) {
log.debug “water event”
if (value) {
createEvent(name: “water”, value: “wet”, descriptionText: “$device.displayName detected water leakage”)
} else {
createEvent(name: “water”, value: “dry”, descriptionText: “$device.displayName detected that leakage is no longer present”)
}
}

def clearTamper() {
sendEvent(name: “tamper”, value: “clear”)
}

private secure(cmd) {
if (zwaveInfo.zw.contains(“s”)) {
zwave.securityV1.securityMessageEncapsulation().encapsulate(cmd).format()
} else {
cmd.format()
}
}

Could be that I’m a noob lol

Issue I’m having is with the attached screen caps - there is a “box” character in two spots…

!

https://raw.githubusercontent.com/SmartThingsCommunity/SmartThingsPublic/master/devicetypes/smartthings/zwave-water-temp-humidity-sensor.src/zwave-water-temp-humidity-sensor.groovy

Here’s the dth in copy paste form from another thread.

The official link for the Aerq, handler link and instructions inside.

They’re still working on the handler to show temperature on the device icon. Hope they would also include a temperature offset setting in the future.

1 Like

New handler from Aeotec (Jan 22). Tile updated.
Copy code from (https://github.com/Aeotec-ccheng/SmartThingsPublic/blob/aerQ/devicetypes/smartthings/
aeotec-aerq.src/aeotec-aerq.groovy), and paste it into the code section.

1 Like

Is this working now? I know aeotec has been working on the dth. Would like to buy 1 to try.

I just updated with the new handler, but it shows the humidity instead of temperature on the tile.

So it’s only showing humidity? What about dew point?

it shows temperature, humidity and battery only on Smartthings app

Oh, didn’t know that. Will they be adding dew point?

The dew point calculation was there if you look under the device status (Smartthings IDE), but I’m not sure if they will add it to the apps detail view.
At this point there’s still a lot of improvement going on like the handler and the battery bug. Two out of six of my Aerq got the battery bug which it shows 0 or 20% battery (battery over 3.1v which supposed to be 100%) and on some other units the battery drops 20% in one day. At this moment I’m not confident that the battery would last long, probably 2 months (report every hour). Also it uses the CR2477 battery which would be hard to find except you go for some cheap brand and don’t think those would last long either.
I also have the Aeotec Multi Sensor 6 which in my opinion would be a much better choice. Have motion sensor…etc…The battery life was so good using 2x CR123A, still small, works perfectly with Smartthings.

1 Like

CR2477 battery was a weird choice, not exactly widely used in the U.S. I also would have preferred they used the more common - CR123A (even if its just one battery), and use it consistently across the board (They have the new door open/close sensor using 1/2 AA battery, also not common in the U.S.).

I have new AerQ unit reporting 50% battery, not sure if its true or not. But the default every 15 minute seems excessive. For rooms where i don’t expect large temperature fluctuation but like to keep an eye on humidity, I set the unit to report every 6 hours. For Attic where both temperature and humidity fluctuate wildly between night and day, its fixed report every 6 hours, plus ad-hoc reporting when either temperature or humidity changes by 10F and 10% so I know when either drastically changed.