Hive Motion Sensor - Zone Status message issue

I’m trying to update Simon Green’s device handler for the newer Hive Motion Sensors however I have a problem that the device is sending “Zone Status” reports spuriously and not just when motion is actually detected!

If I trigger the motion then I immediately get a Zone Status report from the sensor, however for a period of up to 11 minutes after that I get repeat Zone Status reports at what look like almost completely random times.

This makes the device un-usable as a motion sensor!

The problem I think is that the Zone Status message that comes from the sensor contains extra information that the SmartThings API is filtering out. All I get from the Parse function is a " zone status 0x0001 – extended status 0x00" message every single time.

Is there a way to turn off the filtered Zone Status message and get the raw data from the device?

This is really frustrating as the whole idea of the SmartThings hub is that you can develop your own drivers but then they seem to have masked out some of the functionality that makes it impossible.

Please Help…

Hi, is there any way to get in touch with the Smart Things developers themselves?

Normally you just have to go through support for that. But there are a few staff members who occasionally participate in this forum on their own time, I don’t know if they’ll be able to help or not.

@workmonk @jody.albritton

Thanks for the prompt reply, I dug out the email address for support in the UK and emailed them. Hopefully I’ll get some help there :+1:

1 Like

Look at this section of the DTH

private Map parseCatchAllMessage(String description) {
Map resultMap = [:]
def cluster = zigbee.parse(description)
if (shouldProcessMessage(cluster)) {
	switch(cluster.clusterId) {
		case 0x0001:
			resultMap = getBatteryResult(cluster.data.last())
			break
		case 0x0402:
			// temp is last 2 data values. reverse to swap endian
			String temp = cluster.data[-2..-1].reverse().collect { cluster.hex1(it) }.join()
			def value = getTemperature(temp)
			resultMap = getTemperatureResult(value)
			break

		//case 0x0406:
		//	log.debug 'motion'
		//	resultMap.name = 'motion'
		//	break
	}
}

return resultMap

}

If you have the commented out bits, un-comment

2 Likes

Thanks for the reply.

I looked at the code above and this is called by the parse function. The program I have is that the only messages that arrive relating to motion are the ones enabled during configure which are periodic and not when motion actually happens and the zone status messages which do arrive when motion is detected but also randomly afterwards even when it isn’t detecting motion .

The lines of code above never get called as that message never gets triggered.

I’ve logged everything arriving at the parse function and nothing helps.