Help with new DH for Aust 3 Gang light switch - catchall included

Hi All

Any chance someone could post the Dh and Smart App that they have working for this 3 Gang Switch.

I have attempted to do this form what I think is required but its not working for me. I suspect I have missed a step of pasted it incorrectly. Sadly I dont know enough to understand why/where the code is wrong.

Thanks in advance.

Mike

Install the Dh and smartapp. Then create 3 virtual switches in the IDE. Then link them to the three endpoints in the smartapp. Should be good to go.

Here is the DH

/**
*

  • 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.
  • Based on on original by Lazcad / RaveTam
  • 01/2017 corrected the temperature reading
  • 02/2017 added heartbeat to monitor connectivity health of outlet
  • 02/2017 added multiattribute tile
  • 03/2018 Marwan - Fixed status updates comming from device
    */

metadata {
definition (name: “ZigBee Gang 3 Switch - GeorgeCastanza V1”, namespace: “smartthings”, author: “smartthings”) {
capability “Actuator”
capability “Configuration”
capability “Refresh”
capability “Switch”

    capability "Temperature Measurement"
    
    attribute "lastCheckin", "string"
    attribute "switch0", "string"
    attribute "switch", "string"
	attribute "switch2", "string"
    attribute "switch3", "string"
    command "on0"
command "off0"
command "on"
command "off"
command "on2"
command "off2"
command "on3"
command "off3"
}

// simulator metadata
simulator {
    // status messages
    status "on": "on/off: 1"
    status "off": "on/off: 0"

    // reply messages
    reply "zcl on-off on": "on/off: 1"
    reply "zcl on-off off": "on/off: 0"
    
   
}

tiles(scale: 2) {
 multiAttributeTile(name:"switch0", type: "device.switch", width: 6, height: 4, canChangeIcon: true){
        tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { 
            attributeState "on", label:'switch0', action:"off0", icon:"st.switches.light.on", backgroundColor:"#00a0dc", nextState:"turningOff"
            attributeState "off", label:'switch0', action:"on0", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn"
            attributeState "turningOn", label:'switch0', action:"off0", icon:"st.switches.light.on", backgroundColor:"#00a0dc", nextState:"turningOff"
            attributeState "turningOff", label:'switch0', action:"on0", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn"
        }
       	tileAttribute("device.lastCheckin", key: "SECONDARY_CONTROL") {
			attributeState("default", label:'Last Update: ${currentValue}',icon: "st.Health & Wellness.health9")
	   	}
    }
    multiAttributeTile(name:"switch", type: "device.switch", width: 6, height: 4, canChangeIcon: true){
        tileAttribute ("device.switch1", key: "PRIMARY_CONTROL") { 
            attributeState "on", label:'switch', action:"off", icon:"st.switches.light.on", backgroundColor:"#00a0dc", nextState:"turningOff"
            attributeState "off", label:'switch', action:"on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn"
            attributeState "turningOn", label:'switch', action:"off", icon:"st.switches.light.on", backgroundColor:"#00a0dc", nextState:"turningOff"
            attributeState "turningOff", label:'switch', action:"on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn"
        }
       	tileAttribute("device.lastCheckin", key: "SECONDARY_CONTROL") {
			attributeState("default", label:'Last Update: ${currentValue}',icon: "st.Health & Wellness.health9")
	   	}
    }
    
   
    multiAttributeTile(name:"switch2", type: "device.switch", width: 6, height: 4, canChangeIcon: true){
        tileAttribute ("device.switch2", key: "PRIMARY_CONTROL") { 
            attributeState "on", label:'switch2', action:"off2", icon:"st.switches.light.on", backgroundColor:"#00a0dc", nextState:"turningOff"
            attributeState "off", label:'switch2', action:"on2", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn"
            attributeState "turningOn", label:'switch2', action:"off2", icon:"st.switches.light.on", backgroundColor:"#00a0dc", nextState:"turningOff"
            attributeState "turningOff", label:'switch2', action:"on2", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn"
        }
       	tileAttribute("device.lastCheckin", key: "SECONDARY_CONTROL") {
			attributeState("default", label:'Last Update: ${currentValue}',icon: "st.Health & Wellness.health9")
	   	}
    }
    multiAttributeTile(name:"switch3", type: "device.switch", width: 6, height: 4, canChangeIcon: true){
        tileAttribute ("device.switch3", key: "PRIMARY_CONTROL") { 
            attributeState "on", label:'switch3', action:"off3", icon:"st.switches.light.on", backgroundColor:"#00a0dc", nextState:"turningOff"
            attributeState "off", label:'switch3', action:"on3", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn"
            attributeState "turningOn", label:'switch3', action:"off3", icon:"st.switches.light.on", backgroundColor:"#00a0dc", nextState:"turningOff"
            attributeState "turningOff", label:'switch3', action:"on3", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn"
        }
       	tileAttribute("device.lastCheckin", key: "SECONDARY_CONTROL") {
			attributeState("default", label:'Last Update: ${currentValue}',icon: "st.Health & Wellness.health9")
	   	}
    }


    standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat", width: 2, height: 2) {
        state "default", label:"", action:"refresh.refresh", icon:"st.secondary.refresh"
        }
   main(["switch0"])
    details(["switch","switch2","switch3","refresh"])
}

}

