Aeon Labs Energy Meter clamps

Nope. Just create an account, do some curl…good times ahead.

Never used Curl before, got to see if available for Mac. I made an account is there instructions for setting this up?

There are instructions on the forum. Just search for plottwatt. It’s very simple and yes Mac has curl since it’s already UNIX based, or BSD, or whatever it is. Out and about right now or I’d find the article and link it for ya.

I see a K and an L on the bottom, but if there is an arrow between them, I can’t see that, because, on both of them, there is a little round sticker covering whatever may be between the two letters. Is that where the arrow is? If so, which way is it pointing relative to the two letters K & L?

Wait…does this apply to my question about the arrow too, or not?

Also, can anyone assist with this question?..

[quote=“sgnihttrams, post:205, topic:359, full:true”]

…does that mean that, if I were to separate the two parts of the lamp cord, and put the clamps on the separated portions of cord, I’d get readings?[/quote]

No, I don’t think so. Both clamps need to read voltage. Lamp cord has a neutral side and 120V side.

It would work on a 240V appliance.

The direction of the clamps is irrelevant, it doesn’t matter which direction they face.
This meter device was designed to have one clamp on each leg of your 240 service, these are the two big ass wires that come from your meter to your panel box. One is black and the other is black with a red stripe usually.
When using these clamps on an appliance, irrespective of the voltage, the clamp must be placed around the hot (usually black) or the neutral wire (usually white) of the appliance circuit. If placed around both no reading will be produced.
Placing the clamp around the ground wire will also produce no reading.
If the appliance cord is one of the flat style (vs round), and enterprising individual can easily separate the conductors along the mold lines of the cord. With flat cords the ground conductor is in the middle.
I currently have an HEM with one clamp on my washer and the other on my electric dryer.
The voltage of the circuit is only relevant when the device calculates watts, as watts are a product of voltage * amperage.


The arrow is between the K & L I don’t recall which way it pointed, and I tried to find a copy of the instructions online to no avail, I will see if I can dig them out when I get home. As for weather or not it matters which way they point, I know in the manual I have it said to do KL on the other. I can’t imagine they would spell that out if it didn’t matter for something.

1 Like

cURL from what I am told, “comes with mac” you can just do it from the Terminal window. If you are using a windows PC, Download it from (I am not affiliated with them, this is just where I downloaded it from)

and this is the post on setting up plottwatt

1 Like

I just did this on my dryer and stove, both are 240v so I used both clamps. Unplug the appliance, take the service access cover off the back. Verify which wire is which with a multimeter. On my three conductor dryer the center was neutral, clamps went on the other two. On my 4 conductor stove there was a red and black which were the two clamp legs. Make sure to CAREFULLY separate the leads, you don’t want to expose copper when pulling them apart, then clamp and reattach the wires through the service panel. I found it easier to fully remove the cable to separate and position everything. Like Mike said, direction has no bearing on this. If you are doing a 110v cord, you have to make sure it’s only using one clamp and only on hot or neutral, also like he said. I have a third “spare” meter that I’ve randomly putting on things just to play with. Always get a solid, expected, reading with just one clamp plugged into port 1.

It’s hard to tell on this first picture, I may have circled the wrong one on the left, the outer two, should have a thicker jacket, are what you want, again, use a multimeter to verify. The L shaped plug is neutral, don’t want that one.


just a point of clarification, on a 220 circuit (like a range or a dryer), unless you’re interested in the actual energy draw, there is no need to use two clamps.
Meaning, if your intent with the HEM is to determine the appliances on off state and use that value in RM or something, one clamp on the red or the black phase will do.


Wow! Thanks, guys.
I think your smarts may just be enough to overcome my stupids. lol

A while back, I found that one thread that deals with using both clamps independently, but I was never able to make it work, because of…well…stupids. I think I have a much better understanding of some of this now, and would like to attempt it again.

The first thing I’m going to try next, is to just get one of my two v1 HEMs connected to something the proper way (with above posts added into my understanding).

After that, I want to move on to this…

I want to monitor cooking appliances in the kitchen (mainly, the microwave oven, and then eventually, the conventional oven and its associated stove-top; all are electric), and have the house fan turn on to circulate the air (mainly to disperse odors that tend to settle where I don’t want them, and to some small degree, filter them out).

