New sonoff zigbee

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:
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     *  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 (descMap.data[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: ${descMap.data[0]}"
            }
        }
    } else if (map.name == "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 (map.name == "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 …

There is a way to get the decimal values, but I am not sure how is the parsing working in this DH, and by the device. The SmartThings ones report up to two decimals, but they turned to be an integer. The description contains the reported value and that has to be read to be able to use it. I don’t really know how is with these devices. There must be a way…

Looks like all zigbee devices are getting updated to have decimals for temperature.

2 Likes

Whaaat??? - After so many years that this feature has been removed…
But it will be nice that the parser will parse automatically decimal values. :+1:

1 Like

Delivered today in the UK. Temp sensor attaches as thing and Motion sensor works straight out the bat but named eWeLink? Trying to find local handlers that work.

1 Like

see above. Use ezex temp/humidity sensor for the temp/humidity sensor. Motion works fine as is.

1 Like

Is that a local one or cloud one? I can’t seem to find it in the type unless it’s a custom DTH?

It’s a cloud DTH. The only one that runs local is the old SmartThings one. It’s there, the list sorts weird and is case sensitive. Its at the end.
image

Amazing. Thanks for the reply will have a look now :+1:

@Giamma, what @Automated_House posted above seems to be live already. So if you would use the stock DH then it should show decimal values already. If not, then it is just a matter of time.

1 Like

I can’t seem to get my new Sonoff SNZB-02 Temp/Humidity Sensor to report any values. I have tried using both the SmartSense Temp/Humidity DTH and the eZEX Temp & Humidity Sensor DTH. ANy other ideas?

Hi, I’m back …
Yes, now I see decimal values … :+1:

Is it live? I see the UI is updated to to display one decimal place, but it looks like the DTH update is only in master branch. My sensors are still showing whole numbers only with .0

1 Like

The UX was able to display decimal values for a long time (since the beginning). I am still using my modified DH to show decimals and log an event every 5 minutes, but I will have a look and swap to the new DH. But ai guess, it might applies only to the cloud DHs first, as the local ones, I believe, baked into the Hub firmware.

1 Like

Could be. The PR mentions hubcore changes, but doesn’t say whether they were already done or upcoming.

Any DTH for the Sonoff SNZB-01?

Have same problem here. Did you get it working?