---
title: "SONOFF SNZB-02LD Waterproof Temperature Sensor with Probe"
description: "SONOFF SNZB-02LD Zigbee probe thermometer (-40 to 115 °C) in TapHome via a Tasmota Zigbee gateway and MQTT: probe temperature, battery and offline alerts."
url: "https://taphome.com/en/compatibility/sonoff-snzb-02ld-zigbee2tasmota/"
language: en
lastmod: 2026-11-12
generator: hugo
ai:
  topics: ["mqtt","sensor","zigbee","tasmota","battery-powered","temperature","waterproof"]
  questions: ["How to integrate the SONOFF SNZB-02LD with TapHome?","What does the SONOFF SNZB-02LD TapHome template measure?","How to connect a SONOFF SNZB-02LD to TapHome through a Tasmota Zigbee gateway?","How to pair the SONOFF SNZB-02LD with a Zigbee2Tasmota gateway?","How to find the Zigbee short address of the SNZB-02LD in Tasmota?","Why does the SNZB-02LD show no values in TapHome?","Why does TapHome report the SNZB-02LD as offline?","Can the SNZB-02LD probe be used as a floor sensor for underfloor heating?"]
---

# SONOFF SNZB-02LD Waterproof Temperature Sensor with Probe

Communication: Packet Parser → MQTT

