Aeotec DSC18103-ZWEU Micro Smart Switch (2nd Edition) no Watts

I’ve just installed this to control my landing listings and it connected first time as an outlet but it doesn’t report watts and the ‘configure’ option doesn’t do anything. Has anyone else with one got this working or installed it as a different type of device?

Hi @Gupster ,

I personally have the DSC27103’s installed, so I use a micro dimmer device type.

However, @Mike_Maxwell created an aeonSwitch device type that may help:

So, I found the standard device type that ST provide and created a custom one. What I’ve discovered is the KWh is a running total of use. The Configure button actually sends the config to the device so I assume this should be a one time thing.

I was able to modify the device type code so it now reports both current W and kWh.

2 Likes

Hi @Gupster

Any chance you can upload the modified code so I can review, I am pretty sure that @Mike_Maxwell code do not report energy usage as he has the non energy version (If memory serves me right) so he didn’t need that segment.

What was the device type you used from the IDE?

I tried I couple of variants that were posted on here but just found there was to much change and other settings added into the function, somewhere along line something in it slowed the response for my sensor to trigger mine on motion. so reverted back to the standard “Aeon Outlet” device type.

Cheers

Craig

In essence the changes from the outlet standard code are changes in the config messages to the device and then reading the data it sends in the correct format. Also I know understand as stated the Configure button is a one time needed thing to send the config to the device and the kWh is an cumulate number.

Other than that, I’ve added some debug logging and tarted up the device page tiles.

/**
 *  Copyright 2015 SmartThings and gpsmith
 * 
 * 	Based on original implementation by SmartThings but fixed some of the issues.
 *
 *  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 Outlet DEBUG", namespace: "gpsmith", author: "SmartThings and gpsmith") {
		capability "Energy Meter"
		capability "Actuator"
		capability "Switch"
		capability "Configuration"
		capability "Polling"
		capability "Refresh"
		capability "Sensor"

		command "reset"

		fingerprint deviceId: "0x1001", inClusters: "0x25,0x32,0x27,0x2C,0x2B,0x70,0x85,0x56,0x72,0x86", outClusters: "0x82"
	}

	// simulator metadata
	simulator {
		status "on":  "command: 2003, payload: FF"
		status "off": "command: 2003, payload: 00"

		for (int i = 0; i <= 100; i += 10) {
			status "energy  ${i} kWh": new physicalgraph.zwave.Zwave().meterV2.meterReport(
				scaledMeterValue: i, precision: 3, meterType: 0, scale: 0, size: 4).incomingMessage()
		}

		// reply messages
		reply "2001FF,delay 100,2502": "command: 2503, payload: FF"
		reply "200100,delay 100,2502": "command: 2503, payload: 00"

	}

	tiles (scale: 2) {
    
      	multiAttributeTile(name:"switch", type:"lighting", width:6, height:4, canChangeIcon: true) {
    		tileAttribute("device.switch", key: "PRIMARY_CONTROL") {
              attributeState "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#fdbc32"
              attributeState "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff"
    		}
        }

    	valueTile("power", "device.power", decoration: "flat", width: 3, height: 2) {
        	state "power", label:'${currentValue} W'
    	}

		valueTile("energy", "device.energy", decoration: "flat", width: 3, height: 2) {
			state "default", label:'${currentValue} kWh\n(total)'
		}
        
		standardTile("reset", "device.energy", inactiveLabel: false, decoration: "flat", width: 2, height: 2) {
			state "default", label:'reset kWh', action:"reset"
		}
		standardTile("configure", "device.power", inactiveLabel: false, decoration: "flat", width: 2, height: 2) {
			state "configure", label:'', action:"configuration.configure", icon:"st.secondary.configure"
		}
		standardTile("refresh", "device.power", inactiveLabel: false, decoration: "flat", width: 2, height: 2) {
			state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
		}

		main "switch"
		details(["switch","energy","power","refresh","reset","configure"])  
        //details(["switch","energy","reset","refresh","configure"])
	}

}

def parse(String description) {
	def result = null
	def cmd = zwave.parse(description, [0x20: 1, 0x32: 3])
	if (cmd) {
		log.debug cmd
		result = createEvent(zwaveEvent(cmd))
	}
	return result
}

def zwaveEvent(physicalgraph.zwave.commands.meterv3.MeterReport cmd) {
	if (cmd.scale == 0) {
		[name: "energy", value: (String.format("%6.3f", cmd.scaledMeterValue)), unit: "kWh"]
	} else if (cmd.scale == 1) {
		[name: "energy", value: cmd.scaledMeterValue, unit: "kVAh"]
	}
	else {
		//log.debug "Fallen to W"
		[name: "power", value: Math.round(cmd.scaledMeterValue), unit: "W"]        
	}
}


/*
v2 didn't seem to be working.
def zwaveEvent(physicalgraph.zwave.commands.meterv2.MeterReport cmd) {
	if (cmd.scale == 0) {
		[name: "energy", value: cmd.scaledMeterValue, unit: "kWh"]
	} else if (cmd.scale == 1) {
		[name: "energy", value: cmd.scaledMeterValue, unit: "kVAh"]
	}
	else {
		debug.log "Fallen to W"
        //[name: "power", value: Math.round(cmd.meterValue), unit: "W"]
		//[name: "power", value: Math.round(cmd.scaledMeterValue), unit: "W"]        
	}
}
*/

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd)
{
	[
		name: "switch", value: cmd.value ? "on" : "off", type: "physical"
	]
}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd)
{
	[
		name: "switch", value: cmd.value ? "on" : "off", type: "digital"
	]
}

