Aeotec Nano Shutter

Hi,

Could we get a driver for the new Aeotec Nano Shutter please? I have paired it but there is nothing about right now to drive it.

* deviceType:  **3**
* zwaveSecurePairingComplete:  **true**
* inClusters:  **0x5E,0x85,0x59,0x55,0x70,0x2C,0x2B,0x25,0x26,0x86,0x72,0x5A,0x73,0x98,0x9F,0x6C,0x7A**
* deviceId:  **141**
* manufacturer:  **134**

or this is not secure

* deviceType:  **3**
* inClusters:  **0x5E,0x85,0x59,0x55,0x70,0x2C,0x2B,0x25,0x26,0x86,0x72,0x5A,0x73,0x98,0x9F,0x6C,0x7A**
* deviceId:  **141**
* manufacturer:  **134**

Didn't even know you could buy that yet!

vesternet are selling them :smile: I have 4

Their own website still lists it as "Coming Soon". Maybe the UK version is all that's available ATM.

no if I look on their UK website it says the same :slight_smile: I was surprised that they had it too, I have been waiting for it :wink:

Did you try any of the ‘dimmer’ drivers.

I have a fibaro equivelant which I use with the ‘generic z-wave dimmer’ driver.
Works perfectly.

Andy

I'll give it a try :slight_smile:

1 Like

It does for the on and off as well as stop level but doesn't give me anymore than that.
I would be great if there was a dedicated general z-wave blind driver :grin: please @bravenel

actually it doesn't work, not sure if its the driver but it keeps repeating commands and randomly opens them. @Cobra do you have anything like this in your events? There is only one trigger rule running and it should shut (turn ON) at sunset then open at 8:30 (turn OFF). If not then i will need to speak to Aeotec as there must be a issue.


the device is fine it was something funny on HE with the driver. I have used the new Qubino shutter module driver and that mostly works but it seems this device needs its own driver as it's a bit different to the rest (not best pleased with it if i'm honest) you manually have to give it a time for up and down but that's it! It doesn't seem to know 50 % so i'm assuming as it says it can, that this then need to be added in the driver. I've ported there ST driver but it throughs a lot of errors so there must be more need.

/**
 *  Copyright 2015 SmartThings
 *
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 *  in compliance with the License. You may obtain a copy of the License at:
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
 *  on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
 *  for the specific language governing permissions and limitations under the License.
 *  
 *  Notes - Edited and modifed from Z-Wave Secure Switch for a bare basic use of Aeotec Nano Shutter.
 */
metadata {
	definition(name: "Aeotec Nano Shutter", namespace: "Aeotec", author: "Chris Cheng", runLocally: false) {
		capability "Switch"
		capability "Refresh"
		capability "Polling"
		capability "Actuator"
		capability "Sensor"
		capability "Health Check"
        capability "Switch Level"
        
        command "stop" 
        command "open"
        command "close"

		fingerprint mfr: "0086", prod: "0103", model: "008D"
        inClusters: "5E,55,98,9F,6C"
        inClusters: "85,59,70,2C,2B,25,26,73,7A,86,72,5A"
	}

	/* simulator {
		status "on": "command: 9881, payload: 002503FF"
		status "off": "command: 9881, payload: 00250300"

		reply "9881002001FF,delay 200,9881002502": "command: 9881, payload: 002503FF"
		reply "988100200100,delay 200,9881002502": "command: 9881, payload: 00250300"
	}*/

	tiles {
		standardTile("open", "device.switch", canChangeIcon: false) {
			state "open", label: 'Open', action: "open", icon: "st.Transportation.transportation13", backgroundColor: "#00a0dc"
		}
        standardTile("close", "device.switch", canChangeIcon: false) {
			state "close", label: 'Close', action: "close", icon: "st.Transportation.transportation14", backgroundColor: "#ffffff"
		}
        standardTile("stop", "device.switch", canChangeIcon: false) {
			state "default", label: 'Stop', action: "stop", icon: "st.switches.switch.stop", backgroundColor: "#00a0dc"
		}
		standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") {
			state "default", label: '', action: "refresh.refresh", icon: "st.secondary.refresh"
		}

		main (["open", "close", "stop"])
		details(["open", "close", "stop", "refresh"])
	} 
}

