[OBSOLETE] Aspire Cooper RF9500 Device Type (basic DTH in post 6)

Any one know if the RF9500 works with ST?

I’m thinking about getting this in place of an existing wall switch (no neutral) and placing a zwave relay module near the lamp in the ceiling to control it.
I’ve also been hearing that Aeon Labs is working on a battery operated switch, but it’s taking awhile (I’m sure theirs will be much fancier).

If this works, I may just jump on it since westwayelectricsupply.com has it on sale for more than half price off (shhh… 10% off ACADEMIC10).

If this solves my no neutral issue, I’m going to be ecstatic!

Turns out that Aeon Labs won’t be releasing a battery operated switch anytime soon according to this twitter convo:

@thegibertchan never tested by me, but its pretty rare for a Z-Wave switch not to work these days.

@urman, I agree.

Assuming I can get them a good price ($120 is too much for non-wired switches since I’ll have to get relays too), I’ll be testing it out soon and hopefully adding them to the supported list.

I was originally concerned that I’d run into the same issue with the scene controllers. It seem that there’s not scene controllers that are compatible with the ST (however, can be directly paired to the zwave-only switches). I’m getting the impression that this isn’t a scene controller, and can be directly paired with the hub (fingers) crossed.

Hey @urman,

I got the switch today and immediately started to pair it with ST. I was able to get it on the paired, however I’m unable to have it function to control any units. I tried the various Zwave device types, and the only one the recognizes any commands was the “Zwave Controller”.

The logs says this when ever I select either ON or OFF buttons:
BasicReport(value: 1)
6BasicGet()

Any ideas?

Only documentation I found were here: http://www.cooperindustries.com/content/dam/public/wiringdevices/products/documents/technical_specifications/advancedtechinfo_V2.pdf

I created a device type for this. It allows all three buttons to be used (1. on/off 2. dim up and 3. dim down).

I still have some cleaning up to do, but it now works with the button controller smartapp.

It’s a rather expensive switch, but for those that want to control their hues, tcp and ge link bulbs, this is a good option.

metadata {
	definition (name: "Cooper RF9500 (all buttons)", namespace: "thegilbertchan", author: "Gilbert Chan") {
		capability "Actuator"
		capability "Button"
		capability "Configuration"
		capability "Sensor"

		fingerprint deviceId: "0x1200", inClusters: "0x77 0x86 0x75 0x73 0x85 0x72 0xEF", outClusters: "0x26"
	}

	simulator {
		status "button 1 pushed":  "command: 2001, payload: 01"
		status "button 1 held":  "command: 2001, payload: 15"
		status "button 2 pushed":  "command: 2001, payload: 29"
		status "button 2 held":  "command: 2001, payload: 3D"
		status "button 3 pushed":  "command: 2001, payload: 51"
		status "button 3 held":  "command: 2001, payload: 65"
		status "button 4 pushed":  "command: 2001, payload: 79"
		status "button 4 held":  "command: 2001, payload: 8D"
		status "wakeup":  "command: 8407, payload: "
	}
	tiles {
		standardTile("button", "device.button", width: 2, height: 2) {
			state "default", label: "", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#ffffff"
		}
		main "button"
		details(["button"])
	}
}

def parse(String description) {
	def results = []
	if (description.startsWith("Err")) {
	    results = createEvent(descriptionText:description, displayed:true)
	} else {
		def cmd = zwave.parse(description, [0x26: 1, 0x2B: 1, 0x80: 1, 0x84: 1])
		if(cmd) results += zwaveEvent(cmd)
		if(!results) results = [ descriptionText: cmd, displayed: false ]
	}
	log.debug("Parsed '$description' to $results")
	return results
}

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

    results += configurationCmds().collect{ response(it) }
	results << response(zwave.wakeUpV1.wakeUpNoMoreInformation().format())

	return results
}

// A zwave command for a button press was received convert to button number
def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv1.SwitchMultilevelStartLevelChange cmd) {
	[ descriptionText: "startlevel $cmd"]
	log.info "startlevel $cmd"
	if (cmd.upDown == true) {
		Integer buttonid = 2
	    log.info "button $buttonid pressed"
		checkbuttonEvent(buttonid)
		}
	else if (cmd.upDown == false) {
		Integer buttonid = 3
    	log.info "button $buttonid pressed"
		checkbuttonEvent(buttonid)
	}
}
  
// The controller likes to repeat the command... ignore repeats
def checkbuttonEvent(buttonid){

	if (state.lastScene == buttonid && (state.repeatCount < 4) && (now() - state.repeatStart < 2000)) {
    	log.debug "Button ${buttonid} repeat ${state.repeatCount}x ${now()}"
        state.repeatCount = state.repeatCount + 1
        createEvent([:])
    }
    else {
    	// If the button was really pressed, store the new scene and handle the button press
        state.lastScene = buttonid
        state.lastLevel = 0
        state.repeatCount = 0
        state.repeatStart = now()

        buttonEvent(buttonid)
    }
}

// Handle a button being pressed
def buttonEvent(button) {
	button = button as Integer
	def result = []
    updateState("currentButton", "$button")   
        // update the device state, recording the button press
        result << createEvent(name: "button", value: "pushed", data: [buttonNumber: button], descriptionText: "$device.displayName button $button was pushed", isStateChange: true)
    result
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicGet cmd) {
    [ descriptionText: "$cmd"]
    if(1){
		Integer buttonid = 1
        log.info "button $buttonid pressed"
		checkbuttonEvent(buttonid)
    }
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd) {
	[ descriptionText: "$cmd"]
    if(1){
		Integer buttonid = 1
        log.info "button $buttonid pressed"
		checkbuttonEvent(buttonid)
    }
}