When one of the kitchen appliances turns on (i.e. somebody is cooking something), it will trigger the main HVAC fan for the whole house to turn on, and then turn off x-minutes after the appliance turns back off.

If any part of that sounds whacky, please let me know. I’d love to hear anything else that anyone has to offer.

to use and configure the probes independently one must have a custom device type, as the HEM needs to be configured to report each of it’s clamps independently. That’s probably why it didn’t work for you.
There are threads and device types out there for this already.

Yep. I found this one…

It’s the one I mentioned above.
However, I was never able to get it to work…most likely due to my previously mentioned ‘stupids’. :slight_smile:

I will try it again with this newfound wisdom, and see if I can make it work.

If there’s anything different I need to do to monitor on-off of two different items with the two clamps using this device handler, please say something. :slight_smile:

I ended up writing up one from scratch for my laundry monitor solution.
It currently presses button 1 when the washer wattage falls below the value configured in preferences.
And button 2 when the dryer falls below it’s preference wattage.
You’re looking for the opposite sort of thing, but this would give you a much better starting device type.
It includes the correct configuration settings to enable independent reporting for each probe.

Custom Laundry monitor device for Aeon HEM V1 


metadata {
	definition (name: "Aeon HEM V1 Laundry DTH", namespace:	"MikeMaxwell", author: "Mike Maxwell") 
		capability "Configuration"
		capability "Switch"
        capability "Button"
        //capability "Energy Meter"

        attribute "washerWatts", "string"
        attribute "dryerWatts", "string"
        attribute "washerState", "string"
        attribute "dryerState", "string"
        command "configure"
		fingerprint deviceId: "0x2101", inClusters: " 0x70,0x31,0x72,0x86,0x32,0x80,0x85,0x60"

	preferences {
       	input name: "washerRW", type: "number", title: "Washer running watts:", description: "", required: true
        input name: "dryerRW", type: "number", title: "Dryer running watts:", description: "", required: true
    simulator {


	tiles(scale: 2) {
    	multiAttributeTile(name:"laundryState", type: "generic", width: 6, height: 4){
        	tileAttribute ("device.switch", key: "PRIMARY_CONTROL") {
            	attributeState "on", label:'Running', icon:"st.Appliances.appliances1", backgroundColor:"#79b821"
            	attributeState "off", label:'Nothing running', icon:"st.Appliances.appliances1", backgroundColor:"#ffffff"
        valueTile("washerState", "device.washerState", width: 3, height: 2) {
        	state("on", label:'Washer:\nRunning', backgroundColor:"#79b821")
            state("off", label:'Washer:\nNot running', backgroundColor:"#ffffff")
        valueTile("dryerState", "device.dryerState", width: 3, height: 2) {
        	state("on", label:'Dryer:\nRunning', backgroundColor:"#79b821")
            state("off", label:'Dryer:\nNot running', backgroundColor:"#ffffff")
        valueTile("washer", "device.washerWatts", width: 3, height: 1, decoration: "flat") {
        	state("default", label:'Washer\n${currentValue}\nWatts', foregroundColor: "#000000")
        valueTile("dryer", "device.dryerWatts", width: 3, height: 1, decoration: "flat") {
        	state("default", label:'Dryer\n${currentValue}\nWatts', foregroundColor: "#000000")
		standardTile("configure", "command.configure", inactiveLabel: false) {
			state "configure", label:'', action: "configure", icon:"st.secondary.configure"
		main "laundryState"

def installed() {

def parse(String description) {
//	log.debug "Parse received ${description}"
	def result = null
	def cmd = zwave.parse(description, [0x31: 1, 0x32: 1, 0x60: 3])
	if (cmd) {
		result = createEvent(zwaveEvent(cmd))
	if (result) { 
		//log.debug "Parse returned ${result?.descriptionText}"
		return result
	} else {

def zwaveEvent(physicalgraph.zwave.commands.multichannelv3.MultiChannelCmdEncap cmd) {
	// "mc3v cmd: ${cmd}"
	if (cmd.commandClass == 50) {  
    	def encapsulatedCommand = cmd.encapsulatedCommand([0x30: 1, 0x31: 1])
        if (encapsulatedCommand) {
        	def scale = encapsulatedCommand.scale
        	def value = encapsulatedCommand.scaledMeterValue
            def source = cmd.sourceEndPoint
            def str = ""
            def name = ""
        	if (scale == 2 ){ //watts
            	str = "watts"
                if (source == 1){
                	name = "washerWatts"
                    if (value >= settings.washerRW.toInteger()){
                    	//washer is on
                        sendEvent(name: "washerState", value: "on", displayed: false)
                        state.washerIsRunning = true
                    } else {
                    	//washer is off
                        if (state.washerIsRunning == true){
                        	//button event
                            sendEvent(name: "button", value: "pushed", data: [buttonNumber: 1], descriptionText: "Washer has finished.", isStateChange: true)
                        sendEvent(name: "washerState", value: "off", displayed: false)
                        state.washerIsRunning = false
                } else {
                	name = "dryerWatts"
                    if (value >= settings.dryerRW.toInteger()){
                    	//dryer is on
                        sendEvent(name: "dryerState", value: "on", displayed: false)
                        state.dryerIsRunning = true
                    } else {
                    	//dryer is off
                        if (state.dryerIsRunning == true){
                        	//button event
                            sendEvent(name: "button", value: "pushed", data: [buttonNumber: 2], descriptionText: "Dryer has finished.", isStateChange: true)
                        sendEvent(name: "dryerState", value: "off", displayed: false)
                        state.dryerIsRunning = false
                if (state.washerIsRunning || state.dryerIsRunning){
                	sendEvent(name: "switch", value: "on", descriptionText: "Laundry has started...", displayed: true)
                } else {
                	sendEvent(name: "switch", value: "off", displayed: false)
                //log.debug "washerIsRunning: ${state.washerIsRunning}, dryerIsRunning: ${state.dryerIsRunning}"
            	return [name: name, value: value.toInteger(), unit: str, displayed: false]

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

def configure() {
	log.debug "configure()"
	def cmd = delayBetween([
    	//zwave.configurationV1.configurationSet(parameterNumber: 100, size: 4, scaledConfigurationValue:1).format(),	//reset if not 0
        //zwave.configurationV1.configurationSet(parameterNumber: 110, size: 4, scaledConfigurationValue: 1).format(),	//reset if not 0
    	zwave.configurationV1.configurationSet(parameterNumber: 1, size: 2, scaledConfigurationValue: 120).format(),		// assumed voltage
		zwave.configurationV1.configurationSet(parameterNumber: 3, size: 1, scaledConfigurationValue: 0).format(),			// Disable (=0) selective reporting
		zwave.configurationV1.configurationSet(parameterNumber: 9, size: 1, scaledConfigurationValue: 10).format(),			// Or by 10% (L1)
      	zwave.configurationV1.configurationSet(parameterNumber: 10, size: 1, scaledConfigurationValue: 10).format(),			// Or by 10% (L2)
		zwave.configurationV1.configurationSet(parameterNumber: 20, size: 1, scaledConfigurationValue: 1).format(),			//usb = 1
		zwave.configurationV1.configurationSet(parameterNumber: 101, size: 4, scaledConfigurationValue: 6912).format(),   	
		zwave.configurationV1.configurationSet(parameterNumber: 111, size: 4, scaledConfigurationValue: 60).format() 		// Every 60 seconds
	], 2000)

	return cmd

I think I can use this, thanks!

I currently use these to calculate overall energy usage. With all my monitoring devices I can then sum and subtract from my one meter that monitors the whole house, and see how much “leakage” I have with the few non monitored devices and most of my lights.

I then have the washer/dryer/dishwasher send alerts to the various family members that are tasked with those chores to alert them when cycles are complete. Bugs the crap out of them, but darn if they aren’t more efficient with it!


I don’t know what is going on I imported the Api which went fine then I opened terminal and entered:

curl -X POST -d “number_of_new_meters=1”

and the result was "command not found. Any ideas as the number next to http:// is the number listed in the API

want me to do it for you? your new meter number will show up on the webpage. Also you’re going to want to edit your post to remove the house API ID so others dont see it long term.

Yes please and I will edit it out. Just tell me what to do after. Thanks.

Ok, you’re having the same Issue I did when I did this the first time too. My first “house” didn’t configure correctly for some reason. I say this is the issue because I just ran your code and I got no response back from plotwatt.

Is there a private messenger on this forum?

Yes just click my name and it comes up.