TapHome

NOUS A1

Packet Parser → MQTT
Dodane przez
Ostatnia aktualizacja: 04. 2026
NOUS A1

NOUS A1 to inteligentne gniazdko WiFi z wbudowanym monitoringiem energii (chip BL0937). Z oprogramowaniem Tasmota komunikuje się z TapHome przez MQTT. Szablon zapewnia sterowanie przekaźnikiem i kompleksowy pomiar energii — napięcie, prąd, moc czynna/bierna/pozorna, współczynnik mocy i skumulowane zużycie energii.

Gniazdko używa chipsetu ESP8266 i jest dimensjonowane na 16A szczytowo / 15A ciągle (do 3680W max, 3450W ciągle). Wymaga zewnętrznego brokera MQTT (np. Mosquitto) dostępnego zarówno z gniazdka, jak i z TapHome Core.

Konfiguracja

Konfiguracja Tasmota MQTT

Przed importem szablonu TapHome, na NOUS A1 musi być zainstalowane oprogramowanie Tasmota i skonfigurowane połączenie z brokerem MQTT:

  1. Otwórz interfejs webowy Tasmota (wpisz adres IP urządzenia w przeglądarce)
  2. Przejdź do ConfigurationConfigure MQTT
  3. Ustaw Host na adres IP brokera MQTT
  4. Ustaw Port (domyślnie 1883)
  5. Ustaw User i Password jeśli broker wymaga uwierzytelniania
  6. Zanotuj wartość Topic (np. tasmota_496D5A) — jest potrzebna dla szablonu TapHome
Zmienne szablonu

Po imporcie szablonu w TapHome ustaw zmienną niestandardową plug1topic zgodnie z topicem MQTT Tasmota gniazdka:

ZmiennaOpisJak uzyskać
plug1topicTopic MQTT Tasmota inteligentnego gniazdkaTasmota web UI → Configuration → MQTT → pole Topic

Domyślna wartość to tasmota_496D5A — musi być zmieniona na rzeczywisty topic każdego gniazdka.

Topic MQTT jest specyficzny dla urządzenia. Jeśli używanych jest wiele gniazdek NOUS A1, każde wymaga osobnej instancji szablonu z unikalną wartością plug1topic.

Kalibracja monitoringu energii

Chip BL0937 do monitoringu energii wymaga kalibracji dla dokładnych odczytów. Procedura kalibracji:

  1. Podłącz znane obciążenie rezystancyjne (np. żarówkę 60W) do gniazdka
  2. W konsoli Tasmota ustaw napięcie referencyjne: VoltageSet 230
  3. Ustaw moc referencyjną: PowerSet 60
  4. Sprawdź, czy współczynnik mocy wskazuje wartość bliską 1,00 dla obciążenia rezystancyjnego

Kalibracja to jednorazowa procedura — wartości są przechowywane w pamięci flash i zachowują się po restarcie. Bez niej odczyty z chipu BL0937 mogą być niedokładne.

Funkcje urządzenia

Sterowanie przekaźnikiem

Szablon udostępnia jedno wyjście przekaźnikowe dla gniazdka AC 230V. Przekaźnik jest sterowany przez publikowanie na cmnd/{topic}/Power z payloadem 1 (WŁ) lub 0 (WYŁ). Po wyłączeniu przekaźnika szablon również żąda aktualizacji stanu energii (Status 8) w celu natychmiastowego odświeżenia odczytów.

Monitoring energii

Szablon odczytuje dane energetyczne z payloadu tele/{topic}/SENSOR, który jest publikowany okresowo (domyślnie co 300 sekund). Dostępne są następujące pomiary:

  • Voltage — napięcie sieciowe (V)
  • Current — prąd obciążenia (A)
  • Active Power — moc czynna (W)
  • Apparent Power — moc pozorna z komponentem biernym (VA)
  • Reactive Power — moc bierna (VAR)
  • Power Factor — stosunek mocy czynnej do pozornej (cos phi, 0–1)
  • Energy Today — skumulowane zużycie od północy (kWh)
  • Total Energy — skumulowane zużycie od uruchomienia licznika, zachowywane po restarcie (kWh)
  • Period Energy — zużycie w bieżącym okresie telemetrii (Wh)