def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv1.SwitchMultilevelStopLevelChange cmd) {
        createEvent([:])
}


def zwaveEvent(physicalgraph.zwave.Command cmd) {
	[ descriptionText: "$cmd"]
}

// Update State
def updateState(String name, String value) {
	state[name] = value
	device.updateDataValue(name, value)
}
3 Likes

Gilbert - Is it possible to use the Aspire RFWC5 Scene Controller as a button controller? In short, could I associate the buttons on the minimote to the buttons on the RFWC5?

1 Like

Indeed… shouldn’t the entire Cooper Aspire line be quite possibly compatible with SmartThings?

Aren’t they all Z-Wave “scene controllers”?

http://www.cooperindustries.com/content/dam/public/wiringdevices/products/documents/brochures/aspire-rf-brochure.pdf

Thanks Gilbert. Your code support is what got me to jump to SmartThings, as support for the 9500rf was so delayed from Almond+. I got it working, and got the main buttons to turn on and off my Cree Connected bulb. Using Buttons+, I got the smaller buttons to jump to preset dimming levels. Any ideas on how to actually make it act like a dimmer, i.e. the small buttons increase or decrease the dimming state?

1 Like

managed to get the switch aded in and a single button working, not multiple though… any advice on how i can get multiple buttons working and then triggering scenes on a hue bridge?

all buttons are identifying on the debug screen when i setup the device, so im guessing its just user error somewhere along the line :stuck_out_tongue:

When I copy your code into the smart-app, I get:

groovy.lang.MissingMethodException: No signature of method: script14402269616011809517032.metadata() is applicable for argument types: (script14402269616011809517032$_run_closure1) values: [script14402269616011809517032$_run_closure1@7fd44984]
Possible solutions: getMetadata(), getState(), setState(java.lang.Object), metaClass(groovy.lang.Closure) @ line 16

I have been trying to figure out what I need to do to get this to work - seems I am stuck at the first step. Any help would be appreciated.

That code is for a device handler (formerly called a smart device type), not a smart app. They get installed into different sections of the IDE:

1 Like

Got it - that makes sense, but this is still not working as expected. I now have the RF9500 device handler installed and associated with my physical switch, but super unclear how to have that actually control the master switch. The RF9500 is an aux switch that is essentially just a remote control for the master switch. Sorry for the ignorance - first time and this is incredibly confusing. Just trying to get the association piece correct.

Ah…In the smartthings universe, we are not using the RF9500 as an aux to a specific master. Instead, we are just using it as a wall-mounted “button controller” which will send request to the smartthings hub. These requests could be for any device on that smartthings network, or just for a general network command like changing mode.

You won’t be able to use direct Zwave association to a Cooper master because smartthings doesn’t have the same concept of scenes. But you can use indirect command chaining so that A button press on the RF 9500 is the same thing as tapping a tile for the master in the smartthings mobile app.

I use a text to speech reader, so I can’t actually read the code that is posted in this topic. Hopefully @thegibertchan or One of the other people using this device handler can tell you what your next steps are to get actions associated with buttons.

1 Like

Thanks. @thegibertchan can you assist?

Ok, this is such a frustrating and stupid process. SmartThings, for all of it’s hype, is really not yet at a stage where it is ready for the consumer market. Instead of dealing with all of this ridiculousness, I just purchased the iOS App called SmartRules, which massively simplifies the process of writing rules to tie-together Z-wave devices. Took me 10 mins to set this up and it works fine. I also associated the RF9500 with the Device Type that is in the SmartThings DeviceType library. Done and done. For anyone who wants to be able to use the RF9500 switch, this is definitely the recommended approach. I am using it as a remote switch to control a GE In-Wall Switch. I don’t use the dimmer-functions on the RF9500 since the GE switch I have doesn’t support dimming - so it was a matter of just writing 2 rules in the SmartRules app, and I am done. This whole process of screwing around with the IDE is insane. SmartThings needs to just incorporate a SmartRules type interface into their iOS app to make this whole thing easier. SmartRules was the best $7 I have spent on home-automation so far - hundreds of dollars on SmartThings stuff and finally a rules-engine that a normal person can use. Thanks SmartRules.

1 Like

Awesome! And, yeah. The lack of an official rules engine is painful. They said they’re working on one, but no fixed timeline.

Time to resurrect an old thread. Just got an RF9500 after reading this thread. I used Gilbert’s device type and am able to get it working to turn on and off an Aeotec corded outlet. It works great until I touch the dimmer buttons. This causes the switch to “lockup” and stop responding, then it eventually loses pairing. Very strange. The switch is labeled v 1.11. I have the v2 hub and have had no other problems since I have had it, including running several custom device types and custom apps.

Is there a way to disable the dimmer buttons in the IDE so they don’t do anything? I don’t need the dimmer function, just the basic turn on/off. I know this original conversation was pre-v2, but is anyone else experiencing this with the v2 hub?

can someone tell me how they got this to work… I cannot get it to pair with the hub… exclusion is not working either… even when next to the hub

Did you install Gilbert’s device type from post six of the thread we’re in now? You’ll need that to configure the device.

If that paragraph seemed a little unclear, take a look at the custom code FAQ first: