Linear WAPIRZ-1


(John Schultz) #1

Hi everyone. Has anyone used the Linear WAPIRZ-1 ?
I purchased the GoControl kit that came with 2 window/door sensors and this motion sensor.
It pairs with Smartthings as a Aeon Labs Multi-Sensor. It can report temperature and motion.
Seems to work ok except it seems to take 8-10 minutes after motion stops before it resets to no motion.
It has a jumper but, none of the documentation says what it is for. I suspect that it is for pet size ignoring.

thanks in advance


The gocontrol motion sensor also detects temp!
#2

Wait Time can be reset as a parameter. The only switch I see is the tamper switch.

http://www.nortekcontrol.com/pdf/manuals/WAPIRZ_install.pdf


(John Schultz) #3

thanks JD is there a way to configure that in smartthings. without a custom handler ?


#4

As far as I know, it will take custom code. @tgauchat or @tslagle13 or one of the other expert coders should be able to help. :blush:


(Tim Slagle) #5

We’ll have to send it some bits…

I’ll see what I can come up with :smile:


(Tim Slagle) #6

Give this a try:

metadata {
	// Automatically generated. Make future change here.
	definition (name: "Linear WAPIRZ-1 (1 Minute Reset Time)", 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() {
	
	//send no-motion report 60 seconds after motion stops
	zwave.configurationV1.configurationSet(parameterNumber: 1, size: 2, scaledConfigurationValue: 1).format()
}

You will need to hit the “configure” button on the device when it is awake. You can probably do this when you take the cover off the sensor. If there is a red light it is only awake when the light is on. Opening the cover should cause the light to stay solid and you can send the config command. Send the config 1-2 seconds after the red light is solid.


#7

I would recommend a 3 minute reset time to avoid double triggers and eating up the batteries.


(Tim Slagle) #8

I’m more interested to see if it works. Once we know how it accepts the bits we can tweak it as needed


(John Schultz) #9

Thanks Guys. I will give it a try tonight and report back


(DLee) #10

Note the lone Amazon review:

“Works with wink, but it’s really slow. Probably about a 10 second delay from sensing motion to turning the light on.”


(John Schultz) #11

Yeah I saw that.

Home Depot has a kit with 2 Window/Door sensors and a Motion sensor for $50 bucks. The GoControl Kit.

The Door/Window sensors seem pretty good. No issues there. If this sensor can be made to work a bit better it would be a bargain.
I just ordered 3 of the Fibaro Multi Sensors just waiting on those.


#12

GoControl is Nortek (Linear’s) DIY brand. Should be good, as far as I can tell they’ve just rebranded the Linear ones.


(John Schultz) #13

Thanks for the code Tim seems to work well. Three minutes from sensing to back off. Much better !


(William B) #14

@jschultz070 DId you have any issues getting the door/window sensors that came in the Home Depot GoControl kit to work? Do they work for triggering actions such as turning on lights when the door opens etc? I started off using a Wink controller and hated it. I bought the kit because it seemed to include a lot for the money. I just want to determine whether the pieces will work with the SmartThings hub before I purchase the hub. Thanks for any information you can pass along!!

WIlliam


(Brian Wilson) #15

Door and Window sensors work great. They show up as Z-Wave Door/Window Sensor. These are still at Home Depot in a multi-pack that has 2 Door/Window sensors and a motion sensor.


(William) #16

@tslagle13, bear with me. I’m a new guy to building custom devices. I’ve thrown together the MyQ app/device. I’ve purchased the above GoControl kit and am interested in integrating your code. Am I building a new device or somehow editing an existing device?


(Brandon W) #17

Uh oh! It is not working! This is the error message when I click create.

No signature of method: script14380002058181879309770.metadata() is
applicable for argument types:
(script14380002058181879309770$_run_closure1) values:
[script14380002058181879309770$_run_closure1@6af2bd7e]
Possible solutions: getMetadata(), getState(),
setState(java.lang.Object), metaClass(groovy.lang.Closure)


(Aldo) #18

New to IOT with SmartThings - I tried to add a WAPIRZ-1 as a new device using Aeon Labs and generic. Did not worked. Smartthings keep looping trying to discover and Motion Sensor stays with the red light on (w/ case open). Suggestions ? Thanks


(John Lord) #19

the red light on is a tamper switch. all of the motion sensors i’ve seen actually have a hidden reset hole on the back of them. The button inside is not used.


(Aldo) #20

Thanks John so what should I do?