TapHome

NOUS A1

Packet Parser → MQTT
Eingereicht von
Zuletzt aktualisiert: 04. 2026
NOUS A1

Die NOUS A1 ist eine WiFi-Smartsteckdose mit integriertem Energiemonitoring (BL0937-Chip). Mit Tasmota-Firmware kommuniziert sie über MQTT mit TapHome. Die Vorlage bietet Relaissteuerung und umfassende Energiemessung — Spannung, Strom, Wirk-/Blind-/Scheinleistung, Leistungsfaktor und kumulativen Energieverbrauch.

Die Steckdose verwendet einen ESP8266-Chipsatz und ist für 16A Spitzenlast / 15A Dauerlast (bis zu 3680W max., 3450W dauerhaft) ausgelegt. Sie benötigt einen externen MQTT-Broker (z. B. Mosquitto), der sowohl von der Steckdose als auch von TapHome Core erreichbar ist.

Konfiguration

Tasmota MQTT-Einrichtung

Vor dem Import der TapHome-Vorlage muss die NOUS A1 mit Tasmota-Firmware geflasht und die Verbindung zum MQTT-Broker konfiguriert werden:

  1. Öffnen Sie die Tasmota-Weboberfläche (IP-Adresse des Geräts im Browser eingeben)
  2. Navigieren Sie zu ConfigurationConfigure MQTT
  3. Setzen Sie den Host auf die IP-Adresse des MQTT-Brokers
  4. Setzen Sie den Port (Standard 1883)
  5. Setzen Sie User und Password, falls der Broker Authentifizierung erfordert
  6. Notieren Sie den Topic-Wert (z. B. tasmota_496D5A) — dieser wird für die TapHome-Vorlage benötigt
Vorlagenvariablen

Setzen Sie nach dem Import der Vorlage in TapHome die benutzerdefinierte Variable plug1topic entsprechend dem Tasmota MQTT Topic der Steckdose:

VariableBeschreibungErmittlung
plug1topicTasmota MQTT Topic der SmartsteckdoseTasmota Web UI → Configuration → MQTT → Feld Topic

Der Standardwert ist tasmota_496D5A — dieser muss auf das tatsächliche Topic jeder Steckdose geändert werden.

Das MQTT Topic ist gerätespezifisch. Bei Verwendung mehrerer NOUS A1 Steckdosen benötigt jede eine separate Vorlageninstanz mit einem eindeutigen plug1topic-Wert.

Kalibrierung des Energiemonitorings

Der BL0937-Energiemonitoring-Chip erfordert eine Kalibrierung für genaue Messwerte. Zur Kalibrierung:

  1. Schließen Sie eine bekannte ohmsche Last (z. B. 60W-Glühbirne) an die Steckdose an
  2. Setzen Sie in der Tasmota-Konsole die Referenzspannung: VoltageSet 230
  3. Setzen Sie die Referenzleistung: PowerSet 60
  4. Überprüfen Sie, ob der Leistungsfaktor für die ohmsche Last nahe 1,00 anzeigt

Die Kalibrierung ist ein einmaliger Vorgang — die Werte werden im Flash-Speicher gespeichert und bleiben nach Neustarts erhalten. Ohne sie können die Messwerte des BL0937-Chips ungenau sein.

Gerätefunktionen

Relaissteuerung

Die Vorlage stellt einen Relaisausgang für die 230V-AC-Steckdose bereit. Das Relais wird durch Publizieren auf cmnd/{topic}/Power mit Payload 1 (EIN) oder 0 (AUS) gesteuert. Beim Ausschalten des Relais fordert die Vorlage auch ein Energiestatus-Update an (Status 8), um die Energiewerte sofort zu aktualisieren.

Energiemessung

Die Vorlage liest Energiedaten aus dem tele/{topic}/SENSOR-Payload, der periodisch publiziert wird (Standard alle 300 Sekunden). Folgende Messwerte sind verfügbar:

  • Voltage — Netzspannung (V)
  • Current — Laststrom (A)
  • Active Power — Wirkleistung (W)
  • Apparent Power — Scheinleistung einschließlich Blindanteil (VA)
  • Reactive Power — Blindleistung (VAR)
  • Power Factor — Verhältnis von Wirk- zu Scheinleistung (cos phi, 0–1)
  • Energy Today — kumulativer Verbrauch seit Mitternacht (kWh)
  • Total Energy — kumulativer Verbrauch seit Zählerstart, bleibt nach Neustarts erhalten (kWh)
  • Period Energy — Verbrauch im aktuellen Telemetriezeitraum (Wh)
WiFi-Diagnose

Die Vorlage liest den WiFi-Status aus dem tele/{topic}/STATE-Payload:

  • WiFi Channel — die 2,4-GHz-Kanalnummer (1–13)
  • WiFi Signal Strength — Signalpegel in dBm
  • WiFi RSSI — Signalqualität in Prozent (0–100 %)
  • Uptime — Betriebszeit des Geräts in Sekunden seit dem letzten Neustart
Weitere Funktionen

Die NOUS A1 mit Tasmota-Firmware unterstützt auch die Überwachung des Verbindungsstatus über LWT-Topic (Last Will and Testament), den Energieverbrauch von gestern, eine konfigurierbare Telemetrieperiode (10–3600 Sekunden) und Befehle zum Zurücksetzen des Energiezählers. Der BL0937-Chip kann auch per MQTT-Befehle fernkalibriert werden. Diese Funktionen können in einem zukünftigen Vorlagenupdate hinzugefügt werden.

