TapHome

Shelly 3EM MQTT

Packet Parser → MQTT
Dodane przez
Ostatnia aktualizacja: 06. 2026
Shelly 3EM MQTT

Shelly 3EM to 3-fazowy licznik energii Wi-Fi z pierwszej generacji urządzeń Shelly (Gen1). Mierzy moc czynną, napięcie, prąd, współczynnik mocy oraz energię łączną niezależnie dla każdej z trzech faz przy użyciu trzech dołączonych dzielonych przekładników 120 A i zawiera wbudowany przekaźnik 10 A, zwykle używany do sterowania cewką zewnętrznego stycznika mocy. TapHome komunikuje się z urządzeniem przez MQTT — urządzenie wysyła pomiary per faza do brokera, moduł TapHome PacketParser subskrybuje drzewo topiców shellies/# i kieruje wartości do czterech urządzeń podrzędnych (3 liczniki energii + 1 przełącznik stycznika).

To jest wariant MQTT szablonu Shelly 3EM. Dostępny jest również wariant HTTP — wybierz MQTT, jeśli już uruchamiasz lokalnego brokera MQTT, chcesz aktualizacji push zamiast pollingu lub musisz dzielić licznik z wieloma odbiorcami (TapHome plus inny system). Włączenie MQTT na firmware Gen1 wyłącza Shelly Cloud — oba nie mogą działać równocześnie.

Konfiguracja

Włączenie MQTT w Shelly 3EM