def installed() {
	// Device-Watch simply pings if no device events received for checkInterval duration of 32min = 2 * 15min + 2min lag time
	sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID, offlinePingable: "1"])
}

def updated() {
	response(refresh())
}

def parse(description) {
	def result = null
	if (description.startsWith("Err 106")) {
		result = createEvent(descriptionText: description, isStateChange: true)
	} else if (description != "updated") {
		def cmd = zwave.parse(description, [0x55: 1,0x98: 1,0x85: 2,0x59: 1,0x70: 2,0x2C: 1,0x2B: 1,0x25: 1,0x26: 3,0x73: 1,0x7A: 2,0x86: 1,0x72: 2,0x5A: 1])
		if (cmd) {
			result = zwaveEvent(cmd)
			log.debug("'$description' parsed to $result")
		} else {
			log.debug("Couldn't zwave.parse '$description'")
		}
	}
	result
}

def zwaveEvent(hubitat.zwave.commands.basicv1.BasicReport cmd) {
	//createEvent(name: "on", value: cmd.value ? "up" : "down")
}

def zwaveEvent(hubitat.zwave.commands.basicv1.BasicSet cmd) {
	//createEvent(name: "off", value: cmd.value ? "up" : "down")
}

def zwaveEvent(hubitat.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) {
	//createEvent(name: "on", value: cmd.value ? "up" : "down")
}

def zwaveEvent(hubitat.zwave.commands.hailv1.Hail cmd) {
	//createEvent(name: "hail", value: "hail", descriptionText: "Switch button was pressed", displayed: false)
}

def zwaveEvent(hubitat.zwave.commands.switchmultilevelv3.SwitchMultilevelReport cmd) {
	//dimmerEvents(cmd)
}

def zwaveEvent(hubitat.zwave.commands.securityv1.SecurityMessageEncapsulation cmd) {
	def encapsulatedCommand = cmd.encapsulatedCommand([0x55: 1,0x98: 1,0x85: 2,0x59: 1,0x70: 2,0x2C: 1,0x2B: 1,0x25: 1,0x26: 3,0x73: 1,0x7A: 2,0x86: 1,0x72: 2,0x5A: 1])
	if (encapsulatedCommand) {
		zwaveEvent(encapsulatedCommand)
	}
}

def zwaveEvent(hubitat.zwave.Command cmd) {
	log.debug "Unhandled: $cmd"
	null
}

def open() {
	log.debug("up")
	commands([
		zwave.basicV1.basicSet(value: 0xFF),
		zwave.basicV1.basicGet()
	])
}

def close() {
	log.debug("down")
	commands([
		zwave.basicV1.basicSet(value: 0x00),
		zwave.basicV1.basicGet()
	])
}

def stop() {
	log.debug("stop")
	commands([
    	zwave.switchMultilevelV3.switchMultilevelStopLevelChange(),
        zwave.switchMultilevelV3.switchMultilevelGet()
    ])
}

def ping() {
	refresh()
}

def poll() {
	refresh()
}

def refresh() {
	command(zwave.basicV1.basicGet())
}

private command(hubitat.zwave.Command cmd) {
	if ((zwaveInfo.zw == null && state.sec != 0) || zwaveInfo?.zw?.contains("s")) {
		zwave.securityV1.securityMessageEncapsulation().encapsulate(cmd).format()
	} else {
		cmd.format()
	}
}

private commands(commands, delay = 200) {
	delayBetween(commands.collect { command(it) }, delay)
}

Now, I'm not an expert on device drivers, but I believe these kind of universal motors require three commands. Forward, reverse and stop. In my mind that means you are definitely right that they'll require a custom driver. A typical level command is unlikely to work.