// Parse incoming device messages to generate events

def parse(String description) {
log.debug “Parsing ‘${description}’”

def value = zigbee.parse(description)?.text
log.debug “Parse: $value”
Map map = [:]

if (description?.startsWith(‘catchall:’)) {
map = parseCatchAllMessage(description)
}
else if (description?.startsWith(‘read attr -’)) {
map = parseReportAttributeMessage(description)
}
else if (description?.startsWith('on/off: ')){
log.debug “onoff”
def refreshCmds = zigbee.readAttribute(0x0006, 0x0000, [destEndpoint: 0x10]) +
zigbee.readAttribute(0x0006, 0x0000, [destEndpoint: 0x11]) +
zigbee.readAttribute(0x0006, 0x0000, [destEndpoint: 0x12])

return refreshCmds.collect { new physicalgraph.device.HubAction(it) }
//def resultMap = zigbee.getKnownDescription(description)
//log.debug “${resultMap}”

    //map = parseCustomMessage(description) 
}

log.debug "Parse returned $map"
//  send event for heartbeat    
def now = new Date()

sendEvent(name: "lastCheckin", value: now)

def results = map ? createEvent(map) : null
return results;

}

private Map parseCatchAllMessage(String description) {
Map resultMap = [:]
def cluster = zigbee.parse(description)
log.debug cluster

if (cluster.clusterId == 0x0006 && cluster.command == 0x01){
	if (cluster.sourceEndpoint == 0x10)
    {
    log.debug "Its Switch one"
	def onoff = cluster.data[-1]
    if (onoff == 1)
    	resultMap = createEvent(name: "switch", value: "on")
    else if (onoff == 0)
        resultMap = createEvent(name: "switch", value: "off")
        }
        else if (cluster.sourceEndpoint == 0x11)
        {
        log.debug "Its Switch two"
	def onoff = cluster.data[-1]
    if (onoff == 1)
    	resultMap = createEvent(name: "switch2", value: "on")
    else if (onoff == 0)
        resultMap = createEvent(name: "switch2", value: "off")
        }
         else if (cluster.sourceEndpoint == 0x12)
        {
        log.debug "Its Switch three"
	def onoff = cluster.data[-1]
    if (onoff == 1)
    	resultMap = createEvent(name: "switch3", value: "on")
    else if (onoff == 0)
        resultMap = createEvent(name: "switch3", value: "off")
        }
     }
    
return resultMap

}

