TapHome

Sonoff SNZB-01

Packet Parser → MQTT
Eingereicht von
Zuletzt aktualisiert: 04. 2026
Sonoff SNZB-01

Der Sonoff SNZB-01 ist ein kompakter kabelloser Zigbee 3.0 Taster, der mit einer CR2450 Knopfzellenbatterie betrieben wird. Er kommuniziert indirekt mit TapHome — der Taster wird mit einem Zigbee2MQTT-Koordinator (z. B. Sonoff ZBDongle-P/E oder CC2652-basierter Stick) gekoppelt, der Zigbee-Nachrichten zu MQTT-Topics weiterleitet. TapHome abonniert diese MQTT-Topics über ein PacketParser MQTT-Modul.

Die Vorlage erkennt drei Tastenaktionen (einfaches Drücken, doppeltes Drücken, langes Drücken) und überwacht den Batterieprozentsatz, die Batteriespannung und die Zigbee-Signalqualität.

Konfiguration

Zigbee2MQTT-Einrichtung

Vor dem Import der TapHome-Vorlage muss der SNZB-01 mit einem Zigbee2MQTT-Koordinator gekoppelt werden:

  1. Öffnen Sie die Zigbee2MQTT-Weboberfläche und aktivieren Sie den Kopplungsmodus (Permit join)
  2. Entfernen Sie am SNZB-01 die Rückabdeckung und drücken Sie die Reset-Taste 5 Sekunden lang, bis die LED dreimal blinkt
  3. Das Gerät erscheint in der Zigbee2MQTT-Geräteliste mit einer IEEE-Adresse (z. B. 0x00124b001eab21e5) oder einem Friendly Name
Modulvariable

Setzen Sie nach dem Import der Vorlage in TapHome die benutzerdefinierte Variable SonoffSNZB01 zur Identifikation des Geräts am MQTT-Broker:

VariableBeschreibungErmittlungBeispiel
SonoffSNZB01Zigbee2MQTT Friendly Name oder IEEE-Adresse des SNZB-01Zigbee2MQTT Web UI → Devices → SNZB-01 suchen → Friendly Name oder IEEE-Adresse kopieren0x00124b001eab21e5

Die Variable wird als MQTT-Topic-Präfix verwendet — das Listener-Skript abonniert zigbee2mqtt/{SonoffSNZB01} und zigbee2mqtt/{SonoffSNZB01}/action.

Die Verwendung des Friendly Name (z. B. living_room_button) anstelle der IEEE-Adresse macht die Konfiguration übersichtlicher. Der Friendly Name kann in der Zigbee2MQTT-Weboberfläche unter den Geräteeinstellungen geändert werden.

Gerätefunktionen

Tastendruck-Erkennung

Die Vorlage bildet den SNZB-01 als Push-Button-Gerät in TapHome ab. Tastendruck-Ereignisse kommen auf dem Topic zigbee2mqtt/{id}/action an und werden auf numerische Werte abgebildet:

Physische AktionMQTT PayloadTapHome-Wert
Einfaches Drücken (Loslassen + 0,6 s Wartezeit)single1
Doppeltes Drückendouble3
Langes Drücken (2 Sekunden halten)long2

Nach dem Lesen des Tastenstatus wird der Wert auf 0 zurückgesetzt — Tastenaktionen sind ereignisbasiert und können nicht rückwirkend gelesen werden.

Batterie- und Signalüberwachung

Jede Taster-Instanz stellt drei Serviceattribute bereit:

  • Battery — verbleibender Batterieprozentsatz (0–100 %) aus dem JSON-Status-Topic. Der SNZB-01 verwendet eine CR2450-Knopfzelle mit einer typischen Lebensdauer von 1–2 Jahren.
  • BatteryVoltage — Batteriespannung in Millivolt aus dem JSON-Status-Topic.
  • LinkQuality — Zigbee-Signalqualitätsindikator (0–255 lqi) aus dem JSON-Status-Topic. Höhere Werte zeigen ein besseres Signal an.

Alle Attribute zeigen "-" an, bis die erste Nachricht vom Gerät empfangen wird.

Weitere Funktionen

Die Zigbee2MQTT Bridge bietet auch ein Topic für proaktive Statusabfragen (zigbee2mqtt/{id}/get), mit dem Batterie- und Spannungswerte bei Bedarf angefordert werden können, sowie ein Verfügbarkeits-Topic zur Online/Offline-Erkennung. Diese Funktionen können in einem zukünftigen Vorlagenupdate hinzugefügt werden.

Fehlerbehebung

