TapHome

Sonoff SNZB-01

Packet Parser → MQTT
Dodane przez
Ostatnia aktualizacja: 04. 2026
Sonoff SNZB-01

Sonoff SNZB-01 to kompaktowy, bezprzewodowy przycisk Zigbee 3.0 zasilany baterią guzikową CR2450. Komunikuje się z TapHome pośrednio — przycisk paruje się z koordynatorem Zigbee2MQTT (np. Sonoff ZBDongle-P/E lub stick oparty na CC2652), który przekazuje wiadomości Zigbee na topici MQTT. TapHome subskrybuje te topici MQTT przez moduł PacketParser MQTT.

Szablon wykrywa trzy akcje przycisku (pojedyncze naciśnięcie, podwójne naciśnięcie, długie naciśnięcie) i monitoruje procent baterii, napięcie baterii oraz jakość sygnału Zigbee.

Konfiguracja

Konfiguracja Zigbee2MQTT

Przed importem szablonu TapHome, SNZB-01 musi być sparowany z koordynatorem Zigbee2MQTT:

  1. Otwórz interfejs webowy Zigbee2MQTT i włącz tryb parowania (Permit join)
  2. Na SNZB-01 zdejmij tylną pokrywę i przytrzymaj przycisk reset przez 5 sekund, aż LED zamiga trzy razy
  3. Urządzenie pojawi się na liście urządzeń Zigbee2MQTT z adresem IEEE (np. 0x00124b001eab21e5) lub friendly name
Zmienna modułu

Po imporcie szablonu w TapHome ustaw zmienną niestandardową SonoffSNZB01 do identyfikacji urządzenia na brokerze MQTT:

ZmiennaOpisJak uzyskaćPrzykład
SonoffSNZB01Friendly name Zigbee2MQTT lub adres IEEE SNZB-01Zigbee2MQTT web UI → Devices → znajdź SNZB-01 → skopiuj friendly name lub adres IEEE0x00124b001eab21e5

Zmienna jest używana jako prefiks topicu MQTT — skrypt listener subskrybuje zigbee2mqtt/{SonoffSNZB01} i zigbee2mqtt/{SonoffSNZB01}/action.

Użycie friendly name (np. living_room_button) zamiast adresu IEEE sprawia, że konfiguracja jest bardziej czytelna. Friendly name można zmienić w interfejsie webowym Zigbee2MQTT w ustawieniach urządzenia.

Funkcje urządzenia

Wykrywanie naciśnięcia przycisku

Szablon mapuje SNZB-01 jako urządzenie Push Button w TapHome. Zdarzenia naciśnięcia przycisku przychodzą na topicu zigbee2mqtt/{id}/action i są mapowane na wartości numeryczne:

Akcja fizycznaMQTT payloadWartość TapHome
Pojedyncze naciśnięcie (zwolnienie + 0,6 s oczekiwanie)single1
Podwójne naciśnięciedouble3
Długie naciśnięcie (przytrzymanie 2 sekundy)long2

Po odczytaniu stanu przycisku wartość resetuje się do 0 — akcje przycisku są oparte na zdarzeniach i nie można ich odczytać wstecz.

Monitoring baterii i sygnału

Każda instancja przycisku udostępnia trzy atrybuty serwisowe:

  • Battery — pozostały procent baterii (0–100 %) z topicu JSON stanu. SNZB-01 używa baterii guzikowej CR2450 o typowej żywotności 1–2 lata.
  • BatteryVoltage — napięcie baterii w miliwoltach z topicu JSON stanu.
  • LinkQuality — wskaźnik jakości sygnału Zigbee (0–255 lqi) z topicu JSON stanu. Wyższe wartości oznaczają lepszy sygnał.

Wszystkie atrybuty wyświetlają "-" do momentu odebrania pierwszej wiadomości z urządzenia.

Dodatkowe funkcje

Most Zigbee2MQTT udostępnia również topic do proaktywnego zapytania o stan (zigbee2mqtt/{id}/get), który pozwala na żądanie wartości baterii i napięcia na żądanie, oraz topic dostępności do wykrywania stanu online/offline. Te funkcje mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Naciśnięcia przycisku nie są wykrywane
  1. Sprawdź, czy SNZB-01 jest sparowany z koordynatorem Zigbee2MQTT — powinien pojawiać się na liście urządzeń z zielonym statusem
  2. Sprawdź, czy zmienna niestandardowa SonoffSNZB01 dokładnie odpowiada friendly name lub adresowi IEEE urządzenia (rozróżniana jest wielkość liter)
  3. Użyj klienta MQTT (np. MQTT Explorer) do subskrypcji zigbee2mqtt/# i naciśnij przycisk — na topicu /action powinna pojawić się wiadomość
  4. Jeśli nie pojawiają się żadne wiadomości MQTT, urządzenie mogło utracić połączenie Zigbee — sparuj ponownie przytrzymując przycisk reset przez 5 sekund
Nieaktualne wartości baterii lub jakości sygnału
  1. Dane o baterii i sygnale aktualizują się tylko gdy urządzenie się wybudzi (przy naciśnięciu przycisku lub okresowym raportowaniu)
  2. Jeśli wartości pokazują "-", nie odebrano jeszcze żadnej wiadomości — naciśnij przycisk, aby wywołać aktualizację
  3. Zapewnij dobry odbiór koordynatora Zigbee — zasięg SNZB-01 zależy od sieci mesh Zigbee

Sonoff SNZB-01 został wycofany z produkcji i zastąpiony modelem SNZB-01P. Szablon TapHome pozostaje funkcjonalny dla istniejących urządzeń SNZB-01, ale przy nowych zakupach warto rozważyć SNZB-01P, który oferuje lepszy zasięg i baterię ładowaną przez USB-C.

Dostępne urządzenia

Sonoff SNZB-01 Moduł
Zmienne niestandardowe
SonoffSNZB01 (string) = 0x00124b001eab21e5Friendly name Zigbee2MQTT lub adres IEEE urządzenia SNZB-01 — używany jako prefiks topicu MQTT
Open Zigbee2MQTT web UI → Devices → find SNZB-01 → copy the Friendly name (or use the IEEE address, e.g. 0x00124b001eab21e5)
Przycisk bezprzewodowy Przycisk

Wykrywanie naciśnięcia przycisku — pojedyncze (1), podwójne (3), długie (2); resetuje się do 0 po odczycie

enum
Atrybuty serwisowe
BateriaPozostały procent baterii (bateria guzikowa CR2450, 0–100 %)
LinkQualityWskaźnik jakości sygnału Zigbee — 0 (najgorszy) do 255 (najlepszy)
BatteryVoltageNapięcie baterii w miliwoltach

Przycisk bezprzewodowy

Odczyt stanu przycisku
Bp := 0;
Zapis stanu przycisku
# 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
Nasłuchiwanie
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
Atrybuty serwisowe
Battery
IF(ISNAN(battery),"-",battery+"%");
LinkQuality
IF(ISNAN(link),"-",link+"lqi");
BatteryVoltage
IF(ISNAN(voltage),"-",voltage+"mV");
Połączenie: Packet Parser → MQTT
Możliwe ulepszenia (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.

Źródła