private Map parseReportAttributeMessage(String description) {
Map descMap = (description - “read attr - “).split(”,”).inject([:]) { map, param ->
def nameAndValue = param.split(":")
map += [(nameAndValue[0].trim()):nameAndValue[1].trim()]
}
//log.debug “Desc Map: $descMap”

Map resultMap = [:]

if (descMap.cluster == "0001" && descMap.attrId == "0020") {
	resultMap = getBatteryResult(convertHexToInt(descMap.value / 2))
}

else if (descMap.cluster == "0008" && descMap.attrId == "0000") {
	resultMap = createEvent(name: "switch", value: "off")
} 
return resultMap

}

def off() {
log.debug “off()”
sendEvent(name: “switch”, value: “off”)
“st cmd 0x${device.deviceNetworkId} 0x10 0x0006 0x0 {}”
}

def on() {
log.debug “on()”
sendEvent(name: “switch”, value: “on”)
“st cmd 0x${device.deviceNetworkId} 0x10 0x0006 0x1 {}”
}
def off2() {
log.debug “off2()”
sendEvent(name: “switch2”, value: “off”)
“st cmd 0x${device.deviceNetworkId} 0x11 0x0006 0x0 {}”
}

def on2() {
log.debug “on2()”
sendEvent(name: “switch2”, value: “on”)
“st cmd 0x${device.deviceNetworkId} 0x11 0x0006 0x1 {}”
}

def off3() {
log.debug “off3()”
sendEvent(name: “switch3”, value: “off”)
“st cmd 0x${device.deviceNetworkId} 0x12 0x0006 0x0 {}”
}

def on3() {
log.debug “on3()”
sendEvent(name: “switch3”, value: “on”)
“st cmd 0x${device.deviceNetworkId} 0x12 0x0006 0x1 {}”
}

def off0() {
log.debug “off0()”
sendEvent(name: “switch0”, value: “off”)
“st cmd 0x${device.deviceNetworkId} 0xFF 0x0006 0x0 {}”
// “st cmd 0x${device.deviceNetworkId} 0x11 0x0006 0x0 {}”
}

def on0() {
log.debug “on0()”
sendEvent(name: “switch0”, value: “on”)
“st cmd 0x${device.deviceNetworkId} 0xFF 0x0006 0x1 {}”
// “st cmd 0x${device.deviceNetworkId} 0x11 0x0006 0x1 {}”
}
def refresh() {
log.debug “refreshing”
[
“st rattr 0x${device.deviceNetworkId} 0x10 0x0006 0x0”, “delay 1000”,
// “st rattr 0x${device.deviceNetworkId} 0x10 0x0006 0x0”, “delay 250”,

//   "st rattr 0x${device.deviceNetworkId} 0x10 0x0001 0x0", "delay 250",
//    "st rattr 0x${device.deviceNetworkId} 0x10 0x0000 0x0",
    "st rattr 0x${device.deviceNetworkId} 0x11 0x0006 0x0", "delay 1000",
      "st rattr 0x${device.deviceNetworkId} 0x12 0x0006 0x0", "delay 1000",

// “st rattr 0x${device.deviceNetworkId} 0x11 0x0006 0x0”, “delay 250”,

//    "st rattr 0x${device.deviceNetworkId} 0x11 0x0001 0x0", "delay 250",
//    "st rattr 0x${device.deviceNetworkId} 0x11 0x0000 0x0",
]

}

private Map parseCustomMessage(String description) {
def result
if (description?.startsWith('on/off: ')) {
if (description == ‘on/off: 0’)
result = createEvent(name: “switch”, value: “off”)
else if (description == ‘on/off: 1’)
result = createEvent(name: “switch”, value: “on”)
}

return result

}

private Integer convertHexToInt(hex) {
Integer.parseInt(hex,16)
}

def off1() {
log.debug “off()”
sendEvent(name: “switch2”, value: “off”)

"st cmd 0x${device.deviceNetworkId} 0x10 0x0006 0x0 {}" 

}

def on1() {
log.debug “on()”
sendEvent(name: “switch2”, value: “on”)

"st cmd 0x${device.deviceNetworkId} 0x10 0x0006 0x1 {}" 

}

end here

Here is the smartapp.