Tastendrücke werden nicht erkannt
  1. Überprüfen Sie, ob der SNZB-01 mit dem Zigbee2MQTT-Koordinator gekoppelt ist — er sollte in der Geräteliste mit grünem Status erscheinen
  2. Prüfen Sie, ob die benutzerdefinierte Variable SonoffSNZB01 exakt dem Friendly Name oder der IEEE-Adresse des Geräts entspricht (Groß-/Kleinschreibung beachten)
  3. Verwenden Sie einen MQTT-Client (z. B. MQTT Explorer), abonnieren Sie zigbee2mqtt/# und drücken Sie die Taste — auf dem /action-Topic sollte eine Nachricht erscheinen
  4. Wenn keine MQTT-Nachrichten erscheinen, hat das Gerät möglicherweise die Zigbee-Verbindung verloren — koppeln Sie es erneut durch langes Drücken der Reset-Taste für 5 Sekunden
Veraltete Batterie- oder Signalwerte
  1. Batterie- und Signaldaten werden nur aktualisiert, wenn das Gerät aufwacht (bei Tastendruck oder periodischer Meldung)
  2. Wenn die Werte "-" anzeigen, wurde noch keine Nachricht empfangen — drücken Sie die Taste, um eine Aktualisierung auszulösen
  3. Stellen Sie einen guten Empfang des Zigbee-Koordinators sicher — die Reichweite des SNZB-01 hängt vom Zigbee-Mesh-Netzwerk ab

Der Sonoff SNZB-01 wurde eingestellt und durch den SNZB-01P ersetzt. Die TapHome-Vorlage bleibt für bestehende SNZB-01-Geräte funktionsfähig, aber bei Neuanschaffungen sollte der SNZB-01P in Betracht gezogen werden, der eine verbesserte Reichweite und einen USB-C-Akku bietet.

Verfügbare Geräte

Sonoff SNZB-01 Modul
Benutzerdefinierte Variablen
SonoffSNZB01 (string) = 0x00124b001eab21e5Zigbee2MQTT Friendly Name oder IEEE-Adresse des SNZB-01-Geräts — wird als MQTT-Topic-Präfix verwendet
Open Zigbee2MQTT web UI → Devices → find SNZB-01 → copy the Friendly name (or use the IEEE address, e.g. 0x00124b001eab21e5)
Funktaster Taster

Tastendruck-Erkennung — einfach (1), doppelt (3), lang (2); nach dem Lesen wird auf 0 zurückgesetzt

enum
Serviceattribute
BatterieVerbleibender Batterieprozentsatz (CR2450-Knopfzelle, 0–100 %)
LinkQualityZigbee-Signalqualitätsindikator — 0 (schlechteste) bis 255 (beste)
BatteryVoltageBatteriespannung in Millivolt

Funktaster

Tastenstatus lesen
Bp := 0;
Tastenstatus schreiben
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + Bp);
# IF response.IsSuccess = false
#  ADDERROR(response.StatusCode);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + Bp, "header1:value1", "header2:value2", ...);\r
# Or VAR request := HTTPREQUEST("/example/setValue");
# request.Method := "PUT";
# VAR response := SENDHTTPREQUEST(request);
#r
#
# Send TCP, UDP data:
# VAR data1 := "{\"name\":\"John\", \"age\":" + Bp + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + Bp + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + Bp, "write"); # use "append" mode to append data to existing file
Listener
Bp := 0;

IF (COMPARE(RECEIVEDMSG.TOPIC, "zigbee2mqtt/"+ SonoffSNZB01 +"/action", CompareOptions.IgnoreCase) = 0)
	var payloadString := TOSTRING(RECEIVEDMSG.PAYLOAD);
	
    IF (COMPARE(payloadString, "single", CompareOptions.IgnoreCase) = 0)
          Bp := 1;
        ELSEIF (COMPARE(payloadString, "long", CompareOptions.IgnoreCase) = 0)
          Bp := 2;
        ELSEIF (COMPARE(payloadString, "double", CompareOptions.IgnoreCase) = 0)
          Bp := 3;
        ELSE
          Bp := 0;
    END  
END;   

IF (COMPARE(RECEIVEDMSG.TOPIC, "zigbee2mqtt/"+ SonoffSNZB01, CompareOptions.IgnoreCase) = 0)
    battery := PARSEJSON(RECEIVEDMSG.PAYLOAD,"battery", true);
    voltage := PARSEJSON(RECEIVEDMSG.PAYLOAD,"voltage", true);
    link := PARSEJSON(RECEIVEDMSG.PAYLOAD,"linkquality", true);
    
END
Serviceattribute
Battery
IF(ISNAN(battery),"-",battery+"%");
LinkQuality
IF(ISNAN(link),"-",link+"lqi");
BatteryVoltage
IF(ISNAN(voltage),"-",voltage+"mV");
Verbindung: Packet Parser → MQTT
Mögliche Verbesserungen (2)
  • Proactive State Request — Publish {"battery":""} or {"voltage":""} to request values on demand. Could wake sleeping device.
  • Availability Status — Online/offline availability topic. Could detect unreachable devices.

Quellen