Fehlerbehebung

Keine Daten in TapHome
  1. Überprüfen Sie, ob die Steckdose mit WiFi verbunden ist — die Tasmota-Weboberfläche sollte unter der Geräte-IP erreichbar sein
  2. Prüfen Sie, ob MQTT konfiguriert und verbunden ist — die Tasmota-Hauptseite zeigt den MQTT-Verbindungsstatus
  3. Bestätigen Sie, dass die Variable plug1topic in TapHome exakt dem Topic-Wert in der Tasmota MQTT-Konfiguration entspricht
  4. Verwenden Sie einen MQTT-Client (z. B. MQTT Explorer), abonnieren Sie tele/# und überprüfen Sie, ob die Steckdose STATE- und SENSOR-Nachrichten publiziert
Ungenaue Energiemesswerte
  1. Der BL0937-Chip erfordert eine Kalibrierung mit einer bekannten ohmschen Last — siehe Abschnitt Kalibrierung oben
  2. Induktive Lasten (Motoren, LED-Treiber) haben natürlicherweise einen Leistungsfaktor unter 1,0 — dies ist erwartetes Verhalten, kein Messfehler
  3. Überprüfen Sie die Telemetrieperiode — das Standardintervall von 300 Sekunden bedeutet, dass Energiewerte alle 5 Minuten aktualisiert werden

Neuere Produktionsserien der NOUS A1 können Nicht-ESP-Chipsätze verwenden, die mit Tasmota-Firmware inkompatibel sind. Überprüfen Sie den Chipsatz vor dem Kauf, wenn eine Tasmota/MQTT-Integration erforderlich ist.

Verfügbare Geräte

NOUS A1 Modul
Benutzerdefinierte Variablen
plug1topic (string) = tasmota_496D5ATasmota MQTT Topic der Smartsteckdose — verwendet in Abonnementfiltern und Relaissteuerungsbefehlen
Open Tasmota web UI → Configuration → MQTT → copy Topic value (e.g., tasmota_496D5A)

ESP-NOUS-ZASUVKA-1

Listener
#var tmp := RECEIVEDMSG.Payload;
WiFi-Kanal Variable Nur lesen
numeric json_path

WiFi-Kanal

Listener
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
Scheinleistung Variable Nur lesen
numeric Einheit: VA json_path

Scheinleistung

Listener
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
Leistungsfaktor Variable Nur lesen

Verhältnis von Wirk- zu Scheinleistung (cos phi) — Bereich 0 bis 1, wobei 1,0 eine rein ohmsche Last anzeigt

numeric json_path

Leistungsfaktor

Listener
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
Strom Variable Nur lesen
numeric Einheit: A json_path

Strom

Schreiben
# 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
Lesen (Modul)
# 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");
Listener
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
Relaisausgang Schalter

Haupt-230V-AC-Relais — fordert beim Ausschalten auch eine Energiestatus-Aktualisierung an

boolean
Werte / Zustände: ON-ACCESO · OFF-SPENTO

Relaisausgang

Schaltzustand schreiben
var value1 := IF(St = 1, "1", "0");
MQTTPUBLISH("cmnd/" +  plug1topic + "/Power", value1);

var value2 := IF(St = 0, MQTTPUBLISH("cmnd/" +  plug1topic + "/Status", "8"));
Periodenenergie Variable Nur lesen

Verbrauch im aktuellen Telemetriezeitraum

numeric Einheit: Wh json_path

Periodenenergie

Listener
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
Wirkleistung Variable Nur lesen
numeric Einheit: W json_path

Wirkleistung

Listener
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
Energie heute Variable Nur lesen

Kumulativer Energieverbrauch seit Mitternacht

numeric Einheit: kWh json_path

Energie heute

Listener
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
Blindleistung Variable Nur lesen
numeric Einheit: VAR json_path

Blindleistung

Listener
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
Gesamtenergie Variable Nur lesen

Kumulativer Verbrauch seit Zählerstart — bleibt nach Neustarts erhalten

numeric Einheit: kWh json_path

Gesamtenergie

Listener
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
Betriebszeit Variable Nur lesen

Betriebszeit des Geräts in Sekunden seit dem letzten Neustart

numeric Einheit: s json_path

Betriebszeit

Listener
if INDEXOF(RECEIVEDMSG.Topic, "STATE") > 0
	var tmp := RECEIVEDMSG.Payload;
    var temp4 := PARSEJSON(RECEIVEDMSG.Payload, "UptimeSec", true);
    if (!ISNULL(temp4), Va := temp4);
end
Spannung Variable Nur lesen
numeric Einheit: V json_path

Spannung

Listener
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
WiFi-Signalstärke Variable Nur lesen

WiFi-Signalpegel in dBm — in der Vorlage durch 100 geteilt (Rekalibrierung möglicherweise erforderlich)

numeric Einheit: dBm json_path

WiFi-Signalstärke

Listener
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 Analogeingang Nur lesen

WiFi-Signalqualität in Prozent, normalisiert auf den Bereich 0–1 für TapHome AnalogInput

numeric Einheit: % json_path

WiFi RSSI

Listener
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
Verbindung: Packet Parser → MQTT
Mögliche Verbesserungen (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.

Quellen