/**

  • HUI Wall Switch Binder original from Andy’s SmartApp - shamlessly borrowed by the netsheriff and modded.

  • This app allows you to bind 3 Virtual On/Off Tiles to the 3 switchable outlets.

  • Author: simic with mod by netsheriff

  • Date: 05/09/2017
    */
    // Automatically generated. Make future change here.
    definition(
    name: “George’s Wall Switch Binder 1.0 for 3 Gang Switch”,
    namespace: “”,
    author: “George Castanza”,
    description: “This app allows you to bind 3 Virtual On/Off Tiles to the 3 switchable outlets.”,
    category: “Convenience”,
    iconUrl: “https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png”,
    iconX2Url: “https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience%402x.png”)
    preferences {
    section(“Which HUI Wall Switch is used?”){
    input “strip”, “capability.Switch”
    }
    section(“Select a Virtual Switch to bind to Outlet 1”){
    input “switch1”, “capability.Switch”
    }
    section(“Select a Virtual Switch to bind to Outlet 2”){
    input “switch2”, “capability.Switch”
    }
    section(“Select a Virtual Switch to bind to Outlet 3”){
    input “switch3”, “capability.Switch”
    }
    }
    def installed() {
    log.debug “Installed with settings: ${settings}”
    subscribe(strip, “switch.on”, MainSwitchOnOneHandler)
    subscribe(strip, “switch.off”, MainSwitchOffOneHandler)
    subscribe(strip, “switch1.on”, MainSwitchOnOneHandler)
    subscribe(strip, “switch1.off”, MainSwitchOffOneHandler)
    subscribe(strip, “switch2.on”, MainSwitchOnTwoHandler)
    subscribe(strip, “switch2.off”, MainSwitchOffTwoHandler)
    subscribe(strip, “switch3.on”, MainSwitchOnThreeHandler)
    subscribe(strip, “switch3.off”, MainSwitchOffThreeHandler)

    subscribe(switch1, “switch.on”, switchOnOneHandler)
    subscribe(switch2, “switch.on”, switchOnTwoHandler)
    subscribe(switch3, “switch.on”, switchOnThreeHandler)
    subscribe(switch1, “switch.off”, switchOffOneHandler)
    subscribe(switch2, “switch.off”, switchOffTwoHandler)
    subscribe(switch3, “switch.off”, switchOffThreeHandler)
    }
    def updated(settings) {
    log.debug “Updated with settings: ${settings}”
    unsubscribe()
    subscribe(strip, “switch.on”, MainSwitchOnOneHandler)
    subscribe(strip, “switch.off”, MainSwitchOffOneHandler)

    subscribe(strip, “switch1.on”, MainSwitchOnOneHandler)
    subscribe(strip, “switch1.off”, MainSwitchOffOneHandler)

    subscribe(strip, “switch2.on”, MainSwitchOnTwoHandler)
    subscribe(strip, “switch2.off”, MainSwitchOffTwoHandler)

    subscribe(strip, “switch3.on”, MainSwitchOnThreeHandler)
    subscribe(strip, “switch3.off”, MainSwitchOffThreeHandler)

    subscribe(switch1, “switch.on”, switchOnOneHandler)
    subscribe(switch2, “switch.on”, switchOnTwoHandler)
    subscribe(switch3, “switch.on”, switchOnThreeHandler)

    subscribe(switch1, “switch.off”, switchOffOneHandler)
    subscribe(switch2, “switch.off”, switchOffTwoHandler)
    subscribe(switch3, “switch.off”, switchOffThreeHandler)
    }
    def MainSwitchOnOneHandler(evt) {
    log.debug “switch on”
    switch1.on()
    }
    def MainSwitchOffOneHandler(evt) {
    log.debug “switch off”
    switch1.off()
    }
    def MainSwitchOnTwoHandler(evt) {
    log.debug “switch on”
    switch2.on()
    }
    def MainSwitchOffTwoHandler(evt) {
    log.debug “switch off”
    switch2.off()
    }
    def MainSwitchOnThreeHandler(evt) {
    log.debug “switch on”
    switch3.on()
    }
    def MainSwitchOffThreeHandler(evt) {
    log.debug “switch off”
    switch3.off()
    }
    def switchOnOneHandler(evt) {
    log.debug “switch on1”
    strip.on()
    }
    def switchOnTwoHandler(evt) {
    log.debug “switch on2”
    strip.on2()
    }
    def switchOnThreeHandler(evt) {
    log.debug “switch on3”
    strip.on3()
    }
    def switchOffOneHandler(evt) {
    log.debug “switch off1”
    strip.off()
    }
    def switchOffTwoHandler(evt) {
    log.debug “switch off2”
    strip.off2()
    }
    def switchOffThreeHandler(evt) {
    log.debug “switch off3”
    strip.off3()
    }

