diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index d44030569..00cda53b4 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -184,6 +184,7 @@
#define D_JSON_SOLAR_POWER "SolarPower"
#define D_JSON_USAGE "Usage"
#define D_JSON_EXPORT "Export"
+#define D_JSON_TOTAL_ACTIVE "TotalActive"
#define D_RSLT_ENERGY "ENERGY"
#define D_RSLT_HASS_STATE "HASS_STATE"
diff --git a/tasmota/language/bg-BG.h b/tasmota/language/bg-BG.h
index 1189620b8..270300bf7 100644
--- a/tasmota/language/bg-BG.h
+++ b/tasmota/language/bg-BG.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Фазов ъгъл"
#define D_IMPORT_ACTIVE "Входна активна мощност"
#define D_EXPORT_ACTIVE "Изходна активна мощност"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Общо реактивна мощност"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "°"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "Напрежение на PV1"
diff --git a/tasmota/language/cs-CZ.h b/tasmota/language/cs-CZ.h
index aeff6b45a..8c47e47ab 100644
--- a/tasmota/language/cs-CZ.h
+++ b/tasmota/language/cs-CZ.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Phase Angle"
#define D_IMPORT_ACTIVE "Import Active"
#define D_EXPORT_ACTIVE "Export Active"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Total Reactive"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h
index ff6cfc2e4..84925842f 100644
--- a/tasmota/language/de-DE.h
+++ b/tasmota/language/de-DE.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Phasenwinkel"
#define D_IMPORT_ACTIVE "Importiere Wirk"
#define D_EXPORT_ACTIVE "Exportiere Wirk"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Total Blind"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Grad"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Spannung"
diff --git a/tasmota/language/el-GR.h b/tasmota/language/el-GR.h
index e82e3dc53..a73651d93 100644
--- a/tasmota/language/el-GR.h
+++ b/tasmota/language/el-GR.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Phase Angle"
#define D_IMPORT_ACTIVE "Import Active"
#define D_EXPORT_ACTIVE "Export Active"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Total Reactive"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/en-GB.h b/tasmota/language/en-GB.h
index df4fb86da..b9f03bacc 100644
--- a/tasmota/language/en-GB.h
+++ b/tasmota/language/en-GB.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Phase Angle"
#define D_IMPORT_ACTIVE "Import Active"
#define D_EXPORT_ACTIVE "Export Active"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Total Reactive"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/es-ES.h b/tasmota/language/es-ES.h
index 89e8bb849..a2c46c763 100644
--- a/tasmota/language/es-ES.h
+++ b/tasmota/language/es-ES.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Ángulo de Fase"
#define D_IMPORT_ACTIVE "P. Activa Entrante"
#define D_EXPORT_ACTIVE "P. Activa Saliente"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "P. Reactiva Total"
#define D_UNIT_KWARH "kVArH"
#define D_UNIT_ANGLE "Grados"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltaje"
diff --git a/tasmota/language/fr-FR.h b/tasmota/language/fr-FR.h
index 847e831ef..455bec483 100644
--- a/tasmota/language/fr-FR.h
+++ b/tasmota/language/fr-FR.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_RX "GPS RX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Angle de phase"
#define D_IMPORT_ACTIVE "Énergie act conso"
#define D_EXPORT_ACTIVE "Énergie act fournie"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Énergie réa totale"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "°"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "Tension PV1"
diff --git a/tasmota/language/he-HE.h b/tasmota/language/he-HE.h
index abf6a640b..009191f54 100644
--- a/tasmota/language/he-HE.h
+++ b/tasmota/language/he-HE.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Phase Angle"
#define D_IMPORT_ACTIVE "Import Active"
#define D_EXPORT_ACTIVE "Export Active"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Total Reactive"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/hu-HU.h b/tasmota/language/hu-HU.h
index 8c3b63402..65de942cb 100644
--- a/tasmota/language/hu-HU.h
+++ b/tasmota/language/hu-HU.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Fázisszög"
#define D_IMPORT_ACTIVE "Bejövő aktív"
#define D_EXPORT_ACTIVE "Kimenő aktív"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Összes reaktív"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "fok"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/it-IT.h b/tasmota/language/it-IT.h
index 54c0a03d8..a8ab6f1c6 100644
--- a/tasmota/language/it-IT.h
+++ b/tasmota/language/it-IT.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Angolo Fase"
#define D_IMPORT_ACTIVE "Potenza Attiva Importata"
#define D_EXPORT_ACTIVE "Potenza Attiva Esportata"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Potenza Reattiva Totale"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "°"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltaggio"
diff --git a/tasmota/language/ko-KO.h b/tasmota/language/ko-KO.h
index cc0b0443a..9607cd9d5 100644
--- a/tasmota/language/ko-KO.h
+++ b/tasmota/language/ko-KO.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Phase Angle"
#define D_IMPORT_ACTIVE "Import Active"
#define D_EXPORT_ACTIVE "Export Active"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Total Reactive"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/nl-NL.h b/tasmota/language/nl-NL.h
index 7362b3b76..6602a7129 100644
--- a/tasmota/language/nl-NL.h
+++ b/tasmota/language/nl-NL.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Fase hoek"
#define D_IMPORT_ACTIVE "Import werkelijk"
#define D_EXPORT_ACTIVE "Export werkelijk"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Totaal blind"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 spanning"
diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h
index 403ac0908..06bf65d06 100644
--- a/tasmota/language/pl-PL.h
+++ b/tasmota/language/pl-PL.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Przesunięcie faz"
#define D_IMPORT_ACTIVE "Czynna pobrana"
#define D_EXPORT_ACTIVE "Czynna oddana"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Bierna całkowita"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Całkowita czynna"
//SOLAXX1
#define D_PV1_VOLTAGE "Napięcie PV1"
diff --git a/tasmota/language/pt-BR.h b/tasmota/language/pt-BR.h
index 2d60d1352..a896196b1 100644
--- a/tasmota/language/pt-BR.h
+++ b/tasmota/language/pt-BR.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "W/h"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Ângulo de Fase"
#define D_IMPORT_ACTIVE "Importar Ativo"
#define D_EXPORT_ACTIVE "Exportar Ativo"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Reativo total"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltagem"
diff --git a/tasmota/language/pt-PT.h b/tasmota/language/pt-PT.h
index b171eb997..551f4767e 100644
--- a/tasmota/language/pt-PT.h
+++ b/tasmota/language/pt-PT.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Ângulo de fase"
#define D_IMPORT_ACTIVE "Ativo importado"
#define D_EXPORT_ACTIVE "Ativo exportado"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Reactivo total"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "Voltagem PV1"
diff --git a/tasmota/language/ru-RU.h b/tasmota/language/ru-RU.h
index ccbe91c36..b4708ac10 100644
--- a/tasmota/language/ru-RU.h
+++ b/tasmota/language/ru-RU.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "А"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "ВтЧ"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Угол фазы"
#define D_IMPORT_ACTIVE "Импорт активной мощности"
#define D_EXPORT_ACTIVE "Экспорт активной мощности"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Итого реактивная мощность"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Град"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/sk-SK.h b/tasmota/language/sk-SK.h
index 860082464..5427059bc 100644
--- a/tasmota/language/sk-SK.h
+++ b/tasmota/language/sk-SK.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Phase Angle"
#define D_IMPORT_ACTIVE "Import Active"
#define D_EXPORT_ACTIVE "Export Active"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Total Reactive"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/sv-SE.h b/tasmota/language/sv-SE.h
index d05bfd179..dea7e0210 100644
--- a/tasmota/language/sv-SE.h
+++ b/tasmota/language/sv-SE.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Fasvinkel"
#define D_IMPORT_ACTIVE "Import aktiv"
#define D_EXPORT_ACTIVE "Export aktiv"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Total reaktiv"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total aktiv"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/tr-TR.h b/tasmota/language/tr-TR.h
index 88e8bfe54..8fc13e0df 100644
--- a/tasmota/language/tr-TR.h
+++ b/tasmota/language/tr-TR.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "A"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Wh"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Phase Angle"
#define D_IMPORT_ACTIVE "Import Active"
#define D_EXPORT_ACTIVE "Export Active"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Total Reactive"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/uk-UA.h b/tasmota/language/uk-UA.h
index f88ef9cb8..9365f68e7 100644
--- a/tasmota/language/uk-UA.h
+++ b/tasmota/language/uk-UA.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "А"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "Вт/г"
#define D_UNIT_WATT_METER_QUADRAT "Вт/м²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Кут фази"
#define D_IMPORT_ACTIVE "Активна вхід"
#define D_EXPORT_ACTIVE "Активна вихід"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Всього реактивна"
#define D_UNIT_KWARH "кВАр/г"
#define D_UNIT_ANGLE "Град"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Напруга"
diff --git a/tasmota/language/zh-CN.h b/tasmota/language/zh-CN.h
index f14dc7ec9..019b679f4 100644
--- a/tasmota/language/zh-CN.h
+++ b/tasmota/language/zh-CN.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "安"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "瓦时"
#define D_UNIT_WATT_METER_QUADRAT "瓦/平米"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "相位角"
#define D_IMPORT_ACTIVE "有功输入"
#define D_EXPORT_ACTIVE "有功输出"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "总无功功率"
#define D_UNIT_KWARH "千乏时"
#define D_UNIT_ANGLE "度"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/language/zh-TW.h b/tasmota/language/zh-TW.h
index afb92d25c..5d7c00069 100644
--- a/tasmota/language/zh-TW.h
+++ b/tasmota/language/zh-TW.h
@@ -637,6 +637,8 @@
#define D_SENSOR_GPS_TX "GPS TX"
#define D_SENSOR_HM10_RX "HM10 RX"
#define D_SENSOR_HM10_TX "HM10 TX"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
// Units
#define D_UNIT_AMPERE "安"
@@ -672,7 +674,7 @@
#define D_UNIT_WATTHOUR "瓦時"
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-//SDM220
+//SDM220, SDM120, LE01MR
#define D_PHASE_ANGLE "Phase Angle"
#define D_IMPORT_ACTIVE "Import Active"
#define D_EXPORT_ACTIVE "Export Active"
@@ -681,6 +683,7 @@
#define D_TOTAL_REACTIVE "Total Reactive"
#define D_UNIT_KWARH "kVArh"
#define D_UNIT_ANGLE "Deg"
+#define D_TOTAL_ACTIVE "Total Active"
//SOLAXX1
#define D_PV1_VOLTAGE "PV1 Voltage"
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 4287daf5a..2ab81c4ee 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -563,7 +563,9 @@
//#define USE_SOLAX_X1 // Add support for Solax X1 series Modbus log info (+3k1 code)
#define SOLAXX1_SPEED 9600 // Solax X1 Modbus RS485 serial speed (default: 9600 baud)
#define SOLAXX1_PV2 // Solax X1 using second PV
-
+//#define USE_LE01MR // Add support for F&F LE-01MR modbus energy meter
+ #define LE01MR_SPEED 9600 // LE-01MR modbus baudrate (9600 default) (+2k code, +36 RAM)
+ #define LE01MR_ADDR 1 // LE-01MR modbus address (0x01 default)
// -- Low level interface devices -----------------
#define USE_DHT // Add support for DHT11, AM2301 (DHT21, DHT22, AM2302, AM2321) and SI7021 Temperature and Humidity sensor (1k6 code)
diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino
index 376a5a8b2..e69615773 100644
--- a/tasmota/support_features.ino
+++ b/tasmota/support_features.ino
@@ -510,8 +510,9 @@ void GetFeatures(void)
#ifdef USE_HM10
feature5 |= 0x04000000; // xsns_62_MI_HM10.ino
#endif
-
-// feature5 |= 0x08000000;
+#ifdef USE_LE01MR
+ feature5 |= 0x08000000; // xnrg_13_fif_le01mr.ino
+#endif
// feature5 |= 0x10000000;
// feature5 |= 0x20000000;
diff --git a/tasmota/tasmota_post.h b/tasmota/tasmota_post.h
index ae0362247..42ee97254 100644
--- a/tasmota/tasmota_post.h
+++ b/tasmota/tasmota_post.h
@@ -197,6 +197,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
#define USE_DDS2382 // Add support for Hiking DDS2382 Modbus energy monitor (+0k6 code)
#define USE_DDSU666 // Add support for Chint DDSU666 Modbus energy monitor (+0k6 code)
//#define USE_SOLAX_X1 // Add support for Solax X1 series Modbus log info (+3k1 code)
+//#define USE_LE01MR // Add support for F&F LE-01MR modbus energy meter (+2k code)
#define USE_DHT // Add support for DHT11, AM2301 (DHT21, DHT22, AM2302, AM2321) and SI7021 Temperature and Humidity sensor
#define USE_MAX31855 // Add support for MAX31855 K-Type thermocouple sensor using softSPI
@@ -288,6 +289,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
#undef USE_DDS2382 // Disable support for Hiking DDS2382 Modbus energy monitor (+0k6 code)
#undef USE_DDSU666 // Disable support for Chint DDSU666 Modbus energy monitor (+0k6 code)
#undef USE_SOLAX_X1 // Disable support for Solax X1 series Modbus log info (+3k1 code)
+ #undef USE_LE01MR // Disable support for F&F LE-01MR Modbus energy meter (+2k code)
#define USE_I2C // I2C using library wire (+10k code, 0k2 mem, 124 iram)
#define USE_DISPLAY // Add I2C Display Support (+2k code)
@@ -371,6 +373,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
#undef USE_DDS2382 // Disable support for Hiking DDS2382 Modbus energy monitor (+0k6 code)
#undef USE_DDSU666 // Disable support for Chint DDSU666 Modbus energy monitor (+0k6 code)
#undef USE_SOLAX_X1 // Disable support for Solax X1 series Modbus log info (+3k1 code)
+ #undef USE_LE01MR // Disable support for F&F LE-01MR Modbus energy meter (+2k code)
//#undef USE_DS18x20 // Disable support for DS18x20 sensors with id sort, single scan and read retry (+1k3 code)
@@ -496,6 +499,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
#undef USE_DDS2382 // Disable support for Hiking DDS2382 Modbus energy monitor (+0k6 code)
#undef USE_DDSU666 // Disable support for Chint DDSU666 Modbus energy monitor (+0k6 code)
#undef USE_SOLAX_X1 // Disable support for Solax X1 series Modbus log info (+3k1 code)
+#undef USE_LE01MR // Disable support for F&F LE-01MR Modbus energy meter (+2k code)
#undef USE_DHT // Disable support for DHT11, AM2301 (DHT21, DHT22, AM2302, AM2321) and SI7021 Temperature and Humidity sensor
#undef USE_MAX31855 // Disable MAX31855 K-Type thermocouple sensor using softSPI
@@ -610,6 +614,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
#undef USE_DDS2382 // Disable support for Hiking DDS2382 Modbus energy monitor (+0k6 code)
#undef USE_DDSU666 // Disable support for Chint DDSU666 Modbus energy monitor (+0k6 code)
#undef USE_SOLAX_X1 // Disable support for Solax X1 series Modbus log info (+3k1 code)
+#undef USE_LE01MR // Disable support for F&F LE-01MR Modbus energy meter (+2k code)
#undef USE_DHT // Disable support for DHT11, AM2301 (DHT21, DHT22, AM2302, AM2321) and SI7021 Temperature and Humidity sensor
#undef USE_MAX31855 // Disable MAX31855 K-Type thermocouple sensor using softSPI
diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h
index 4b30c2b55..b099eb49b 100644
--- a/tasmota/tasmota_template.h
+++ b/tasmota/tasmota_template.h
@@ -220,6 +220,8 @@ enum UserSelectablePins {
GPIO_DHT11_OUT, // Pseudo Single wire DHT11, DHT21, DHT22, AM2301, AM2302, AM2321
GPIO_HM10_RX, // HM10-BLE-Mijia-bridge serial interface
GPIO_HM10_TX, // HM10-BLE-Mijia-bridge serial interface
+ GPIO_LE01MR_RX, // F&F LE-01MR energy meter
+ GPIO_LE01MR_TX, // F&F LE-01MR energy meter
GPIO_SENSOR_END };
// Programmer selectable GPIO functionality
@@ -302,7 +304,8 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_HPMA_RX "|" D_SENSOR_HPMA_TX "|"
D_SENSOR_GPS_RX "|" D_SENSOR_GPS_TX "|"
D_SENSOR_DS18X20 "o|" D_SENSOR_DHT11 "o|"
- D_SENSOR_HM10_RX "|" D_SENSOR_HM10_TX
+ D_SENSOR_HM10_RX "|" D_SENSOR_HM10_TX "|"
+ D_SENSOR_LE01MR_RX "|" D_SENSOR_LE01MR_TX
;
const char kSensorNamesFixed[] PROGMEM =
@@ -684,6 +687,10 @@ const uint8_t kGpioNiceList[] PROGMEM = {
GPIO_SOLAXX1_TX, // Solax Inverter tx pin
GPIO_SOLAXX1_RX, // Solax Inverter rx pin
#endif // USE_SOLAX_X1
+#ifdef USE_LE01MR
+ GPIO_LE01MR_RX, // F7F LE-01MR energy meter rx pin
+ GPIO_LE01MR_TX, // F7F LE-01MR energy meter tx pin
+#endif // IFDEF:USE_LE01MR
#endif // USE_ENERGY_SENSOR
// Serial
diff --git a/tasmota/xnrg_13_fif_le01mr.ino b/tasmota/xnrg_13_fif_le01mr.ino
new file mode 100644
index 000000000..e99041c9c
--- /dev/null
+++ b/tasmota/xnrg_13_fif_le01mr.ino
@@ -0,0 +1,298 @@
+/*
+ xnrg_13_fif_le01mr.ino - F&F LE-01MR energy meter with Modbus interface - support for Tasmota
+
+ Copyright (C) 2020 Przemyslaw Wistuba
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+#ifdef USE_ENERGY_SENSOR
+#ifdef USE_LE01MR
+/*********************************************************************************************\
+ * F&F LE-01MR - This is a single phase energy meter with rs485 modbus interface
+ * (and bidirectional energy counting - enabled by RS485).
+ * It measure: Active energy imported AE+ [kWh] , Reactive energy imported RE+ [kvarh],
+ * Voltage V [V], Current I [A], Frequency F [Hz], power factor (aka "cos-phi"),
+ * Active power P [kW], Reactive power Q [kVAr], Apparent power S [kVA],
+ * *Active energy exported AE- [kWh] (when meter is switched to bi-directional counting then
+ * reactive energy imported register contains value of Active energy exported).
+ *
+ * Meter descriptions at manufacturer page (english version have some description errors):
+ * EN: https://www.fif.com.pl/en/usage-electric-power-meters/517-electricity-consumption-meter-le-01mr.html
+ * PL: https://www.fif.com.pl/pl/liczniki-zuzycia-energii-elektrycznej/517-licznik-zuzycia-energii-le-01mr.html
+ *
+ * Note about communication settings: The meter must be reconfigured to use baudrate 2400 (or 9600) *without*
+ * parity bit - by default the meter is configured to 9600 8E1
+ * (Frame format: "EVEN 1") . To make those changes, use LE-Config
+ * software (can be found in download tab in product page - link above)
+ * and USB-RS485 dongle (those cheap ~2$ from ali works fine)
+ *
+ * Register descriptions (not all, only those that are being read):
+ *
+ * /----------------------------------- Register address
+ * | /-------------------------- Registers count
+ * | | /---------------------- Datatype and size
+ * | | | /----------------- Resolution (or multiplier)
+ * | | | | /---------- Unit
+ * | | | | | /---- Description
+ * 0x0130 1 U16 0.01 Hz Frequency
+ * 0x0131 1 U16 0.01 V Voltage
+ * 0x0139 2 U32 0.001 A Current
+ * 0x0140 2 U32 0.001 kW Active power
+ * 0x0148 2 U32 0.001 kvar Reactive power
+ * 0x0150 2 U32 0.001 kVA Apparent power
+ * 0x0158 1 S16 0.001 - Power factor
+ * 0xA000 2 U32 0.01 kWh Active energy imported
+ * 0xA01E 2 U32 0.01 kvarh Reactive energy imported
+ *
+ * Datatype: S = signed int, U = unsigend int,
+ * U32 - the first (lower) register contains high word,
+ * second register contains lower word of 32bit dword:
+ * value_32bit = (register+0)<<16 | (register+1);
+ * /or/ val32bit = (reg+0)*65536 + (reg+1);
+ *
+ * Note about MQTT/JSON: In fields "ENERGY.TotalActive" and "ENERGY.TotalReactive" there are
+ * counters values directly from the meter (without Tasmota calculation,
+ * energy used calculated by Tasmota is in Total/Today fields ).
+ * Filed "ENERGY.Period" is always zero.
+\*********************************************************************************************/
+
+#define XNRG_13 13
+
+// can be user defined in my_user_config.h
+#ifndef LE01MR_SPEED
+ #define LE01MR_SPEED 2400 // default LE01MR Modbus speed
+#endif
+// can be user defined in my_user_config.h
+#ifndef LE01MR_ADDR
+ #define LE01MR_ADDR 1 // default LE01MR Modbus address
+#endif
+
+#include
+TasmotaModbus *FifLEModbus;
+
+const uint8_t le01mr_table_sz = 9;
+
+const uint16_t le01mr_register_addresses[] {
+ // IDX (reg count/datatype) [unit]
+ 0x0130, // 00 . LE01MR_FREQUENCY (1/U16) [Hz]
+ 0x0131, // 01 . LE01MR_VOLTAGE (1/U16) [V]
+ 0x0158, // 02 . LE01MR_POWER_FACTOR (1/S16)
+ 0x0139, // 03 . LE01MR_CURRENT (2/U32) [A]
+ 0x0140, // 04 . LE01MR_ACTIVE_POWER (2/U32) [kW]
+ 0x0148, // 05 . LE01MR_REACTIVE_POWER (2/U32) [kvar]
+ 0x0150, // 06 . LE01MR_APPARENT_POWER (2/U32) [kVA]
+ 0xA000, // 07 . LE01MR_TOTAL_ACTIVE_ENERGY (2/U32) [kWh]
+ 0xA01E // 08 . LE01MR_TOTAL_REACTIVE_ENERGY (2/U32) [kvarh]
+};
+
+struct LE01MR {
+ float total_active = 0;
+ float total_reactive = 0;
+ uint8_t read_state = 0;
+ uint8_t send_retry = 0;
+ uint8_t start_address_count = le01mr_table_sz;
+} Le01mr;
+
+/*********************************************************************************************/
+
+void FifLEEvery250ms(void)
+{
+ bool data_ready = FifLEModbus->ReceiveReady();
+
+ if (data_ready) {
+ uint8_t buffer[14]; // At least 9
+ uint8_t reg_count = 2;
+ if (Le01mr.read_state < 3) {
+ reg_count=1;
+ }
+
+ uint32_t error = FifLEModbus->ReceiveBuffer(buffer, reg_count);
+
+ AddLogBuffer(LOG_LEVEL_DEBUG_MORE, buffer, FifLEModbus->ReceiveCount());
+
+ if (error) {
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR("FiF-LE: LE01MR Modbus error %d"), error);
+ } else {
+ Energy.data_valid[0] = 0;
+
+ // SA=Slave Address, FC=Function Code, BC=Byte Count, B3..B0=Data byte, Ch Cl = crc16 checksum
+ // U32 registers:
+ // 00 01 02 03 04 05 06 07 08
+ // SA FC BC B3 B2 B1 B0 Cl Ch
+ // 01 03 04 00 00 00 72 7A 16 = REG[B3..B2=0x0139,B1..B0=0x013A] 114 = 0.114 A
+ // 01 03 04 00 00 00 B0 FB 87 = REG[B3..B2=0xA01E,B1..B0=0xA01F] 176 = 1.76 kvarh
+ // U16/S16 registers:
+ // 00 01 02 03 04 05 06
+ // SA FC BC B1 B0 Cl Ch
+ // 01 03 02 5B 02 02 B5 = REG[B1..B0=0x0131] 23298 = 232.98 V
+ // 01 03 02 03 E8 B8 FA = REG[B1..B0=0x0158] 1000 = 1.000 (power factor)
+ // there are 3 data types used:
+ // U16 - uint16_t
+ // U32 - uint32_t
+ // S16 - int16_t
+ // everything drop into uint32 value, but depending on register ther will be 2 or 4 bytes
+ uint32_t value_buff = 0;
+ // for register table items 0..2 use 2 bytes (U16)
+ if (Le01mr.read_state >= 0 && Le01mr.read_state < 3) { //
+ value_buff = ((uint32_t)buffer[3])<<8 | buffer[4];
+ } else {
+ value_buff = ((uint32_t)buffer[3])<<24 | ((uint32_t)buffer[4])<<16 | ((uint32_t)buffer[5])<<8 | buffer[6];
+ }
+
+ switch(Le01mr.read_state) {
+ case 0:
+ Energy.frequency[0] = value_buff * 0.01f; // 5000 => 50.00
+ break;
+
+ case 1:
+ Energy.voltage[0] = value_buff * 0.01f; // 23298 => 232.98 V
+ break;
+
+ case 2:
+ Energy.power_factor[0] = ((int16_t)value_buff) * 0.001f; // 1000 => 1.000 //note: I never saw this negative...
+ break;
+
+ case 3:
+ Energy.current[0] = value_buff * 0.001f; // 114 => 0.114 A
+ break;
+
+ case 4:
+ Energy.active_power[0] = value_buff * 1.0f; // P [W]
+ break;
+
+ case 5:
+ Energy.reactive_power[0] = value_buff * 1.0f; // Q [var]
+ break;
+
+ case 6:
+ Energy.apparent_power[0] = value_buff * 1.0f; // S [VA]
+ break;
+
+ case 7:
+ Le01mr.total_active = value_buff * 0.01f; // [kWh]
+ break;
+
+ case 8:
+ Le01mr.total_reactive = value_buff * 0.01f; // [kvarh] 176 => 1.76
+ break;
+ }
+
+ Le01mr.read_state++;
+ if (Le01mr.read_state == Le01mr.start_address_count) {
+ Le01mr.read_state = 0;
+
+ EnergyUpdateTotal(Le01mr.total_active, true);
+ }
+ }
+ } // end data ready
+
+ if (0 == Le01mr.send_retry || data_ready) {
+ uint8_t reg_count = 2;
+
+ Le01mr.send_retry = 5;
+ // some registers are 1reg in size
+ if (Le01mr.read_state < 3) reg_count=1;
+ // send request
+ FifLEModbus->Send(LE01MR_ADDR, 0x03, le01mr_register_addresses[Le01mr.read_state], reg_count);
+ } else {
+ Le01mr.send_retry--;
+ }
+}
+
+void FifLESnsInit(void)
+{
+ FifLEModbus = new TasmotaModbus(pin[GPIO_LE01MR_RX], pin[GPIO_LE01MR_TX]);
+ uint8_t result = FifLEModbus->Begin(LE01MR_SPEED);
+ if (result) {
+ if (2 == result) { ClaimSerial(); }
+ } else {
+ energy_flg = ENERGY_NONE;
+ }
+}
+
+void FifLEDrvInit(void)
+{
+ if ((pin[GPIO_LE01MR_RX] < 99) && (pin[GPIO_LE01MR_TX] < 99)) {
+ energy_flg = XNRG_13;
+ }
+}
+
+void FifLEReset(void)
+{
+ Le01mr.total_active = 0;
+ Le01mr.total_reactive = 0;
+}
+
+#ifdef USE_WEBSERVER
+const char HTTP_ENERGY_LE01MR[] PROGMEM =
+ "{s}" D_TOTAL_ACTIVE "{m}%s " D_UNIT_KILOWATTHOUR "{e}"
+ "{s}" D_TOTAL_REACTIVE "{m}%s " D_UNIT_KWARH "{e}"
+ ;
+#endif // USE_WEBSERVER
+
+void FifLEShow(bool json)
+{
+ char total_reactive_chr[FLOATSZ];
+ dtostrfd(Le01mr.total_reactive, Settings.flag2.energy_resolution, total_reactive_chr);
+ char total_active_chr[FLOATSZ];
+ dtostrfd(Le01mr.total_active, Settings.flag2.energy_resolution, total_active_chr);
+
+
+ if (json) {
+ ResponseAppend_P(PSTR(",\"" D_JSON_TOTAL_ACTIVE "\":%s,\"" D_JSON_TOTAL_REACTIVE "\":%s"),
+ total_active_chr, total_reactive_chr);
+#ifdef USE_WEBSERVER
+ } else {
+ WSContentSend_PD(HTTP_ENERGY_LE01MR, total_active_chr, total_reactive_chr);
+#endif // USE_WEBSERVER
+ }
+}
+
+/*********************************************************************************************\
+ * Interface
+\*********************************************************************************************/
+
+bool Xnrg13(uint8_t function)
+{
+ bool result = false;
+
+ switch (function) {
+ case FUNC_EVERY_250_MSECOND:
+ if (uptime > 4) {
+ FifLEEvery250ms();
+ }
+ break;
+ case FUNC_JSON_APPEND:
+ FifLEShow(1);
+ break;
+#ifdef USE_WEBSERVER
+ case FUNC_WEB_SENSOR:
+ FifLEShow(0);
+ break;
+#endif // USE_WEBSERVER
+ case FUNC_ENERGY_RESET:
+ FifLEReset();
+ break;
+ case FUNC_INIT:
+ FifLESnsInit();
+ break;
+ case FUNC_PRE_INIT:
+ FifLEDrvInit();
+ break;
+ }
+ return result;
+}
+
+#endif // USE_LE01MR
+#endif // USE_ENERGY_SENSOR