Aeon Labs Multi Sensor Not Working with ST

I wanted to ask a couple of questions of the ST team, I guess @Ben in particular about plans for addressing the issues associated with the Aeon Labs Multi Sensor.

My issue is that I own 5 of these devices, all bought on the Smart Things store, so I am $275 into them plus tax. I have seen a lot of complaints about false positives on the motion when used outdoors as well as inaccuracies with the humidity, luminence and temperature. I have experienced all of that, but my main concern is that they simply do not reliably report the values to the ST hub that they claim they will.

According to @ryanh in ST support this is a known issue and there is no fix in sight.

Bottom line, I am looking at the event list for my 5 devices and the last time a temperature was reported on one was 15 hours ago. Another last reported temperature this morning at 6am, it’s now 3pm. The device in my 1 year olds room that is supposed to be controlling my ecovent hasn’t reported since 6pm last night. It’s the same for all 5 of my devices.

They seem to report something every 8 minutes. My understanding is that the correct behavior is they report any change every 8 minutes. Most of the time luminescence is reported every 8 minutes. Sometimes luminescence and humidity. The only thing I really care about, temperature, is almost never reported, or at least ridiculously infrequently.

I’ve talked to customer support many times about this. Typically repairing the mesh and or rebooting the hub makes the problem slightly better. They may start reporting every 8 minutes as I expect for a couple of hours, but they invariably go back to this very frustrating pattern. Often times it doesn’t help at all. It is kind of pathetic, but I keep my hub on an old rotary timer, so that it reboots every night at 2am. Recently this isn’t even helping. My desire is to use them to drive Keep Me Cozy II, but after waking up to my entire house at 85 degrees one too many times, I know I can’t do this anymore.

So I have three questions, I wasn’t getting a lot of answers from Customer Support, so I was hoping that if I am patient, somebody at ST could address my concerns when they get a moment.

  1. Is this an issue with ST or Aeon? Basically is the issue with my hub, or is it internal to the Aeon device? Does the multi sensor not report all of its data to any z-wave hub, or is it particular to ST?

  2. How can ST sell this device in their ‘shop’ when they “know” that there is an issue where it does not do what it says it does. The website says, “You Can: Use the multi-sensor with SmartApps to receive push or text notifications when motion, brightness, temperature, and humidity change.” The customer service representative I spoke to told me they knew that this did not work. They know for a fact that you can NOT do this, yet there it sits in their shop, blatantly claiming to do something it does not. Isn’t that rather disingenuous?

  3. Would they consider removing this item from their store, or at the very least put a disclaimer on the site that says, hey, we like this product, but it doesn’t actually work with ST right now? When we solve this problem, we will be more than glad to sell you one then. Isn’t that what a company that cared about their customers time and money would do?

I will say flatly that I love what I have been able to do with ST. I have over 100 “things” and it’s been a blast playing with it all, but when I shell out $275 for a product that just flat out does not do what they claim, and I have a representative of the company tell me “I’m afraid this is a known issue. We know it does not work”, I guess it’s hard for me to understand what to believe.

Hmmm. I have one, so not a great sample set, but have been logging data on it every 15 minutes for about 6 months and it seems consistent.

I wonder, with over 100 “things” on your hub, if somehow the radio is dropping checkins from some devices to keep up.

Not sure what the “known” issue is based on what you have stated. It is a struggle between constant check ins on changed values, polling for current state (which isn’t fully supported in ST, I believe) or waiting for a change state to push info… and then there is battery life.

My biggest complaint on the Aeon Multi sensor is the horrible battery life.

I didn’t buy mine through the ST store, but off amazon. Maybe there are different versions / firmwares?

As Patrick mentioned, have you tried updating the firmware on your Aeon Multis?

I started having the same problem over the last weekend at the same point I crossed 50 devices (up until that point they had worked flawlessly for a year). I also use them for the Keep Me Cozy 2 app.

The standard device type tells the sensor to send everything every 8 minutes (actually every 5 minutes but I have found the sensor will only report in multiples of 4 minutes). I made a custom device that tell the sensor to report the values individually at different intervals (temps every 4 minutes, humidity every 12 minutes, and light and battery every hour). I also increased the motion time from 15 seconds to 2 minutes based on personal preference. Since then, they are back to reporting flawlessly.

Once you put the custom device type you also need to follow these instructions: https://support.smartthings.com/hc/en-us/articles/200879104-My-Aeon-Multi-doesn-t-show-all-its-data

metadata {
	// Automatically generated. Make future change here.
	definition (name: "Aeon Multisensor-2 min", namespace: "smartthings", author: "SmartThings") {
		capability "Motion Sensor"
		capability "Temperature Measurement"
		capability "Relative Humidity Measurement"
		capability "Configuration"
		capability "Illuminance Measurement"
		capability "Sensor"
		capability "Battery"

		fingerprint deviceId: "0x2001", inClusters: "0x30,0x31,0x80,0x84,0x70,0x85,0x72,0x86"
	}

	simulator {
		// messages the device returns in response to commands it receives
		status "motion (basic)"     : "command: 2001, payload: FF"
		status "no motion (basic)"  : "command: 2001, payload: 00"
		status "motion (binary)"    : "command: 3003, payload: FF"
		status "no motion (binary)" : "command: 3003, payload: 00"

		for (int i = 0; i <= 100; i += 20) {
			status "temperature ${i}F": new physicalgraph.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(
				scaledSensorValue: i, precision: 1, sensorType: 1, scale: 1).incomingMessage()
		}

		for (int i = 0; i <= 100; i += 20) {
			status "humidity ${i}%": new physicalgraph.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(
				scaledSensorValue: i, precision: 0, sensorType: 5).incomingMessage()
		}

		for (int i = 0; i <= 100; i += 20) {
			status "luminance ${i} lux": new physicalgraph.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(
				scaledSensorValue: i, precision: 0, sensorType: 3).incomingMessage()
		}
		for (int i = 200; i <= 1000; i += 200) {
			status "luminance ${i} lux": new physicalgraph.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(
				scaledSensorValue: i, precision: 0, sensorType: 3).incomingMessage()
		}

		for (int i = 0; i <= 100; i += 20) {
			status "battery ${i}%": new physicalgraph.zwave.Zwave().batteryV1.batteryReport(
				batteryLevel: i).incomingMessage()
		}
	}

	tiles {
		standardTile("motion", "device.motion", width: 2, height: 2) {
			state "active", label:'motion', icon:"st.motion.motion.active", backgroundColor:"#53a7c0"
			state "inactive", label:'no motion', icon:"st.motion.motion.inactive", backgroundColor:"#ffffff"
		}
		valueTile("temperature", "device.temperature", inactiveLabel: false) {
			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"]
			]
		}
		valueTile("humidity", "device.humidity", inactiveLabel: false) {
			state "humidity", label:'${currentValue}% humidity', unit:""
		}
		valueTile("illuminance", "device.illuminance", inactiveLabel: false) {
			state "luminosity", label:'${currentValue} ${unit}', unit:"lux"
		}
		valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") {
			state "battery", label:'${currentValue}% battery', unit:""
		}
		standardTile("configure", "device.configure", inactiveLabel: false, decoration: "flat") {
			state "configure", label:'', action:"configuration.configure", icon:"st.secondary.configure"
		}

		main(["motion", "temperature", "humidity", "illuminance"])
		details(["motion", "temperature", "humidity", "illuminance", "battery", "configure"])
	}
}

// Parse incoming device messages to generate events
def parse(String description)
{
	def result = []
	def cmd = zwave.parse(description, [0x31: 2, 0x30: 1, 0x84: 1])
	if (cmd) {
		if( cmd.CMD == "8407" ) { result << new physicalgraph.device.HubAction(zwave.wakeUpV1.wakeUpNoMoreInformation().format()) }
		result << createEvent(zwaveEvent(cmd))
	}
	log.debug "Parse returned ${result}"
	return result
}

// Event Generation
def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd)
{
	[descriptionText: "${device.displayName} woke up", isStateChange: false]
}

def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv2.SensorMultilevelReport cmd)
{
	def map = [:]
	switch (cmd.sensorType) {
		case 1:
			// temperature
			def cmdScale = cmd.scale == 1 ? "F" : "C"
			map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision)
			map.unit = getTemperatureScale()
			map.name = "temperature"
			break;
		case 3:
			// luminance
			map.value = cmd.scaledSensorValue.toInteger().toString()
			map.unit = "lux"
			map.name = "illuminance"
			break;
		case 5:
			// humidity
			map.value = cmd.scaledSensorValue.toInteger().toString()
			map.unit = "%"
			map.name = "humidity"
			break;
	}
	map
}

def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd) {
	def map = [:]
	map.name = "battery"
	map.value = cmd.batteryLevel > 0 ? cmd.batteryLevel.toString() : 1
	map.unit = "%"
	map.displayed = false
	map
}

def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd) {
	def map = [:]
	map.value = cmd.sensorValue ? "active" : "inactive"
	map.name = "motion"
	if (map.value == "active") {
		map.descriptionText = "$device.displayName detected motion"
	}
	else {
		map.descriptionText = "$device.displayName motion has stopped"
	}
	map
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd) {
	def map = [:]
	map.value = cmd.value ? "active" : "inactive"
	map.name = "motion"
	if (map.value == "active") {
		map.descriptionText = "$device.displayName detected motion"
	}
	else {
		map.descriptionText = "$device.displayName motion has stopped"
	}
	map
}

def zwaveEvent(physicalgraph.zwave.Command cmd) {
	log.debug "Catchall reached for cmd: ${cmd.toString()}}"
	[:]
}

def configure() {
	delayBetween([
		// send binary sensor report instead of basic set for motion
		zwave.configurationV1.configurationSet(parameterNumber: 5, size: 1, scaledConfigurationValue: 2).format(),

		// send no-motion report 2 mintues after motion stops
		zwave.configurationV1.configurationSet(parameterNumber: 3, size: 2, scaledConfigurationValue: 120).format(),

		// send temperature data periodically
		zwave.configurationV1.configurationSet(parameterNumber: 101, size: 4, scaledConfigurationValue: 32).format(),
        
        // send humidity data periodically
		zwave.configurationV1.configurationSet(parameterNumber: 102, size: 4, scaledConfigurationValue: 64).format(),  
        
        // send illuminance & battery periodically
		zwave.configurationV1.configurationSet(parameterNumber: 103, size: 4, scaledConfigurationValue: 129).format(),
        
        // send temperature data every 4 minutes
		zwave.configurationV1.configurationSet(parameterNumber: 111, size: 4, scaledConfigurationValue: 230).format(),
        
        // send humidity data every 12 minutes
		zwave.configurationV1.configurationSet(parameterNumber: 112, size: 4, scaledConfigurationValue: 710).format(),

		// send illuminance & battery every 1 hour
		zwave.configurationV1.configurationSet(parameterNumber: 113, size: 4, scaledConfigurationValue: 3590).format()
	])
}
5 Likes

Here is a graph of how the sensor has been reporting over the last 7 days. The flat areas in the middle are where it stopped reporting temperature regularly (humidity, light and battery were still being reported). Also screenshot of how the sensor is reporting now with the new custom device type (missing times are because the value didn’t change since the last report so the app doesn’t show it).

2 Likes

You rock, I’ll try tonight.

Works great. Thanks! 4 of 5 of my Aeons have been updating temp every 4 minutes since I changed the device driver. I kept one as a control :slight_smile: I had modified some apps, but had not played around with devices. Thanks for the nudge. I am adding temp offsets because the Aeons can be pretty far off. I had 4 of them an inch apart last night for 3-4 hours and they ranged from 66-72. Actual temp was 70.

I have one of the Aeons driving my ecovent now, because I didn’t trust that these would keep updating enough to drive my HVAC. This was my kids room the last night I trusted the Aeons with the factory ST device implementation.

That’s my one year olds room spiking up to almost 90 two nights ago.

I then tried to use the SmartSense temp sensor. It’s not very accurate and doesn’t reliably update more often than every 30 minutes. Finally I got fed up and bought an Everspring Temp/Humidity sensor. ST thought it was a moisture detector consistently, but when you use the device driver uploaded by @cmonroe, it is the best monitor I have found. Apparently he submitted this driver to ST months ago, but given that they don’t sell them, they don’t really have an incentive to add the device type. This thing rocks with the aftermarket device code.

In this last image, you can see 2 nights ago using the SmartSense temp monitor, the temp in my 1 year olds room is in a 70-80 range, up and down. Probably not very comfortable. The moment I switched to the Everspring, the range goes to about 1 degree. I absolute love it and will be buying more on Amazon.

Moral of the story, ST is great as long as you understand you are going to have to do the work yourself to get it to work.

Thanks again!

Why on earth hasn’t the smartthings team taken this device type and run with it?

1 Like

Thanks so much for this code and tip. I was having a lot of problems suddenly with my Aeon at the front door not communicating with ST hub, and this looks like a promising fix, as it is now reporting correctly for the moment at least!