3 Gang DH

Try this. It wont let me upload .txt files. Link will go dead in a few days.

Here is the SmartApp and DTH in GitHub
Makes it easier to cut and past into Smartthings.

I prettied up the DTH a bit, so now you know which switch is which and also when they are turning on and off. Works with Alex and GH.

There is a small error in the DTH in that Switch1 light bulb icon stays on even when the switch is off. No biggie and will fix that when I get around to it.

HUI Wall Switch Binder 1.1 for 3 Gang Switch

HUI ZigBee Wall Switch 3 Gang V.3.0

Thanks all for your assistance.

I have these two loaded without error.

I am still having a challenge I must be installing or configuring them wrong. Could I get some guidance on how I should be setting these up.

I have assumed that I use the “HUI Wall Switch Binder 1.1 for 3 Gang Switch” as a smart app? If this is correct I dont really know what i should do next.

Mike

Yeah, you need to add both as code save and publish you can also test with the simulator.

Just the DTH will make the switch in phone app work in conjunction with physical switch.

Install the smart app will allow you to control the switch with Alexa/GH/ smart tiles.

To do this you need to create 3 simulated switches. https://youtu.be/ro2CisLBLjI and look here

Once you have made 3 simulated switches with network IDs and named them what you want the Echo/GH to say you then go to the Marketplace, SmartApps, +My Apps and load my Hui switch binder. In my Binder App choose the actual Hui switch (that you linked to my DH) for the switch, then for the 3 virtual switches choose the 3 Simulated Switches you just made in the order you want them in the 3 gang switch. Assign a name to it. Discover devices with Echo/GH and you should see your 3 simulated switches come up. You dont need to use the actual switch for voice control only the simulated switches. You only use the actual switch within the Smartthings App to control the 3 gangs with your phone. Now you can voice activate these 3 simulated switches the same as you can a std single smart light bulb.

1 Like

@netsheriff

Awesome thank you so much that works perfectly. :grinning:

Mike

Glad it worked for you. Gives that Hui 3 gang switch a whole lot more value being able to be properly controlled in Smartthings. :smile:

You can if you want make a 4th simulated switch and in the “what devices do you want to control?” tab put the 3 simulated switches you made above and call it ‘upstairs lights’ or some such thing. Do a discover with Alexa/GH and then you will have a switch that can turn all 3 gangs on or off at once.

Hi Netsheriff, I have installed both your DH v3.0 and Smart App 1.1. Have also created the virtual switch and can control the 3 individual buttons, so thats all good…however, switch still is not reporting back its state to the ST ? Any ideas?

Got a xmas light effect using an earlier version of the DH. Replaced the DH and works fine now.

Dunno.

Make sure you have properly published the DTH and that it is associated with your device type.

Check the logs and see if you have any errors.

Having flashing lights effect to one of the 3 switches yesterday. This is a week after updating the DH to the latest version from here. Any clue?

Sounds like the DTH for the actual light is playing up not the switch. Do you have smart light bulbs as well?
Sounds like OSRAM Lightify bulbs that can pretend to be Christmas tree lights. Try one of the other DTHs to fix that.

They are not smart light bulbs. BTW resolved by changing the from virtual switch to simulated switch DH for the individual relay.