> Network address
> 
> With the MQTT broker built into TapHome, enter `127.0.0.1` as the broker address in TapHome. In the device, enter the IP address of the TapHome Core and give the Core an IP reservation in the router.
> 
> [Network Preparation](https://taphome.com/en/docs/setup/network-preparation/)

## Integration guide

> [!IMPORTANT]
> This device communicates via **Zigbee** through a Tasmota gateway. Make sure the gateway is
> connected to your MQTT broker and the sensor is paired with it before importing this template.
> The gateway itself can be added to TapHome with the
> [Zigbee2Tasmota Gateway](https://taphome.com/en/compatibility/zigbee2tasmota-gateway/) template.

The SONOFF SNZB-02LD is a battery-powered Zigbee 3.0 thermometer with an LCD display and a waterproof temperature probe on a 1.5 m cable. TapHome does not talk to the sensor directly: the sensor is paired with a Zigbee coordinator running Tasmota (Zigbee2Tasmota), the gateway publishes every Zigbee message to an MQTT broker, and TapHome reads the values from that broker. The template provides one temperature device plus battery and Zigbee diagnostics on the module.

The probe measures liquids or enclosed spaces while the body with the display stays outside — for example in a refrigerator, next to a swimming pool, or as a wireless floor sensor for underfloor heating, with the probe under the floor finish and the body on the wall.

## Hardware

![SONOFF SNZB-02LD diagram: probe, signal icon, lanyard hole, battery, temperature display and the pairing button under the battery cover.](https://taphome.com/images/compatibility/sonoff-snzb-02ld-zigbee2tasmota/device-overview_hu_68d5a766ee49e022.jpg)

| Item | Value |
|---|---|
| Probe measuring range | -40 to 115 °C |
| Accuracy | ±0.5 °C |
| Probe cable | 1.5 m |
| Protection | IP65 |
| Body working temperature | -10 to 60 °C |
| Body working humidity | 0–100 %RH |
| Battery | CR2477, 3 V |
| Wireless | Zigbee 3.0 (IEEE 802.15.4) |

The button sits under the battery cover, which is opened by twisting it with a coin. Before the first use, take out the battery insulation sheet — this powers the sensor on.

| Button / signal icon | Meaning |
|---|---|
| Hold the button for 5 s | Pairing mode, also restores the factory settings |
| Double press | Switches the display between °C and °F (factory default °C) |
| Signal icon flashes slowly | Pairing mode, up to 180 s |
| Signal icon stays on | Paired |
| Signal icon off | Pairing failed |

### Placement

- The probe is fixed with the supplied Velcro adhesive at the point to be measured and covers the full range of -40 to 115 °C.
- The body is rated for -10 to 60 °C only — keep it out of hot or frozen spaces. It holds on a metal surface by its magnet or hangs on a lanyard through the lanyard hole; the manufacturer specifies mounting heights up to 2 m.
- IP65 covers splashing water. Do not submerge the body or expose it to high-pressure water jets.
- To check the radio link at the final position, press the button: when the signal icon stays on, the sensor is within range of the gateway or a Zigbee router of the same network.

## Configuration

### Gateway

1. Flash a Zigbee coordinator with Tasmota (Zigbee2Tasmota), for example a SONOFF ZBBridge Pro (ZBBridge-P).
2. In the Tasmota web interface, open **Configuration → MQTT** and connect the gateway to the MQTT broker that TapHome uses (host and port).
3. Note the **Topic** on the same page, for example `tasmota_XXXXX` — it is the **Gateway topic** import parameter.
4. Keep `SetOption83 0` (the default). The template expects the Zigbee short address as the key of each device in the `ZbReceived` messages; with `SetOption83 1` the friendly name becomes the key and the template receives nothing.

### Pairing the sensor

1. Allow joining on the gateway — with the **Permit Join** switch of the gateway template in TapHome or with `ZbPermitJoin 1` in the Tasmota console.
2. Start pairing on the sensor:
   - **New sensor:** take out the battery insulation sheet. On the first power-on the sensor enters pairing mode by itself.
   - **Already used sensor:** remove the battery cover and hold the button for 5 seconds (with a card pin) until the signal icon flashes slowly. This also restores the factory settings.
3. Wait until the signal icon stays on. If the sensor is not paired within 3 minutes, it leaves pairing mode — allow joining on the gateway again and repeat step 2.

> [!TIP]
> Open the pairing window on the gateway first, then power on the sensor or hold its button. Keep the sensor close to the gateway while pairing.

### Finding the short address

After pairing, watch the Tasmota console. Each message from the sensor arrives on `tele/<gateway topic>/SENSOR` in this shape:

```json
{"ZbReceived":{"0x2916":{"Device":"0x2916","Temperature":25.72,"Endpoint":1,"LinkQuality":116}}}
```

The key under `ZbReceived` (here `0x2916`) is the short address the template needs. The paired devices and their short addresses can also be listed with `ZbStatus` or `ZbInfo` in the Tasmota console.

### Import parameters

| Parameter | Meaning | Example |
|---|---|---|
| Mqtt Broker IP address | Address of the MQTT broker the gateway publishes to | `192.168.0.1` |
| Mqtt Broker port | Broker port, default 1883 | `1883` |
| Gateway topic | Tasmota **Configuration → MQTT → Topic** of the gateway | `tasmota_XXXXX` |
| Device short address | Key of the sensor in `ZbReceived` | `0x2916` |

In TapHome, import the template with these four parameters; the module then subscribes to `tele/<gateway topic>/#` on the broker.

## Device capabilities

### Probe temperature

The **Probe Temperature** device shows the temperature measured by the probe in °C. Tasmota configures the sensor at pairing to report on every change of 0.5 °C and at least once per hour when the temperature is stable. After import the template also takes the last known value from the gateway's `ZbInfo` answer, so the device does not stay empty until the next report.

### Battery and diagnostics

Once per hour the module asks the gateway for the sensor information (`cmnd/<gateway topic>/ZbInfo`). Tasmota answers from its memory, without waking the sensor. The module shows these service attributes:

- **IEEE Address**, **Model ID**, **Manufacturer**, **Endpoints**, **Config** — identification and Zigbee configuration of the sensor.
- **Link Quality** — signal quality of the last message, scaled from the Zigbee range 0–254 to percent.
- **Battery Percentage** and **Battery Voltage** — taken from the sensor's battery reports and from the hourly `ZbInfo` answer.

The module raises a warning when the battery drops below 30 %. It also tracks when the sensor was last heard — from its own messages and from the time remembered by the gateway — and raises a warning after more than 12 hours of silence and an error after 24 hours. Because the sensor reports at least once per hour, a silence of this length means a real problem.

## Troubleshooting

### No values at all

1. Check that the **Gateway topic** matches the Tasmota MQTT Topic and that the broker address is the one the gateway publishes to.
2. Check that the **Device short address** matches the key in `ZbReceived` messages of this sensor.
3. Check that `SetOption83` is 0.

### Values stopped after re-pairing

The short address can change when the sensor is paired again; the IEEE address stays the same. Look up the new short address in the Tasmota console and update it in the module (variable `ID`), or import the template again with the new address.

### Temperature changes slowly

This is expected: to save the battery, the sensor reports only on a 0.5 °C change or once per hour.

### Offline warning or error

1. Check the **Battery Percentage** and replace the CR2477 battery if it is low.
2. Press the button on the sensor: if the signal icon does not stay on, the sensor is out of range of the gateway or a Zigbee router. Move the gateway closer or add a Zigbee router.
3. If the sensor still does not report, pair it again and update the short address.

## Available devices 1

These devices appear in TapHome after import.

SONOFF SNZB-02LD Waterproof Temperature Sensor with Probe (Zigbee2Tasmota) Module

Service Attributes

|                    |
|--------------------|
| IEEE Address       |
| Model ID           |
| Manufacturer       |
| Endpoints          |
| Config             |
| Link Quality       |
| Battery Voltage    |
| Battery Percentage |

Custom Variables

|                               |
|-------------------------------|
| `GWname` (string)             |
| `ID` (string)                 |
| `BatteryVoltage` (numeric)    |
| `BatteryPercentage` (numeric) |
| `LastSeenEpoch` (numeric)     |

Read (module)

```taphome
MQTTPUBLISH("cmnd/" + GWname + "/ZbInfo", ID)
```

Listener

```taphome
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
    # Battery values arrive in their own ZbReceived message, cluster 0x0001
    var ZbReceived := PARSEJSON(RECEIVEDMSG.Payload, "ZbReceived." + ID, true);
    if !ISNULL(ZbReceived)
        var bat := PARSEJSON(ZbReceived, "BatteryPercentage", true);
        if(!ISNULL(bat), BatteryPercentage := bat);
        var volt := PARSEJSON(ZbReceived, "BatteryVoltage", true);
        if(!ISNULL(volt), BatteryVoltage := volt);
        # Every message of the sensor proves it is alive, ZbInfo comes only once per hour
        DATETIME received := NOW();
        LastSeenEpoch := received.UNIXTIME;
    end

    # ZbInfo answer to the hourly request of the module read script
    var deviceInfo := PARSEJSON(RECEIVEDMSG.Payload, "ZbInfo." + ID, true);
    if !ISNULL(deviceInfo)
        var seen := PARSEJSON(deviceInfo, "LastSeenEpoch", true);
        if(!ISNULL(seen), LastSeenEpoch := seen);
        var infoBat := PARSEJSON(deviceInfo, "BatteryPercentage", true);
        if(!ISNULL(infoBat), BatteryPercentage := infoBat);
        var infoVolt := PARSEJSON(deviceInfo, "BatteryVoltage", true);
        if(!ISNULL(infoVolt), BatteryVoltage := infoVolt);
        COMPLETESERVICEATTRIBUTE("IEEE Address", PARSEJSON(deviceInfo, "IEEEAddr"));
        COMPLETESERVICEATTRIBUTE("Model ID", PARSEJSON(deviceInfo, "ModelId"));
        COMPLETESERVICEATTRIBUTE("Manufacturer", PARSEJSON(deviceInfo, "Manufacturer"));
        COMPLETESERVICEATTRIBUTE("Endpoints", PARSEJSON(deviceInfo, "Endpoints"));
        COMPLETESERVICEATTRIBUTE("Config", PARSEJSON(deviceInfo, "Config"));
        var lqi := PARSEJSON(deviceInfo, "LinkQuality", true);
        if !ISNULL(lqi)
            COMPLETESERVICEATTRIBUTE("Link Quality", ROUND(LINEAR(lqi, 0, 0, 254, 100)) + "%");
        end
    end
end

# 0 = no battery report received yet
if BatteryPercentage > 0 AND BatteryPercentage < 30
    ADDWARNING(1, "Low battery (<30%)");
end

# The sensor reports at least once per hour; LastSeenEpoch comes from its messages and from ZbInfo
if LastSeenEpoch > 0
    DATETIME now := NOW();
    var secondsSeen := now.UNIXTIME - LastSeenEpoch;
    if secondsSeen > 12 * 60 * 60
        if secondsSeen > 24 * 60 * 60
            ADDERROR(3, "Device is offline > 24H");
        else
            ADDWARNING(2, "Device is offline > 12H");
        end
    end
end
```

Service Attributes

IEEE Address

```taphome
MQTTPUBLISH("cmnd/" + GWname + "/ZbInfo", ID)
```

Model ID

```

```

Manufacturer

```

```

Endpoints

```

```

Config

```

```

Link Quality

```

```

Battery Voltage

```taphome
BatteryVoltage + " V"
```

Battery Percentage

```taphome
BatteryPercentage + "%"
```

Probe Temperature Temperature Sensor

Listener

```taphome
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
    var temp := PARSEJSON(RECEIVEDMSG.Payload, "ZbReceived." + ID + ".Temperature", true);
    if ISNULL(temp)
        # Last known value from the ZbInfo answer, e.g. right after import
        temp := PARSEJSON(RECEIVEDMSG.Payload, "ZbInfo." + ID + ".Temperature", true);
    end
    if(!ISNULL(temp), Te := temp);
end
```

**Connection:** Packet Parser → MQTT

## Import parameters

Enter these values when you import the XML.

| Asked in the app                                                   | Default         |
|--------------------------------------------------------------------|-----------------|
| Mqtt Broker IP address                                             | `192.168.0.1`   |
| Mqtt Broker port                                                   | `1883`          |
| Gateway topic (Tasmota -&gt; Configuration -&gt; MQTT -&gt; Topic) | `tasmota_XXXXX` |
| Device short address (e.g. 0x2916)                                 | `0xFFFF`        |

## Related Documentation

- [MQTT Integration](https://taphome.com/en/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/en/docs/integration/packet-parser/)
- [Packet parser functions](https://taphome.com/en/docs/script/packet-parser/)
- [Parsing functions](https://taphome.com/en/docs/script/parsing-functions/)
- [MQTT Broker](https://taphome.com/en/docs/integration/packet-parser/mqtt-broker/)
- [Listener scripts](https://taphome.com/en/docs/script/listener-scripts/)

