[APP][Pro] SONOFF Zigbee

This app makes Homey support SONOFF Zigbee devices!

SONOFF Takes Care of Your ‘Home’

“Founded out of a simple need: make your lives easier, smart and better. we’ve the ambition to design and create the most innovative smart products with a simple and affordable way to give you a smarter home.” / SONOFF

Supported devices:

  • SNZB-01 / WB01 - Wireless Switch
  • SNZB-01P - Wireless Button
  • SNZB-02D - Temperature and Humidity sensor with LCD screen
  • SNZB-02P / SNZB-02 / TH01 - Temperature and Humidity Sensor
  • SNZB-03 / ms01 / MS01 / MSO1 - Motion Sensor
  • SNZB-03P - Motion Sensor - Only in the Test version
  • SNZB-04 / SNZB-04P / DS01 - Windows / Door Sensor
  • SNZB-06P - Ultrasonic Sensor
  • Basic ZBR3 - Cord switch
  • ZBMINI / 01MINIZB - 2 Way Smart Switch
  • ZB-SW01 - 1 Gang Wall Switch
  • ZB-SW02 - 2 Gang Wall Switch
  • ZB-SW03 - 3 Gang Wall Switch
  • ZB-SW04 - 4 Channel Relay Board
  • SA-003 - Switch Module
  • ZB-S26 / S26R2ZB - Plug
  • ZBMINI-L - Smart Switch
  • ZBMINIL2 - 2 Way Smart Switch
  • ZBMicro - Micro Zigbee USB Smart Adaptor
  • TRVZB - Thermostat - Only in the Test version

If/When you find issues please create a crash report from the app and add your name to it and give me a notice here or in PM.

To be able to add more devices I will need help with interviews of the devices you want added. Anyone asking for a device to be added will have to have:

Thanks for all the interest in the app and all the help/support/donations! :smiley:

13 Likes

App notes:

The Motion Sensor is actually an Occupancy Sensor - triggering when initial presence is identified and then again when no presence is identified anymore. I find it way more accurate than most other motion sensors in the same price range.

1 Like

THANK YOU FOR THE APP!
I tried to add Motion Sensor - SNZB-03 and it was added as a Basic Zigbee Device only.

  "ids": {
    "modelId": "MS01",
    "manufacturerName": "eWeLink"
  },
  "endpoints": {
    "endpointDescriptors": [
      {
        "endpointId": 1,
        "applicationProfileId": 260,
        "applicationDeviceId": 1026,
        "applicationDeviceVersion": 0,
        "_reserved1": 0,
        "inputClusters": [
          0,
          3,
          1280,
          1
        ],
        "outputClusters": [
          3
        ]
      }
    ],
    "endpoints": {
      "1": {
        "clusters": {
          "basic": {
            "attributes": "UNSUP_GENERAL_COMMAND",
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          },
          "identify": {
            "attributes": "UNSUP_GENERAL_COMMAND",
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          },
          "iasZone": {
            "attributes": "UNSUP_GENERAL_COMMAND",
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          },
          "powerConfiguration": {
            "attributes": "UNSUP_GENERAL_COMMAND",
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          }
        },
        "bindings": {
          "identify": {
            "attributes": "UNSUP_GENERAL_COMMAND",
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          }
        }
      }
    }
  }
1 Like

I added Temperature and Humidity Sensor - SNZB-02
But no update for 21 hours. I put it outside, still no update. I press the button once, still nothing…

@johan_bendz i removed Temperature and Humidity Sensor - SNZB-02 and added it again.
It’s report data only once and again 24 hours later, still no any update.

Hi @Klim. Thanks for the feedback.
I tested to reproduce your problem and sadly I could. So I am now looking into what’s wrong in the code.

1 Like

Ohhh… I’m so happy. You are a lifesaver. Struggled like h… to get any motion sensors to work properly to turn on the lightstrips in on our 2 bathrooms. THIS WORKS PERFECT :partying_face:
Thank you so much and keep up the good work :clap::pray:

1 Like

I can add all of the products except the motion sensor. It will not discover the motion sensor, and I have the same problem with the hum/temp sensor 24 hour intervals.

This may be the problem with new homey sdk, a lot of users experience this problem, can’t add devices. Just try again in 12-24 hours.