Could you clarify for me why you have both specifically timed reports and periodic reports? Also, as I am not a groovy programmer, would you mind telling me how you figured out the parameterNumber values to use?

Again, thanks for sharing this.

The two parameters are tied together:

“101”- tells it what to pull periodically and then “111” defines periodically, 102 is linked to 112, etc…

I find the Vera forums are a great source of information about z-wave devices for two reasons: 1) the Vera has been around a lot longer (posts going back to 2009) 2) Vera is even more DIY than SmartThings, so users have to figure everything out on their own.

Here is a discussion about the Aeon Multisensor: http://forum.micasaverde.com/index.php/topic,3831.msg118621.html#msg118621

I don’t recommend the Vera itself in any way. I switched a year ago and the SmartThings is far superior.

That’s very helpful and the link made it all quite clear. With respect, though, it seems that there is a minor mistake in your code. For the periodic values I’m understanding the bit codes to be:

0 -> 1 - battery
5 -> 32 - temperature
6 -> 64 - illuminance
7 -> 128 - humidity

You wrote:

I think it should be:

// send humidity data periodically
zwave.configurationV1.configurationSet(parameterNumber: 102, size: 4, scaledConfigurationValue: 128).format(),
// send illuminance & battery periodically
zwave.configurationV1.configurationSet(parameterNumber: 103, size: 4, scaledConfigurationValue: 65).format(),

Thanks again. The sensor did a better job, although it still lost the connection eventually. I don’t understand why this has started happening now, but I’m experimenting with line power rather than battery, and then moving it around as apparently the Aeons don’t have a good range.

According to the Multisensor documentation
I think he has it right
illum should be 128
humidity should be 64
Page 8 of this document
http://www.smarthus.info/support/manuals/zw_sikkerhet/aeotec_multisensor_tech.pdf

So I think he has it right ?
Unless the docs are wrong and the vera site is right ?

That’s interesting. I looked at this reference which was via the Vera website, and it shows illuminance = 6 bit = 64 and humidity = 7 bit = 128. It sure would be nice if Aeotec (formerly Aeon?) would actually publish the docs themselves from their own site. I’ve hunted the site and can’t find them there. Well, I’m testing it now according to what you found and what Blake originally published, i.e. humidity = 6 bit = 64, and illuminance = 7 bit = 128. I’ll let you know.

Hey I really like the fact that you use NetAtmo as your control - I do too! I have built a “NetAtmo” control and device-type to do what you are talking about with KeepItCozy… Just keep in mind that even though the NetAtmo data is accurate to partial minutes - the webPortal and their updates are only in 15 minute intervals… You could use as a backup if you wanted…

I think that I should also add that I operate a “fully ST” dependent environment at home - my Nests (plural) are also physically, and virtually, plugged into ST via multiple Multis, relays, outlets, and software - it controls multiple window fans, vents, space heaters, and other portable air-conditioners on a per-room and per house multitude of settings… I use a combination of all the sensors (which has taken great time!!) and this has provided a very reliable system! I can say that NetAtmo has always been the most accurate with the ST Multis as a “very clear” #2 in accuracy and also with them being #1 in response - i.e. most updates per battery life with quickest and most reliable “instant on” for state changes. So I guess in summary I would recommend ST Multis for your KeepItCozy application and “back it up” by NetAtmo in the same area. Then you could either average or “trim” the data around the most accurate source with the appropriate sampling and reporting times.

1 Like

I can confirm that this is correct based on what’s being reported at what interval. So the Vera site that Blake quoted (but didn’t follow :smile:), which itself quotes an XML schema, has it backwards, or the company changed it.

If you need to alter the reporting, follow Blake’s original code, but use the reference from Ron if you want to understand the code and modify it.

Thanks to both Blake and Ron for sharing your expertise.

I also emailed Aeon Labs and they replied with the latest copy of the document attached. The details are the same for version 1.18.
Not sure why they don’t make this document available on their site. But if you email them they seem to gladly send it to you very quickly.

It’s now been over 2 weeks, and the Multisensor has been working well, with the proper coding and also plugged in. That was fun - fishing wire through the attic to get power to the sensor. :smirk:

Has anyone had any luck pairing the new Aeon Labs Multi sensor generation 5?

The instructions link is broken and I am trying to get your code running.
Any chance you can find the correct link.

Looks like what you have done will fix my issue too!

thanks in advance

pete