diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index accb88938..13f2c494e 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 "SignalStrength"
+#define D_JSON_CHIPTEMPERATURE "ChipTemperature"
#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 7693ec42c..887bd73b5 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_86_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"
@@ -804,6 +808,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 96d1783c1..e966f0662 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_86_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 "Потребит."
@@ -803,6 +807,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 9359c0c3a..30c91935f 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_86_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"
@@ -804,6 +808,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 e042317bd..7fd63790f 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_86_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"
@@ -804,6 +808,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 677ea5c1d..7db3f5f25 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_86_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"
@@ -804,6 +808,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 a2afce3f0..260b5281f 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_86_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"
@@ -804,6 +808,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 4316797d7..ed5d32f31 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_86_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"
@@ -804,6 +808,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 283404723..b39f2a2de 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,12 @@
#define D_SENSOR_NEOPOOL_TX "NeoPool TX"
#define D_SENSOR_NEOPOOL_RX "NeoPool RX"
#define D_SENSOR_VL53L0X_XSHUT "VL53L0X XSHUT"
+#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"
+
#define D_NEW_ADDRESS "Positionner l'adresse à"
#define D_OUT_OF_RANGE "Hors limites"
#define D_SENSOR_DETECTED "détecté"
diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h
index ca6688f57..f0d9ea77a 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_86_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"
@@ -804,6 +808,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 0b4374f5c..04866263f 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_86_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 "משתמש"
@@ -804,6 +808,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 5c4b3a150..a18f61cea 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_86_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"
@@ -804,6 +808,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 c449f9362..58cde05d8 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_86_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"
@@ -804,6 +808,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 442aaa4cb..07218d28e 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_86_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"
@@ -804,6 +808,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 87ad91eae..69b33210e 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_86_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"
@@ -804,6 +808,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 da1151789..86f2bb96c 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_86_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"
@@ -804,6 +808,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 138799cbd..a2190b65a 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_86_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"
@@ -804,6 +808,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 c448703bd..e56c35c85 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_86_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"
@@ -804,6 +808,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 9329d95ef..93f56aaf8 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_86_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"
@@ -804,6 +808,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 ac7a9479a..41eb8b22a 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_86_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"
@@ -804,6 +808,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 1342d88ae..5ddd6216f 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_86_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"
@@ -804,6 +808,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 1300e6295..6858db33d 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_86_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"
@@ -804,6 +808,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 bcf01e1ea..d9b98f878 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_86_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"
@@ -804,6 +808,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 27527d226..b47c1543d 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_86_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 "Користувач"
@@ -804,6 +808,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 5b9b2c9c2..6d12d62a2 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_86_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"
@@ -804,6 +808,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 9f99d4cf8..7cfc79ac8 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_86_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"
@@ -804,6 +808,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 cfeed1ff7..3498ec214 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_86_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 "使用者"
@@ -804,6 +808,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 f27f920d5..56315acd5 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -704,6 +704,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 support for TFmini Plus (TFmini, TFmini-S) LiDAR modules via UART interface (+0k8)
// -- 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 fa25e67f0..59257154a 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 951a69c4c..3fed9cfe2 100644
--- a/tasmota/tasmota_configurations_ESP32.h
+++ b/tasmota/tasmota_configurations_ESP32.h
@@ -286,6 +286,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 support 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 4bdeee62d..fa937ad05 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_MAX7219CLK, GPIO_MAX7219DIN, GPIO_MAX7219CS, // MAX7219 interface
GPIO_SENSOR_END };
@@ -331,6 +332,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 "|"
D_SENSOR_MAX7219_CLK "|" D_SENSOR_MAX7219_DIN "|" D_SENSOR_MAX7219_CS "|"
;
@@ -563,6 +565,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_86_tfminiplus.ino b/tasmota/xsns_86_tfminiplus.ino
new file mode 100644
index 000000000..341f097a0
--- /dev/null
+++ b/tasmota/xsns_86_tfminiplus.ino
@@ -0,0 +1,250 @@
+/*
+ xsns_86_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_86 86
+
+// 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_86_tfminiplus
+{
+ bool ready = false;
+ uint16_t distance = 0;
+ uint16_t sigstrength = 0;
+ uint16_t chiptemp = 0;
+} tfminiplus_sensor;
+
+// Software and hardware serial pointers
+TasmotaSerial *TfmpSerial = nullptr;
+
+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), 1);
+ 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 = TfmpAddData((char)data);
+ if (dataReady)
+ {
+ TfmpProcessData();
+ }
+ }
+ }
+}
+
+bool TfmpAddData(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 Xsns86(byte callback_id)
+{
+ bool result = false;
+ if (FUNC_INIT == callback_id)
+ {
+ TfmpInit();
+ }
+ else if (TfmpSerial && tfminiplus_sensor.ready)
+ {
+ switch (callback_id) {
+ 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","","","",
"","","","",
"","","","",
"","","","",