Hi @johan_bendz , please add new device SONOFF ZBMINI

  "ids": {
    "modelId": "01MINIZB",
    "manufacturerName": "SONOFF"
  },
  "endpoints": {
    "endpointDescriptors": [
      {
        "endpointId": 1,
        "applicationProfileId": 260,
        "applicationDeviceId": 256,
        "applicationDeviceVersion": 0,
        "_reserved1": 1,
        "inputClusters": [
          0,
          3,
          4,
          5,
          6,
          4096
        ],
        "outputClusters": [
          4096
        ]
      },
      {
        "endpointId": 242,
        "applicationProfileId": 41440,
        "applicationDeviceId": 97,
        "applicationDeviceVersion": 0,
        "_reserved1": 1,
        "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": 4,
                "name": "manufacturerName",
                "value": "SONOFF",
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 5,
                "name": "modelId",
                "value": "01MINIZB",
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 6,
                "name": "dateCode",
                "value": "20200820",
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 7,
                "name": "powerSource",
                "value": "unknown",
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "name": "clusterRevision",
                "value": 1,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": [],
            "commandsReceived": []
          },
          "identify": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "writable",
                  "reportable"
                ],
                "id": 0,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "name": "clusterRevision",
                "value": 1,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": [
              0
            ],
            "commandsReceived": [
              0,
              1,
              64
            ]
          },
          "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": 1,
                "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": 1,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": [
              0,
              1,
              2,
              3,
              4,
              6
            ],
            "commandsReceived": [
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              64,
              65,
              66
            ]
          },
          "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": 16384,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "writable",
                  "reportable"
                ],
                "id": 16385,
                "name": "onTime",
                "value": 0,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "writable",
                  "reportable"
                ],
                "id": 16386,
                "name": "offWaitTime",
                "value": 0,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "name": "clusterRevision",
                "value": 1,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": [],
            "commandsReceived": [
              "setOff",
              "setOn",
              "toggle",
              "offWithEffect",
              "onWithRecallGlobalScene",
              "onWithTimedOff"
            ]
          },
          "touchlink": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "name": "clusterRevision",
                "value": 1,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": [
              "scanResponse",
              3,
              17,
              "networkJoinRouterResponse",
              "networkJoinEndDeviceResponse",
              64,
              "getGroups.response",
              66
            ],
            "commandsReceived": [
              "getGroups",
              66
            ]
          }
        },
        "bindings": {
          "touchlink": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "name": "clusterRevision",
                "value": 1,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": [
              "scanResponse",
              3,
              17,
              "networkJoinRouterResponse",
              "networkJoinEndDeviceResponse",
              64,
              "getGroups.response",
              66
            ],
            "commandsReceived": [
              "getGroups",
              66
            ]
          }
        }
      },
      "242": {
        "clusters": {},
        "bindings": {}
      }
    }
  }

Hi and thanks for your request @Klim
Sure I can :smiley:

ZBMini added to next release, waiting for Athom to review it.

I managed to fix the Temp/Humid not reporting issue! :slight_smile: Only problem is that it now is very chatty… how often would you like to have the reports? To often will drain the battery… every minute? every 5 minutes? It turns out that humidity is the more sensitive of the two, if I let it report all changes I get flooded with humidity and every other second a temp.

Thank you!
We can setup reports period only by time period and not by value change?

Link https://homey.app/sv-se/app/tech.sonoff/SONOFF-Zigbee/test/
is 404 now.

Do you have a link to Github for this release?

Hi @Klim, sadly Athom have decided that’s how it works… as long as I don’t have a live version of the app (since it only works on firmware 5) every update to the app I make will make the app go into review mode until Athom accept it again…

This will not be an issue when firmware 5 goes live.

And no, until I have a Live version up and running on the App store I will keep the repository private. It will be open source once released.

1 Like

@Klim, New version now on app store: https://homey.app/en-us/app/tech.sonoff/SONOFF-Zigbee/test/

Users can now set a number of values for reporting, until further notice the app needs restarting for the new values to get accepted by the device (due to these values only being read/written when node initiates)

Thank you!
SNZB-02, i removed old device, updated plugin and added device again.
set Temp max interval 600. Restarted plugin. Few hours later i check and see last temp. update 40mins ago. Why?

P.S.
It’s updating exactly every 60mins. max interval 600 = 60mins?

Hi @Klim, that’s strange… no, the setting is in seconds. Does the change setting work for you?

I changed temp. max interval to 900, but it’s still updating every 60mins.