Diagnostyka WiFi

Szablon odczytuje status WiFi z payloadu tele/{topic}/STATE:

  • WiFi Channel — numer kanału 2,4 GHz (1–13)
  • WiFi Signal Strength — poziom sygnału w dBm
  • WiFi RSSI — jakość sygnału w procentach (0–100%)
  • Uptime — czas pracy urządzenia w sekundach od ostatniego restartu
Dodatkowe funkcje

NOUS A1 z oprogramowaniem Tasmota obsługuje również monitoring stanu połączenia przez topic LWT (Last Will and Testament), wczorajsze zużycie energii, konfigurowalny okres telemetrii (10–3600 sekund) oraz komendy resetowania licznika energii. Chip BL0937 może być również rekalibrowany zdalnie przez komendy MQTT. Te funkcje mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Brak danych w TapHome
  1. Sprawdź, czy gniazdko jest połączone z WiFi — interfejs webowy Tasmota powinien być dostępny pod adresem IP urządzenia
  2. Sprawdź, czy MQTT jest skonfigurowane i połączone — główna strona Tasmota pokazuje status połączenia MQTT
  3. Potwierdź, że zmienna plug1topic w TapHome dokładnie odpowiada wartości Topic w konfiguracji MQTT Tasmota
  4. Użyj klienta MQTT (np. MQTT Explorer) do subskrypcji tele/# i sprawdź, czy gniazdko publikuje wiadomości STATE i SENSOR
Niedokładne odczyty energii
  1. Chip BL0937 wymaga kalibracji ze znanym obciążeniem rezystancyjnym — patrz sekcja kalibracji powyżej
  2. Obciążenia indukcyjne (silniki, drivery LED) naturalnie mają współczynnik mocy poniżej 1,0 — to oczekiwane zachowanie, nie błąd pomiaru
  3. Sprawdź okres telemetrii — domyślny 300-sekundowy interwał oznacza aktualizację wartości co 5 minut

Nowsze serie produkcyjne NOUS A1 mogą używać chipsetów innych niż ESP, które są niekompatybilne z oprogramowaniem Tasmota. Przed zakupem zweryfikuj chipset, jeśli wymagana jest integracja Tasmota/MQTT.

Dostępne urządzenia

NOUS A1 Moduł
Zmienne niestandardowe
plug1topic (string) = tasmota_496D5ATopic MQTT Tasmota inteligentnego gniazdka — używany w filtrach subskrypcji i komendach sterowania przekaźnikiem
Open Tasmota web UI → Configuration → MQTT → copy Topic value (e.g., tasmota_496D5A)

ESP-NOUS-ZASUVKA-1

Nasłuchiwanie
#var tmp := RECEIVEDMSG.Payload;
Kanał WiFi Zmienna Tylko do odczytu
numeric json_path

Kanał WiFi

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "STATE") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID1 + ".Channel", true);
    if (!ISNULL(temp4), Va := temp4/1);
end
Moc pozorna Zmienna Tylko do odczytu
numeric Jednostka: VA json_path

Moc pozorna

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID12 + ".ApparentPower", true);
    if (!ISNULL(temp4), Va := temp4/1);
end
Współczynnik mocy Zmienna Tylko do odczytu

Stosunek mocy czynnej do pozornej (cos phi) — zakres 0 do 1, gdzie 1,0 oznacza czysto rezystancyjne obciążenie

numeric json_path

Współczynnik mocy

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID12 + ".Factor", true);
    if (!ISNULL(temp4), Va := temp4/1);
end
Prąd Zmienna Tylko do odczytu
numeric Jednostka: A json_path

Prąd

