FAQ: Do you know of an outdoor motion sensor?

I am looking for outdoor motion sensors to monitor my yard.

I bought a pair of the Aeon Labs Aeotec Z-Wave Multi-Sensor and am quite unhappy with them. Even on the lowest sensitivity setting it randomly sends alerts, some perhaps due to clouds changing the lighting (even though PIR is not supposed to be susceptible to this) and others I can’t explain at all. With several false alerts a day this thing is just useless. The Smartthings Motion sensor works great, I have some in my house, but it is indoor rated only. The Schlage / Nexia motion sensor is also indoor use only.

I am hoping someone has come across an outdoor rated motion sensor they have been able to pair with the Smartthings hub.

5 Likes

The Aeon Labs multis are basically useless as motion sensors: They have a bug that triggers random false-positives in some units. I got in touch with them a few months ago, and they promised me that they would let me know once the problem has been resolved. So far, I haven’t heard anything from them. You may be able to get your hands on a unit/batch which does not exhibit the problem, but it’s really luck of the draw. I had to return about 5 of them.

I really don’t know of any zwave motion sensors rated for outdoor use. Even with the Aeon sensor I’d be careful. It’s rated for “outdoor use”, but still needs to be shielded from the elements.

Have you checked for zigbee sensors? You’ll have a greater selection there, and there are definitely some that work for outdoors. Just make sure the sensor speaks Zigbee PRO and the HA (Home Automation) profile for it to be theoretically compatible with SmartThings. I said theoretically, because more than likely you’ll have to invest some time into writing a device handler for it.

2 Likes

Oh, and there is this guy:

http://www.smarthome.com/65450/Everspring-SP103-Z-Wave-PIR-Motion-Detector/p.aspx

1 Like

I have a SP103, and it works much better (more reliable) than the Aeon multi-sensor; I did have to tweak the default device type a bit to make sure it wakes up every hour or so when dormant.

@Minollo What exactly did you do to tweak the device type?

BTW… they are on sale for $33 and if you use the coupon code ELUCKYZET at checkout you get 6 off until 3/20.

I have the Aeon Multi-sensor I’m using for a driveway sensor and it constantly false triggers. I do like seeing temp and humidity the Aeon sensor provides.

Updated code below.

metadata {
	simulator {
		status "active": "command: 3003, payload: FF"
		status "inactive": "command: 3003, payload: 00"
	}

	// UI tile definitions
	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")
		}
		standardTile("refresh", "device.thermostatMode", decoration: "flat") {
			state "default", action:"polling.poll", icon:"st.secondary.refresh"
		}
		main "motion"
		details "motion"
	}
}

def parse(String description) {
	def result = []
	if (description.startsWith("Err")) {
	    result = createEvent(descriptionText:description, displayed:true)
	} else {
		def cmd = zwave.parse(description, [0x20: 1, 0x30: 1, 0x31: 5, 0x32: 3, 0x80: 1, 0x84: 1, 0x71: 1, 0x9C: 1])
		if (cmd) {
			log.debug "Parse in: ${cmd.CMD}"
			result << createEvent(zwaveEvent(cmd))
			def nowTime = new Date().time
			def reminderAgeInMinutes = state.lastWakeUpReminder ? (nowTime - state.lastWakeUpReminder)/60000 : 1440
			log.debug "WakeUp reminder was last sent ${reminderAgeInMinutes} minutes ago"
			if (reminderAgeInMinutes >= 1440) {	//make sure every 24 hours we remind sensor to wake up regularly
                log.debug "Sending WakeUp reminder"
                state.lastWakeUpReminder = nowTime
               	result << new physicalgraph.device.HubAction(zwave.wakeUpV1.wakeUpIntervalSet(seconds: 60*60, nodeid: zwaveHubNodeId).format())
			}
            if (cmd.CMD == "8407" ) {	// WakeUpNotification
                log.debug "WakeUpNotification in parse()"
				def batteryAgeInMinutes = state.lastBatteryQuery ? (nowTime - state.lastBatteryQuery)/60000 : 600
				log.debug "Battery status was last checked ${batteryAgeInMinutes} minutes ago"
				if (batteryAgeInMinutes >= 600) {
	                log.debug "Fetching fresh battery value"
	                result << new physicalgraph.device.HubAction(zwave.batteryV1.batteryGet().format())
                }
                result << new physicalgraph.device.HubAction("delay 1200")
                result << new physicalgraph.device.HubAction(zwave.wakeUpV1.wakeUpNoMoreInformation().format())
            }
        }
    }

	log.debug "Parse result: ${result}"
	return result
}

def sensorValueEvent(Short value) {
	log.debug "Sensor value event"
	if (value == 0) {
		createEvent([ name: "motion", value: "inactive" ])
	} else if (value == 255) {
		createEvent([ name: "motion", value: "active" ])
	} else {
		[ createEvent([ name: "motion", value: "active" ]),
			createEvent([ name: "level", value: value ]) ]
	}
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd)
{
	sensorValueEvent(cmd.value)
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd)
{
	sensorValueEvent(cmd.value)
}

