[RELEASE] Salus SP600 Smart Plug with Presence

There've already been a couple of community drivers for the SP600, but I make pretty heavy use of presence detection which wasn't included in other releases, so here's my take on it.

This makes it really easy to tell when a certain somebody has powered off the smart plug. :wink:

Thanks to the other developers (where I learned how to configure the reporting intervals) and to @markus for explaining how to properly sendZigbeeCommands, which I also now use for raw commands in my AlertMe drivers.

1 Like

I'm not sure whether this is possible on Hubitat just yet, but these devices do support Over The Air updates with the firmware made available by Salus themselves here:

https://eu.salusconnect.io/demo/default/status/firmware?timestamp=0

This would be pretty cool, as I have at least one device that never reports power and I'd like to try a firmware update, but don't have a Salus hub. There's plenty of chat about such things on this zigbee2mqtt issue.

It might also report temperature, but in my experience outlets and smart plugs give pretty skewed values that are tricky to correct for.

It is not, the update cluster packets are filtered and never reach community drivers. :frowning:

In general they are more for overheating checks than anything else.

Ah, well - something for the future!

Of course, that's sensible. I did try to correct for it, but I may remove (well, comment out) temperature reporting from my AlertMe drivers, as they're likely just skewing the averages right now. Or use the sensor as intended and add overheating alerts. :smiley:

1 Like

What I have done in my drivers is just report the temperature when it exists and let the user do with it as they wish.

1 Like

I've not moved over to your driver yet but am getting these on the other FYI

moved one over,

That's interesting. I don't see that on my test plugs. Have you tried resetting the plug and re-pairing? The message looks like a counter coming through on the on/off cluster, though it's tricky to tell from the screenshot.

How often does the message come through? I'm just curious, it doesn't affect the operation of the outlet, but it's always interesting to question what they're shouting about.

it was working fine, logs have been cut overnight.
power is reporting was every 10 seconds or so even when off
refreshes are around every 10min

should ln 283 not be a WAR
logging("${device} : hmm. don't know what this is right now. : ${map}", "trace")

ok enabled logging and got the message again, it has been switched off since last night
edit then see, to come in waves of 4

2020-09-09 07:49:39.205 am traceLiving room TV Power : hmm. don't know what this is right now. : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6FFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6F, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:49:39.200 am traceLiving room TV Power : processMap() : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6FFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6F, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:49:39.194 am debugLiving room TV Power : Parse : catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6FFDFF0401010A0000

dev:21832020-09-09 07:49:37.205 am traceLiving room TV Power : hmm. don't know what this is right now. : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6EFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6E, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:49:37.201 am traceLiving room TV Power : processMap() : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6EFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6E, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:49:37.195 am debugLiving room TV Power : Parse : catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6EFDFF0401010A0000

dev:21832020-09-09 07:49:35.193 am traceLiving room TV Power : hmm. don't know what this is right now. : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6DFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6D, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:49:35.189 am traceLiving room TV Power : processMap() : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6DFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6D, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:49:35.177 am debugLiving room TV Power : Parse : catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6DFDFF0401010A0000

second wave

2020-09-09 07:39:37.733 am traceLiving room TV Power : hmm. don't know what this is right now. : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6CFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6C, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:39:37.727 am traceLiving room TV Power : processMap() : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6CFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6C, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:39:37.715 am debugLiving room TV Power : Parse : catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6CFDFF0401010A0000

dev:21832020-09-09 07:39:35.731 am traceLiving room TV Power : hmm. don't know what this is right now. : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6BFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6B, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:39:35.726 am traceLiving room TV Power : processMap() : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6BFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6B, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:39:35.720 am debugLiving room TV Power : Parse : catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6BFDFF0401010A0000

dev:21832020-09-09 07:39:33.746 am traceLiving room TV Power : hmm. don't know what this is right now. : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6AFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6A, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:39:33.741 am traceLiving room TV Power : processMap() : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6AFDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[6A, FD, FF, 04, 01, 01, 0A, 00, 00]]

dev:21832020-09-09 07:39:33.735 am debugLiving room TV Power : Parse : catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 6AFDFF0401010A0000

those were when off this is when on
Living room TV Power : hmm. don't know what this is right now. : [raw:catchall: 0000 0006 00 00 0040 00 7D67 00 00 0000 00 00 01FDFF0401010A0000, profileId:0000, clusterId:0006, clusterInt:6, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:7D67, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[01, FD, FF, 04, 01, 01, 0A, 00, 00]]

That's spot on for this driver.

A warning?

I've had a read through the other drivers and a couple available for ST. Every other driver completely ignores this message. It only appears on mine with debug or trace turned on because I'm specifically looking for missed messages, just in case there's something cool.

Honestly, this doesn't look like anything cool, unless someone can school me. Perhaps just an 8-bit counter for how long the device has been in the given on/off state.

If you're worried about it clogging up the logs, when you turn off debug and trace the potential log entries are instantly discarded, much as the other drivers do with the original message.

no, just reporting un parsed message to improve if needed

1 Like

Awesome - I do appreciate it! :slight_smile:

its strange the leading number is ticking up with each message

some where it reset because this morning it was in the 100's

image

on boot this morning got these

1 Like

more unknown data

1 Like

Cheers, @mark, I'll get to updating the driver at some point! :slight_smile:

no prob, how do you work out what the messages are, is there some method of decoding?

Yeah, there are a couple of reference guides out there where many of the general cluster specs can be found - though there are some that crop up that are undocumented, device or manufacturer specific, or just plain odd. :slight_smile: