New sonoff zigbee

Today I received the two new device Sonoff I ordered one month ago, temp sensor SNZB-02 and door/window sensor SNZB-04.

I didn’t buy the hub Sonoff and I knew that it was a risk but I had faith …

Well, door/window sensor work fine, without problem, but the temp sensor is seen as motion sensor …

Do you have any idea to fix the problem ?

1 Like

I think I replied to you on FaceBook, but try the SmartSense Temp/Humidity DTH to see if it works.

I try but don’t work …

I have a motion sensor and temp sensor coming. Excited to see how they work and how song they last!

Try the “eZEX Temp & Humidity Sensor” next. it’s also a zigbee sensor.

With eZEX now I see the temp … only integer but that’s something … :blush:

1 Like

you can try breathing on the sensor to make it report a humidity change and see if it works, too.


Or just put it into your fridge for 5 minutes.

1 Like

I got the temp sensor just for the fridge … now is 11° maybe not very precise …

Where have you placed it in the fridge?

Inside, upper compartment, at the end, on the right … :smiley:

Try to place it a bit lower. And more forward.

If you stick it to the top, that would definitely show higher value, basic thermodynamics. But the temperature fluctuates in the fridge as well.

I have Aqara sensors in two fridges, and freezer. The freezer fluctuated from -20.3 to - 27 C, one of the fridge showed 7.5 to 0.2 C, currently at 4.9 C. Meanwhile the fridge is set to 3 C.


For the upper compartment, at the back, 11 is completely normal, don’t fret too much.


Ok, I thought it was some degree lowest …
I try to move the sensor …

@Giamma is humidity working with the ezex DTH?

Yes, humidity works; the only “problem” for me is don’t have decimal in temp …

1 Like

Try this DH, a bit modified for decimals, I am not sure that will it work, because I don’t know how the device reports, what is actually parsed. Give it a try. And look at the live logging for any errors.

     *  eZEX Temp & Humidity Sensor (AC Type)
     *  Copyright 2019 SmartThings
     *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
     *  in compliance with the License. You may obtain a copy of the License at:
     *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
     *  on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
     *  for the specific language governing permissions and limitations under the License.
    import physicalgraph.zigbee.zcl.DataType

metadata {
    definition(name: "eZEX Temp & Humidity Sensor", namespace: "smartthings", author: "SmartThings", mnmn:"SmartThings", vid:"generic-humidity-3") {
        capability "Configuration"
        capability "Temperature Measurement"
        capability "Relative Humidity Measurement"
        capability "Sensor"
        capability "Health Check"
        fingerprint profileId: "0104", inClusters: "0000,0003,0402,0405,0500", outClusters: "0019", model: "E282-KR0B0Z1-HA", deviceJoinName: "eZEX Multipurpose Sensor" //Smart Temperature/Humidity Sensor (AC Type)

    preferences {
        input "tempOffset", "number", title: "Temperature offset", description: "Select how many degrees to adjust the temperature.", range: "*..*", displayDuringSetup: false
        input "humidityOffset", "number", title: "Humidity offset", description: "Enter a percentage to adjust the humidity.", range: "*..*", displayDuringSetup: false

    tiles(scale: 2) {
        multiAttributeTile(name: "temperature", type: "generic", width: 6, height: 4, canChangeIcon: true) {
            tileAttribute("device.temperature", key: "PRIMARY_CONTROL") {
                attributeState "temperature", label: '${currentValue}°',
                        backgroundColors: [
                                [value: 31, color: "#153591"],
                                [value: 44, color: "#1e9cbb"],
                                [value: 59, color: "#90d2a7"],
                                [value: 74, color: "#44b621"],
                                [value: 84, color: "#f1d801"],
                                [value: 95, color: "#d04e00"],
                                [value: 96, color: "#bc2323"]
        valueTile("humidity", "device.humidity", inactiveLabel: false, width: 2, height: 2) {
            state "humidity", label: '${currentValue}% humidity', unit: ""
        standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat", width: 2, height: 2) {
            state "default", action: "refresh.refresh", icon: "st.secondary.refresh"

        main "temperature", "humidity"
        details(["temperature", "humidity", "refresh"])

def parse(String description) {
    log.debug "description: $description"

    // getEvent will handle temperature and humidity
    Map map = zigbee.getEvent(description)
    if (!map) {
        Map descMap = zigbee.parseDescriptionAsMap(description)
        if (descMap?.clusterInt == zigbee.TEMPERATURE_MEASUREMENT_CLUSTER && descMap.commandInt == 0x07) {
            if ([0] == "00") {
                log.debug "TEMP REPORTING CONFIG RESPONSE: $descMap"
                sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
            } else {
                log.warn "TEMP REPORTING CONFIG FAILED- error code: ${[0]}"
    } else if ( == "temperature") { 
        map.value = (float) Math.round( (map.value as Float) * 10.0 ) / 10
        if (tempOffset) {
            map.value = (float) map.value + (float) tempOffset
        map.descriptionText = temperatureScale == 'C' ? '{{ device.displayName }} was {{ value }}°C' : '{{ device.displayName }} was {{ value }}°F'
        map.translatable = true
    } else if ( == "humidity") {
        if (humidityOffset) {
            map.value = (int) map.value + (int) humidityOffset

    log.debug "Parse returned $map"
    return map ? createEvent(map) : [:]

 * PING is used by Device-Watch in attempt to reach the Device
 * */
def ping() {
    return refresh()

def refresh() {
    log.debug "refresh temperature, humidity"
    return zigbee.readAttribute(zigbee.RELATIVE_HUMIDITY_CLUSTER, 0x0000) +
           zigbee.readAttribute(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000)

def configure() {
    // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
    sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])

    log.debug "Configuring Reporting and Bindings."

    // temperature minReportTime 30 seconds, maxReportTime 1 hour. Reporting interval if no activity
    return refresh() +
           zigbee.configureReporting(zigbee.RELATIVE_HUMIDITY_CLUSTER, 0x0000, DataType.UINT16, 30, 3600, 100) +
           zigbee.configureReporting(zigbee.TEMPERATURE_MEASUREMENT_CLUSTER, 0x0000, DataType.UINT16, 30, 3600, 10)

Otherwise @BroderickCarlin, are these new Sonoff Zigbee devices going to be supported by stock DHs?

1 Like

The SNZB-03 Motion and SNZB-04 contact already are under the eWeLink brand. I think this SNZB-02 temp/humidity and the SNZB-01 button/switch are the only two missing fingerprint assignments.

1 Like

I tried but the temp in always integer …
Tomorrow I’m going a few days for the holidays, when I got back I just keep reading your valuable advice. Thank you for the assistance, see you soon …