Zapis
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + Va);
# IF response.IsSuccess = false
#  ADDERROR(response.StatusCode);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + Va, "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\":" + Va + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + Va + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + Va, "write"); # use "append" mode to append data to existing file
Odczyt (moduł)
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID12 + ".Current", true);
    if (!ISNULL(temp4), Va := temp4/1);
end
Wyjście przekaźnikowe Przełącznik

Główny przekaźnik AC 230V — przy wyłączeniu żąda również odświeżenia stanu energii

boolean
Wartości / Stany: ON-ACCESO · OFF-SPENTO

Wyjście przekaźnikowe

Zapis stanu przełącznika
var value1 := IF(St = 1, "1", "0");
MQTTPUBLISH("cmnd/" +  plug1topic + "/Power", value1);

var value2 := IF(St = 0, MQTTPUBLISH("cmnd/" +  plug1topic + "/Status", "8"));
Energia okresu Zmienna Tylko do odczytu

Zużycie w bieżącym okresie telemetrii

numeric Jednostka: Wh json_path

Energia okresu

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID12 + ".Period", true);
    if (!ISNULL(temp4), Va := temp4/1);
end
Moc czynna Zmienna Tylko do odczytu
numeric Jednostka: W json_path

Moc czynna

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID12 + ".Power", true);
    if (!ISNULL(temp4), Va := temp4/1);
end
Energia dziś Zmienna Tylko do odczytu

Skumulowane zużycie energii od północy

numeric Jednostka: kWh json_path

Energia dziś

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID12 + ".Today", true);
    if (!ISNULL(temp4), Va := temp4/1);
end
Moc bierna Zmienna Tylko do odczytu
numeric Jednostka: VAR json_path

Moc bierna

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID12 + ".ReactivePower", true);
    if (!ISNULL(temp4), Va := temp4/1);
end
Energia całkowita Zmienna Tylko do odczytu

Skumulowane zużycie od uruchomienia licznika — zachowywane po restarcie

numeric Jednostka: kWh json_path

Energia całkowita

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID12 + ".Total", true);
    if (!ISNULL(temp4), Va := temp4/1);
end
Czas pracy Zmienna Tylko do odczytu

Czas pracy urządzenia w sekundach od ostatniego restartu

numeric Jednostka: s json_path

Czas pracy

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "STATE") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, "UptimeSec", true);
    if (!ISNULL(temp4), Va := temp4);
end
Napięcie Zmienna Tylko do odczytu
numeric Jednostka: V json_path

Napięcie

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID12 + ".Voltage", true);
    if (!ISNULL(temp4), Va := temp4/1);
end
Siła sygnału WiFi Zmienna Tylko do odczytu

Poziom sygnału WiFi w dBm — w szablonie dzielony przez 100 (może wymagać rekalibracji)

numeric Jednostka: dBm json_path

Siła sygnału WiFi

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "STATE") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, ID1 + ".Signal", true);
    if (!ISNULL(temp4), Va := temp4/100);
end
WiFi RSSI Wejście analogowe Tylko do odczytu

Jakość sygnału WiFi w procentach, znormalizowana do zakresu 0–1 dla TapHome AnalogInput

numeric Jednostka: % json_path

WiFi RSSI

Nasłuchiwanie
if INDEXOF(RECEIVEDMSG.Topic, "STATE") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp2 := PARSEJSON(RECEIVEDMSG.Payload, ID1 + ".RSSI", true);
    if (!ISNULL(temp2), An := temp2/100);
end
Połączenie: Packet Parser → MQTT
Możliwe ulepszenia (5)
  • Connection Status (LWT) — Last Will and Testament — Online/Offline payload. Could detect device connectivity.
  • Energy Yesterday — Yesterday's energy consumption in kWh. Available in SENSOR payload but not parsed by template.
  • Telemetry Period — Set telemetry interval (10–3600s, default 300). Could be exposed as service action.
  • Energy Counter Reset — Reset energy counters (Today, Yesterday, Total). Could be exposed as service action.
  • Energy Calibration Commands — BL0937 energy monitoring chip calibration — important for accurate readings but requires physical known load.

Źródła