Yes, I use this model for that exact purpose - you just need to ensure the lights are dim compatible.
This is the device target for the next release of the App
I’m not sure I can correctly complete the quad light without the device interview, but will include support for it and can update any corrections as I’m basing it off other sources
Looks good, hoping to have everything wired in over the next couple weeks. Also happy to work with you to develop the app once I get my homey. As I think Mercator will become increasingly popular with Homey as more people touch into home automation.
v1.1 of the app with the new devices published for approval in the store and should be available soon.
Finally getting my Homey Setup today with all the Mercator switches wired and working. I have a 5 gang switch installed, is this something you can add to the app?
Working on it right now !!
I will need to know the manufacture ID and product ID, which you can get from the settings of the device if you add to Homey as an unknown Zigbee.
And if you go to… https://tools.developer.homey.app/
Click on Zigbee and then on the right side, do an Interview of the device (wait 10-30 seconds) and PM the discovery data so I can make sure the clusters match up. I think I know what they will be, but won’t know the manufacture ID and product ID
Hey @gslender, reading here youve been working through a few issues, thanks heaps for your efforts to develop this app! Reading back, i noticed i only gave you a link to the outdoor power point interview, and didnt embed it at the time in this thread. Have put it here now for your convenance - and still hopeful you can crack the issues and bring it into your app. Cheers, Rick
"ids": {
"modelId": "TS011F",
"manufacturerName": "_TZ3210_7jnk7l3k"
},
"endpoints": {
"endpointDescriptors": [
{
"endpointId": 1,
"applicationProfileId": 260,
"applicationDeviceId": 81,
"applicationDeviceVersion": 0,
"_reserved1": 1,
"inputClusters": [
0,
4,
5,
6,
1794,
2820,
61184,
3
],
"outputClusters": [
25,
10
]
},
{
"endpointId": 2,
"applicationProfileId": 260,
"applicationDeviceId": 81,
"applicationDeviceVersion": 0,
"_reserved1": 1,
"inputClusters": [
4,
5,
6,
61184,
3
],
"outputClusters": []
},
{
"endpointId": 242,
"applicationProfileId": 41440,
"applicationDeviceId": 97,
"applicationDeviceVersion": 0,
"_reserved1": 0,
"inputClusters": [],
"outputClusters": [
33
]
}
],
"endpoints": {
"1": {
"clusters": {
"basic": {
"attributes": [
{
"acl": [
"readable",
"reportable"
],
"id": 0,
"name": "zclVersion",
"value": 3,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1,
"name": "appVersion",
"value": 74,
"reportingConfiguration": {
"direction": "reported",
"attributeDataType": 32,
"minInterval": 1,
"maxInterval": 160,
"minChange": 0,
"status": "SUCCESS"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 2,
"name": "stackVersion",
"value": 0,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 3,
"name": "hwVersion",
"value": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 4,
"name": "manufacturerName",
"value": "_TZ3210_7jnk7l3k",
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 5,
"name": "modelId",
"value": "TS011F",
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 6,
"name": "dateCode",
"value": "",
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 7,
"name": "powerSource",
"value": "mains",
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"writable",
"reportable"
],
"id": 65502,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 2,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65534,
"name": "attributeReportingStatus",
"value": "PENDING",
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65504,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65505,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65506,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65507,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
},
"groups": {
"attributes": [
{
"acl": [
"readable",
"reportable"
],
"id": 0,
"name": "nameSupport",
"value": {
"type": "Buffer",
"data": [
0
]
},
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 2,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
},
"scenes": {
"attributes": [
{
"acl": [
"readable",
"reportable"
],
"id": 0,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 2,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 3,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 4,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 2,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
},
"onOff": {
"attributes": [
{
"acl": [
"readable",
"reportable"
],
"id": 0,
"name": "onOff",
"value": false,
"reportingConfiguration": {
"direction": "reported",
"attributeDataType": 16,
"minInterval": 1,
"maxInterval": 65534,
"status": "SUCCESS"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 2,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 16385,
"name": "onTime",
"value": 0,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 16386,
"name": "offWaitTime",
"value": 0,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"writable",
"reportable"
],
"id": 32768,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"writable",
"reportable"
],
"id": 32770,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
},
"metering": {
"attributes": [
{
"acl": [
"readable",
"reportable"
],
"id": 0,
"name": "currentSummationDelivered",
"value": 740,
"reportingConfiguration": {
"direction": "reported",
"attributeDataType": 37,
"minInterval": 1,
"maxInterval": 65534,
"minChange": 0,
"status": "SUCCESS"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 512,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 768,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 769,
"name": "multiplier",
"value": 2097168,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 770,
"name": "divisor",
"value": 0,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 771,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 774,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
},
"electricalMeasurement": {
"attributes": [
{
"acl": [
"readable",
"reportable"
],
"id": 0,
"name": "measurementType",
"value": {
"type": "Buffer",
"data": [
0,
0,
0,
0
]
},
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1285,
"name": "rmsVoltage",
"value": 238,
"reportingConfiguration": {
"direction": "reported",
"attributeDataType": 33,
"minInterval": 1,
"maxInterval": 65534,
"minChange": 0,
"status": "SUCCESS"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1288,
"name": "rmsCurrent",
"value": 0,
"reportingConfiguration": {
"direction": "reported",
"attributeDataType": 33,
"minInterval": 1,
"maxInterval": 65534,
"minChange": 0,
"status": "SUCCESS"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1291,
"name": "activePower",
"value": 0,
"reportingConfiguration": {
"direction": "reported",
"attributeDataType": 41,
"minInterval": 1,
"maxInterval": 65534,
"minChange": 0,
"status": "SUCCESS"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1536,
"name": "acVoltageMultiplier",
"value": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1537,
"name": "acVoltageDivisor",
"value": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1538,
"name": "acCurrentMultiplier",
"value": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1539,
"name": "acCurrentDivisor",
"value": 1000,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1540,
"name": "acPowerMultiplier",
"value": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1541,
"name": "acPowerDivisor",
"value": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 2049,
"name": "acVoltageOverload",
"value": 250,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 2050,
"name": "acCurrentOverload",
"value": 16,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 2051,
"name": "acActivePowerOverload",
"value": 4000,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 2,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
},
"identify": {
"attributes": [
{
"acl": [
"readable",
"writable",
"reportable"
],
"id": 0,
"name": "identifyTime",
"value": 0,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
}
},
"bindings": {
"ota": {
"attributes": [],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
},
"time": {
"attributes": [],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
}
}
},
"2": {
"clusters": {
"groups": {
"attributes": [
{
"acl": [
"readable",
"reportable"
],
"id": 0,
"name": "nameSupport",
"value": {
"type": "Buffer",
"data": [
0
]
},
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 2,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
},
"scenes": {
"attributes": [
{
"acl": [
"readable",
"reportable"
],
"id": 0,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 2,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 3,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 4,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 2,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
},
"onOff": {
"attributes": [
{
"acl": [
"readable",
"reportable"
],
"id": 0,
"name": "onOff",
"value": false,
"reportingConfiguration": {
"direction": "reported",
"attributeDataType": 16,
"minInterval": 1,
"maxInterval": 65534,
"status": "SUCCESS"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 2,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 16385,
"name": "onTime",
"value": 0,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 16386,
"name": "offWaitTime",
"value": 0,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"writable",
"reportable"
],
"id": 32768,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"writable",
"reportable"
],
"id": 32770,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
},
"identify": {
"attributes": [
{
"acl": [
"readable",
"writable",
"reportable"
],
"id": 0,
"name": "identifyTime",
"value": 0,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
},
{
"acl": [
"readable",
"reportable"
],
"id": 65533,
"name": "clusterRevision",
"value": 1,
"reportingConfiguration": {
"status": "NOT_FOUND",
"direction": "reported"
}
}
],
"commandsGenerated": "UNSUP_GENERAL_COMMAND",
"commandsReceived": "UNSUP_GENERAL_COMMAND"
}
},
"bindings": {}
},
"242": {
"clusters": {},
"bindings": {}
}
}
}
type or paste code here
Test v1.1.10 has this added.
Thanks so much! I have just tested and this works great in homey, I can turn both outlets on/off individually! Been waiting for years (literally) to get this working. Thank you!
Without taking away from my excitement of this, the double Power Point comes up as ‘unsupported’ in the homekitty ap and so doesn’t then bridge through and appear in Apple Home. Just double checking if this is as it should be?
Yes, that’s because I decided to implement the dual switch as two independent toggles, and so didn’t follow/copy the correct Homey way of doing the onOff capability - notice too that you can quick enable/disable a dual power point. There is really no sensible way to model a dual socket and the “typical” approach is to make them two indepedent devices each with their own onOff capability which would translate into the Apple Homekit world. Somehow, Apple and most Automation ecosystems seem to have grown up around things that are not light and power sockets - they started as indivual lights and appliances and so obviously in that work, everything is single and has only one power on/off control (and so you only model that concept in your automation system as devices needing a single on/off) etc.
So I will probably not change it as I’m not keen on having a separate on/off for each switch in the dual socket (as I don’t use and don’t like Homekit/Google Home etc)
Thanks for the explanation, appreciate it! while I persist with Homekit, it certainly has not developed at the same pace that homey and others have, which is frustrating. Happy to work with it as it stands. Thanks again!
It seems to me that the sensible way is to use subcapabilities, which gives you a device with two outputs that can be switched independently:
And which HomeKitty also supports out of the box:
Sensible ?
That’s THE worst UI that you could possibly build… maybe only beaten by adding a pop up dialog for each button.
Yes, that how Homey thinks it should be done
No, I don’t like the extra clicks needed to drop down and change buttons.
Ah, I though that with “no sensible way” you meant it’s not possible to implement this cleanly, which obviously it is (and in a way that doesn’t break compatibility with other apps that also expect “the Homey way” of implementing devices). If you don’t like how it looks, you can always send Athom some suggestions on how to improve the UI.
But your comments about “everything is single” is just ill-informed, both Homey and iOS support multiple-control devices as I’ve just shown. You may not like the look of it, but that’s a different issue.
I don’t agree but happy to just agree to disagree.
Thanks for commenting though
Hi @gslender , do you have a road map for ongoing development of this app?
Curious about additional devices like the various lighting types now available in the Ikuu range.
Thanks.
Hi @Mark_Dowling it is really dependent on getting further device signatures and potentially having some devices to test against. It isn’t easy to guess what’s required without someone having the time to test and readily provide feedback - or be kind enough to loan a device to me for testing so that I can write and complete the drivers.
So at the moment, I don’t see much further development occuring but always happy to put the effort in if someone else is willing to help.
Another option is to get the supplier (Mercator / Ikuu) to send a selection of devices so that the entire range of products can be supported - my last chat with them 12 months or more they were stubbonly unwilling to consider it
With Athom on its way to becoming an LG brand, maybe Mercator might be open to reconsidering.
Do you have a Mercator contact you can share and I’d be happy to see what is possible to negotiate?