Yeah, see my previous post, you need to use simulated switches. You can even make an extra simulated switch to turn all 3 gangs on or off at once.

Do you know of any other supplier for similar type of zigbee smart wall switch?

For Australia there are bugger all smart switches zigbee, z-wave or wifi available that have been approved for use here.

Negotiations are currently underway for Sonoff T1 switches to be approved for use in Au.
Hopefully that will not be too far away. Sonoff wifi switches can be flashed with a number of different firmwares including one for use with Smarthings. There are new rectangle US/Au switches that can be flashed with the 4Ch firmware and used with smartthings. https://www.itead.cc/sonoff-t1-us.html

See here [RELEASE] Sonoff, Sonoff TH, S20, Dual, 4CH, POW, & Touch Device Handler & SmartApp ($5 & $10 Smart Switches)

The problem with its wall switch is the size of the box which is slightly bigger than the old fixed wall switch metal frame. In short it can’t be fitted into the old type metal frame.

Here is an attempt at formulating a recipe to follow for installation of this switch. Please feel free to critique/edit.

Steps:

  1. Log in to SmartThings Developer Tools https://graph.api.smartthings.com/
  2. Click Locations. Then in the table select the (hub name). Then click on the “Hubs . (hub name)”
  3. Ensure Zigbee: “OTA enabled for all non-light devices” and “Unsecure rejoin: true”. If this is not the case click “View Utilities” and edit ZigBee Utilities appropriately.
  4. Click My Locations. Then Click events. Then click all.
  5. Power Up the 3 Gang Switch. Press the small button till red light appears. Please note that the hub must be physically close to the switch.
  6. Open Smartthings Classic App on your phone and Add a thing. The red light on 3 gang switch turns off suggesting that the switch has been added on the SmartThings hub.
  7. Check the Events in step 5. look for recent zb_join events. Click on the date / time to the left of the zigbee_join event and view details. Eg: zbjoin{“dni”:“9CF0”,“d”:“00124B000AE76565”,“capabilities”:“8E”,“endpoints”:[{“simple”:“10 0104 0002 00 04 0000 0005 0004 0006 010000”,“application”:"",“manufacturer”:“Feibit Inc co.”,“model”:“FB56+ZSW1GKJ1.7”
  8. Create a device in SmartThings by clicking on My Devices and then +New Device button (right upper) to create a new device.
  9. Fill as below: Eg:[Name: , Label: , Zigbee Id: 00124B000AE76565 from the above event, Device Network Id: 9CF0 For type select ZigBee Switch for now. Version: Self-Published. Please select your location and hub. The click on the create button.
  10. Create a device handler by clicking on My Device Handlers and on the next page the +Create New Device Handler button. On the next page click on tab From code. Paste in the most current code for the device handler from reference 2. Then click the Save button. Then click the Publish button. Select For me.
  11. Now Create the Smart App by clicking on My SmartApps and on the next page the +New SmartApp button. On the next page click on tab From code. Paste in the most current code for the device handler from reference 2. Then click the Save button. Then click the Publish button. Select For me.
  12. Now edit the device type in My Devices. Click on the name of the you created in step 8. Click on Edit at the bottom and select the type as “HUI ZigBee Wall Switch 3 Gang V.x.x”. The click Update.
  13. Now Create 3 virtual switches as per reference 3 (Video); similar to process in step 8. Please ensure that the settings are as follows: Name and label , Type Simulated Switch, Version Published, Hub: .
  14. Now on the SmartThings App go to Marketplace > SmartApps > +My Apps and load “Hui Wall Switch Binder…”
  15. Now select switch created in step 8 and the first switch and the others as 2nd to fourth switches. Save and you are done.
    Enjoy lighting :slight_smile:

References:
How to add Nue ZigBee Switches to SmartThings Hub: pdf from http://3asmarthome.com/downloads
Help with new DH for Aust 3 Gang light switch - catchall included
https://www.youtube.com/watch?v=ro2CisLBLjI&feature=youtu.be