def zwaveEvent(physicalgraph.zwave.Command cmd) {
	// Handles all Z-Wave commands we aren't interested in
	//log.debug "Unhandled: ${cmd}"
    [:]
}

def on() {
	delayBetween([
		zwave.basicV1.basicSet(value: 0xFF).format(),
		zwave.switchBinaryV1.switchBinaryGet().format()
	])
}

def off() {
	delayBetween([
		zwave.basicV1.basicSet(value: 0x00).format(),
		zwave.switchBinaryV1.switchBinaryGet().format()
	])
}

def poll() {
	delayBetween([
		zwave.switchBinaryV1.switchBinaryGet().format(),
		zwave.meterV2.meterGet().format()
	])
}

def refresh() {
	zwave.switchBinaryV1.switchBinaryGet().format()
}

def reset() {
	return [
		zwave.meterV2.meterReset().format(),
		zwave.meterV2.meterGet().format()
	]
}

def configure() {

	log.debug "Send Configuration to device"
	delayBetween([
    
		//zwave.configurationV1.configurationSet(parameterNumber: 101, size: 4, scaledConfigurationValue: 8).format(),   // energy in kWh
        //zwave.configurationV1.configurationSet(parameterNumber: 111, size: 4, scaledConfigurationValue: 300).format(), // every 5 min      
      
        zwave.configurationV1.configurationSet(parameterNumber: 101, size: 4, scaledConfigurationValue: 4).format(),   // energy in Watts
		zwave.configurationV1.configurationSet(parameterNumber: 111, size: 4, scaledConfigurationValue: 5).format(), 	// every 5 sec
        
        zwave.configurationV1.configurationSet(parameterNumber: 91, size: 2, scaledConfigurationValue: 1).format(), 	// Send report for a 1W change
        
		zwave.configurationV1.configurationSet(parameterNumber: 102, size: 4, scaledConfigurationValue: 8).format(),	//  energy in kWh
		zwave.configurationV1.configurationSet(parameterNumber: 103, size: 4, scaledConfigurationValue: 300).format()	//  every 5 min
	])
}
1 Like

Hi @Gupster

Have a play with the code and tried it out and it seems to be good, the lag I was getting seems to be a lot better as well.

Cheers for the code.

Regards

Craig

Cool, glad it’s working for you. To be fair the ST guys did most of the heavy lifting, I just came in at the end and took the glory by fixing some of the issues :slightly_smiling: