diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index accb88938..841d6e557 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -211,6 +211,8 @@
#define D_JSON_IMPORT "Import"
#define D_JSON_EXPORT "Export"
#define D_JSON_TOTAL_ACTIVE "TotalActive"
+#define D_JSON_SIGNALSTRENGTH "Signal Strength"
+#define D_JSON_CHIPTEMPERATURE "Chip Temperature"
#define D_RSLT_ENERGY "ENERGY"
#define D_RSLT_HASS_STATE "HASS_STATE"
diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h
index b61c82c6e..2954219f1 100644
--- a/tasmota/language/af_AF.h
+++ b/tasmota/language/af_AF.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Stroom L1+L2+L3"
#define D_SpL1L2L3 "Spanning L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Geen"
#define D_SENSOR_USER "Gebruiker"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h
index 2061eb460..45fd69563 100644
--- a/tasmota/language/bg_BG.h
+++ b/tasmota/language/bg_BG.h
@@ -584,6 +584,10 @@
#define D_StL1L2L3 "Ток L1+L2+L3"
#define D_SpL1L2L3 "Напрежение L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Няма"
#define D_SENSOR_USER "Потребит."
@@ -800,6 +804,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h
index be329c3e2..837cc91ef 100644
--- a/tasmota/language/cs_CZ.h
+++ b/tasmota/language/cs_CZ.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Není"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h
index 9eaff2441..ef753b639 100644
--- a/tasmota/language/de_DE.h
+++ b/tasmota/language/de_DE.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Ströme L1+L2+L3"
#define D_SpL1L2L3 "Spannung L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signalstärke"
+#define D_CHIPTEMPERATURE "Chip Temperatur"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "None"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h
index ca14da7c1..6bfb44891 100644
--- a/tasmota/language/el_GR.h
+++ b/tasmota/language/el_GR.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Κανένα"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h
index 12a476a32..5d4641c22 100644
--- a/tasmota/language/en_GB.h
+++ b/tasmota/language/en_GB.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "None"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h
index 93967a818..c868b06e4 100644
--- a/tasmota/language/es_ES.h
+++ b/tasmota/language/es_ES.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Corriente L1+L2+L3"
#define D_SpL1L2L3 "Voltaje L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Ninguno"
#define D_SENSOR_USER "Por Usuario"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Cambiando dirección a"
#define D_OUT_OF_RANGE "Fuera de Rango"
#define D_SENSOR_DETECTED "detectado"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h
index 980b380f7..584c22724 100644
--- a/tasmota/language/fr_FR.h
+++ b/tasmota/language/fr_FR.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Courant Ph1+Ph2+Ph3"
#define D_SpL1L2L3 "Tension (Ph1+Ph2+Ph3)/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Aucun"
#define D_SENSOR_USER "Utilisateur"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h
index 8b166dd94..d607220ce 100644
--- a/tasmota/language/fy_NL.h
+++ b/tasmota/language/fy_NL.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Streame L1+L2+L3"
#define D_SpL1L2L3 "Foltaazje L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Gjin"
#define D_SENSOR_USER "Brûker"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h
index 8bf5e5e97..91f49739c 100644
--- a/tasmota/language/he_HE.h
+++ b/tasmota/language/he_HE.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "None"
#define D_SENSOR_USER "משתמש"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h
index 239239348..fd2b3e075 100644
--- a/tasmota/language/hu_HU.h
+++ b/tasmota/language/hu_HU.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Áramerősség L1+L2+L3"
#define D_SpL1L2L3 "Feszültség L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Nincs"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h
index b8a7d828b..5e43527a4 100644
--- a/tasmota/language/it_IT.h
+++ b/tasmota/language/it_IT.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Corrente L1+L2+L3"
#define D_SpL1L2L3 "Tensione L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Nessuno"
#define D_SENSOR_USER "Utente"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Imposta indirizzo a"
#define D_OUT_OF_RANGE "Fuori limite"
#define D_SENSOR_DETECTED "rilevato"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h
index 964ab46a7..061a93bca 100644
--- a/tasmota/language/ko_KO.h
+++ b/tasmota/language/ko_KO.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "없음"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h
index bc855e4a8..2be3f71b2 100644
--- a/tasmota/language/nl_NL.h
+++ b/tasmota/language/nl_NL.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Stroom L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Geen"
#define D_SENSOR_USER "Gebruiker"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h
index 78710996f..1648bf058 100644
--- a/tasmota/language/pl_PL.h
+++ b/tasmota/language/pl_PL.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Prąd suma"
#define D_SpL1L2L3 "Prąd średni"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Brak"
#define D_SENSOR_USER "Użytkownik"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h
index a2929b529..9eff10649 100644
--- a/tasmota/language/pt_BR.h
+++ b/tasmota/language/pt_BR.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Nenhum"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Mudança de endereço para"
#define D_OUT_OF_RANGE "Fora de Alcance"
#define D_SENSOR_DETECTED "detectou"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h
index c5b524875..1d3a0bdf3 100644
--- a/tasmota/language/pt_PT.h
+++ b/tasmota/language/pt_PT.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Corrente F1+F2+F3"
#define D_SpL1L2L3 "Tensão F1+F2+F3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Nenhum"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Mudança de endereço para"
#define D_OUT_OF_RANGE "Fora de Alcance"
#define D_SENSOR_DETECTED "detectou"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h
index c8182eb75..8098f9fdb 100644
--- a/tasmota/language/ro_RO.h
+++ b/tasmota/language/ro_RO.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Fără"
#define D_SENSOR_USER "Utilizator"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h
index 6d8d0b932..3c56f13a9 100644
--- a/tasmota/language/ru_RU.h
+++ b/tasmota/language/ru_RU.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "-нет-"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "А"
diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h
index b0fbc5c3f..8705a7e9c 100644
--- a/tasmota/language/sk_SK.h
+++ b/tasmota/language/sk_SK.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Žiaden"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h
index 5ccbc77fe..13079ae46 100644
--- a/tasmota/language/sv_SE.h
+++ b/tasmota/language/sv_SE.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Ingen"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h
index e6429fed1..17b521ba5 100644
--- a/tasmota/language/tr_TR.h
+++ b/tasmota/language/tr_TR.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "None"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h
index 286b851dc..9a5ebf98d 100644
--- a/tasmota/language/uk_UA.h
+++ b/tasmota/language/uk_UA.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Немає"
#define D_SENSOR_USER "Користувач"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "А"
diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h
index c04e43010..b1be0f94c 100644
--- a/tasmota/language/vi_VN.h
+++ b/tasmota/language/vi_VN.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Dòng L1+L2+L3"
#define D_SpL1L2L3 "Điện áp L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "Không dùng"
#define D_SENSOR_USER "Người Dùng"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h
index a7e1847ca..1d8bba996 100644
--- a/tasmota/language/zh_CN.h
+++ b/tasmota/language/zh_CN.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "无"
#define D_SENSOR_USER "User"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "安"
diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h
index 13cc6e858..41a364d3b 100644
--- a/tasmota/language/zh_TW.h
+++ b/tasmota/language/zh_TW.h
@@ -585,6 +585,10 @@
#define D_StL1L2L3 "Current L1+L2+L3"
#define D_SpL1L2L3 "Voltage L1+L2+L3/3"
+// xsns_88_tfminiplus.ino
+#define D_SIGNALSTRENGTH "Signal Strength"
+#define D_CHIPTEMPERATURE "Chip Temperature"
+
// tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box
#define D_SENSOR_NONE "無"
#define D_SENSOR_USER "使用者"
@@ -801,6 +805,9 @@
#define D_NEW_ADDRESS "Setting address to"
#define D_OUT_OF_RANGE "Out of Range"
#define D_SENSOR_DETECTED "detected"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+
// Units
#define D_UNIT_AMPERE "安培"
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 51c3999ac..9716f92f2 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -699,6 +699,7 @@
// #define USE_PROJECTOR_CTRL_OPTOMA // Use codes for OPTOMA
//#define USE_AS608 // Add support for AS608 optical and R503 capacitive fingerprint sensor (+3k code)
// #define USE_AS608_MESSAGES // Add verbose error messages (+0k4 code)
+//#define USE_TFMINIPLUS // Add suppoer for TFmini Plus (TFmini, TFmini-S) LiDAR modules via UART interface
// -- Power monitoring sensors --------------------
#define USE_ENERGY_MARGIN_DETECTION // Add support for Energy Margin detection (+1k6 code)
diff --git a/tasmota/tasmota_configurations.h b/tasmota/tasmota_configurations.h
index c4956bdbd..7a964b191 100644
--- a/tasmota/tasmota_configurations.h
+++ b/tasmota/tasmota_configurations.h
@@ -182,6 +182,7 @@
// #define USE_PROJECTOR_CTRL_NEC // Use codes for NEC
// #define USE_PROJECTOR_CTRL_OPTOMA // Use codes for OPTOMA
//#define USE_AS608 // Add support for AS608 optical and R503 capacitive fingerprint sensor (+3k4 code)
+//#define USE_TFMINIPLUS // Add suppoer for TFmini Plus (TFmini, TFmini-S) LiDAR modules via UART interface
#define USE_ENERGY_SENSOR // Add energy sensors (-14k code)
#define USE_PZEM004T // Add support for PZEM004T Energy monitor (+2k code)
diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h
index 75cfc5572..b00c65738 100644
--- a/tasmota/tasmota_configurations_ESP32.h
+++ b/tasmota/tasmota_configurations_ESP32.h
@@ -278,6 +278,7 @@
// #define USE_PROJECTOR_CTRL_NEC // Use codes for NEC
// #define USE_PROJECTOR_CTRL_OPTOMA // Use codes for OPTOMA
//#define USE_AS608 // Add support for AS608 optical and R503 capacitive fingerprint sensor (+3k4 code)
+//#define USE_TFMINIPLUS // Add suppoer for TFmini Plus (TFmini, TFmini-S) LiDAR modules via UART interface
#define USE_ENERGY_SENSOR // Add energy sensors (-14k code)
#define USE_PZEM004T // Add support for PZEM004T Energy monitor (+2k code)
diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h
index 197596b7b..69be04616 100644
--- a/tasmota/tasmota_template.h
+++ b/tasmota/tasmota_template.h
@@ -155,6 +155,7 @@ enum UserSelectablePins {
GPIO_XPT2046_CS, // XPT2046 SPI Chip Select
GPIO_CSE7761_TX, GPIO_CSE7761_RX, // CSE7761 Serial interface (Dual R3)
GPIO_VL53L0X_XSHUT1, // VL53L0X_XSHUT (the max number of sensors is VL53L0X_MAX_SENSORS)- Used when connecting multiple VL53L0X
+ GPIO_TFMINIPLUS_TX, GPIO_TFMINIPLUS_RX, // TFmini Plus ToF sensor
GPIO_SENSOR_END };
enum ProgramSelectablePins {
@@ -330,6 +331,7 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_XPT2046_CS "|"
D_SENSOR_CSE7761_TX "|" D_SENSOR_CSE7761_RX "|"
D_SENSOR_VL53L0X_XSHUT "|"
+ D_SENSOR_TFMINIPLUS_TX "|" D_SENSOR_TFMINIPLUS_RX "|"
;
const char kSensorNamesFixed[] PROGMEM =
@@ -561,6 +563,10 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_HX711_SCK), // HX711 Load Cell clock
AGPIO(GPIO_HX711_DAT), // HX711 Load Cell data
#endif
+#ifdef USE_TFMINIPLUS
+ AGPIO(GPIO_TFMINIPLUS_TX), // TFmini Plus TX pin
+ AGPIO(GPIO_TFMINIPLUS_RX), // TFmini Plus RX pin
+#endif
/*-------------------------------------------------------------------------------------------*\
* Energy sensors
diff --git a/tasmota/xsns_88_tfminiplus.ino b/tasmota/xsns_88_tfminiplus.ino
new file mode 100644
index 000000000..22905ae64
--- /dev/null
+++ b/tasmota/xsns_88_tfminiplus.ino
@@ -0,0 +1,251 @@
+/*
+ xsns_88_tfminiplus.ino - TFmini Plus interface for Tasmota
+
+ Created by Raphael Breiting on 12.11.2020.
+
+ Copyright (C) 2021 Raphael Breiting and Theo Arends
+
+ 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 .
+*/
+
+// Conditional compilation of driver
+#ifdef USE_TFMINIPLUS
+
+/*****************************************************************************\
+ * TFmini, TFmini Plus, TFmini Plus (Indoor Version), TFmini-S - LiDAR Module
+ * Manufacturer: Benewake (Beijing) Co. Ltd.
+ *
+ * Code for Time-Of-Flight (TOF) family single-point short-range LiDAR sensor
+ * modules with UART interface.
+ *
+ * Connection Description for GH1.25-4P (Molex51021-0400) connector:
+ * No Color Corresponding PIN Function Comment
+ * 1 RED PIN-1 +5V Power Supply
+ * 2 WHITE PIN-2 RxD/SDA Receiving/Data
+ * 3 GREEN PIN-3 TxD/SCL Transmitting/Clock
+ * 4 BLACK PIN-4 GND Ground
+ *
+ * Before connecting module to Tasmota, please prepare module with
+ * the following sequence through terminal program (e.g. Termite):
+ * 1. Connect sensor to USB-to-UART (TTL 3.3V)
+ * 2. Set terminal to 115200bps and 8N1
+ * 3. Set frame rate to 0 (zero):
+ * send -->: 5A0603000000
+ * receive <-- (OK): 5A0603000000
+ * 4. Set baud rate to 9600bps
+ * send -->: 5A0806802500000D
+ * receive <-- (OK): 5A0806802500000D
+ * 5. Set terminal to 9600bps and 8N1
+ * 6. Save settings
+ * send -->: 5A04116F
+ * receive <-- (OK): 5A05110070
+ * receive <-- (FAIL): 5A05110071
+ * 7. When point 6 returned OK, than ready to connect to Tasmota! :)
+ * When point 6 returned FAIL, start with item 1 and
+ * - check connection of RX and TX pin are not exchanged
+ * - check power supply
+ * - 5V +-0,5V
+ * - 110mA average
+ * - 140mA max peak
+ *
+ * References:
+ * - http://en.benewake.com/product
+ * - https://de.aliexpress.com/item/32852024277.html?spm=a2g0s.9042311.0.0.27424c4d5Edizk
+ * - https://de.aliexpress.com/item/4001076614996.html?spm=a2g0s.9042311.0.0.27424c4d5Edizk
+\*****************************************************************************/
+
+#include
+
+// Define driver ID
+#define XSNS_88 88
+
+// Use special no wait serial driver, should be always on
+#ifndef ESP32
+#define SPECIAL_SS
+#endif
+
+// Default baudrate
+#define BAUDRATE 9600
+
+// Serial buffer length for incoming data
+#define TFMP_MAX_DATA_LEN 9
+
+char Tfmp_buffer[TFMP_MAX_DATA_LEN + 1];
+
+struct xsns_88_tfminiplus
+{
+ bool ready = false;
+ uint16_t distance = 0;
+ uint16_t sigstrength = 0;
+ uint16_t chiptemp = 0;
+} tfminiplus_sensor;
+
+// Software and hardware serial pointers
+#ifdef ESP8266
+TasmotaSerial *TfmpSerial = nullptr;
+#endif // ESP8266
+#ifdef ESP32
+HardwareSerial *TfmpSerial = nullptr;
+#endif // ESP32
+
+void TfmpInit(void)
+{
+ if (!tfminiplus_sensor.ready)
+ {
+ if (PinUsed(GPIO_TFMINIPLUS_RX) && PinUsed(GPIO_TFMINIPLUS_TX))
+ {
+ TfmpSerial = new TasmotaSerial(Pin(GPIO_TFMINIPLUS_RX), Pin(GPIO_TFMINIPLUS_TX));
+ if (TfmpSerial->begin(BAUDRATE))
+ {
+ if (TfmpSerial->hardwareSerial())
+ {
+ ClaimSerial();
+ }
+ tfminiplus_sensor.ready = true;
+ TfmpSerial->flush();
+ }
+ }
+ }
+}
+
+void TfmpTrigger(void)
+{
+ if (TfmpSerial && tfminiplus_sensor.ready)
+ {
+ TfmpSerial->write(0x5A);
+ TfmpSerial->write(0x04);
+ TfmpSerial->write(0x04);
+ TfmpSerial->write(0x62);
+ }
+}
+
+void TfmpProcessData(void)
+{
+ uint16_t crc = 0;
+ // distance to object (default in cm)
+ tfminiplus_sensor.distance = (Tfmp_buffer[3] << 8) + Tfmp_buffer[2];
+ // signal strength (between 100 and 65535 fine, otherwise 0 due to out of range of non-reflective surface)
+ tfminiplus_sensor.sigstrength = (Tfmp_buffer[5] << 8) + Tfmp_buffer[4];
+ // chip temperature
+ tfminiplus_sensor.chiptemp = (((Tfmp_buffer[7] << 8) + Tfmp_buffer[6]) >> 3) - 256;
+ // check crc sum
+ for (int i = 0; i < TFMP_MAX_DATA_LEN - 1; ++i)
+ {
+ crc += (uint16_t)Tfmp_buffer[i];
+ }
+ if (!(char)(crc & 0xff) != Tfmp_buffer[TFMP_MAX_DATA_LEN])
+ {
+ DEBUG_SENSOR_LOG(PSTR("TFmini Plus: crc error"));
+ }
+ DEBUG_SENSOR_LOG(PSTR("TFmini Plus: Distance: %d"), tfminiplus_sensor.distance);
+ DEBUG_SENSOR_LOG(PSTR("TFmini Plus: Signal: %d"), tfminiplus_sensor.sigstrength);
+ DEBUG_SENSOR_LOG(PSTR("TFmini Plus: Chip Temp: %d"), tfminiplus_sensor.chiptemp);
+ TfmpSerial->flush();
+}
+
+void TfmpProcessSerialData (void)
+{
+ uint8_t data;
+ bool dataReady;
+ if (TfmpSerial && tfminiplus_sensor.ready)
+ {
+ while (TfmpSerial->available() > 0)
+ {
+ data = TfmpSerial->read();
+ dataReady = addData((char)data);
+ if (dataReady)
+ {
+ TfmpProcessData();
+ }
+ }
+ }
+}
+
+bool addData(char nextChar)
+{
+ // Buffer position
+ static uint8_t currentIndex = 0;
+ // Store data into buffer at position
+ Tfmp_buffer[currentIndex] = nextChar;
+ currentIndex++;
+ // Check for too many data
+ if (currentIndex >= TFMP_MAX_DATA_LEN)
+ {
+ // Terminate buffer and reset position
+ Tfmp_buffer[TFMP_MAX_DATA_LEN] = '\0';
+ currentIndex = 0;
+ return true;
+ }
+ return false;
+}
+
+#ifdef USE_WEBSERVER
+// {s} = , {m} = | , {e} = |
+const char HTTP_SNS_DISTANCE_CM[] PROGMEM = "{s} " D_DISTANCE "{m}%d" D_UNIT_CENTIMETER "{e}";
+const char HTTP_SNS_SIGNALSTRENGTH[] PROGMEM = "{s} " D_SIGNALSTRENGTH "{m}%d{e}";
+const char HTTP_SNS_CHIPTEMPERATURE[] PROGMEM = "{s} " D_CHIPTEMPERATURE "{m}%d" D_UNIT_DEGREE D_UNIT_CELSIUS "{e}";
+#endif // USE_WEBSERVER
+
+void TfmpShow(bool json)
+{
+ if (json) {
+ ResponseAppend_P(PSTR(",\"TFmini Plus\":{\"" D_JSON_DISTANCE "\":\"%d\",\"" D_JSON_SIGNALSTRENGTH "\":\"%d\",\"" D_JSON_CHIPTEMPERATURE "\":%d}"),
+ tfminiplus_sensor.distance, tfminiplus_sensor.sigstrength, tfminiplus_sensor.chiptemp);
+#ifdef USE_DOMOTICZ
+ if (0 == TasmotaGlobal.tele_period) {
+ DomoticzFloatSensor(DZ_COUNT, tfminiplus_sensor.distance);
+ }
+#endif // USE_DOMOTICZ
+#ifdef USE_WEBSERVER
+ } else {
+ WSContentSend_P("{s}TFmini Plus");
+ WSContentSend_P(HTTP_SNS_DISTANCE_CM, tfminiplus_sensor.distance);
+ WSContentSend_P(HTTP_SNS_SIGNALSTRENGTH, tfminiplus_sensor.sigstrength);
+ WSContentSend_P(HTTP_SNS_CHIPTEMPERATURE, tfminiplus_sensor.chiptemp);
+#endif // USE_WEBSERVER
+ }
+}
+
+/*********************************************************************************************\
+ * Interface
+\*********************************************************************************************/
+
+bool Xsns88(byte callback_id)
+{
+ bool result = false;
+ switch (callback_id) {
+ case FUNC_INIT:
+ TfmpInit();
+ break;
+ case FUNC_EVERY_SECOND:
+ TfmpTrigger();
+ TfmpProcessSerialData();
+ result = true;
+ break;
+ case FUNC_JSON_APPEND:
+ TfmpShow(1);
+ break;
+#ifdef USE_WEBSERVER
+ case FUNC_WEB_SENSOR:
+ TfmpShow(0);
+ break;
+#endif // USE_WEBSERVER
+ case FUNC_SAVE_BEFORE_RESTART:
+ break;
+ case FUNC_COMMAND:
+ break;
+ }
+ return result;
+}
+#endif // USE_TFMINIPLUS
\ No newline at end of file
diff --git a/tools/decode-status.py b/tools/decode-status.py
index 4e12be5d5..3f91107e2 100755
--- a/tools/decode-status.py
+++ b/tools/decode-status.py
@@ -249,7 +249,7 @@ a_features = [[
"USE_BS814A2","USE_SEESAW_SOIL","USE_WIEGAND","USE_NEOPOOL",
"USE_TOF10120","USE_SDM72","USE_DISPLAY_TM1637","USE_PROJECTOR_CTRL"
],[
- "","","","",
+ "USE_TFMINIPLUS","","","",
"","","","",
"","","","",
"","","","",