def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd)
{
	sensorValueEvent(cmd.sensorValue)
}

def zwaveEvent(physicalgraph.zwave.commands.alarmv1.AlarmReport cmd)
{
	sensorValueEvent(cmd.alarmLevel)
}

def zwaveEvent(physicalgraph.zwave.commands.sensoralarmv1.SensorAlarmReport cmd)
{
	sensorValueEvent(cmd.sensorState)
}

def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv5.SensorMultilevelReport cmd)
{
	def map = [ displayed: true, value: cmd.scaledSensorValue.toString() ]
	switch (cmd.sensorType) {
		case 1:
			map.name = "temperature"
			map.unit = cmd.scale == 1 ? "F" : "C"
			break;
		case 2:
			map.name = "value"
			map.unit = cmd.scale == 1 ? "%" : ""
			break;
		case 3:
			map.name = "illuminance"
			map.value = cmd.scaledSensorValue.toInteger().toString()
			map.unit = "lux"
			break;
		case 4:
			// power
			map.name = "power"
			map.unit = cmd.scale == 1 ? "Btu/h" : "W"
			break;
		case 5:
			map.name = "humidity"
			map.value = cmd.scaledSensorValue.toInteger().toString()
			map.unit = cmd.scale == 0 ? "%" : ""
			break;
		case 6:
			map.name = "velocity"
			map.unit = cmd.scale == 1 ? "mph" : "m/s"
			break;
		case 8:
		case 9:
			map.name = "pressure"
			map.unit = cmd.scale == 1 ? "inHg" : "kPa"
			break;
		case 0xE:
			map.name = "weight"
			map.unit = cmd.scale == 1 ? "lbs" : "kg"
			break;
		case 0xF:
			map.name = "voltage"
			map.unit = cmd.scale == 1 ? "mV" : "V"
			break;
		case 0x10:
			map.name = "current"
			map.unit = cmd.scale == 1 ? "mA" : "A"
			break;
		case 0x12:
			map.name = "air flow"
			map.unit = cmd.scale == 1 ? "cfm" : "m^3/h"
			break;
		case 0x1E:
			map.name = "loudness"
			map.unit = cmd.scale == 1 ? "dBA" : "dB"
			break;
	}
	createEvent(map)
}

def zwaveEvent(physicalgraph.zwave.commands.meterv3.MeterReport cmd) {
	def map = [ displayed: true, value: cmd.scaledMeterValue ]
	if (cmd.meterType == 1) {
		map << ([
			[ name: "energy", unit: "kWh" ],
			[ name: "energy", unit: "kVAh" ],
			[ name: "power", unit: "W" ],
			[ name: "pulse count", unit: "pulses" ],
			[ name: "voltage", unit: "V" ],
			[ name: "current", unit: "A"],
			[ name: "power factor", unit: "R/Z"],
		][cmd.scale] ?: [ name: "electric" ])
	} else if (cmd.meterType == 2) {
		map << [ name: "gas", unit: ["m^3", "ft^3", "", "pulses", ""][cmd.scale] ]
	} else if (cmd.meterType == 3) {
		map << [ name: "water", unit: ["m^3", "ft^3", "gal"][cmd.scale] ]
	} else {
		map << [ name: "meter", descriptionText: cmd.toString() ]
	}
	createEvent(map)
}

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

def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd) {
	log.debug "Battery: ${cmd}"
	def nowTime = new Date().time
	state.lastBatteryQuery = nowTime
	def map = [ name: "battery", unit: "%" ]
	if (cmd.batteryLevel == 0xFF) {
		map.value = 1
		map.descriptionText = "${device.displayName} has a low battery"
	} else {
		map.value = cmd.batteryLevel
	}
	createEvent(map)
}

def zwaveEvent(physicalgraph.zwave.Command cmd) {
	def event = [ displayed: false ]
	event.linkText = device.label ?: device.name
	event.descriptionText = "$event.linkText: $cmd"
	createEvent(event)
}

def configure()
{
	log.debug "Configure"
	zwave.associationV1.associationSet(groupingIdentifier:1, nodeId:[zwaveHubNodeId]).format()
}
2 Likes

@Minollo Thanks for posting. I ordered one of these yesterday as soon as it comes in I’ll set it up.

@minollo

I have a SP103, and it works much better (more reliable) than the Aeon multi-sensor; I did have to tweak the default device type a bit to make sure it wakes up every hour or so when dormant.

What didn’t you like about the AEON? I’ve got a pair of them in my house and they seem to be working quite well. Was it an outdoor use problem or just a problem in general?

I use them indoor; I have two Aeon multi-sensors. I like them for temperature and relative humidity reading. For movement, I find them not reliable (plenty of occasional false positives, even while the room is empty and shades are down) and (ironically) not sensitive enough (they have a cone of visibility which is quite narrow, and they don’t seem to see movement 4-5 meters away as well as the SP103 does).

On the opposite side, I must say that battery life for the Aeon units is much better than the SP103.