Otwórz interfejs webowy Shelly 3EM (http://{device-ip} lub http://shelly3em-{MAC}.local) i skonfiguruj klienta MQTT:

  1. Przejdź do Internet & SecurityAdvanced - Developer Settings
  2. Zaznacz Enable action execution via MQTT
  3. Wypełnij Server wartością {adres IP brokera MQTT}:{port} — zwykle 192.168.1.10:1883
  4. (Opcjonalnie) Ustaw Username i Password, jeśli broker wymaga uwierzytelnienia
  5. Kliknij SAVE — urządzenie zrestartuje się i połączy z brokerem

Urządzenia Shelly Gen1 nie obsługują MQTT przez TLS. Komunikacja między urządzeniem a brokerem to nieszyfrowany plain TCP na porcie 1883. Nazwa użytkownika i hasło są wysyłane w postaci jawnej. Używaj brokera MQTT tylko w zaufanej sieci lokalnej.

Włączenie MQTT automatycznie wyłącza Shelly Cloud na firmware Gen1. Aby przywrócić, odznacz opcję MQTT i ponownie włącz Cloud w Internet & Security.

Znalezienie Device ID

Szablon TapHome subskrybuje shellies/shellyem3-{dID}/#, gdzie {dID} to sufiks MAC urządzenia używany jako prefiks topic MQTT.

Aby znaleźć go w interfejsie webowym Shelly 3EM:

  1. Otwórz interfejs webowy urządzenia w przeglądarce
  2. Przejdź do SettingsDevice Info
  3. Skopiuj pierwszy ciąg Device ID (NIE wartość w nawiasach) — odpowiada to adresowi MAC interfejsu WiFi (np. DC4F227649A1)

Alternatywnie wywołaj GET http://{device-ip}/settings i odczytaj pole mqtt.id.

Konfiguracja szablonu

Po zaimportowaniu szablonu w TapHome ustaw trzy parametry importu:

ParametrOpisPrzykład
IpAddressAdres IP brokera MQTT192.168.1.10
PortPort brokera MQTT1883
dIDDevice ID (sufiks MAC) urządzenia Shelly 3EMDC4F227649A1

Moduł następnie subskrybuje shellies/# (QoS 0), a skrypty listener kierują wiadomości emeter i relay per faza do odpowiednich urządzeń podrzędnych. Domyślny okres aktualizacji MQTT urządzenia to 30 sekund — można go zmniejszyć przez GET http://{device-ip}/settings?mqtt_update_period=N (wartość 0 publikuje tylko przy zmianie).

Prefiks topic MQTT na linii to shellyem3-{MAC}, podczas gdy nazwa hosta mDNS urządzenia to shelly3em-{MAC}.local — Shelly używa dwóch różnych form dla tego samego urządzenia. Szablon podąża za rzeczywistym prefiksem topic MQTT (shellyem3-). Jeśli wiadomości MQTT nie docierają, zasubskrybuj shellies/# klientem MQTT, aby sprawdzić, jakiego prefiksu firmware faktycznie używa.

Możliwości urządzenia

Moc czynna i energia łączna per faza

Szablon tworzy trzy urządzenia liczników energii — po jednym dla każdej fazy (przekładnik 1 → faza A, przekładnik 2 → faza B, przekładnik 3 → faza C). Każdy licznik odczytuje dwie wartości:

  • Moc czynna — moc chwilowa z shellies/shellyem3-{dID}/emeter/{i}/power (W), dzielona przez 1000 i zapisywana jako kW
  • Łączna zużyta energia — kumulatywna energia za cały okres z .../emeter/{i}/total (Wh), dzielona przez 1000 i zapisywana jako kWh

Każdy przekładnik jest dimensjonowany na 120 A i jest nieinwazyjny (zacisk clip-on, bez konieczności rozcinania przewodu). Dołączone 3 przekładniki są indywidualnie oznakowane i kalibrowane — NIE są wymienne między kanałami.

Parametry elektryczne per faza

Każdy licznik udostępnia cztery atrybuty service do zaawansowanego monitoringu:

  • Napięcie [V] — napięcie skuteczne (RMS) faza-zero na danej fazie (.../emeter/{i}/voltage)
  • Prąd [A] — prąd skuteczny (RMS) mierzony przez odpowiedni przekładnik (.../emeter/{i}/current)
  • Współczynnik mocy — stosunek mocy czynnej do pozornej, zakres −1.00 do 1.00 (.../emeter/{i}/pf)
  • Energia oddana [Wh] — łączna energia oddana do sieci na danej fazie (.../emeter/{i}/total_returned), użyteczna dla PV / pomiaru dwukierunkowego

Kombinacja total (zużyta) i total_returned (eksportowana) per faza czyni szablon odpowiednim dla instalacji solarnych / oddających energię do sieci.

Reset liczników energii

Każda faza ma akcję service Reset Total, która publikuje reset_totals na shellies/shellyem3-{dID}/emeter/{i}/command. Zeruje to liczniki total i total_returned dla konkretnej fazy — przydatne przy zmianie zastosowania licznika lub rozpoczęciu nowego okresu pomiaru.

Przekaźnik stycznikowy

Wbudowany przekaźnik 10 A jest udostępniony jako urządzenie przełącznikowe. Stan jest odczytywany z shellies/shellyem3-{dID}/relay/0 (on → 1, cokolwiek innego → 0) i sterowany poprzez publikację on lub off na .../relay/0/command. Przekaźnik jest dimensjonowany na 10 A / 240 V AC i zwykle podłączany przez zaciski I (wejście fazy) i O (wyjście przekaźnika) do sterowania cewką zewnętrznego stycznika mocy do przełączania większych obciążeń.

Szablon MQTT nie publikuje 3-fazowej sumy mocy (total_power na Gen1 jest dostępne tylko przez HTTP). Utwórz w TapHome wirtualne urządzenie sumujące trzy wartości mocy per faza, jeśli potrzebujesz pojedynczej wartości mocy domowej.

Rozwiązywanie problemów

Brak odbieranych wiadomości MQTT
  1. Potwierdź, że MQTT jest włączony w Shelly web UI (Internet & SecurityAdvanced - Developer SettingsEnable action execution via MQTT) i urządzenie zrestartowało się po zapisaniu
  2. Sprawdź, że IP i port brokera w urządzeniu odpowiadają parametrom importu IpAddress/Port w TapHome
  3. Zasubskrybuj shellies/# klientem MQTT (np. MQTT Explorer, mosquitto_sub) i sprawdź, czy urządzenie cokolwiek publikuje — zweryfikuj, że rzeczywisty prefiks topic (shellyem3-{dID}) odpowiada dID wprowadzonemu w TapHome
  4. Upewnij się, że broker MQTT działa i jest osiągalny zarówno z Shelly 3EM, jak i z TapHome Core
  5. Jeśli IP urządzenia ostatnio się zmienił, spróbuj połączyć się przez nazwę hosta mDNS shelly3em-{MAC}.local, aby zweryfikować dostępność urządzenia w sieci
Wartości energii pokazują zero lub nieprawdopodobne wartości
  1. Potwierdź, że każdy przekładnik jest podłączony do właściwego wejścia — przekładnik oznaczony IA musi być podłączony do zacisków IA-/IA+, IB do IB-/IB+, IC do IC-/IC+. Przekładniki są kalibrowane per kanał i nie są wymienne.
  2. Sprawdź, że strzałka na obudowie przekładnika wskazuje kierunek przepływu prądu (od źródła do obciążenia). Odwrócony przekładnik daje ujemny współczynnik mocy i odwraca klasyfikację zużycia / oddania.
  3. Sprawdź, że wejścia napięciowe VA, VB, VC są podłączone do tych samych faz, które mierzą przekładniki — błędne sparowanie napięcie / prąd daje błędne wartości mocy i współczynnika mocy.
  4. Jeśli pojedyncza faza pokazuje zero, podczas gdy pozostałe są poprawne, wymień ten przekładnik na sprawdzony i zlokalizuj problem między przekładnikiem a obwodem.
Nie można włączyć MQTT — Cloud jest aktywny

Na firmware Gen1 MQTT i Shelly Cloud są wzajemnie wykluczające się. Jeśli pole Enable action execution via MQTT jest wyszarzone, najpierw wyłącz Shelly Cloud w Internet & SecurityCloud, a potem ponownie otwórz ustawienia MQTT.

Historia Shelly Cloud zniknęła po włączeniu MQTT

To zachowanie oczekiwane — włączenie MQTT wyłącza Cloud wraz z jego 365-dniową historią. Jeśli potrzebujesz zarówno sterowania MQTT w czasie rzeczywistym w TapHome, jak i długoterminowej historii, kieruj wiadomości MQTT przez własnego brokera i przechowuj dane historyczne w TapHome (lub osobnym systemie logowania).

Każdy przekładnik musi być zawsze podłączony do zacisków Shelly 3EM zanim zostanie zacisnięty wokół przewodu pod napięciem. Napięcie indukowane na otwartym uzwojeniu wtórnym przekładnika może osiągać niebezpieczne wartości i uszkodzić przekładnik.

Jak zainstalować w TapHome

Wymagania wstępne

  • Urządzenie Shelly połączone z Wi-Fi (jeśli jeszcze nie, zobacz przewodnik po połączeniu HTTP)
  • Broker MQTT działający w sieci lokalnej (np. Mosquitto, Home Assistant lub wbudowany broker TapHome)
  • TapHome CCU w tej samej sieci co broker

Na urządzeniach Gen1 włączenie MQTT wyłącza Shelly Cloud. Oba nie mogą działać jednocześnie. Na urządzeniach Gen2/Plus to ograniczenie nie obowiązuje.

Krok 1 — Włącz MQTT na urządzeniu Shelly

Urządzenia Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Otwórz interfejs webowy Shelly: http://<device-ip>/
  2. Przejdź do Internet & SecurityAdvanced — MQTT
  3. Włącz MQTT
  4. Ustaw MQTT Server: <broker-ip>:<port> (np. 192.168.1.10:1883)
  5. Opcjonalnie ustaw MQTT User i MQTT Password, jeśli broker wymaga uwierzytelniania
  6. Kliknij Save — urządzenie zrestartuje się i połączy z brokerem

Urządzenia Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Otwórz interfejs webowy Shelly: http://<device-ip>/
  2. Przejdź do SettingsMQTT
  3. Włącz MQTT
  4. Ustaw Server: <broker-ip>:<port> (np. 192.168.1.10:1883)
  5. Client ID jest wstępnie wypełnione identyfikatorem urządzenia (np. shellyplus1pm-AABBCCDDEE) — pozostaw bez zmian, chyba że masz konkretny powód do zmiany
  6. Kliknij Save i zrestartuj urządzenie

Aby sprawdzić, czy MQTT działa, użyj klienta MQTT (np. MQTT Explorer) i zasubskrybuj shellies/# (Gen1) lub <device-id>/# (Gen2). Powinieneś zobaczyć komunikaty o stanie z urządzenia.

Krok 2 — Znajdź Device ID / MQTT Client ID

Niektóre szablony wymagają parametru Device ID lub MQTT Client ID. Jest to unikalny identyfikator używany w topikach MQTT.

  • Gen1: znajduje się na etykiecie jako adres MAC (np. AABBCCDDEE). Device ID = shelly<model>-<mac>, np. shelly1pm-AABBCCDDEE
  • Gen2/Plus: znajduje się w interfejsie webowym Shelly w sekcji SettingsDevice InfoDevice ID lub na etykiecie urządzenia

Krok 3 — Konfiguracja w TapHome

  1. W TapHome dodaj nowy moduł Packet Parser (MQTT)
  2. IP Address: wprowadź adres IP brokera MQTT (np. 192.168.1.10)
  3. Port: 1883 (domyślny; użyj 8883 dla TLS)
  4. Device ID / MQTT Client ID: wprowadź wartość z kroku 2 (jeśli wymagane przez szablon)
  5. Zaimportuj szablon — TapHome automatycznie zasubskrybuje topiki urządzenia

Dostępne urządzenia

Shelly 3EM MQTT Moduł
Zmienne niestandardowe
dID (string)Sufiks MAC Shelly 3EM tworzący prefiks topic MQTT shellies/shellyem3-{dID}/... — znajdziesz go w Shelly web UI → Settings → Device Info (pierwszy ciąg, NIE wartość w nawiasach)
Open Shelly 3EM web UI → Settings → Device Info → copy the first Device ID string (NOT the value in brackets); equals the WiFi MAC address (e.g. DC4F227649A1)
Licznik energii (Faza 1) Licznik energii Tylko do odczytu

Moc czynna (kW) i energia łączna (kWh) na fazie A — odczytywane z przekładnika 1, z konwersją W→kW i Wh→kWh

numeric Jednostka: kW / kWh
Atrybuty serwisowe
Energia oddanaŁączna energia oddana do sieci na fazie A (Wh) — użyteczna dla PV / pomiaru dwukierunkowego
NapięcieNapięcie skuteczne (RMS) faza-zero na fazie A (V)
PrądPrąd skuteczny (RMS) mierzony przez przekładnik 1 (A)
Współczynnik mocyWspółczynnik mocy na fazie A — stosunek mocy czynnej do pozornej, zakres −1.00 do 1.00
Akcje serwisowe
Reset całkowitychZeruje liczniki total i total_returned energii dla fazy A

Licznik energii (Faza 1)

Odczyt całkowitego zużycia
# 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");
Odczyt zapotrzebowania
# 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(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/0/power")
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
elseif(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/0/total")
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Atrybuty serwisowe
returned energy [Wh]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/total_returned")
 return(parsejson(x, "Payload"));
END
voltage [V]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/voltage")
 return(todouble(parsejson(x, "Payload")));
END
current [A]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/current")
 return(todouble(parsejson(x, "Payload")));
END
power factor
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/pf")
 return(todouble(parsejson(x, "Payload")));
END
Akcje serwisowe
Reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/0/command", "reset_totals");
Licznik energii (Faza 2) Licznik energii Tylko do odczytu

Moc czynna (kW) i energia łączna (kWh) na fazie B — odczytywane z przekładnika 2, z konwersją W→kW i Wh→kWh

numeric Jednostka: kW / kWh
Atrybuty serwisowe
Energia oddanaŁączna energia oddana do sieci na fazie B (Wh) — użyteczna dla PV / pomiaru dwukierunkowego
NapięcieNapięcie skuteczne (RMS) faza-zero na fazie B (V)
PrądPrąd skuteczny (RMS) mierzony przez przekładnik 2 (A)
Współczynnik mocyWspółczynnik mocy na fazie B — stosunek mocy czynnej do pozornej, zakres −1.00 do 1.00
Akcje serwisowe
Reset całkowitychZeruje liczniki total i total_returned energii dla fazy B

Licznik energii (Faza 2)

Odczyt całkowitego zużycia
# 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");
Odczyt zapotrzebowania
# 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(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/1/power")
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
 elseif(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/1/total")
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Atrybuty serwisowe
total returned [Wh]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/total_returned")
 return(todouble(parsejson(x, "Payload")));
END
voltage [V]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/voltage")
 return(todouble(parsejson(x, "Payload")));
END
current [A]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/current")
 return(todouble(parsejson(x, "Payload")));
END
power factor
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/pf")
 return(todouble(parsejson(x, "Payload")));
END
Akcje serwisowe
Reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/1/command", "reset_totals");
Licznik energii (Faza 3) Licznik energii Tylko do odczytu

Moc czynna (kW) i energia łączna (kWh) na fazie C — odczytywane z przekładnika 3, z konwersją W→kW i Wh→kWh

numeric Jednostka: kW / kWh
Atrybuty serwisowe
Energia oddanaŁączna energia oddana do sieci na fazie C (Wh) — użyteczna dla PV / pomiaru dwukierunkowego
NapięcieNapięcie skuteczne (RMS) faza-zero na fazie C (V)
PrądPrąd skuteczny (RMS) mierzony przez przekładnik 3 (A)
Współczynnik mocyWspółczynnik mocy na fazie C — stosunek mocy czynnej do pozornej, zakres −1.00 do 1.00
Akcje serwisowe
Reset całkowitychZeruje liczniki total i total_returned energii dla fazy C

Licznik energii (Faza 3)

Odczyt całkowitego zużycia
# 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");
Odczyt zapotrzebowania
# 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(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/2/power")
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
 elseif(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/2/total")
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Atrybuty serwisowe
total returned [Wh]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/total_returned")
 return(todouble(parsejson(x, "Payload")));
END
voltage [V]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/voltage")
 return(todouble(parsejson(x, "Payload")));
END
current [A]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/current")
 return(todouble(parsejson(x, "Payload")));
END
Power Factor
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/pf")
 return(todouble(parsejson(x, "Payload")));
END
Akcje serwisowe
reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/2/command", "reset_totals");
Przekaźnik stycznikowy Przełącznik

Wbudowany przekaźnik 10 A — zwykle podłączony do sterowania cewką zewnętrznego stycznika mocy przez zaciski I/O

boolean
Wartości / Stany: ON · OFF

Przekaźnik stycznikowy

Odczyt stanu przełącznika
# 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");
Zapis stanu przełącznika
# Simple HTTP Request:
MQTTPUBLISH("shellies/shellyem3-"+dID+"/relay/0/command", switch(St,1,"on","off"));
# VAR response := SENDHTTPREQUEST("/example/set/value=" + St);
# IF response.IsSuccess = false
#  ADDERROR(response.StatusCode);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + St, "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\":" + St + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + St + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + St, "write"); # use "append" mode to append data to existing file
Nasłuchiwanie
# Parse received bytes:
IF(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/relay/0")
 St := switch(TOSTRING(RECEIVEDMSG.PAYLOAD),"on",1,0);
END
Połączenie: Packet Parser → MQTT
Możliwe ulepszenia (10)
  • Reactive Power (per phase) — Instantaneous reactive power in VAR per phase — useful for power-quality diagnostics.
  • Short-term Energy Counter — Watt-minute counter since boot (volatile). Template uses lifetime 'total' instead.
  • Short-term Returned Energy — Watt-minute returned counter since boot (volatile).
  • Contactor Coil Power — Power draw through the on-board relay (small — coil only).
  • Contactor Coil Energy — Energy through the on-board relay (Wm).
  • Connection Status (LWT) — Last-Will-and-Testament topic — true on connect, false retained on disconnect. Could detect offline 3EM.
  • Device Announcement (JSON) — Periodic JSON announce containing id, mac, ip, fw_ver, new_fw, model.
  • Full Status JSON — Complete /status payload as JSON — could expose Wi-Fi RSSI, internal temperature, all 4 emeter channels.
  • 4th CT — Theft / Leakage Detection — Optional 4th split-core CT on IN+/IN- terminal for neutral leakage / energy-theft detection. NOT published over MQTT — only HTTP.
  • Total Active Power — 3EM does not publish total_power over MQTT (only HTTP). Sum the three phase Ed values in a TapHome virtual device.

Źródła

Znalazłeś problem z tym szablonem urządzenia?

Napisz nam, co nie działa, czego brakuje lub jak powinien zachowywać się szablon. Twoja opinia pomaga nam utrzymać katalog dokładnym.

Zweryfikowane przez TapHome

Chcesz tego użyć w swoim TapHome Core?

Otwórz ten szablon w portalu klienta, aby zastosować go w swoim domu, lub zaproponuj modyfikację i wyślij ją z powrotem do katalogu.

Otwórz w portalu