Aeon micro motor controller DSC14104

Hi Bruce,

I tested it and it works! This is indeed better since i have 3 motor controllers and thus would have 6 virtual switches. I am very grateful for your help :smile: it also gave me a better insight in how to program with smartthings.
Thanks Bruce!

from where did you get it ?

I got mine from this site:

Aeon Micro Motor Controller at zwaveproducts.com

It’s out of stock now :confused: thanks anyway…

Hi Bruce,

I tried your code and it works perfectly for the up, down and stop button.
However for the motor button, it is always stuck into stopup and moves to down and vise versa. It does not move to stopdown and up.

I understood the logic is that the status changes with each push : down, stopdown, up , stopup,down, stopdown …

is the button+ smart app a must to make the motor button work, I tried still no luck.

For the regular stop, up and down buttons, is there a way the icon blink when it is pushed?

Thanks for your amazing effort.

Regards,

Deleting post because I’m going to start my own thread.

Hello Mr Bravenel is there any chance that you can help me with smart things( im a newbie). My problem is that i have those aeon micro motor controller and switches and i cant really folow you on how to add the app of yours .

Hello Mr Bravenel …
I bought one of these switches and installed your device handler and it seems to be working. but would like to ask if there is a way to get the switches to be momantay and have the same layout on the app like the UP DOWN STOP. Thanks so much I am really new to all this.and will need extra help thanks JEFF

Hello rafi_tahmazian,

I also tried to fix the motor button, but was unsuccessful. Did you fix it?

Thanks,
D

I think I got the main button working. (Thanks to bravenel for providing the code from which to start.)

/**

  • Aeon Motor Controller
  • Copyright 2015 Bruce Ravenel
  • 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.

*/
metadata {
definition (name: “Aeon Motor Controller”, namespace: “bravenel”, author: “Bruce Ravenel”) {
capability "Refresh"
capability "Actuator"
capability "doorControl"
capability “Switch”

command "up"
command "down"
command "stop"

// fingerprint inClusters: “0x26,0x32”
}

simulator {
    status "up":   "command: 2604, payload: FF"
    status "down": "command: 2604, payload: 00"
    status "stop": "command: 2605, payload: FE"

    ["FF", "FE", "00"].each { val ->
        reply "2001$val,delay 100,2602": "command: 2603, payload: $val"
    }
}

tiles {
    standardTile("motor", "device.motor", width: 2, height: 2) {
        state("up", label:"Open", icon:"http://cdn.device-icons.smartthings.com/thermostat/thermostat-right@2x.png", action:"up", backgroundColor:"#79b821")
        state("down", label:"Close", icon:"http://cdn.device-icons.smartthings.com/thermostat/thermostat-left@2x.png", action:"down", backgroundColor:"#2180b8")
    }
    valueTile("energy", "device.energy", decoration: "flat") {
        state "default", label:" "
    }
    standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") {
        state "default", label:" ", action:"refresh.refresh", icon:"st.secondary.refresh"
    }
standardTile("stop", "device.switch") {
     state "default", label:"Stop", action: "stop", icon:"http://cdn.device-icons.smartthings.com/samsung/da/washer_ic_cancel@2x.png", backgroundColor:"#b82121"
}
standardTile("up", "device.switch") {
     state "default", label: "Open", action: "up", icon:"http://cdn.device-icons.smartthings.com/thermostat/thermostat-right@2x.png", backgroundColor:"#79b821"
}
standardTile("down", "device.switch") {
     state "default", label: "Close", action: "down", icon:"http://cdn.device-icons.smartthings.com/thermostat/thermostat-left@2x.png", backgroundColor:"#2180b8"
}
}
main(["motor"])
details(["motor", "refresh", "energy", "down", "up", "stop",])

}

// parse events into attributes
def parse(String description) {
def result = []
def cmd = zwave.parse(description, [0x20: 1, 0x26: 3])
if (cmd) {
result = zwaveEvent(cmd)
log.debug("’$description’ parsed to $result")
} else {
log.debug(“Couldn’t zwave.parse ‘$description’”)
}
result
}

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

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

def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv3.SwitchMultilevelReport cmd) {
motorEvents(cmd)
}

def motorEvents(physicalgraph.zwave.Command cmd) {
def result = []
def switchEvent = []
if(state.up == true) {
switchEvent = createEvent(name: “motor”, value: “down”, descriptionText: text)
}
else {
switchEvent = createEvent(name: “motor”, value: “up”, descriptionText: text)
}
result << switchEvent
}

def refresh() {
zwave.switchMultilevelV1.switchMultilevelGet().format()
}

def up() {
state.up = true
delayBetween([
zwave.basicV1.basicSet(value: 0xFF).format(),
zwave.switchMultilevelV1.switchMultilevelGet().format()
], 1000)
}

def down() {
state.up = false
delayBetween([
zwave.basicV1.basicSet(value: 0x00).format(),
zwave.switchMultilevelV1.switchMultilevelGet().format()
], 1000)
}

def stop() {
delayBetween([
zwave.switchMultilevelV1.switchMultilevelStopLevelChange().format(),
zwave.switchMultilevelV1.switchMultilevelGet().format()
], 1000)
}

def on() {
state.up = true
delayBetween([
zwave.basicV1.basicSet(value: 0xFF).format(),
zwave.switchMultilevelV1.switchMultilevelGet().format()
], 1000)
}

def off() {
state.up = false
delayBetween([
zwave.basicV1.basicSet(value: 0x00).format(),
zwave.switchMultilevelV1.switchMultilevelGet().format()
], 1000)
}

Hello,

I have fixed it differently, let me know if you are still looking for a code.

Hello rafi_tahmazian! My programming skills are limited. I would love to see your solution.
Thanks,
D

Try this code:
metadata {
definition (name: “Aeon Motor Controller”, namespace: “x”, author: “x”) {
capability "Refresh"
capability "Actuator"
capability "Switch"
capability "Switch Level"
capability “Window Shade”

    command "up"
    command "down"
    command "stop"
    
    fingerprint deviceId: "0x1107", inClusters: "0x25 0x26 0x70 0x85 0x72 0x86 0xEF 0x82"
    
}




tiles {
    standardTile("motor", "device.windowShade", width: 3, height:2, canChangeIcon: true) {
        state ("default", label: 'STOPPED', icon:"st.Transportation.transportation13", backgroundColor: "#79b821")
        state("up", label:'UP', icon:"st.doors.garage.garage-opening", backgroundColor:"#53a7c0")
        state("down", label:'Down', icon:"st.doors.garage.garage-closing",  backgroundColor:"#ff0d00")
        state("stopUp", label:"STOPPED", icon:"st.Transportation.transportation13", backgroundColor:"#79b821")
        state("stopDn", label:"STOPPED", icon:"st.Transportation.transportation13",  backgroundColor:"#79b821")
   
    }
             
    standardTile("up", "device.switch",decoration: "flat") {
        state("default",label: "Up", action: "up", icon:"http://cdn.device-icons.smartthings.com/thermostat/thermostat-up@2x.png")
        
    }
    
    standardTile("down", "device.switch", decoration: "flat") {
        state ("default", label: "Down", action: "down", icon:"http://cdn.device-icons.smartthings.com/thermostat/thermostat-down@2x.png")
        
    }
    
   standardTile("stop", "device.switch",decoration: "flat") {
 
        state("default", label:"", action: "stop", icon:"http://cdn.device-icons.smartthings.com/sonos/stop-btn@2x.png")
    }
    
   
    standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") {
        state ("default", label:"", action:"refresh.refresh", icon:"st.secondary.refresh")
    }
}

main(["motor"])
details([ "motor", "up","down","stop","refresh",])

}

// parse events into attributes
def parse(String description) {
def result = []
def cmd = zwave.parse(description,[0x20: 1, 0x26: 1])
if (cmd) {
result = zwaveEvent(cmd)
log.debug("’$description’ parsed to $result")
} else {
log.debug(“Couldn’t zwave.parse ‘$description’”)
}
return result
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd) {
def result = []
if (!state.stp){
if(cmd.value == 0) {
result << createEvent(name: “windowShade”, value: “down”)
}
else if(cmd.value == 255 || cmd.value == 99) {
result << createEvent(name: “windowShade”, value: “up”)
}
}
else {
def stopVal = state.up ? “stopUp” : "stopDn"
result << createEvent(name: “windowShade”, value: stopVal)
}
return result
}

def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv1.SwitchMultilevelReport cmd) {
def result = []
if (state.stp==false){
if(cmd.value == 0) {
result << createEvent(name: “windowShade”, value: “down”)
}
else if(cmd.value == 255 || cmd.value == 99) {
result << createEvent(name: “windowShade”, value: “up”)
}
}
else {
def stopVal = state.up ? “stopUp” : "stopDn"
result << createEvent(name: “windowShade”, value: stopVal)
}
return result
}

def refresh() {
delayBetween([
zwave.switchMultilevelV1.switchMultilevelGet().format(),
], 2000)
}

def up() {
state.up = true
state.stp=false
delayBetween([
zwave.basicV1.basicSet(value: 0xFF).format(),
zwave.switchMultilevelV1.switchMultilevelGet().format()
], 2000)

}

def down() {
state.up = false
state.stp=false
delayBetween([
zwave.basicV1.basicSet(value: 0x00).format(),
zwave.switchMultilevelV1.switchMultilevelGet().format()
], 2000)

}

def stop() {
state.stp=true
delayBetween([
zwave.switchMultilevelV1.switchMultilevelStopLevelChange().format(),
zwave.switchMultilevelV1.switchMultilevelGet().format(),
], 2000)

}

def on() {
state.up = true
state.stp=false
delayBetween([
zwave.basicV1.basicSet(value: 0xFF).format(),
zwave.switchMultilevelV1.switchMultilevelGet().format()
], 2000)
}

def off() {
state.up = false
state.stp=false
delayBetween([
zwave.basicV1.basicSet(value: 0x00).format(),
zwave.switchMultilevelv1.switchMultilevelGet().format()
], 2000)
}

Thanks–this is helpful!

Hello
I am newer to this and I got the motor controller to control a single small motor on/off.
When I first installed once I changed modes the hard wired switch worked properly with normal on/off control.

After I connected to the hub and installed the custom device now the power switch only turns the fan on. It also seems the status in the app is opposite reality. I am not sure how I did this - but I would really like to make it work correctly. I think I need to just build a new device definition but I have never done that. Anyone have any thoughts?

Thanks!

I’m sorry, but I don’t understand what you’re doing. Are you using the Aeon micro motor controller for a ceiling fan? Are you incorporating a wall switch? Bravenel posts the up, down, and stop commands in this thread above. I don’t know if there are any others.

I tried using the code above for the up, down, and stop commands for the aeon minimote using Button Controller + but it wasnt working for me :-/ been looking at it for hours trying to figure it out with no luck. i am using the micro motor controller with the device handler that bravenel posted and the two other modified device handlers above with no luck. the shades up down stop section just doesnt work. the device handler works perfectly if i use it manually. maybe something wrong with Button controller +?

I have a single small motor (less than one amp) that is running a vent fan. I’m just trying to turn it off and on.

I do have a new device coming that is just a relay switch so that should simply it but I think it would work fine if I knew how to write a device handler that treated it as two different motors on and off.

Thanks!

I want to build a extra safety for the motor controller, since i have a roller shutter on the kitchen door and now the roller shutter can go down if the door is opened, which causes the roller shutter to ‘break’ on the open door.

I know i can make a virtual switch which will only go down/up if the open/close sensor on the kitchen door is closed, but… isn’t there a way without adding another virtual switch?

Any expert in Micro Motor Controller can give me a hand in this post?

Thanks!