@Minollo what kind of battery life are you getting out of the Everspring SP103? I’m about to pull the trigger because the price is so good right now, but if I’m going to be replacing batteries once a month it may not be worth the savings. (I also really like how Aeon can be powered via USB)

As almost always, the answer is “it depends” :slight_smile:
It depends on how long you make a “motion active” event last; the longer you make it last, the fewer chain of events the sensor will send, the less you use the battery.

In my experience, alkaline is about 2-3 months for me; lithium is behaving much better.

I contacted Aeon about the false triggers and they told me to adjust the following parameter in my Z wave system:

Wakeup Interval - 10,800 (in seconds)
Poll - 1,680 (in seconds)

I took a look at the Aeon Device Type in the IDE but it is not clear where I would set these parameters. Anyone ideas or has someone done this before?

Also… is it possible to get the firmware version number for the Aeon Multi from ST?

I don’t know about the poll; but the wake up interval can probably be set playing with one of the configurationSet() commands in configure(), or maybe you can send explicitly a wakeUpIntervalSet() command. I would be surprised if those affect false positives though…

It appears like the Everspring SP103 has been discontinued and I’m having difficulty finding any more of them available to purchase.

I might try this: http://www.amazon.com/Ecolink-Security-Products-PIRZWAVE2-ECO-Zwave/dp/B00FB1TBKS because it is pretty cheap but it is indoor only.

My application is outdoors but is covered more than enough to not have rain or snow be any sort of issue. It would just be extreme temps (Chicago) that I would worry about.

Does anyone know whether there have been any new sensors for outdoor that have come out recently, . It seems like a common need for many, and wonder whether there was anything in the CES that met this need. Or any casing that could be used with the indoor sensors to meet this requirement,

@smart (Ron S) uses the Fibaro motion sensor outdoors and has recommended it in other threads. Maybe he can comment more here.

Well, compared to Aeons outdoor it is much better outside as it has a much wider configuration available to reduce the sensitivity (some coding required) and of course YMMV. I stay in very quiet, dead end street where only the neighbors, postman etc. crosses my driveway and it does trigger false alerts then and in way it is not false as it did detect a motion. I have not played with sensitivity setting yet.

I use it outdoors for the LUX values solely (and not motion) which every body in this forum can agree upon is the best and the most accurate.

My feeling is that if you put a motion sensor outside you are bound to get some unwanted alerts (I intentionally used the word unwanted rather than false) unless you are able to pin the sensitivity accurately. Also, one demerit on Fibaros is the lack of humidity capability.

Aeons I had to remove from outdoors as it was sending me alerts every second with no one in site in which case I definitely will use the word false alerts. And that thing was set at the lowest sensitivity. I am using it in the garage now.

Thanks for the comments above. I am having a similar issue with lots of false alerts with Aeon. I am only interested in motion detection (not much need of temperature and humidity monitoring).

Has anyone used any of the microwave radar sensors hooked up to some sort of z-wave dry contact relay? Is that a better option to minimise false alerts?

All individual motion systems have a lot of false alarms outdoors because wind blowing across the sensor will trigger often trigger it. Rain sometimes. And on a bright day, cloud movement may trigger enough of a change in temperature to trigger it.

Professional security firms solve the issue with multiple device systems. There are three common approaches.

  1. trigger beam. A two part device with a beam between them. When the beam is broken, the notification is sent. Deer can still trigger it, but wind and clouds won’t. In very strong wind conditions, a branch or lawn chair blown through the beam will trigger it, but that’s OK with some people, it just depends on where you want to use it. @johnosstyn has a detailed discussion of the system he uses under the laser trip beam topic:
  1. zone detection. Multiple sensors are used and the event counts only when all the sensors go off at about the same time. Tricky to get just right, and wind is still a problem.

  2. pressure plates and mats. Completely different technology, switch closes when pressure is applied. Cheap ones ($60 or less) usually trigger at about 25 pounds, more expensive ones have adjustable minimum limits up to truck size. Many are weatherproofed (sealed in mats). Wireless are more expensive than hard wired. Commercial buildings like these for car detection in driveways. Cities use them to schedule some traffic lights.

Hospitals use light range versions under mattresses to alert when a patient gets out of bed. Many marinas use them as deck sensors, sometimes to act as “doorbells” for docked ships, sometimes for alarm systems. I have a friend with a son in a wheelchair in Arizona who uses a deck sensor pressure mat on the entrance ramp in the back yard so that the door opens automatically when the son is coming in. It’s been much more reliable than a previous motion detector system.

So again a lot depends on what you want to use it for. If you’re trying to detect intruders outdoors, trip beam seems to be the most common if there’s an appropriate “bottleneck” location for the beam. Or use multiple beams to cover a wider area. If you essentially want an outdoor switch for a welcome and cooperative visitor, pressure mats might be a less expensive option, although you’ll likely have to do some wiring and you may have to secure the mat itself.

5 Likes

My Aeon sensor just died after 5 months, won’t buy a new one from them of course.
What is the recommended outdoor motion sensor?