[APP][Pro] SONOFF Zigbee

It doesn’t work like that :wink:. Just kindly request for support for your new device with your preferred Sonoff app.
Links can be found on the app page at the homey.app store

I’ve sent a message to the developers, hope they answer quickly, because without a zigbee hub the senseguard dw 2 will not work :cry:

Hi Johan! I have a new Sonoff M5-2C which is recognized as “Generic Zigbee Device” and only the first channel works. I’ve tried scripting but the 2nd endpoint is blocked by the generic driver.
Device Details:

  • Model ID: ZBM5-2C-80/86

  • Manufacturer: SONOFF

  • Date Code: 20250410

  • Type: End Device (Not connected netural wire)

“ids”: {
“modelId”: “ZBM5-2C-80/86”,
“manufacturerName”: “SONOFF”
},
“endpoints”: {
“ieeeAddress”: “f0:fd:45:ff:fe:41:bd:0a”,
“networkAddress”: 55475,
“modelId”: “ZBM5-2C-80/86”,
“manufacturerName”: “SONOFF”,
“endpointDescriptors”: [
{
“status”: “SUCCESS”,
“nwkAddrOfInterest”: 55475,
“_reserved”: 28,
“endpointId”: 1,
“applicationProfileId”: 260,
“applicationDeviceId”: 2,
“applicationDeviceVersion”: 0,
“_reserved1”: 1,
“inputClusters”: [
0,
3,
4,
5,
6,
32,
2821,
64599,
64529
],
“outputClusters”: [
25
]
},
{
“status”: “SUCCESS”,
“nwkAddrOfInterest”: 55475,
“_reserved”: 20,
“endpointId”: 2,
“applicationProfileId”: 260,
“applicationDeviceId”: 2,
“applicationDeviceVersion”: 0,
“_reserved1”: 1,
“inputClusters”: [
0,
3,
4,
5,
6,
64599
],
“outputClusters”: 

}
],
“deviceType”: “enddevice”,
“receiveWhenIdle”: false,
“swBuildId”: “1.0.4”,
“capabilities”: {
“alternatePANCoordinator”: false,
“deviceType”: false,
“powerSourceMains”: false,
“receiveWhenIdle”: false,
“security”: false,
“allocateAddress”: true
},
“extendedEndpointDescriptors”: {
“1”: {
“clusters”: {
“basic”: {
“attributes”: [
{
“acl”: [
“readable”,
“reportable”
],
“id”: 0,
“name”: “zclVersion”,
“value”: 8,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 1,
“name”: “appVersion”,
“value”: 16,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 3,
“name”: “hwVersion”,
“value”: 16,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 4,
“name”: “manufacturerName”,
“value”: “SONOFF”,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 5,
“name”: “modelId”,
“value”: “ZBM5-2C-80/86”,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 6,
“name”: “dateCode”,
“value”: “20250410”,
“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”: 17,
“name”: “physicalEnv”,
“value”: “Unspecified”,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 16384,
“name”: “swBuildId”,
“value”: “1.0.4”,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 65533,
“name”: “clusterRevision”,
“value”: 3,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: 
,
“commandsReceived”: [
“factoryReset”
]
},
“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”: 2,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: [
“identifyQuery.response”
],
“commandsReceived”: [
“identify”,
“identifyQuery”
]
},
“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”: 3,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: [
“addGroup.response”,
“viewGroup.response”,
“getGroupMembership.response”,
“removeGroup.response”
],
“commandsReceived”: [
“addGroup”,
“viewGroup”,
“getGroupMembership”,
“removeGroup”,
“removeAllGroups”,
“addGroupIfIdentify”
]
},
“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”: 3,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: [
0,
1,
2,
3,
4,
6
],
“commandsReceived”: [
0,
1,
2,
3,
4,
5,
6
]
},
“onOff”: {
“attributes”: [
{
“acl”: [
“readable”,
“reportable”
],
“id”: 0,
“name”: “onOff”,
“value”: false,
“reportingConfiguration”: {
“direction”: “reported”,
“attributeDataType”: 16,
“minInterval”: 60,
“maxInterval”: 600,
“status”: “SUCCESS”
}
},
{
“acl”: [
“readable”,
“writable”,
“reportable”
],
“id”: 16387,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 65533,
“name”: “clusterRevision”,
“value”: 2,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: 
,
“commandsReceived”: [
“setOff”,
“setOn”,
“toggle”,
“offWithEffect”
]
},
“pollControl”: {
“attributes”: [
{
“acl”: [
“readable”,
“writable”,
“reportable”
],
“id”: 0,
“name”: “checkInInterval”,
“value”: 6940,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 1,
“name”: “longPollInterval”,
“value”: 4,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 2,
“name”: “shortPollInterval”,
“value”: 2,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“writable”,
“reportable”
],
“id”: 3,
“name”: “fastPollTimeout”,
“value”: 40,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 65533,
“name”: “clusterRevision”,
“value”: 3,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: [
0
],
“commandsReceived”: [
0,
“fastPollStop”,
“setLongPollInterval”,
“setShortPollInterval”
]
},
“diagnostics”: {
“attributes”: [
{
“acl”: [
“readable”,
“reportable”
],
“id”: 283,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 284,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 285,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 65533,
“name”: “clusterRevision”,
“value”: 3,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: 
,
“commandsReceived”: 

}
},
“bindings”: {
“ota”: {}
}
},
“2”: {
“clusters”: {
“basic”: {
“attributes”: [
{
“acl”: [
“readable”,
“reportable”
],
“id”: 0,
“name”: “zclVersion”,
“value”: 8,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 1,
“name”: “appVersion”,
“value”: 16,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 3,
“name”: “hwVersion”,
“value”: 16,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 4,
“name”: “manufacturerName”,
“value”: “SONOFF”,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 5,
“name”: “modelId”,
“value”: “ZBM5-2C-80/86”,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 6,
“name”: “dateCode”,
“value”: “20250410”,
“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”: 17,
“name”: “physicalEnv”,
“value”: “Unspecified”,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 16384,
“name”: “swBuildId”,
“value”: “1.0.4”,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 65533,
“name”: “clusterRevision”,
“value”: 3,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: 
,
“commandsReceived”: [
“factoryReset”
]
},
“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”: 2,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: [
“identifyQuery.response”
],
“commandsReceived”: [
“identify”,
“identifyQuery”
]
},
“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”: 3,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: [
“addGroup.response”,
“viewGroup.response”,
“getGroupMembership.response”,
“removeGroup.response”
],
“commandsReceived”: [
“addGroup”,
“viewGroup”,
“getGroupMembership”,
“removeGroup”,
“removeAllGroups”,
“addGroupIfIdentify”
]
},
“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”: 3,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: [
0,
1,
2,
3,
4,
6
],
“commandsReceived”: [
0,
1,
2,
3,
4,
5,
6
]
},
“onOff”: {
“attributes”: [
{
“acl”: [
“readable”,
“reportable”
],
“id”: 0,
“name”: “onOff”,
“value”: false,
“reportingConfiguration”: {
“direction”: “reported”,
“attributeDataType”: 16,
“minInterval”: 1,
“maxInterval”: 3600,
“status”: “SUCCESS”
}
},
{
“acl”: [
“readable”,
“writable”,
“reportable”
],
“id”: 16387,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 65533,
“name”: “clusterRevision”,
“value”: 2,
“reportingConfiguration”: {
“status”: “NOT_FOUND”,
“direction”: “reported”
}
}
],
“commandsGenerated”: 
,
“commandsReceived”: [
“setOff”,
“setOn”,
“toggle”,
“offWithEffect”
]
}
},
“bindings”: {}
}
}
}


Hi, I have an issue with ZBMINIR2 switches being periodically “Switched Off by Sonoff”.

I have 5 ZBMINIR2 and all of them soon or late were switched off without any apparent command, as it appears in the log.

Those are devices that should never switch off, as I use them in detach mode.

The issue may happen after 4 months or a year. I checked the date and time in the log and I don’t see any correspondence with app updates.

Did any of you experience something similar and how do you think I could avoid it?

Thanks

I have several ZBMINIs (w/ neutral) and ZBMINIL2s (w/o neutral) and run into a similar issue with only the ZBMINIs. Every few weeks/months they switch off randomly - uncommanded - when the connected light is on. Never found out what the cause is.

@Merlind and @SunBeech, have you ever tried the “official” Sonoff app by StyraHem Sweden to see if the problem occurs there as well?

Hello Dirk, Fair point. I haven’t done that, because the ZBMINIs (that are having this issue in my case) cannot be put into pairing mode by toggling the attached swich a number of times. Instead I have to disassemble the wall switch in order to access the pairing button on the ZBMINI. That is not something I am looking forward to :blush:. So for now I have accepted the situation (luckily it does not occur that often).

I am not sure though how the app would cause this behavior. And if so, why would it have this bevavior for only some SONOFF models? Another thought: if I am correct the ZBMINIR2 is the successor of the ZBMINI. Both are models with a neutral wire. Maybe there is a commonality in the firmware of both models that is causing the issue.

I completely understand that!

I have no idea what’s causing this behavior either. When you ask Athom support, they say it’s not their app and that you should contact the app developer.
And then the app developer says it’s a Homey issue.
But it might also have something to do with the firmware, as you mentioned.
Is there a list somewhere from Sonoff showing the current firmware versions to check if it’s up to date?

Ops I just realize there is more than one app. I just checked and I do have the official app by StyraHem. So I probably should have written my post in another thread.

There is no topic for the “official” Sonoff app, but you can report the issue on GitHub (link).

Even if the problem occurs with two different devices, the ZBMINI and the ZBMINIR2, it’s probably safe to assume that it’s not the apps’ fault. What do you think?

Not sure. Normally Homey indicates the device’s firmware version in the Advanced Settings section of the device. For all my SONOFF devices this field is empty unfortunately:

If you look at Zigbee2MQTT’s over-the-air firmware repository for SONOFF, it does contain various firmware files. But it is not always clear (to me) for which model they are meant and/or whether it is the latest SONOFF themselves have available.

Maybe the planned release of OTA-updates for Zigbee devices through Homey, might allow you to check whether the latest firmware is installed and update it.

If the issue occurs regardless of using the community or official SONOFF app for Homey, then it is unlikely indeed that the app is the cause.

Hmm, some of my Sonoff devices show the firmware version, while others don’t. I have no idea why that’s the case.
Maybe you should contact SONOFF support to ask about the firmware version. But ultimately, it won’t help if you don’t even know which firmware is currently installed.

If you have a ZigBee dongle and a Raspberry Pi, you can install eWeLink CUBE OS and update all your Sonoff devices from there.

Thanks for thinking along. I have a Zigbee dongle, though not a Raspberry Pi. I have used the dongle before to update firmware of my INNR smart plugs via Zigbee2MQTT on my Windows machine. I could try that route also for the SONOFF devices. I also understand that I could run eWeLink CUBE OS in a VM on Windows. In both cases I would still have to pair the SONOFFs with the dongle and thus disassemble my wall switches (as the SONOFFs are located behind them). For now I’ll just accept the occasional switch-offs by the device.

This is how you can run the updates (it’s free) with CUBE:

  1. Install eWeLink CUBE from the official downloads page. They also have a VirtualBox VDI file here, though I’ve never tried it (I use a Raspberry Pi myself).
  2. Once you’ve connected the ZigBee dongle, you can set it up in CUBE by clicking the plus symbol and clicking “Add device“


3. When you’ve reached the pairing screen, you can click Start setup


Eventually, it will find your device (might take a while, for me it took a few tries to add it).

  1. Now, you can exit the pairing and go back to the Home page. You can click the device tile, and open the settings in the top right corner. Click Version, for me it shows UNKNOWN but that’s likely because I just added it (it did show a version when I waited for awhile)

  2. Now you need to read the instructions and the OTA will begin when you’re click the Check for updates button


    It mentions that the firmwares are 3rd party, but that’s only true for brands other than SONOFF. As long as you only update Sonoff devices, you should be fine (eWeLink CUBE OS is the same software that runs on the Sonoff iHost).

If you have any available updates, it will now begin updating the device. In my case, there are no new updates
Schermafbeelding 2026-03-20 163655

eWeLink CUBE says it can also update other devices, but I wouldn’t trust it with any brand other than Sonoff devices, especially when it wants to update my IKEA plug from “2.4.4” to “33816613”, which doesn’t seem right to me.

Thank you for the detailed instructions!

you can / should add it as a instruction manual / tutorial here

Is there a way to see water consumption volume in Homey ?

No. Only when the water valve gets added to the app as supported device in the future;
As generic zigbee device the valve’s only available function is on/off (which works as open/close).

I wrote exactly the same :), the valve is already available in the app and works great.