From 7f42caa6c0f9c139b8a8f1b3acd61422834609ba Mon Sep 17 00:00:00 2001
From: Philip Barclay
Date: Mon, 18 Nov 2019 19:10:45 +1300
Subject: [PATCH 001/559] Added YPR to web interface
---
sonoff/xsns_32_mpu6050.ino | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/sonoff/xsns_32_mpu6050.ino b/sonoff/xsns_32_mpu6050.ino
index 58915efc9..d212a45e2 100644
--- a/sonoff/xsns_32_mpu6050.ino
+++ b/sonoff/xsns_32_mpu6050.ino
@@ -56,6 +56,7 @@ int16_t MPU_6050_temperature = 0;
VectorInt16 aaReal; // [x, y, z] gravity-free accel sensor measurements
VectorFloat gravity; // [x, y, z] gravity vector
float euler[3]; // [psi, theta, phi] Euler angle container
+ float yawPitchRoll[3]; // [yaw, pitch roll] Yaw-pitch-roll container
} MPU6050_DMP;
MPU6050_DMP MPU6050_dmp;
@@ -78,6 +79,7 @@ void MPU_6050PerformReading(void)
mpu6050.dmpGetAccel(&MPU6050_dmp.aa, MPU6050_dmp.fifoBuffer);
mpu6050.dmpGetGravity(&MPU6050_dmp.gravity, &MPU6050_dmp.q);
mpu6050.dmpGetLinearAccel(&MPU6050_dmp.aaReal, &MPU6050_dmp.aa, &MPU6050_dmp.gravity);
+ mpu6050.dmpGetYawPitchRoll(MPU6050_dmp.yawPitchRoll, &MPU6050_dmp.q, &MPU6050_dmp.gravity);
MPU_6050_gx = MPU6050_dmp.euler[0] * 180/M_PI;
MPU_6050_gy = MPU6050_dmp.euler[1] * 180/M_PI;
MPU_6050_gz = MPU6050_dmp.euler[2] * 180/M_PI;
@@ -161,7 +163,13 @@ const char HTTP_SNS_AXIS[] PROGMEM =
"{s}" D_SENSOR_MPU6050 " " D_AZ_AXIS "{m}%s{e}" // {s} = , {m} = | , {e} = |
"{s}" D_SENSOR_MPU6050 " " D_GX_AXIS "{m}%s{e}" // {s} = , {m} = | , {e} = |
"{s}" D_SENSOR_MPU6050 " " D_GY_AXIS "{m}%s{e}" // {s} = , {m} = | , {e} = |
- "{s}" D_SENSOR_MPU6050 " " D_GZ_AXIS "{m}%s{e}"; // {s} = , {m} = | , {e} = |
+ "{s}" D_SENSOR_MPU6050 " " D_GZ_AXIS "{m}%s{e}" // {s} = , {m} = | , {e} = |
+#ifdef USE_MPU6050_DMP
+ "{s}" D_SENSOR_MPU6050 " " D_YAW "{m}%s{e}" // {s} = , {m} = | , {e} = |
+ "{s}" D_SENSOR_MPU6050 " " D_PITCH "{m}%s{e}" // {s} = , {m} = | , {e} = |
+ "{s}" D_SENSOR_MPU6050 " " D_ROLL "{m}%s{e}" // {s} = , {m} = | , {e} = |
+#endif // USE_MPU_DMP
+ ;
#endif // USE_WEBSERVER
#define D_JSON_AXIS_AX "AccelXAxis"
From dac6ce1e54b73eda46da6d22b8058550184a393d Mon Sep 17 00:00:00 2001
From: Philip Barclay
Date: Mon, 18 Nov 2019 21:33:34 +1300
Subject: [PATCH 002/559] Added YPR results to webserver and JSON output if DMP
enabled.
---
tasmota/xsns_32_mpu6050.ino | 32 ++++++++++++++++++++++++++------
1 file changed, 26 insertions(+), 6 deletions(-)
diff --git a/tasmota/xsns_32_mpu6050.ino b/tasmota/xsns_32_mpu6050.ino
index 7b26101a1..6f3cff5e8 100644
--- a/tasmota/xsns_32_mpu6050.ino
+++ b/tasmota/xsns_32_mpu6050.ino
@@ -69,7 +69,7 @@ MPU6050 mpu6050;
void MPU_6050PerformReading(void)
{
#ifdef USE_MPU6050_DMP
- mpu6050.resetFIFO(); // with a default dampling rate of 200Hz, we create a delay of approx. 5ms with a complete read cycle
+ mpu6050.resetFIFO(); // with a default sampling rate of 200Hz, we create a delay of approx. 5ms with a complete read cycle
MPU6050_dmp.fifoCount = mpu6050.getFIFOCount();
while (MPU6050_dmp.fifoCount < MPU6050_dmp.packetSize) MPU6050_dmp.fifoCount = mpu6050.getFIFOCount();
mpu6050.getFIFOBytes(MPU6050_dmp.fifoBuffer, MPU6050_dmp.packetSize);
@@ -147,6 +147,10 @@ void MPU_6050Detect(void)
}
}
+#define D_YAW "Yaw"
+#define D_PITCH "Pitch"
+#define D_ROLL "Roll"
+
#ifdef USE_WEBSERVER
const char HTTP_SNS_AXIS[] PROGMEM =
"{s}" D_SENSOR_MPU6050 " " D_AX_AXIS "{m}%s{e}" // {s} = , {m} = | , {e} = |
@@ -154,13 +158,13 @@ const char HTTP_SNS_AXIS[] PROGMEM =
"{s}" D_SENSOR_MPU6050 " " D_AZ_AXIS "{m}%s{e}" // {s} = , {m} = | , {e} = |
"{s}" D_SENSOR_MPU6050 " " D_GX_AXIS "{m}%s{e}" // {s} = , {m} = | , {e} = |
"{s}" D_SENSOR_MPU6050 " " D_GY_AXIS "{m}%s{e}" // {s} = , {m} = | , {e} = |
- "{s}" D_SENSOR_MPU6050 " " D_GZ_AXIS "{m}%s{e}" // {s} = , {m} = | , {e} = |
+ "{s}" D_SENSOR_MPU6050 " " D_GZ_AXIS "{m}%s{e}"; // {s} = , {m} = | , {e} = |
#ifdef USE_MPU6050_DMP
+const char HTTP_SNS_YPR[] PROGMEM =
"{s}" D_SENSOR_MPU6050 " " D_YAW "{m}%s{e}" // {s} = , {m} = | , {e} = |
- "{s}" D_SENSOR_MPU6050 " " D_PITCH "{m}%s{e}" // {s} = , {m} = | , {e} = |
- "{s}" D_SENSOR_MPU6050 " " D_ROLL "{m}%s{e}" // {s} = , {m} = | , {e} = |
-#endif // USE_MPU_DMP
- ;
+ "{s}" D_SENSOR_MPU6050 " " D_PITCH "{m}%s{e}" // {s} = , {m} = | , {e} = |
+ "{s}" D_SENSOR_MPU6050 " " D_ROLL "{m}%s{e}"; // {s} = , {m} = | , {e} = |
+#endif // USE_MPU6050_DMP
#endif // USE_WEBSERVER
#define D_JSON_AXIS_AX "AccelXAxis"
@@ -169,6 +173,9 @@ const char HTTP_SNS_AXIS[] PROGMEM =
#define D_JSON_AXIS_GX "GyroXAxis"
#define D_JSON_AXIS_GY "GyroYAxis"
#define D_JSON_AXIS_GZ "GyroZAxis"
+#define D_JSON_YAW "Yaw"
+#define D_JSON_PITCH "Pitch"
+#define D_JSON_ROLL "Roll"
void MPU_6050Show(bool json)
{
@@ -203,8 +210,20 @@ void MPU_6050Show(bool json)
snprintf_P(json_axis_gy, sizeof(json_axis_gy), PSTR(",\"" D_JSON_AXIS_GY "\":%s"), axis_gy);
char json_axis_gz[25];
snprintf_P(json_axis_gz, sizeof(json_axis_gz), PSTR(",\"" D_JSON_AXIS_GZ "\":%s"), axis_gz);
+#ifdef USE_MPU6050_DMP
+ char json_ypr_y[25];
+ snprintf_P(json_ypr_y, sizeof(json_ypr_y), PSTR(",\"" D_JSON_YAW "\":%s"), MPU6050_dmp.yawPitchRoll[0]);
+ char json_ypr_p[25];
+ snprintf_P(json_ypr_p, sizeof(json_ypr_p), PSTR(",\"" D_JSON_PITCH "\":%s"), MPU6050_dmp.yawPitchRoll[1]);
+ char json_ypr_r[25];
+ snprintf_P(json_ypr_r, sizeof(json_ypr_r), PSTR(",\"" D_JSON_ROLL "\":%s"), MPU6050_dmp.yawPitchRoll[2]);
+ ResponseAppend_P(PSTR(",\"%s\":{\"" D_JSON_TEMPERATURE "\":%s%s%s%s%s%s%s%s%s%s}"),
+ D_SENSOR_MPU6050, temperature, json_axis_ax, json_axis_ay, json_axis_az, json_axis_gx, json_axis_gy, json_axis_gz,
+ json_ypr_y, json_ypr_p, json_ypr_r);
+#else
ResponseAppend_P(PSTR(",\"%s\":{\"" D_JSON_TEMPERATURE "\":%s%s%s%s%s%s%s}"),
D_SENSOR_MPU6050, temperature, json_axis_ax, json_axis_ay, json_axis_az, json_axis_gx, json_axis_gy, json_axis_gz);
+#endif // USE_MPU6050_DMP
#ifdef USE_DOMOTICZ
DomoticzSensor(DZ_TEMP, temperature);
#endif // USE_DOMOTICZ
@@ -212,6 +231,7 @@ void MPU_6050Show(bool json)
} else {
WSContentSend_PD(HTTP_SNS_TEMP, D_SENSOR_MPU6050, temperature, TempUnit());
WSContentSend_PD(HTTP_SNS_AXIS, axis_ax, axis_ay, axis_az, axis_gx, axis_gy, axis_gz);
+ WSContentSend_PD(HTTP_SNS_YPR, MPU6050_dmp.yawPitchRoll[0], MPU6050_dmp.yawPitchRoll[1], MPU6050_dmp.yawPitchRoll[2]);
#endif // USE_WEBSERVER
}
}
From fe63e5cca2fcae187e7d6c3e3211db0414667821 Mon Sep 17 00:00:00 2001
From: Philip Barclay
Date: Fri, 29 Nov 2019 21:07:39 +1300
Subject: [PATCH 003/559] Stringification and conversion from radians to
degrees.
---
tasmota/xsns_32_mpu6050.ino | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/tasmota/xsns_32_mpu6050.ino b/tasmota/xsns_32_mpu6050.ino
index 6f3cff5e8..bcec100b0 100644
--- a/tasmota/xsns_32_mpu6050.ino
+++ b/tasmota/xsns_32_mpu6050.ino
@@ -196,6 +196,14 @@ void MPU_6050Show(bool json)
dtostrfd(MPU_6050_gy, Settings.flag2.axis_resolution, axis_gy);
char axis_gz[33];
dtostrfd(MPU_6050_gz, Settings.flag2.axis_resolution, axis_gz);
+#ifdef USE_MPU6050_DMP
+ char axis_yaw[33];
+ dtostrfd(MPU6050_dmp.yawPitchRoll[0] / PI * 180.0, Settings.flag2.axis_resolution, axis_yaw);
+ char axis_pitch[33];
+ dtostrfd(MPU6050_dmp.yawPitchRoll[1] / PI * 180.0, Settings.flag2.axis_resolution, axis_pitch);
+ char axis_roll[33];
+ dtostrfd(MPU6050_dmp.yawPitchRoll[2] / PI * 180.0, Settings.flag2.axis_resolution, axis_roll);
+#endif // USE_MPU6050_DMP
if (json) {
char json_axis_ax[25];
@@ -212,11 +220,11 @@ void MPU_6050Show(bool json)
snprintf_P(json_axis_gz, sizeof(json_axis_gz), PSTR(",\"" D_JSON_AXIS_GZ "\":%s"), axis_gz);
#ifdef USE_MPU6050_DMP
char json_ypr_y[25];
- snprintf_P(json_ypr_y, sizeof(json_ypr_y), PSTR(",\"" D_JSON_YAW "\":%s"), MPU6050_dmp.yawPitchRoll[0]);
+ snprintf_P(json_ypr_y, sizeof(json_ypr_y), PSTR(",\"" D_JSON_YAW "\":%s"), axis_yaw);
char json_ypr_p[25];
- snprintf_P(json_ypr_p, sizeof(json_ypr_p), PSTR(",\"" D_JSON_PITCH "\":%s"), MPU6050_dmp.yawPitchRoll[1]);
+ snprintf_P(json_ypr_p, sizeof(json_ypr_p), PSTR(",\"" D_JSON_PITCH "\":%s"), axis_pitch);
char json_ypr_r[25];
- snprintf_P(json_ypr_r, sizeof(json_ypr_r), PSTR(",\"" D_JSON_ROLL "\":%s"), MPU6050_dmp.yawPitchRoll[2]);
+ snprintf_P(json_ypr_r, sizeof(json_ypr_r), PSTR(",\"" D_JSON_ROLL "\":%s"), axis_roll);
ResponseAppend_P(PSTR(",\"%s\":{\"" D_JSON_TEMPERATURE "\":%s%s%s%s%s%s%s%s%s%s}"),
D_SENSOR_MPU6050, temperature, json_axis_ax, json_axis_ay, json_axis_az, json_axis_gx, json_axis_gy, json_axis_gz,
json_ypr_y, json_ypr_p, json_ypr_r);
@@ -231,7 +239,9 @@ void MPU_6050Show(bool json)
} else {
WSContentSend_PD(HTTP_SNS_TEMP, D_SENSOR_MPU6050, temperature, TempUnit());
WSContentSend_PD(HTTP_SNS_AXIS, axis_ax, axis_ay, axis_az, axis_gx, axis_gy, axis_gz);
- WSContentSend_PD(HTTP_SNS_YPR, MPU6050_dmp.yawPitchRoll[0], MPU6050_dmp.yawPitchRoll[1], MPU6050_dmp.yawPitchRoll[2]);
+#ifdef USE_MPU6050_DMP
+ WSContentSend_PD(HTTP_SNS_YPR, axis_yaw, axis_pitch, axis_roll);
+#endif // USE_MPU6050_DMP
#endif // USE_WEBSERVER
}
}
From 8ed7257c9b8952e2e0d542461096ad0ad72db2a5 Mon Sep 17 00:00:00 2001
From: Jason2866
Date: Thu, 5 Dec 2019 15:16:57 +0100
Subject: [PATCH 004/559] Update platformio_override_sample.ini
---
platformio_override_sample.ini | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/platformio_override_sample.ini b/platformio_override_sample.ini
index ad669b0a7..6cbd749c4 100644
--- a/platformio_override_sample.ini
+++ b/platformio_override_sample.ini
@@ -28,6 +28,7 @@ default_envs =
[common]
platform = ${core_active.platform}
+platform_packages = ${core_active.platform_packages}
build_flags = ${core_active.build_flags}
; *** Use settings from file user_config_override.h
-DUSE_CONFIG_OVERRIDE
@@ -72,6 +73,7 @@ build_flags = ${core_2_6_1.build_flags}
;platform = ${core_2_6_2.platform}
;build_flags = ${core_2_6_2.build_flags}
;platform = ${core_stage.platform}
+;platform_packages = ${core_stage.platform_packages}
;build_flags = ${core_stage.build_flags}
@@ -165,7 +167,8 @@ build_flags = ${esp82xx_defaults.build_flags}
[core_stage]
; *** Esp8266 core for Arduino version latest beta
-platform = https://github.com/platformio/platform-espressif8266.git#feature/stage
+platform = espressif8266@2.3.1
+platform_packages = framework-arduinoespressif8266 @ https://github.com/esp8266/Arduino.git
build_flags = ${esp82xx_defaults.build_flags}
-Wl,-Teagle.flash.1m.ld
-DBEARSSL_SSL_BASIC
From 246663dd9dd5759e64a6ceec1be3ae4abdab1485 Mon Sep 17 00:00:00 2001
From: Jason2866
Date: Thu, 5 Dec 2019 15:18:24 +0100
Subject: [PATCH 005/559] Update platformio_tasmota_env.ini
---
platformio_tasmota_env.ini | 1 +
1 file changed, 1 insertion(+)
diff --git a/platformio_tasmota_env.ini b/platformio_tasmota_env.ini
index 46e71d7af..38aaf2223 100644
--- a/platformio_tasmota_env.ini
+++ b/platformio_tasmota_env.ini
@@ -1,5 +1,6 @@
[env]
platform = ${common.platform}
+platform_packages = ${common.platform_packages}
framework = ${common.framework}
board = ${common.board}
board_build.flash_mode = ${common.board_build.flash_mode}
From 3b4b549e61fafa8e9b2ed912fe7f196a6c7fe219 Mon Sep 17 00:00:00 2001
From: gemu2015
Date: Thu, 5 Dec 2019 16:34:30 +0100
Subject: [PATCH 006/559] sml mbus decoder syntax update
support for byte order
---
tasmota/xsns_53_sml.ino | 32 +++++++++++++++++++++++++++-----
1 file changed, 27 insertions(+), 5 deletions(-)
diff --git a/tasmota/xsns_53_sml.ino b/tasmota/xsns_53_sml.ino
index ddc3f8db0..7aa0fd22d 100755
--- a/tasmota/xsns_53_sml.ino
+++ b/tasmota/xsns_53_sml.ino
@@ -499,7 +499,10 @@ const uint8_t meter[]=
#define USE_SML_MEDIAN_FILTER
// max number of vars , may be adjusted
+#ifndef MAX_VARS
#define MAX_VARS 20
+#endif
+
// max number of meters , may be adjusted
#define MAX_METERS 5
double meter_vars[MAX_VARS];
@@ -1427,14 +1430,25 @@ void SML_Decode(uint8_t index) {
//ignore
mp+=2;
cp++;
- } else if (!strncmp(mp,"uuuuuuuu",8)) {
+ } else if (!strncmp(mp,"UUuuUUuu",8)) {
uint32_t val= (cp[0]<<24)|(cp[1]<<16)|(cp[2]<<8)|(cp[3]<<0);
ebus_dval=val;
mbus_dval=val;
mp+=8;
cp+=4;
- }
- else if (*mp=='u' && *(mp+1)=='u' && *(mp+2)=='u' && *(mp+3)=='u'){
+ } else if (*mp=='U' && *(mp+1)=='U' && *(mp+2)=='u' && *(mp+3)=='u'){
+ uint16_t val = cp[1]|(cp[0]<<8);
+ mbus_dval=val;
+ ebus_dval=val;
+ mp+=4;
+ cp+=2;
+ } else if (!strncmp(mp,"SSssSSss",8)) {
+ int32_t val= (cp[0]<<24)|(cp[1]<<16)|(cp[2]<<8)|(cp[3]<<0);
+ ebus_dval=val;
+ mbus_dval=val;
+ mp+=8;
+ cp+=4;
+ } else if (*mp=='u' && *(mp+1)=='u' && *(mp+2)=='U' && *(mp+3)=='U'){
uint16_t val = cp[0]|(cp[1]<<8);
mbus_dval=val;
ebus_dval=val;
@@ -1442,17 +1456,25 @@ void SML_Decode(uint8_t index) {
cp+=2;
} else if (*mp=='u' && *(mp+1)=='u') {
uint8_t val = *cp++;
+ mbus_dval=val;
ebus_dval=val;
mp+=2;
- }
- else if (*mp=='s' && *(mp+1)=='s' && *(mp+2)=='s' && *(mp+3)=='s') {
+ } else if (*mp=='s' && *(mp+1)=='s' && *(mp+2)=='S' && *(mp+3)=='S') {
int16_t val = *cp|(*(cp+1)<<8);
+ mbus_dval=val;
+ ebus_dval=val;
+ mp+=4;
+ cp+=2;
+ } else if (*mp=='S' && *(mp+1)=='S' && *(mp+2)=='s' && *(mp+3)=='s') {
+ int16_t val = cp[1]|(cp[0]<<8);
+ mbus_dval=val;
ebus_dval=val;
mp+=4;
cp+=2;
}
else if (*mp=='s' && *(mp+1)=='s') {
int8_t val = *cp++;
+ mbus_dval=val;
ebus_dval=val;
mp+=2;
}
From 726883b16884fa03e893cdf0d3d6864c44b04efa Mon Sep 17 00:00:00 2001
From: Bohdan Kmit
Date: Thu, 5 Dec 2019 20:54:30 +0200
Subject: [PATCH 007/559] Allow to build Minimal firmware with TLS support
---
tasmota/tasmota_post.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/tasmota_post.h b/tasmota/tasmota_post.h
index be3b503f0..cc47e3fc1 100644
--- a/tasmota/tasmota_post.h
+++ b/tasmota/tasmota_post.h
@@ -512,7 +512,7 @@ char* ToHex_P(const unsigned char * in, size_t insz, char * out, size_t outsz, c
#undef USE_ARDUINO_OTA // Disable support for Arduino OTA
#undef USE_DOMOTICZ // Disable Domoticz
#undef USE_HOME_ASSISTANT // Disable Home Assistant
-#undef USE_MQTT_TLS // Disable TLS support won't work as the MQTTHost is not set
+//#undef USE_MQTT_TLS // Disable TLS support won't work as the MQTTHost is not set
#undef USE_KNX // Disable KNX IP Protocol Support
//#undef USE_WEBSERVER // Disable Webserver
#undef USE_WEBSEND_RESPONSE // Disable command WebSend response message (+1k code)
From b347c53846c84f17f246ab25cb373c87a0c747b6 Mon Sep 17 00:00:00 2001
From: Adrian Scillato <39969427+ascillato2@users.noreply.github.com>
Date: Thu, 5 Dec 2019 18:06:17 -0300
Subject: [PATCH 008/559] Fix markdown of Problem Issue Report
---
.github/ISSUE_TEMPLATE/Bug_report.md | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md
index f9622222f..4b4027bf8 100644
--- a/.github/ISSUE_TEMPLATE/Bug_report.md
+++ b/.github/ISSUE_TEMPLATE/Bug_report.md
@@ -38,31 +38,31 @@ _Make sure your have performed every step and checked the applicable boxes befor
- [ ] Self-compiled
- [ ] IDE / Compiler used: _____
- [ ] Flashing tools used: _____
-- [ ] Provide the output of command: ``Backlog Template; Module; GPIO 255``:
- ```
+- [ ] Provide the output of command: `Backlog Template; Module; GPIO 255`:
+```
Configuration output here:
- ```
-- [ ] If using rules, provide the output of this command: ``Backlog Rule1; Rule2; Rule3``:
- ```
+```
+- [ ] If using rules, provide the output of this command: `Backlog Rule1; Rule2; Rule3`:
+```
Rules output here:
- ```
-- [ ] Provide the output of this command: ``Status 0``:
- ```
+```
+- [ ] Provide the output of this command: `Status 0`:
+```
STATUS 0 output here:
- ```
+```
- [ ] Provide the output of the Console log output when you experience your issue; if applicable:
- _(Please use_ ``weblog 4`` _for more debug information)_
- ```
+ _(Please use_ `weblog 4` _for more debug information)_
+```
Console output here:
- ```
+```
### TO REPRODUCE
_Steps to reproduce the behavior:_
From 9d9f3b0ca7b4b6ee7db5e8f8afaa44f1d7ca88fd Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 6 Dec 2019 11:10:15 +0100
Subject: [PATCH 009/559] Change log buffer size from 520 to 700
Change log buffer size from 520 to 700 characters accomodating full rule text (#7110)
---
tasmota/CHANGELOG.md | 7 ++++++-
tasmota/tasmota.h | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 1706dbbb3..e92cfd27a 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -5,7 +5,12 @@
- Fix lost functionality of GPIO9 and GPIO10 on some devices (#7080)
- Fix Zigbee uses Hardware Serial if GPIO 1/3 or GPIO 13/15 and SerialLog 0 (#7071)
- Fix WS2812 power control (#7090)
-- Change light color schemes 2, 3 and 4 from color wheel to Hue driven
+- Change light color schemes 2, 3 and 4 from color wheel to Hue driven with user Saturation control
+- Change log buffer size from 520 to 700 characters accomodating full rule text (#7110)
+- Add rule var ``%topic%`` (#5522)
+- Add rule triggers ``tele_power1#state`` and multiple ``tele-wifi1#xxx`` (#7093)
+- Add experimental support for stepper motor shutter control
+- Add optional USE_MQTT_TLS to tasmota-minimal.bin (#7115)
## Released
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index d9e55bd15..cefef3a06 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -119,7 +119,7 @@ const uint16_t INPUT_BUFFER_SIZE = 520; // Max number of characters in (seri
const uint16_t FLOATSZ = 16; // Max number of characters in float result from dtostrfd (max 32)
const uint16_t CMDSZ = 24; // Max number of characters in command
const uint16_t TOPSZ = 100; // Max number of characters in topic string
-const uint16_t LOGSZ = 520; // Max number of characters in log
+const uint16_t LOGSZ = 700; // Max number of characters in log
const uint16_t MIN_MESSZ = 893; // Min number of characters in MQTT message
const uint8_t SENSOR_MAX_MISS = 5; // Max number of missed sensor reads before deciding it's offline
From 8c5c95747c4344522c4dc343f311e1123026dcbd Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 6 Dec 2019 12:18:46 +0100
Subject: [PATCH 010/559] Bump version 7.1.2.1
---
README.md | 2 +-
RELEASENOTES.md | 4 +++-
tasmota/CHANGELOG.md | 19 +++++++++++++------
tasmota/tasmota_version.h | 2 +-
4 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index 7b101df63..acb6430d5 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ In addition to the [release webpage](https://github.com/arendst/Tasmota/releases
## Development
-[](https://github.com/arendst/Tasmota)
+[](https://github.com/arendst/Tasmota)
[](http://thehackbox.org/tasmota/)
[](https://travis-ci.org/arendst/Tasmota)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 51d078352..0baecb42a 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -51,4 +51,6 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Fix lost functionality of GPIO9 and GPIO10 on some devices (#7080)
- Fix Zigbee uses Hardware Serial if GPIO 1/3 or GPIO 13/15 and SerialLog 0 (#7071)
-- Change light color schemes 2, 3 and 4 from color wheel to Hue driven
+- Fix WS2812 power control (#7090)
+- Change light color schemes 2, 3 and 4 from color wheel to Hue driven with user Saturation control
+- Change log buffer size from 520 to 700 characters accomodating full rule text (#7110)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index e92cfd27a..2fe8fac75 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -1,5 +1,18 @@
## Unreleased (development)
+### 7.1.2.1 20191206
+
+- Add rule var ``%topic%`` (#5522)
+- Add rule triggers ``tele_power1#state`` and multiple ``tele-wifi1#xxx`` (#7093)
+- Add experimental support for stepper motor shutter control
+- Add optional USE_MQTT_TLS to tasmota-minimal.bin (#7115)
+
+## Released
+
+### 7.1.2 20191206
+
+- Maintenance Release
+
### 7.1.1.1 20191201
- Fix lost functionality of GPIO9 and GPIO10 on some devices (#7080)
@@ -7,12 +20,6 @@
- Fix WS2812 power control (#7090)
- Change light color schemes 2, 3 and 4 from color wheel to Hue driven with user Saturation control
- Change log buffer size from 520 to 700 characters accomodating full rule text (#7110)
-- Add rule var ``%topic%`` (#5522)
-- Add rule triggers ``tele_power1#state`` and multiple ``tele-wifi1#xxx`` (#7093)
-- Add experimental support for stepper motor shutter control
-- Add optional USE_MQTT_TLS to tasmota-minimal.bin (#7115)
-
-## Released
### 7.1.1 20191201
diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h
index 54e4c165f..7b2207950 100644
--- a/tasmota/tasmota_version.h
+++ b/tasmota/tasmota_version.h
@@ -20,6 +20,6 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x07010101;
+const uint32_t VERSION = 0x07010201;
#endif // _TASMOTA_VERSION_H_
From 00fd7f2f7c62765a95fcde751cf297f1bd37d2d3 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 6 Dec 2019 15:02:05 +0100
Subject: [PATCH 011/559] Bump version to 7.1.2.2
Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config (#7108)
---
tasmota/CHANGELOG.md | 4 +++
tasmota/i18n.h | 1 +
tasmota/settings.h | 4 +--
tasmota/settings.ino | 21 +++++++++++++++
tasmota/support.ino | 51 +++++++++++++++++++++++++++++--------
tasmota/support_command.ino | 46 +++++++++++++++++++++++++++++++--
tasmota/support_rtc.ino | 4 ++-
tasmota/tasmota.ino | 2 --
tasmota/tasmota_version.h | 2 +-
tasmota/xnrg_02_cse7766.ino | 2 +-
10 files changed, 117 insertions(+), 20 deletions(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 2fe8fac75..4bb5447ad 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -1,5 +1,9 @@
## Unreleased (development)
+### 7.1.2.2 20191206
+
+- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config (#7108)
+
### 7.1.2.1 20191206
- Add rule var ``%topic%`` (#5522)
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index 5de4b7a1d..dfa998474 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -285,6 +285,7 @@
#define D_CMND_SERIALSEND "SerialSend"
#define D_CMND_SERIALDELIMITER "SerialDelimiter"
#define D_CMND_BAUDRATE "Baudrate"
+#define D_CMND_SERIALCONFIG "SerialConfig"
#define D_CMND_TEMPLATE "Template"
#define D_JSON_NAME "NAME"
#define D_JSON_GPIO "GPIO"
diff --git a/tasmota/settings.h b/tasmota/settings.h
index 554711cad..f464a24cb 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -269,9 +269,7 @@ struct SYSCFG {
uint8_t free_1d6[10]; // 1D6
SysBitfield4 flag4; // 1E0
-
- uint8_t free_1e4; // 1E4
-
+ uint8_t serial_config; // 1E4
uint8_t wifi_output_power; // 1E5
uint8_t shutter_accuracy; // 1E6
uint8_t mqttlog_level; // 1E7
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index 9ca979b45..f6113be46 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -156,6 +156,23 @@ const char kWebColors[] PROGMEM =
COLOR_BUTTON_TEXT "|" COLOR_BUTTON "|" COLOR_BUTTON_HOVER "|" COLOR_BUTTON_RESET "|" COLOR_BUTTON_RESET_HOVER "|" COLOR_BUTTON_SAVE "|" COLOR_BUTTON_SAVE_HOVER "|"
COLOR_TIMER_TAB_TEXT "|" COLOR_TIMER_TAB_BACKGROUND "|" COLOR_TITLE_TEXT;
+enum TasmotaSerialConfig {
+ TS_SERIAL_5N1, TS_SERIAL_6N1, TS_SERIAL_7N1, TS_SERIAL_8N1,
+ TS_SERIAL_5N2, TS_SERIAL_6N2, TS_SERIAL_7N2, TS_SERIAL_8N2,
+ TS_SERIAL_5E1, TS_SERIAL_6E1, TS_SERIAL_7E1, TS_SERIAL_8E1,
+ TS_SERIAL_5E2, TS_SERIAL_6E2, TS_SERIAL_7E2, TS_SERIAL_8E2,
+ TS_SERIAL_5O1, TS_SERIAL_6O1, TS_SERIAL_7O1, TS_SERIAL_8O1,
+ TS_SERIAL_5O2, TS_SERIAL_6O2, TS_SERIAL_7O2, TS_SERIAL_8O2 };
+
+const uint8_t kTasmotaSerialConfig[] PROGMEM = {
+ SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1,
+ SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2,
+ SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1,
+ SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2,
+ SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1,
+ SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2
+};
+
/*********************************************************************************************\
* RTC memory
\*********************************************************************************************/
@@ -670,6 +687,7 @@ void SettingsDefaultSet2(void)
// for (uint32_t i = 1; i < MAX_PULSETIMERS; i++) { Settings.pulse_timer[i] = 0; }
// Serial
+ Settings.serial_config = TS_SERIAL_8N1;
Settings.baudrate = APP_BAUDRATE / 300;
Settings.sbaudrate = SOFT_BAUDRATE / 300;
Settings.serial_delimiter = 0xff;
@@ -1155,6 +1173,9 @@ void SettingsDelta(void)
if (Settings.version < 0x07000004) {
Settings.wifi_output_power = 170;
}
+ if (Settings.version < 0x07010202) {
+ Settings.serial_config = TS_SERIAL_8N1;
+ }
Settings.version = VERSION;
SettingsSave(1);
diff --git a/tasmota/support.ino b/tasmota/support.ino
index 8ce7f2840..f44d14eb7 100644
--- a/tasmota/support.ino
+++ b/tasmota/support.ino
@@ -737,19 +737,50 @@ int GetStateNumber(char *state_text)
return state_number;
}
+String GetSerialConfig(void)
+{
+ // Settings.serial_config layout
+ // b000000xx - 5, 6, 7 or 8 data bits
+ // b00000x00 - 1 or 2 stop bits
+ // b000xx000 - None, Even or Odd parity
+
+ const char kParity[] = "NEOI";
+
+ char config[4];
+ config[0] = '5' + (Settings.serial_config & 0x3);
+ config[1] = kParity[(Settings.serial_config >> 3) & 0x3];
+ config[2] = '1' + ((Settings.serial_config >> 2) & 0x1);
+ config[3] = '\0';
+ return String(config);
+}
+
+void SetSerialBegin(uint32_t baudrate)
+{
+ if (seriallog_level) {
+ AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION "Set Serial to %s %d bit/s"), GetSerialConfig().c_str(), baudrate);
+ delay(100);
+ }
+ Serial.flush();
+ Serial.begin(baudrate, (SerialConfig)pgm_read_byte(kTasmotaSerialConfig + Settings.serial_config));
+ delay(10);
+ Serial.println();
+}
+
+void SetSerialConfig(uint32_t serial_config)
+{
+ if (serial_config == Settings.serial_config) { return; }
+ if (serial_config > TS_SERIAL_8O2) { return; }
+
+ Settings.serial_config = serial_config;
+ SetSerialBegin(Serial.baudRate());
+}
+
void SetSerialBaudrate(int baudrate)
{
Settings.baudrate = baudrate / 300;
- if (Serial.baudRate() != baudrate) {
- if (seriallog_level) {
- AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_SET_BAUDRATE_TO " %d"), baudrate);
- }
- delay(100);
- Serial.flush();
- Serial.begin(baudrate, serial_config);
- delay(10);
- Serial.println();
- }
+ if (Serial.baudRate() == baudrate) { return; }
+
+ SetSerialBegin(baudrate);
}
void ClaimSerial(void)
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index fe8640045..070409566 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -23,7 +23,7 @@ const char kTasmotaCommands[] PROGMEM = "|" // No prefix
D_CMND_SETOPTION "|" D_CMND_TEMPERATURE_RESOLUTION "|" D_CMND_HUMIDITY_RESOLUTION "|" D_CMND_PRESSURE_RESOLUTION "|" D_CMND_POWER_RESOLUTION "|"
D_CMND_VOLTAGE_RESOLUTION "|" D_CMND_FREQUENCY_RESOLUTION "|" D_CMND_CURRENT_RESOLUTION "|" D_CMND_ENERGY_RESOLUTION "|" D_CMND_WEIGHT_RESOLUTION "|"
D_CMND_MODULE "|" D_CMND_MODULES "|" D_CMND_GPIO "|" D_CMND_GPIOS "|" D_CMND_TEMPLATE "|" D_CMND_PWM "|" D_CMND_PWMFREQUENCY "|" D_CMND_PWMRANGE "|"
- D_CMND_BUTTONDEBOUNCE "|" D_CMND_SWITCHDEBOUNCE "|" D_CMND_SYSLOG "|" D_CMND_LOGHOST "|" D_CMND_LOGPORT "|" D_CMND_SERIALSEND "|" D_CMND_BAUDRATE "|"
+ D_CMND_BUTTONDEBOUNCE "|" D_CMND_SWITCHDEBOUNCE "|" D_CMND_SYSLOG "|" D_CMND_LOGHOST "|" D_CMND_LOGPORT "|" D_CMND_SERIALSEND "|" D_CMND_BAUDRATE "|" D_CMND_SERIALCONFIG "|"
D_CMND_SERIALDELIMITER "|" D_CMND_IPADDRESS "|" D_CMND_NTPSERVER "|" D_CMND_AP "|" D_CMND_SSID "|" D_CMND_PASSWORD "|" D_CMND_HOSTNAME "|" D_CMND_WIFICONFIG "|"
D_CMND_FRIENDLYNAME "|" D_CMND_SWITCHMODE "|" D_CMND_INTERLOCK "|" D_CMND_TELEPERIOD "|" D_CMND_RESET "|" D_CMND_TIME "|" D_CMND_TIMEZONE "|" D_CMND_TIMESTD "|"
D_CMND_TIMEDST "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" D_CMND_LEDMASK "|" D_CMND_WIFIPOWER "|" D_CMND_TEMPOFFSET "|"
@@ -38,7 +38,7 @@ void (* const TasmotaCommand[])(void) PROGMEM = {
&CmndSetoption, &CmndTemperatureResolution, &CmndHumidityResolution, &CmndPressureResolution, &CmndPowerResolution,
&CmndVoltageResolution, &CmndFrequencyResolution, &CmndCurrentResolution, &CmndEnergyResolution, &CmndWeightResolution,
&CmndModule, &CmndModules, &CmndGpio, &CmndGpios, &CmndTemplate, &CmndPwm, &CmndPwmfrequency, &CmndPwmrange,
- &CmndButtonDebounce, &CmndSwitchDebounce, &CmndSyslog, &CmndLoghost, &CmndLogport, &CmndSerialSend, &CmndBaudrate,
+ &CmndButtonDebounce, &CmndSwitchDebounce, &CmndSyslog, &CmndLoghost, &CmndLogport, &CmndSerialSend, &CmndBaudrate, &CmndSerialConfig,
&CmndSerialDelimiter, &CmndIpAddress, &CmndNtpServer, &CmndAp, &CmndSsid, &CmndPassword, &CmndHostname, &CmndWifiConfig,
&CmndFriendlyname, &CmndSwitchMode, &CmndInterlock, &CmndTeleperiod, &CmndReset, &CmndTime, &CmndTimezone, &CmndTimeStd,
&CmndTimeDst, &CmndAltitude, &CmndLedPower, &CmndLedState, &CmndLedMask, &CmndWifiPower, &CmndTempOffset,
@@ -1082,6 +1082,48 @@ void CmndBaudrate(void)
ResponseCmndNumber(Settings.baudrate * 300);
}
+void CmndSerialConfig(void)
+{
+ // See TasmotaSerialConfig for possible options
+ // SerialConfig 0..23 where 3 equals 8N1
+ // SerialConfig 8N1
+
+ if (XdrvMailbox.data_len > 0) {
+ if (XdrvMailbox.data_len < 3) { // Use 0..23 as serial config option
+ if ((XdrvMailbox.payload >= TS_SERIAL_5N1) && (XdrvMailbox.payload <= TS_SERIAL_8O2)) {
+ SetSerialConfig(XdrvMailbox.payload);
+ }
+ }
+ else if ((XdrvMailbox.payload >= 5) && (XdrvMailbox.payload <= 8)) {
+ uint8_t serial_config = XdrvMailbox.payload -5; // Data bits 5, 6, 7 or 8, No parity and 1 stop bit
+
+ bool valid = true;
+ char parity = (XdrvMailbox.data[1] & 0xdf);
+ if ('E' == parity) {
+ serial_config += 0x08; // Even parity
+ }
+ else if ('O' == parity) {
+ serial_config += 0x10; // Odd parity
+ }
+ else if ('N' != parity) {
+ valid = false;
+ }
+
+ if ('2' == XdrvMailbox.data[2]) {
+ serial_config += 0x04; // Stop bits 2
+ }
+ else if ('1' != XdrvMailbox.data[2]) {
+ valid = false;
+ }
+
+ if (valid) {
+ SetSerialConfig(serial_config);
+ }
+ }
+ }
+ ResponseCmndChar(GetSerialConfig().c_str());
+}
+
void CmndSerialSend(void)
{
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= 5)) {
diff --git a/tasmota/support_rtc.ino b/tasmota/support_rtc.ino
index ffb7239a6..27ef66ec7 100644
--- a/tasmota/support_rtc.ino
+++ b/tasmota/support_rtc.ino
@@ -379,7 +379,9 @@ void RtcSecond(void)
Rtc.ntp_sync_minute = 1; // If sync prepare for a new cycle
}
uint8_t offset = (uptime < 30) ? RtcTime.second : (((ESP.getChipId() & 0xF) * 3) + 3) ; // First try ASAP to sync. If fails try once every 60 seconds based on chip id
- if ( (((offset == RtcTime.second) && ( (RtcTime.year < 2016) || (Rtc.ntp_sync_minute == uptime_minute))) || ntp_force_sync ) ) {
+ if ( (((offset == RtcTime.second) && ( (RtcTime.year < 2016) || // Never synced
+ (Rtc.ntp_sync_minute == uptime_minute))) || // Re-sync every hour
+ ntp_force_sync ) ) { // Forced sync
Rtc.ntp_time = sntp_get_current_timestamp();
if (Rtc.ntp_time > START_VALID_TIME) { // Fix NTP bug in core 2.4.1/SDK 2.2.1 (returns Thu Jan 01 08:00:10 1970 after power on)
ntp_force_sync = false;
diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino
index e10dfdb63..5cf0a430f 100644
--- a/tasmota/tasmota.ino
+++ b/tasmota/tasmota.ino
@@ -74,8 +74,6 @@ const char kCodeImage[] PROGMEM = "tasmota|minimal|sensors|knx|basic|display|ir"
* Global variables
\*********************************************************************************************/
-SerialConfig serial_config = SERIAL_8N1; // Serial interface configuration 8 data bits, No parity, 1 stop bit
-
WiFiUDP PortUdp; // UDP Syslog and Alexa
unsigned long feature_drv1; // Compiled driver feature map
diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h
index 7b2207950..929924840 100644
--- a/tasmota/tasmota_version.h
+++ b/tasmota/tasmota_version.h
@@ -20,6 +20,6 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x07010201;
+const uint32_t VERSION = 0x07010202;
#endif // _TASMOTA_VERSION_H_
diff --git a/tasmota/xnrg_02_cse7766.ino b/tasmota/xnrg_02_cse7766.ino
index 339d4fee2..d52ee9ca3 100644
--- a/tasmota/xnrg_02_cse7766.ino
+++ b/tasmota/xnrg_02_cse7766.ino
@@ -211,7 +211,7 @@ void CseDrvInit(void)
{
if ((3 == pin[GPIO_CSE7766_RX]) && (1 == pin[GPIO_CSE7766_TX])) { // As it uses 8E1 currently only hardware serial is supported
baudrate = 4800;
- serial_config = SERIAL_8E1;
+ Settings.serial_config = TS_SERIAL_8E1;
if (0 == Settings.param[P_CSE7766_INVALID_POWER]) {
Settings.param[P_CSE7766_INVALID_POWER] = CSE_MAX_INVALID_POWER; // SetOption39 1..255
}
From ee37c258e64c397225090c082686e2a471a7836e Mon Sep 17 00:00:00 2001
From: Laurent Dong
Date: Fri, 6 Dec 2019 10:12:13 -0500
Subject: [PATCH 012/559] Embeded IF statement in backlog did not been
processed
The backlog_mutex blocked the execution of IF statement during call ExecuteCommand(), because all IF statement need to use backlog to perform commands.
---
tasmota/tasmota.ino | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino
index 5cf0a430f..306250549 100644
--- a/tasmota/tasmota.ino
+++ b/tasmota/tasmota.ino
@@ -349,15 +349,18 @@ void BacklogLoop(void)
{
if (TimeReached(backlog_delay)) {
if (!BACKLOG_EMPTY && !backlog_mutex) {
- backlog_mutex = true;
#ifdef SUPPORT_IF_STATEMENT
- ExecuteCommand((char*)backlog.shift().c_str(), SRC_BACKLOG);
+ backlog_mutex = true;
+ String cmd = backlog.shift();
+ backlog_mutex = false;
+ ExecuteCommand((char*)cmd.c_str(), SRC_BACKLOG);
#else
+ backlog_mutex = true;
ExecuteCommand((char*)backlog[backlog_pointer].c_str(), SRC_BACKLOG);
backlog_pointer++;
if (backlog_pointer >= MAX_BACKLOG) { backlog_pointer = 0; }
-#endif
backlog_mutex = false;
+#endif
}
}
}
From 5f290f8b64cb215d4bc2d4f2f69397e43e9c1d2b Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Fri, 6 Dec 2019 20:10:04 -0300
Subject: [PATCH 013/559] Reverting changes in tele message due to backwards
compatibility
---
tasmota/support_tasmota.ino | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino
index 2f54cec7d..96cec9c5a 100644
--- a/tasmota/support_tasmota.ino
+++ b/tasmota/support_tasmota.ino
@@ -565,7 +565,7 @@ void MqttShowState(void)
if (i == LightDevice()) { LightState(1); } // call it only once
} else {
#endif
- ResponseAppend_P(PSTR(",\"%s\":{\"STATE\":\"%s\"}"), GetPowerDevice(stemp1, i, sizeof(stemp1), Settings.flag.device_index_enable), // SetOption26 - Switch between POWER or POWER1
+ ResponseAppend_P(PSTR(",\"%s\":\"%s\""), GetPowerDevice(stemp1, i, sizeof(stemp1), Settings.flag.device_index_enable), // SetOption26 - Switch between POWER or POWER1
GetStateText(bitRead(power, i-1)));
#ifdef USE_SONOFF_IFAN
if (IsModuleIfan()) {
@@ -609,7 +609,7 @@ bool MqttShowSensor(void)
if (pin[GPIO_SWT1 +i] < 99) {
#endif // USE_TM1638
bool swm = ((FOLLOW_INV == Settings.switchmode[i]) || (PUSHBUTTON_INV == Settings.switchmode[i]) || (PUSHBUTTONHOLD_INV == Settings.switchmode[i]));
- ResponseAppend_P(PSTR(",\"" D_JSON_SWITCH "%d\":{\"STATE\":\"%s\"}"), i +1, GetStateText(swm ^ SwitchLastState(i)));
+ ResponseAppend_P(PSTR(",\"" D_JSON_SWITCH "%d\":\"%s\""), i +1, GetStateText(swm ^ SwitchLastState(i)));
}
}
XsnsCall(FUNC_JSON_APPEND);
From 5a0febc64ef515fd3873b3f6b842ac4d669fda55 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 7 Dec 2019 10:41:29 +0100
Subject: [PATCH 014/559] Add save call stack in RTC memory in case of crash
---
tasmota/CHANGELOG.md | 1 +
tasmota/i18n.h | 3 ++
tasmota/my_user_config.h | 3 ++
tasmota/support_command.ino | 15 +++++-
tasmota/support_crash_recorder.ino | 80 ++++++++++++++++++++++++++++++
tasmota/support_wifi.ino | 1 +
tasmota/tasmota.h | 2 +-
7 files changed, 103 insertions(+), 2 deletions(-)
create mode 100644 tasmota/support_crash_recorder.ino
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 4bb5447ad..10c3c6941 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -3,6 +3,7 @@
### 7.1.2.2 20191206
- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config (#7108)
+- Add save call stack in RTC memory in case of crash, command ``Status 12`` to dump the stack
### 7.1.2.1 20191206
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index dfa998474..30fcf173e 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -208,6 +208,7 @@
#define D_STATUS9_MARGIN "PTH"
#define D_STATUS10_SENSOR "SNS"
#define D_STATUS11_STATUS "STS"
+ #define D_STATUS12_STATUS "STK"
#define D_CMND_STATE "State"
#define D_CMND_POWER "Power"
#define D_CMND_FANSPEED "FanSpeed"
@@ -292,6 +293,8 @@
#define D_JSON_FLAG "FLAG"
#define D_JSON_BASE "BASE"
#define D_CMND_TEMPOFFSET "TempOffset"
+#define D_CMND_CRASH "Crash"
+ #define D_JSON_ONE_TO_CRASH "1 to crash"
// Commands xdrv_01_mqtt.ino
#define D_CMND_MQTTLOG "MqttLog"
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 7ef154d53..46fe15def 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -268,6 +268,9 @@
//#define MY_LANGUAGE zh-CN // Chinese (Simplified) in China
//#define MY_LANGUAGE zh-TW // Chinese (Traditional) in Taiwan
+// -- Crash generator ---------------------------
+//#define USE_CRASH // add a `Crash` command to test the crash recorder (+48 bytes)
+
// -- Wifi Config tools ---------------------------
#define WIFI_SOFT_AP_CHANNEL 1 // Soft Access Point Channel number between 1 and 13 as used by Wifi Manager web GUI
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index 070409566..020e57b9d 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -30,7 +30,10 @@ const char kTasmotaCommands[] PROGMEM = "|" // No prefix
#ifdef USE_I2C
D_CMND_I2CSCAN "|" D_CMND_I2CDRIVER "|"
#endif
- D_CMND_SENSOR "|" D_CMND_DRIVER;
+#ifdef USE_CRASH
+ D_CMND_CRASH "|"
+#endif
+ D_CMND_SENSOR "|" D_CMND_DRIVER ;
void (* const TasmotaCommand[])(void) PROGMEM = {
&CmndBacklog, &CmndDelay, &CmndPower, &CmndStatus, &CmndState, &CmndSleep, &CmndUpgrade, &CmndUpgrade, &CmndOtaUrl,
@@ -44,6 +47,9 @@ void (* const TasmotaCommand[])(void) PROGMEM = {
&CmndTimeDst, &CmndAltitude, &CmndLedPower, &CmndLedState, &CmndLedMask, &CmndWifiPower, &CmndTempOffset,
#ifdef USE_I2C
&CmndI2cScan, CmndI2cDriver,
+#endif
+#ifdef USE_CRASH
+ &CmndCrash,
#endif
&CmndSensor, &CmndDriver };
@@ -483,6 +489,13 @@ void CmndStatus(void)
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "11"));
}
+ if ((0 == payload) || (12 == payload)) {
+ Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS12_STATUS "\":"));
+ CrashDump();
+ ResponseJsonEnd();
+ MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "12"));
+ }
+
#ifdef USE_SCRIPT_STATUS
if (bitRead(Settings.rule_enabled, 0)) Run_Scripter(">U",2,mqtt_data);
#endif
diff --git a/tasmota/support_crash_recorder.ino b/tasmota/support_crash_recorder.ino
new file mode 100644
index 000000000..be0cde11b
--- /dev/null
+++ b/tasmota/support_crash_recorder.ino
@@ -0,0 +1,80 @@
+/*
+ support_crash_recorder.ino - record the call stack in RTC in cas of crash
+
+ Copyright (C) 2019 Stephan Hadinger, 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 .
+*/
+
+const uint32_t dump_max_len = 64; // dump only 64 call addresses
+
+/**
+ * Save crash information in RTC memory
+ * This function is called automatically if ESP8266 suffers an exception
+ * It should be kept quick / consise to be able to execute before hardware wdt may kick in
+ */
+extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack, uint32_t stack_end ) {
+ uint32_t addr_written = 0; // how many addresses have we already written in RTC
+ uint32_t value; // 4 bytes buffer to write to RTC
+
+ for (uint32_t i = stack; i < stack_end; i += 4) {
+ value = *((uint32_t*) i); // load value from stack
+ if ((value >= 0x40000000) && (value < 0x40300000)) { // keep only addresses in code area
+ ESP.rtcUserMemoryWrite(addr_written, (uint32_t*)&value, sizeof(value));
+ addr_written++;
+ if (addr_written >= dump_max_len) { break; } // we store only 64 addresses
+ }
+ }
+ // fill the rest of RTC with zeros
+ value = 0;
+ while (addr_written < dump_max_len) {
+ ESP.rtcUserMemoryWrite(addr_written++, (uint32_t*)&value, sizeof(value));
+ }
+}
+
+// Generate a crash to test the crash recorder
+void CmndCrash(void)
+{
+ if (1 == XdrvMailbox.payload) {
+ volatile uint32_t dummy;
+ dummy = *((uint32_t*) 0x00000000); // invalid address
+ } else {
+ ResponseCmndChar(D_JSON_ONE_TO_CRASH);
+ }
+}
+
+// Clear the RTC dump area when we do a normal reboot, this avoids garbage data to stay in RTC
+void CrashDumpClear(void) {
+ uint32_t value = 0;
+ for (uint32_t i = 0; i < dump_max_len; i++) {
+ ESP.rtcUserMemoryWrite(i, (uint32_t*)&value, sizeof(value));
+ }
+}
+
+/*********************************************************************************************\
+ * CmndCrashDump - dump the crash history - called by `Status 12`
+\*********************************************************************************************/
+void CrashDump(void)
+{
+ ResponseAppend_P(PSTR("{\"call_chain\":["));
+ for (uint32_t i = 0; i < dump_max_len; i++) {
+ uint32_t value;
+ ESP.rtcUserMemoryRead(i, (uint32_t*)&value, sizeof(value));
+ if ((value >= 0x40000000) && (value < 0x40300000)) {
+ if (i > 0) { ResponseAppend_P(PSTR(",")); }
+ ResponseAppend_P(PSTR("\"%08x\""), value);
+ }
+ }
+ ResponseAppend_P(PSTR("]}"));
+}
diff --git a/tasmota/support_wifi.ino b/tasmota/support_wifi.ino
index 49faa0663..06d922b26 100644
--- a/tasmota/support_wifi.ino
+++ b/tasmota/support_wifi.ino
@@ -617,6 +617,7 @@ void WifiShutdown(void)
void EspRestart(void)
{
WifiShutdown();
+ CrashDumpClear(); // Clear the stack dump in RTC
// ESP.restart(); // This results in exception 3 on restarts on core 2.3.0
ESP.reset();
}
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index cefef3a06..c31bfad83 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -131,7 +131,7 @@ const uint32_t SOFT_BAUDRATE = 9600; // Default software serial baudrate
const uint32_t APP_BAUDRATE = 115200; // Default serial baudrate
const uint32_t SERIAL_POLLING = 100; // Serial receive polling in ms
const uint32_t ZIGBEE_POLLING = 100; // Serial receive polling in ms
-const uint8_t MAX_STATUS = 11; // Max number of status lines
+const uint8_t MAX_STATUS = 12; // Max number of status lines
const uint32_t START_VALID_TIME = 1451602800; // Time is synced and after 2016-01-01
From 7796714ba08347122994b8033f9fb26a6b165643 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 7 Dec 2019 11:00:32 +0100
Subject: [PATCH 015/559] Change from `Crash` to `Restart -1`
---
tasmota/i18n.h | 2 --
tasmota/my_user_config.h | 3 ---
tasmota/support_command.ino | 9 +++------
tasmota/support_crash_recorder.ino | 8 ++------
4 files changed, 5 insertions(+), 17 deletions(-)
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index 30fcf173e..f913c14d2 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -293,8 +293,6 @@
#define D_JSON_FLAG "FLAG"
#define D_JSON_BASE "BASE"
#define D_CMND_TEMPOFFSET "TempOffset"
-#define D_CMND_CRASH "Crash"
- #define D_JSON_ONE_TO_CRASH "1 to crash"
// Commands xdrv_01_mqtt.ino
#define D_CMND_MQTTLOG "MqttLog"
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 46fe15def..7ef154d53 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -268,9 +268,6 @@
//#define MY_LANGUAGE zh-CN // Chinese (Simplified) in China
//#define MY_LANGUAGE zh-TW // Chinese (Traditional) in Taiwan
-// -- Crash generator ---------------------------
-//#define USE_CRASH // add a `Crash` command to test the crash recorder (+48 bytes)
-
// -- Wifi Config tools ---------------------------
#define WIFI_SOFT_AP_CHANNEL 1 // Soft Access Point Channel number between 1 and 13 as used by Wifi Manager web GUI
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index 020e57b9d..23ce1f22e 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -29,9 +29,6 @@ const char kTasmotaCommands[] PROGMEM = "|" // No prefix
D_CMND_TIMEDST "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" D_CMND_LEDMASK "|" D_CMND_WIFIPOWER "|" D_CMND_TEMPOFFSET "|"
#ifdef USE_I2C
D_CMND_I2CSCAN "|" D_CMND_I2CDRIVER "|"
-#endif
-#ifdef USE_CRASH
- D_CMND_CRASH "|"
#endif
D_CMND_SENSOR "|" D_CMND_DRIVER ;
@@ -47,9 +44,6 @@ void (* const TasmotaCommand[])(void) PROGMEM = {
&CmndTimeDst, &CmndAltitude, &CmndLedPower, &CmndLedState, &CmndLedMask, &CmndWifiPower, &CmndTempOffset,
#ifdef USE_I2C
&CmndI2cScan, CmndI2cDriver,
-#endif
-#ifdef USE_CRASH
- &CmndCrash,
#endif
&CmndSensor, &CmndDriver };
@@ -577,6 +571,9 @@ void CmndRestart(void)
restart_flag = 2;
ResponseCmndChar(D_JSON_RESTARTING);
break;
+ case -1:
+ CmndCrash(); // force a crash
+ break;
case 99:
AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_RESTARTING));
EspRestart();
diff --git a/tasmota/support_crash_recorder.ino b/tasmota/support_crash_recorder.ino
index be0cde11b..abd948c39 100644
--- a/tasmota/support_crash_recorder.ino
+++ b/tasmota/support_crash_recorder.ino
@@ -46,12 +46,8 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
// Generate a crash to test the crash recorder
void CmndCrash(void)
{
- if (1 == XdrvMailbox.payload) {
- volatile uint32_t dummy;
- dummy = *((uint32_t*) 0x00000000); // invalid address
- } else {
- ResponseCmndChar(D_JSON_ONE_TO_CRASH);
- }
+ volatile uint32_t dummy;
+ dummy = *((uint32_t*) 0x00000000);
}
// Clear the RTC dump area when we do a normal reboot, this avoids garbage data to stay in RTC
From 7e1e85eba95355fd814f393be8739b3f6a4008d4 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 7 Dec 2019 11:01:48 +0100
Subject: [PATCH 016/559] Add save call stack in RTC memory in case of crash
---
tasmota/support_command.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index 23ce1f22e..2ba09629e 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -45,7 +45,7 @@ void (* const TasmotaCommand[])(void) PROGMEM = {
#ifdef USE_I2C
&CmndI2cScan, CmndI2cDriver,
#endif
- &CmndSensor, &CmndDriver };
+ &CmndSensor, &CmndDriver};
const char kWifiConfig[] PROGMEM =
D_WCFG_0_RESTART "||" D_WCFG_2_WIFIMANAGER "||" D_WCFG_4_RETRY "|" D_WCFG_5_WAIT "|" D_WCFG_6_SERIAL "|" D_WCFG_7_WIFIMANAGER_RESET_ONLY;
From edc2dc5c7947fedf80e2f55c34d875ef2d5d294a Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 7 Dec 2019 11:02:37 +0100
Subject: [PATCH 017/559] Add save call stack in RTC memory in case of crash
---
tasmota/support_command.ino | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index 2ba09629e..f6baeef4e 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -30,7 +30,7 @@ const char kTasmotaCommands[] PROGMEM = "|" // No prefix
#ifdef USE_I2C
D_CMND_I2CSCAN "|" D_CMND_I2CDRIVER "|"
#endif
- D_CMND_SENSOR "|" D_CMND_DRIVER ;
+ D_CMND_SENSOR "|" D_CMND_DRIVER;
void (* const TasmotaCommand[])(void) PROGMEM = {
&CmndBacklog, &CmndDelay, &CmndPower, &CmndStatus, &CmndState, &CmndSleep, &CmndUpgrade, &CmndUpgrade, &CmndOtaUrl,
@@ -45,7 +45,7 @@ void (* const TasmotaCommand[])(void) PROGMEM = {
#ifdef USE_I2C
&CmndI2cScan, CmndI2cDriver,
#endif
- &CmndSensor, &CmndDriver};
+ &CmndSensor, &CmndDriver };
const char kWifiConfig[] PROGMEM =
D_WCFG_0_RESTART "||" D_WCFG_2_WIFIMANAGER "||" D_WCFG_4_RETRY "|" D_WCFG_5_WAIT "|" D_WCFG_6_SERIAL "|" D_WCFG_7_WIFIMANAGER_RESET_ONLY;
From a8c0c4e312015ba96e3d07b3b8effa24638a972d Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 7 Dec 2019 15:01:39 +0100
Subject: [PATCH 018/559] Remove any whitespace in TlsKey base64
---
tasmota/xdrv_02_mqtt.ino | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/tasmota/xdrv_02_mqtt.ino b/tasmota/xdrv_02_mqtt.ino
index 49f35d579..a6994ebfb 100644
--- a/tasmota/xdrv_02_mqtt.ino
+++ b/tasmota/xdrv_02_mqtt.ino
@@ -1071,6 +1071,19 @@ void CmndTlsKey(void) {
}
memcpy_P(spi_buffer, tls_spi_start, tls_spi_len);
+ // remove any white space from the base64
+ char *cursor = XdrvMailbox.data;
+ uint32_t offset = 0;
+ while (1) {
+ *cursor = *(cursor + offset);
+ if ((' ' == *cursor) || ('\t' == *cursor) || ('\n' == *cursor)) { // if space found, remove this char until end of string
+ offset++;
+ } else {
+ if (0 == *cursor) { break; }
+ cursor++;
+ }
+ }
+
// allocate buffer for decoded base64
uint32_t bin_len = decode_base64_length((unsigned char*)XdrvMailbox.data);
uint8_t *bin_buf = nullptr;
From 2686ccb117e55462ae9d02c87732b48d5373bccb Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 7 Dec 2019 16:50:10 +0100
Subject: [PATCH 019/559] Revert "Merge pull request #7134 from
s-hadinger/crashrecorder_rtc"
This reverts commit 758b25507822ad3c862216feb4c1af4fd5d53e78, reversing
changes made to f4993736a500ffada2a110236dab04a93220d7e0.
---
tasmota/CHANGELOG.md | 1 -
tasmota/i18n.h | 1 -
tasmota/support_command.ino | 10 ----
tasmota/support_crash_recorder.ino | 76 ------------------------------
tasmota/support_wifi.ino | 1 -
tasmota/tasmota.h | 2 +-
6 files changed, 1 insertion(+), 90 deletions(-)
delete mode 100644 tasmota/support_crash_recorder.ino
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 10c3c6941..4bb5447ad 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -3,7 +3,6 @@
### 7.1.2.2 20191206
- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config (#7108)
-- Add save call stack in RTC memory in case of crash, command ``Status 12`` to dump the stack
### 7.1.2.1 20191206
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index f913c14d2..dfa998474 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -208,7 +208,6 @@
#define D_STATUS9_MARGIN "PTH"
#define D_STATUS10_SENSOR "SNS"
#define D_STATUS11_STATUS "STS"
- #define D_STATUS12_STATUS "STK"
#define D_CMND_STATE "State"
#define D_CMND_POWER "Power"
#define D_CMND_FANSPEED "FanSpeed"
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index f6baeef4e..070409566 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -483,13 +483,6 @@ void CmndStatus(void)
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "11"));
}
- if ((0 == payload) || (12 == payload)) {
- Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS12_STATUS "\":"));
- CrashDump();
- ResponseJsonEnd();
- MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "12"));
- }
-
#ifdef USE_SCRIPT_STATUS
if (bitRead(Settings.rule_enabled, 0)) Run_Scripter(">U",2,mqtt_data);
#endif
@@ -571,9 +564,6 @@ void CmndRestart(void)
restart_flag = 2;
ResponseCmndChar(D_JSON_RESTARTING);
break;
- case -1:
- CmndCrash(); // force a crash
- break;
case 99:
AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_RESTARTING));
EspRestart();
diff --git a/tasmota/support_crash_recorder.ino b/tasmota/support_crash_recorder.ino
deleted file mode 100644
index abd948c39..000000000
--- a/tasmota/support_crash_recorder.ino
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- support_crash_recorder.ino - record the call stack in RTC in cas of crash
-
- Copyright (C) 2019 Stephan Hadinger, 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 .
-*/
-
-const uint32_t dump_max_len = 64; // dump only 64 call addresses
-
-/**
- * Save crash information in RTC memory
- * This function is called automatically if ESP8266 suffers an exception
- * It should be kept quick / consise to be able to execute before hardware wdt may kick in
- */
-extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack, uint32_t stack_end ) {
- uint32_t addr_written = 0; // how many addresses have we already written in RTC
- uint32_t value; // 4 bytes buffer to write to RTC
-
- for (uint32_t i = stack; i < stack_end; i += 4) {
- value = *((uint32_t*) i); // load value from stack
- if ((value >= 0x40000000) && (value < 0x40300000)) { // keep only addresses in code area
- ESP.rtcUserMemoryWrite(addr_written, (uint32_t*)&value, sizeof(value));
- addr_written++;
- if (addr_written >= dump_max_len) { break; } // we store only 64 addresses
- }
- }
- // fill the rest of RTC with zeros
- value = 0;
- while (addr_written < dump_max_len) {
- ESP.rtcUserMemoryWrite(addr_written++, (uint32_t*)&value, sizeof(value));
- }
-}
-
-// Generate a crash to test the crash recorder
-void CmndCrash(void)
-{
- volatile uint32_t dummy;
- dummy = *((uint32_t*) 0x00000000);
-}
-
-// Clear the RTC dump area when we do a normal reboot, this avoids garbage data to stay in RTC
-void CrashDumpClear(void) {
- uint32_t value = 0;
- for (uint32_t i = 0; i < dump_max_len; i++) {
- ESP.rtcUserMemoryWrite(i, (uint32_t*)&value, sizeof(value));
- }
-}
-
-/*********************************************************************************************\
- * CmndCrashDump - dump the crash history - called by `Status 12`
-\*********************************************************************************************/
-void CrashDump(void)
-{
- ResponseAppend_P(PSTR("{\"call_chain\":["));
- for (uint32_t i = 0; i < dump_max_len; i++) {
- uint32_t value;
- ESP.rtcUserMemoryRead(i, (uint32_t*)&value, sizeof(value));
- if ((value >= 0x40000000) && (value < 0x40300000)) {
- if (i > 0) { ResponseAppend_P(PSTR(",")); }
- ResponseAppend_P(PSTR("\"%08x\""), value);
- }
- }
- ResponseAppend_P(PSTR("]}"));
-}
diff --git a/tasmota/support_wifi.ino b/tasmota/support_wifi.ino
index 06d922b26..49faa0663 100644
--- a/tasmota/support_wifi.ino
+++ b/tasmota/support_wifi.ino
@@ -617,7 +617,6 @@ void WifiShutdown(void)
void EspRestart(void)
{
WifiShutdown();
- CrashDumpClear(); // Clear the stack dump in RTC
// ESP.restart(); // This results in exception 3 on restarts on core 2.3.0
ESP.reset();
}
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index c31bfad83..cefef3a06 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -131,7 +131,7 @@ const uint32_t SOFT_BAUDRATE = 9600; // Default software serial baudrate
const uint32_t APP_BAUDRATE = 115200; // Default serial baudrate
const uint32_t SERIAL_POLLING = 100; // Serial receive polling in ms
const uint32_t ZIGBEE_POLLING = 100; // Serial receive polling in ms
-const uint8_t MAX_STATUS = 12; // Max number of status lines
+const uint8_t MAX_STATUS = 11; // Max number of status lines
const uint32_t START_VALID_TIME = 1451602800; // Time is synced and after 2016-01-01
From f3a5b033c8ca527da001dc34121a45f269f98f78 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 7 Dec 2019 18:32:39 +0100
Subject: [PATCH 020/559] Add save call stack in RTC memory in case of crash
Add save call stack in RTC memory in case of crash, command ``Status 12`` to dump the stack (#7114, #5883)
---
tasmota/CHANGELOG.md | 1 +
tasmota/i18n.h | 1 +
tasmota/support_command.ino | 10 ++++
tasmota/support_crash_recorder.ino | 78 ++++++++++++++++++++++++++++++
tasmota/support_wifi.ino | 1 +
tasmota/tasmota.h | 2 +-
6 files changed, 92 insertions(+), 1 deletion(-)
create mode 100644 tasmota/support_crash_recorder.ino
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 4bb5447ad..10c3c6941 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -3,6 +3,7 @@
### 7.1.2.2 20191206
- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config (#7108)
+- Add save call stack in RTC memory in case of crash, command ``Status 12`` to dump the stack
### 7.1.2.1 20191206
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index dfa998474..f913c14d2 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -208,6 +208,7 @@
#define D_STATUS9_MARGIN "PTH"
#define D_STATUS10_SENSOR "SNS"
#define D_STATUS11_STATUS "STS"
+ #define D_STATUS12_STATUS "STK"
#define D_CMND_STATE "State"
#define D_CMND_POWER "Power"
#define D_CMND_FANSPEED "FanSpeed"
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index 070409566..f6baeef4e 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -483,6 +483,13 @@ void CmndStatus(void)
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "11"));
}
+ if ((0 == payload) || (12 == payload)) {
+ Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS12_STATUS "\":"));
+ CrashDump();
+ ResponseJsonEnd();
+ MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "12"));
+ }
+
#ifdef USE_SCRIPT_STATUS
if (bitRead(Settings.rule_enabled, 0)) Run_Scripter(">U",2,mqtt_data);
#endif
@@ -564,6 +571,9 @@ void CmndRestart(void)
restart_flag = 2;
ResponseCmndChar(D_JSON_RESTARTING);
break;
+ case -1:
+ CmndCrash(); // force a crash
+ break;
case 99:
AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_RESTARTING));
EspRestart();
diff --git a/tasmota/support_crash_recorder.ino b/tasmota/support_crash_recorder.ino
new file mode 100644
index 000000000..2c217e2ba
--- /dev/null
+++ b/tasmota/support_crash_recorder.ino
@@ -0,0 +1,78 @@
+/*
+ support_crash_recorder.ino - record the call stack in RTC in cas of crash
+
+ Copyright (C) 2019 Stephan Hadinger, 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 .
+*/
+
+const uint32_t dump_max_len = 63; // dump only 64 call addresses
+
+/**
+ * Save crash information in RTC memory
+ * This function is called automatically if ESP8266 suffers an exception
+ * It should be kept quick / consise to be able to execute before hardware wdt may kick in
+ */
+extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack, uint32_t stack_end ) {
+ uint32_t addr_written = 0; // how many addresses have we already written in RTC
+ uint32_t value; // 4 bytes buffer to write to RTC
+
+ for (uint32_t i = stack; i < stack_end; i += 4) {
+ value = *((uint32_t*) i); // load value from stack
+ if ((value >= 0x40000000) && (value < 0x40300000)) { // keep only addresses in code area
+ ESP.rtcUserMemoryWrite(addr_written, (uint32_t*)&value, sizeof(value));
+ addr_written++;
+ if (addr_written >= dump_max_len) { break; } // we store only 63 addresses
+ }
+ }
+ // fill the rest of RTC with the amount of addresses
+ value = addr_written;
+ while (addr_written < dump_max_len +1) {
+ ESP.rtcUserMemoryWrite(addr_written++, (uint32_t*)&value, sizeof(value));
+ }
+}
+
+// Generate a crash to test the crash recorder
+void CmndCrash(void)
+{
+ volatile uint32_t dummy;
+ dummy = *((uint32_t*) 0x00000000);
+}
+
+// Clear the RTC dump counter when we do a normal reboot, this avoids garbage data to stay in RTC
+void CrashDumpClear(void) {
+ uint32_t value = 0;
+ ESP.rtcUserMemoryWrite(dump_max_len, (uint32_t*)&value, sizeof(value));
+}
+
+/*********************************************************************************************\
+ * CmndCrashDump - dump the crash history - called by `Status 12`
+\*********************************************************************************************/
+void CrashDump(void)
+{
+ ResponseAppend_P(PSTR("{\"call_chain\":["));
+
+ uint32_t value;
+ ESP.rtcUserMemoryRead(dump_max_len, (uint32_t*)&value, sizeof(value));
+ uint32_t count = value & 0x3F;
+
+ for (uint32_t i = 0; i < count; i++) {
+ ESP.rtcUserMemoryRead(i, (uint32_t*)&value, sizeof(value));
+ if ((value >= 0x40000000) && (value < 0x40300000)) {
+ if (i > 0) { ResponseAppend_P(PSTR(",")); }
+ ResponseAppend_P(PSTR("\"%08x\""), value);
+ }
+ }
+ ResponseAppend_P(PSTR("]}"));
+}
diff --git a/tasmota/support_wifi.ino b/tasmota/support_wifi.ino
index 49faa0663..06d922b26 100644
--- a/tasmota/support_wifi.ino
+++ b/tasmota/support_wifi.ino
@@ -617,6 +617,7 @@ void WifiShutdown(void)
void EspRestart(void)
{
WifiShutdown();
+ CrashDumpClear(); // Clear the stack dump in RTC
// ESP.restart(); // This results in exception 3 on restarts on core 2.3.0
ESP.reset();
}
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index cefef3a06..c31bfad83 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -131,7 +131,7 @@ const uint32_t SOFT_BAUDRATE = 9600; // Default software serial baudrate
const uint32_t APP_BAUDRATE = 115200; // Default serial baudrate
const uint32_t SERIAL_POLLING = 100; // Serial receive polling in ms
const uint32_t ZIGBEE_POLLING = 100; // Serial receive polling in ms
-const uint8_t MAX_STATUS = 11; // Max number of status lines
+const uint8_t MAX_STATUS = 12; // Max number of status lines
const uint32_t START_VALID_TIME = 1451602800; // Time is synced and after 2016-01-01
From 368e9cc34028500725734e0cc050f28ef06fbe0d Mon Sep 17 00:00:00 2001
From: Federico Leoni
Date: Sat, 7 Dec 2019 15:20:47 -0300
Subject: [PATCH 021/559] Update xdrv_12_home_assistant.ino
---
tasmota/xdrv_12_home_assistant.ino | 1 +
1 file changed, 1 insertion(+)
diff --git a/tasmota/xdrv_12_home_assistant.ino b/tasmota/xdrv_12_home_assistant.ino
index 38c36ead1..22c0e370e 100644
--- a/tasmota/xdrv_12_home_assistant.ino
+++ b/tasmota/xdrv_12_home_assistant.ino
@@ -86,6 +86,7 @@ const char HASS_DISCOVER_SENSOR[] PROGMEM =
"{\"name\":\"%s\"," // dualr2 1 BTN
"\"stat_t\":\"%s\"," // cmnd/dualr2/POWER (implies "\"optimistic\":\"false\",")
"\"avty_t\":\"%s\"," // tele/dualr2/LWT
+ "\"frc_upd\":true," // force update for better graph representation
"\"pl_avail\":\"" D_ONLINE "\"," // Online
"\"pl_not_avail\":\"" D_OFFLINE "\""; // Offline
From dae622b2cb2aa0e2e0ecf3cfc770b3cd87f24c24 Mon Sep 17 00:00:00 2001
From: Federico Leoni
Date: Sat, 7 Dec 2019 15:44:33 -0300
Subject: [PATCH 022/559] Update my_user_config.h
---
tasmota/my_user_config.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 7ef154d53..d780f3d35 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -284,7 +284,7 @@
#define DOMOTICZ_OUT_TOPIC "domoticz/out" // Domoticz Output Topic
// -- MQTT - Home Assistant Discovery -------------
-#define USE_HOME_ASSISTANT // Enable Home Assistant Discovery Support (+7k code)
+#define USE_HOME_ASSISTANT // Enable Home Assistant Discovery Support (+4.1k code, +6 bytes mem)
#define HOME_ASSISTANT_DISCOVERY_PREFIX "homeassistant" // Home Assistant discovery prefix
// -- MQTT - TLS - AWS IoT ------------------------
From fd079c57a3fd3861e6540f2e975b0e3a8796d333 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 7 Dec 2019 23:25:56 +0100
Subject: [PATCH 023/559] Fix crashdump bad JSON
---
tasmota/support_crash_recorder.ino | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/tasmota/support_crash_recorder.ino b/tasmota/support_crash_recorder.ino
index 2c217e2ba..c89fa681b 100644
--- a/tasmota/support_crash_recorder.ino
+++ b/tasmota/support_crash_recorder.ino
@@ -69,10 +69,8 @@ void CrashDump(void)
for (uint32_t i = 0; i < count; i++) {
ESP.rtcUserMemoryRead(i, (uint32_t*)&value, sizeof(value));
- if ((value >= 0x40000000) && (value < 0x40300000)) {
- if (i > 0) { ResponseAppend_P(PSTR(",")); }
- ResponseAppend_P(PSTR("\"%08x\""), value);
- }
+ if (i > 0) { ResponseAppend_P(PSTR(",")); }
+ ResponseAppend_P(PSTR("\"%08x\""), value);
}
ResponseAppend_P(PSTR("]}"));
}
From 29d5d68ca05c807d987cb744d0673f438219552e Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sun, 8 Dec 2019 13:18:15 +0100
Subject: [PATCH 024/559] Redesign Exception reporting
Redesign Exception reporting removing exception details from both MQTT info and Status 1. Now consolidated in Status 12 if available.
---
tasmota/support.ino | 6 ----
tasmota/support_command.ino | 17 +++++----
tasmota/support_crash_recorder.ino | 55 ++++++++++++++++++------------
tasmota/xdrv_02_mqtt.ino | 2 +-
4 files changed, 46 insertions(+), 34 deletions(-)
diff --git a/tasmota/support.ino b/tasmota/support.ino
index f44d14eb7..14f21db01 100644
--- a/tasmota/support.ino
+++ b/tasmota/support.ino
@@ -107,12 +107,6 @@ String GetResetReason(void)
}
}
-String GetResetReasonInfo(void)
-{
- // "Fatal exception:0 flag:2 (EXCEPTION) epc1:0x704022a7 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000000 depc:0x00000000"
- return (ResetReason() == REASON_EXCEPTION_RST) ? ESP.getResetInfo() : GetResetReason();
-}
-
/*********************************************************************************************\
* Miscellaneous
\*********************************************************************************************/
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index f6baeef4e..09495f55a 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -334,6 +334,9 @@ void CmndStatus(void)
if ((!Settings.flag.mqtt_enabled) && (6 == payload)) { payload = 99; } // SetOption3 - Enable MQTT
if (!energy_flg && (9 == payload)) { payload = 99; }
+ bool exception_flg = (ResetReason() == REASON_EXCEPTION_RST);
+ if (!exception_flg && (12 == payload)) { payload = 99; }
+
if ((0 == payload) || (99 == payload)) {
uint32_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
#ifdef USE_SONOFF_IFAN
@@ -369,7 +372,7 @@ void CmndStatus(void)
D_JSON_RESTARTREASON "\":\"%s\",\"" D_JSON_UPTIME "\":\"%s\",\"" D_JSON_STARTUPUTC "\":\"%s\",\"" D_CMND_SLEEP "\":%d,\""
D_JSON_CONFIG_HOLDER "\":%d,\"" D_JSON_BOOTCOUNT "\":%d,\"" D_JSON_SAVECOUNT "\":%d,\"" D_JSON_SAVEADDRESS "\":\"%X\"}}"),
baudrate, Settings.mqtt_grptopic, Settings.ota_url,
- GetResetReasonInfo().c_str(), GetUptime().c_str(), GetDateAndTime(DT_RESTART).c_str(), Settings.sleep,
+ GetResetReason().c_str(), GetUptime().c_str(), GetDateAndTime(DT_RESTART).c_str(), Settings.sleep,
Settings.cfg_holder, Settings.bootcount, Settings.save_flag, GetSettingsAddress());
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "1"));
}
@@ -483,11 +486,13 @@ void CmndStatus(void)
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "11"));
}
- if ((0 == payload) || (12 == payload)) {
- Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS12_STATUS "\":"));
- CrashDump();
- ResponseJsonEnd();
- MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "12"));
+ if (exception_flg) {
+ if ((0 == payload) || (12 == payload)) {
+ Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS12_STATUS "\":"));
+ CrashDump();
+ ResponseJsonEnd();
+ MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "12"));
+ }
}
#ifdef USE_SCRIPT_STATUS
diff --git a/tasmota/support_crash_recorder.ino b/tasmota/support_crash_recorder.ino
index c89fa681b..87009bbc5 100644
--- a/tasmota/support_crash_recorder.ino
+++ b/tasmota/support_crash_recorder.ino
@@ -1,5 +1,5 @@
/*
- support_crash_recorder.ino - record the call stack in RTC in cas of crash
+ support_crash_recorder.ino - record the call stack in RTC in case of crash
Copyright (C) 2019 Stephan Hadinger, Theo Arends,
@@ -17,30 +17,30 @@
along with this program. If not, see .
*/
-const uint32_t dump_max_len = 63; // dump only 64 call addresses
+const uint32_t crash_magic = 0x53415400; // Stack trace magic number (TASx)
+const uint32_t crash_rtc_offset = 32; // Offset in RTC memory skipping OTA used block
+const uint32_t crash_dump_max_len = 31; // Dump only 31 call addresses to satisfy max JSON length of about 600 characters
/**
* Save crash information in RTC memory
* This function is called automatically if ESP8266 suffers an exception
* It should be kept quick / consise to be able to execute before hardware wdt may kick in
*/
-extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack, uint32_t stack_end ) {
+extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack, uint32_t stack_end )
+{
uint32_t addr_written = 0; // how many addresses have we already written in RTC
uint32_t value; // 4 bytes buffer to write to RTC
for (uint32_t i = stack; i < stack_end; i += 4) {
value = *((uint32_t*) i); // load value from stack
if ((value >= 0x40000000) && (value < 0x40300000)) { // keep only addresses in code area
- ESP.rtcUserMemoryWrite(addr_written, (uint32_t*)&value, sizeof(value));
+ ESP.rtcUserMemoryWrite(crash_rtc_offset + addr_written, (uint32_t*)&value, sizeof(value));
addr_written++;
- if (addr_written >= dump_max_len) { break; } // we store only 63 addresses
+ if (addr_written >= crash_dump_max_len) { break; } // we store only 31 addresses
}
}
- // fill the rest of RTC with the amount of addresses
- value = addr_written;
- while (addr_written < dump_max_len +1) {
- ESP.rtcUserMemoryWrite(addr_written++, (uint32_t*)&value, sizeof(value));
- }
+ value = crash_magic + addr_written;
+ ESP.rtcUserMemoryWrite(crash_rtc_offset + crash_dump_max_len, (uint32_t*)&value, sizeof(value));
}
// Generate a crash to test the crash recorder
@@ -51,26 +51,39 @@ void CmndCrash(void)
}
// Clear the RTC dump counter when we do a normal reboot, this avoids garbage data to stay in RTC
-void CrashDumpClear(void) {
+void CrashDumpClear(void)
+{
uint32_t value = 0;
- ESP.rtcUserMemoryWrite(dump_max_len, (uint32_t*)&value, sizeof(value));
+ ESP.rtcUserMemoryWrite(crash_rtc_offset + crash_dump_max_len, (uint32_t*)&value, sizeof(value));
}
/*********************************************************************************************\
* CmndCrashDump - dump the crash history - called by `Status 12`
\*********************************************************************************************/
+
void CrashDump(void)
{
- ResponseAppend_P(PSTR("{\"call_chain\":["));
+ ResponseAppend_P(PSTR("{\"Exception\":%d,\"Reason\":\"%s\",\"EPC\":[\"%08x\",\"%08x\",\"%08x\"],\"EXCVADDR\":\"%08x\",\"DEPC\":\"%08x\""),
+ resetInfo.exccause, // Exception Cause
+ GetResetReason().c_str(), // Reset Reason
+ resetInfo.epc1, // Exception Progam Counter
+ resetInfo.epc2, // Exception Progam Counter - High-Priority Interrupt 1
+ resetInfo.epc3, // Exception Progam Counter - High-Priority Interrupt 2
+ resetInfo.excvaddr, // Exception Virtual Address Register - Virtual address that caused last fetch, load, or store exception
+ resetInfo.depc); // Double Exception Program Counter
uint32_t value;
- ESP.rtcUserMemoryRead(dump_max_len, (uint32_t*)&value, sizeof(value));
- uint32_t count = value & 0x3F;
-
- for (uint32_t i = 0; i < count; i++) {
- ESP.rtcUserMemoryRead(i, (uint32_t*)&value, sizeof(value));
- if (i > 0) { ResponseAppend_P(PSTR(",")); }
- ResponseAppend_P(PSTR("\"%08x\""), value);
+ ESP.rtcUserMemoryRead(crash_rtc_offset + crash_dump_max_len, (uint32_t*)&value, sizeof(value));
+ if (crash_magic == (value & 0xFFFFFF00)) {
+ ResponseAppend_P(PSTR(",\"CallChain\":["));
+ uint32_t count = value & 0x3F;
+ for (uint32_t i = 0; i < count; i++) {
+ ESP.rtcUserMemoryRead(crash_rtc_offset +i, (uint32_t*)&value, sizeof(value));
+ if (i > 0) { ResponseAppend_P(PSTR(",")); }
+ ResponseAppend_P(PSTR("\"%08x\""), value);
+ }
+ ResponseAppend_P(PSTR("]"));
}
- ResponseAppend_P(PSTR("]}"));
+
+ ResponseJsonEnd();
}
diff --git a/tasmota/xdrv_02_mqtt.ino b/tasmota/xdrv_02_mqtt.ino
index a6994ebfb..d31d0a860 100644
--- a/tasmota/xdrv_02_mqtt.ino
+++ b/tasmota/xdrv_02_mqtt.ino
@@ -555,7 +555,7 @@ void MqttConnected(void)
MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_INFO "2"));
}
#endif // USE_WEBSERVER
- Response_P(PSTR("{\"" D_JSON_RESTARTREASON "\":\"%s\"}"), GetResetReasonInfo().c_str());
+ Response_P(PSTR("{\"" D_JSON_RESTARTREASON "\":\"%s\"}"), GetResetReason().c_str());
MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_INFO "3"));
MqttPublishAllPowerState();
if (Settings.tele_period) {
From c06008935878a84676c8df9eb95d8aabb7acab27 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sun, 8 Dec 2019 13:37:18 +0100
Subject: [PATCH 025/559] Bump version to 7.1.2.3
Redesign Exception reporting removing exception details from both MQTT info and Status 1. Now consolidated in Status 12 if available.
---
tasmota/CHANGELOG.md | 4 ++++
tasmota/tasmota_version.h | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 10c3c6941..240bca728 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -1,5 +1,9 @@
## Unreleased (development)
+### 7.1.2.3 20191208
+
+- Redesign Exception reporting removing exception details from both MQTT info and Status 1. Now consolidated in Status 12 if available.
+
### 7.1.2.2 20191206
- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config (#7108)
diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h
index 929924840..9b94a31f5 100644
--- a/tasmota/tasmota_version.h
+++ b/tasmota/tasmota_version.h
@@ -20,6 +20,6 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x07010202;
+const uint32_t VERSION = 0x07010203;
#endif // _TASMOTA_VERSION_H_
From 46566952a052b1a4a08f4f86547373160c0c7f20 Mon Sep 17 00:00:00 2001
From: Andreas Schultz
Date: Sun, 8 Dec 2019 19:42:08 +0100
Subject: [PATCH 026/559] report Signal Strength in dBm over MQTT
Also include dBm in debug log and in WebIf information display.
---
tasmota/i18n.h | 1 +
tasmota/support.ino | 2 +-
tasmota/support_tasmota.ino | 5 +++--
tasmota/xdrv_01_webserver.ino | 6 +++---
4 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index f913c14d2..9b0457e19 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -134,6 +134,7 @@
#define D_JSON_SELECTED "selected"
#define D_JSON_SERIALRECEIVED "SerialReceived"
#define D_JSON_SET "Set"
+#define D_JSON_SIGNAL "Signal"
#define D_JSON_SSID "SSId"
#define D_JSON_STARTDST "StartDST" // Start Daylight Savings Time
#define D_JSON_STARTED "Started"
diff --git a/tasmota/support.ino b/tasmota/support.ino
index 14f21db01..ef3b8d9ee 100644
--- a/tasmota/support.ino
+++ b/tasmota/support.ino
@@ -51,7 +51,7 @@ void OsWatchTicker(void)
uint32_t last_run = abs(t - oswatch_last_loop_time);
#ifdef DEBUG_THEO
- AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_OSWATCH " FreeRam %d, rssi %d, last_run %d"), ESP.getFreeHeap(), WifiGetRssiAsQuality(WiFi.RSSI()), last_run);
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_OSWATCH " FreeRam %d, rssi %d %% (%d dBm), last_run %d"), ESP.getFreeHeap(), WifiGetRssiAsQuality(WiFi.RSSI()), WiFi.RSSI(), last_run);
#endif // DEBUG_THEO
if (last_run >= (OSWATCH_RESET_TIME * 1000)) {
// AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_OSWATCH " " D_BLOCKED_LOOP ". " D_RESTARTING)); // Save iram space
diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino
index 96cec9c5a..2ab8fa0d7 100644
--- a/tasmota/support_tasmota.ino
+++ b/tasmota/support_tasmota.ino
@@ -583,8 +583,9 @@ void MqttShowState(void)
MqttShowPWMState();
}
- ResponseAppend_P(PSTR(",\"" D_JSON_WIFI "\":{\"" D_JSON_AP "\":%d,\"" D_JSON_SSID "\":\"%s\",\"" D_JSON_BSSID "\":\"%s\",\"" D_JSON_CHANNEL "\":%d,\"" D_JSON_RSSI "\":%d,\"" D_JSON_LINK_COUNT "\":%d,\"" D_JSON_DOWNTIME "\":\"%s\"}}"),
- Settings.sta_active +1, Settings.sta_ssid[Settings.sta_active], WiFi.BSSIDstr().c_str(), WiFi.channel(), WifiGetRssiAsQuality(WiFi.RSSI()), WifiLinkCount(), WifiDowntime().c_str());
+ ResponseAppend_P(PSTR(",\"" D_JSON_WIFI "\":{\"" D_JSON_AP "\":%d,\"" D_JSON_SSID "\":\"%s\",\"" D_JSON_BSSID "\":\"%s\",\"" D_JSON_CHANNEL "\":%d,\"" D_JSON_RSSI "\":%d,\"" D_JSON_SIGNAL "\":%d,\"" D_JSON_LINK_COUNT "\":%d,\"" D_JSON_DOWNTIME "\":\"%s\"}}"),
+ Settings.sta_active +1, Settings.sta_ssid[Settings.sta_active], WiFi.BSSIDstr().c_str(), WiFi.channel(),
+ WifiGetRssiAsQuality(WiFi.RSSI()), WiFi.RSSI(), WifiLinkCount(), WifiDowntime().c_str());
}
void MqttPublishTeleState(void)
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index 48e2cd26a..15707d224 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -1638,11 +1638,11 @@ void HandleWifiConfiguration(void)
int quality = WifiGetRssiAsQuality(WiFi.RSSI(indices[i]));
int auth = WiFi.encryptionType(indices[i]);
char encryption[20];
- WSContentSend_P(PSTR(""),
+ WSContentSend_P(PSTR("%s (%d) 
%s %d%% (%d dBm) "),
HtmlEscape(WiFi.SSID(indices[i])).c_str(),
WiFi.channel(indices[i]),
GetTextIndexed(encryption, sizeof(encryption), auth +1, kEncryptionType),
- quality
+ quality, WiFi.RSSI()
);
delay(0);
@@ -1970,7 +1970,7 @@ void HandleInformation(void)
WSContentSend_P(PSTR("}1" D_FRIENDLY_NAME " %d}2%s"), i +1, Settings.friendlyname[i]);
}
WSContentSend_P(PSTR("}1}2 ")); // Empty line
- WSContentSend_P(PSTR("}1" D_AP "%d " D_SSID " (" D_RSSI ")}2%s (%d%%)"), Settings.sta_active +1, Settings.sta_ssid[Settings.sta_active], WifiGetRssiAsQuality(WiFi.RSSI()));
+ WSContentSend_P(PSTR("}1" D_AP "%d " D_SSID " (" D_RSSI ")}2%s (%d%%, %d dBm)"), Settings.sta_active +1, Settings.sta_ssid[Settings.sta_active], WifiGetRssiAsQuality(WiFi.RSSI()), WiFi.RSSI());
WSContentSend_P(PSTR("}1" D_HOSTNAME "}2%s%s"), my_hostname, (Wifi.mdns_begun) ? ".local" : "");
if (static_cast(WiFi.localIP()) != 0) {
WSContentSend_P(PSTR("}1" D_IP_ADDRESS "}2%s"), WiFi.localIP().toString().c_str());
From 6c3d02928617fa34291088df1d87ee2d75098e60 Mon Sep 17 00:00:00 2001
From: Shantur Rathore
Date: Fri, 29 Nov 2019 17:28:25 +0000
Subject: [PATCH 027/559] Implement capability for setting CORS to a specific
website instead of just enable for all websites
---
tasmota/i18n.h | 1 +
tasmota/language/bg-BG.h | 1 +
tasmota/language/cs-CZ.h | 1 +
tasmota/language/de-DE.h | 1 +
tasmota/language/el-GR.h | 1 +
tasmota/language/en-GB.h | 1 +
tasmota/language/es-ES.h | 1 +
tasmota/language/fr-FR.h | 1 +
tasmota/language/he-HE.h | 1 +
tasmota/language/hu-HU.h | 1 +
tasmota/language/it-IT.h | 1 +
tasmota/language/ko-KO.h | 1 +
tasmota/language/nl-NL.h | 1 +
tasmota/language/pl-PL.h | 1 +
tasmota/language/pt-BR.h | 1 +
tasmota/language/pt-PT.h | 1 +
tasmota/language/ru-RU.h | 1 +
tasmota/language/sk-SK.h | 1 +
tasmota/language/sv-SE.h | 1 +
tasmota/language/tr-TR.h | 1 +
tasmota/language/uk-UK.h | 1 +
tasmota/language/zh-CN.h | 1 +
tasmota/language/zh-TW.h | 1 +
tasmota/my_user_config.h | 6 +++---
tasmota/settings.h | 5 +++--
tasmota/settings.ino | 13 +++++++++++++
tasmota/tasmota_version.h | 2 +-
tasmota/xdrv_01_webserver.ino | 25 ++++++++++++++++++-------
28 files changed, 61 insertions(+), 13 deletions(-)
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index 9b0457e19..f4fde64b3 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -335,6 +335,7 @@
#define D_CMND_WEBSENSOR "WebSensor"
#define D_CMND_EMULATION "Emulation"
#define D_CMND_SENDMAIL "Sendmail"
+#define D_CMND_CORS "CORS"
// Commands xdrv_03_energy.ino
#define D_CMND_POWERLOW "PowerLow"
diff --git a/tasmota/language/bg-BG.h b/tasmota/language/bg-BG.h
index 4bc5feebd..d39aba5f6 100644
--- a/tasmota/language/bg-BG.h
+++ b/tasmota/language/bg-BG.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Хладна"
#define D_COMMAND "Команда"
#define D_CONNECTED "Свързан"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Брой"
#define D_COUNTER "Брояч"
#define D_CURRENT "Ток" // As in Voltage and Current
diff --git a/tasmota/language/cs-CZ.h b/tasmota/language/cs-CZ.h
index 8800368a3..1d7c6f381 100644
--- a/tasmota/language/cs-CZ.h
+++ b/tasmota/language/cs-CZ.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Studené světlo"
#define D_COMMAND "Příkaz"
#define D_CONNECTED "...připojeno"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Počítej"
#define D_COUNTER "Počítadlo"
#define D_CURRENT "Proud" // As in Voltage and Current
diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h
index c50de823f..6569dd232 100644
--- a/tasmota/language/de-DE.h
+++ b/tasmota/language/de-DE.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "kalt"
#define D_COMMAND "Befehl"
#define D_CONNECTED "verbunden"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "zählen"
#define D_COUNTER "Zähler"
#define D_CURRENT "Strom" // As in Voltage and Current
diff --git a/tasmota/language/el-GR.h b/tasmota/language/el-GR.h
index 4fe47ae6d..f8b9c9614 100644
--- a/tasmota/language/el-GR.h
+++ b/tasmota/language/el-GR.h
@@ -72,6 +72,7 @@
#define D_COMMAND "Εντολή"
#define D_CONNECTED "Συνδεδεμένο"
#define D_COUNT "Μέτρηση"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNTER "Μετρητής"
#define D_CURRENT "Ένταση" // As in Voltage and Current
#define D_DATA "Δεδομένα"
diff --git a/tasmota/language/en-GB.h b/tasmota/language/en-GB.h
index a98087a18..257a34c86 100644
--- a/tasmota/language/en-GB.h
+++ b/tasmota/language/en-GB.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Cold"
#define D_COMMAND "Command"
#define D_CONNECTED "Connected"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Count"
#define D_COUNTER "Counter"
#define D_CURRENT "Current" // As in Voltage and Current
diff --git a/tasmota/language/es-ES.h b/tasmota/language/es-ES.h
index 014d822a9..7527bb77a 100644
--- a/tasmota/language/es-ES.h
+++ b/tasmota/language/es-ES.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Fría"
#define D_COMMAND "Comando"
#define D_CONNECTED "Conectado"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Conteo"
#define D_COUNTER "Contador"
#define D_CURRENT "Corriente" // As in Voltage and Current
diff --git a/tasmota/language/fr-FR.h b/tasmota/language/fr-FR.h
index 4704c49e7..236df351b 100644
--- a/tasmota/language/fr-FR.h
+++ b/tasmota/language/fr-FR.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Froid"
#define D_COMMAND "Commande"
#define D_CONNECTED "Connecté"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Compte"
#define D_COUNTER "Compteur"
#define D_CURRENT "Courant" // As in Voltage and Current
diff --git a/tasmota/language/he-HE.h b/tasmota/language/he-HE.h
index 69387ceca..ac4dadb8e 100644
--- a/tasmota/language/he-HE.h
+++ b/tasmota/language/he-HE.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "אור קר"
#define D_COMMAND "פקודה"
#define D_CONNECTED "מחובר"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "סופר"
#define D_COUNTER "מונה"
#define D_CURRENT "נוכחי" // As in Voltage and Current
diff --git a/tasmota/language/hu-HU.h b/tasmota/language/hu-HU.h
index 58f85eb22..62806fa46 100644
--- a/tasmota/language/hu-HU.h
+++ b/tasmota/language/hu-HU.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Hideg fény"
#define D_COMMAND "Parancs"
#define D_CONNECTED "Csatlakoztatva"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Szám"
#define D_COUNTER "Számláló"
#define D_CURRENT "Áramerősség" // As in Voltage and Current
diff --git a/tasmota/language/it-IT.h b/tasmota/language/it-IT.h
index 3029f37da..0585c12d8 100644
--- a/tasmota/language/it-IT.h
+++ b/tasmota/language/it-IT.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Fredda"
#define D_COMMAND "Comando"
#define D_CONNECTED "Connesso"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Conteggio"
#define D_COUNTER "Contatore"
#define D_CURRENT "Corrente" // As in Voltage and Current
diff --git a/tasmota/language/ko-KO.h b/tasmota/language/ko-KO.h
index c6236a05f..bff508474 100644
--- a/tasmota/language/ko-KO.h
+++ b/tasmota/language/ko-KO.h
@@ -72,6 +72,7 @@
#define D_COMMAND "커맨드"
#define D_CONNECTED "연결됨"
#define D_COUNT "횟수"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNTER "Counter"
#define D_CURRENT "전류" // As in Voltage and Current
#define D_DATA "Data"
diff --git a/tasmota/language/nl-NL.h b/tasmota/language/nl-NL.h
index da20ff1d7..75d841ddc 100644
--- a/tasmota/language/nl-NL.h
+++ b/tasmota/language/nl-NL.h
@@ -72,6 +72,7 @@
#define D_COMMAND "Opdracht"
#define D_CONNECTED "Verbonden"
#define D_COUNT "Aantal"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNTER "Teller"
#define D_CURRENT "Stroom" // As in Voltage and Current
#define D_DATA "Data"
diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h
index 7a631f95f..8f5af6813 100644
--- a/tasmota/language/pl-PL.h
+++ b/tasmota/language/pl-PL.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Zimny"
#define D_COMMAND "Komenda"
#define D_CONNECTED "Połączony"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Licz"
#define D_COUNTER "Licznik"
#define D_CURRENT "Prąd" // As in Voltage and Current
diff --git a/tasmota/language/pt-BR.h b/tasmota/language/pt-BR.h
index 2eb81f294..0efa57789 100644
--- a/tasmota/language/pt-BR.h
+++ b/tasmota/language/pt-BR.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Luz fria"
#define D_COMMAND "Comando"
#define D_CONNECTED "Ligado"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Contagem"
#define D_COUNTER "Contador"
#define D_CURRENT "Corrente" // As in Voltage and Current
diff --git a/tasmota/language/pt-PT.h b/tasmota/language/pt-PT.h
index 46bafdef6..a6299c0c8 100644
--- a/tasmota/language/pt-PT.h
+++ b/tasmota/language/pt-PT.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Luz Fria"
#define D_COMMAND "Comando"
#define D_CONNECTED "Ligado"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Contagem"
#define D_COUNTER "Contador"
#define D_CURRENT "Corrente" // As in Voltage and Current
diff --git a/tasmota/language/ru-RU.h b/tasmota/language/ru-RU.h
index 5ff9bff50..3bd788ede 100644
--- a/tasmota/language/ru-RU.h
+++ b/tasmota/language/ru-RU.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Холодный"
#define D_COMMAND "Команда"
#define D_CONNECTED "Соединен"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Подсчет"
#define D_COUNTER "Счетчик"
#define D_CURRENT "Ток" // As in Voltage and Current
diff --git a/tasmota/language/sk-SK.h b/tasmota/language/sk-SK.h
index 57ec74f8a..a64e49e01 100644
--- a/tasmota/language/sk-SK.h
+++ b/tasmota/language/sk-SK.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Studené svetlo"
#define D_COMMAND "Príkaz"
#define D_CONNECTED "...pripojené"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Počítaj"
#define D_COUNTER "Počítadlo"
#define D_CURRENT "Prúd" // As in Voltage and Current
diff --git a/tasmota/language/sv-SE.h b/tasmota/language/sv-SE.h
index aee8fd25d..51ffc2ae3 100644
--- a/tasmota/language/sv-SE.h
+++ b/tasmota/language/sv-SE.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Kallt"
#define D_COMMAND "Kommando"
#define D_CONNECTED "Ansluten"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Räkna"
#define D_COUNTER "Räknare"
#define D_CURRENT "Ström" // As in Voltage and Current
diff --git a/tasmota/language/tr-TR.h b/tasmota/language/tr-TR.h
index 78612dace..6bc48c40f 100644
--- a/tasmota/language/tr-TR.h
+++ b/tasmota/language/tr-TR.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Soğuk"
#define D_COMMAND "Komut"
#define D_CONNECTED "Bağlandı"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Sayı"
#define D_COUNTER "Sayaç"
#define D_CURRENT "Current" // As in Voltage and Current
diff --git a/tasmota/language/uk-UK.h b/tasmota/language/uk-UK.h
index f16d66648..b4a314630 100644
--- a/tasmota/language/uk-UK.h
+++ b/tasmota/language/uk-UK.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "Холодний"
#define D_COMMAND "Команда"
#define D_CONNECTED "Під'єднано"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "Розмір"
#define D_COUNTER "Лічильник"
#define D_CURRENT "Струм" // As in Voltage and Current
diff --git a/tasmota/language/zh-CN.h b/tasmota/language/zh-CN.h
index 2c8610400..21aa63be3 100644
--- a/tasmota/language/zh-CN.h
+++ b/tasmota/language/zh-CN.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "冷"
#define D_COMMAND "命令:"
#define D_CONNECTED "已连接"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "数量:"
#define D_COUNTER "计数器"
#define D_CURRENT "电流" // As in Voltage and Current
diff --git a/tasmota/language/zh-TW.h b/tasmota/language/zh-TW.h
index e5ef8926a..1d78f181e 100644
--- a/tasmota/language/zh-TW.h
+++ b/tasmota/language/zh-TW.h
@@ -71,6 +71,7 @@
#define D_COLDLIGHT "冷"
#define D_COMMAND "命令:"
#define D_CONNECTED "已連接"
+#define D_CORS_DOMAIN "CORS Domain"
#define D_COUNT "數量:"
#define D_COUNTER "Counter"
#define D_CURRENT "電流" // As in Voltage and Current
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index d780f3d35..c643f0a6d 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -132,7 +132,7 @@
#define WEB_PASSWORD "" // [WebPassword] Web server Admin mode Password for WEB_USERNAME (empty string = Disable)
#define FRIENDLY_NAME "Tasmota" // [FriendlyName] Friendlyname up to 32 characters used by webpages and Alexa
#define EMULATION EMUL_NONE // [Emulation] Select Belkin WeMo (single relay/light) or Hue Bridge emulation (multi relay/light) (EMUL_NONE, EMUL_WEMO or EMUL_HUE)
-
+#define CORS_DOMAIN "" // [CorsDomain] CORS Domain for preflight requests
// -- HTTP GUI Colors -----------------------------
// HTML hex color codes. Only 3 and 6 digit hex string values are supported!! See https://www.w3schools.com/colors/colors_hex.asp
// Light theme - pre v7
@@ -219,7 +219,7 @@
#define APP_BLINKTIME 10 // [BlinkTime] Time in 0.1 Sec to blink/toggle power for relay 1
#define APP_BLINKCOUNT 10 // [BlinkCount] Number of blinks (0 = 32000)
#define APP_SLEEP 0 // [Sleep] Sleep time to lower energy consumption (0 = Off, 1 - 250 mSec),
-#define PWM_MAX_SLEEP 10 // Sleep will be lowered to this value when light is on, to avoid flickering
+#define PWM_MAX_SLEEP 10 // Sleep will be lowered to this value when light is on, to avoid flickering
#define KEY_DEBOUNCE_TIME 50 // [ButtonDebounce] Number of mSeconds button press debounce time
#define KEY_HOLD_TIME 40 // [SetOption32] Number of 0.1 seconds to hold Button or external Pushbutton before sending HOLD message
@@ -291,7 +291,7 @@
// Using TLS starting with version v6.5.0.16 compilation will only work using Core 2.4.2 and 2.5.2. No longer supported: 2.3.0
//#define USE_MQTT_TLS // Use TLS for MQTT connection (+34.5k code, +7.0k mem and +4.8k additional during connection handshake)
// #define USE_MQTT_TLS_CA_CERT // Force full CA validation instead of fingerprints, slower, but simpler to use. (+2.2k code, +1.9k mem during connection handshake)
- // This includes the LetsEncrypt CA in tasmota_ca.ino for verifying server certificates
+ // This includes the LetsEncrypt CA in tasmota_ca.ino for verifying server certificates
// #define USE_MQTT_TLS_FORCE_EC_CIPHER // Force Elliptic Curve cipher (higher security) required by some servers (automatically enabled with USE_MQTT_AWS_IOT) (+11.4k code, +0.4k mem)
// #define USE_MQTT_AWS_IOT // Enable MQTT for AWS IoT - requires a private key (+11.9k code, +0.4k mem)
// Note: you need to generate a private key + certificate per device and update 'tasmota/tasmota_aws_iot.cpp'
diff --git a/tasmota/settings.h b/tasmota/settings.h
index f464a24cb..6da25a36b 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -86,7 +86,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
uint32_t energy_weekend : 1; // bit 20 (v6.6.0.8) - CMND_TARIFF
uint32_t dds2382_model : 1; // bit 21 (v6.6.0.14) - SetOption71 - Select different Modbus registers for Active Energy (#6531)
uint32_t hardware_energy_total : 1; // bit 22 (v6.6.0.15) - SetOption72 - Enable hardware energy total counter as reference (#6561)
- uint32_t cors_enabled : 1; // bit 23 (v7.0.0.1) - SetOption73 - Enable HTTP CORS
+ uint32_t ex_cors_enabled : 1; // bit 23 (v7.0.0.1) - SetOption73 - Enable HTTP CORS
uint32_t ds18x20_internal_pullup : 1; // bit 24 (v7.0.0.1) - SetOption74 - Enable internal pullup for single DS18x20 sensor
uint32_t grouptopic_mode : 1; // bit 25 (v7.0.0.1) - SetOption75 - GroupTopic replaces %topic% (0) or fixed topic cmnd/grouptopic (1)
uint32_t bootcount_update : 1; // bit 26 (v7.0.0.4) - SetOption76 - Enable incrementing bootcount when deepsleep is enabled
@@ -438,7 +438,8 @@ struct SYSCFG {
uint8_t web_color2[2][3]; // EA0 - Needs to be on integer / 3 distance from web_color
- uint8_t free_ea4[326]; // EA6
+ char cors_domain[33]; // EC1
+ uint8_t free_ea4[293]; // EA6
uint32_t i2c_drivers[3]; // FEC I2cDriver
uint32_t cfg_timestamp; // FF8
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index f6113be46..50f4fe4a6 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -140,6 +140,10 @@
#ifndef DEFAULT_LIGHT_COMPONENT
#define DEFAULT_LIGHT_COMPONENT 255
#endif
+#ifndef CORS_ENABLED_ALL
+#define CORS_ENABLED_ALL "*"
+#endif
+
enum WebColors {
COL_TEXT, COL_BACKGROUND, COL_FORM,
@@ -718,6 +722,7 @@ void SettingsDefaultSet2(void)
Settings.weblog_level = WEB_LOG_LEVEL;
strlcpy(Settings.web_password, WEB_PASSWORD, sizeof(Settings.web_password));
Settings.flag3.mdns_enabled = MDNS_ENABLED;
+ strlcpy(Settings.cors_domain, CORS_DOMAIN, sizeof(Settings.cors_domain));
// Button
// Settings.flag.button_restrict = 0;
@@ -1177,6 +1182,14 @@ void SettingsDelta(void)
Settings.serial_config = TS_SERIAL_8N1;
}
+ if (Settings.version < 0x07010204) {
+ if (Settings.flag3.ex_cors_enabled == 1) {
+ strlcpy(Settings.cors_domain, CORS_ENABLED_ALL, sizeof(Settings.cors_domain));
+ } else {
+ Settings.cors_domain[0] = 0;
+ }
+ }
+
Settings.version = VERSION;
SettingsSave(1);
}
diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h
index 9b94a31f5..a0cbe1e41 100644
--- a/tasmota/tasmota_version.h
+++ b/tasmota/tasmota_version.h
@@ -20,6 +20,6 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x07010203;
+const uint32_t VERSION = 0x07010204;
#endif // _TASMOTA_VERSION_H_
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index 15707d224..28620e21f 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -414,7 +414,8 @@ const char HTTP_FORM_WIFI[] PROGMEM =
"" D_AP1_PASSWORD "
"
"" D_AP2_SSID " (" STA_SSID2 ")
"
"" D_AP2_PASSWORD "
"
- "" D_HOSTNAME " (%s)
";
+ "" D_HOSTNAME " (%s)
"
+ "" D_CORS_DOMAIN "
";
const char HTTP_FORM_LOG1[] PROGMEM =
"
"));
}
- WSContentSend_P(HTTP_FORM_LOG2, Settings.syslog_host, Settings.syslog_port, Settings.tele_period);
+ WSContentSend_P(HTTP_FORM_LOG2, SettingsText(SET_SYSLOG_HOST), Settings.syslog_port, Settings.tele_period);
WSContentSend_P(HTTP_FORM_END);
WSContentSpaceButton(BUTTON_CONFIGURATION);
WSContentStop();
@@ -1755,7 +1756,7 @@ void HandleLoggingConfiguration(void)
void LoggingSaveSettings(void)
{
- char tmp[sizeof(Settings.syslog_host)]; // Max length is currently 33
+ char tmp[100]; // Max length is currently 33
WebGetArg("l0", tmp, sizeof(tmp));
SetSeriallog((!strlen(tmp)) ? SERIAL_LOG_LEVEL : atoi(tmp));
@@ -1766,7 +1767,7 @@ void LoggingSaveSettings(void)
WebGetArg("l3", tmp, sizeof(tmp));
SetSyslog((!strlen(tmp)) ? SYS_LOG_LEVEL : atoi(tmp));
WebGetArg("lh", tmp, sizeof(tmp));
- strlcpy(Settings.syslog_host, (!strlen(tmp)) ? SYS_LOG_HOST : tmp, sizeof(Settings.syslog_host));
+ SettingsUpdateText(SET_SYSLOG_HOST, (!strlen(tmp)) ? SYS_LOG_HOST : tmp);
WebGetArg("lp", tmp, sizeof(tmp));
Settings.syslog_port = (!strlen(tmp)) ? SYS_LOG_PORT : atoi(tmp);
WebGetArg("lt", tmp, sizeof(tmp));
@@ -1775,7 +1776,7 @@ void LoggingSaveSettings(void)
Settings.tele_period = 10; // Do not allow periods < 10 seconds
}
AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_LOG D_CMND_SERIALLOG " %d, " D_CMND_WEBLOG " %d, " D_CMND_MQTTLOG " %d, " D_CMND_SYSLOG " %d, " D_CMND_LOGHOST " %s, " D_CMND_LOGPORT " %d, " D_CMND_TELEPERIOD " %d"),
- Settings.seriallog_level, Settings.weblog_level, Settings.mqttlog_level, Settings.syslog_level, Settings.syslog_host, Settings.syslog_port, Settings.tele_period);
+ Settings.seriallog_level, Settings.weblog_level, Settings.mqttlog_level, Settings.syslog_level, SettingsText(SET_SYSLOG_HOST), Settings.syslog_port, Settings.tele_period);
}
/*-------------------------------------------------------------------------------------------*/
@@ -1811,7 +1812,7 @@ void HandleOtherConfiguration(void)
(i) ? stemp : "",
i,
(i) ? stemp : "",
- Settings.friendlyname[i]);
+ SettingsText(SET_FRIENDLYNAME1 + i));
}
#ifdef USE_EMULATION
@@ -1843,10 +1844,10 @@ void OtherSaveSettings(void)
{
char tmp[128];
char webindex[5];
- char friendlyname[sizeof(Settings.friendlyname[0])];
+ char friendlyname[TOPSZ];
WebGetArg("wp", tmp, sizeof(tmp));
- strlcpy(Settings.web_password, (!strlen(tmp)) ? "" : (strchr(tmp,'*')) ? Settings.web_password : tmp, sizeof(Settings.web_password));
+ SettingsUpdateText(SET_WEBPWD, (!strlen(tmp)) ? "" : (strchr(tmp,'*')) ? SettingsText(SET_WEBPWD) : tmp);
Settings.flag.mqtt_enabled = WebServer->hasArg("b1"); // SetOption3 - Enable MQTT
#ifdef USE_EMULATION
WebGetArg("b2", tmp, sizeof(tmp));
@@ -1857,8 +1858,8 @@ void OtherSaveSettings(void)
snprintf_P(webindex, sizeof(webindex), PSTR("a%d"), i);
WebGetArg(webindex, tmp, sizeof(tmp));
snprintf_P(friendlyname, sizeof(friendlyname), PSTR(FRIENDLY_NAME"%d"), i +1);
- strlcpy(Settings.friendlyname[i], (!strlen(tmp)) ? (i) ? friendlyname : FRIENDLY_NAME : tmp, sizeof(Settings.friendlyname[i]));
- snprintf_P(log_data, sizeof(log_data), PSTR("%s%s %s"), log_data, (i) ? "," : "", Settings.friendlyname[i]);
+ SettingsUpdateText(SET_FRIENDLYNAME1 +i, (!strlen(tmp)) ? (i) ? friendlyname : FRIENDLY_NAME : tmp);
+ snprintf_P(log_data, sizeof(log_data), PSTR("%s%s %s"), log_data, (i) ? "," : "", SettingsText(SET_FRIENDLYNAME1 +i));
}
AddLog(LOG_LEVEL_INFO);
WebGetArg("t1", tmp, sizeof(tmp));
@@ -1890,8 +1891,8 @@ void HandleBackupConfiguration(void)
char attachment[100];
-// char friendlyname[sizeof(Settings.friendlyname[0])];
-// snprintf_P(attachment, sizeof(attachment), PSTR("attachment; filename=Config_%s_%s.dmp"), NoAlNumToUnderscore(friendlyname, Settings.friendlyname[0]), my_version);
+// char friendlyname[TOPSZ];
+// snprintf_P(attachment, sizeof(attachment), PSTR("attachment; filename=Config_%s_%s.dmp"), NoAlNumToUnderscore(friendlyname, SettingsText(SET_FRIENDLYNAME1)), my_version);
char hostname[sizeof(my_hostname)];
snprintf_P(attachment, sizeof(attachment), PSTR("attachment; filename=Config_%s_%s.dmp"), NoAlNumToUnderscore(hostname, my_hostname), my_version);
@@ -1991,10 +1992,10 @@ void HandleInformation(void)
if (IsModuleIfan()) { maxfn = 1; }
#endif // USE_SONOFF_IFAN
for (uint32_t i = 0; i < maxfn; i++) {
- WSContentSend_P(PSTR("}1" D_FRIENDLY_NAME " %d}2%s"), i +1, Settings.friendlyname[i]);
+ WSContentSend_P(PSTR("}1" D_FRIENDLY_NAME " %d}2%s"), i +1, SettingsText(SET_FRIENDLYNAME1 +i));
}
WSContentSend_P(PSTR("}1}2 ")); // Empty line
- WSContentSend_P(PSTR("}1" D_AP "%d " D_SSID " (" D_RSSI ")}2%s (%d%%, %d dBm)"), Settings.sta_active +1, Settings.sta_ssid[Settings.sta_active], WifiGetRssiAsQuality(WiFi.RSSI()), WiFi.RSSI());
+ WSContentSend_P(PSTR("}1" D_AP "%d " D_SSID " (" D_RSSI ")}2%s (%d%%, %d dBm)"), Settings.sta_active +1, SettingsText(SET_STASSID1 + Settings.sta_active), WifiGetRssiAsQuality(WiFi.RSSI()), WiFi.RSSI());
WSContentSend_P(PSTR("}1" D_HOSTNAME "}2%s%s"), my_hostname, (Wifi.mdns_begun) ? ".local" : "");
#if LWIP_IPV6
String ipv6_addr = WifiGetIPv6();
@@ -2016,17 +2017,12 @@ void HandleInformation(void)
}
WSContentSend_P(PSTR("}1}2 ")); // Empty line
if (Settings.flag.mqtt_enabled) { // SetOption3 - Enable MQTT
-#ifdef USE_MQTT_AWS_IOT
- WSContentSend_P(PSTR("}1" D_MQTT_HOST "}2%s%s"), Settings.mqtt_user, Settings.mqtt_host);
+ WSContentSend_P(PSTR("}1" D_MQTT_HOST "}2%s"), SettingsText(SET_MQTT_HOST));
WSContentSend_P(PSTR("}1" D_MQTT_PORT "}2%d"), Settings.mqtt_port);
-#else
- WSContentSend_P(PSTR("}1" D_MQTT_HOST "}2%s"), Settings.mqtt_host);
- WSContentSend_P(PSTR("}1" D_MQTT_PORT "}2%d"), Settings.mqtt_port);
- WSContentSend_P(PSTR("}1" D_MQTT_USER "}2%s"), Settings.mqtt_user);
-#endif
+ WSContentSend_P(PSTR("}1" D_MQTT_USER "}2%s"), SettingsText(SET_MQTT_USER));
WSContentSend_P(PSTR("}1" D_MQTT_CLIENT "}2%s"), mqtt_client);
- WSContentSend_P(PSTR("}1" D_MQTT_TOPIC "}2%s"), Settings.mqtt_topic);
-// WSContentSend_P(PSTR("}1" D_MQTT_GROUP_TOPIC "}2%s"), Settings.mqtt_grptopic);
+ WSContentSend_P(PSTR("}1" D_MQTT_TOPIC "}2%s"), SettingsText(SET_MQTT_TOPIC));
+// WSContentSend_P(PSTR("}1" D_MQTT_GROUP_TOPIC "}2%s"), SettingsText(SET_MQTT_GRP_TOPIC));
WSContentSend_P(PSTR("}1" D_MQTT_GROUP_TOPIC "}2%s"), GetGroupTopic_P(stopic, ""));
WSContentSend_P(PSTR("}1" D_MQTT_FULL_TOPIC "}2%s"), GetTopic_P(stopic, CMND, mqtt_topic, ""));
WSContentSend_P(PSTR("}1" D_MQTT " " D_FALLBACK_TOPIC "}2%s"), GetFallbackTopic_P(stopic, ""));
@@ -2085,7 +2081,7 @@ void HandleUpgradeFirmware(void)
WSContentStart_P(S_FIRMWARE_UPGRADE);
WSContentSendStyle();
- WSContentSend_P(HTTP_FORM_UPG, Settings.ota_url);
+ WSContentSend_P(HTTP_FORM_UPG, SettingsText(SET_OTAURL));
WSContentSend_P(HTTP_FORM_RST_UPG, D_UPGRADE);
WSContentSpaceButton(BUTTON_MAIN);
WSContentStop();
@@ -2098,12 +2094,12 @@ void HandleUpgradeFirmwareStart(void)
{
if (!HttpCheckPriviledgedAccess()) { return; }
- char command[sizeof(Settings.ota_url) + 10]; // OtaUrl
+ char command[128]; // OtaUrl
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPGRADE_STARTED));
WifiConfigCounter();
- char otaurl[sizeof(Settings.ota_url)];
+ char otaurl[101];
WebGetArg("o", otaurl, sizeof(otaurl));
if (strlen(otaurl)) {
snprintf_P(command, sizeof(command), PSTR(D_CMND_OTAURL " %s"), otaurl);
@@ -2412,12 +2408,12 @@ void HandleHttpCommand(void)
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_COMMAND));
bool valid = true;
- if (Settings.web_password[0] != 0) {
- char tmp1[sizeof(Settings.web_password)];
+ if (strlen(SettingsText(SET_WEBPWD))) {
+ char tmp1[33];
WebGetArg("user", tmp1, sizeof(tmp1));
- char tmp2[sizeof(Settings.web_password)];
+ char tmp2[strlen(SettingsText(SET_WEBPWD)) +1];
WebGetArg("password", tmp2, sizeof(tmp2));
- if (!(!strcmp(tmp1, WEB_USERNAME) && !strcmp(tmp2, Settings.web_password))) { valid = false; }
+ if (!(!strcmp(tmp1, WEB_USERNAME) && !strcmp(tmp2, SettingsText(SET_WEBPWD)))) { valid = false; }
}
WSContentBegin(200, CT_JSON);
@@ -2790,9 +2786,9 @@ void CmndWebServer(void)
void CmndWebPassword(void)
{
- if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.web_password))) {
- strlcpy(Settings.web_password, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? WEB_PASSWORD : XdrvMailbox.data, sizeof(Settings.web_password));
- ResponseCmndChar(Settings.web_password);
+ if (XdrvMailbox.data_len > 0) {
+ SettingsUpdateText(SET_WEBPWD, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? WEB_PASSWORD : XdrvMailbox.data);
+ ResponseCmndChar(SettingsText(SET_WEBPWD));
} else {
Response_P(S_JSON_COMMAND_ASTERISK, XdrvMailbox.command);
}
@@ -2860,10 +2856,10 @@ void CmndWebSensor(void)
void CmndCors(void)
{
- if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.cors_domain))) {
- strlcpy(Settings.cors_domain, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? WEB_PASSWORD : XdrvMailbox.data, sizeof(Settings.cors_domain));
+ if (XdrvMailbox.data_len > 0) {
+ SettingsUpdateText(SET_CORS, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? WEB_PASSWORD : XdrvMailbox.data);
}
- ResponseCmndChar(Settings.cors_domain);
+ ResponseCmndChar(SettingsText(SET_CORS));
}
/*********************************************************************************************\
diff --git a/tasmota/xdrv_02_mqtt.ino b/tasmota/xdrv_02_mqtt.ino
index 7a9b1bf43..47838e223 100644
--- a/tasmota/xdrv_02_mqtt.ino
+++ b/tasmota/xdrv_02_mqtt.ino
@@ -91,10 +91,6 @@ tls_dir_t tls_dir; // memory copy of tls_dir from flash
#endif // USE_MQTT_AWS_IOT
-// A typical AWS IoT endpoint is 50 characters long, it does not fit
-// in MqttHost field (32 chars). We need to concatenate both MqttUser and MqttHost
-char AWS_endpoint[65]; // aWS IOT endpoint, concatenation of user and host
-
// check whether the fingerprint is filled with a single value
// Filled with 0x00 = accept any fingerprint and learn it for next time
// Filled with 0xFF = accept any fingerpring forever
@@ -106,21 +102,6 @@ bool is_fingerprint_mono_value(uint8_t finger[20], uint8_t value) {
}
return true;
}
-
-#ifdef USE_MQTT_AWS_IOT
-void setLongMqttHost(const char *mqtt_host) {
- if (strlen(mqtt_host) <= sizeof(Settings.mqtt_host)) {
- strlcpy(Settings.mqtt_host, mqtt_host, sizeof(Settings.mqtt_host));
- Settings.mqtt_user[0] = 0;
- } else {
- // need to split in mqtt_user first then mqtt_host
- strlcpy(Settings.mqtt_user, mqtt_host, sizeof(Settings.mqtt_user));
- strlcpy(Settings.mqtt_host, &mqtt_host[sizeof(Settings.mqtt_user)-1], sizeof(Settings.mqtt_host));
- }
- strlcpy(AWS_endpoint, mqtt_host, sizeof(AWS_endpoint));
-}
-#endif // USE_MQTT_AWS_IOT
-
#endif // USE_MQTT_TLS
void MakeValidMqtt(uint32_t option, char* str)
@@ -165,10 +146,10 @@ void MqttDiscoverServer(void)
}
}
#endif // MDNS_HOSTNAME
- snprintf_P(Settings.mqtt_host, sizeof(Settings.mqtt_host), MDNS.IP(i).toString().c_str());
+ SettingsUpdateText(SET_MQTT_HOST, MDNS.IP(i).toString().c_str());
Settings.mqtt_port = MDNS.port(i);
- AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MDNS D_MQTT_SERVICE_FOUND " %s, " D_IP_ADDRESS " %s, " D_PORT " %d"), MDNS.hostname(i).c_str(), Settings.mqtt_host, Settings.mqtt_port);
+ AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MDNS D_MQTT_SERVICE_FOUND " %s, " D_IP_ADDRESS " %s, " D_PORT " %d"), MDNS.hostname(i).c_str(), SettingsText(SET_MQTT_HOST), Settings.mqtt_port);
}
}
#endif // MQTT_HOST_DISCOVERY
@@ -202,8 +183,6 @@ void MqttInit(void)
tlsClient = new BearSSL::WiFiClientSecure_light(1024,1024);
#ifdef USE_MQTT_AWS_IOT
- snprintf_P(AWS_endpoint, sizeof(AWS_endpoint), PSTR("%s%s"), Settings.mqtt_user, Settings.mqtt_host);
-
loadTlsDir(); // load key and certificate data from Flash
tlsClient->setClientECCert(AWS_IoT_Client_Certificate,
AWS_IoT_Private_Key,
@@ -261,8 +240,8 @@ void MqttDataHandler(char* mqtt_topic, uint8_t* mqtt_data, unsigned int data_len
if (data_len >= MQTT_MAX_PACKET_SIZE) { return; }
// Do not execute multiple times if Prefix1 equals Prefix2
- if (!strcmp(Settings.mqtt_prefix[0], Settings.mqtt_prefix[1])) {
- char *str = strstr(mqtt_topic, Settings.mqtt_prefix[0]);
+ if (!strcmp(SettingsText(SET_MQTTPREFIX1), SettingsText(SET_MQTTPREFIX2))) {
+ char *str = strstr(mqtt_topic, SettingsText(SET_MQTTPREFIX1));
if ((str == mqtt_topic) && mqtt_cmnd_publish) {
if (mqtt_cmnd_publish > 3) {
mqtt_cmnd_publish -= 3;
@@ -330,8 +309,8 @@ void MqttPublishLogging(const char *mxtime)
GetTopic_P(stopic, STAT, mqtt_topic, romram);
char *me;
- if (!strcmp(Settings.mqtt_prefix[0], Settings.mqtt_prefix[1])) {
- me = strstr(stopic, Settings.mqtt_prefix[0]);
+ if (!strcmp(SettingsText(SET_MQTTPREFIX1), SettingsText(SET_MQTTPREFIX2))) {
+ me = strstr(stopic, SettingsText(SET_MQTTPREFIX1));
if (me == stopic) {
mqtt_cmnd_publish += 3;
}
@@ -389,8 +368,8 @@ void MqttPublish(const char* topic, bool retained)
retained = false; // AWS IoT does not support retained, it will disconnect if received
#endif
- if (!strcmp(Settings.mqtt_prefix[0],Settings.mqtt_prefix[1])) {
- me = strstr(topic,Settings.mqtt_prefix[0]);
+ if (!strcmp(SettingsText(SET_MQTTPREFIX1), SettingsText(SET_MQTTPREFIX2))) {
+ me = strstr(topic, SettingsText(SET_MQTTPREFIX1));
if (me == topic) {
mqtt_cmnd_publish += 3;
}
@@ -505,11 +484,7 @@ void MqttDisconnected(int state)
MqttClient.disconnect();
-#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
- AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CONNECT_FAILED_TO " %s:%d, rc %d. " D_RETRY_IN " %d " D_UNIT_SECOND), AWS_endpoint, Settings.mqtt_port, state, Mqtt.retry_counter);
-#else
- AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CONNECT_FAILED_TO " %s:%d, rc %d. " D_RETRY_IN " %d " D_UNIT_SECOND), Settings.mqtt_host, Settings.mqtt_port, state, Mqtt.retry_counter);
-#endif
+ AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CONNECT_FAILED_TO " %s:%d, rc %d. " D_RETRY_IN " %d " D_UNIT_SECOND), SettingsText(SET_MQTT_HOST), Settings.mqtt_port, state, Mqtt.retry_counter);
rules_flag.mqtt_disconnected = 1;
}
@@ -533,7 +508,7 @@ void MqttConnected(void)
GetTopic_P(stopic, CMND, mqtt_topic, PSTR("#"));
MqttSubscribe(stopic);
- if (strstr_P(Settings.mqtt_fulltopic, MQTT_TOKEN_TOPIC) != nullptr) {
+ if (strstr_P(SettingsText(SET_MQTT_FULLTOPIC), MQTT_TOKEN_TOPIC) != nullptr) {
GetGroupTopic_P(stopic, PSTR("#")); // SetOption75 0: %prefix%/nothing/%topic% = cmnd/nothing//# or SetOption75 1: cmnd/
MqttSubscribe(stopic);
GetFallbackTopic_P(stopic, PSTR("#"));
@@ -594,7 +569,7 @@ void MqttReconnect(void)
MqttDiscoverServer();
#endif // MQTT_HOST_DISCOVERY
#endif // USE_DISCOVERY
- if (!strlen(Settings.mqtt_host) || !Settings.mqtt_port) {
+ if (!strlen(SettingsText(SET_MQTT_HOST)) || !Settings.mqtt_port) {
Mqtt.allowed = false;
}
#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
@@ -621,8 +596,12 @@ void MqttReconnect(void)
char *mqtt_user = nullptr;
char *mqtt_pwd = nullptr;
- if (strlen(Settings.mqtt_user) > 0) mqtt_user = Settings.mqtt_user;
- if (strlen(Settings.mqtt_pwd) > 0) mqtt_pwd = Settings.mqtt_pwd;
+ if (strlen(SettingsText(SET_MQTT_USER))) {
+ mqtt_user = SettingsText(SET_MQTT_USER);
+ }
+ if (strlen(SettingsText(SET_MQTT_PWD))) {
+ mqtt_pwd = SettingsText(SET_MQTT_PWD);
+ }
GetTopic_P(stopic, TELE, mqtt_topic, S_LWT);
Response_P(S_OFFLINE);
@@ -645,10 +624,8 @@ void MqttReconnect(void)
tlsClient->setClientECCert(AWS_IoT_Client_Certificate,
AWS_IoT_Private_Key,
0xFFFF /* all usages, don't care */, 0);
- MqttClient.setServer(AWS_endpoint, Settings.mqtt_port);
-#else
- MqttClient.setServer(Settings.mqtt_host, Settings.mqtt_port);
#endif
+ MqttClient.setServer(SettingsText(SET_MQTT_HOST), Settings.mqtt_port);
uint32_t mqtt_connect_time = millis();
#if defined(USE_MQTT_TLS) && !defined(USE_MQTT_TLS_CA_CERT)
@@ -662,7 +639,7 @@ void MqttReconnect(void)
tlsClient->setPubKeyFingerprint(Settings.mqtt_fingerprint[0], Settings.mqtt_fingerprint[1], allow_all_fingerprints);
#endif
#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
- AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT "AWS IoT endpoint: %s"), AWS_endpoint);
+ AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT "AWS IoT endpoint: %s"), SettingsText(SET_MQTT_HOST));
//if (MqttClient.connect(mqtt_client, nullptr, nullptr, nullptr, 0, false, nullptr)) {
if (MqttClient.connect(mqtt_client, nullptr, nullptr, stopic, 1, false, mqtt_data, MQTT_CLEAN_SESSION)) {
#else
@@ -722,7 +699,7 @@ void MqttCheck(void)
if (!Mqtt.retry_counter) {
#ifdef USE_DISCOVERY
#ifdef MQTT_HOST_DISCOVERY
- if (!strlen(Settings.mqtt_host) && !Wifi.mdns_begun) { return; }
+ if (!strlen(SettingsText(SET_MQTT_HOST)) && !Wifi.mdns_begun) { return; }
#endif // MQTT_HOST_DISCOVERY
#endif // USE_DISCOVERY
MqttReconnect();
@@ -763,18 +740,18 @@ void CmndMqttFingerprint(void)
#if !defined(USE_MQTT_TLS) || !defined(USE_MQTT_AWS_IOT) // user and password are disabled with AWS IoT
void CmndMqttUser(void)
{
- if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.mqtt_user))) {
- strlcpy(Settings.mqtt_user, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? MQTT_USER : XdrvMailbox.data, sizeof(Settings.mqtt_user));
+ if (XdrvMailbox.data_len > 0) {
+ SettingsUpdateText(SET_MQTT_USER, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? MQTT_USER : XdrvMailbox.data);
restart_flag = 2;
}
- ResponseCmndChar(Settings.mqtt_user);
+ ResponseCmndChar(SettingsText(SET_MQTT_USER));
}
void CmndMqttPassword(void)
{
- if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.mqtt_pwd))) {
- strlcpy(Settings.mqtt_pwd, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? MQTT_PASS : XdrvMailbox.data, sizeof(Settings.mqtt_pwd));
- ResponseCmndChar(Settings.mqtt_pwd);
+ if (XdrvMailbox.data_len > 0) {
+ SettingsUpdateText(SET_MQTT_PWD, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? MQTT_PASS : XdrvMailbox.data);
+ ResponseCmndChar(SettingsText(SET_MQTT_PWD));
restart_flag = 2;
} else {
Response_P(S_JSON_COMMAND_ASTERISK, XdrvMailbox.command);
@@ -792,19 +769,11 @@ void CmndMqttlog(void)
void CmndMqttHost(void)
{
-#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
- if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len <= sizeof(Settings.mqtt_host) + sizeof(Settings.mqtt_user) - 2)) {
- setLongMqttHost((SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? MQTT_HOST : XdrvMailbox.data);
+ if (XdrvMailbox.data_len > 0) {
+ SettingsUpdateText(SET_MQTT_HOST, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? MQTT_HOST : XdrvMailbox.data);
restart_flag = 2;
}
- ResponseCmndChar(AWS_endpoint);
-#else
- if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.mqtt_host))) {
- strlcpy(Settings.mqtt_host, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? MQTT_HOST : XdrvMailbox.data, sizeof(Settings.mqtt_host));
- restart_flag = 2;
- }
- ResponseCmndChar(Settings.mqtt_host);
-#endif
+ ResponseCmndChar(SettingsText(SET_MQTT_HOST));
}
void CmndMqttPort(void)
@@ -828,11 +797,11 @@ void CmndMqttRetry(void)
void CmndStateText(void)
{
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= 4)) {
- if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.state_text[0]))) {
+ if (XdrvMailbox.data_len > 0) {
for (uint32_t i = 0; i <= XdrvMailbox.data_len; i++) {
if (XdrvMailbox.data[i] == ' ') XdrvMailbox.data[i] = '_';
}
- strlcpy(Settings.state_text[XdrvMailbox.index -1], XdrvMailbox.data, sizeof(Settings.state_text[0]));
+ SettingsUpdateText(SET_STATE_TXT1 + XdrvMailbox.index -1, XdrvMailbox.data);
}
ResponseCmndIdxChar(GetStateText(XdrvMailbox.index -1));
}
@@ -840,40 +809,41 @@ void CmndStateText(void)
void CmndMqttClient(void)
{
- if (!XdrvMailbox.grpflg && (XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.mqtt_client))) {
- strlcpy(Settings.mqtt_client, (SC_DEFAULT == Shortcut()) ? MQTT_CLIENT_ID : XdrvMailbox.data, sizeof(Settings.mqtt_client));
+ if (!XdrvMailbox.grpflg && (XdrvMailbox.data_len > 0)) {
+ SettingsUpdateText(SET_MQTT_CLIENT, (SC_DEFAULT == Shortcut()) ? MQTT_CLIENT_ID : XdrvMailbox.data);
restart_flag = 2;
}
- ResponseCmndChar(Settings.mqtt_client);
+ ResponseCmndChar(SettingsText(SET_MQTT_CLIENT));
}
void CmndFullTopic(void)
{
- if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.mqtt_fulltopic))) {
+ if (XdrvMailbox.data_len > 0) {
MakeValidMqtt(1, XdrvMailbox.data);
if (!strcmp(XdrvMailbox.data, mqtt_client)) { SetShortcutDefault(); }
char stemp1[TOPSZ];
strlcpy(stemp1, (SC_DEFAULT == Shortcut()) ? MQTT_FULLTOPIC : XdrvMailbox.data, sizeof(stemp1));
- if (strcmp(stemp1, Settings.mqtt_fulltopic)) {
+ if (strcmp(stemp1, SettingsText(SET_MQTT_FULLTOPIC))) {
Response_P((Settings.flag.mqtt_offline) ? S_OFFLINE : ""); // SetOption10 - Control MQTT LWT message format
MqttPublishPrefixTopic_P(TELE, PSTR(D_LWT), true); // Offline or remove previous retained topic
- strlcpy(Settings.mqtt_fulltopic, stemp1, sizeof(Settings.mqtt_fulltopic));
+ SettingsUpdateText(SET_MQTT_FULLTOPIC, stemp1);
restart_flag = 2;
}
}
- ResponseCmndChar(Settings.mqtt_fulltopic);
+ ResponseCmndChar(SettingsText(SET_MQTT_FULLTOPIC));
}
void CmndPrefix(void)
{
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= 3)) {
- if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.mqtt_prefix[0]))) {
+
+ if (XdrvMailbox.data_len > 0) {
MakeValidMqtt(0, XdrvMailbox.data);
- strlcpy(Settings.mqtt_prefix[XdrvMailbox.index -1], (SC_DEFAULT == Shortcut()) ? (1==XdrvMailbox.index)?SUB_PREFIX:(2==XdrvMailbox.index)?PUB_PREFIX:PUB_PREFIX2 : XdrvMailbox.data, sizeof(Settings.mqtt_prefix[0]));
-// if (Settings.mqtt_prefix[XdrvMailbox.index -1][strlen(Settings.mqtt_prefix[XdrvMailbox.index -1])] == '/') Settings.mqtt_prefix[XdrvMailbox.index -1][strlen(Settings.mqtt_prefix[XdrvMailbox.index -1])] = 0;
+ SettingsUpdateText(SET_MQTTPREFIX1 + XdrvMailbox.index -1,
+ (SC_DEFAULT == Shortcut()) ? (1==XdrvMailbox.index) ? SUB_PREFIX : (2==XdrvMailbox.index) ? PUB_PREFIX : PUB_PREFIX2 : XdrvMailbox.data);
restart_flag = 2;
}
- ResponseCmndIdxChar(Settings.mqtt_prefix[XdrvMailbox.index -1]);
+ ResponseCmndIdxChar(SettingsText(SET_MQTTPREFIX1 + XdrvMailbox.index -1));
}
}
@@ -899,60 +869,60 @@ void CmndPublish(void)
void CmndGroupTopic(void)
{
- if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.mqtt_grptopic))) {
+ if (XdrvMailbox.data_len > 0) {
MakeValidMqtt(0, XdrvMailbox.data);
if (!strcmp(XdrvMailbox.data, mqtt_client)) { SetShortcutDefault(); }
- strlcpy(Settings.mqtt_grptopic, (SC_DEFAULT == Shortcut()) ? MQTT_GRPTOPIC : XdrvMailbox.data, sizeof(Settings.mqtt_grptopic));
+ SettingsUpdateText(SET_MQTT_GRP_TOPIC, (SC_DEFAULT == Shortcut()) ? MQTT_GRPTOPIC : XdrvMailbox.data);
restart_flag = 2;
}
- ResponseCmndChar(Settings.mqtt_grptopic);
+ ResponseCmndChar(SettingsText(SET_MQTT_GRP_TOPIC));
}
void CmndTopic(void)
{
- if (!XdrvMailbox.grpflg && (XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.mqtt_topic))) {
+ if (!XdrvMailbox.grpflg && (XdrvMailbox.data_len > 0)) {
MakeValidMqtt(0, XdrvMailbox.data);
if (!strcmp(XdrvMailbox.data, mqtt_client)) { SetShortcutDefault(); }
char stemp1[TOPSZ];
strlcpy(stemp1, (SC_DEFAULT == Shortcut()) ? MQTT_TOPIC : XdrvMailbox.data, sizeof(stemp1));
- if (strcmp(stemp1, Settings.mqtt_topic)) {
+ if (strcmp(stemp1, SettingsText(SET_MQTT_TOPIC))) {
Response_P((Settings.flag.mqtt_offline) ? S_OFFLINE : ""); // SetOption10 - Control MQTT LWT message format
MqttPublishPrefixTopic_P(TELE, PSTR(D_LWT), true); // Offline or remove previous retained topic
- strlcpy(Settings.mqtt_topic, stemp1, sizeof(Settings.mqtt_topic));
+ SettingsUpdateText(SET_MQTT_TOPIC, stemp1);
restart_flag = 2;
}
}
- ResponseCmndChar(Settings.mqtt_topic);
+ ResponseCmndChar(SettingsText(SET_MQTT_TOPIC));
}
void CmndButtonTopic(void)
{
- if (!XdrvMailbox.grpflg && (XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.button_topic))) {
+ if (!XdrvMailbox.grpflg && (XdrvMailbox.data_len > 0)) {
MakeValidMqtt(0, XdrvMailbox.data);
if (!strcmp(XdrvMailbox.data, mqtt_client)) { SetShortcutDefault(); }
switch (Shortcut()) {
- case SC_CLEAR: strlcpy(Settings.button_topic, "", sizeof(Settings.button_topic)); break;
- case SC_DEFAULT: strlcpy(Settings.button_topic, mqtt_topic, sizeof(Settings.button_topic)); break;
- case SC_USER: strlcpy(Settings.button_topic, MQTT_BUTTON_TOPIC, sizeof(Settings.button_topic)); break;
- default: strlcpy(Settings.button_topic, XdrvMailbox.data, sizeof(Settings.button_topic));
+ case SC_CLEAR: SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, ""); break;
+ case SC_DEFAULT: SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, mqtt_topic); break;
+ case SC_USER: SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, MQTT_BUTTON_TOPIC); break;
+ default: SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, XdrvMailbox.data);
}
}
- ResponseCmndChar(Settings.button_topic);
+ ResponseCmndChar(SettingsText(SET_MQTT_BUTTON_TOPIC));
}
void CmndSwitchTopic(void)
{
- if (!XdrvMailbox.grpflg && (XdrvMailbox.data_len > 0) && (XdrvMailbox.data_len < sizeof(Settings.switch_topic))) {
+ if (!XdrvMailbox.grpflg && (XdrvMailbox.data_len > 0)) {
MakeValidMqtt(0, XdrvMailbox.data);
if (!strcmp(XdrvMailbox.data, mqtt_client)) { SetShortcutDefault(); }
switch (Shortcut()) {
- case SC_CLEAR: strlcpy(Settings.switch_topic, "", sizeof(Settings.switch_topic)); break;
- case SC_DEFAULT: strlcpy(Settings.switch_topic, mqtt_topic, sizeof(Settings.switch_topic)); break;
- case SC_USER: strlcpy(Settings.switch_topic, MQTT_SWITCH_TOPIC, sizeof(Settings.switch_topic)); break;
- default: strlcpy(Settings.switch_topic, XdrvMailbox.data, sizeof(Settings.switch_topic));
+ case SC_CLEAR: SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, ""); break;
+ case SC_DEFAULT: SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, mqtt_topic); break;
+ case SC_USER: SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, MQTT_SWITCH_TOPIC); break;
+ default: SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, XdrvMailbox.data);
}
}
- ResponseCmndChar(Settings.switch_topic);
+ ResponseCmndChar(SettingsText(SET_MQTT_SWITCH_TOPIC));
}
void CmndButtonRetain(void)
@@ -1220,22 +1190,18 @@ void HandleMqttConfiguration(void)
return;
}
- char str[sizeof(Settings.mqtt_client)];
+ char str[33];
WSContentStart_P(S_CONFIGURE_MQTT);
WSContentSendStyle();
WSContentSend_P(HTTP_FORM_MQTT1,
-#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
- AWS_endpoint,
-#else
- Settings.mqtt_host,
-#endif
+ SettingsText(SET_MQTT_HOST),
Settings.mqtt_port,
- Format(str, MQTT_CLIENT_ID, sizeof(str)), MQTT_CLIENT_ID, Settings.mqtt_client);
+ Format(str, MQTT_CLIENT_ID, sizeof(str)), MQTT_CLIENT_ID, SettingsText(SET_MQTT_CLIENT));
WSContentSend_P(HTTP_FORM_MQTT2,
- (Settings.mqtt_user[0] == '\0') ? "0" : Settings.mqtt_user,
- Format(str, MQTT_TOPIC, sizeof(str)), MQTT_TOPIC, Settings.mqtt_topic,
- MQTT_FULLTOPIC, MQTT_FULLTOPIC, Settings.mqtt_fulltopic);
+ (!strlen(SettingsText(SET_MQTT_USER))) ? "0" : SettingsText(SET_MQTT_USER),
+ Format(str, MQTT_TOPIC, sizeof(str)), MQTT_TOPIC, SettingsText(SET_MQTT_TOPIC),
+ MQTT_FULLTOPIC, MQTT_FULLTOPIC, SettingsText(SET_MQTT_FULLTOPIC));
WSContentSend_P(HTTP_FORM_END);
WSContentSpaceButton(BUTTON_CONFIGURATION);
WSContentStop();
@@ -1253,32 +1219,28 @@ void MqttSaveSettings(void)
WebGetArg("mf", tmp, sizeof(tmp));
strlcpy(stemp2, (!strlen(tmp)) ? MQTT_FULLTOPIC : tmp, sizeof(stemp2));
MakeValidMqtt(1, stemp2);
- if ((strcmp(stemp, Settings.mqtt_topic)) || (strcmp(stemp2, Settings.mqtt_fulltopic))) {
+ if ((strcmp(stemp, SettingsText(SET_MQTT_TOPIC))) || (strcmp(stemp2, SettingsText(SET_MQTT_FULLTOPIC)))) {
Response_P((Settings.flag.mqtt_offline) ? S_OFFLINE : ""); // SetOption10 - Control MQTT LWT message format
MqttPublishPrefixTopic_P(TELE, S_LWT, true); // Offline or remove previous retained topic
}
- strlcpy(Settings.mqtt_topic, stemp, sizeof(Settings.mqtt_topic));
- strlcpy(Settings.mqtt_fulltopic, stemp2, sizeof(Settings.mqtt_fulltopic));
+ SettingsUpdateText(SET_MQTT_TOPIC, stemp);
+ SettingsUpdateText(SET_MQTT_FULLTOPIC, stemp2);
WebGetArg("mh", tmp, sizeof(tmp));
-#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
- setLongMqttHost((!strlen(tmp)) ? MQTT_HOST : (!strcmp(tmp,"0")) ? "" : tmp);
-#else
- strlcpy(Settings.mqtt_host, (!strlen(tmp)) ? MQTT_HOST : (!strcmp(tmp,"0")) ? "" : tmp, sizeof(Settings.mqtt_host));
-#endif
+ SettingsUpdateText(SET_MQTT_HOST, (!strlen(tmp)) ? MQTT_HOST : (!strcmp(tmp,"0")) ? "" : tmp);
WebGetArg("ml", tmp, sizeof(tmp));
Settings.mqtt_port = (!strlen(tmp)) ? MQTT_PORT : atoi(tmp);
WebGetArg("mc", tmp, sizeof(tmp));
- strlcpy(Settings.mqtt_client, (!strlen(tmp)) ? MQTT_CLIENT_ID : tmp, sizeof(Settings.mqtt_client));
+ SettingsUpdateText(SET_MQTT_CLIENT, (!strlen(tmp)) ? MQTT_CLIENT_ID : tmp);
#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CMND_MQTTHOST " %s, " D_CMND_MQTTPORT " %d, " D_CMND_MQTTCLIENT " %s, " D_CMND_TOPIC " %s, " D_CMND_FULLTOPIC " %s"),
- AWS_endpoint, Settings.mqtt_port, Settings.mqtt_client, Settings.mqtt_topic, Settings.mqtt_fulltopic);
+ SettingsText(SET_MQTT_HOST), Settings.mqtt_port, SettingsText(SET_MQTT_CLIENT), SettingsText(SET_MQTT_TOPIC), SettingsText(SET_MQTT_FULLTOPIC));
#else // USE_MQTT_AWS_IOT
WebGetArg("mu", tmp, sizeof(tmp));
- strlcpy(Settings.mqtt_user, (!strlen(tmp)) ? MQTT_USER : (!strcmp(tmp,"0")) ? "" : tmp, sizeof(Settings.mqtt_user));
+ SettingsUpdateText(SET_MQTT_USER, (!strlen(tmp)) ? MQTT_USER : (!strcmp(tmp,"0")) ? "" : tmp);
WebGetArg("mp", tmp, sizeof(tmp));
- strlcpy(Settings.mqtt_pwd, (!strlen(tmp)) ? "" : (!strcmp(tmp, D_ASTERISK_PWD)) ? Settings.mqtt_pwd : tmp, sizeof(Settings.mqtt_pwd));
+ SettingsUpdateText(SET_MQTT_PWD, (!strlen(tmp)) ? "" : (!strcmp(tmp, D_ASTERISK_PWD)) ? SettingsText(SET_MQTT_PWD) : tmp);
AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CMND_MQTTHOST " %s, " D_CMND_MQTTPORT " %d, " D_CMND_MQTTCLIENT " %s, " D_CMND_MQTTUSER " %s, " D_CMND_TOPIC " %s, " D_CMND_FULLTOPIC " %s"),
- Settings.mqtt_host, Settings.mqtt_port, Settings.mqtt_client, Settings.mqtt_user, Settings.mqtt_topic, Settings.mqtt_fulltopic);
+ SettingsText(SET_MQTT_HOST), Settings.mqtt_port, SettingsText(SET_MQTT_CLIENT), SettingsText(SET_MQTT_USER), SettingsText(SET_MQTT_TOPIC), SettingsText(SET_MQTT_FULLTOPIC));
#endif
}
#endif // USE_WEBSERVER
diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino
index ac771f0d7..6e1636518 100644
--- a/tasmota/xdrv_10_rules.ino
+++ b/tasmota/xdrv_10_rules.ino
@@ -217,7 +217,7 @@ bool RulesRuleMatch(uint8_t rule_set, String &event, String &rule)
for (uint32_t i = 0; i < MAX_RULE_MEMS; i++) {
snprintf_P(stemp, sizeof(stemp), PSTR("%%MEM%d%%"), i +1);
if (rule_param.startsWith(stemp)) {
- rule_param = Settings.mems[i];
+ rule_param = SettingsText(SET_MEM1 + i);
break;
}
}
@@ -447,12 +447,12 @@ bool RuleSetProcess(uint8_t rule_set, String &event_saved)
}
for (uint32_t i = 0; i < MAX_RULE_MEMS; i++) {
snprintf_P(stemp, sizeof(stemp), PSTR("%%MEM%d%%"), i +1);
- RulesVarReplace(commands, stemp, Settings.mems[i]);
+ RulesVarReplace(commands, stemp, SettingsText(SET_MEM1 +i));
}
RulesVarReplace(commands, F("%TIME%"), String(MinutesPastMidnight()));
RulesVarReplace(commands, F("%UPTIME%"), String(MinutesUptime()));
RulesVarReplace(commands, F("%TIMESTAMP%"), GetDateAndTime(DT_LOCAL));
- RulesVarReplace(commands, F("%TOPIC%"), Settings.mqtt_topic);
+ RulesVarReplace(commands, F("%TOPIC%"), SettingsText(SET_MQTT_TOPIC));
#if defined(USE_TIMERS) && defined(USE_SUNRISE)
RulesVarReplace(commands, F("%SUNRISE%"), String(SunMinutes(0)));
RulesVarReplace(commands, F("%SUNSET%"), String(SunMinutes(1)));
@@ -608,7 +608,7 @@ void RulesEvery50ms(void)
for (uint32_t i = 0; i < MAX_RULE_MEMS; i++) {
if (bitRead(Rules.mems_event, i)) {
bitClear(Rules.mems_event, i);
- snprintf_P(json_event, sizeof(json_event), PSTR("{\"Mem%d\":{\"State\":%s}}"), i+1, Settings.mems[i]);
+ snprintf_P(json_event, sizeof(json_event), PSTR("{\"Mem%d\":{\"State\":%s}}"), i+1, SettingsText(SET_MEM1 +i));
RulesProcessEvent(json_event);
break;
}
@@ -1002,7 +1002,7 @@ bool findNextVariableValue(char * &pVarname, float &value)
} else if (sVarName.startsWith(F("MEM"))) {
int index = sVarName.substring(3).toInt();
if (index > 0 && index <= MAX_RULE_MEMS) {
- value = CharToFloat(Settings.mems[index -1]);
+ value = CharToFloat(SettingsText(SET_MEM1 + index -1));
}
} else if (sVarName.equals(F("TIME"))) {
value = MinutesPastMidnight();
@@ -1810,23 +1810,23 @@ void CmndMemory(void)
if (!XdrvMailbox.usridx) {
mqtt_data[0] = '\0';
for (uint32_t i = 0; i < MAX_RULE_MEMS; i++) {
- ResponseAppend_P(PSTR("%c\"Mem%d\":\"%s\""), (i) ? ',' : '{', i +1, Settings.mems[i]);
+ ResponseAppend_P(PSTR("%c\"Mem%d\":\"%s\""), (i) ? ',' : '{', i +1, SettingsText(SET_MEM1 +i));
}
ResponseJsonEnd();
} else {
if (XdrvMailbox.data_len > 0) {
#ifdef USE_EXPRESSION
if (XdrvMailbox.data[0] == '=') { // Spaces already been skipped in data
- dtostrfd(evaluateExpression(XdrvMailbox.data + 1, XdrvMailbox.data_len - 1), Settings.flag2.calc_resolution, Settings.mems[XdrvMailbox.index -1]);
+ dtostrfd(evaluateExpression(XdrvMailbox.data + 1, XdrvMailbox.data_len - 1), Settings.flag2.calc_resolution, SettingsText(SET_MEM1 + XdrvMailbox.index -1));
} else {
- strlcpy(Settings.mems[XdrvMailbox.index -1], ('"' == XdrvMailbox.data[0]) ? "" : XdrvMailbox.data, sizeof(Settings.mems[XdrvMailbox.index -1]));
+ SettingsUpdateText(SET_MEM1 + XdrvMailbox.index -1, ('"' == XdrvMailbox.data[0]) ? "" : XdrvMailbox.data);
}
#else
- strlcpy(Settings.mems[XdrvMailbox.index -1], ('"' == XdrvMailbox.data[0]) ? "" : XdrvMailbox.data, sizeof(Settings.mems[XdrvMailbox.index -1]));
+ SettingsUpdateText(SET_MEM1 + XdrvMailbox.index -1, ('"' == XdrvMailbox.data[0]) ? "" : XdrvMailbox.data);
#endif // USE_EXPRESSION
bitSet(Rules.mems_event, XdrvMailbox.index -1);
}
- ResponseCmndIdxChar(Settings.mems[XdrvMailbox.index -1]);
+ ResponseCmndIdxChar(SettingsText(SET_MEM1 + XdrvMailbox.index -1));
}
}
}
diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino
index 5badb88ea..68df13984 100755
--- a/tasmota/xdrv_10_scripter.ino
+++ b/tasmota/xdrv_10_scripter.ino
@@ -1041,7 +1041,7 @@ char *isvar(char *lp, uint8_t *vtype,struct T_INDEX *tind,float *fp,char *sp,Jso
if (sp) strlcpy(sp,str_value,SCRIPT_MAXSSIZE);
return lp+len;
}
-
+
} else {
if (fp) {
if (!strncmp(vn.c_str(),"Epoch",5)) {
@@ -1370,7 +1370,7 @@ chknext:
goto exit;
}
if (!strncmp(vname,"gtopic",6)) {
- if (sp) strlcpy(sp,Settings.mqtt_grptopic,glob_script_mem.max_ssize);
+ if (sp) strlcpy(sp,SettingsText(SET_MQTT_GRP_TOPIC),glob_script_mem.max_ssize);
goto strexit;
}
break;
@@ -1527,15 +1527,15 @@ chknext:
goto exit;
}
if (!strncmp(vname,"prefix1",7)) {
- if (sp) strlcpy(sp,Settings.mqtt_prefix[0],glob_script_mem.max_ssize);
+ if (sp) strlcpy(sp,SettingsText(SET_MQTTPREFIX1),glob_script_mem.max_ssize);
goto strexit;
}
if (!strncmp(vname,"prefix2",7)) {
- if (sp) strlcpy(sp,Settings.mqtt_prefix[1],glob_script_mem.max_ssize);
+ if (sp) strlcpy(sp,SettingsText(SET_MQTTPREFIX2),glob_script_mem.max_ssize);
goto strexit;
}
if (!strncmp(vname,"prefix3",7)) {
- if (sp) strlcpy(sp,Settings.mqtt_prefix[2],glob_script_mem.max_ssize);
+ if (sp) strlcpy(sp,SettingsText(SET_MQTTPREFIX3),glob_script_mem.max_ssize);
goto strexit;
}
if (!strncmp(vname,"pow(",4)) {
@@ -1744,7 +1744,7 @@ chknext:
goto strexit;
}
if (!strncmp(vname,"topic",5)) {
- if (sp) strlcpy(sp,Settings.mqtt_topic,glob_script_mem.max_ssize);
+ if (sp) strlcpy(sp,SettingsText(SET_MQTT_TOPIC),glob_script_mem.max_ssize);
goto strexit;
}
#ifdef USE_DISPLAY
diff --git a/tasmota/xdrv_12_home_assistant.ino b/tasmota/xdrv_12_home_assistant.ino
index 22c0e370e..58c266c61 100644
--- a/tasmota/xdrv_12_home_assistant.ino
+++ b/tasmota/xdrv_12_home_assistant.ino
@@ -46,7 +46,7 @@ const char HASS_DISCOVER_BUTTON_TOGGLE[] PROGMEM =
const char HASS_DISCOVER_SWITCH_TOGGLE[] PROGMEM =
",\"value_template\":\"{%%if is_state(entity_id,\\\"on\\\")-%%}OFF{%%-else-%%}ON{%%-endif%%}\""; // A switch must maintain his state until the next update
-
+
const char HASS_DISCOVER_BUTTON_SWITCH_ONOFF[] PROGMEM =
",\"value_template\":\"{{value_json.%s}}\"," // STATE
"\"frc_upd\":true," // In ON/OFF case, enable force_update to make automations work
@@ -86,7 +86,7 @@ const char HASS_DISCOVER_SENSOR[] PROGMEM =
"{\"name\":\"%s\"," // dualr2 1 BTN
"\"stat_t\":\"%s\"," // cmnd/dualr2/POWER (implies "\"optimistic\":\"false\",")
"\"avty_t\":\"%s\"," // tele/dualr2/LWT
- "\"frc_upd\":true," // force update for better graph representation
+ "\"frc_upd\":true," // force update for better graph representation
"\"pl_avail\":\"" D_ONLINE "\"," // Online
"\"pl_not_avail\":\"" D_OFFLINE "\""; // Offline
@@ -239,9 +239,9 @@ void HAssAnnounceRelayLight(void)
char *availability_topic = stemp3;
if (i > MAX_FRIENDLYNAMES) {
- snprintf_P(name, sizeof(name), PSTR("%s %d"), Settings.friendlyname[0], i);
+ snprintf_P(name, sizeof(name), PSTR("%s %d"), SettingsText(SET_FRIENDLYNAME1), i);
} else {
- snprintf_P(name, sizeof(name), Settings.friendlyname[i -1]);
+ snprintf_P(name, sizeof(name), SettingsText(SET_FRIENDLYNAME1 +i -1));
}
GetPowerDevice(value_template, i, sizeof(value_template), Settings.flag.device_index_enable); // SetOption26 - Switch between POWER or POWER1
GetTopic_P(command_topic, CMND, mqtt_topic, value_template);
@@ -253,7 +253,7 @@ void HAssAnnounceRelayLight(void)
Shorten(&state_topic, prefix);
Shorten(&availability_topic, prefix);
- Response_P(HASS_DISCOVER_RELAY, name, command_topic, state_topic, value_template, Settings.state_text[0], Settings.state_text[1], availability_topic);
+ Response_P(HASS_DISCOVER_RELAY, name, command_topic, state_topic, value_template, SettingsText(SET_STATE_TXT1), SettingsText(SET_STATE_TXT2), availability_topic);
TryResponseAppend_P(HASS_DISCOVER_DEVICE_INFO_SHORT, unique_id, ESP.getChipId(), WiFi.macAddress().c_str());
TryResponseAppend_P(HASS_DISCOVER_TOPIC_PREFIX, prefix);
@@ -324,7 +324,7 @@ void HAssAnnounceButtonSwitch(uint8_t device, char* topic, uint8_t present, uint
char *availability_topic = stemp2;
char jsoname[8];
- snprintf_P(name, sizeof(name), PSTR("%s %s%d"), Settings.friendlyname[0], key?"Switch":"Button", device+1);
+ snprintf_P(name, sizeof(name), PSTR("%s %s%d"), SettingsText(SET_FRIENDLYNAME1), key?"Switch":"Button", device+1);
snprintf_P(jsoname, sizeof(jsoname), PSTR("%s%d"), key?"SWITCH":"BUTTON", device+1);
GetPowerDevice(value_template, device+1, sizeof(value_template),
key + Settings.flag.device_index_enable); // Force index for Switch 1, Index on Button1 is controlled by SetOption26 - Switch between POWER or POWER1
@@ -339,11 +339,11 @@ void HAssAnnounceButtonSwitch(uint8_t device, char* topic, uint8_t present, uint
TryResponseAppend_P(HASS_DISCOVER_DEVICE_INFO_SHORT, unique_id, ESP.getChipId(), WiFi.macAddress().c_str());
if (strlen(prefix) > 0 ) TryResponseAppend_P(HASS_DISCOVER_TOPIC_PREFIX, prefix);
if (toggle) {
- if (!key) {
- TryResponseAppend_P(HASS_DISCOVER_BUTTON_TOGGLE, PSTR(D_RSLT_STATE), Settings.state_text[toggle?2:1]);
+ if (!key) {
+ TryResponseAppend_P(HASS_DISCOVER_BUTTON_TOGGLE, PSTR(D_RSLT_STATE), SettingsText(SET_STATE_TXT1 + toggle?2:1));
} else {TryResponseAppend_P(HASS_DISCOVER_SWITCH_TOGGLE);}
}
- else TryResponseAppend_P(HASS_DISCOVER_BUTTON_SWITCH_ONOFF, PSTR(D_RSLT_STATE), Settings.state_text[toggle?2:1], Settings.state_text[0]);
+ else TryResponseAppend_P(HASS_DISCOVER_BUTTON_SWITCH_ONOFF, PSTR(D_RSLT_STATE), SettingsText(SET_STATE_TXT1 + toggle?2:1), SettingsText(SET_STATE_TXT1));
TryResponseAppend_P(PSTR("}"));
}
@@ -352,10 +352,10 @@ void HAssAnnounceButtonSwitch(uint8_t device, char* topic, uint8_t present, uint
void HAssAnnounceSwitches(void)
{
- char sw_topic[sizeof(Settings.switch_topic)];
+ char sw_topic[TOPSZ];
// Send info about buttons
- char *tmp = Settings.switch_topic;
+ char *tmp = SettingsText(SET_MQTT_SWITCH_TOPIC);
Format(sw_topic, tmp, sizeof(sw_topic));
if (!strcmp_P(sw_topic, "0") || strlen(sw_topic) == 0 ) {
for (uint32_t switch_index = 0; switch_index < MAX_SWITCHES; switch_index++) {
@@ -369,7 +369,7 @@ void HAssAnnounceSwitches(void)
// Check if MQTT message will be ON/OFF or TOGGLE
if (Settings.switchmode[switch_index] == FOLLOW || Settings.switchmode[switch_index] == FOLLOW_INV ||
Settings.flag3.button_switch_force_local || // SetOption61 - Force local operation when button/switch topic is set
- !strcmp(mqtt_topic, sw_topic) || !strcmp(Settings.mqtt_grptopic, sw_topic))
+ !strcmp(mqtt_topic, sw_topic) || !strcmp(SettingsText(SET_MQTT_GRP_TOPIC), sw_topic))
{
toggle = 0; // MQTT message will be ON/OFF
}
@@ -381,10 +381,10 @@ void HAssAnnounceSwitches(void)
void HAssAnnounceButtons(void)
{
- char key_topic[sizeof(Settings.button_topic)];
+ char key_topic[TOPSZ];
// Send info about buttons
- char *tmp = Settings.button_topic;
+ char *tmp = SettingsText(SET_MQTT_BUTTON_TOPIC);
Format(key_topic, tmp, sizeof(key_topic));
if (!strcmp_P(key_topic, "0") || strlen(key_topic) == 0 ) {
for (uint32_t button_index = 0; button_index < MAX_KEYS; button_index++) {
@@ -401,7 +401,7 @@ void HAssAnnounceButtons(void)
// Check if MQTT message will be ON/OFF or TOGGLE
if (Settings.flag3.button_switch_force_local || // SetOption61 - Force local operation when button/switch topic is set
- !strcmp(mqtt_topic, key_topic) || !strcmp(Settings.mqtt_grptopic, key_topic))
+ !strcmp(mqtt_topic, key_topic) || !strcmp(SettingsText(SET_MQTT_GRP_TOPIC), key_topic))
{
toggle = 0; // MQTT message will be ON/OFF
}
@@ -445,7 +445,7 @@ void HAssAnnounceSensor(const char* sensorname, const char* subsensortype)
GetTopic_P(state_topic, TELE, mqtt_topic, PSTR(D_RSLT_SENSOR));
}
- snprintf_P(name, sizeof(name), PSTR("%s %s %s"), Settings.friendlyname[0], sensorname, subsensortype);
+ snprintf_P(name, sizeof(name), PSTR("%s %s %s"), SettingsText(SET_FRIENDLYNAME1), sensorname, subsensortype);
GetTopic_P(availability_topic, TELE, mqtt_topic, S_LWT);
FindPrefix(state_topic, availability_topic, prefix);
Shorten(&state_topic, prefix);
@@ -458,7 +458,7 @@ void HAssAnnounceSensor(const char* sensorname, const char* subsensortype)
TryResponseAppend_P(HASS_DISCOVER_SENSOR_TEMP, TempUnit(), sensorname);
} else if (!strcmp_P(subsensortype, PSTR(D_JSON_HUMIDITY))) {
TryResponseAppend_P(HASS_DISCOVER_SENSOR_HUM, sensorname);
- } else if (!strcmp_P(subsensortype, PSTR(D_JSON_PRESSURE))
+ } else if (!strcmp_P(subsensortype, PSTR(D_JSON_PRESSURE))
|| !strcmp_P(subsensortype, PSTR(D_JSON_PRESSUREATSEALEVEL))){
TryResponseAppend_P(HASS_DISCOVER_SENSOR_PRESS, PressureUnit().c_str(), sensorname, subsensortype);
} else if (!strcmp_P(subsensortype, PSTR(D_JSON_TOTAL))
@@ -548,7 +548,7 @@ void HAssAnnounceStatusSensor(void)
char *state_topic = stemp1;
char *availability_topic = stemp2;
- snprintf_P(name, sizeof(name), PSTR("%s status"), Settings.friendlyname[0]);
+ snprintf_P(name, sizeof(name), PSTR("%s status"), SettingsText(SET_FRIENDLYNAME1));
GetTopic_P(state_topic, TELE, mqtt_topic, PSTR(D_RSLT_HASS_STATE));
GetTopic_P(availability_topic, TELE, mqtt_topic, S_LWT);
FindPrefix(state_topic, availability_topic, prefix);
@@ -558,7 +558,7 @@ void HAssAnnounceStatusSensor(void)
Response_P(HASS_DISCOVER_SENSOR, name, state_topic, availability_topic);
TryResponseAppend_P(HASS_DISCOVER_SENSOR_HASS_STATUS, state_topic);
TryResponseAppend_P(HASS_DISCOVER_DEVICE_INFO, unique_id, ESP.getChipId(), WiFi.macAddress().c_str(),
- Settings.friendlyname[0], ModuleName().c_str(), my_version, my_image);
+ SettingsText(SET_FRIENDLYNAME1), ModuleName().c_str(), my_version, my_image);
TryResponseAppend_P(HASS_DISCOVER_TOPIC_PREFIX, prefix);
TryResponseAppend_P(PSTR("}"));
}
@@ -588,8 +588,8 @@ void HAssDiscovery(void)
Settings.flag.decimal_text = 1; // SetOption17 - Switch between decimal or hexadecimal output - Respond with decimal color values
Settings.flag3.hass_tele_on_power = 1; // SetOption59 - Send tele/%topic%/STATE in addition to stat/%topic%/RESULT - send tele/STATE message as stat/RESULT
// Settings.light_scheme = 0; // To just control color it needs to be Scheme 0
- if (strcmp_P(Settings.mqtt_fulltopic, PSTR("%topic%/%prefix%/"))) {
- strncpy_P(Settings.mqtt_fulltopic, PSTR("%topic%/%prefix%/"), sizeof(Settings.mqtt_fulltopic));
+ if (strcmp_P(SettingsText(SET_MQTT_FULLTOPIC), PSTR("%topic%/%prefix%/"))) {
+ SettingsUpdateText(SET_MQTT_FULLTOPIC, "%topic%/%prefix%/");
restart_flag = 2;
return; // As full topic has changed do restart first before sending discovery data
}
diff --git a/tasmota/xdrv_13_display.ino b/tasmota/xdrv_13_display.ino
index 42bb9858b..b34b8ed27 100644
--- a/tasmota/xdrv_13_display.ino
+++ b/tasmota/xdrv_13_display.ino
@@ -1008,7 +1008,7 @@ void DisplayLogBufferInit(void)
snprintf_P(buffer, sizeof(buffer), PSTR(D_CMND_HOSTNAME " %s"), my_hostname);
DisplayLogBufferAdd(buffer);
- snprintf_P(buffer, sizeof(buffer), PSTR(D_JSON_SSID " %s"), Settings.sta_ssid[Settings.sta_active]);
+ snprintf_P(buffer, sizeof(buffer), PSTR(D_JSON_SSID " %s"), SettingsText(SET_STASSID1 + Settings.sta_active));
DisplayLogBufferAdd(buffer);
snprintf_P(buffer, sizeof(buffer), PSTR(D_JSON_MAC " %s"), WiFi.macAddress().c_str());
DisplayLogBufferAdd(buffer);
@@ -1196,7 +1196,7 @@ void DisplayMqttSubscribe(void)
char ntopic[TOPSZ];
ntopic[0] = '\0';
- strlcpy(stopic, Settings.mqtt_fulltopic, sizeof(stopic));
+ strlcpy(stopic, SettingsText(SET_MQTT_FULLTOPIC), sizeof(stopic));
char *tp = strtok(stopic, "/");
while (tp != nullptr) {
if (!strcmp_P(tp, MQTT_TOKEN_PREFIX)) {
@@ -1205,7 +1205,7 @@ void DisplayMqttSubscribe(void)
strncat_P(ntopic, PSTR("+/"), sizeof(ntopic) - strlen(ntopic) -1); // Add single-level wildcards
tp = strtok(nullptr, "/");
}
- strncat(ntopic, Settings.mqtt_prefix[2], sizeof(ntopic) - strlen(ntopic) -1); // Subscribe to tele messages
+ strncat(ntopic, SettingsText(SET_MQTTPREFIX3), sizeof(ntopic) - strlen(ntopic) -1); // Subscribe to tele messages
strncat_P(ntopic, PSTR("/#"), sizeof(ntopic) - strlen(ntopic) -1); // Add multi-level wildcard
MqttSubscribe(ntopic);
disp_subscribed = true;
@@ -1219,7 +1219,7 @@ bool DisplayMqttData(void)
if (disp_subscribed) {
char stopic[TOPSZ];
- snprintf_P(stopic, sizeof(stopic) , PSTR("%s/"), Settings.mqtt_prefix[2]); // tele/
+ snprintf_P(stopic, sizeof(stopic) , PSTR("%s/"), SettingsText(SET_MQTTPREFIX3)); // tele/
char *tp = strstr(XdrvMailbox.topic, stopic);
if (tp) { // tele/tasmota/SENSOR
if (Settings.display_mode &0x04) {
diff --git a/tasmota/xdrv_20_hue.ino b/tasmota/xdrv_20_hue.ino
index 254fa4d99..973499a1f 100644
--- a/tasmota/xdrv_20_hue.ino
+++ b/tasmota/xdrv_20_hue.ino
@@ -365,17 +365,18 @@ void HueLightStatus1(uint8_t device, String *response)
// Any device whose friendly name start with "$" is considered hidden
bool HueActive(uint8_t device) {
if (device > MAX_FRIENDLYNAMES) { device = MAX_FRIENDLYNAMES; }
- return '$' != Settings.friendlyname[device-1][0];
+// return '$' != Settings.friendlyname[device-1][0];
+ return '$' != *SettingsText(SET_FRIENDLYNAME1 +device -1];
}
void HueLightStatus2(uint8_t device, String *response)
{
*response += FPSTR(HUE_LIGHTS_STATUS_JSON2);
if (device <= MAX_FRIENDLYNAMES) {
- response->replace("{j1", Settings.friendlyname[device-1]);
+ response->replace("{j1", SettingsText(SET_FRIENDLYNAME1 +device -1));
} else {
char fname[33];
- strcpy(fname, Settings.friendlyname[MAX_FRIENDLYNAMES-1]);
+ strcpy(fname, SettingsText(SET_FRIENDLYNAME1 + MAX_FRIENDLYNAMES -1));
uint32_t fname_len = strlen(fname);
if (fname_len > 30) { fname_len = 30; }
fname[fname_len++] = '-';
diff --git a/tasmota/xdrv_21_wemo.ino b/tasmota/xdrv_21_wemo.ino
index 4a50560e2..13e867ae6 100644
--- a/tasmota/xdrv_21_wemo.ino
+++ b/tasmota/xdrv_21_wemo.ino
@@ -241,7 +241,7 @@ void HandleUpnpSetupWemo(void)
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, PSTR(D_WEMO_SETUP));
String setup_xml = FPSTR(WEMO_SETUP_XML);
- setup_xml.replace("{x1", Settings.friendlyname[0]);
+ setup_xml.replace("{x1", SettingsText(SET_FRIENDLYNAME1));
setup_xml.replace("{x2", WemoUuid());
setup_xml.replace("{x3", WemoSerialnumber());
WSSend(200, CT_XML, setup_xml);
diff --git a/tasmota/xdrv_99_debug.ino b/tasmota/xdrv_99_debug.ino
index b347035e1..22bc5e162 100644
--- a/tasmota/xdrv_99_debug.ino
+++ b/tasmota/xdrv_99_debug.ino
@@ -25,8 +25,6 @@
#endif // USE_DEBUG_DRIVER
#endif // DEBUG_THEO
-//#define USE_DEBUG_SETTING_NAMES
-
#ifdef USE_DEBUG_DRIVER
/*********************************************************************************************\
* Virtual debugging support - Part1
@@ -64,9 +62,6 @@
const char kDebugCommands[] PROGMEM = "|" // No prefix
D_CMND_CFGDUMP "|" D_CMND_CFGPEEK "|" D_CMND_CFGPOKE "|"
-#ifdef USE_DEBUG_SETTING_NAMES
- D_CMND_CFGSHOW "|"
-#endif
#ifdef USE_WEBSERVER
D_CMND_CFGXOR "|"
#endif
@@ -82,9 +77,6 @@ const char kDebugCommands[] PROGMEM = "|" // No prefix
void (* const DebugCommand[])(void) PROGMEM = {
&CmndCfgDump, &CmndCfgPeek, &CmndCfgPoke,
-#ifdef USE_DEBUG_SETTING_NAMES
- &CmndCfgShow,
-#endif
#ifdef USE_WEBSERVER
&CmndCfgXor,
#endif
@@ -391,36 +383,6 @@ void DebugCfgPoke(char* parms)
AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: 0x%0LX (%lu) poked to 0x%0LX (%lu)"), address, data32, data32, ndata32, ndata32);
}
-#ifdef USE_DEBUG_SETTING_NAMES
-void DebugCfgShow(uint8_t more)
-{
- uint8_t *SetAddr;
- SetAddr = (uint8_t *)&Settings;
-
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: Hostname (%d) [%s]"), (uint8_t *)&Settings.hostname - SetAddr, sizeof(Settings.hostname)-1, Settings.hostname);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: SSids (%d) [%s], [%s]"), (uint8_t *)&Settings.sta_ssid - SetAddr, sizeof(Settings.sta_ssid[0])-1, Settings.sta_ssid[0], Settings.sta_ssid[1]);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: Friendlynames (%d) [%s], [%s], [%s], [%s]"), (uint8_t *)&Settings.friendlyname - SetAddr, sizeof(Settings.friendlyname[0])-1, Settings.friendlyname[0], Settings.friendlyname[1], Settings.friendlyname[2], Settings.friendlyname[3]);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: OTA Url (%d) [%s]"), (uint8_t *)&Settings.ota_url - SetAddr, sizeof(Settings.ota_url)-1, Settings.ota_url);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: StateText (%d) [%s], [%s], [%s], [%s]"), (uint8_t *)&Settings.state_text - SetAddr, sizeof(Settings.state_text[0])-1, Settings.state_text[0], Settings.state_text[1], Settings.state_text[2], Settings.state_text[3]);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: Syslog Host (%d) [%s]"), (uint8_t *)&Settings.syslog_host - SetAddr, sizeof(Settings.syslog_host)-1, Settings.syslog_host);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: NTP Servers (%d) [%s], [%s], [%s]"), (uint8_t *)&Settings.ntp_server - SetAddr, sizeof(Settings.ntp_server[0])-1, Settings.ntp_server[0], Settings.ntp_server[1], Settings.ntp_server[2]);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: MQTT Host (%d) [%s]"), (uint8_t *)&Settings.mqtt_host - SetAddr, sizeof(Settings.mqtt_host)-1, Settings.mqtt_host);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: MQTT Client (%d) [%s]"), (uint8_t *)&Settings.mqtt_client - SetAddr, sizeof(Settings.mqtt_client)-1, Settings.mqtt_client);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: MQTT User (%d) [%s]"), (uint8_t *)&Settings.mqtt_user - SetAddr, sizeof(Settings.mqtt_user)-1, Settings.mqtt_user);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: MQTT FullTopic (%d) [%s]"), (uint8_t *)&Settings.mqtt_fulltopic - SetAddr, sizeof(Settings.mqtt_fulltopic)-1, Settings.mqtt_fulltopic);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: MQTT Topic (%d) [%s]"), (uint8_t *)&Settings.mqtt_topic - SetAddr, sizeof(Settings.mqtt_topic)-1, Settings.mqtt_topic);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: MQTT GroupTopic (%d) [%s]"), (uint8_t *)&Settings.mqtt_grptopic - SetAddr, sizeof(Settings.mqtt_grptopic)-1, Settings.mqtt_grptopic);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: MQTT ButtonTopic (%d) [%s]"), (uint8_t *)&Settings.button_topic - SetAddr, sizeof(Settings.button_topic)-1, Settings.button_topic);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: MQTT SwitchTopic (%d) [%s]"), (uint8_t *)&Settings.switch_topic - SetAddr, sizeof(Settings.switch_topic)-1, Settings.switch_topic);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: MQTT Prefixes (%d) [%s], [%s], [%s]"), (uint8_t *)&Settings.mqtt_prefix - SetAddr, sizeof(Settings.mqtt_prefix[0])-1, Settings.mqtt_prefix[0], Settings.mqtt_prefix[1], Settings.mqtt_prefix[2]);
- if (17 == more) {
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: AP Passwords (%d) [%s], [%s]"), (uint8_t *)&Settings.sta_pwd - SetAddr, sizeof(Settings.sta_pwd[0])-1, Settings.sta_pwd[0], Settings.sta_pwd[1]);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: MQTT Password (%d) [%s]"), (uint8_t *)&Settings.mqtt_pwd - SetAddr, sizeof(Settings.mqtt_pwd)-1, Settings.mqtt_pwd);
- AddLog_P2(LOG_LEVEL_INFO, PSTR("%03X: Web Password (%d) [%s]"), (uint8_t *)&Settings.web_password - SetAddr, sizeof(Settings.web_password)-1, Settings.web_password);
- }
-}
-#endif // USE_DEBUG_SETTING_NAMES
-
void SetFlashMode(uint8_t mode)
{
uint8_t *_buffer;
@@ -474,14 +436,6 @@ void CmndCfgPoke(void)
ResponseCmndDone();
}
-#ifdef USE_DEBUG_SETTING_NAMES
-void CmndCfgShow(void)
-{
- DebugCfgShow(XdrvMailbox.payload);
- ResponseCmndDone();
-}
-#endif // USE_DEBUG_SETTING_NAMES
-
#ifdef USE_WEBSERVER
void CmndCfgXor(void)
{
From e47c8710fe428b6077b72b32781ac1f5f3079f4a Mon Sep 17 00:00:00 2001
From: bjeram
Date: Mon, 16 Dec 2019 16:55:52 +0100
Subject: [PATCH 073/559] setting pinMode for the pin used by RFRecv to INPUT
---
tasmota/xdrv_17_rcswitch.ino | 1 +
1 file changed, 1 insertion(+)
diff --git a/tasmota/xdrv_17_rcswitch.ino b/tasmota/xdrv_17_rcswitch.ino
index dfe5dc66a..156535876 100644
--- a/tasmota/xdrv_17_rcswitch.ino
+++ b/tasmota/xdrv_17_rcswitch.ino
@@ -85,6 +85,7 @@ void RfInit(void)
mySwitch.enableTransmit(pin[GPIO_RFSEND]);
}
if (pin[GPIO_RFRECV] < 99) {
+ pinMode( pin[GPIO_RFRECV], INPUT);
mySwitch.enableReceive(pin[GPIO_RFRECV]);
}
}
From c1bb875abd7fd89e44d6ab21bf9137401fad02d8 Mon Sep 17 00:00:00 2001
From: Adrian Scillato <39969427+ascillato2@users.noreply.github.com>
Date: Mon, 16 Dec 2019 14:37:18 -0300
Subject: [PATCH 074/559] Fix typo
---
tasmota/xdrv_20_hue.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/xdrv_20_hue.ino b/tasmota/xdrv_20_hue.ino
index 973499a1f..1d13ee263 100644
--- a/tasmota/xdrv_20_hue.ino
+++ b/tasmota/xdrv_20_hue.ino
@@ -366,7 +366,7 @@ void HueLightStatus1(uint8_t device, String *response)
bool HueActive(uint8_t device) {
if (device > MAX_FRIENDLYNAMES) { device = MAX_FRIENDLYNAMES; }
// return '$' != Settings.friendlyname[device-1][0];
- return '$' != *SettingsText(SET_FRIENDLYNAME1 +device -1];
+ return '$' != *SettingsText(SET_FRIENDLYNAME1 +device -1);
}
void HueLightStatus2(uint8_t device, String *response)
From 98579fba0f0662cb7a8277740bfaa24cc7a9f89f Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Mon, 16 Dec 2019 21:23:25 -0300
Subject: [PATCH 075/559] KNX: Fix compilation issue when using KNX on
Tasmota-IR firmware type
---
tasmota/xdrv_11_knx.ino | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tasmota/xdrv_11_knx.ino b/tasmota/xdrv_11_knx.ino
index c848bddfe..b52c37e4d 100644
--- a/tasmota/xdrv_11_knx.ino
+++ b/tasmota/xdrv_11_knx.ino
@@ -499,6 +499,7 @@ void KNX_INIT(void)
if (GetUsedInModule(GPIO_DHT22, my_module.io)) { device_param[KNX_HUMIDITY-1].show = true; }
if (GetUsedInModule(GPIO_SI7021, my_module.io)) { device_param[KNX_HUMIDITY-1].show = true; }
+#if defined(USE_ENERGY_SENSOR)
// Any device with a Power Monitoring
if ( energy_flg != ENERGY_NONE ) {
device_param[KNX_ENERGY_POWER-1].show = true;
@@ -509,6 +510,7 @@ void KNX_INIT(void)
device_param[KNX_ENERGY_CURRENT-1].show = true;
device_param[KNX_ENERGY_POWERFACTOR-1].show = true;
}
+#endif
#ifdef USE_RULES
device_param[KNX_SLOT1-1].show = true;
From 6ea1cff2674d8f6ce6f7f56802b37e4c615a7574 Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Mon, 16 Dec 2019 22:13:24 -0300
Subject: [PATCH 076/559] Add GPS Support
---
tasmota/tasmota_template.h | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h
index 5556629f9..793c93626 100644
--- a/tasmota/tasmota_template.h
+++ b/tasmota/tasmota_template.h
@@ -214,6 +214,8 @@ enum UserSelectablePins {
GPIO_TASMOTASLAVE_RST_INV, // Slave Reset Inverted
GPIO_HPMA_RX, // Honeywell HPMA115S0 Serial interface
GPIO_HPMA_TX, // Honeywell HPMA115S0 Serial interface
+ GPIO_GPS_RX, // GPS serial interface
+ GPIO_GPS_TX, // GPS serial interface
GPIO_SENSOR_END };
// Programmer selectable GPIO functionality
@@ -293,7 +295,7 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_SM2135_CLK "|" D_SENSOR_SM2135_DAT "|"
D_SENSOR_DEEPSLEEP "|" D_SENSOR_EXS_ENABLE "|"
D_SENSOR_SLAVE_TX "|" D_SENSOR_SLAVE_RX "|" D_SENSOR_SLAVE_RESET "|" D_SENSOR_SLAVE_RESET "i|"
- D_SENSOR_HPMA_RX "|" D_SENSOR_HPMA_TX "|"
+ D_SENSOR_HPMA_RX "|" D_SENSOR_HPMA_TX "|" D_SENSOR_GPS_RX "|" D_SENSOR_GPS_TX
;
const char kSensorNamesFixed[] PROGMEM =
@@ -756,6 +758,11 @@ const uint8_t kGpioNiceList[] PROGMEM = {
#ifdef USE_DEEPSLEEP
GPIO_DEEPSLEEP
#endif
+#ifdef USE_GPS
+ GPIO_GPS_RX, // GPS serial interface
+ GPIO_GPS_TX // GPS serial interface
+#endif
+
};
const uint8_t kModuleNiceList[] PROGMEM = {
From 0dd20a4c2b16b1360d3da241dc7b755510d7cc1d Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Mon, 16 Dec 2019 22:50:19 -0300
Subject: [PATCH 077/559] Add GPS Support
---
tasmota/my_user_config.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 5ff6bb6a2..7f1954690 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -470,6 +470,8 @@
// #define USE_PN532_DATA_RAW // Allow DATA block to be used by non-alpha-numberic data (+ 80 bytes code, 48 bytes ram)
//#define USE_RDM6300 // Add support for RDM6300 125kHz RFID Reader (+0k8)
//#define USE_IBEACON // Add support for bluetooth LE passive scan of ibeacon devices (uses HM17 module)
+//#define USE_GPS // Add support for GPS and NTP Server for becoming Stratus 1 Time Source (+ 3.1kb flash, +132 bytes RAM)
+// #define USE_FLOG // Add support for GPS logging in OTA's Flash (Experimental) (+ 2.9kb flash, +8 bytes RAM)
// -- Power monitoring sensors --------------------
#define USE_ENERGY_MARGIN_DETECTION // Add support for Energy Margin detection (+1k6 code)
From f065ccaf0824ead2d600e4738c545d99be7492df Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Mon, 16 Dec 2019 23:01:07 -0300
Subject: [PATCH 078/559] Add GPS Support
---
tasmota/support_flash_log.ino | 432 +++++++++++++++++
tasmota/xsns_58_GPS.ino | 858 ++++++++++++++++++++++++++++++++++
2 files changed, 1290 insertions(+)
create mode 100644 tasmota/support_flash_log.ino
create mode 100644 tasmota/xsns_58_GPS.ino
diff --git a/tasmota/support_flash_log.ino b/tasmota/support_flash_log.ino
new file mode 100644
index 000000000..8d02ec2e8
--- /dev/null
+++ b/tasmota/support_flash_log.ino
@@ -0,0 +1,432 @@
+/*
+ support_flash_log.ino - log to flash support for Sonoff-Tasmota
+
+ Copyright (C) 2019 Theo Arends & Christian Baars
+
+ 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 .
+
+ --------------------------------------------------------------------------------------------
+ Version Date Action Description
+ --------------------------------------------------------------------------------------------
+
+
+ ---
+ 1.0.0.0 20190923 started - further development by Christian Baars - https://github.com/Staars/Sonoff-Tasmota
+ forked - from arendst/tasmota - https://github.com/arendst/Sonoff-Tasmota
+ base - code base from arendst and - written from scratch
+
+*/
+
+/********************************************************************************************\
+| * Generic helper class to log arbitrary data to the OTA-partition
+| * Working principle: Add preferrable small chunks of data to the sector buffer, which will
+| * be written to FLASH when full automatically. The next sector will be
+| * erased and is the anchor point for downloading and state configuration
+| * after reboot.
+\*********************************************************************************************/
+
+#ifdef USE_FLOG
+
+class FLOG
+
+#define MAGIC_WORD_FL 0x464c //F, L
+
+{
+
+struct header_t{
+ uint16_t magic_word; // FL
+ uint16_t padding; // leave something for the future
+ uint32_t physical_start_sector:10; //first used sector of the current FLOG
+ uint32_t number:10; // number of this sector, starting with 0 for the first sector
+ uint32_t buf_pointer:12; //internal pointer to the next free position in the buffer = first empty byte when reading
+ }; // should be 4-byte-aligned
+
+private:
+void _readSector(uint8_t one_sector);
+void _eraseSector(uint8_t one_sector);
+void _writeSector(uint8_t one_sector);
+void _clearBuffer(void);
+void _searchSaves(void);
+void _findFirstErasedSector(void);
+void _showBuffer(void);
+void _initBuffer(void);
+void _saveBufferToSector(void);
+header_t _saved_header;
+
+public:
+ uint32_t size; // size of OTA-partition
+ uint32_t start; // start position of OTA-partition in bytes
+ uint32_t end; // end position of OTA-partition in bytes
+ uint16_t num_sectors; // calculated number of sectors with a size of 4096 bytes
+
+ uint16_t first_erased_sector; // this will be our new start
+ uint16_t current_sector; // always point to next sector, where data from the buffer will be written to
+
+ uint16_t bytes_left; // byte per buffer (of sector size 4096 bytes - 8 byte header size)
+ uint16_t sectors_left; // number of saved sectors for download
+
+ uint8_t mode = 0; // 0 - write once on all sectors, then stop, 1 - write infinitely through the sectors
+ bool found_saved_data = false; // possible saved data has been found
+ bool ready = false; // the FLOG is initialized
+ bool running_download = false; // a download operation is running
+ bool recording = false; // ready for recording
+
+ union sector_t{
+ uint32_t dword_buffer[FLASH_SECTOR_SIZE/4];
+ uint8_t byte_buffer[FLASH_SECTOR_SIZE];
+ header_t header; // should be 4-byte-aligned
+ } sector; // the global buffer of 4096 bytes, used for reading and writing
+
+ void init(void);
+ void addToBuffer(uint8_t src[], uint32_t size);
+ void startRecording(bool append);
+ void stopRecording(void);
+
+ typedef void (*CallbackNoArgs) (); // simple typedef for a callback
+ typedef void (*CallbackWithArgs) (uint8_t *_record); // typedef for a callback with one argument
+
+ void startDownload(size_t size, CallbackNoArgs sendHeader, CallbackWithArgs sendRecord, CallbackNoArgs sendFooter);
+};
+
+extern "C" uint32_t _SPIFFS_start; // we make shure later, that only one of the two is really used ...
+extern "C" uint32_t _FS_start; // ... depending on core-sdk-version
+
+/**
+ * @brief Will examine the start and end of the OTA-partition. Then the sector size will be computed, saved data should be found and the initial state will be configured.
+ */
+void FLOG::init(void)
+{
+DEBUG_SENSOR_LOG(PSTR("FLOG: init ..."));
+size = ESP.getSketchSize();
+// round one sector up
+start = (size + FLASH_SECTOR_SIZE - 1) & (~(FLASH_SECTOR_SIZE - 1));
+#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2) || defined(ARDUINO_ESP8266_RELEASE_2_5_0) || defined(ARDUINO_ESP8266_RELEASE_2_5_1) || defined(ARDUINO_ESP8266_RELEASE_2_5_2)
+end = (uint32_t)&_SPIFFS_start - 0x40200000;
+#else // Core > 2.5.2 and STAGE
+end = (uint32_t)&_FS_start - 0x40200000;
+#endif
+num_sectors = (end - start)/FLASH_SECTOR_SIZE;
+DEBUG_SENSOR_LOG(PSTR("FLOG: size: 0x%lx, start: 0x%lx, end: 0x%lx, num_sectors(dec): %lu"), size, start, end, num_sectors );
+_findFirstErasedSector();
+if(first_erased_sector == 0xffff){
+ _eraseSector(0);
+ first_erased_sector = 0; // start with sector 0, could be first run or after crash
+}
+_searchSaves();
+_initBuffer();
+ready = true;
+}
+
+/********************************************************************************************\
+| *
+| * private helper functions
+| *
+\*********************************************************************************************/
+
+/**
+ * @brief Read a sector into the global buffer
+ *
+ * @param one_sector as an uint8_t
+ */
+void FLOG::_readSector(uint8_t one_sector){
+ DEBUG_SENSOR_LOG(PSTR("FLOG: read sector number: %u" ), one_sector);
+ ESP.flashRead(start+(one_sector * FLASH_SECTOR_SIZE),(uint32_t *)§or.dword_buffer, FLASH_SECTOR_SIZE);
+}
+/**
+ * @brief Erase the given sector og the OTA-partition
+ *
+ * @param one_sector as an uint8_t
+ */
+void FLOG::_eraseSector(uint8_t one_sector){ // Erase sector of FLOG/OTA
+ DEBUG_SENSOR_LOG(PSTR("FLOG: erasing sector number: %u" ), one_sector);
+ ESP.flashEraseSector((start/FLASH_SECTOR_SIZE)+one_sector);
+}
+/**
+ * @brief Write the global buffer to the given sector
+ *
+ * @param one_sector as an uint8_t
+ */
+void FLOG::_writeSector(uint8_t one_sector){ // Write sector of FLOG/OTA
+ DEBUG_SENSOR_LOG(PSTR("FLOG: write buffer to sector number: %u" ), one_sector);
+ ESP.flashWrite(start+(one_sector * FLASH_SECTOR_SIZE),(uint32_t *)§or.dword_buffer, FLASH_SECTOR_SIZE);
+}
+/**
+ * @brief Clear the global buffer, but leave the header intact
+ *
+ */
+void FLOG::_clearBuffer(){ //not the header
+ for (uint32_t i = sizeof(sector.header)/4; i<(sizeof(sector.dword_buffer)/4); i++){
+ sector.dword_buffer[i] = 0;
+ }
+ sector.header.buf_pointer = sizeof(sector.header);
+ // _showBuffer();
+}
+/**
+ * @brief Write global buffer to FLASH and set the current sector to the next valid position, maybe to 0
+ *
+ */
+void FLOG::_saveBufferToSector(){ // save buffer to already erased(!) sector, erase next sector, clear buffer, increment number
+ DEBUG_SENSOR_LOG(PSTR("FLOG: write buffer to current sector: %u" ),current_sector);
+ _writeSector(current_sector);
+ if(current_sector == num_sectors){ // 1 MB means ~110 sectors in OTA-partition, if we reach this, start a again
+ current_sector = 0;
+ }
+ else{
+ current_sector++;
+ }
+ _eraseSector(current_sector); // we always erase the next sector, to find out were we are after restart
+ _clearBuffer();
+ sector.header.number++;
+ DEBUG_SENSOR_LOG(PSTR("FLOG: new sector header number: %u" ),sector.header.number);
+}
+
+/**
+ * @brief Typically after restart find the first erased sector as a starting point for further operations
+ *
+ */
+void FLOG::_findFirstErasedSector(){
+ for (uint32_t i = 0; i3){
+ break;
+ }
+ }
+}
+
+/**
+ * @brief pass a data entry/record as uint8_t array with its size
+ *
+ * @param src uint8_t array
+ * @param size uint32_t size of the array
+ */
+void FLOG::addToBuffer(uint8_t src[], uint32_t size){
+ if(mode == 0){
+ if(sector.header.number == num_sectors && !ready){
+ return; // we ignore additional calls and are done, TODO: maybe use meaningful return values
+ }
+ }
+ if((FLASH_SECTOR_SIZE-sector.header.buf_pointer-sizeof(sector.header))>size){
+ // DEBUG_SENSOR_LOG(PSTR("FLOG: enough space left in buffer: %u"), FLASH_SECTOR_SIZE - sector.header.buf_pointer - sizeof(sector.header));
+ // DEBUG_SENSOR_LOG(PSTR("FLOG: current buf_pointer: %u, size of added: %u"), sector.header.buf_pointer, size);
+
+ memcpy(sector.byte_buffer + sector.header.buf_pointer, src, size);
+ sector.header.buf_pointer+=size; // this is the next free spot
+ // DEBUG_SENSOR_LOG(PSTR("FLOG: current buf_pointer: %u"), sector.header.buf_pointer);
+ }
+ else{
+ DEBUG_SENSOR_LOG(PSTR("FLOG: save buffer to flash sector: %u"), current_sector);
+ DEBUG_SENSOR_LOG(PSTR("FLOG: current buf_pointer: %u"), sector.header.buf_pointer);
+ _saveBufferToSector();
+ sectors_left++;
+ // but now save the data to the fresh buffer
+ if((FLASH_SECTOR_SIZE-sector.header.buf_pointer-sizeof(sector.header))>size){
+ memcpy(sector.byte_buffer + sector.header.buf_pointer, src, size);
+ sector.header.buf_pointer+=size; // this is the next free spot
+ }
+ }
+}
+
+/**
+ * @brief shows that it is ready to accept recording
+ *
+ * @param append - if true append to current log, else start a new log
+ */
+void FLOG::startRecording(bool append){
+ if(recording){
+ DEBUG_SENSOR_LOG(PSTR("FLOG: already recording"));
+ return;
+ }
+ recording = true;
+ DEBUG_SENSOR_LOG(PSTR("FLOG: start recording"));
+ _initBuffer();
+ if(!found_saved_data) {
+ append = false; // nothing to append to, we silently start a new log
+ }
+ if(append){
+ sector.header.number = _saved_header.number+1; // continue with the next number
+ sector.header.physical_start_sector = _saved_header.physical_start_sector; // keep the old start sector
+ }
+ else{ //new log, old data is lost
+ sector.header.physical_start_sector = (uint16_t)first_erased_sector;
+ found_saved_data = false;
+ sectors_left = 0;
+ }
+ }
+
+/**
+ * @brief stop recording including saving current buffer to FLASH
+ *
+ */
+void FLOG::stopRecording(void){
+ _saveBufferToSector();
+ _findFirstErasedSector();
+ _searchSaves();
+ _initBuffer();
+ recording = false;
+ found_saved_data = true;
+ }
+
+/**
+ * @brief Will start a downloads, needs the correct implementation of 3 callback functions
+ *
+ * @param size: size of the data entry/record in bytes, i.e. sizeof(myStruct)
+ * @param sendHeader: should implement at least something like:
+ * @example WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN); // This is very likely unknown!!
+ * WebServer->sendHeader(F("Content-Disposition"), F("attachment; filename=myfile.txt"));
+ * @param sendRecord: will receive the memory address as "uint8_t* addr" and should consume the current entry/record
+ * @example myStruct_t *entry = (myStruct_t*)addr;
+ * Then make useful Strings and send it, i.e.: WebServer->sendContent_P(myString);
+ * @param sendFooter: finish the download, should implement at least:
+ * @example WebServer->sendContent("");
+ */
+ void FLOG::startDownload(size_t size, CallbackNoArgs sendHeader, CallbackWithArgs sendRecord, CallbackNoArgs sendFooter){
+
+ _readSector(sector.header.physical_start_sector);
+ uint32_t next_sector = sector.header.physical_start_sector;
+ bytes_left = sector.header.buf_pointer - sizeof(sector.header);
+ DEBUG_SENSOR_LOG(PSTR("FLOG: create file for download, will process %u bytes"), bytes_left);
+ running_download = true;
+ // Callback 1: Create the header incl. file name, content length (probably unknown!!) and additional header stuff
+ sendHeader();
+
+ while(sectors_left){
+ DEBUG_SENSOR_LOG(PSTR("FLOG: next sector: %u"), next_sector);
+ //initially we have the first sector already loaded, so we do it at the bottom
+ uint32_t k = sizeof(sector.header);
+ while(bytes_left){
+ // DEBUG_SENSOR_LOG(PSTR("FLOG: DL %u %u"), Flog->sector.byte_buffer[k],Flog->sector.byte_buffer[k+1]);
+ uint8_t *_record_start = (uint8_t*)§or.byte_buffer[k]; // this is basically the start address of the current record/entry of the Log
+ // Callback 2: send the pointer for consuming the next record/entry and doing something useful to create a file
+ sendRecord(_record_start);
+ if(k%128 == 0){ // give control to the system every x iteration, TODO: This will fail, when record/entry-size is not 8
+ // DEBUG_SENSOR_LOG(PSTR("FLOG: now loop(), %u bytes left"), Flog->bytes_left);
+ OsWatchLoop();
+ delay(sleep);
+ }
+ k+=size;
+ if(bytes_left>7){
+ bytes_left-=size;
+ }
+ else{
+ bytes_left = 0;
+ DEBUG_SENSOR_LOG(PSTR("FLOG: Flog->bytes_left not dividable by 8 ??????"));
+ }
+ }
+ next_sector++;
+ if(next_sector>num_sectors){
+ next_sector = 0;
+ }
+ sectors_left--;
+ _readSector(next_sector);
+ bytes_left = sector.header.buf_pointer - sizeof(sector.header);
+ OsWatchLoop();
+ delay(sleep);
+ }
+ running_download = false;
+ // Callback 3: create a footer or simply finish the download with an empty payload
+ sendFooter();
+ // refresh settings for another download
+ _searchSaves();
+ _initBuffer();
+ }
+
+ #endif // USE_FLOG
\ No newline at end of file
diff --git a/tasmota/xsns_58_GPS.ino b/tasmota/xsns_58_GPS.ino
new file mode 100644
index 000000000..f2808f8fd
--- /dev/null
+++ b/tasmota/xsns_58_GPS.ino
@@ -0,0 +1,858 @@
+/*
+ xsns_92_GPS_UBX.ino - GPS UBLOX support for Sonoff-Tasmota
+
+ Copyright (C) 2019 Theo Arends, Christian Baars and Adrian Scillato
+
+ 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 .
+
+ --------------------------------------------------------------------------------------------
+ Version Date Action Description
+ --------------------------------------------------------------------------------------------
+
+ 0.9.1.0 20191216 integrate - Added pin specifications from Tasmota WEB UI
+ ---
+ 0.9.0.0 20190817 started - further development by Christian Baars - https://github.com/Staars/Sonoff-Tasmota
+ forked - from arendst/tasmota - https://github.com/arendst/Sonoff-Tasmota
+ base - code base from arendst and - https://www.youtube.com/watch?v=TwhCX0c8Xe0
+
+## GPS-driver for the Ublox-series 6-8
+Driver is tested on a NEO-6m and a Beitian-220. Series 7 should work too. This adds only about 6kb to the program size, because the efficient UBX-protocol is used. These modules are quite cheap, starting at about 3.50€ for the NEO-6m.
+
+## Features:
+- get position and time data
+- sets system time automatically and Settings.latitude and Settings.longitude via command
+- can log postion data with timestamp to flash with a small memory footprint of only 12 Bytes per record
+- constructs a GPX-file for download of this data
+- Web-UI
+- simplified NTP-server
+- command interface
+
+## Usage:
+The serial pins are GPX_RX and GPS_TX, no further installation steps needed. To get more debug information compile it with option "DEBUG_TASMOTA_SENSOR".
+
+
+## Commands:
+
++ sensor92 0
+ write to all available sectors, then restart and overwrite the older ones
+
++ sensor92 1
+ write to all available sectors, then restart and overwrite the older ones
+
++ sensor92 2
+ filter out horizontal drift noise
+
++ sensor92 3
+ turn off noise filter
+
++ sensor92 4
+ start recording, new data will be appended
+
++ sensor92 5
+ start new recording, old data will lost
+
++ sensor92 6
+ stop recording, download link will be visible in Web-UI
+
++ sensor92 7
+ send mqtt on new postion + TELE -> consider to set TELE to a very high value
+
++ sensor92 8
+ only TELE message
+
++ sensor92 9
+ start NTP-server
+
++ sensor92 10
+ deactivate NTP-server
+
++ sensor92 11
+ force update of Tasmota-system-UTC with every new GPS-time-message
+
++ sensor92 12
+ do not update of Tasmota-system-UTC with every new GPS-time-message
+
++ sensor92 13
+ set latitude and longitude in settings
+
+
+
+## Rules examples for SSD1306 32x128
+
+
+rule1 on tele-GPS#lat do DisplayText [s1p21c1l01f1]LAT: %value% endon on tele-GPS#lon do DisplayText [s1p21c1l2]LON: %value% endon on switch1#state==3 do sensor92 4 endon on switch1#state==2 do sensor92 6 endon
+
+rule2 on tele-GPS#int>9 do DisplayText [f0c9l4]I%value% endon on tele-GPS#int<10 do DisplayText [f0c9l4]I0%value% endon on tele-GPS#fil==1 do DisplayText [f0c18l4]F endon on tele-GPS#fil==0 do DisplayText [f0c18l4]N endon
+
+rule3 on tele-FLOG#sec do DisplayText [f0c1l4]SAV:%value% endon on tele-FLOG#rec==1 do DisplayText [f0c1l4]REC: endon on tele-FLOG#mode do DisplayText [f0c14l4]M%value% endon
+
+*/
+
+#ifdef USE_GPS
+
+#include "NTPServer.h"
+#include "NTPPacket.h"
+
+
+/*********************************************************************************************\
+ * constants
+\*********************************************************************************************/
+
+#define D_CMND_UBX "UBX"
+
+const char S_JSON_UBX_COMMAND_NVALUE[] PROGMEM = "{\"" D_CMND_UBX "%s\":%d}";
+
+const char kUBXTypes[] PROGMEM = "UBX";
+
+#define UBX_LAT_LON_THRESHOLD 1000 // filter out some noise of local drift
+
+
+/********************************************************************************************\
+| *globals
+\*********************************************************************************************/
+
+const char UBLOX_INIT[] PROGMEM = {
+ // Disable NMEA
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x24, // GxGGA off
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x2B, // GxGLL off
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x02,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x32, // GxGSA off
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x39, // GxGSV off
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x04,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x40, // GxRMC off
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x05,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x47, // GxVTG off
+
+ // Disable UBX
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0x01,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0xDC, //NAV-PVT off
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0xB9, //NAV-POSLLH off
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xC0, //NAV-STATUS off
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0x01,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x92, //NAV-TIMEUTC off
+
+ // Enable UBX
+ // 0xB5,0x62,0x06,0x01,0x08,0x00,0x01,0x07,0x00,0x01,0x00,0x00,0x00,0x00,0x18,0xE1, //NAV-PVT on
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0x01,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x13,0xBE, //NAV-POSLLH on
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0x01,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x14,0xC5, //NAV-STATUS on
+ 0xB5,0x62,0x06,0x01,0x08,0x00,0x01,0x21,0x00,0x01,0x00,0x00,0x00,0x00,0x32,0x97, //NAV-TIMEUTC on
+
+ // Rate - we will not reset it for the moment after restart
+ // 0xB5,0x62,0x06,0x08,0x06,0x00,0x64,0x00,0x01,0x00,0x01,0x00,0x7A,0x12, //(10Hz)
+ // 0xB5,0x62,0x06,0x08,0x06,0x00,0xC8,0x00,0x01,0x00,0x01,0x00,0xDE,0x6A, //(5Hz)
+ // 0xB5,0x62,0x06,0x08,0x06,0x00,0xE8,0x03,0x01,0x00,0x01,0x00,0x01,0x39 //(1Hz)
+ // 0xB5,0x62,0x06,0x08,0x06,0x00,0xD0,0x07,0x01,0x00,0x01,0x00,0xED,0xBD //(0.5Hz)
+};
+
+char UBX_name[4];
+
+struct UBX_t{
+ const char UBX_HEADER[2] = { 0xB5, 0x62 }; // TODO: Check if we really save space here inside the struct
+ const char NAV_POSLLH_HEADER[2] = { 0x01, 0x02 };
+ const char NAV_STATUS_HEADER[2] = { 0x01, 0x03 };
+ const char NAV_TIME_HEADER[2] = { 0x01, 0x21 };
+
+ struct entry_t{
+ int32_t lat; //raw sensor value
+ int32_t lon; //raw sensor value
+ uint32_t time; //local time from system (maybe provided by the sensor)
+ };
+
+ union {
+ entry_t values;
+ uint8_t bytes[sizeof(entry_t)];
+ } rec_buffer;
+
+ struct POLL_MSG {
+ uint8_t cls;
+ uint8_t id;
+ uint16_t zero;
+ };
+
+ struct NAV_POSLLH {
+ uint8_t cls;
+ uint8_t id;
+ uint16_t len;
+ uint32_t iTOW;
+ int32_t lon;
+ int32_t lat;
+ int32_t height;
+ int32_t hMSL;
+ uint32_t hAcc;
+ uint32_t vAcc;
+ };
+
+ struct NAV_STATUS {
+ uint8_t cls;
+ uint8_t id;
+ uint16_t len;
+ uint32_t iTOW;
+ uint8_t gpsFix;
+ uint8_t flags; //bit 0 - gpsfix valid
+ uint8_t fixStat;
+ uint8_t flags2;
+ uint32_t ttff;
+ uint32_t msss;
+ };
+
+ struct NAV_TIME_UTC {
+ uint8_t cls;
+ uint8_t id;
+ uint16_t len;
+ uint32_t iTOW;
+ uint32_t tAcc;
+ int32_t nano; // Nanoseconds of second, range -1e9 .. 1e9 (UTC)
+ uint16_t year;
+ uint8_t month;
+ uint8_t day;
+ uint8_t hour;
+ uint8_t min;
+ uint8_t sec;
+ struct {
+ uint8_t UTC:1;
+ uint8_t WKN:1; // week number
+ uint8_t TOW:1; // time of week
+ uint8_t padding:5;
+ } valid;
+ };
+
+ struct CFG_RATE {
+ uint8_t cls; //0x06
+ uint8_t id; //0x08
+ uint16_t len; // 6 bytes
+ uint16_t measRate; // in every ms -> 1 Hz = 1000 ms; 10 Hz = 100 ms -> x = 1000 ms / Hz
+ uint16_t navRate; // x measurements for 1 navigation event
+ uint16_t timeRef; // align to time system: 0= UTC, 1 = GPS, 2 = GLONASS, ...
+ char CK[2]; // checksum
+ };
+
+ struct {
+ uint32_t last_iTOW;
+ int32_t last_lat;
+ int32_t last_lon;
+ int32_t last_height;
+ uint32_t last_hAcc;
+ uint32_t last_vAcc;
+ uint8_t gpsFix;
+ uint8_t non_empty_loops; // in case of an unintended reset of the GPS, the serial interface will get flooded with NMEA
+ uint16_t log_interval; // in tenth of seconds
+ } state;
+
+ struct {
+ uint32_t filter_noise:1;
+ uint32_t send_when_new:1; // no teleinterval
+ uint32_t send_UI_only:1;
+ uint32_t runningNTP:1;
+ uint32_t forceUTCupdate:1;
+ // TODO: more to come
+ } mode;
+
+ union {
+ NAV_POSLLH navPosllh;
+ NAV_STATUS navStatus;
+ NAV_TIME_UTC navTime;
+ POLL_MSG pollMsg;
+ CFG_RATE cfgRate;
+ } Message;
+
+} UBX;
+
+enum UBXMsgType {
+ MT_NONE,
+ MT_NAV_POSLLH,
+ MT_NAV_STATUS,
+ MT_NAV_TIME,
+ MT_POLL
+};
+
+#ifdef USE_FLOG
+FLOG *Flog = nullptr;
+#endif //USE_FLOG
+TasmotaSerial *UBXSerial;
+
+NtpServer timeServer(PortUdp);
+
+/*********************************************************************************************\
+ * helper function
+\*********************************************************************************************/
+void UBXcalcChecksum(char* CK, size_t msgSize) {
+ memset(CK, 0, 2);
+ for (int i = 0; i < msgSize; i++) {
+ CK[0] += ((char*)(&UBX.Message))[i];
+ CK[1] += CK[0];
+ }
+}
+
+boolean UBXcompareMsgHeader(const char* msgHeader) {
+ char* ptr = (char*)(&UBX.Message);
+ return ptr[0] == msgHeader[0] && ptr[1] == msgHeader[1];
+}
+
+void UBXinitCFG(void){
+ for(uint32_t i = 0; i < sizeof(UBLOX_INIT); i++) {
+ UBXSerial->write( pgm_read_byte(UBLOX_INIT+i) );
+ }
+ DEBUG_SENSOR_LOG(PSTR("UBX: turn off NMEA"));
+
+/*
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_KNX D_ADD " GA #%d: %s " D_TO " %d/%d/%d"),
+ Settings.knx_GA_registered,
+ device_param_ga[GAop-1],
+ GA_FNUM, GA_AREA, GA_FDEF );
+*/
+
+
+
+
+}
+
+void UBXTriggerTele(void){
+ mqtt_data[0] = '\0';
+ if (MqttShowSensor()) {
+ MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain);
+#ifdef USE_RULES
+ RulesTeleperiod(); // Allow rule based HA messages
+#endif // USE_RULES
+ }
+}
+
+/********************************************************************************************/
+
+
+void UBXDetect(void)
+{
+ if ((pin[GPIO_GPS_RX] < 99) && (pin[GPIO_GPS_TX] < 99)) {
+ UBXSerial = new TasmotaSerial(pin[GPIO_GPS_RX], pin[GPIO_GPS_TX], 1, 0, 96); // 64 byte buffer is NOT enough
+ if (UBXSerial->begin(9600)) {
+ DEBUG_SENSOR_LOG(PSTR("UBX: started serial"));
+ if (UBXSerial->hardwareSerial()) {
+ ClaimSerial();
+ DEBUG_SENSOR_LOG(PSTR("UBX: claim HW"));
+ }
+ }
+ }
+
+ UBXinitCFG(); // turn of NMEA, only use "our" UBX-messages
+#ifdef USE_FLOG
+ if(!Flog){
+ Flog = new FLOG; // init Flash Log
+ Flog->init();
+ }
+#endif // USE_FLOG
+
+ UBX.state.log_interval = 10; // 1 second
+ UBX.mode.send_UI_only = true; // send UI data ...
+ UBXTriggerTele(); // ... once at after start
+}
+
+uint32_t UBXprocessGPS() {
+ static uint32_t fpos = 0;
+ static char checksum[2];
+ static uint8_t currentMsgType = MT_NONE;
+ static size_t payloadSize = sizeof(UBX.Message);
+
+ // DEBUG_SENSOR_LOG(PSTR("UBX: check for serial data"));
+ uint32_t data_bytes = 0;
+ while ( UBXSerial->available() ) {
+ data_bytes++;
+ byte c = UBXSerial->read();
+ if ( fpos < 2 ) {
+ // For the first two bytes we are simply looking for a match with the UBX header bytes (0xB5,0x62)
+ if ( c == UBX.UBX_HEADER[fpos] )
+ fpos++;
+ else
+ fpos = 0; // Reset to beginning state.
+ }
+ else {
+ // If we come here then fpos >= 2, which means we have found a match with the UBX_HEADER
+ // and we are now reading in the bytes that make up the payload.
+
+ // Place the incoming byte into the ubxMessage struct. The position is fpos-2 because
+ // the struct does not include the initial two-byte header (UBX_HEADER).
+ if ( (fpos-2) < payloadSize )
+ ((char*)(&UBX.Message))[fpos-2] = c;
+
+ fpos++;
+
+ if ( fpos == 4 ) {
+ // We have just received the second byte of the message type header,
+ // so now we can check to see what kind of message it is.
+ if ( UBXcompareMsgHeader(UBX.NAV_POSLLH_HEADER) ) {
+ currentMsgType = MT_NAV_POSLLH;
+ payloadSize = sizeof(UBX_t::NAV_POSLLH);
+ DEBUG_SENSOR_LOG(PSTR("UBX: got NAV_POSLLH"));
+ }
+ else if ( UBXcompareMsgHeader(UBX.NAV_STATUS_HEADER) ) {
+ currentMsgType = MT_NAV_STATUS;
+ payloadSize = sizeof(UBX_t::NAV_STATUS);
+ DEBUG_SENSOR_LOG(PSTR("UBX: got NAV_STATUS"));
+ }
+ else if ( UBXcompareMsgHeader(UBX.NAV_TIME_HEADER) ) {
+ currentMsgType = MT_NAV_TIME;
+ payloadSize = sizeof(UBX_t::NAV_TIME_UTC);
+ DEBUG_SENSOR_LOG(PSTR("UBX: got NAV_TIME_UTC"));
+ }
+ else {
+ // unknown message type, bail
+ fpos = 0;
+ continue;
+ }
+ }
+
+ if ( fpos == (payloadSize+2) ) {
+ // All payload bytes have now been received, so we can calculate the
+ // expected checksum value to compare with the next two incoming bytes.
+ UBXcalcChecksum(checksum, payloadSize);
+ }
+ else if ( fpos == (payloadSize+3) ) {
+ // First byte after the payload, ie. first byte of the checksum.
+ // Does it match the first byte of the checksum we calculated?
+ if ( c != checksum[0] ) {
+ // Checksum doesn't match, reset to beginning state and try again.
+ fpos = 0;
+ }
+ }
+ else if ( fpos == (payloadSize+4) ) {
+ // Second byte after the payload, ie. second byte of the checksum.
+ // Does it match the second byte of the checksum we calculated?
+ fpos = 0; // We will reset the state regardless of whether the checksum matches.
+ if ( c == checksum[1] ) {
+ // Checksum matches, we have a valid message.
+ return currentMsgType;
+ }
+ }
+ else if ( fpos > (payloadSize+4) ) {
+ // We have now read more bytes than both the expected payload and checksum
+ // together, so something went wrong. Reset to beginning state and try again.
+ fpos = 0;
+ }
+ }
+ }
+ // DEBUG_SENSOR_LOG(PSTR("UBX: got none or unknown Message"));
+ if(data_bytes!=0){
+ UBX.state.non_empty_loops++;
+ DEBUG_SENSOR_LOG(PSTR("UBX: got %u bytes, non-empty-loop: %u"), data_bytes, UBX.state.non_empty_loops);
+ }
+ else{
+ UBX.state.non_empty_loops = 0; // now a hidden GPS-device reset is unlikely
+ }
+ return MT_NONE;
+}
+
+/********************************************************************************************\
+| * callback functions for the download
+\*********************************************************************************************/
+#ifdef USE_FLOG
+void UBXsendHeader(void){
+ WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN);
+ WebServer->sendHeader(F("Content-Disposition"), F("attachment; filename=TASMOTA.gpx"));
+ WSSend(200, CT_STREAM, F(
+ "\r\n"
+ "\r\n"
+ "\r\n\r\n"));
+}
+
+void UBXsendRecord(uint8_t *buf){
+ char record[100];
+ char stime[32];
+ UBX_t::entry_t *entry = (UBX_t::entry_t*)buf;
+ snprintf_P(stime, sizeof(stime), GetDT(entry->time).c_str());
+ char lat[12];
+ char lon[12];
+ dtostrfd((double)entry->lat/10000000.0f,7,lat);
+ dtostrfd((double)entry->lon/10000000.0f,7,lon);
+ snprintf_P(record, sizeof(record),PSTR("\n\t\n\n"),lat ,lon, stime);
+ // DEBUG_SENSOR_LOG(PSTR("FLOG: DL %u %u"), Flog->sector.dword_buffer[k+j],Flog->sector.dword_buffer[k+j+1]);
+ WebServer->sendContent_P(record);
+}
+
+void UBXsendFooter(void){
+ WebServer->sendContent(F("\n\n"));
+ WebServer->sendContent("");
+ Rtc.user_time_entry = false; // we have blocked the main loop and want a new valid time
+}
+
+/********************************************************************************************/
+void UBXsendFile(void){
+ if (!HttpCheckPriviledgedAccess()) { return; }
+ Flog->startDownload(sizeof(UBX.rec_buffer),UBXsendHeader,UBXsendRecord,UBXsendFooter);
+}
+#endif //USE_FLOG
+/********************************************************************************************/
+
+void UBXSetRate(uint16_t interval){
+ UBX.Message.cfgRate.cls = 0x06;
+ UBX.Message.cfgRate.id = 0x08;
+ UBX.Message.cfgRate.len = 6;
+ uint32_t measRate = (1000*(uint32_t)interval); //seconds to milliseconds
+ if (measRate > 0xffff) {
+ measRate = 0xffff; // max. 65535 ms interval
+ }
+ UBX.Message.cfgRate.measRate = (uint16_t)measRate;
+ UBX.Message.cfgRate.navRate = 1;
+ UBX.Message.cfgRate.timeRef = 1;
+ UBXcalcChecksum(UBX.Message.cfgRate.CK, sizeof(UBX.Message.cfgRate)-sizeof(UBX.Message.cfgRate.CK));
+ DEBUG_SENSOR_LOG(PSTR("UBX: requested interval: %u seconds measRate: %u ms"), interval, UBX.Message.cfgRate.measRate);
+ UBXSerial->write(UBX.UBX_HEADER[0]);
+ UBXSerial->write(UBX.UBX_HEADER[1]);
+ for(uint32_t i =0; iwrite(((uint8_t*)(&UBX.Message.cfgRate))[i]);
+ DEBUG_SENSOR_LOG(PSTR("UBX: cfgRate byte %u: %x"), i, ((uint8_t*)(&UBX.Message.cfgRate))[i]);
+ }
+ UBX.state.log_interval = 10*interval;
+}
+
+
+void UBXSelectMode(uint16_t mode){
+ DEBUG_SENSOR_LOG(PSTR("UBX: set mode to %u"),mode);
+ switch(mode){
+#ifdef USE_FLOG
+ case 0:
+ Flog->mode = 0; // write once to all available sectors, then stop
+ break;
+ case 1:
+ Flog->mode = 1; // write to all available sectors, then restart and overwrite the older ones
+ break;
+ case 2:
+ UBX.mode.filter_noise = true; // filter out horizontal drift noise, TODO: find useful values
+ break;
+ case 3:
+ UBX.mode.filter_noise = false;
+ break;
+ case 4:
+ Flog->startRecording(true);
+ AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: start recording - appending"));
+ break;
+ case 5:
+ Flog->startRecording(false);
+ AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: start recording - new log"));
+ break;
+ case 6:
+ if(Flog->recording == true){
+ Flog->stopRecording();
+ }
+ AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: stop recording"));
+ break;
+ case 7:
+ UBX.mode.send_when_new = 1; // send mqtt on new postion + TELE -> consider to set TELE to a very high value
+ break;
+ case 8:
+ UBX.mode.send_when_new = 0; // only TELE
+ break;
+ case 9:
+ if (timeServer.beginListening()){
+ UBX.mode.runningNTP = true;
+ }
+ break;
+ case 10:
+ UBX.mode.runningNTP = false;
+ break;
+ case 11:
+ UBX.mode.forceUTCupdate = true;
+ break;
+ case 12:
+ UBX.mode.forceUTCupdate = false;
+ break;
+ case 13:
+ Settings.latitude = UBX.state.last_lat;
+ Settings.longitude = UBX.state.last_lon;
+ break;
+
+
+#endif //USE_FLOG
+ default:
+ if(mode>1000 && mode <1066) {
+ // UBXSetRate(mode-1000); // min. 1001 = 0.001 Hz, but will be converted to 1/65535 anyway ~0.015 Hz, max. 2000 = 1.000 Hz
+ UBXSetRate(mode-1000); // set interval between measurements in seconds from 1 to 65
+ }
+ break;
+ }
+ UBX.mode.send_UI_only = true;
+ UBXTriggerTele();
+}
+/********************************************************************************************/
+
+bool UBXHandlePOSLLH(){
+ DEBUG_SENSOR_LOG(PSTR("UBX: iTOW: %u"),UBX.Message.navPosllh.iTOW);
+ if(UBX.state.gpsFix>1){
+ if(UBX.mode.filter_noise){
+ if((UBX.Message.navPosllh.lat-UBX.rec_buffer.values.lat6){ // we expect only 4-5 non-empty loops in a row, could change with other sensor speed (Hz)
+ UBXinitCFG(); // this should only happen with lots of NMEA-messages, but it is only a guess!!
+ AddLog_P(LOG_LEVEL_ERROR, PSTR("UBX: possible device-reset, will re-init"));
+ UBXSerial->flush();
+ UBX.state.non_empty_loops = 0;
+ }
+}
+
+/********************************************************************************************/
+
+void UBXTimeServer(){
+ if(UBX.mode.runningNTP){
+ timeServer.processOneRequest(Rtc.utc_time, UBX.state.last_iTOW%1000);
+ }
+}
+
+void UBXLoop(void)
+{
+ static uint16_t counter; //count up every 100 msec
+ static bool new_position;
+
+ uint32_t msgType = UBXprocessGPS();
+
+ switch(msgType){
+ case MT_NAV_POSLLH:
+ new_position = UBXHandlePOSLLH();
+ break;
+ case MT_NAV_STATUS:
+ UBXHandleSTATUS();
+ break;
+ case MT_NAV_TIME:
+ UBXHandleTIME();
+ break;
+ default:
+ UBXHandleOther();
+ break;
+ }
+
+#ifdef USE_FLOG
+ if(counter>UBX.state.log_interval){
+ if(Flog->recording && new_position){
+ UBX.rec_buffer.values.time = Rtc.local_time;
+ Flog->addToBuffer(UBX.rec_buffer.bytes, sizeof(UBX.rec_buffer.bytes));
+ counter = 0;
+ }
+ }
+#endif // USE_FLOG
+
+counter++;
+}
+
+/********************************************************************************************/
+// normaly in i18n.h
+
+#ifdef USE_WEBSERVER
+ // {s} = , {m} = | , {e} = |
+
+#ifdef USE_FLOG
+#ifdef DEBUG_TASMOTA_SENSOR
+ const char HTTP_SNS_FLOGVER[] PROGMEM = "{s}
{m}
{e}{s} FLOG with %u sectors: {m}%u bytes{e}"
+ "{s} FLOG next sector for REC: {m} %u {e}"
+ "{s} %u sector(s) with data at sector: {m} %u {e}";
+ const char HTTP_SNS_FLOGREC[] PROGMEM = "{s} RECORDING (bytes in buffer) {m}%u{e}";
+#endif // DEBUG_TASMOTA_SENSOR
+
+ const char HTTP_SNS_FLOG[] PROGMEM = "{s}
{m}
{e}{s} Flash-Log {m} %s{e}";
+ const char kFLOG_STATE0[] PROGMEM = "ready";
+ const char kFLOG_STATE1[] PROGMEM = "recording";
+ const char * kFLOG_STATE[] ={kFLOG_STATE0, kFLOG_STATE1};
+
+ const char HTTP_BTN_FLOG_DL[] PROGMEM = "";
+
+#endif //USE_FLOG
+ const char HTTP_SNS_NTPSERVER[] PROGMEM = "{s} NTP server {m}active{e}";
+
+ const char HTTP_SNS_GPS[] PROGMEM = "{s} GPS latitude {m}%s{e}"
+ "{s} GPS longitude {m}%s{e}"
+ "{s} GPS height {m}%s m{e}"
+ "{s} GPS hor. Accuracy {m}%s m{e}"
+ "{s} GPS vert. Accuracy {m}%s m{e}"
+ "{s} GPS sat-fix status {m}%s{e}";
+
+ const char kGPSFix0[] PROGMEM = "no fix";
+ const char kGPSFix1[] PROGMEM = "dead reckoning only";
+ const char kGPSFix2[] PROGMEM = "2D-fix";
+ const char kGPSFix3[] PROGMEM = "3D-fix";
+ const char kGPSFix4[] PROGMEM = "GPS + dead reckoning combined";
+ const char kGPSFix5[] PROGMEM = "Time only fix";
+ const char * kGPSFix[] PROGMEM ={kGPSFix0, kGPSFix1, kGPSFix2, kGPSFix3, kGPSFix4, kGPSFix5};
+
+// const char UBX_GOOGLE_MAPS[] ="";
+
+
+#endif // USE_WEBSERVER
+
+/********************************************************************************************/
+
+void UBXShow(bool json)
+{
+ char lat[12];
+ char lon[12];
+ char height[12];
+ char hAcc[12];
+ char vAcc[12];
+ dtostrfd((double)UBX.rec_buffer.values.lat/10000000.0f,7,lat);
+ dtostrfd((double)UBX.rec_buffer.values.lon/10000000.0f,7,lon);
+ dtostrfd((double)UBX.state.last_height/1000.0f,3,height);
+ dtostrfd((double)UBX.state.last_vAcc/1000.0f,3,hAcc);
+ dtostrfd((double)UBX.state.last_hAcc/1000.0f,3,vAcc);
+
+ if (json) {
+ ResponseAppend_P(PSTR(",\"GPS\":{"));
+ if(UBX.mode.send_UI_only){
+ uint32_t i = UBX.state.log_interval / 10;
+ ResponseAppend_P(PSTR("\"fil\":%u,\"int\":%u}"),UBX.mode.filter_noise, i);
+ }
+ else{
+ ResponseAppend_P(PSTR("\"lat\":%s,\"lon\":%s,\"height\":%s,\"hAcc\":%s,\"vAcc\":%s}"), lat, lon, height, hAcc, vAcc);
+ }
+#ifdef USE_FLOG
+ ResponseAppend_P(PSTR(",\"FLOG\":{\"rec\":%u,\"mode\":%u,\"sec\":%u}"), Flog->recording, Flog->mode, Flog->sectors_left);
+#endif //USE_FLOG
+ UBX.mode.send_UI_only = false;
+#ifdef USE_WEBSERVER
+ } else {
+ WSContentSend_PD(HTTP_SNS_GPS, lat, lon, height, hAcc, vAcc, kGPSFix[UBX.state.gpsFix]);
+ // WSContentSend_PD(UBX_GOOGLE_MAPS, lat, lon);
+#ifdef DEBUG_TASMOTA_SENSOR
+#ifdef USE_FLOG
+ WSContentSend_PD(HTTP_SNS_FLOGVER, Flog->num_sectors, Flog->size, Flog->current_sector, Flog->sectors_left, Flog->sector.header.physical_start_sector);
+ if(Flog->recording){
+ WSContentSend_PD(HTTP_SNS_FLOGREC, Flog->sector.header.buf_pointer - 8);
+ }
+#endif //USE_FLOG
+#endif // DEBUG_TASMOTA_SENSOR
+#ifdef USE_FLOG
+ if(Flog->ready){
+ WSContentSend_P(HTTP_SNS_FLOG,kFLOG_STATE[Flog->recording]);
+ }
+ if(!Flog->recording && Flog->found_saved_data){
+ WSContentSend_P(HTTP_BTN_FLOG_DL);
+ }
+#endif //USE_FLOG
+ if(UBX.mode.runningNTP){
+ WSContentSend_P(HTTP_SNS_NTPSERVER);
+ }
+#endif // USE_WEBSERVER
+ }
+}
+
+
+/*********************************************************************************************\
+ * check the UBX commands
+\*********************************************************************************************/
+
+bool UBXCmd(void) {
+ bool serviced = true;
+ if (XdrvMailbox.data_len > 0) {
+ UBXSelectMode(XdrvMailbox.payload);
+ Response_P(S_JSON_UBX_COMMAND_NVALUE, XdrvMailbox.command, XdrvMailbox.payload);
+ }
+ return serviced;
+}
+
+/*********************************************************************************************\
+ * Interface
+\*********************************************************************************************/
+
+#define XSNS_58 58
+
+bool Xsns58(uint8_t function)
+{
+ bool result = false;
+
+ if (true) {
+ switch (function) {
+ case FUNC_INIT:
+ UBXDetect();
+ break;
+ case FUNC_COMMAND_SENSOR:
+ if (XSNS_92 == XdrvMailbox.index){
+ result = UBXCmd();
+ }
+ break;
+ case FUNC_EVERY_50_MSECOND:
+ UBXTimeServer();
+ break;
+ case FUNC_EVERY_100_MSECOND:
+#ifdef USE_FLOG
+ if(!Flog->running_download)
+#endif //USE_FLOG
+ {
+ UBXLoop();
+ }
+ break;
+#ifdef USE_FLOG
+ case FUNC_WEB_ADD_HANDLER:
+ WebServer->on("/UBX", UBXsendFile);
+ break;
+#endif //USE_FLOG
+ case FUNC_JSON_APPEND:
+ UBXShow(1);
+ break;
+#ifdef USE_WEBSERVER
+ case FUNC_WEB_SENSOR:
+#ifdef USE_FLOG
+ if(!Flog->running_download)
+#endif //USE_FLOG
+ {
+ UBXShow(0);
+ }
+ break;
+#endif // USE_WEBSERVER
+ }
+ }
+ return result;
+}
+
+#endif // USE_GPS_UBX
From b1e24bb9c37f94a6168c06ddf58eee6e54239e15 Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Mon, 16 Dec 2019 23:03:49 -0300
Subject: [PATCH 079/559] Add GPS Support - Language Files
---
tasmota/language/bg-BG.h | 1404 +++++++++++++++++++-------------------
tasmota/language/cs-CZ.h | 1404 +++++++++++++++++++-------------------
tasmota/language/de-DE.h | 1404 +++++++++++++++++++-------------------
tasmota/language/el-GR.h | 1404 +++++++++++++++++++-------------------
tasmota/language/en-GB.h | 1404 +++++++++++++++++++-------------------
tasmota/language/es-ES.h | 1404 +++++++++++++++++++-------------------
tasmota/language/fr-FR.h | 1404 +++++++++++++++++++-------------------
tasmota/language/he-HE.h | 1404 +++++++++++++++++++-------------------
tasmota/language/hu-HU.h | 1404 +++++++++++++++++++-------------------
tasmota/language/it-IT.h | 1404 +++++++++++++++++++-------------------
tasmota/language/ko-KO.h | 1404 +++++++++++++++++++-------------------
tasmota/language/nl-NL.h | 1404 +++++++++++++++++++-------------------
tasmota/language/pl-PL.h | 1404 +++++++++++++++++++-------------------
tasmota/language/pt-BR.h | 1404 +++++++++++++++++++-------------------
tasmota/language/pt-PT.h | 1404 +++++++++++++++++++-------------------
tasmota/language/ru-RU.h | 1404 +++++++++++++++++++-------------------
tasmota/language/sk-SK.h | 1404 +++++++++++++++++++-------------------
tasmota/language/sv-SE.h | 1404 +++++++++++++++++++-------------------
tasmota/language/tr-TR.h | 1404 +++++++++++++++++++-------------------
tasmota/language/uk-UK.h | 1404 +++++++++++++++++++-------------------
tasmota/language/zh-CN.h | 1404 +++++++++++++++++++-------------------
tasmota/language/zh-TW.h | 1404 +++++++++++++++++++-------------------
22 files changed, 15466 insertions(+), 15422 deletions(-)
diff --git a/tasmota/language/bg-BG.h b/tasmota/language/bg-BG.h
index 1f18d8efb..ffb5bc3ec 100644
--- a/tasmota/language/bg-BG.h
+++ b/tasmota/language/bg-BG.h
@@ -1,701 +1,703 @@
-/*
- bg-BG.h - localization for Bulgaria - Bulgarian for Tasmota
-
- Copyright (C) 2019 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 .
-*/
-
-#ifndef _LANGUAGE_BG_BG_H_
-#define _LANGUAGE_BG_BG_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v7.1.2.4
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1026
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "bg"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "НедПонВтрСрдЧетПетСъб"
-#define D_MONTH3LIST "ЯнуФевМарАпрМайЮниЮлиАвгСепОктНоеДек"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Качество на въздуха"
-#define D_AP "Точка за достъп" // Access Point
-#define D_AS "като"
-#define D_AUTO "АВТОМАТИЧНО"
-#define D_BLINK "Мигане вкл."
-#define D_BLINKOFF "Мигане изкл."
-#define D_BOOT_COUNT "Брой на стартиранията"
-#define D_BRIGHTLIGHT "Яркост"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Бутон"
-#define D_BY "от" // Written by me
-#define D_BYTES "Байта"
-#define D_CELSIUS "Целзий"
-#define D_CHANNEL "Канал"
-#define D_CO2 "Въглероден диоксид"
-#define D_CODE "код" // Button code
-#define D_COLDLIGHT "Хладна"
-#define D_COMMAND "Команда"
-#define D_CONNECTED "Свързан"
-#define D_CORS_DOMAIN "CORS домейн"
-#define D_COUNT "Брой"
-#define D_COUNTER "Брояч"
-#define D_CURRENT "Ток" // As in Voltage and Current
-#define D_DATA "Данни"
-#define D_DARKLIGHT "Тъмна"
-#define D_DEBUG "Дебъгване"
-#define D_DISABLED "Забранен"
-#define D_DISTANCE "Разстояние"
-#define D_DNS_SERVER "DNS Сървър"
-#define D_DONE "Изпълнено"
-#define D_DST_TIME "Лятно време"
-#define D_ECO2 "eCO₂"
-#define D_EMULATION "Емулация"
-#define D_ENABLED "Разрешен"
-#define D_ERASE "Изтриване"
-#define D_ERROR "Грешка"
-#define D_FAHRENHEIT "Фаренхайт"
-#define D_FAILED "Неуспешно"
-#define D_FALLBACK "Помощен"
-#define D_FALLBACK_TOPIC "Помощен топик"
-#define D_FALSE "Невярно"
-#define D_FILE "Файл"
-#define D_FLOW_RATE "Дебит"
-#define D_FREE_MEMORY "Свободна памет"
-#define D_FREQUENCY "Честота"
-#define D_GAS "Газ"
-#define D_GATEWAY "Шлюз"
-#define D_GROUP "Група"
-#define D_HOST "Хост"
-#define D_HOSTNAME "Име на хоста"
-#define D_HUMIDITY "Влажност"
-#define D_ILLUMINANCE "Осветеност"
-#define D_IMMEDIATE "Моментен" // Button immediate
-#define D_INDEX "Индекс"
-#define D_INFO "Информация"
-#define D_INFRARED "Инфрачервен"
-#define D_INITIALIZED "Инициализирано"
-#define D_IP_ADDRESS "IP адрес"
-#define D_LIGHT "Светлина"
-#define D_LWT "LWT"
-#define D_MODULE "Модул"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "неколкократно натискане"
-#define D_NOISE "Шум"
-#define D_NONE "Няма"
-#define D_OFF "Изкл."
-#define D_OFFLINE "Офлайн"
-#define D_OK "Ок"
-#define D_ON "Вкл."
-#define D_ONLINE "Онлайн"
-#define D_PASSWORD "Парола"
-#define D_PORT "Порт"
-#define D_POWER_FACTOR "Фактор на мощността"
-#define D_POWERUSAGE "Мощност"
-#define D_POWERUSAGE_ACTIVE "Активна мощност"
-#define D_POWERUSAGE_APPARENT "Пълна мощност"
-#define D_POWERUSAGE_REACTIVE "Реактивна мощност"
-#define D_PRESSURE "Налягане"
-#define D_PRESSUREATSEALEVEL "Налягане при морското ниво"
-#define D_PROGRAM_FLASH_SIZE "Размер на флаш паметта за програми"
-#define D_PROGRAM_SIZE "Размер на програмата"
-#define D_PROJECT "Проект"
-#define D_RAIN "Дъжд"
-#define D_RECEIVED "Получено"
-#define D_RESTART "Рестарт"
-#define D_RESTARTING "Рестартиране"
-#define D_RESTART_REASON "Причина за рестарта"
-#define D_RESTORE "възстановяване"
-#define D_RETAINED "запазено"
-#define D_RULE "Правило"
-#define D_SAVE "Запис"
-#define D_SENSOR "Датчик"
-#define D_SSID "SSId"
-#define D_START "Старт"
-#define D_STD_TIME "STD"
-#define D_STOP "Стоп"
-#define D_SUBNET_MASK "Маска на подмрежата"
-#define D_SUBSCRIBE_TO "Записване за"
-#define D_UNSUBSCRIBE_FROM "Отписване от"
-#define D_SUCCESSFUL "Успешно"
-#define D_SUNRISE "Изгрев"
-#define D_SUNSET "Залез"
-#define D_TEMPERATURE "Температура"
-#define D_TO "към"
-#define D_TOGGLE "Превключване"
-#define D_TOPIC "Топик"
-#define D_TOTAL_USAGE "Използвана вода"
-#define D_TRANSMIT "Предаване"
-#define D_TRUE "Вярно"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "Обновяване"
-#define D_UPLOAD "Зареждане"
-#define D_UPTIME "Време от стартирането"
-#define D_USER "Потребител"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV индекс"
-#define D_UV_INDEX_1 "Нисък"
-#define D_UV_INDEX_2 "Среден"
-#define D_UV_INDEX_3 "Висок"
-#define D_UV_INDEX_4 "Много висок"
-#define D_UV_INDEX_5 "Изгаряне 1/2 степен"
-#define D_UV_INDEX_6 "Изгаряне 3-та степен"
-#define D_UV_INDEX_7 "Извън обхват"
-#define D_UV_LEVEL "UV ниво"
-#define D_UV_POWER "UV мощност"
-#define D_VERSION "Версия"
-#define D_VOLTAGE "Напрежение"
-#define D_WEIGHT "Тегло"
-#define D_WARMLIGHT "Топла"
-#define D_WEB_SERVER "Уеб сървър"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ПРЕДУПРЕЖДЕНИЕ Тази версия не поддържа постоянни настройки"
-#define D_LEVEL_10 "ниво 1-0"
-#define D_LEVEL_01 "ниво 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Серийният лог изключен"
-#define D_SYSLOG_LOGGING_REENABLED "Системният лог активиран"
-
-#define D_SET_BAUDRATE_TO "Задаване скорост на предаване (Baudrate)"
-#define D_RECEIVED_TOPIC "Получен топик"
-#define D_DATA_SIZE "Размер на данните"
-#define D_ANALOG_INPUT "Аналогов вход"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Блокиран цикъл"
-#define D_WPS_FAILED_WITH_STATUS "WPS конфигурацията е НЕУСПЕШНА със статус"
-#define D_ACTIVE_FOR_3_MINUTES "активно в течение на 3 минути"
-#define D_FAILED_TO_START "Неуспешно стартиране"
-#define D_PATCH_ISSUE_2186 "Проблем с патч 2186"
-#define D_CONNECTING_TO_AP "Свързване към точка за достъп"
-#define D_IN_MODE "в режим"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Грешка при свързването, не е получен IP адрес"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Грешка при свързването, точката за достъп е недостижима"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Грешка при свързването, грешна парола към точката за достъп"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Грешка при свързването, превишено време за изчакване"
-#define D_ATTEMPTING_CONNECTION "Опитва свързване..."
-#define D_CHECKING_CONNECTION "Проверка на свързването..."
-#define D_QUERY_DONE "Запитването е изпълнено. Намерена е услуга MQTT"
-#define D_MQTT_SERVICE_FOUND "MQTT услуга е намерена на"
-#define D_FOUND_AT "намерена в"
-#define D_SYSLOG_HOST_NOT_FOUND "Хостът на системния лог не е намерен"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Запазено във флаш паметта на"
-#define D_LOADED_FROM_FLASH_AT "Заредено от флаш паметта от"
-#define D_USE_DEFAULTS "Използване на параметри по подразбиране"
-#define D_ERASED_SECTOR "Изтрит сектор"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Разрешете JavaScript, за да използвате Tasmota"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Минимален фърмуер
моля надградете го"
-#define D_WEBSERVER_ACTIVE_ON "Уеб сървърът е активен на"
-#define D_WITH_IP_ADDRESS "с IP адрес"
-#define D_WEBSERVER_STOPPED "Уеб сървърът е спрян"
-#define D_FILE_NOT_FOUND "Файлът не е намерен"
-#define D_REDIRECTED "Пренасочено към адаптивния портал"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi мениджърът настройва точка за достъп и запомня станцията"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi мениджърът настрои точката за достъп"
-#define D_TRYING_TO_CONNECT "Опит за свързване на устройството към мрежата"
-
-#define D_RESTART_IN "Рестарт след"
-#define D_SECONDS "секунди"
-#define D_DEVICE_WILL_RESTART "Устройството ще се рестартира след няколко секунди"
-#define D_BUTTON_TOGGLE "Превключване"
-#define D_CONFIGURATION "Конфигурация"
-#define D_INFORMATION "Информация"
-#define D_FIRMWARE_UPGRADE "Обновяване на фърмуера"
-#define D_CONSOLE "Конзола"
-#define D_CONFIRM_RESTART "Потвърдете рестартирането"
-
-#define D_CONFIGURE_MODULE "Конфигурация на модула"
-#define D_CONFIGURE_WIFI "Конфигурация на WiFi"
-#define D_CONFIGURE_MQTT "Конфигурация на MQTT"
-#define D_CONFIGURE_DOMOTICZ "Конфигурация на Domoticz"
-#define D_CONFIGURE_LOGGING "Конфигурация на лога"
-#define D_CONFIGURE_OTHER "Други конфигурации"
-#define D_CONFIRM_RESET_CONFIGURATION "Потвърдете изчистването"
-#define D_RESET_CONFIGURATION "Изчистване на конфигурацията"
-#define D_BACKUP_CONFIGURATION "Запазване на конфигурацията"
-#define D_RESTORE_CONFIGURATION "Възстановяване на конфигурацията"
-#define D_MAIN_MENU "Основно меню"
-
-#define D_MODULE_PARAMETERS "Параметри на модула"
-#define D_MODULE_TYPE "Тип на модула"
-#define D_PULLUP_ENABLE "Без pull-up за бутон/ключ"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Сериен вход"
-#define D_SERIAL_OUT "Сериен изход"
-
-#define D_WIFI_PARAMETERS "Wifi параметри"
-#define D_SCAN_FOR_WIFI_NETWORKS "Сканиране за безжични мрежи"
-#define D_SCAN_DONE "Сканирането приключи"
-#define D_NO_NETWORKS_FOUND "Не бяха открити мрежи"
-#define D_REFRESH_TO_SCAN_AGAIN "Обновяване за повторно сканиране"
-#define D_DUPLICATE_ACCESSPOINT "Дублиране на точката за достъп (AP)"
-#define D_SKIPPING_LOW_QUALITY "Пропускане поради лошо качество"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Парола"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Парола"
-
-#define D_MQTT_PARAMETERS "Параметри на MQTT"
-#define D_CLIENT "Клиент"
-#define D_FULL_TOPIC "Пълен топик"
-
-#define D_LOGGING_PARAMETERS "Параметри на лога"
-#define D_SERIAL_LOG_LEVEL "Степен на серийния лог"
-#define D_MQTT_LOG_LEVEL "Степен на MQTT лога"
-#define D_WEB_LOG_LEVEL "Степен на уеб лога"
-#define D_SYS_LOG_LEVEL "Степен на системния лог"
-#define D_MORE_DEBUG "Допълнителна debug информация"
-#define D_SYSLOG_HOST "Хост на системния лог"
-#define D_SYSLOG_PORT "Порт на системния лог"
-#define D_TELEMETRY_PERIOD "Период на телеметрия"
-
-#define D_OTHER_PARAMETERS "Други параметри"
-#define D_TEMPLATE "Модел"
-#define D_ACTIVATE "Активирай"
-#define D_WEB_ADMIN_PASSWORD "Парола на уеб администратора"
-#define D_MQTT_ENABLE "Активиране на MQTT"
-#define D_FRIENDLY_NAME "Приятелско име"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "Единично"
-#define D_MULTI_DEVICE "Мулти"
-
-#define D_CONFIGURE_TEMPLATE "Конфигуриране на шаблон"
-#define D_TEMPLATE_PARAMETERS "Параметри на шаблона"
-#define D_TEMPLATE_NAME "Име"
-#define D_BASE_TYPE "Базиран на"
-#define D_TEMPLATE_FLAGS "Опции"
-
-#define D_SAVE_CONFIGURATION "Запазване на конфигурацията"
-#define D_CONFIGURATION_SAVED "Конфигурацията е запазена"
-#define D_CONFIGURATION_RESET "Конфигурацията е изчистена"
-
-#define D_PROGRAM_VERSION "Версия на програмата"
-#define D_BUILD_DATE_AND_TIME "Дата и час на компилацията"
-#define D_CORE_AND_SDK_VERSION "Версия на Core/SDK"
-#define D_FLASH_WRITE_COUNT "Брой на записите във флаш паметта"
-#define D_MAC_ADDRESS "MAC адрес"
-#define D_MQTT_HOST "MQTT хост"
-#define D_MQTT_PORT "MQTT порт"
-#define D_MQTT_CLIENT "MQTT ID на клиент"
-#define D_MQTT_USER "MQTT потребител"
-#define D_MQTT_TOPIC "MQTT топик"
-#define D_MQTT_GROUP_TOPIC "MQTT групов топик"
-#define D_MQTT_FULL_TOPIC "MQTT пълен топик"
-#define D_MDNS_DISCOVERY "mDNS откриване"
-#define D_MDNS_ADVERTISE "mDNS известяване"
-#define D_ESP_CHIP_ID "ID на ESP чипа"
-#define D_FLASH_CHIP_ID "ID на чипа на флаш паметта"
-#define D_FLASH_CHIP_SIZE "Размер на флаш паметта"
-#define D_FREE_PROGRAM_SPACE "Свободно пространство за програми"
-
-#define D_UPGRADE_BY_WEBSERVER "Обновяване чрез уеб сървър"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Започване на обновяване"
-#define D_UPGRADE_BY_FILE_UPLOAD "Обновяване чрез зареждане на файл"
-#define D_UPLOAD_STARTED "Зареждането започна"
-#define D_UPGRADE_STARTED "Обновяването започна"
-#define D_UPLOAD_DONE "Зареждането завърши"
-#define D_UPLOAD_ERR_1 "Не е избран файл"
-#define D_UPLOAD_ERR_2 "Недостатъчно свободно място"
-#define D_UPLOAD_ERR_3 "Magic байтът не е 0xE9"
-#define D_UPLOAD_ERR_4 "Размерът на програмата е по-голям от реалния размер на флаш паметта"
-#define D_UPLOAD_ERR_5 "Грешка при зареждането в буфера"
-#define D_UPLOAD_ERR_6 "Грешка при зареждането. Включено е ниво 3 на лога"
-#define D_UPLOAD_ERR_7 "Зареждането е прекъснато"
-#define D_UPLOAD_ERR_8 "Файлът е невалиден"
-#define D_UPLOAD_ERR_9 "Файлът е прекалено голям"
-#define D_UPLOAD_ERR_10 "Грешка при инициализация на RF чипа"
-#define D_UPLOAD_ERR_11 "Грешка при изтриване на RF чипа"
-#define D_UPLOAD_ERR_12 "Грешка при записване в RF чипа"
-#define D_UPLOAD_ERR_13 "Грешка при декодиране на RF фърмуера"
-#define D_UPLOAD_ERROR_CODE "Код на грешка при зареждането"
-
-#define D_ENTER_COMMAND "Въвеждане на команда"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Включете ниво 2 на лога, ако очаквате отговор"
-#define D_NEED_USER_AND_PASSWORD "Очаква user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Проверка на TLS отпечатък..."
-#define D_TLS_CONNECT_FAILED_TO "Неуспешно TLS свързване към"
-#define D_RETRY_IN "Повтори след"
-#define D_VERIFIED "Проверен отпечтък"
-#define D_INSECURE "Нешифрована връзка, недействителен отпечатък"
-#define D_CONNECT_FAILED_TO "Грешка при свързването към"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast е изключен"
-#define D_MULTICAST_REJOINED "Multicast е повторно съединен"
-#define D_MULTICAST_JOIN_FAILED "Multicast грешка при присъединяването"
-#define D_FAILED_TO_SEND_RESPONSE "Неуспех при изпращането на отговор"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo главно събитие"
-#define D_WEMO_EVENT_SERVICE "WeMo услуга за събитията"
-#define D_WEMO_META_SERVICE "WeMo мета-услуга"
-#define D_WEMO_SETUP "WeMo настройка"
-#define D_RESPONSE_SENT "Отговорът е изпратен"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Настройка на Hue bridge"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API не е внедрен"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST аргументи"
-#define D_3_RESPONSE_PACKETS_SENT "Изпратени са 3 пакета за отговор"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz параметри"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Мощност,Енергия"
- #define D_DOMOTICZ_ILLUMINANCE "Осветеност"
- #define D_DOMOTICZ_COUNT "Брояч/PM1"
- #define D_DOMOTICZ_VOLTAGE "Напрежение/PM2,5"
- #define D_DOMOTICZ_CURRENT "Ток/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Качество на въздуха"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Период на опресняване"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Конфигуриране на таймер"
-#define D_TIMER_PARAMETERS "Параметри на таймера"
-#define D_TIMER_ENABLE "Активиране на таймера"
-#define D_TIMER_ARM "Активиран"
-#define D_TIMER_TIME "Време"
-#define D_TIMER_DAYS "Дни"
-#define D_TIMER_REPEAT "Повтори"
-#define D_TIMER_OUTPUT "Изход"
-#define D_TIMER_ACTION "Действие"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Конфигуриране на KNX"
-#define D_KNX_PARAMETERS "KNX параметри"
-#define D_KNX_GENERAL_CONFIG "Основни"
-#define D_KNX_PHYSICAL_ADDRESS "Физически адрес"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Трябва да е уникален в KNX мрежата )"
-#define D_KNX_ENABLE "Активиране на KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Групови адреси за изпращане на данни"
-#define D_ADD "Добаване"
-#define D_DELETE "Изтриване"
-#define D_REPLY "Отговор"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Групови адреси за получаване на данни"
-#define D_RECEIVED_FROM "Получен от"
-#define D_KNX_COMMAND_WRITE "Писане"
-#define D_KNX_COMMAND_READ "Четене"
-#define D_KNX_COMMAND_OTHER "Друго"
-#define D_SENT_TO "изпратен до"
-#define D_KNX_WARNING "Груповият адрес (0/0/0) е резервиран и не може да бъде използван."
-#define D_KNX_ENHANCEMENT "Подобрена комуникация"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Използвана енергия днес"
-#define D_ENERGY_YESTERDAY "Използвана енергия вчера"
-#define D_ENERGY_TOTAL "Използвана енергия общо"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Отворена"
-#define D_CLOSE "Затворена"
-#define D_DOMOTICZ_SHUTTER "Щора"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Конфигуриране на PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 параметри"
-#define D_INVERT_PORTS "Обърни портовете"
-#define D_DEVICE "Устройство"
-#define D_DEVICE_INPUT "Вход"
-#define D_DEVICE_OUTPUT "Изход"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Датчикът DS18x20 е зает"
-#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - грешка CRC"
-#define D_SENSORS_FOUND "Намерен е датчик DS18x20"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Изтекло време за очакване на"
-#define D_START_SIGNAL_LOW "Нисък стартов сигнал"
-#define D_START_SIGNAL_HIGH "Висок стартов сигнал"
-#define D_PULSE "Импулс"
-#define D_CHECKSUM_FAILURE "Грешка в контролната сума"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчикът не прие команда ACK"
-#define D_SHT1X_FOUND "Намерен е SHT1X"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Частици"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Ускорение - ос X"
-#define D_AY_AXIS "Ускорение - ос Y"
-#define D_AZ_AXIS "Ускорение - ос Z"
-#define D_GX_AXIS "Жироскоп - ос X"
-#define D_GY_AXIS "Жироскоп - ос Y"
-#define D_GZ_AXIS "Жироскоп - ос Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Премахване на тегло"
-#define D_HX_CAL_REFERENCE "Зареждане на референтно тегло"
-#define D_HX_CAL_DONE "Калибриран"
-#define D_HX_CAL_FAIL "Неуспешно калибриране"
-#define D_RESET_HX711 "Нулиране на кантара"
-#define D_CONFIGURE_HX711 "Конфигуриране на кантара"
-#define D_HX711_PARAMETERS "Параметри на кантара"
-#define D_ITEM_WEIGHT "Тегло"
-#define D_REFERENCE_WEIGHT "Референтно тегло"
-#define D_CALIBRATE "Калибриране"
-#define D_CALIBRATION "Калибровка"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Посока на вятъра"
-#define D_TX20_WIND_SPEED "Скорост на вятъра"
-#define D_TX20_WIND_SPEED_AVG "Средна скорост на вятъра"
-#define D_TX20_WIND_SPEED_MAX "Макс. скорост на вятъра"
-#define D_TX20_NORTH "С"
-#define D_TX20_EAST "И"
-#define D_TX20_SOUTH "Ю"
-#define D_TX20_WEST "З"
-
-// 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 "Потребит."
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 плейър"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Ключ" // Suffix "1"
-#define D_SENSOR_BUTTON "Бутон" // Suffix "1"
-#define D_SENSOR_RELAY "Реле" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Брояч" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Подсветка"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF датчик"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "h"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "gal/min"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h"
-#define D_UNIT_KILOOHM "kΩ"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
-#define D_UNIT_MICROMETER "µm"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "s"
-#define D_UNIT_SECTORS "сектори"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Фазов ъгъл"
-#define D_IMPORT_ACTIVE "Входна активна мощност"
-#define D_EXPORT_ACTIVE "Изходна активна мощност"
-#define D_IMPORT_REACTIVE "Входна реактивна мощност"
-#define D_EXPORT_REACTIVE "Изходна реактивна мощност"
-#define D_TOTAL_REACTIVE "Общо реактивна мощност"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "°"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "Напрежение на PV1"
-#define D_PV1_CURRENT "Ток на PV1"
-#define D_PV1_POWER "Мощност на PV1"
-#define D_PV2_VOLTAGE "Напрежение на PV2"
-#define D_PV2_CURRENT "Ток на PV2"
-#define D_PV2_POWER "Мощност на PV2"
-#define D_SOLAR_POWER "Слънчева мощност"
-#define D_INVERTER_POWER "Мощност на инвертера"
-#define D_STATUS "Състояние"
-#define D_WAITING "Очакване"
-#define D_CHECKING "Проверка"
-#define D_WORKING "Работи"
-#define D_FAILURE "Грешка"
-#define D_SOLAX_ERROR_0 "Грешка - няма код"
-#define D_SOLAX_ERROR_1 "Грешка - загуба на мрежата"
-#define D_SOLAX_ERROR_2 "Грешка - мрежово напрежение"
-#define D_SOLAX_ERROR_3 "Грешка - мрежова честота"
-#define D_SOLAX_ERROR_4 "Грешка - напрежение на Pv"
-#define D_SOLAX_ERROR_5 "Грешка - проблем с изолацията"
-#define D_SOLAX_ERROR_6 "Грешка - прегряване"
-#define D_SOLAX_ERROR_7 "Грешка - вентилатор"
-#define D_SOLAX_ERROR_8 "Грешка - друго оборудване"
-
-#endif // _LANGUAGE_BG_BG_H_
+/*
+ bg-BG.h - localization for Bulgaria - Bulgarian for Tasmota
+
+ Copyright (C) 2019 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 .
+*/
+
+#ifndef _LANGUAGE_BG_BG_H_
+#define _LANGUAGE_BG_BG_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v7.1.2.4
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1026
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "bg"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "НедПонВтрСрдЧетПетСъб"
+#define D_MONTH3LIST "ЯнуФевМарАпрМайЮниЮлиАвгСепОктНоеДек"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Качество на въздуха"
+#define D_AP "Точка за достъп" // Access Point
+#define D_AS "като"
+#define D_AUTO "АВТОМАТИЧНО"
+#define D_BLINK "Мигане вкл."
+#define D_BLINKOFF "Мигане изкл."
+#define D_BOOT_COUNT "Брой на стартиранията"
+#define D_BRIGHTLIGHT "Яркост"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Бутон"
+#define D_BY "от" // Written by me
+#define D_BYTES "Байта"
+#define D_CELSIUS "Целзий"
+#define D_CHANNEL "Канал"
+#define D_CO2 "Въглероден диоксид"
+#define D_CODE "код" // Button code
+#define D_COLDLIGHT "Хладна"
+#define D_COMMAND "Команда"
+#define D_CONNECTED "Свързан"
+#define D_CORS_DOMAIN "CORS домейн"
+#define D_COUNT "Брой"
+#define D_COUNTER "Брояч"
+#define D_CURRENT "Ток" // As in Voltage and Current
+#define D_DATA "Данни"
+#define D_DARKLIGHT "Тъмна"
+#define D_DEBUG "Дебъгване"
+#define D_DISABLED "Забранен"
+#define D_DISTANCE "Разстояние"
+#define D_DNS_SERVER "DNS Сървър"
+#define D_DONE "Изпълнено"
+#define D_DST_TIME "Лятно време"
+#define D_ECO2 "eCO₂"
+#define D_EMULATION "Емулация"
+#define D_ENABLED "Разрешен"
+#define D_ERASE "Изтриване"
+#define D_ERROR "Грешка"
+#define D_FAHRENHEIT "Фаренхайт"
+#define D_FAILED "Неуспешно"
+#define D_FALLBACK "Помощен"
+#define D_FALLBACK_TOPIC "Помощен топик"
+#define D_FALSE "Невярно"
+#define D_FILE "Файл"
+#define D_FLOW_RATE "Дебит"
+#define D_FREE_MEMORY "Свободна памет"
+#define D_FREQUENCY "Честота"
+#define D_GAS "Газ"
+#define D_GATEWAY "Шлюз"
+#define D_GROUP "Група"
+#define D_HOST "Хост"
+#define D_HOSTNAME "Име на хоста"
+#define D_HUMIDITY "Влажност"
+#define D_ILLUMINANCE "Осветеност"
+#define D_IMMEDIATE "Моментен" // Button immediate
+#define D_INDEX "Индекс"
+#define D_INFO "Информация"
+#define D_INFRARED "Инфрачервен"
+#define D_INITIALIZED "Инициализирано"
+#define D_IP_ADDRESS "IP адрес"
+#define D_LIGHT "Светлина"
+#define D_LWT "LWT"
+#define D_MODULE "Модул"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "неколкократно натискане"
+#define D_NOISE "Шум"
+#define D_NONE "Няма"
+#define D_OFF "Изкл."
+#define D_OFFLINE "Офлайн"
+#define D_OK "Ок"
+#define D_ON "Вкл."
+#define D_ONLINE "Онлайн"
+#define D_PASSWORD "Парола"
+#define D_PORT "Порт"
+#define D_POWER_FACTOR "Фактор на мощността"
+#define D_POWERUSAGE "Мощност"
+#define D_POWERUSAGE_ACTIVE "Активна мощност"
+#define D_POWERUSAGE_APPARENT "Пълна мощност"
+#define D_POWERUSAGE_REACTIVE "Реактивна мощност"
+#define D_PRESSURE "Налягане"
+#define D_PRESSUREATSEALEVEL "Налягане при морското ниво"
+#define D_PROGRAM_FLASH_SIZE "Размер на флаш паметта за програми"
+#define D_PROGRAM_SIZE "Размер на програмата"
+#define D_PROJECT "Проект"
+#define D_RAIN "Дъжд"
+#define D_RECEIVED "Получено"
+#define D_RESTART "Рестарт"
+#define D_RESTARTING "Рестартиране"
+#define D_RESTART_REASON "Причина за рестарта"
+#define D_RESTORE "възстановяване"
+#define D_RETAINED "запазено"
+#define D_RULE "Правило"
+#define D_SAVE "Запис"
+#define D_SENSOR "Датчик"
+#define D_SSID "SSId"
+#define D_START "Старт"
+#define D_STD_TIME "STD"
+#define D_STOP "Стоп"
+#define D_SUBNET_MASK "Маска на подмрежата"
+#define D_SUBSCRIBE_TO "Записване за"
+#define D_UNSUBSCRIBE_FROM "Отписване от"
+#define D_SUCCESSFUL "Успешно"
+#define D_SUNRISE "Изгрев"
+#define D_SUNSET "Залез"
+#define D_TEMPERATURE "Температура"
+#define D_TO "към"
+#define D_TOGGLE "Превключване"
+#define D_TOPIC "Топик"
+#define D_TOTAL_USAGE "Използвана вода"
+#define D_TRANSMIT "Предаване"
+#define D_TRUE "Вярно"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "Обновяване"
+#define D_UPLOAD "Зареждане"
+#define D_UPTIME "Време от стартирането"
+#define D_USER "Потребител"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV индекс"
+#define D_UV_INDEX_1 "Нисък"
+#define D_UV_INDEX_2 "Среден"
+#define D_UV_INDEX_3 "Висок"
+#define D_UV_INDEX_4 "Много висок"
+#define D_UV_INDEX_5 "Изгаряне 1/2 степен"
+#define D_UV_INDEX_6 "Изгаряне 3-та степен"
+#define D_UV_INDEX_7 "Извън обхват"
+#define D_UV_LEVEL "UV ниво"
+#define D_UV_POWER "UV мощност"
+#define D_VERSION "Версия"
+#define D_VOLTAGE "Напрежение"
+#define D_WEIGHT "Тегло"
+#define D_WARMLIGHT "Топла"
+#define D_WEB_SERVER "Уеб сървър"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ПРЕДУПРЕЖДЕНИЕ Тази версия не поддържа постоянни настройки"
+#define D_LEVEL_10 "ниво 1-0"
+#define D_LEVEL_01 "ниво 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Серийният лог изключен"
+#define D_SYSLOG_LOGGING_REENABLED "Системният лог активиран"
+
+#define D_SET_BAUDRATE_TO "Задаване скорост на предаване (Baudrate)"
+#define D_RECEIVED_TOPIC "Получен топик"
+#define D_DATA_SIZE "Размер на данните"
+#define D_ANALOG_INPUT "Аналогов вход"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Блокиран цикъл"
+#define D_WPS_FAILED_WITH_STATUS "WPS конфигурацията е НЕУСПЕШНА със статус"
+#define D_ACTIVE_FOR_3_MINUTES "активно в течение на 3 минути"
+#define D_FAILED_TO_START "Неуспешно стартиране"
+#define D_PATCH_ISSUE_2186 "Проблем с патч 2186"
+#define D_CONNECTING_TO_AP "Свързване към точка за достъп"
+#define D_IN_MODE "в режим"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Грешка при свързването, не е получен IP адрес"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Грешка при свързването, точката за достъп е недостижима"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Грешка при свързването, грешна парола към точката за достъп"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Грешка при свързването, превишено време за изчакване"
+#define D_ATTEMPTING_CONNECTION "Опитва свързване..."
+#define D_CHECKING_CONNECTION "Проверка на свързването..."
+#define D_QUERY_DONE "Запитването е изпълнено. Намерена е услуга MQTT"
+#define D_MQTT_SERVICE_FOUND "MQTT услуга е намерена на"
+#define D_FOUND_AT "намерена в"
+#define D_SYSLOG_HOST_NOT_FOUND "Хостът на системния лог не е намерен"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Запазено във флаш паметта на"
+#define D_LOADED_FROM_FLASH_AT "Заредено от флаш паметта от"
+#define D_USE_DEFAULTS "Използване на параметри по подразбиране"
+#define D_ERASED_SECTOR "Изтрит сектор"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Разрешете JavaScript, за да използвате Tasmota"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Минимален фърмуер
моля надградете го"
+#define D_WEBSERVER_ACTIVE_ON "Уеб сървърът е активен на"
+#define D_WITH_IP_ADDRESS "с IP адрес"
+#define D_WEBSERVER_STOPPED "Уеб сървърът е спрян"
+#define D_FILE_NOT_FOUND "Файлът не е намерен"
+#define D_REDIRECTED "Пренасочено към адаптивния портал"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi мениджърът настройва точка за достъп и запомня станцията"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi мениджърът настрои точката за достъп"
+#define D_TRYING_TO_CONNECT "Опит за свързване на устройството към мрежата"
+
+#define D_RESTART_IN "Рестарт след"
+#define D_SECONDS "секунди"
+#define D_DEVICE_WILL_RESTART "Устройството ще се рестартира след няколко секунди"
+#define D_BUTTON_TOGGLE "Превключване"
+#define D_CONFIGURATION "Конфигурация"
+#define D_INFORMATION "Информация"
+#define D_FIRMWARE_UPGRADE "Обновяване на фърмуера"
+#define D_CONSOLE "Конзола"
+#define D_CONFIRM_RESTART "Потвърдете рестартирането"
+
+#define D_CONFIGURE_MODULE "Конфигурация на модула"
+#define D_CONFIGURE_WIFI "Конфигурация на WiFi"
+#define D_CONFIGURE_MQTT "Конфигурация на MQTT"
+#define D_CONFIGURE_DOMOTICZ "Конфигурация на Domoticz"
+#define D_CONFIGURE_LOGGING "Конфигурация на лога"
+#define D_CONFIGURE_OTHER "Други конфигурации"
+#define D_CONFIRM_RESET_CONFIGURATION "Потвърдете изчистването"
+#define D_RESET_CONFIGURATION "Изчистване на конфигурацията"
+#define D_BACKUP_CONFIGURATION "Запазване на конфигурацията"
+#define D_RESTORE_CONFIGURATION "Възстановяване на конфигурацията"
+#define D_MAIN_MENU "Основно меню"
+
+#define D_MODULE_PARAMETERS "Параметри на модула"
+#define D_MODULE_TYPE "Тип на модула"
+#define D_PULLUP_ENABLE "Без pull-up за бутон/ключ"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Сериен вход"
+#define D_SERIAL_OUT "Сериен изход"
+
+#define D_WIFI_PARAMETERS "Wifi параметри"
+#define D_SCAN_FOR_WIFI_NETWORKS "Сканиране за безжични мрежи"
+#define D_SCAN_DONE "Сканирането приключи"
+#define D_NO_NETWORKS_FOUND "Не бяха открити мрежи"
+#define D_REFRESH_TO_SCAN_AGAIN "Обновяване за повторно сканиране"
+#define D_DUPLICATE_ACCESSPOINT "Дублиране на точката за достъп (AP)"
+#define D_SKIPPING_LOW_QUALITY "Пропускане поради лошо качество"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Парола"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Парола"
+
+#define D_MQTT_PARAMETERS "Параметри на MQTT"
+#define D_CLIENT "Клиент"
+#define D_FULL_TOPIC "Пълен топик"
+
+#define D_LOGGING_PARAMETERS "Параметри на лога"
+#define D_SERIAL_LOG_LEVEL "Степен на серийния лог"
+#define D_MQTT_LOG_LEVEL "Степен на MQTT лога"
+#define D_WEB_LOG_LEVEL "Степен на уеб лога"
+#define D_SYS_LOG_LEVEL "Степен на системния лог"
+#define D_MORE_DEBUG "Допълнителна debug информация"
+#define D_SYSLOG_HOST "Хост на системния лог"
+#define D_SYSLOG_PORT "Порт на системния лог"
+#define D_TELEMETRY_PERIOD "Период на телеметрия"
+
+#define D_OTHER_PARAMETERS "Други параметри"
+#define D_TEMPLATE "Модел"
+#define D_ACTIVATE "Активирай"
+#define D_WEB_ADMIN_PASSWORD "Парола на уеб администратора"
+#define D_MQTT_ENABLE "Активиране на MQTT"
+#define D_FRIENDLY_NAME "Приятелско име"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "Единично"
+#define D_MULTI_DEVICE "Мулти"
+
+#define D_CONFIGURE_TEMPLATE "Конфигуриране на шаблон"
+#define D_TEMPLATE_PARAMETERS "Параметри на шаблона"
+#define D_TEMPLATE_NAME "Име"
+#define D_BASE_TYPE "Базиран на"
+#define D_TEMPLATE_FLAGS "Опции"
+
+#define D_SAVE_CONFIGURATION "Запазване на конфигурацията"
+#define D_CONFIGURATION_SAVED "Конфигурацията е запазена"
+#define D_CONFIGURATION_RESET "Конфигурацията е изчистена"
+
+#define D_PROGRAM_VERSION "Версия на програмата"
+#define D_BUILD_DATE_AND_TIME "Дата и час на компилацията"
+#define D_CORE_AND_SDK_VERSION "Версия на Core/SDK"
+#define D_FLASH_WRITE_COUNT "Брой на записите във флаш паметта"
+#define D_MAC_ADDRESS "MAC адрес"
+#define D_MQTT_HOST "MQTT хост"
+#define D_MQTT_PORT "MQTT порт"
+#define D_MQTT_CLIENT "MQTT ID на клиент"
+#define D_MQTT_USER "MQTT потребител"
+#define D_MQTT_TOPIC "MQTT топик"
+#define D_MQTT_GROUP_TOPIC "MQTT групов топик"
+#define D_MQTT_FULL_TOPIC "MQTT пълен топик"
+#define D_MDNS_DISCOVERY "mDNS откриване"
+#define D_MDNS_ADVERTISE "mDNS известяване"
+#define D_ESP_CHIP_ID "ID на ESP чипа"
+#define D_FLASH_CHIP_ID "ID на чипа на флаш паметта"
+#define D_FLASH_CHIP_SIZE "Размер на флаш паметта"
+#define D_FREE_PROGRAM_SPACE "Свободно пространство за програми"
+
+#define D_UPGRADE_BY_WEBSERVER "Обновяване чрез уеб сървър"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Започване на обновяване"
+#define D_UPGRADE_BY_FILE_UPLOAD "Обновяване чрез зареждане на файл"
+#define D_UPLOAD_STARTED "Зареждането започна"
+#define D_UPGRADE_STARTED "Обновяването започна"
+#define D_UPLOAD_DONE "Зареждането завърши"
+#define D_UPLOAD_ERR_1 "Не е избран файл"
+#define D_UPLOAD_ERR_2 "Недостатъчно свободно място"
+#define D_UPLOAD_ERR_3 "Magic байтът не е 0xE9"
+#define D_UPLOAD_ERR_4 "Размерът на програмата е по-голям от реалния размер на флаш паметта"
+#define D_UPLOAD_ERR_5 "Грешка при зареждането в буфера"
+#define D_UPLOAD_ERR_6 "Грешка при зареждането. Включено е ниво 3 на лога"
+#define D_UPLOAD_ERR_7 "Зареждането е прекъснато"
+#define D_UPLOAD_ERR_8 "Файлът е невалиден"
+#define D_UPLOAD_ERR_9 "Файлът е прекалено голям"
+#define D_UPLOAD_ERR_10 "Грешка при инициализация на RF чипа"
+#define D_UPLOAD_ERR_11 "Грешка при изтриване на RF чипа"
+#define D_UPLOAD_ERR_12 "Грешка при записване в RF чипа"
+#define D_UPLOAD_ERR_13 "Грешка при декодиране на RF фърмуера"
+#define D_UPLOAD_ERROR_CODE "Код на грешка при зареждането"
+
+#define D_ENTER_COMMAND "Въвеждане на команда"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Включете ниво 2 на лога, ако очаквате отговор"
+#define D_NEED_USER_AND_PASSWORD "Очаква user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Проверка на TLS отпечатък..."
+#define D_TLS_CONNECT_FAILED_TO "Неуспешно TLS свързване към"
+#define D_RETRY_IN "Повтори след"
+#define D_VERIFIED "Проверен отпечтък"
+#define D_INSECURE "Нешифрована връзка, недействителен отпечатък"
+#define D_CONNECT_FAILED_TO "Грешка при свързването към"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast е изключен"
+#define D_MULTICAST_REJOINED "Multicast е повторно съединен"
+#define D_MULTICAST_JOIN_FAILED "Multicast грешка при присъединяването"
+#define D_FAILED_TO_SEND_RESPONSE "Неуспех при изпращането на отговор"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo главно събитие"
+#define D_WEMO_EVENT_SERVICE "WeMo услуга за събитията"
+#define D_WEMO_META_SERVICE "WeMo мета-услуга"
+#define D_WEMO_SETUP "WeMo настройка"
+#define D_RESPONSE_SENT "Отговорът е изпратен"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Настройка на Hue bridge"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API не е внедрен"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST аргументи"
+#define D_3_RESPONSE_PACKETS_SENT "Изпратени са 3 пакета за отговор"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz параметри"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Мощност,Енергия"
+ #define D_DOMOTICZ_ILLUMINANCE "Осветеност"
+ #define D_DOMOTICZ_COUNT "Брояч/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Напрежение/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Ток/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Качество на въздуха"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Период на опресняване"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Конфигуриране на таймер"
+#define D_TIMER_PARAMETERS "Параметри на таймера"
+#define D_TIMER_ENABLE "Активиране на таймера"
+#define D_TIMER_ARM "Активиран"
+#define D_TIMER_TIME "Време"
+#define D_TIMER_DAYS "Дни"
+#define D_TIMER_REPEAT "Повтори"
+#define D_TIMER_OUTPUT "Изход"
+#define D_TIMER_ACTION "Действие"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Конфигуриране на KNX"
+#define D_KNX_PARAMETERS "KNX параметри"
+#define D_KNX_GENERAL_CONFIG "Основни"
+#define D_KNX_PHYSICAL_ADDRESS "Физически адрес"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Трябва да е уникален в KNX мрежата )"
+#define D_KNX_ENABLE "Активиране на KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Групови адреси за изпращане на данни"
+#define D_ADD "Добаване"
+#define D_DELETE "Изтриване"
+#define D_REPLY "Отговор"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Групови адреси за получаване на данни"
+#define D_RECEIVED_FROM "Получен от"
+#define D_KNX_COMMAND_WRITE "Писане"
+#define D_KNX_COMMAND_READ "Четене"
+#define D_KNX_COMMAND_OTHER "Друго"
+#define D_SENT_TO "изпратен до"
+#define D_KNX_WARNING "Груповият адрес (0/0/0) е резервиран и не може да бъде използван."
+#define D_KNX_ENHANCEMENT "Подобрена комуникация"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Използвана енергия днес"
+#define D_ENERGY_YESTERDAY "Използвана енергия вчера"
+#define D_ENERGY_TOTAL "Използвана енергия общо"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Отворена"
+#define D_CLOSE "Затворена"
+#define D_DOMOTICZ_SHUTTER "Щора"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Конфигуриране на PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 параметри"
+#define D_INVERT_PORTS "Обърни портовете"
+#define D_DEVICE "Устройство"
+#define D_DEVICE_INPUT "Вход"
+#define D_DEVICE_OUTPUT "Изход"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Датчикът DS18x20 е зает"
+#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - грешка CRC"
+#define D_SENSORS_FOUND "Намерен е датчик DS18x20"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Изтекло време за очакване на"
+#define D_START_SIGNAL_LOW "Нисък стартов сигнал"
+#define D_START_SIGNAL_HIGH "Висок стартов сигнал"
+#define D_PULSE "Импулс"
+#define D_CHECKSUM_FAILURE "Грешка в контролната сума"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчикът не прие команда ACK"
+#define D_SHT1X_FOUND "Намерен е SHT1X"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Частици"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Ускорение - ос X"
+#define D_AY_AXIS "Ускорение - ос Y"
+#define D_AZ_AXIS "Ускорение - ос Z"
+#define D_GX_AXIS "Жироскоп - ос X"
+#define D_GY_AXIS "Жироскоп - ос Y"
+#define D_GZ_AXIS "Жироскоп - ос Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Премахване на тегло"
+#define D_HX_CAL_REFERENCE "Зареждане на референтно тегло"
+#define D_HX_CAL_DONE "Калибриран"
+#define D_HX_CAL_FAIL "Неуспешно калибриране"
+#define D_RESET_HX711 "Нулиране на кантара"
+#define D_CONFIGURE_HX711 "Конфигуриране на кантара"
+#define D_HX711_PARAMETERS "Параметри на кантара"
+#define D_ITEM_WEIGHT "Тегло"
+#define D_REFERENCE_WEIGHT "Референтно тегло"
+#define D_CALIBRATE "Калибриране"
+#define D_CALIBRATION "Калибровка"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Посока на вятъра"
+#define D_TX20_WIND_SPEED "Скорост на вятъра"
+#define D_TX20_WIND_SPEED_AVG "Средна скорост на вятъра"
+#define D_TX20_WIND_SPEED_MAX "Макс. скорост на вятъра"
+#define D_TX20_NORTH "С"
+#define D_TX20_EAST "И"
+#define D_TX20_SOUTH "Ю"
+#define D_TX20_WEST "З"
+
+// 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 "Потребит."
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 плейър"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Ключ" // Suffix "1"
+#define D_SENSOR_BUTTON "Бутон" // Suffix "1"
+#define D_SENSOR_RELAY "Реле" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Брояч" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Подсветка"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF датчик"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "h"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "gal/min"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h"
+#define D_UNIT_KILOOHM "kΩ"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
+#define D_UNIT_MICROMETER "µm"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "s"
+#define D_UNIT_SECTORS "сектори"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Фазов ъгъл"
+#define D_IMPORT_ACTIVE "Входна активна мощност"
+#define D_EXPORT_ACTIVE "Изходна активна мощност"
+#define D_IMPORT_REACTIVE "Входна реактивна мощност"
+#define D_EXPORT_REACTIVE "Изходна реактивна мощност"
+#define D_TOTAL_REACTIVE "Общо реактивна мощност"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "°"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "Напрежение на PV1"
+#define D_PV1_CURRENT "Ток на PV1"
+#define D_PV1_POWER "Мощност на PV1"
+#define D_PV2_VOLTAGE "Напрежение на PV2"
+#define D_PV2_CURRENT "Ток на PV2"
+#define D_PV2_POWER "Мощност на PV2"
+#define D_SOLAR_POWER "Слънчева мощност"
+#define D_INVERTER_POWER "Мощност на инвертера"
+#define D_STATUS "Състояние"
+#define D_WAITING "Очакване"
+#define D_CHECKING "Проверка"
+#define D_WORKING "Работи"
+#define D_FAILURE "Грешка"
+#define D_SOLAX_ERROR_0 "Грешка - няма код"
+#define D_SOLAX_ERROR_1 "Грешка - загуба на мрежата"
+#define D_SOLAX_ERROR_2 "Грешка - мрежово напрежение"
+#define D_SOLAX_ERROR_3 "Грешка - мрежова честота"
+#define D_SOLAX_ERROR_4 "Грешка - напрежение на Pv"
+#define D_SOLAX_ERROR_5 "Грешка - проблем с изолацията"
+#define D_SOLAX_ERROR_6 "Грешка - прегряване"
+#define D_SOLAX_ERROR_7 "Грешка - вентилатор"
+#define D_SOLAX_ERROR_8 "Грешка - друго оборудване"
+
+#endif // _LANGUAGE_BG_BG_H_
diff --git a/tasmota/language/cs-CZ.h b/tasmota/language/cs-CZ.h
index 1d7c6f381..7579e1922 100644
--- a/tasmota/language/cs-CZ.h
+++ b/tasmota/language/cs-CZ.h
@@ -1,701 +1,703 @@
-/*
- cs-CZ.h - localization for Czech with diacritics - Czech for Tasmota
-
- Copyright (C) 2019 Vladimír Synek
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_CS_CZ_H_
-#define _LANGUAGE_CS_CZ_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.5.0.9
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1029
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "cs"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "Ne Po Út St Čt Pá So "
-#define D_MONTH3LIST "LedÚnoBřeDubKvěČvnČvcSrpZářŘíjLisPro"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Kvalita vzduchu"
-#define D_AP "AP" // Access Point
-#define D_AS "jako"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blikání"
-#define D_BLINKOFF "BlikáníVyp"
-#define D_BOOT_COUNT "Počítadlo spuštění"
-#define D_BRIGHTLIGHT "Světlý"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Tlačítko"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bytů"
-#define D_CELSIUS "°C"
-#define D_CHANNEL "Channel"
-#define D_CO2 "CO2"
-#define D_CODE "kód" // Button code
-#define D_COLDLIGHT "Studené světlo"
-#define D_COMMAND "Příkaz"
-#define D_CONNECTED "...připojeno"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Počítej"
-#define D_COUNTER "Počítadlo"
-#define D_CURRENT "Proud" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Tmavý"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Zablokováno"
-#define D_DISTANCE "Distance"
-#define D_DNS_SERVER "Server DNS"
-#define D_DONE "Provedeno"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulace"
-#define D_ENABLED "Otevřený"
-#define D_ERASE "Smaž"
-#define D_ERROR "Chyba"
-#define D_FAHRENHEIT "Fahrenheita"
-#define D_FAILED "chyba"
-#define D_FALLBACK "Záložní"
-#define D_FALLBACK_TOPIC "Záložní topic"
-#define D_FALSE "Nepravda"
-#define D_FILE "Soubor"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Volná paměť"
-#define D_FREQUENCY "Kmitočet"
-#define D_GAS "Plyn"
-#define D_GATEWAY "Výchozí brána"
-#define D_GROUP "Skupina"
-#define D_HOST "Server"
-#define D_HOSTNAME "Název serveru"
-#define D_HUMIDITY "Vlhkost"
-#define D_ILLUMINANCE "Osvětlení"
-#define D_IMMEDIATE "Okamžité" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Informace"
-#define D_INFRARED "Infrared"
-#define D_INITIALIZED "Inicializovaný"
-#define D_IP_ADDRESS "Adresa IP"
-#define D_LIGHT "Světlo"
-#define D_LWT "LWT"
-#define D_MODULE "Modul"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "několikeré-stisknutí"
-#define D_NOISE "Hluk"
-#define D_NONE "Žádný"
-#define D_OFF "Vyp."
-#define D_OFFLINE "Neaktivní"
-#define D_OK "OK"
-#define D_ON "Zap."
-#define D_ONLINE "Aktivní"
-#define D_PASSWORD "Heslo"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Účiník"
-#define D_POWERUSAGE "Příkon"
-#define D_POWERUSAGE_ACTIVE "Činný příkon"
-#define D_POWERUSAGE_APPARENT "Zdánlivý příkon"
-#define D_POWERUSAGE_REACTIVE "Jalový příkon"
-#define D_PRESSURE "Tlak"
-#define D_PRESSUREATSEALEVEL "Tlak na hladině moře"
-#define D_PROGRAM_FLASH_SIZE "Velikost paměti flash"
-#define D_PROGRAM_SIZE "Velikost programu"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Přijatý"
-#define D_RESTART "Restart"
-#define D_RESTARTING "Restartování"
-#define D_RESTART_REASON "Příčina restartu"
-#define D_RESTORE "Obnovit"
-#define D_RETAINED "Zachováno"
-#define D_RULE "Rule"
-#define D_SAVE "Ulož"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSID"
-#define D_START "Start"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Maska podsítě"
-#define D_SUBSCRIBE_TO "Přihlaš se do"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "úspěšné."
-#define D_SUNRISE "Svítání"
-#define D_SUNSET "Soumrak"
-#define D_TEMPERATURE "Teplota"
-#define D_TO "do"
-#define D_TOGGLE "Přepni"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Odešli"
-#define D_TRUE "Pravda"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "aktualizace"
-#define D_UPLOAD "Nahrání..."
-#define D_UPTIME "Uptime"
-#define D_USER "Uživatel"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Nízký"
-#define D_UV_INDEX_2 "Střední"
-#define D_UV_INDEX_3 "Vysoký"
-#define D_UV_INDEX_4 "Nebezpečný"
-#define D_UV_INDEX_5 "Popál1/2"
-#define D_UV_INDEX_6 "Popál3"
-#define D_UV_INDEX_7 "MimoRozsah"
-#define D_UV_LEVEL "úroveň UV"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Verze"
-#define D_VOLTAGE "Napětí"
-#define D_WEIGHT "Hmotnost"
-#define D_WARMLIGHT "Teplé světlo"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "UPOZORNĚNÍ Tato verze nepodporuje trvalé nastavení"
-#define D_LEVEL_10 "úroveň 1-0"
-#define D_LEVEL_01 "úroveň 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Logování na sériovém portu ukončeno"
-#define D_SYSLOG_LOGGING_REENABLED "Obnoven zápis do Syslog"
-
-#define D_SET_BAUDRATE_TO "Nastavení rychlosti přenosu na"
-#define D_RECEIVED_TOPIC "Přijatý topic"
-#define D_DATA_SIZE "Velikost dat"
-#define D_ANALOG_INPUT "Analogový vstup"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Zablokování smyčky"
-#define D_WPS_FAILED_WITH_STATUS "Chyba WPSconfig se statusem"
-#define D_ACTIVE_FOR_3_MINUTES "aktivní 3 minuty"
-#define D_FAILED_TO_START "nepodařilo se spustit"
-#define D_PATCH_ISSUE_2186 "Chyba 2186"
-#define D_CONNECTING_TO_AP "Připojování k AP"
-#define D_IN_MODE "v módu"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba připojení, nebyla obdržena IP adresa"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba připojení, nedostupný AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba připojení, nesprávné heslo pro AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba připojení, uplynul AP timeout"
-#define D_ATTEMPTING_CONNECTION "Připojování..."
-#define D_CHECKING_CONNECTION "Zkouška spojení..."
-#define D_QUERY_DONE "Vyslání dotazu. Nalezena služba MQTT"
-#define D_MQTT_SERVICE_FOUND "Služba MQTT byla nalezena"
-#define D_FOUND_AT "znalezeno v"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nebyl nalezen"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Uloženo do paměti flash v"
-#define D_LOADED_FROM_FLASH_AT "Staženo z paměti flash z"
-#define D_USE_DEFAULTS "Použij defaultní hodnoty"
-#define D_ERASED_SECTOR "Smazaný sektor"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Pro používání prostředí Tasmota povolte JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMÁLNÍ
prosím zaktualizujte"
-#define D_WEBSERVER_ACTIVE_ON "Aktivní Web server"
-#define D_WITH_IP_ADDRESS "na IP adrese"
-#define D_WEBSERVER_STOPPED "Web server zastaven"
-#define D_FILE_NOT_FOUND "Soubor nebyl nalezen"
-#define D_REDIRECTED "Přesměrování na vlastní portál"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wi-Fi manager nastaví AP a zachová STA"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wi-Fi manager nastaví Access Point"
-#define D_TRYING_TO_CONNECT "Zkouším připojit zařízení k síti"
-
-#define D_RESTART_IN "Restart"
-#define D_SECONDS "sekund"
-#define D_DEVICE_WILL_RESTART "Zařízení bude zrestartováno během několika sekund"
-#define D_BUTTON_TOGGLE "Přepínač"
-#define D_CONFIGURATION "Nastavení"
-#define D_INFORMATION "Informace"
-#define D_FIRMWARE_UPGRADE "Aktualizace firmware"
-#define D_CONSOLE "Konzole"
-#define D_CONFIRM_RESTART "Potvrzení restartu"
-
-#define D_CONFIGURE_MODULE "Nastavení modulu"
-#define D_CONFIGURE_WIFI "Nastavení WiFi"
-#define D_CONFIGURE_MQTT "Nastavení MQTT"
-#define D_CONFIGURE_DOMOTICZ "Nastavení Domoticz"
-#define D_CONFIGURE_LOGGING "Nastavení logování"
-#define D_CONFIGURE_OTHER "Jiná nastavení"
-#define D_CONFIRM_RESET_CONFIGURATION "Potvrzení resetu nastavení"
-#define D_RESET_CONFIGURATION "Reset nastavení"
-#define D_BACKUP_CONFIGURATION "Záloha nastavení"
-#define D_RESTORE_CONFIGURATION "Obnovení nastavení"
-#define D_MAIN_MENU "Hlavní menu"
-
-#define D_MODULE_PARAMETERS "Nastavení modulu"
-#define D_MODULE_TYPE "Typ modulu"
-#define D_PULLUP_ENABLE "Tlačítko/Spínač bez pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Nastavení WiFi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Scan sítí WiFi"
-#define D_SCAN_DONE "Scan dokončen"
-#define D_NO_NETWORKS_FOUND "Síť nebyla nalezena"
-#define D_REFRESH_TO_SCAN_AGAIN "Zopakovat scan"
-#define D_DUPLICATE_ACCESSPOINT "Kopie AP"
-#define D_SKIPPING_LOW_QUALITY "Přeskočení z důvodu kvality signálu"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSID"
-#define D_AP1_PASSWORD "Heslo AP1"
-#define D_AP2_SSID "AP2 SSID"
-#define D_AP2_PASSWORD "Heslo AP2"
-
-#define D_MQTT_PARAMETERS "Nastavení MQTT"
-#define D_CLIENT "Klient"
-#define D_FULL_TOPIC "Celý topic"
-
-#define D_LOGGING_PARAMETERS "Volba logování"
-#define D_SERIAL_LOG_LEVEL "Seriová úroveň logu"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Webová úroveň logu"
-#define D_SYS_LOG_LEVEL "Systemová úroveň logu"
-#define D_MORE_DEBUG "Více debug informací"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Interval telemetrie"
-
-#define D_OTHER_PARAMETERS "Další nastavení"
-#define D_TEMPLATE "Šablona"
-#define D_ACTIVATE "Aktivovat"
-#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
-#define D_MQTT_ENABLE "MQTT aktivní"
-#define D_FRIENDLY_NAME "Friendly Name"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "single device"
-#define D_MULTI_DEVICE "multi device"
-
-#define D_CONFIGURE_TEMPLATE "Nastavení šablony"
-#define D_TEMPLATE_PARAMETERS "Parametry šablony"
-#define D_TEMPLATE_NAME "Název"
-#define D_BASE_TYPE "Vzor z"
-#define D_TEMPLATE_FLAGS "Volby"
-
-#define D_SAVE_CONFIGURATION "Ulož nastavení"
-#define D_CONFIGURATION_SAVED "Nastavení uloženo"
-#define D_CONFIGURATION_RESET "Nastavení resetováno"
-
-#define D_PROGRAM_VERSION "Verze programu"
-#define D_BUILD_DATE_AND_TIME "Datum a čas kompilace"
-#define D_CORE_AND_SDK_VERSION "Verze Core/SDK"
-#define D_FLASH_WRITE_COUNT "Počet zápisů do paměti"
-#define D_MAC_ADDRESS "Adresa MAC"
-#define D_MQTT_HOST "Host MQTT"
-#define D_MQTT_PORT "Port MQTT"
-#define D_MQTT_CLIENT "Klient MQTT"
-#define D_MQTT_USER "Uživatel MQTT"
-#define D_MQTT_TOPIC "Topic MQTT"
-#define D_MQTT_GROUP_TOPIC "Topic skupiny MQTT"
-#define D_MQTT_FULL_TOPIC "Celý topic MQTT"
-#define D_MDNS_DISCOVERY "Získávání mDNS"
-#define D_MDNS_ADVERTISE "Rozesílání mDNS"
-#define D_ESP_CHIP_ID "ID systému ESP"
-#define D_FLASH_CHIP_ID "ID systému paměti flash"
-#define D_FLASH_CHIP_SIZE "Velikost flash"
-#define D_FREE_PROGRAM_SPACE "Volné místo pro program"
-
-#define D_UPGRADE_BY_WEBSERVER "Aktualizace z Web serveru"
-#define D_OTA_URL "URL OTA"
-#define D_START_UPGRADE "Start aktualizace"
-#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizace nahráním souboru"
-#define D_UPLOAD_STARTED "Nahrávání zahájeno"
-#define D_UPGRADE_STARTED "Zahájení aktualizace"
-#define D_UPLOAD_DONE "Nahrávání ukončeno"
-#define D_UPLOAD_ERR_1 "Soubor nebyl vybrán"
-#define D_UPLOAD_ERR_2 "Málo místa"
-#define D_UPLOAD_ERR_3 "Magický byte má hodnotu jinou než 0xE9"
-#define D_UPLOAD_ERR_4 "Velikost programu je větší než skutečná velikost paměti flash"
-#define D_UPLOAD_ERR_5 "Chyba nahrávání, nesouhlasí porovnávané bity"
-#define D_UPLOAD_ERR_6 "Chyba nahrávání. Spuštěn zápis do logu na úrovni 3"
-#define D_UPLOAD_ERR_7 "Nahrávání přerušeno"
-#define D_UPLOAD_ERR_8 "Špatný soubor"
-#define D_UPLOAD_ERR_9 "Soubor je příliš velký"
-#define D_UPLOAD_ERR_10 "Chyba inicializace RF chipu"
-#define D_UPLOAD_ERR_11 "Chyba smazání RF chipu"
-#define D_UPLOAD_ERR_12 "Chyba při zápisu do RF chipu"
-#define D_UPLOAD_ERR_13 "Chyba dekódování RF firmwaru"
-#define D_UPLOAD_ERROR_CODE "Chyba nahrávání"
-
-#define D_ENTER_COMMAND "Vlož příkaz"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Zapni úroveň 2 zápisu Weblog, pokud je očekávána odpověď"
-#define D_NEED_USER_AND_PASSWORD "Vyžadován uživatel=&heslo="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifikuj otisk TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Nepřipojeno TLS do"
-#define D_RETRY_IN "Zopakuji za"
-#define D_VERIFIED "Ověřeno otisk "
-#define D_INSECURE "Nesprávné připojení z důvodu chybného otisku TLS"
-#define D_CONNECT_FAILED_TO "Spojení se nepodařilo navázat"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast je vypnutý"
-#define D_MULTICAST_REJOINED "Multicast opět připojený"
-#define D_MULTICAST_JOIN_FAILED "Multicast neúspěšný"
-#define D_FAILED_TO_SEND_RESPONSE "Nepodařilo se odeslat odpověď"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo základní událost"
-#define D_WEMO_EVENT_SERVICE "WeMo servisní událost"
-#define D_WEMO_META_SERVICE "WeMo meta událost"
-#define D_WEMO_SETUP "WeMo setup"
-#define D_RESPONSE_SENT "Odpověď odeslána"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue setup"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API není implementováno"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 pakety odpovědi odeslány"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Nastavení Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Spinac idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Vlhk"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Vlhk,Tlak"
- #define D_DOMOTICZ_POWER_ENERGY "Příkon,Energie"
- #define D_DOMOTICZ_ILLUMINANCE "Osvětlení"
- #define D_DOMOTICZ_COUNT "Počítadlo/PM1"
- #define D_DOMOTICZ_VOLTAGE "Napětí/PM2,5"
- #define D_DOMOTICZ_CURRENT "Proud/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Aktualizace stopek"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Nastavení Časovače"
-#define D_TIMER_PARAMETERS "Časovač"
-#define D_TIMER_ENABLE "Povol časovače"
-#define D_TIMER_ARM "Aktivní"
-#define D_TIMER_TIME "Čas"
-#define D_TIMER_DAYS "Dny"
-#define D_TIMER_REPEAT "Opakovat"
-#define D_TIMER_OUTPUT "Výstup"
-#define D_TIMER_ACTION "Napájení"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Nastavení KNX"
-#define D_KNX_PARAMETERS "KNX parametry"
-#define D_KNX_GENERAL_CONFIG "Obecné"
-#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v síti KNX )"
-#define D_KNX_ENABLE "Povol KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data k odeslání na skupinové adresy"
-#define D_ADD "Přidej"
-#define D_DELETE "Smaž"
-#define D_REPLY "Odpověď"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pro příjem dat z"
-#define D_RECEIVED_FROM "Přijato z"
-#define D_KNX_COMMAND_WRITE "Zapiš"
-#define D_KNX_COMMAND_READ "Čti"
-#define D_KNX_COMMAND_OTHER "Jiné"
-#define D_SENT_TO "pošli"
-#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervována a nemůže být použita."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Spotřeba Dnes"
-#define D_ENERGY_YESTERDAY "Spotřeba Včera"
-#define D_ENERGY_TOTAL "Celková spotřeba"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor DS18x20 obsazen"
-#define D_SENSOR_CRC_ERROR "Sensor DS18x20 chyba CRC"
-#define D_SENSORS_FOUND "Nalezen sensor DS18x20"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Čekání na"
-#define D_START_SIGNAL_LOW "nízký startovní signál"
-#define D_START_SIGNAL_HIGH "vysoký startovní signál"
-#define D_PULSE "impuls"
-#define D_CHECKSUM_FAILURE "Chybný kontrolní součet"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor neobdržel příkaz ACK"
-#define D_SHT1X_FOUND "SHT1X nalezen"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "částic"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. osa-X"
-#define D_AY_AXIS "Accel. osa-Y"
-#define D_AZ_AXIS "Accel. osa-Z"
-#define D_GX_AXIS "Gyro osa-X"
-#define D_GY_AXIS "Gyro osa-Y"
-#define D_GZ_AXIS "Gyro osa-Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Odstraňte zátěž"
-#define D_HX_CAL_REFERENCE "Vložte referenční zátěž"
-#define D_HX_CAL_DONE "Zkalibrováno"
-#define D_HX_CAL_FAIL "Chyba kalibrace"
-#define D_RESET_HX711 "Reset váhy"
-#define D_CONFIGURE_HX711 "Konfigurace váhy"
-#define D_HX711_PARAMETERS "Parametry váhy"
-#define D_ITEM_WEIGHT "Vlastní hmotnost"
-#define D_REFERENCE_WEIGHT "Referenční hmotnost"
-#define D_CALIBRATE "Kalibruj"
-#define D_CALIBRATION "Kalibrace"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Směr větru"
-#define D_TX20_WIND_SPEED "Rychlost větru"
-#define D_TX20_WIND_SPEED_AVG "Průměrná rychlost větru"
-#define D_TX20_WIND_SPEED_MAX "Maximální rychlost větru"
-#define D_TX20_NORTH "S"
-#define D_TX20_EAST "V"
-#define D_TX20_SOUTH "J"
-#define D_TX20_WEST "Z"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Spínač" // Suffix "1"
-#define D_SENSOR_BUTTON "Tlačítko" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1",
-#define D_SENSOR_COUNTER "Počítadlo" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "hod"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
-#define D_UNIT_MICROMETER "µm"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sektory"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_CS_CZ_H_
+/*
+ cs-CZ.h - localization for Czech with diacritics - Czech for Tasmota
+
+ Copyright (C) 2019 Vladimír Synek
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_CS_CZ_H_
+#define _LANGUAGE_CS_CZ_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.5.0.9
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1029
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "cs"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "Ne Po Út St Čt Pá So "
+#define D_MONTH3LIST "LedÚnoBřeDubKvěČvnČvcSrpZářŘíjLisPro"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Kvalita vzduchu"
+#define D_AP "AP" // Access Point
+#define D_AS "jako"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blikání"
+#define D_BLINKOFF "BlikáníVyp"
+#define D_BOOT_COUNT "Počítadlo spuštění"
+#define D_BRIGHTLIGHT "Světlý"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Tlačítko"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bytů"
+#define D_CELSIUS "°C"
+#define D_CHANNEL "Channel"
+#define D_CO2 "CO2"
+#define D_CODE "kód" // Button code
+#define D_COLDLIGHT "Studené světlo"
+#define D_COMMAND "Příkaz"
+#define D_CONNECTED "...připojeno"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Počítej"
+#define D_COUNTER "Počítadlo"
+#define D_CURRENT "Proud" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Tmavý"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Zablokováno"
+#define D_DISTANCE "Distance"
+#define D_DNS_SERVER "Server DNS"
+#define D_DONE "Provedeno"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulace"
+#define D_ENABLED "Otevřený"
+#define D_ERASE "Smaž"
+#define D_ERROR "Chyba"
+#define D_FAHRENHEIT "Fahrenheita"
+#define D_FAILED "chyba"
+#define D_FALLBACK "Záložní"
+#define D_FALLBACK_TOPIC "Záložní topic"
+#define D_FALSE "Nepravda"
+#define D_FILE "Soubor"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Volná paměť"
+#define D_FREQUENCY "Kmitočet"
+#define D_GAS "Plyn"
+#define D_GATEWAY "Výchozí brána"
+#define D_GROUP "Skupina"
+#define D_HOST "Server"
+#define D_HOSTNAME "Název serveru"
+#define D_HUMIDITY "Vlhkost"
+#define D_ILLUMINANCE "Osvětlení"
+#define D_IMMEDIATE "Okamžité" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Informace"
+#define D_INFRARED "Infrared"
+#define D_INITIALIZED "Inicializovaný"
+#define D_IP_ADDRESS "Adresa IP"
+#define D_LIGHT "Světlo"
+#define D_LWT "LWT"
+#define D_MODULE "Modul"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "několikeré-stisknutí"
+#define D_NOISE "Hluk"
+#define D_NONE "Žádný"
+#define D_OFF "Vyp."
+#define D_OFFLINE "Neaktivní"
+#define D_OK "OK"
+#define D_ON "Zap."
+#define D_ONLINE "Aktivní"
+#define D_PASSWORD "Heslo"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Účiník"
+#define D_POWERUSAGE "Příkon"
+#define D_POWERUSAGE_ACTIVE "Činný příkon"
+#define D_POWERUSAGE_APPARENT "Zdánlivý příkon"
+#define D_POWERUSAGE_REACTIVE "Jalový příkon"
+#define D_PRESSURE "Tlak"
+#define D_PRESSUREATSEALEVEL "Tlak na hladině moře"
+#define D_PROGRAM_FLASH_SIZE "Velikost paměti flash"
+#define D_PROGRAM_SIZE "Velikost programu"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Přijatý"
+#define D_RESTART "Restart"
+#define D_RESTARTING "Restartování"
+#define D_RESTART_REASON "Příčina restartu"
+#define D_RESTORE "Obnovit"
+#define D_RETAINED "Zachováno"
+#define D_RULE "Rule"
+#define D_SAVE "Ulož"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSID"
+#define D_START "Start"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Maska podsítě"
+#define D_SUBSCRIBE_TO "Přihlaš se do"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "úspěšné."
+#define D_SUNRISE "Svítání"
+#define D_SUNSET "Soumrak"
+#define D_TEMPERATURE "Teplota"
+#define D_TO "do"
+#define D_TOGGLE "Přepni"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Odešli"
+#define D_TRUE "Pravda"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "aktualizace"
+#define D_UPLOAD "Nahrání..."
+#define D_UPTIME "Uptime"
+#define D_USER "Uživatel"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Nízký"
+#define D_UV_INDEX_2 "Střední"
+#define D_UV_INDEX_3 "Vysoký"
+#define D_UV_INDEX_4 "Nebezpečný"
+#define D_UV_INDEX_5 "Popál1/2"
+#define D_UV_INDEX_6 "Popál3"
+#define D_UV_INDEX_7 "MimoRozsah"
+#define D_UV_LEVEL "úroveň UV"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Verze"
+#define D_VOLTAGE "Napětí"
+#define D_WEIGHT "Hmotnost"
+#define D_WARMLIGHT "Teplé světlo"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "UPOZORNĚNÍ Tato verze nepodporuje trvalé nastavení"
+#define D_LEVEL_10 "úroveň 1-0"
+#define D_LEVEL_01 "úroveň 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Logování na sériovém portu ukončeno"
+#define D_SYSLOG_LOGGING_REENABLED "Obnoven zápis do Syslog"
+
+#define D_SET_BAUDRATE_TO "Nastavení rychlosti přenosu na"
+#define D_RECEIVED_TOPIC "Přijatý topic"
+#define D_DATA_SIZE "Velikost dat"
+#define D_ANALOG_INPUT "Analogový vstup"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Zablokování smyčky"
+#define D_WPS_FAILED_WITH_STATUS "Chyba WPSconfig se statusem"
+#define D_ACTIVE_FOR_3_MINUTES "aktivní 3 minuty"
+#define D_FAILED_TO_START "nepodařilo se spustit"
+#define D_PATCH_ISSUE_2186 "Chyba 2186"
+#define D_CONNECTING_TO_AP "Připojování k AP"
+#define D_IN_MODE "v módu"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba připojení, nebyla obdržena IP adresa"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba připojení, nedostupný AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba připojení, nesprávné heslo pro AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba připojení, uplynul AP timeout"
+#define D_ATTEMPTING_CONNECTION "Připojování..."
+#define D_CHECKING_CONNECTION "Zkouška spojení..."
+#define D_QUERY_DONE "Vyslání dotazu. Nalezena služba MQTT"
+#define D_MQTT_SERVICE_FOUND "Služba MQTT byla nalezena"
+#define D_FOUND_AT "znalezeno v"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nebyl nalezen"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Uloženo do paměti flash v"
+#define D_LOADED_FROM_FLASH_AT "Staženo z paměti flash z"
+#define D_USE_DEFAULTS "Použij defaultní hodnoty"
+#define D_ERASED_SECTOR "Smazaný sektor"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Pro používání prostředí Tasmota povolte JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMÁLNÍ
prosím zaktualizujte"
+#define D_WEBSERVER_ACTIVE_ON "Aktivní Web server"
+#define D_WITH_IP_ADDRESS "na IP adrese"
+#define D_WEBSERVER_STOPPED "Web server zastaven"
+#define D_FILE_NOT_FOUND "Soubor nebyl nalezen"
+#define D_REDIRECTED "Přesměrování na vlastní portál"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wi-Fi manager nastaví AP a zachová STA"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wi-Fi manager nastaví Access Point"
+#define D_TRYING_TO_CONNECT "Zkouším připojit zařízení k síti"
+
+#define D_RESTART_IN "Restart"
+#define D_SECONDS "sekund"
+#define D_DEVICE_WILL_RESTART "Zařízení bude zrestartováno během několika sekund"
+#define D_BUTTON_TOGGLE "Přepínač"
+#define D_CONFIGURATION "Nastavení"
+#define D_INFORMATION "Informace"
+#define D_FIRMWARE_UPGRADE "Aktualizace firmware"
+#define D_CONSOLE "Konzole"
+#define D_CONFIRM_RESTART "Potvrzení restartu"
+
+#define D_CONFIGURE_MODULE "Nastavení modulu"
+#define D_CONFIGURE_WIFI "Nastavení WiFi"
+#define D_CONFIGURE_MQTT "Nastavení MQTT"
+#define D_CONFIGURE_DOMOTICZ "Nastavení Domoticz"
+#define D_CONFIGURE_LOGGING "Nastavení logování"
+#define D_CONFIGURE_OTHER "Jiná nastavení"
+#define D_CONFIRM_RESET_CONFIGURATION "Potvrzení resetu nastavení"
+#define D_RESET_CONFIGURATION "Reset nastavení"
+#define D_BACKUP_CONFIGURATION "Záloha nastavení"
+#define D_RESTORE_CONFIGURATION "Obnovení nastavení"
+#define D_MAIN_MENU "Hlavní menu"
+
+#define D_MODULE_PARAMETERS "Nastavení modulu"
+#define D_MODULE_TYPE "Typ modulu"
+#define D_PULLUP_ENABLE "Tlačítko/Spínač bez pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Nastavení WiFi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Scan sítí WiFi"
+#define D_SCAN_DONE "Scan dokončen"
+#define D_NO_NETWORKS_FOUND "Síť nebyla nalezena"
+#define D_REFRESH_TO_SCAN_AGAIN "Zopakovat scan"
+#define D_DUPLICATE_ACCESSPOINT "Kopie AP"
+#define D_SKIPPING_LOW_QUALITY "Přeskočení z důvodu kvality signálu"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSID"
+#define D_AP1_PASSWORD "Heslo AP1"
+#define D_AP2_SSID "AP2 SSID"
+#define D_AP2_PASSWORD "Heslo AP2"
+
+#define D_MQTT_PARAMETERS "Nastavení MQTT"
+#define D_CLIENT "Klient"
+#define D_FULL_TOPIC "Celý topic"
+
+#define D_LOGGING_PARAMETERS "Volba logování"
+#define D_SERIAL_LOG_LEVEL "Seriová úroveň logu"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Webová úroveň logu"
+#define D_SYS_LOG_LEVEL "Systemová úroveň logu"
+#define D_MORE_DEBUG "Více debug informací"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Interval telemetrie"
+
+#define D_OTHER_PARAMETERS "Další nastavení"
+#define D_TEMPLATE "Šablona"
+#define D_ACTIVATE "Aktivovat"
+#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
+#define D_MQTT_ENABLE "MQTT aktivní"
+#define D_FRIENDLY_NAME "Friendly Name"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "single device"
+#define D_MULTI_DEVICE "multi device"
+
+#define D_CONFIGURE_TEMPLATE "Nastavení šablony"
+#define D_TEMPLATE_PARAMETERS "Parametry šablony"
+#define D_TEMPLATE_NAME "Název"
+#define D_BASE_TYPE "Vzor z"
+#define D_TEMPLATE_FLAGS "Volby"
+
+#define D_SAVE_CONFIGURATION "Ulož nastavení"
+#define D_CONFIGURATION_SAVED "Nastavení uloženo"
+#define D_CONFIGURATION_RESET "Nastavení resetováno"
+
+#define D_PROGRAM_VERSION "Verze programu"
+#define D_BUILD_DATE_AND_TIME "Datum a čas kompilace"
+#define D_CORE_AND_SDK_VERSION "Verze Core/SDK"
+#define D_FLASH_WRITE_COUNT "Počet zápisů do paměti"
+#define D_MAC_ADDRESS "Adresa MAC"
+#define D_MQTT_HOST "Host MQTT"
+#define D_MQTT_PORT "Port MQTT"
+#define D_MQTT_CLIENT "Klient MQTT"
+#define D_MQTT_USER "Uživatel MQTT"
+#define D_MQTT_TOPIC "Topic MQTT"
+#define D_MQTT_GROUP_TOPIC "Topic skupiny MQTT"
+#define D_MQTT_FULL_TOPIC "Celý topic MQTT"
+#define D_MDNS_DISCOVERY "Získávání mDNS"
+#define D_MDNS_ADVERTISE "Rozesílání mDNS"
+#define D_ESP_CHIP_ID "ID systému ESP"
+#define D_FLASH_CHIP_ID "ID systému paměti flash"
+#define D_FLASH_CHIP_SIZE "Velikost flash"
+#define D_FREE_PROGRAM_SPACE "Volné místo pro program"
+
+#define D_UPGRADE_BY_WEBSERVER "Aktualizace z Web serveru"
+#define D_OTA_URL "URL OTA"
+#define D_START_UPGRADE "Start aktualizace"
+#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizace nahráním souboru"
+#define D_UPLOAD_STARTED "Nahrávání zahájeno"
+#define D_UPGRADE_STARTED "Zahájení aktualizace"
+#define D_UPLOAD_DONE "Nahrávání ukončeno"
+#define D_UPLOAD_ERR_1 "Soubor nebyl vybrán"
+#define D_UPLOAD_ERR_2 "Málo místa"
+#define D_UPLOAD_ERR_3 "Magický byte má hodnotu jinou než 0xE9"
+#define D_UPLOAD_ERR_4 "Velikost programu je větší než skutečná velikost paměti flash"
+#define D_UPLOAD_ERR_5 "Chyba nahrávání, nesouhlasí porovnávané bity"
+#define D_UPLOAD_ERR_6 "Chyba nahrávání. Spuštěn zápis do logu na úrovni 3"
+#define D_UPLOAD_ERR_7 "Nahrávání přerušeno"
+#define D_UPLOAD_ERR_8 "Špatný soubor"
+#define D_UPLOAD_ERR_9 "Soubor je příliš velký"
+#define D_UPLOAD_ERR_10 "Chyba inicializace RF chipu"
+#define D_UPLOAD_ERR_11 "Chyba smazání RF chipu"
+#define D_UPLOAD_ERR_12 "Chyba při zápisu do RF chipu"
+#define D_UPLOAD_ERR_13 "Chyba dekódování RF firmwaru"
+#define D_UPLOAD_ERROR_CODE "Chyba nahrávání"
+
+#define D_ENTER_COMMAND "Vlož příkaz"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Zapni úroveň 2 zápisu Weblog, pokud je očekávána odpověď"
+#define D_NEED_USER_AND_PASSWORD "Vyžadován uživatel=&heslo="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifikuj otisk TLS..."
+#define D_TLS_CONNECT_FAILED_TO "Nepřipojeno TLS do"
+#define D_RETRY_IN "Zopakuji za"
+#define D_VERIFIED "Ověřeno otisk "
+#define D_INSECURE "Nesprávné připojení z důvodu chybného otisku TLS"
+#define D_CONNECT_FAILED_TO "Spojení se nepodařilo navázat"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast je vypnutý"
+#define D_MULTICAST_REJOINED "Multicast opět připojený"
+#define D_MULTICAST_JOIN_FAILED "Multicast neúspěšný"
+#define D_FAILED_TO_SEND_RESPONSE "Nepodařilo se odeslat odpověď"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo základní událost"
+#define D_WEMO_EVENT_SERVICE "WeMo servisní událost"
+#define D_WEMO_META_SERVICE "WeMo meta událost"
+#define D_WEMO_SETUP "WeMo setup"
+#define D_RESPONSE_SENT "Odpověď odeslána"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue setup"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API není implementováno"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 pakety odpovědi odeslány"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Nastavení Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Spinac idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Vlhk"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Vlhk,Tlak"
+ #define D_DOMOTICZ_POWER_ENERGY "Příkon,Energie"
+ #define D_DOMOTICZ_ILLUMINANCE "Osvětlení"
+ #define D_DOMOTICZ_COUNT "Počítadlo/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Napětí/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Proud/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Aktualizace stopek"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Nastavení Časovače"
+#define D_TIMER_PARAMETERS "Časovač"
+#define D_TIMER_ENABLE "Povol časovače"
+#define D_TIMER_ARM "Aktivní"
+#define D_TIMER_TIME "Čas"
+#define D_TIMER_DAYS "Dny"
+#define D_TIMER_REPEAT "Opakovat"
+#define D_TIMER_OUTPUT "Výstup"
+#define D_TIMER_ACTION "Napájení"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Nastavení KNX"
+#define D_KNX_PARAMETERS "KNX parametry"
+#define D_KNX_GENERAL_CONFIG "Obecné"
+#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v síti KNX )"
+#define D_KNX_ENABLE "Povol KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data k odeslání na skupinové adresy"
+#define D_ADD "Přidej"
+#define D_DELETE "Smaž"
+#define D_REPLY "Odpověď"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pro příjem dat z"
+#define D_RECEIVED_FROM "Přijato z"
+#define D_KNX_COMMAND_WRITE "Zapiš"
+#define D_KNX_COMMAND_READ "Čti"
+#define D_KNX_COMMAND_OTHER "Jiné"
+#define D_SENT_TO "pošli"
+#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervována a nemůže být použita."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Spotřeba Dnes"
+#define D_ENERGY_YESTERDAY "Spotřeba Včera"
+#define D_ENERGY_TOTAL "Celková spotřeba"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor DS18x20 obsazen"
+#define D_SENSOR_CRC_ERROR "Sensor DS18x20 chyba CRC"
+#define D_SENSORS_FOUND "Nalezen sensor DS18x20"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Čekání na"
+#define D_START_SIGNAL_LOW "nízký startovní signál"
+#define D_START_SIGNAL_HIGH "vysoký startovní signál"
+#define D_PULSE "impuls"
+#define D_CHECKSUM_FAILURE "Chybný kontrolní součet"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor neobdržel příkaz ACK"
+#define D_SHT1X_FOUND "SHT1X nalezen"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "částic"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. osa-X"
+#define D_AY_AXIS "Accel. osa-Y"
+#define D_AZ_AXIS "Accel. osa-Z"
+#define D_GX_AXIS "Gyro osa-X"
+#define D_GY_AXIS "Gyro osa-Y"
+#define D_GZ_AXIS "Gyro osa-Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Odstraňte zátěž"
+#define D_HX_CAL_REFERENCE "Vložte referenční zátěž"
+#define D_HX_CAL_DONE "Zkalibrováno"
+#define D_HX_CAL_FAIL "Chyba kalibrace"
+#define D_RESET_HX711 "Reset váhy"
+#define D_CONFIGURE_HX711 "Konfigurace váhy"
+#define D_HX711_PARAMETERS "Parametry váhy"
+#define D_ITEM_WEIGHT "Vlastní hmotnost"
+#define D_REFERENCE_WEIGHT "Referenční hmotnost"
+#define D_CALIBRATE "Kalibruj"
+#define D_CALIBRATION "Kalibrace"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Směr větru"
+#define D_TX20_WIND_SPEED "Rychlost větru"
+#define D_TX20_WIND_SPEED_AVG "Průměrná rychlost větru"
+#define D_TX20_WIND_SPEED_MAX "Maximální rychlost větru"
+#define D_TX20_NORTH "S"
+#define D_TX20_EAST "V"
+#define D_TX20_SOUTH "J"
+#define D_TX20_WEST "Z"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Spínač" // Suffix "1"
+#define D_SENSOR_BUTTON "Tlačítko" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1",
+#define D_SENSOR_COUNTER "Počítadlo" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "hod"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
+#define D_UNIT_MICROMETER "µm"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sektory"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_CS_CZ_H_
diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h
index 6569dd232..d4e434e0c 100644
--- a/tasmota/language/de-DE.h
+++ b/tasmota/language/de-DE.h
@@ -1,701 +1,703 @@
-/*
- de-DE.h - localization for German - Germany for Tasmota
-
- Copyright (C) 2019 VinceMasuka
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_DE_DE_H_
-#define _LANGUAGE_DE_DE_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.6.0.21
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1031
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "de"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "."
-#define D_MONTH_DAY_SEPARATOR "."
-#define D_DATE_TIME_SEPARATOR " "
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "So Mo Di Mi Do Fr Sa "
-#define D_MONTH3LIST "JanFebMärAprMaiJunJulAugSepOktNovDez"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Luftqualität"
-#define D_AP "AP" // Access Point
-#define D_AS "als"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blinken"
-#define D_BLINKOFF "BlinkenAus"
-#define D_BOOT_COUNT "Anzahl Startvorgänge"
-#define D_BRIGHTLIGHT "hell"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Knopf"
-#define D_BY "von" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Kanal"
-#define D_CO2 "CO²"
-#define D_CODE "code" // Button code
-#define D_COLDLIGHT "kalt"
-#define D_COMMAND "Befehl"
-#define D_CONNECTED "verbunden"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "zählen"
-#define D_COUNTER "Zähler"
-#define D_CURRENT "Strom" // As in Voltage and Current
-#define D_DATA "Daten"
-#define D_DARKLIGHT "dunkel"
-#define D_DEBUG "debug"
-#define D_DISABLED "deaktiviert"
-#define D_DISTANCE "Abstand"
-#define D_DNS_SERVER "DNS-Server"
-#define D_DONE "erledigt"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulation"
-#define D_ENABLED "aktiviert"
-#define D_ERASE "löschen"
-#define D_ERROR "Fehler"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "fehlgeschlagen"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback-Topic"
-#define D_FALSE "falsch"
-#define D_FILE "Datei"
-#define D_FLOW_RATE "Durchflussmenge"
-#define D_FREE_MEMORY "Freier Arbeitsspeicher"
-#define D_FREQUENCY "Frequenz"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Gruppe"
-#define D_HOST "Host"
-#define D_HOSTNAME "Hostname"
-#define D_HUMIDITY "Feuchtigkeit"
-#define D_ILLUMINANCE "Beleuchtungsintensität"
-#define D_IMMEDIATE "direkt" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infrarot"
-#define D_INITIALIZED "initialisiert"
-#define D_IP_ADDRESS "IP-Adresse"
-#define D_LIGHT "Licht"
-#define D_LWT "LWT"
-#define D_MODULE "Modul"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "Mehrfachdruck"
-#define D_NOISE "Lautstärke"
-#define D_NONE "keine"
-#define D_OFF "aus"
-#define D_OFFLINE "Offline"
-#define D_OK "OK"
-#define D_ON "an"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Passwort"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Leistungsfaktor"
-#define D_POWERUSAGE "Leistung"
-#define D_POWERUSAGE_ACTIVE "Wirkleistung"
-#define D_POWERUSAGE_APPARENT "Scheinleistung"
-#define D_POWERUSAGE_REACTIVE "Blindleistung"
-#define D_PRESSURE "Luftdruck"
-#define D_PRESSUREATSEALEVEL "Luftdruck auf Meereshöhe"
-#define D_PROGRAM_FLASH_SIZE "Ges. Flash Speicher"
-#define D_PROGRAM_SIZE "Ben. Flash Speicher"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Regen"
-#define D_RECEIVED "erhalten"
-#define D_RESTART "Neustart"
-#define D_RESTARTING "starte neu"
-#define D_RESTART_REASON "Grund für Neustart"
-#define D_RESTORE "Wiederherstellung"
-#define D_RETAINED "beibehalten"
-#define D_RULE "Regel"
-#define D_SAVE "Speichern"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSID"
-#define D_START "Start"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Subnetzmaske"
-#define D_SUBSCRIBE_TO "abonniere"
-#define D_UNSUBSCRIBE_FROM "löse abo. von"
-#define D_SUCCESSFUL "erfolgreich"
-#define D_SUNRISE "Sonnenaufgang"
-#define D_SUNSET "Sonnenuntergang"
-#define D_TEMPERATURE "Temperatur"
-#define D_TO "zu"
-#define D_TOGGLE "An/Aus"
-#define D_TOPIC "topic"
-#define D_TOTAL_USAGE "Gesamtverbrauch"
-#define D_TRANSMIT "Übertragen"
-#define D_TRUE "wahr"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "update"
-#define D_UPLOAD "Upload"
-#define D_UPTIME "Laufzeit"
-#define D_USER "Benutzer"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV-Index"
-#define D_UV_INDEX_1 "Niedrig"
-#define D_UV_INDEX_2 "Mittel"
-#define D_UV_INDEX_3 "Hoch"
-#define D_UV_INDEX_4 "Intensiv"
-#define D_UV_INDEX_5 "Gefährlich"
-#define D_UV_INDEX_6 "Schädlich"
-#define D_UV_INDEX_7 "Messwert!"
-#define D_UV_LEVEL "UV-Level"
-#define D_UV_POWER "UV Intensität"
-#define D_VERSION "Version"
-#define D_VOLTAGE "Spannung"
-#define D_WEIGHT "Gewicht"
-#define D_WARMLIGHT "warm"
-#define D_WEB_SERVER "Web-Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ACHTUNG: Diese Version unterstützt keine persistenten Einstellungen"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serielles Logging deaktiviert"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog-Logging aktiviert"
-
-#define D_SET_BAUDRATE_TO "Setze Baudrate auf"
-#define D_RECEIVED_TOPIC "empfangenes topic"
-#define D_DATA_SIZE "Datengröße"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Schleife blockiert."
-#define D_WPS_FAILED_WITH_STATUS "WPS fehlgeschlagen mit Status"
-#define D_ACTIVE_FOR_3_MINUTES "aktiv für 3 Minuten"
-#define D_FAILED_TO_START "Starten fehlgeschlagen"
-#define D_PATCH_ISSUE_2186 "Repariere Problem #2186"
-#define D_CONNECTING_TO_AP "verbinden mit AP"
-#define D_IN_MODE "in Modus"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Verbindung fehlgeschlagen, da keine IP-Adresse zugeteilt wurde"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Verbindung fehlgeschlagen, da AP nicht erreicht werden konnte"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbindung fehlgeschlagen, da das Passwort falsch ist"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Verbindung fehlgeschlagen, da der AP nicht antwortet (timeout)"
-#define D_ATTEMPTING_CONNECTION "Verbindungsversuch..."
-#define D_CHECKING_CONNECTION "Prüfe Verbindung..."
-#define D_QUERY_DONE "Suchanfrage abgeschlossen. MQTT-Services gefunden"
-#define D_MQTT_SERVICE_FOUND "MQTT-Service gefunden bei"
-#define D_FOUND_AT "gefunden bei"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog-Host nicht gefunden"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "in Flash gespeichert am"
-#define D_LOADED_FROM_FLASH_AT "aus Flash geladen am"
-#define D_USE_DEFAULTS "Standard verwenden"
-#define D_ERASED_SECTOR "gelöschter Sektor"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "JavaScript aktivieren um Tasmota benutzen zu können"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMUM-Firmware
bitte upgraden"
-#define D_WEBSERVER_ACTIVE_ON "Web-Server aktiv bei"
-#define D_WITH_IP_ADDRESS "mit IP-Adresse"
-#define D_WEBSERVER_STOPPED "Web-Server angehalten"
-#define D_FILE_NOT_FOUND "Datei nicht gefunden"
-#define D_REDIRECTED "umgeleitet zu captive portal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "WLAN-Manager AccessPoint gesetzt und behält Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "WLAN-Manager AccessPoint gesetzt"
-#define D_TRYING_TO_CONNECT "Versuche Gerät mit Netzwerk zu verbinden"
-
-#define D_RESTART_IN "Neustart in"
-#define D_SECONDS "Sekunden"
-#define D_DEVICE_WILL_RESTART "Gerät wird jetzt neu gestartet"
-#define D_BUTTON_TOGGLE "An/Aus"
-#define D_CONFIGURATION "Einstellungen"
-#define D_INFORMATION "Informationen"
-#define D_FIRMWARE_UPGRADE "Firmware Update"
-#define D_CONSOLE "Konsole"
-#define D_CONFIRM_RESTART "Wirklich neustarten?"
-
-#define D_CONFIGURE_MODULE "Gerät konfigurieren"
-#define D_CONFIGURE_WIFI "WLAN konfigurieren"
-#define D_CONFIGURE_MQTT "MQTT konfigurieren"
-#define D_CONFIGURE_DOMOTICZ "Domoticz konfigurieren"
-#define D_CONFIGURE_LOGGING "Logging konfigurieren"
-#define D_CONFIGURE_OTHER "Sonstige Konfiguration"
-#define D_CONFIRM_RESET_CONFIGURATION "Zurücksetzen der Konfiguration bestätigen"
-#define D_RESET_CONFIGURATION "Konfiguration zurücksetzen"
-#define D_BACKUP_CONFIGURATION "Konfiguration sichern"
-#define D_RESTORE_CONFIGURATION "Konfiguration wiederherstellen"
-#define D_MAIN_MENU "Hauptmenü"
-
-#define D_MODULE_PARAMETERS "Geräte-Einstellungen"
-#define D_MODULE_TYPE "Gerätetyp"
-#define D_PULLUP_ENABLE "Kein Taster/Schalter Pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "serieller Eingang [serial in]"
-#define D_SERIAL_OUT "serieller Ausgang [serial out]"
-
-#define D_WIFI_PARAMETERS "WLAN-Einstellungen"
-#define D_SCAN_FOR_WIFI_NETWORKS "WLAN-Netzwerk suchen und auswählen"
-#define D_SCAN_DONE "Suche abgeschlossen"
-#define D_NO_NETWORKS_FOUND "Keine Netzwerke gefunden"
-#define D_REFRESH_TO_SCAN_AGAIN "Aktualisieren, um erneut zu suchen"
-#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplizieren"
-#define D_SKIPPING_LOW_QUALITY "überspringe wegen niedriger Qualität"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA-PSK"
-#define D_WPA2_PSK "WPA2-PSK"
-#define D_AP1_SSID "WLAN 1 - SSID"
-#define D_AP1_PASSWORD "WLAN 1 - Passwort"
-#define D_AP2_SSID "WLAN 2 - SSID"
-#define D_AP2_PASSWORD "WLAN 2 - Passwort"
-
-#define D_MQTT_PARAMETERS "MQTT-Einstellungen"
-#define D_CLIENT "client"
-#define D_FULL_TOPIC "full topic"
-
-#define D_LOGGING_PARAMETERS "Logging-Einstellungen"
-#define D_SERIAL_LOG_LEVEL "Seriell-Log Level"
-#define D_MQTT_LOG_LEVEL "Mqtt-Log Level"
-#define D_WEB_LOG_LEVEL "Web-Log Level"
-#define D_SYS_LOG_LEVEL "Sys-Log Level"
-#define D_MORE_DEBUG "Mehr Details"
-#define D_SYSLOG_HOST "Sys-Log Host"
-#define D_SYSLOG_PORT "Sys-Log Port"
-#define D_TELEMETRY_PERIOD "Telemetrieperiode"
-
-#define D_OTHER_PARAMETERS "Sonstige Einstellungen"
-#define D_TEMPLATE "Vorlage"
-#define D_ACTIVATE "Aktivieren"
-#define D_WEB_ADMIN_PASSWORD "Passwort für Web Oberfläche"
-#define D_MQTT_ENABLE "MQTT aktivieren"
-#define D_FRIENDLY_NAME "Name [friendly name]"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "Einzelnes Gerät"
-#define D_MULTI_DEVICE "Mehrfachgerät"
-
-#define D_CONFIGURE_TEMPLATE "Vorlage konfigurieren"
-#define D_TEMPLATE_PARAMETERS "Vorlage Parameter"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "basiert auf"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Konfiguration speichern"
-#define D_CONFIGURATION_SAVED "Konfiguration gespeichert"
-#define D_CONFIGURATION_RESET "Konfiguration zurücksetzen"
-
-#define D_PROGRAM_VERSION "Tasmota Version"
-#define D_BUILD_DATE_AND_TIME "Build-Datum & -Uhrzeit"
-#define D_CORE_AND_SDK_VERSION "Core-/SDK-Version"
-#define D_FLASH_WRITE_COUNT "Anz. Flash Schreibzugriffe"
-#define D_MAC_ADDRESS "MAC-Adresse"
-#define D_MQTT_HOST "MQTT Host"
-#define D_MQTT_PORT "MQTT Port"
-#define D_MQTT_CLIENT "MQTT Client"
-#define D_MQTT_USER "MQTT Benutzer"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
-#define D_MDNS_DISCOVERY "mDNS-Ermittlung"
-#define D_MDNS_ADVERTISE "mDNS-Bekanntmachung"
-#define D_ESP_CHIP_ID "ESP Chip ID"
-#define D_FLASH_CHIP_ID "Flash Chip ID"
-#define D_FLASH_CHIP_SIZE "Realer Flash Speicher"
-#define D_FREE_PROGRAM_SPACE "Verf. Flash Speicher"
-
-#define D_UPGRADE_BY_WEBSERVER "Update über Web-Server"
-#define D_OTA_URL "OTA-URL"
-#define D_START_UPGRADE "Update starten"
-#define D_UPGRADE_BY_FILE_UPLOAD "Update Datei hochladen"
-#define D_UPLOAD_STARTED "Upload gestartet"
-#define D_UPGRADE_STARTED "Update gestartet"
-#define D_UPLOAD_DONE "Upload abgeschlossen"
-#define D_UPLOAD_ERR_1 "Keine Datei ausgewählt"
-#define D_UPLOAD_ERR_2 "Ungenügend Speicherplatz"
-#define D_UPLOAD_ERR_3 "Magic Byte ist nicht 0xE9"
-#define D_UPLOAD_ERR_4 "Datei überschreitet vorhdn. Flashspeicher"
-#define D_UPLOAD_ERR_5 "Upload Buffer Vergleich weicht ab"
-#define D_UPLOAD_ERR_6 "Upload fehlgeschlagen. Aktiviere logging 3"
-#define D_UPLOAD_ERR_7 "Upload abgebrochen"
-#define D_UPLOAD_ERR_8 "Datei ungültig"
-#define D_UPLOAD_ERR_9 "Datei zu groß"
-#define D_UPLOAD_ERR_10 "RF Chip init fehlgeschlagen"
-#define D_UPLOAD_ERR_11 "RF Chip löschen fehlgeschlagen"
-#define D_UPLOAD_ERR_12 "RF Chip beschreiben fehlgeschlagen"
-#define D_UPLOAD_ERR_13 "RF Firmware ungültig"
-#define D_UPLOAD_ERROR_CODE "Upload Fehler Nummer"
-
-#define D_ENTER_COMMAND "Befehl eingeben"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Aktivere Web Log Level 2 falls Reaktion erwartet"
-#define D_NEED_USER_AND_PASSWORD "Benötige user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "TLS-Fingerabdruck wird verifiziert..."
-#define D_TLS_CONNECT_FAILED_TO "TLS-Verbindung fehlgeschlagen an"
-#define D_RETRY_IN "Wiederversuch in"
-#define D_VERIFIED "verifiziert mit Fingerabdruck"
-#define D_INSECURE "unsichere Verbindung aufgrund ungültigen Fingerabdrucks"
-#define D_CONNECT_FAILED_TO "Verbindung fehlgeschlagen aufgrund von"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast deaktiviert"
-#define D_MULTICAST_REJOINED "Multicast (wieder-)verbunden"
-#define D_MULTICAST_JOIN_FAILED "Multicast Verbindung fehlgeschlagen"
-#define D_FAILED_TO_SEND_RESPONSE "Antwort senden fehlgeschlagen"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo-Setup"
-#define D_RESPONSE_SENT "Antwort gesendet"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue-Setup"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue-API nicht implementiert"
-#define D_HUE_API "Hue-API"
-#define D_HUE_POST_ARGS "Hue POST-Argumente"
-#define D_3_RESPONSE_PACKETS_SENT "3 Antwortpakete gesendet"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz-Parameter"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Update Zeitplan"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Zeitplan konfigurieren"
-#define D_TIMER_PARAMETERS "Zeitplan-Einstellungen"
-#define D_TIMER_ENABLE "Zeitpläne aktivieren"
-#define D_TIMER_ARM "Aktiv"
-#define D_TIMER_TIME "Uhrzeit"
-#define D_TIMER_DAYS "Wochentage"
-#define D_TIMER_REPEAT "Wiederholen"
-#define D_TIMER_OUTPUT "Ausgang"
-#define D_TIMER_ACTION "Aktion"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX konfigurieren"
-#define D_KNX_PARAMETERS "KNX-Parameter"
-#define D_KNX_GENERAL_CONFIG "Allgemein"
-#define D_KNX_PHYSICAL_ADDRESS "Physikalische Adresse"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Muss einmalig im KNX-Netzwerk sein )"
-#define D_KNX_ENABLE "KNX aktivieren"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Daten zum Senden an Gruppenadresse"
-#define D_ADD "Hinzufügen"
-#define D_DELETE "Löschen"
-#define D_REPLY "Antworten"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppenadresse zum Emfang von Daten"
-#define D_RECEIVED_FROM "Empfangen von"
-#define D_KNX_COMMAND_WRITE "Schreiben"
-#define D_KNX_COMMAND_READ "Lesen"
-#define D_KNX_COMMAND_OTHER "Andere"
-#define D_SENT_TO "gesendet an"
-#define D_KNX_WARNING "Die Gruppenadresse (0/0/0) ist reserviert und kann nicht verwendet werden."
-#define D_KNX_ENHANCEMENT "Erweiterte Kommunikation"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energie heute"
-#define D_ENERGY_YESTERDAY "Energie gestern"
-#define D_ENERGY_TOTAL "Energie insgesamt"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Öffnen"
-#define D_CLOSE "Schliessen"
-#define D_DOMOTICZ_SHUTTER "Rollo"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Konfiguriere PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 Parameter"
-#define D_INVERT_PORTS "Invertiere Ports"
-#define D_DEVICE "Gerät"
-#define D_DEVICE_INPUT "Eingang"
-#define D_DEVICE_OUTPUT "Ausgang"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor beschäftigt"
-#define D_SENSOR_CRC_ERROR "Sensor CRC-Fehler"
-#define D_SENSORS_FOUND "Sensor gefunden"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Timeout während Warten auf"
-#define D_START_SIGNAL_LOW "Startausschlag niedrig"
-#define D_START_SIGNAL_HIGH "Startausschlag hoch"
-#define D_PULSE "Puls"
-#define D_CHECKSUM_FAILURE "Checksum-Fehler"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor hat ACK-Befehl nicht ausgeführt"
-#define D_SHT1X_FOUND "SHT1X gefunden"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Partikel"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Beschl. X-Achse"
-#define D_AY_AXIS "Beschl. Y-Achse"
-#define D_AZ_AXIS "Beschl. Z-Achse"
-#define D_GX_AXIS "Gyroskop X-Achse"
-#define D_GY_AXIS "Gyroskop Y-Achse"
-#define D_GZ_AXIS "Gyroskop Z-Achse"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Wägegut entfernen"
-#define D_HX_CAL_REFERENCE "Referenzgewicht auflegen"
-#define D_HX_CAL_DONE "kalibriert"
-#define D_HX_CAL_FAIL "Kalibrierung fehlgeschlagen"
-#define D_RESET_HX711 "Tara"
-#define D_CONFIGURE_HX711 "Tara Wert?"
-#define D_HX711_PARAMETERS "Skala Parameter"
-#define D_ITEM_WEIGHT "Wägegut Gewicht"
-#define D_REFERENCE_WEIGHT "Referenz Gewicht"
-#define D_CALIBRATE "kalibriert"
-#define D_CALIBRATION "Kalibrierung"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Wind Richtung"
-#define D_TX20_WIND_SPEED "Windgeschwindigkeit"
-#define D_TX20_WIND_SPEED_AVG "Ø Windgeschwindigkeit"
-#define D_TX20_WIND_SPEED_MAX "max Windgeschwindigkeit"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "O"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "h"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h"
-#define D_UNIT_KILOOHM "kΩ"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
-#define D_UNIT_MICROMETER "µm"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "s"
-#define D_UNIT_SECTORS "Sektoren"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phasenwinkel"
-#define D_IMPORT_ACTIVE "Importiere Wirk"
-#define D_EXPORT_ACTIVE "Exportiere Wirk"
-#define D_IMPORT_REACTIVE "Importiere Blind"
-#define D_EXPORT_REACTIVE "Exportiere Blind"
-#define D_TOTAL_REACTIVE "Total Blind"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Grad"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Spannung"
-#define D_PV1_CURRENT "PV1 Strom"
-#define D_PV1_POWER "PV1 Leistung"
-#define D_PV2_VOLTAGE "PV2 Spannung"
-#define D_PV2_CURRENT "PV2 Strom"
-#define D_PV2_POWER "PV2 Leistung"
-#define D_SOLAR_POWER "solare Leistung"
-#define D_INVERTER_POWER "Inverter Leistung"
-#define D_STATUS "Status"
-#define D_WAITING "warten"
-#define D_CHECKING "prüfen"
-#define D_WORKING "arbeitet"
-#define D_FAILURE "Fehler"
-#define D_SOLAX_ERROR_0 "Kein Fehler Code"
-#define D_SOLAX_ERROR_1 "Fehler im Solarstromnetz"
-#define D_SOLAX_ERROR_2 "Spannungsfehler im Solarstromnetz"
-#define D_SOLAX_ERROR_3 "Frequenzfehler im Solarstromnetz"
-#define D_SOLAX_ERROR_4 "Pv Spannungsfehler"
-#define D_SOLAX_ERROR_5 "Isolationsfehler"
-#define D_SOLAX_ERROR_6 "Übertemperatur"
-#define D_SOLAX_ERROR_7 "Lüfterfehler"
-#define D_SOLAX_ERROR_8 "sonstiger Fehler"
-
-#endif // _LANGUAGE_DE_DE_H_
+/*
+ de-DE.h - localization for German - Germany for Tasmota
+
+ Copyright (C) 2019 VinceMasuka
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_DE_DE_H_
+#define _LANGUAGE_DE_DE_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.6.0.21
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1031
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "de"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "."
+#define D_MONTH_DAY_SEPARATOR "."
+#define D_DATE_TIME_SEPARATOR " "
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "So Mo Di Mi Do Fr Sa "
+#define D_MONTH3LIST "JanFebMärAprMaiJunJulAugSepOktNovDez"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Luftqualität"
+#define D_AP "AP" // Access Point
+#define D_AS "als"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blinken"
+#define D_BLINKOFF "BlinkenAus"
+#define D_BOOT_COUNT "Anzahl Startvorgänge"
+#define D_BRIGHTLIGHT "hell"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Knopf"
+#define D_BY "von" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Kanal"
+#define D_CO2 "CO²"
+#define D_CODE "code" // Button code
+#define D_COLDLIGHT "kalt"
+#define D_COMMAND "Befehl"
+#define D_CONNECTED "verbunden"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "zählen"
+#define D_COUNTER "Zähler"
+#define D_CURRENT "Strom" // As in Voltage and Current
+#define D_DATA "Daten"
+#define D_DARKLIGHT "dunkel"
+#define D_DEBUG "debug"
+#define D_DISABLED "deaktiviert"
+#define D_DISTANCE "Abstand"
+#define D_DNS_SERVER "DNS-Server"
+#define D_DONE "erledigt"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulation"
+#define D_ENABLED "aktiviert"
+#define D_ERASE "löschen"
+#define D_ERROR "Fehler"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "fehlgeschlagen"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback-Topic"
+#define D_FALSE "falsch"
+#define D_FILE "Datei"
+#define D_FLOW_RATE "Durchflussmenge"
+#define D_FREE_MEMORY "Freier Arbeitsspeicher"
+#define D_FREQUENCY "Frequenz"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Gruppe"
+#define D_HOST "Host"
+#define D_HOSTNAME "Hostname"
+#define D_HUMIDITY "Feuchtigkeit"
+#define D_ILLUMINANCE "Beleuchtungsintensität"
+#define D_IMMEDIATE "direkt" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infrarot"
+#define D_INITIALIZED "initialisiert"
+#define D_IP_ADDRESS "IP-Adresse"
+#define D_LIGHT "Licht"
+#define D_LWT "LWT"
+#define D_MODULE "Modul"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "Mehrfachdruck"
+#define D_NOISE "Lautstärke"
+#define D_NONE "keine"
+#define D_OFF "aus"
+#define D_OFFLINE "Offline"
+#define D_OK "OK"
+#define D_ON "an"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Passwort"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Leistungsfaktor"
+#define D_POWERUSAGE "Leistung"
+#define D_POWERUSAGE_ACTIVE "Wirkleistung"
+#define D_POWERUSAGE_APPARENT "Scheinleistung"
+#define D_POWERUSAGE_REACTIVE "Blindleistung"
+#define D_PRESSURE "Luftdruck"
+#define D_PRESSUREATSEALEVEL "Luftdruck auf Meereshöhe"
+#define D_PROGRAM_FLASH_SIZE "Ges. Flash Speicher"
+#define D_PROGRAM_SIZE "Ben. Flash Speicher"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Regen"
+#define D_RECEIVED "erhalten"
+#define D_RESTART "Neustart"
+#define D_RESTARTING "starte neu"
+#define D_RESTART_REASON "Grund für Neustart"
+#define D_RESTORE "Wiederherstellung"
+#define D_RETAINED "beibehalten"
+#define D_RULE "Regel"
+#define D_SAVE "Speichern"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSID"
+#define D_START "Start"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Subnetzmaske"
+#define D_SUBSCRIBE_TO "abonniere"
+#define D_UNSUBSCRIBE_FROM "löse abo. von"
+#define D_SUCCESSFUL "erfolgreich"
+#define D_SUNRISE "Sonnenaufgang"
+#define D_SUNSET "Sonnenuntergang"
+#define D_TEMPERATURE "Temperatur"
+#define D_TO "zu"
+#define D_TOGGLE "An/Aus"
+#define D_TOPIC "topic"
+#define D_TOTAL_USAGE "Gesamtverbrauch"
+#define D_TRANSMIT "Übertragen"
+#define D_TRUE "wahr"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "update"
+#define D_UPLOAD "Upload"
+#define D_UPTIME "Laufzeit"
+#define D_USER "Benutzer"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV-Index"
+#define D_UV_INDEX_1 "Niedrig"
+#define D_UV_INDEX_2 "Mittel"
+#define D_UV_INDEX_3 "Hoch"
+#define D_UV_INDEX_4 "Intensiv"
+#define D_UV_INDEX_5 "Gefährlich"
+#define D_UV_INDEX_6 "Schädlich"
+#define D_UV_INDEX_7 "Messwert!"
+#define D_UV_LEVEL "UV-Level"
+#define D_UV_POWER "UV Intensität"
+#define D_VERSION "Version"
+#define D_VOLTAGE "Spannung"
+#define D_WEIGHT "Gewicht"
+#define D_WARMLIGHT "warm"
+#define D_WEB_SERVER "Web-Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ACHTUNG: Diese Version unterstützt keine persistenten Einstellungen"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serielles Logging deaktiviert"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog-Logging aktiviert"
+
+#define D_SET_BAUDRATE_TO "Setze Baudrate auf"
+#define D_RECEIVED_TOPIC "empfangenes topic"
+#define D_DATA_SIZE "Datengröße"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Schleife blockiert."
+#define D_WPS_FAILED_WITH_STATUS "WPS fehlgeschlagen mit Status"
+#define D_ACTIVE_FOR_3_MINUTES "aktiv für 3 Minuten"
+#define D_FAILED_TO_START "Starten fehlgeschlagen"
+#define D_PATCH_ISSUE_2186 "Repariere Problem #2186"
+#define D_CONNECTING_TO_AP "verbinden mit AP"
+#define D_IN_MODE "in Modus"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Verbindung fehlgeschlagen, da keine IP-Adresse zugeteilt wurde"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Verbindung fehlgeschlagen, da AP nicht erreicht werden konnte"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbindung fehlgeschlagen, da das Passwort falsch ist"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Verbindung fehlgeschlagen, da der AP nicht antwortet (timeout)"
+#define D_ATTEMPTING_CONNECTION "Verbindungsversuch..."
+#define D_CHECKING_CONNECTION "Prüfe Verbindung..."
+#define D_QUERY_DONE "Suchanfrage abgeschlossen. MQTT-Services gefunden"
+#define D_MQTT_SERVICE_FOUND "MQTT-Service gefunden bei"
+#define D_FOUND_AT "gefunden bei"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog-Host nicht gefunden"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "in Flash gespeichert am"
+#define D_LOADED_FROM_FLASH_AT "aus Flash geladen am"
+#define D_USE_DEFAULTS "Standard verwenden"
+#define D_ERASED_SECTOR "gelöschter Sektor"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "JavaScript aktivieren um Tasmota benutzen zu können"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMUM-Firmware
bitte upgraden"
+#define D_WEBSERVER_ACTIVE_ON "Web-Server aktiv bei"
+#define D_WITH_IP_ADDRESS "mit IP-Adresse"
+#define D_WEBSERVER_STOPPED "Web-Server angehalten"
+#define D_FILE_NOT_FOUND "Datei nicht gefunden"
+#define D_REDIRECTED "umgeleitet zu captive portal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "WLAN-Manager AccessPoint gesetzt und behält Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "WLAN-Manager AccessPoint gesetzt"
+#define D_TRYING_TO_CONNECT "Versuche Gerät mit Netzwerk zu verbinden"
+
+#define D_RESTART_IN "Neustart in"
+#define D_SECONDS "Sekunden"
+#define D_DEVICE_WILL_RESTART "Gerät wird jetzt neu gestartet"
+#define D_BUTTON_TOGGLE "An/Aus"
+#define D_CONFIGURATION "Einstellungen"
+#define D_INFORMATION "Informationen"
+#define D_FIRMWARE_UPGRADE "Firmware Update"
+#define D_CONSOLE "Konsole"
+#define D_CONFIRM_RESTART "Wirklich neustarten?"
+
+#define D_CONFIGURE_MODULE "Gerät konfigurieren"
+#define D_CONFIGURE_WIFI "WLAN konfigurieren"
+#define D_CONFIGURE_MQTT "MQTT konfigurieren"
+#define D_CONFIGURE_DOMOTICZ "Domoticz konfigurieren"
+#define D_CONFIGURE_LOGGING "Logging konfigurieren"
+#define D_CONFIGURE_OTHER "Sonstige Konfiguration"
+#define D_CONFIRM_RESET_CONFIGURATION "Zurücksetzen der Konfiguration bestätigen"
+#define D_RESET_CONFIGURATION "Konfiguration zurücksetzen"
+#define D_BACKUP_CONFIGURATION "Konfiguration sichern"
+#define D_RESTORE_CONFIGURATION "Konfiguration wiederherstellen"
+#define D_MAIN_MENU "Hauptmenü"
+
+#define D_MODULE_PARAMETERS "Geräte-Einstellungen"
+#define D_MODULE_TYPE "Gerätetyp"
+#define D_PULLUP_ENABLE "Kein Taster/Schalter Pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "serieller Eingang [serial in]"
+#define D_SERIAL_OUT "serieller Ausgang [serial out]"
+
+#define D_WIFI_PARAMETERS "WLAN-Einstellungen"
+#define D_SCAN_FOR_WIFI_NETWORKS "WLAN-Netzwerk suchen und auswählen"
+#define D_SCAN_DONE "Suche abgeschlossen"
+#define D_NO_NETWORKS_FOUND "Keine Netzwerke gefunden"
+#define D_REFRESH_TO_SCAN_AGAIN "Aktualisieren, um erneut zu suchen"
+#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplizieren"
+#define D_SKIPPING_LOW_QUALITY "überspringe wegen niedriger Qualität"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA-PSK"
+#define D_WPA2_PSK "WPA2-PSK"
+#define D_AP1_SSID "WLAN 1 - SSID"
+#define D_AP1_PASSWORD "WLAN 1 - Passwort"
+#define D_AP2_SSID "WLAN 2 - SSID"
+#define D_AP2_PASSWORD "WLAN 2 - Passwort"
+
+#define D_MQTT_PARAMETERS "MQTT-Einstellungen"
+#define D_CLIENT "client"
+#define D_FULL_TOPIC "full topic"
+
+#define D_LOGGING_PARAMETERS "Logging-Einstellungen"
+#define D_SERIAL_LOG_LEVEL "Seriell-Log Level"
+#define D_MQTT_LOG_LEVEL "Mqtt-Log Level"
+#define D_WEB_LOG_LEVEL "Web-Log Level"
+#define D_SYS_LOG_LEVEL "Sys-Log Level"
+#define D_MORE_DEBUG "Mehr Details"
+#define D_SYSLOG_HOST "Sys-Log Host"
+#define D_SYSLOG_PORT "Sys-Log Port"
+#define D_TELEMETRY_PERIOD "Telemetrieperiode"
+
+#define D_OTHER_PARAMETERS "Sonstige Einstellungen"
+#define D_TEMPLATE "Vorlage"
+#define D_ACTIVATE "Aktivieren"
+#define D_WEB_ADMIN_PASSWORD "Passwort für Web Oberfläche"
+#define D_MQTT_ENABLE "MQTT aktivieren"
+#define D_FRIENDLY_NAME "Name [friendly name]"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "Einzelnes Gerät"
+#define D_MULTI_DEVICE "Mehrfachgerät"
+
+#define D_CONFIGURE_TEMPLATE "Vorlage konfigurieren"
+#define D_TEMPLATE_PARAMETERS "Vorlage Parameter"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "basiert auf"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Konfiguration speichern"
+#define D_CONFIGURATION_SAVED "Konfiguration gespeichert"
+#define D_CONFIGURATION_RESET "Konfiguration zurücksetzen"
+
+#define D_PROGRAM_VERSION "Tasmota Version"
+#define D_BUILD_DATE_AND_TIME "Build-Datum & -Uhrzeit"
+#define D_CORE_AND_SDK_VERSION "Core-/SDK-Version"
+#define D_FLASH_WRITE_COUNT "Anz. Flash Schreibzugriffe"
+#define D_MAC_ADDRESS "MAC-Adresse"
+#define D_MQTT_HOST "MQTT Host"
+#define D_MQTT_PORT "MQTT Port"
+#define D_MQTT_CLIENT "MQTT Client"
+#define D_MQTT_USER "MQTT Benutzer"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
+#define D_MDNS_DISCOVERY "mDNS-Ermittlung"
+#define D_MDNS_ADVERTISE "mDNS-Bekanntmachung"
+#define D_ESP_CHIP_ID "ESP Chip ID"
+#define D_FLASH_CHIP_ID "Flash Chip ID"
+#define D_FLASH_CHIP_SIZE "Realer Flash Speicher"
+#define D_FREE_PROGRAM_SPACE "Verf. Flash Speicher"
+
+#define D_UPGRADE_BY_WEBSERVER "Update über Web-Server"
+#define D_OTA_URL "OTA-URL"
+#define D_START_UPGRADE "Update starten"
+#define D_UPGRADE_BY_FILE_UPLOAD "Update Datei hochladen"
+#define D_UPLOAD_STARTED "Upload gestartet"
+#define D_UPGRADE_STARTED "Update gestartet"
+#define D_UPLOAD_DONE "Upload abgeschlossen"
+#define D_UPLOAD_ERR_1 "Keine Datei ausgewählt"
+#define D_UPLOAD_ERR_2 "Ungenügend Speicherplatz"
+#define D_UPLOAD_ERR_3 "Magic Byte ist nicht 0xE9"
+#define D_UPLOAD_ERR_4 "Datei überschreitet vorhdn. Flashspeicher"
+#define D_UPLOAD_ERR_5 "Upload Buffer Vergleich weicht ab"
+#define D_UPLOAD_ERR_6 "Upload fehlgeschlagen. Aktiviere logging 3"
+#define D_UPLOAD_ERR_7 "Upload abgebrochen"
+#define D_UPLOAD_ERR_8 "Datei ungültig"
+#define D_UPLOAD_ERR_9 "Datei zu groß"
+#define D_UPLOAD_ERR_10 "RF Chip init fehlgeschlagen"
+#define D_UPLOAD_ERR_11 "RF Chip löschen fehlgeschlagen"
+#define D_UPLOAD_ERR_12 "RF Chip beschreiben fehlgeschlagen"
+#define D_UPLOAD_ERR_13 "RF Firmware ungültig"
+#define D_UPLOAD_ERROR_CODE "Upload Fehler Nummer"
+
+#define D_ENTER_COMMAND "Befehl eingeben"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Aktivere Web Log Level 2 falls Reaktion erwartet"
+#define D_NEED_USER_AND_PASSWORD "Benötige user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "TLS-Fingerabdruck wird verifiziert..."
+#define D_TLS_CONNECT_FAILED_TO "TLS-Verbindung fehlgeschlagen an"
+#define D_RETRY_IN "Wiederversuch in"
+#define D_VERIFIED "verifiziert mit Fingerabdruck"
+#define D_INSECURE "unsichere Verbindung aufgrund ungültigen Fingerabdrucks"
+#define D_CONNECT_FAILED_TO "Verbindung fehlgeschlagen aufgrund von"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast deaktiviert"
+#define D_MULTICAST_REJOINED "Multicast (wieder-)verbunden"
+#define D_MULTICAST_JOIN_FAILED "Multicast Verbindung fehlgeschlagen"
+#define D_FAILED_TO_SEND_RESPONSE "Antwort senden fehlgeschlagen"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo-Setup"
+#define D_RESPONSE_SENT "Antwort gesendet"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue-Setup"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue-API nicht implementiert"
+#define D_HUE_API "Hue-API"
+#define D_HUE_POST_ARGS "Hue POST-Argumente"
+#define D_3_RESPONSE_PACKETS_SENT "3 Antwortpakete gesendet"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz-Parameter"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Update Zeitplan"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Zeitplan konfigurieren"
+#define D_TIMER_PARAMETERS "Zeitplan-Einstellungen"
+#define D_TIMER_ENABLE "Zeitpläne aktivieren"
+#define D_TIMER_ARM "Aktiv"
+#define D_TIMER_TIME "Uhrzeit"
+#define D_TIMER_DAYS "Wochentage"
+#define D_TIMER_REPEAT "Wiederholen"
+#define D_TIMER_OUTPUT "Ausgang"
+#define D_TIMER_ACTION "Aktion"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX konfigurieren"
+#define D_KNX_PARAMETERS "KNX-Parameter"
+#define D_KNX_GENERAL_CONFIG "Allgemein"
+#define D_KNX_PHYSICAL_ADDRESS "Physikalische Adresse"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Muss einmalig im KNX-Netzwerk sein )"
+#define D_KNX_ENABLE "KNX aktivieren"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Daten zum Senden an Gruppenadresse"
+#define D_ADD "Hinzufügen"
+#define D_DELETE "Löschen"
+#define D_REPLY "Antworten"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppenadresse zum Emfang von Daten"
+#define D_RECEIVED_FROM "Empfangen von"
+#define D_KNX_COMMAND_WRITE "Schreiben"
+#define D_KNX_COMMAND_READ "Lesen"
+#define D_KNX_COMMAND_OTHER "Andere"
+#define D_SENT_TO "gesendet an"
+#define D_KNX_WARNING "Die Gruppenadresse (0/0/0) ist reserviert und kann nicht verwendet werden."
+#define D_KNX_ENHANCEMENT "Erweiterte Kommunikation"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energie heute"
+#define D_ENERGY_YESTERDAY "Energie gestern"
+#define D_ENERGY_TOTAL "Energie insgesamt"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Öffnen"
+#define D_CLOSE "Schliessen"
+#define D_DOMOTICZ_SHUTTER "Rollo"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Konfiguriere PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 Parameter"
+#define D_INVERT_PORTS "Invertiere Ports"
+#define D_DEVICE "Gerät"
+#define D_DEVICE_INPUT "Eingang"
+#define D_DEVICE_OUTPUT "Ausgang"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor beschäftigt"
+#define D_SENSOR_CRC_ERROR "Sensor CRC-Fehler"
+#define D_SENSORS_FOUND "Sensor gefunden"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Timeout während Warten auf"
+#define D_START_SIGNAL_LOW "Startausschlag niedrig"
+#define D_START_SIGNAL_HIGH "Startausschlag hoch"
+#define D_PULSE "Puls"
+#define D_CHECKSUM_FAILURE "Checksum-Fehler"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor hat ACK-Befehl nicht ausgeführt"
+#define D_SHT1X_FOUND "SHT1X gefunden"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Partikel"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Beschl. X-Achse"
+#define D_AY_AXIS "Beschl. Y-Achse"
+#define D_AZ_AXIS "Beschl. Z-Achse"
+#define D_GX_AXIS "Gyroskop X-Achse"
+#define D_GY_AXIS "Gyroskop Y-Achse"
+#define D_GZ_AXIS "Gyroskop Z-Achse"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Wägegut entfernen"
+#define D_HX_CAL_REFERENCE "Referenzgewicht auflegen"
+#define D_HX_CAL_DONE "kalibriert"
+#define D_HX_CAL_FAIL "Kalibrierung fehlgeschlagen"
+#define D_RESET_HX711 "Tara"
+#define D_CONFIGURE_HX711 "Tara Wert?"
+#define D_HX711_PARAMETERS "Skala Parameter"
+#define D_ITEM_WEIGHT "Wägegut Gewicht"
+#define D_REFERENCE_WEIGHT "Referenz Gewicht"
+#define D_CALIBRATE "kalibriert"
+#define D_CALIBRATION "Kalibrierung"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Wind Richtung"
+#define D_TX20_WIND_SPEED "Windgeschwindigkeit"
+#define D_TX20_WIND_SPEED_AVG "Ø Windgeschwindigkeit"
+#define D_TX20_WIND_SPEED_MAX "max Windgeschwindigkeit"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "O"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "h"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h"
+#define D_UNIT_KILOOHM "kΩ"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
+#define D_UNIT_MICROMETER "µm"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "s"
+#define D_UNIT_SECTORS "Sektoren"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phasenwinkel"
+#define D_IMPORT_ACTIVE "Importiere Wirk"
+#define D_EXPORT_ACTIVE "Exportiere Wirk"
+#define D_IMPORT_REACTIVE "Importiere Blind"
+#define D_EXPORT_REACTIVE "Exportiere Blind"
+#define D_TOTAL_REACTIVE "Total Blind"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Grad"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Spannung"
+#define D_PV1_CURRENT "PV1 Strom"
+#define D_PV1_POWER "PV1 Leistung"
+#define D_PV2_VOLTAGE "PV2 Spannung"
+#define D_PV2_CURRENT "PV2 Strom"
+#define D_PV2_POWER "PV2 Leistung"
+#define D_SOLAR_POWER "solare Leistung"
+#define D_INVERTER_POWER "Inverter Leistung"
+#define D_STATUS "Status"
+#define D_WAITING "warten"
+#define D_CHECKING "prüfen"
+#define D_WORKING "arbeitet"
+#define D_FAILURE "Fehler"
+#define D_SOLAX_ERROR_0 "Kein Fehler Code"
+#define D_SOLAX_ERROR_1 "Fehler im Solarstromnetz"
+#define D_SOLAX_ERROR_2 "Spannungsfehler im Solarstromnetz"
+#define D_SOLAX_ERROR_3 "Frequenzfehler im Solarstromnetz"
+#define D_SOLAX_ERROR_4 "Pv Spannungsfehler"
+#define D_SOLAX_ERROR_5 "Isolationsfehler"
+#define D_SOLAX_ERROR_6 "Übertemperatur"
+#define D_SOLAX_ERROR_7 "Lüfterfehler"
+#define D_SOLAX_ERROR_8 "sonstiger Fehler"
+
+#endif // _LANGUAGE_DE_DE_H_
diff --git a/tasmota/language/el-GR.h b/tasmota/language/el-GR.h
index f8b9c9614..2ae0bef38 100644
--- a/tasmota/language/el-GR.h
+++ b/tasmota/language/el-GR.h
@@ -1,701 +1,703 @@
-/*
- el-GR.h - localization for Greek - Greece for Tasmota
-
- Copyright (C) 2019 Theo Arends, translated by Nick Galfas
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_EL_GR_H_
-#define _LANGUAGE_EL_GR_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.5.0
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1032
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "el"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "ΚυρΔευΤριΤετΠεμΠαρΣαβ"
-#define D_MONTH3LIST "ΙανΦεβΜαρΑπρΜαϊΙονΙολΑυγΣεπΟκτΝοεΔεκ"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Διαχειριστής"
-#define D_AIR_QUALITY "Ποιότητα αέρα"
-#define D_AP "AP" // Access Point
-#define D_AS "ως"
-#define D_AUTO "ΑΥΤΟΜΑΤΟ"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Καταμέτρηση εκκινήσεων"
-#define D_BRIGHTLIGHT "Φωτεινό"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Πλήκτρο"
-#define D_BY "από" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Κελσίου"
-#define D_CHANNEL "Κανάλι"
-#define D_CO2 "Διοξείδιο του άνθρακα"
-#define D_CODE "κώδικας" // Button code
-#define D_COLDLIGHT "Ψυχρό"
-#define D_COMMAND "Εντολή"
-#define D_CONNECTED "Συνδεδεμένο"
-#define D_COUNT "Μέτρηση"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNTER "Μετρητής"
-#define D_CURRENT "Ένταση" // As in Voltage and Current
-#define D_DATA "Δεδομένα"
-#define D_DARKLIGHT "Σκοτεινό"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Ανενεργό"
-#define D_DISTANCE "Απόσταση"
-#define D_DNS_SERVER "Διακομιστής DNS"
-#define D_DONE "Ολοκληρώθηκε"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Εξομoίωση"
-#define D_ENABLED "Ενεργό"
-#define D_ERASE "Διαγραφή"
-#define D_ERROR "Σφάλμα"
-#define D_FAHRENHEIT "Φαρενάιτ"
-#define D_FAILED "Απέτυχε"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback Topic"
-#define D_FALSE "Ψευδές"
-#define D_FILE "Αρχείο"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Ελεύθερη μνήμη"
-#define D_FREQUENCY "Συχνότητα"
-#define D_GAS "Αέριο"
-#define D_GATEWAY "Πύλη"
-#define D_GROUP "Ομάδα"
-#define D_HOST "Host"
-#define D_HOSTNAME "Hostname"
-#define D_HUMIDITY "Υγρασία"
-#define D_ILLUMINANCE "Φωτεινότητα"
-#define D_IMMEDIATE "άμεσο" // Button immediate
-#define D_INDEX "Κατάλογος"
-#define D_INFO "Πληροφορίες"
-#define D_INFRARED "Υπέρυθρο"
-#define D_INITIALIZED "Αρχικοποιήθηκε"
-#define D_IP_ADDRESS "Διεύθυνση IP"
-#define D_LIGHT "Φως"
-#define D_LWT "LWT"
-#define D_MODULE "Μονάδα"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "ανίχνευση για πολλαπλά πατήματα"
-#define D_NOISE "Θόρυβος"
-#define D_NONE "Κανένα"
-#define D_OFF "Off"
-#define D_OFFLINE "Offline"
-#define D_OK "Ok"
-#define D_ON "On"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Κωδικός"
-#define D_PORT "Θύρα"
-#define D_POWER_FACTOR "Συντελεστής Ισχύος"
-#define D_POWERUSAGE "Ισχύς"
-#define D_POWERUSAGE_ACTIVE "Ενεργός ισχύς"
-#define D_POWERUSAGE_APPARENT "Φαινόμενη ισχύς"
-#define D_POWERUSAGE_REACTIVE "Άεργη ισχύς"
-#define D_PRESSURE "Πίεση"
-#define D_PRESSUREATSEALEVEL "Πίεση στo επίπεδο θάλασσας"
-#define D_PROGRAM_FLASH_SIZE "Μέγεθος προγράμματος στη Flash"
-#define D_PROGRAM_SIZE "Μέγεθος προγράμματος"
-#define D_PROJECT "Έργο"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Ελήφθη"
-#define D_RESTART "Επανεκκίνηση"
-#define D_RESTARTING "Επανεκκινεί"
-#define D_RESTART_REASON "Αιτία επανεκκίνησης"
-#define D_RESTORE "επαναφορά"
-#define D_RETAINED "διακράτηση"
-#define D_RULE "Κανόνας"
-#define D_SAVE "Αποθήκευση"
-#define D_SENSOR "Αισθητήρας"
-#define D_SSID "SSId"
-#define D_START "Εκκίνηση"
-#define D_STD_TIME "STD"
-#define D_STOP "Τερματισμός"
-#define D_SUBNET_MASK "Μάσκα υποδικτύου"
-#define D_SUBSCRIBE_TO "Εγγραφή στο"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Επιτυχές"
-#define D_SUNRISE "Σούρουπο"
-#define D_SUNSET "Ηλιοβασίλεμα"
-#define D_TEMPERATURE "Θερμοκρασία"
-#define D_TO "έως"
-#define D_TOGGLE "Εναλλαγή"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Μετάδοση"
-#define D_TRUE "Αληθές"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "αναβάθμιση"
-#define D_UPLOAD "Ανέβασμα"
-#define D_UPTIME "Χρόνος λειτουργίας"
-#define D_USER "Χρήστης"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Δείκτης UV"
-#define D_UV_INDEX_1 "Χαμηλό"
-#define D_UV_INDEX_2 "Μέτριο"
-#define D_UV_INDEX_3 "Υψηλό"
-#define D_UV_INDEX_4 "Κίνδυνος"
-#define D_UV_INDEX_5 "Έγκαυμα L1/2"
-#define D_UV_INDEX_6 "Έγκαυμα L3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "Επίπεδο UV"
-#define D_UV_POWER "Ένταση UV"
-#define D_VERSION "Έκδοση"
-#define D_VOLTAGE "Τάση"
-#define D_WEIGHT "Βάρος"
-#define D_WARMLIGHT "Θερμό"
-#define D_WEB_SERVER "Διακομιστής Web"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ΠΡΟΕΙΔΟΠΟΙΗΣΗ Αυτή η έκδοση δεν αποθηκεύει τις ρυθμίσεις"
-#define D_LEVEL_10 "επίπεδο 1-0"
-#define D_LEVEL_01 "επίπεδο 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Η καταγραφή σειριακής θύρας είναι απενεργοποιημένη"
-#define D_SYSLOG_LOGGING_REENABLED "Η καταγραφή Syslog επαναενεργοποιήθηκε"
-
-#define D_SET_BAUDRATE_TO "Ορισμός Baudrate σε"
-#define D_RECEIVED_TOPIC "Received Topic"
-#define D_DATA_SIZE "Μέγεθος δεδομένων"
-#define D_ANALOG_INPUT "Αναλογικό"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "Το WPSconfig ΑΠΕΤΥΧΕ με status"
-#define D_ACTIVE_FOR_3_MINUTES "ενεργό για 3 λεπτά"
-#define D_FAILED_TO_START "απέτυχε να εκκινήσει"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "Συνδέεται στο AP"
-#define D_IN_MODE "σε mode"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Αποτυχία σύνδεσης, δεν απονεμήθηκε διεύθυνση IP"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Αποτυχία σύνδεσης, δεν ανταποκρίνεται το AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Αποτυχία σύνδεσης, λάθος κωδικός για το AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Αποτυχία σύνδεσης, λήξη ορίου απόκρισης από το AP"
-#define D_ATTEMPTING_CONNECTION "Προσπάθεια για σύνδεση..."
-#define D_CHECKING_CONNECTION "Έλεγχος σύνδεσης..."
-#define D_QUERY_DONE "Ολοκλήρωση ερωτήματος. Βρέθηκε υπηρεσία MQTT"
-#define D_MQTT_SERVICE_FOUND "Βρέθηκε υπηρεσία MQTT στο"
-#define D_FOUND_AT "βρέθηκε στο"
-#define D_SYSLOG_HOST_NOT_FOUND "Δε βρέθηκε Syslog Host"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Αποθηκεύτηκε από τη Flash στο"
-#define D_LOADED_FROM_FLASH_AT "Φορτώθηκε από τη Flash στο"
-#define D_USE_DEFAULTS "Χρήση προεπιλογών"
-#define D_ERASED_SECTOR "Διαγραφή τομέα"
-
-// webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
παρακαλώ αναβαθμίστε"
-#define D_WEBSERVER_ACTIVE_ON "Ενεργός διακομιστής Web στο"
-#define D_WITH_IP_ADDRESS "με διεύθυνση IP"
-#define D_WEBSERVER_STOPPED "Ο διακομιστής Web σταμάτησε"
-#define D_FILE_NOT_FOUND "Δε βρέθηκε το αρχείο"
-#define D_REDIRECTED "Ανακατεύθυνση στο captive portal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
-#define D_TRYING_TO_CONNECT "Προσπάθεια σύνδεσης της συσκευής σε ασύρματο δίκτυο"
-
-#define D_RESTART_IN "Επανεκκίνηση σε"
-#define D_SECONDS "δευτερόλεπτα"
-#define D_DEVICE_WILL_RESTART "Η συσκευή θα επανεκκινήσει σε λίγα δευτερόλεπτα"
-#define D_BUTTON_TOGGLE "Εναλλαγή"
-#define D_CONFIGURATION "Ρυθμίσεις"
-#define D_INFORMATION "Πληροφορίες"
-#define D_FIRMWARE_UPGRADE "Αναβάθμιση"
-#define D_CONSOLE "Κονσόλα"
-#define D_CONFIRM_RESTART "Επιβεβαίωση επανεκκίνησης"
-
-#define D_CONFIGURE_MODULE "Μονάδα"
-#define D_CONFIGURE_WIFI "WiFi"
-#define D_CONFIGURE_MQTT "MQTT"
-#define D_CONFIGURE_DOMOTICZ "Domoticz"
-#define D_CONFIGURE_LOGGING "Καταγραφή"
-#define D_CONFIGURE_OTHER "Άλλες ρυθμίσεις"
-#define D_CONFIRM_RESET_CONFIGURATION "Επιβεβαίωση αρχικοποίησης στις προεπιλεγμένες ρυθμίσεις"
-#define D_RESET_CONFIGURATION "Reset"
-#define D_BACKUP_CONFIGURATION "Εξαγωγή"
-#define D_RESTORE_CONFIGURATION "Επαναφορά"
-#define D_MAIN_MENU "Κεντρικό μενού"
-
-#define D_MODULE_PARAMETERS "Παράμετροι μονάδας"
-#define D_MODULE_TYPE "Τύπος μονάδας"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Παράμετροι Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Σάρωση για δίκτυα Wifi"
-#define D_SCAN_DONE "Η σάρωση ολοκληρώθηκε"
-#define D_NO_NETWORKS_FOUND "Δε βρέθηκαν δίκτυα"
-#define D_REFRESH_TO_SCAN_AGAIN "Πατήστε ανανέωση για μια νέα σάρωση"
-#define D_DUPLICATE_ACCESSPOINT "Διπλότυπο AccessPoint"
-#define D_SKIPPING_LOW_QUALITY "Παράκαμψη λόγω χαμηλής ποιότητας"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Κωδικός"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Κωδικός"
-
-#define D_MQTT_PARAMETERS "Παράμετροι MQTT"
-#define D_CLIENT "Πελάτης"
-#define D_FULL_TOPIC "Full Topic"
-
-#define D_LOGGING_PARAMETERS "Παράμετροι καταγραφής"
-#define D_SERIAL_LOG_LEVEL "Επίπεδο Σειριακής"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Επίπεδο Web"
-#define D_SYS_LOG_LEVEL "Επίπεδο Syslog"
-#define D_MORE_DEBUG "More debug"
-#define D_SYSLOG_HOST "Εξυπηρετητής Syslog"
-#define D_SYSLOG_PORT "Θύρα Syslog"
-#define D_TELEMETRY_PERIOD "Περίοδος τηλεμετρίας"
-
-#define D_OTHER_PARAMETERS "Άλλες παράμετροι"
-#define D_TEMPLATE "Πρότυπο"
-#define D_ACTIVATE "Ενεργοποίηση"
-#define D_WEB_ADMIN_PASSWORD "Κωδικός διαχειριστή"
-#define D_MQTT_ENABLE "Ενεργοποίηση MQTT"
-#define D_FRIENDLY_NAME "Φιλική ονομασία"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "μονή συσκευή"
-#define D_MULTI_DEVICE "πολλαπλές συσκευές"
-
-#define D_CONFIGURE_TEMPLATE "Πρότυπα"
-#define D_TEMPLATE_PARAMETERS "Παράμετροι Πρότυπου"
-#define D_TEMPLATE_NAME "Όνομα"
-#define D_BASE_TYPE "Βασίζεται στο"
-#define D_TEMPLATE_FLAGS "Επιλογές"
-
-#define D_SAVE_CONFIGURATION "Αποθήκευση ρυθμίσεων"
-#define D_CONFIGURATION_SAVED "Οι ρυθμίσεις αποθηκεύτηκαν"
-#define D_CONFIGURATION_RESET "Επαναφορά ρυθμίσεων"
-
-#define D_PROGRAM_VERSION "Έκδοση προγράμματος"
-#define D_BUILD_DATE_AND_TIME "Ημερομηνία έκδοσης"
-#define D_CORE_AND_SDK_VERSION "Έκδοση Core/SDK"
-#define D_FLASH_WRITE_COUNT "Καταμέτρηση εγγραφών στη Flash"
-#define D_MAC_ADDRESS "MAC Address"
-#define D_MQTT_HOST "MQTT Διακομιστής"
-#define D_MQTT_PORT "MQTT Θύρα"
-#define D_MQTT_CLIENT "MQTT Πελάτης"
-#define D_MQTT_USER "MQTT Χρήστης"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Μέγεθος Flash"
-#define D_FREE_PROGRAM_SPACE "Ελεύθερος χώρος προγράμματος"
-
-#define D_UPGRADE_BY_WEBSERVER "Αναβάθμιση μέσω web server"
-#define D_OTA_URL "OTA URL"
-#define D_START_UPGRADE "Εκκίνηση αναβάθμισης"
-#define D_UPGRADE_BY_FILE_UPLOAD "Αναβάθμιση με μεταφόρτωση αρχείου"
-#define D_UPLOAD_STARTED "Η μεταφόρτωση ξεκίνησε"
-#define D_UPGRADE_STARTED "Η αναβάθμιση ξεκίνησε"
-#define D_UPLOAD_DONE "Η μεταφόρτωση ολοκληρώθηκε"
-#define D_UPLOAD_ERR_1 "Δεν έχει επιλεγεί αρχείο"
-#define D_UPLOAD_ERR_2 "Δεν υπάρχει επαρκής χώρος"
-#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
-#define D_UPLOAD_ERR_4 "Το μέγεθος προγράμματος είναι μεγαλύτερο από την πραγματική μνήμη Flash"
-#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
-#define D_UPLOAD_ERR_6 "Η μεταφόρτωση απέτυχε. Επιλέξτε επίπεδο καταγραφής 3"
-#define D_UPLOAD_ERR_7 "Η μεταφόρτωση ματαιώθηκε"
-#define D_UPLOAD_ERR_8 "Μη έγκυρο αρχείο"
-#define D_UPLOAD_ERR_9 "Πολύ μεγάλο αρχείο"
-#define D_UPLOAD_ERR_10 "Αποτυχία αρχικοποίησης RF chip"
-#define D_UPLOAD_ERR_11 "Αποτυχία σβησίματος στο RF chip"
-#define D_UPLOAD_ERR_12 "Αποτυχία εγγραφής στο RF chip"
-#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
-#define D_UPLOAD_ERROR_CODE "Κωδικός λάθους στη μεταφόρτωση"
-
-#define D_ENTER_COMMAND "Εισαγωγή εντολής"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Ενεργοποιήστε το weblog 2 εαν περιμένετε απόκριση"
-#define D_NEED_USER_AND_PASSWORD "Χρειάζεται user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Επιβεβαίωση αποτυπώματος TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Αποτυχία σύνδεσης TLS στο"
-#define D_RETRY_IN "Νέα προσπάθεια σε"
-#define D_VERIFIED "Επιβεβαιώθηκε με χρήση αποτυπώματος TLS"
-#define D_INSECURE "Επισφαλής σύνδεση λόγω άκυρου αποτυπώματος TLS"
-#define D_CONNECT_FAILED_TO "Αποτυχία σύνδεσης στο"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Απενεργοποιημένο Multicast"
-#define D_MULTICAST_REJOINED "Επανασύνδεση Multicast"
-#define D_MULTICAST_JOIN_FAILED "Αποτυχία σύνδεσης Multicast"
-#define D_FAILED_TO_SEND_RESPONSE "Αποτυχία αποστολής απόκρισης"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo βασικό event"
-#define D_WEMO_EVENT_SERVICE "WeMo υπηρεσία event"
-#define D_WEMO_META_SERVICE "WeMo υπηρεσία meta"
-#define D_WEMO_SETUP "WeMo ρυθμίσεις"
-#define D_RESPONSE_SENT "Αποστολή απάντησης"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue ρυθμίσεις"
-#define D_HUE_API_NOT_IMPLEMENTED "Δε βρέθηκε εφαρμογή Hue API"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "Στάλθηκαν 3 πακέτα απόκρισης"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Παράμετροι Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Χρονικά"
-#define D_TIMER_PARAMETERS "Παράμετροι χρονικών"
-#define D_TIMER_ENABLE "Ενεργοποίηση χρονικών"
-#define D_TIMER_ARM "Οπλισμένο"
-#define D_TIMER_TIME "Ώρα"
-#define D_TIMER_DAYS "Μέρες"
-#define D_TIMER_REPEAT "Επανάληψη"
-#define D_TIMER_OUTPUT "Έξοδος"
-#define D_TIMER_ACTION "Λειτουργία"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Ρυθμίσεις KNX"
-#define D_KNX_PARAMETERS "Παράμετροι KNX"
-#define D_KNX_GENERAL_CONFIG "Γενικά"
-#define D_KNX_PHYSICAL_ADDRESS "Διεύθυνση Μνήμης"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Πρέπει να είναι μοναδική στο KNX δίκτυο )"
-#define D_KNX_ENABLE "Ενεργοποίηση KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Αποστολή δεδομένων σε Ομάδα Διευθύνσεων"
-#define D_ADD "Προσθήκη"
-#define D_DELETE "Διαγραφή"
-#define D_REPLY "Επανάληψη"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Ομάδα Διευθύνσεων που θα λάβει τα Δεδομένα"
-#define D_RECEIVED_FROM "Στάλθηκε από"
-#define D_KNX_COMMAND_WRITE "Εγγραφή"
-#define D_KNX_COMMAND_READ "Ανάγνωση"
-#define D_KNX_COMMAND_OTHER "Άλλο"
-#define D_SENT_TO "αποστολή σε"
-#define D_KNX_WARNING "Η Ομάδα Διευθύνσεων ( 0 / 0 / 0 ) είναι δεσμευμένη και δεν μπορεί να χρησιμοποιηθεί."
-#define D_KNX_ENHANCEMENT "Βελτίωση επικοινωνίας"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Ενέργεια σήμερα"
-#define D_ENERGY_YESTERDAY "Ενέργεια χθες"
-#define D_ENERGY_TOTAL "Ενέργεια συνολικά"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Ο αισθητήρας είναι απασχολημένος"
-#define D_SENSOR_CRC_ERROR "Σφάλμα CRC αισθητήρα"
-#define D_SENSORS_FOUND "Βρέθηκαν αισθητήρες"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Αναμονή Timeout για"
-#define D_START_SIGNAL_LOW "χαμηλό αρχικό σήμα"
-#define D_START_SIGNAL_HIGH "υψηλό αρχικό σήμα"
-#define D_PULSE "παλμός"
-#define D_CHECKSUM_FAILURE "Αποτυχία Checksum"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Ο αισθητήρας δεν έστειλε εντολή ACK"
-#define D_SHT1X_FOUND "Βρέθηκε SHT1X"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particals"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Απομακρύνετε το βαρίδιο"
-#define D_HX_CAL_REFERENCE "Τοποθετήστε το βαρίδιο αναφοράς"
-#define D_HX_CAL_DONE "Βαθμονομήθηκε"
-#define D_HX_CAL_FAIL "Αποτυχία βαθμονόμησης"
-#define D_RESET_HX711 "Αρχικοποίηση ζυγαριάς"
-#define D_CONFIGURE_HX711 "Ρύθμιση ζυγαριάς"
-#define D_HX711_PARAMETERS "Παράμετροι ζυγαριάς"
-#define D_ITEM_WEIGHT "Βάρος αντικειμένου"
-#define D_REFERENCE_WEIGHT "Βάρος αναφοράς"
-#define D_CALIBRATE "Βαθμονόμησε"
-#define D_CALIBRATION "Βαθμονόμηση"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Κατεύθυνση ανέμου"
-#define D_TX20_WIND_SPEED "Ταχύτητα ανέμου"
-#define D_TX20_WIND_SPEED_AVG "Μέση ταχύτητα ανέμου"
-#define D_TX20_WIND_SPEED_MAX "Μέγιστη ταχύτητα ανέμου"
-#define D_TX20_NORTH "Β"
-#define D_TX20_EAST "Α"
-#define D_TX20_SOUTH "Ν"
-#define D_TX20_WEST "Δ"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sectors"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_EL_GR_H_
+/*
+ el-GR.h - localization for Greek - Greece for Tasmota
+
+ Copyright (C) 2019 Theo Arends, translated by Nick Galfas
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_EL_GR_H_
+#define _LANGUAGE_EL_GR_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.5.0
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1032
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "el"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "ΚυρΔευΤριΤετΠεμΠαρΣαβ"
+#define D_MONTH3LIST "ΙανΦεβΜαρΑπρΜαϊΙονΙολΑυγΣεπΟκτΝοεΔεκ"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Διαχειριστής"
+#define D_AIR_QUALITY "Ποιότητα αέρα"
+#define D_AP "AP" // Access Point
+#define D_AS "ως"
+#define D_AUTO "ΑΥΤΟΜΑΤΟ"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Καταμέτρηση εκκινήσεων"
+#define D_BRIGHTLIGHT "Φωτεινό"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Πλήκτρο"
+#define D_BY "από" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Κελσίου"
+#define D_CHANNEL "Κανάλι"
+#define D_CO2 "Διοξείδιο του άνθρακα"
+#define D_CODE "κώδικας" // Button code
+#define D_COLDLIGHT "Ψυχρό"
+#define D_COMMAND "Εντολή"
+#define D_CONNECTED "Συνδεδεμένο"
+#define D_COUNT "Μέτρηση"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNTER "Μετρητής"
+#define D_CURRENT "Ένταση" // As in Voltage and Current
+#define D_DATA "Δεδομένα"
+#define D_DARKLIGHT "Σκοτεινό"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Ανενεργό"
+#define D_DISTANCE "Απόσταση"
+#define D_DNS_SERVER "Διακομιστής DNS"
+#define D_DONE "Ολοκληρώθηκε"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Εξομoίωση"
+#define D_ENABLED "Ενεργό"
+#define D_ERASE "Διαγραφή"
+#define D_ERROR "Σφάλμα"
+#define D_FAHRENHEIT "Φαρενάιτ"
+#define D_FAILED "Απέτυχε"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback Topic"
+#define D_FALSE "Ψευδές"
+#define D_FILE "Αρχείο"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Ελεύθερη μνήμη"
+#define D_FREQUENCY "Συχνότητα"
+#define D_GAS "Αέριο"
+#define D_GATEWAY "Πύλη"
+#define D_GROUP "Ομάδα"
+#define D_HOST "Host"
+#define D_HOSTNAME "Hostname"
+#define D_HUMIDITY "Υγρασία"
+#define D_ILLUMINANCE "Φωτεινότητα"
+#define D_IMMEDIATE "άμεσο" // Button immediate
+#define D_INDEX "Κατάλογος"
+#define D_INFO "Πληροφορίες"
+#define D_INFRARED "Υπέρυθρο"
+#define D_INITIALIZED "Αρχικοποιήθηκε"
+#define D_IP_ADDRESS "Διεύθυνση IP"
+#define D_LIGHT "Φως"
+#define D_LWT "LWT"
+#define D_MODULE "Μονάδα"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "ανίχνευση για πολλαπλά πατήματα"
+#define D_NOISE "Θόρυβος"
+#define D_NONE "Κανένα"
+#define D_OFF "Off"
+#define D_OFFLINE "Offline"
+#define D_OK "Ok"
+#define D_ON "On"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Κωδικός"
+#define D_PORT "Θύρα"
+#define D_POWER_FACTOR "Συντελεστής Ισχύος"
+#define D_POWERUSAGE "Ισχύς"
+#define D_POWERUSAGE_ACTIVE "Ενεργός ισχύς"
+#define D_POWERUSAGE_APPARENT "Φαινόμενη ισχύς"
+#define D_POWERUSAGE_REACTIVE "Άεργη ισχύς"
+#define D_PRESSURE "Πίεση"
+#define D_PRESSUREATSEALEVEL "Πίεση στo επίπεδο θάλασσας"
+#define D_PROGRAM_FLASH_SIZE "Μέγεθος προγράμματος στη Flash"
+#define D_PROGRAM_SIZE "Μέγεθος προγράμματος"
+#define D_PROJECT "Έργο"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Ελήφθη"
+#define D_RESTART "Επανεκκίνηση"
+#define D_RESTARTING "Επανεκκινεί"
+#define D_RESTART_REASON "Αιτία επανεκκίνησης"
+#define D_RESTORE "επαναφορά"
+#define D_RETAINED "διακράτηση"
+#define D_RULE "Κανόνας"
+#define D_SAVE "Αποθήκευση"
+#define D_SENSOR "Αισθητήρας"
+#define D_SSID "SSId"
+#define D_START "Εκκίνηση"
+#define D_STD_TIME "STD"
+#define D_STOP "Τερματισμός"
+#define D_SUBNET_MASK "Μάσκα υποδικτύου"
+#define D_SUBSCRIBE_TO "Εγγραφή στο"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Επιτυχές"
+#define D_SUNRISE "Σούρουπο"
+#define D_SUNSET "Ηλιοβασίλεμα"
+#define D_TEMPERATURE "Θερμοκρασία"
+#define D_TO "έως"
+#define D_TOGGLE "Εναλλαγή"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Μετάδοση"
+#define D_TRUE "Αληθές"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "αναβάθμιση"
+#define D_UPLOAD "Ανέβασμα"
+#define D_UPTIME "Χρόνος λειτουργίας"
+#define D_USER "Χρήστης"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Δείκτης UV"
+#define D_UV_INDEX_1 "Χαμηλό"
+#define D_UV_INDEX_2 "Μέτριο"
+#define D_UV_INDEX_3 "Υψηλό"
+#define D_UV_INDEX_4 "Κίνδυνος"
+#define D_UV_INDEX_5 "Έγκαυμα L1/2"
+#define D_UV_INDEX_6 "Έγκαυμα L3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "Επίπεδο UV"
+#define D_UV_POWER "Ένταση UV"
+#define D_VERSION "Έκδοση"
+#define D_VOLTAGE "Τάση"
+#define D_WEIGHT "Βάρος"
+#define D_WARMLIGHT "Θερμό"
+#define D_WEB_SERVER "Διακομιστής Web"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ΠΡΟΕΙΔΟΠΟΙΗΣΗ Αυτή η έκδοση δεν αποθηκεύει τις ρυθμίσεις"
+#define D_LEVEL_10 "επίπεδο 1-0"
+#define D_LEVEL_01 "επίπεδο 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Η καταγραφή σειριακής θύρας είναι απενεργοποιημένη"
+#define D_SYSLOG_LOGGING_REENABLED "Η καταγραφή Syslog επαναενεργοποιήθηκε"
+
+#define D_SET_BAUDRATE_TO "Ορισμός Baudrate σε"
+#define D_RECEIVED_TOPIC "Received Topic"
+#define D_DATA_SIZE "Μέγεθος δεδομένων"
+#define D_ANALOG_INPUT "Αναλογικό"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "Το WPSconfig ΑΠΕΤΥΧΕ με status"
+#define D_ACTIVE_FOR_3_MINUTES "ενεργό για 3 λεπτά"
+#define D_FAILED_TO_START "απέτυχε να εκκινήσει"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "Συνδέεται στο AP"
+#define D_IN_MODE "σε mode"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Αποτυχία σύνδεσης, δεν απονεμήθηκε διεύθυνση IP"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Αποτυχία σύνδεσης, δεν ανταποκρίνεται το AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Αποτυχία σύνδεσης, λάθος κωδικός για το AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Αποτυχία σύνδεσης, λήξη ορίου απόκρισης από το AP"
+#define D_ATTEMPTING_CONNECTION "Προσπάθεια για σύνδεση..."
+#define D_CHECKING_CONNECTION "Έλεγχος σύνδεσης..."
+#define D_QUERY_DONE "Ολοκλήρωση ερωτήματος. Βρέθηκε υπηρεσία MQTT"
+#define D_MQTT_SERVICE_FOUND "Βρέθηκε υπηρεσία MQTT στο"
+#define D_FOUND_AT "βρέθηκε στο"
+#define D_SYSLOG_HOST_NOT_FOUND "Δε βρέθηκε Syslog Host"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Αποθηκεύτηκε από τη Flash στο"
+#define D_LOADED_FROM_FLASH_AT "Φορτώθηκε από τη Flash στο"
+#define D_USE_DEFAULTS "Χρήση προεπιλογών"
+#define D_ERASED_SECTOR "Διαγραφή τομέα"
+
+// webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
παρακαλώ αναβαθμίστε"
+#define D_WEBSERVER_ACTIVE_ON "Ενεργός διακομιστής Web στο"
+#define D_WITH_IP_ADDRESS "με διεύθυνση IP"
+#define D_WEBSERVER_STOPPED "Ο διακομιστής Web σταμάτησε"
+#define D_FILE_NOT_FOUND "Δε βρέθηκε το αρχείο"
+#define D_REDIRECTED "Ανακατεύθυνση στο captive portal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
+#define D_TRYING_TO_CONNECT "Προσπάθεια σύνδεσης της συσκευής σε ασύρματο δίκτυο"
+
+#define D_RESTART_IN "Επανεκκίνηση σε"
+#define D_SECONDS "δευτερόλεπτα"
+#define D_DEVICE_WILL_RESTART "Η συσκευή θα επανεκκινήσει σε λίγα δευτερόλεπτα"
+#define D_BUTTON_TOGGLE "Εναλλαγή"
+#define D_CONFIGURATION "Ρυθμίσεις"
+#define D_INFORMATION "Πληροφορίες"
+#define D_FIRMWARE_UPGRADE "Αναβάθμιση"
+#define D_CONSOLE "Κονσόλα"
+#define D_CONFIRM_RESTART "Επιβεβαίωση επανεκκίνησης"
+
+#define D_CONFIGURE_MODULE "Μονάδα"
+#define D_CONFIGURE_WIFI "WiFi"
+#define D_CONFIGURE_MQTT "MQTT"
+#define D_CONFIGURE_DOMOTICZ "Domoticz"
+#define D_CONFIGURE_LOGGING "Καταγραφή"
+#define D_CONFIGURE_OTHER "Άλλες ρυθμίσεις"
+#define D_CONFIRM_RESET_CONFIGURATION "Επιβεβαίωση αρχικοποίησης στις προεπιλεγμένες ρυθμίσεις"
+#define D_RESET_CONFIGURATION "Reset"
+#define D_BACKUP_CONFIGURATION "Εξαγωγή"
+#define D_RESTORE_CONFIGURATION "Επαναφορά"
+#define D_MAIN_MENU "Κεντρικό μενού"
+
+#define D_MODULE_PARAMETERS "Παράμετροι μονάδας"
+#define D_MODULE_TYPE "Τύπος μονάδας"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Παράμετροι Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Σάρωση για δίκτυα Wifi"
+#define D_SCAN_DONE "Η σάρωση ολοκληρώθηκε"
+#define D_NO_NETWORKS_FOUND "Δε βρέθηκαν δίκτυα"
+#define D_REFRESH_TO_SCAN_AGAIN "Πατήστε ανανέωση για μια νέα σάρωση"
+#define D_DUPLICATE_ACCESSPOINT "Διπλότυπο AccessPoint"
+#define D_SKIPPING_LOW_QUALITY "Παράκαμψη λόγω χαμηλής ποιότητας"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Κωδικός"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Κωδικός"
+
+#define D_MQTT_PARAMETERS "Παράμετροι MQTT"
+#define D_CLIENT "Πελάτης"
+#define D_FULL_TOPIC "Full Topic"
+
+#define D_LOGGING_PARAMETERS "Παράμετροι καταγραφής"
+#define D_SERIAL_LOG_LEVEL "Επίπεδο Σειριακής"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Επίπεδο Web"
+#define D_SYS_LOG_LEVEL "Επίπεδο Syslog"
+#define D_MORE_DEBUG "More debug"
+#define D_SYSLOG_HOST "Εξυπηρετητής Syslog"
+#define D_SYSLOG_PORT "Θύρα Syslog"
+#define D_TELEMETRY_PERIOD "Περίοδος τηλεμετρίας"
+
+#define D_OTHER_PARAMETERS "Άλλες παράμετροι"
+#define D_TEMPLATE "Πρότυπο"
+#define D_ACTIVATE "Ενεργοποίηση"
+#define D_WEB_ADMIN_PASSWORD "Κωδικός διαχειριστή"
+#define D_MQTT_ENABLE "Ενεργοποίηση MQTT"
+#define D_FRIENDLY_NAME "Φιλική ονομασία"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "μονή συσκευή"
+#define D_MULTI_DEVICE "πολλαπλές συσκευές"
+
+#define D_CONFIGURE_TEMPLATE "Πρότυπα"
+#define D_TEMPLATE_PARAMETERS "Παράμετροι Πρότυπου"
+#define D_TEMPLATE_NAME "Όνομα"
+#define D_BASE_TYPE "Βασίζεται στο"
+#define D_TEMPLATE_FLAGS "Επιλογές"
+
+#define D_SAVE_CONFIGURATION "Αποθήκευση ρυθμίσεων"
+#define D_CONFIGURATION_SAVED "Οι ρυθμίσεις αποθηκεύτηκαν"
+#define D_CONFIGURATION_RESET "Επαναφορά ρυθμίσεων"
+
+#define D_PROGRAM_VERSION "Έκδοση προγράμματος"
+#define D_BUILD_DATE_AND_TIME "Ημερομηνία έκδοσης"
+#define D_CORE_AND_SDK_VERSION "Έκδοση Core/SDK"
+#define D_FLASH_WRITE_COUNT "Καταμέτρηση εγγραφών στη Flash"
+#define D_MAC_ADDRESS "MAC Address"
+#define D_MQTT_HOST "MQTT Διακομιστής"
+#define D_MQTT_PORT "MQTT Θύρα"
+#define D_MQTT_CLIENT "MQTT Πελάτης"
+#define D_MQTT_USER "MQTT Χρήστης"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Μέγεθος Flash"
+#define D_FREE_PROGRAM_SPACE "Ελεύθερος χώρος προγράμματος"
+
+#define D_UPGRADE_BY_WEBSERVER "Αναβάθμιση μέσω web server"
+#define D_OTA_URL "OTA URL"
+#define D_START_UPGRADE "Εκκίνηση αναβάθμισης"
+#define D_UPGRADE_BY_FILE_UPLOAD "Αναβάθμιση με μεταφόρτωση αρχείου"
+#define D_UPLOAD_STARTED "Η μεταφόρτωση ξεκίνησε"
+#define D_UPGRADE_STARTED "Η αναβάθμιση ξεκίνησε"
+#define D_UPLOAD_DONE "Η μεταφόρτωση ολοκληρώθηκε"
+#define D_UPLOAD_ERR_1 "Δεν έχει επιλεγεί αρχείο"
+#define D_UPLOAD_ERR_2 "Δεν υπάρχει επαρκής χώρος"
+#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
+#define D_UPLOAD_ERR_4 "Το μέγεθος προγράμματος είναι μεγαλύτερο από την πραγματική μνήμη Flash"
+#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
+#define D_UPLOAD_ERR_6 "Η μεταφόρτωση απέτυχε. Επιλέξτε επίπεδο καταγραφής 3"
+#define D_UPLOAD_ERR_7 "Η μεταφόρτωση ματαιώθηκε"
+#define D_UPLOAD_ERR_8 "Μη έγκυρο αρχείο"
+#define D_UPLOAD_ERR_9 "Πολύ μεγάλο αρχείο"
+#define D_UPLOAD_ERR_10 "Αποτυχία αρχικοποίησης RF chip"
+#define D_UPLOAD_ERR_11 "Αποτυχία σβησίματος στο RF chip"
+#define D_UPLOAD_ERR_12 "Αποτυχία εγγραφής στο RF chip"
+#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERROR_CODE "Κωδικός λάθους στη μεταφόρτωση"
+
+#define D_ENTER_COMMAND "Εισαγωγή εντολής"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Ενεργοποιήστε το weblog 2 εαν περιμένετε απόκριση"
+#define D_NEED_USER_AND_PASSWORD "Χρειάζεται user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Επιβεβαίωση αποτυπώματος TLS..."
+#define D_TLS_CONNECT_FAILED_TO "Αποτυχία σύνδεσης TLS στο"
+#define D_RETRY_IN "Νέα προσπάθεια σε"
+#define D_VERIFIED "Επιβεβαιώθηκε με χρήση αποτυπώματος TLS"
+#define D_INSECURE "Επισφαλής σύνδεση λόγω άκυρου αποτυπώματος TLS"
+#define D_CONNECT_FAILED_TO "Αποτυχία σύνδεσης στο"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Απενεργοποιημένο Multicast"
+#define D_MULTICAST_REJOINED "Επανασύνδεση Multicast"
+#define D_MULTICAST_JOIN_FAILED "Αποτυχία σύνδεσης Multicast"
+#define D_FAILED_TO_SEND_RESPONSE "Αποτυχία αποστολής απόκρισης"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo βασικό event"
+#define D_WEMO_EVENT_SERVICE "WeMo υπηρεσία event"
+#define D_WEMO_META_SERVICE "WeMo υπηρεσία meta"
+#define D_WEMO_SETUP "WeMo ρυθμίσεις"
+#define D_RESPONSE_SENT "Αποστολή απάντησης"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue ρυθμίσεις"
+#define D_HUE_API_NOT_IMPLEMENTED "Δε βρέθηκε εφαρμογή Hue API"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "Στάλθηκαν 3 πακέτα απόκρισης"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Παράμετροι Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Χρονικά"
+#define D_TIMER_PARAMETERS "Παράμετροι χρονικών"
+#define D_TIMER_ENABLE "Ενεργοποίηση χρονικών"
+#define D_TIMER_ARM "Οπλισμένο"
+#define D_TIMER_TIME "Ώρα"
+#define D_TIMER_DAYS "Μέρες"
+#define D_TIMER_REPEAT "Επανάληψη"
+#define D_TIMER_OUTPUT "Έξοδος"
+#define D_TIMER_ACTION "Λειτουργία"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Ρυθμίσεις KNX"
+#define D_KNX_PARAMETERS "Παράμετροι KNX"
+#define D_KNX_GENERAL_CONFIG "Γενικά"
+#define D_KNX_PHYSICAL_ADDRESS "Διεύθυνση Μνήμης"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Πρέπει να είναι μοναδική στο KNX δίκτυο )"
+#define D_KNX_ENABLE "Ενεργοποίηση KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Αποστολή δεδομένων σε Ομάδα Διευθύνσεων"
+#define D_ADD "Προσθήκη"
+#define D_DELETE "Διαγραφή"
+#define D_REPLY "Επανάληψη"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Ομάδα Διευθύνσεων που θα λάβει τα Δεδομένα"
+#define D_RECEIVED_FROM "Στάλθηκε από"
+#define D_KNX_COMMAND_WRITE "Εγγραφή"
+#define D_KNX_COMMAND_READ "Ανάγνωση"
+#define D_KNX_COMMAND_OTHER "Άλλο"
+#define D_SENT_TO "αποστολή σε"
+#define D_KNX_WARNING "Η Ομάδα Διευθύνσεων ( 0 / 0 / 0 ) είναι δεσμευμένη και δεν μπορεί να χρησιμοποιηθεί."
+#define D_KNX_ENHANCEMENT "Βελτίωση επικοινωνίας"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Ενέργεια σήμερα"
+#define D_ENERGY_YESTERDAY "Ενέργεια χθες"
+#define D_ENERGY_TOTAL "Ενέργεια συνολικά"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Ο αισθητήρας είναι απασχολημένος"
+#define D_SENSOR_CRC_ERROR "Σφάλμα CRC αισθητήρα"
+#define D_SENSORS_FOUND "Βρέθηκαν αισθητήρες"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Αναμονή Timeout για"
+#define D_START_SIGNAL_LOW "χαμηλό αρχικό σήμα"
+#define D_START_SIGNAL_HIGH "υψηλό αρχικό σήμα"
+#define D_PULSE "παλμός"
+#define D_CHECKSUM_FAILURE "Αποτυχία Checksum"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Ο αισθητήρας δεν έστειλε εντολή ACK"
+#define D_SHT1X_FOUND "Βρέθηκε SHT1X"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particals"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Απομακρύνετε το βαρίδιο"
+#define D_HX_CAL_REFERENCE "Τοποθετήστε το βαρίδιο αναφοράς"
+#define D_HX_CAL_DONE "Βαθμονομήθηκε"
+#define D_HX_CAL_FAIL "Αποτυχία βαθμονόμησης"
+#define D_RESET_HX711 "Αρχικοποίηση ζυγαριάς"
+#define D_CONFIGURE_HX711 "Ρύθμιση ζυγαριάς"
+#define D_HX711_PARAMETERS "Παράμετροι ζυγαριάς"
+#define D_ITEM_WEIGHT "Βάρος αντικειμένου"
+#define D_REFERENCE_WEIGHT "Βάρος αναφοράς"
+#define D_CALIBRATE "Βαθμονόμησε"
+#define D_CALIBRATION "Βαθμονόμηση"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Κατεύθυνση ανέμου"
+#define D_TX20_WIND_SPEED "Ταχύτητα ανέμου"
+#define D_TX20_WIND_SPEED_AVG "Μέση ταχύτητα ανέμου"
+#define D_TX20_WIND_SPEED_MAX "Μέγιστη ταχύτητα ανέμου"
+#define D_TX20_NORTH "Β"
+#define D_TX20_EAST "Α"
+#define D_TX20_SOUTH "Ν"
+#define D_TX20_WEST "Δ"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sectors"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_EL_GR_H_
diff --git a/tasmota/language/en-GB.h b/tasmota/language/en-GB.h
index 257a34c86..42d9d6100 100644
--- a/tasmota/language/en-GB.h
+++ b/tasmota/language/en-GB.h
@@ -1,701 +1,703 @@
-/*
- en-GB.h - localization for English - United Kingdom for Tasmota
-
- Copyright (C) 2019 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 .
-*/
-
-#ifndef _LANGUAGE_EN_GB_H_
-#define _LANGUAGE_EN_GB_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.2.1.11
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-// https://www.science.co.il/language/Locale-codes.php
-#define LANGUAGE_LCID 2057
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "en"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "SunMonTueWedThuFriSat"
-#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Air quality"
-#define D_AP "AP" // Access Point
-#define D_AS "as"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Boot Count"
-#define D_BRIGHTLIGHT "Bright"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Button"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Channel"
-#define D_CO2 "Carbon dioxide"
-#define D_CODE "code" // Button code
-#define D_COLDLIGHT "Cold"
-#define D_COMMAND "Command"
-#define D_CONNECTED "Connected"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Count"
-#define D_COUNTER "Counter"
-#define D_CURRENT "Current" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Dark"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Disabled"
-#define D_DISTANCE "Distance"
-#define D_DNS_SERVER "DNS Server"
-#define D_DONE "Done"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulation"
-#define D_ENABLED "Enabled"
-#define D_ERASE "Erase"
-#define D_ERROR "Error"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Failed"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback Topic"
-#define D_FALSE "False"
-#define D_FILE "File"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Free Memory"
-#define D_FREQUENCY "Frequency"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Group"
-#define D_HOST "Host"
-#define D_HOSTNAME "Hostname"
-#define D_HUMIDITY "Humidity"
-#define D_ILLUMINANCE "Illuminance"
-#define D_IMMEDIATE "immediate" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infrared"
-#define D_INITIALIZED "Initialized"
-#define D_IP_ADDRESS "IP Address"
-#define D_LIGHT "Light"
-#define D_LWT "LWT"
-#define D_MODULE "Module"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-press"
-#define D_NOISE "Noise"
-#define D_NONE "None"
-#define D_OFF "Off"
-#define D_OFFLINE "Offline"
-#define D_OK "Ok"
-#define D_ON "On"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Password"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Power Factor"
-#define D_POWERUSAGE "Power"
-#define D_POWERUSAGE_ACTIVE "Active Power"
-#define D_POWERUSAGE_APPARENT "Apparent Power"
-#define D_POWERUSAGE_REACTIVE "Reactive Power"
-#define D_PRESSURE "Pressure"
-#define D_PRESSUREATSEALEVEL "SeaPressure"
-#define D_PROGRAM_FLASH_SIZE "Program Flash Size"
-#define D_PROGRAM_SIZE "Program Size"
-#define D_PROJECT "Project"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Received"
-#define D_RESTART "Restart"
-#define D_RESTARTING "Restarting"
-#define D_RESTART_REASON "Restart Reason"
-#define D_RESTORE "restore"
-#define D_RETAINED "retained"
-#define D_RULE "Rule"
-#define D_SAVE "Save"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Start"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Subnet Mask"
-#define D_SUBSCRIBE_TO "Subscribe to"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Successful"
-#define D_SUNRISE "Sunrise"
-#define D_SUNSET "Sunset"
-#define D_TEMPERATURE "Temperature"
-#define D_TO "to"
-#define D_TOGGLE "Toggle"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Transmit"
-#define D_TRUE "True"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "upgrade"
-#define D_UPLOAD "Upload"
-#define D_UPTIME "Uptime"
-#define D_USER "User"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Low"
-#define D_UV_INDEX_2 "Mid"
-#define D_UV_INDEX_3 "High"
-#define D_UV_INDEX_4 "Danger"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR" // Out of Range
-#define D_UV_LEVEL "UV Level"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Version"
-#define D_VOLTAGE "Voltage"
-#define D_WEIGHT "Weight"
-#define D_WARMLIGHT "Warm"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "WARNING This version does not support persistent settings"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serial logging disabled"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog logging re-enabled"
-
-#define D_SET_BAUDRATE_TO "Set Baudrate to"
-#define D_RECEIVED_TOPIC "Received Topic"
-#define D_DATA_SIZE "Data Size"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
-#define D_ACTIVE_FOR_3_MINUTES "active for 3 minutes"
-#define D_FAILED_TO_START "failed to start"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "Connecting to AP"
-#define D_IN_MODE "in mode"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connect failed as no IP address received"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Connect failed as AP cannot be reached"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Connect failed with AP incorrect password"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Connect failed with AP timeout"
-#define D_ATTEMPTING_CONNECTION "Attempting connection..."
-#define D_CHECKING_CONNECTION "Checking connection..."
-#define D_QUERY_DONE "Query done. MQTT services found"
-#define D_MQTT_SERVICE_FOUND "MQTT service found on"
-#define D_FOUND_AT "found at"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host not found"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Saved to flash at"
-#define D_LOADED_FROM_FLASH_AT "Loaded from flash at"
-#define D_USE_DEFAULTS "Use defaults"
-#define D_ERASED_SECTOR "Erased sector"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
please upgrade"
-#define D_WEBSERVER_ACTIVE_ON "Web server active on"
-#define D_WITH_IP_ADDRESS "with IP address"
-#define D_WEBSERVER_STOPPED "Web server stopped"
-#define D_FILE_NOT_FOUND "File Not Found"
-#define D_REDIRECTED "Redirected to captive portal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
-#define D_TRYING_TO_CONNECT "Trying to connect device to network"
-
-#define D_RESTART_IN "Restart in"
-#define D_SECONDS "seconds"
-#define D_DEVICE_WILL_RESTART "Device will restart in a few seconds"
-#define D_BUTTON_TOGGLE "Toggle"
-#define D_CONFIGURATION "Configuration"
-#define D_INFORMATION "Information"
-#define D_FIRMWARE_UPGRADE "Firmware Upgrade"
-#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Confirm Restart"
-
-#define D_CONFIGURE_MODULE "Configure Module"
-#define D_CONFIGURE_WIFI "Configure WiFi"
-#define D_CONFIGURE_MQTT "Configure MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configure Domoticz"
-#define D_CONFIGURE_LOGGING "Configure Logging"
-#define D_CONFIGURE_OTHER "Configure Other"
-#define D_CONFIRM_RESET_CONFIGURATION "Confirm Reset Configuration"
-#define D_RESET_CONFIGURATION "Reset Configuration"
-#define D_BACKUP_CONFIGURATION "Backup Configuration"
-#define D_RESTORE_CONFIGURATION "Restore Configuration"
-#define D_MAIN_MENU "Main Menu"
-
-#define D_MODULE_PARAMETERS "Module parameters"
-#define D_MODULE_TYPE "Module type"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Wifi parameters"
-#define D_SCAN_FOR_WIFI_NETWORKS "Scan for wifi networks"
-#define D_SCAN_DONE "Scan done"
-#define D_NO_NETWORKS_FOUND "No networks found"
-#define D_REFRESH_TO_SCAN_AGAIN "Refresh to scan again"
-#define D_DUPLICATE_ACCESSPOINT "Duplicate AccessPoint"
-#define D_SKIPPING_LOW_QUALITY "Skipping due to low quality"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Password"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Password"
-
-#define D_MQTT_PARAMETERS "MQTT parameters"
-#define D_CLIENT "Client"
-#define D_FULL_TOPIC "Full Topic"
-
-#define D_LOGGING_PARAMETERS "Logging parameters"
-#define D_SERIAL_LOG_LEVEL "Serial log level"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web log level"
-#define D_SYS_LOG_LEVEL "Syslog level"
-#define D_MORE_DEBUG "More debug"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Telemetry period"
-
-#define D_OTHER_PARAMETERS "Other parameters"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Web Admin Password"
-#define D_MQTT_ENABLE "MQTT enable"
-#define D_FRIENDLY_NAME "Friendly Name"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "single device"
-#define D_MULTI_DEVICE "multi device"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Save configuration"
-#define D_CONFIGURATION_SAVED "Configuration saved"
-#define D_CONFIGURATION_RESET "Configuration reset"
-
-#define D_PROGRAM_VERSION "Program Version"
-#define D_BUILD_DATE_AND_TIME "Build Date & Time"
-#define D_CORE_AND_SDK_VERSION "Core/SDK Version"
-#define D_FLASH_WRITE_COUNT "Flash write Count"
-#define D_MAC_ADDRESS "MAC Address"
-#define D_MQTT_HOST "MQTT Host"
-#define D_MQTT_PORT "MQTT Port"
-#define D_MQTT_CLIENT "MQTT Client"
-#define D_MQTT_USER "MQTT User"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Flash Size"
-#define D_FREE_PROGRAM_SPACE "Free Program Space"
-
-#define D_UPGRADE_BY_WEBSERVER "Upgrade by web server"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Start upgrade"
-#define D_UPGRADE_BY_FILE_UPLOAD "Upgrade by file upload"
-#define D_UPLOAD_STARTED "Upload started"
-#define D_UPGRADE_STARTED "Upgrade started"
-#define D_UPLOAD_DONE "Upload done"
-#define D_UPLOAD_ERR_1 "No file selected"
-#define D_UPLOAD_ERR_2 "Not enough space"
-#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
-#define D_UPLOAD_ERR_4 "Program flash size is larger than real flash size"
-#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
-#define D_UPLOAD_ERR_6 "Upload failed. Enable logging 3"
-#define D_UPLOAD_ERR_7 "Upload aborted"
-#define D_UPLOAD_ERR_8 "File invalid"
-#define D_UPLOAD_ERR_9 "File too large"
-#define D_UPLOAD_ERR_10 "Failed to init RF chip"
-#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
-#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
-#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
-#define D_UPLOAD_ERROR_CODE "Upload error code"
-
-#define D_ENTER_COMMAND "Enter command"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
-#define D_NEED_USER_AND_PASSWORD "Need user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verify TLS fingerprint..."
-#define D_TLS_CONNECT_FAILED_TO "TLS Connect failed to"
-#define D_RETRY_IN "Retry in"
-#define D_VERIFIED "Verified using Fingerprint"
-#define D_INSECURE "Insecure connection due to invalid Fingerprint"
-#define D_CONNECT_FAILED_TO "Connect failed to"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast disabled"
-#define D_MULTICAST_REJOINED "Multicast (re)joined"
-#define D_MULTICAST_JOIN_FAILED "Multicast join failed"
-#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo setup"
-#define D_RESPONSE_SENT "Response sent"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue setup"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API not implemented"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configure Timer"
-#define D_TIMER_PARAMETERS "Timer parameters"
-#define D_TIMER_ENABLE "Enable Timers"
-#define D_TIMER_ARM "Arm"
-#define D_TIMER_TIME "Time"
-#define D_TIMER_DAYS "Days"
-#define D_TIMER_REPEAT "Repeat"
-#define D_TIMER_OUTPUT "Output"
-#define D_TIMER_ACTION "Action"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configure KNX"
-#define D_KNX_PARAMETERS "KNX Parameters"
-#define D_KNX_GENERAL_CONFIG "General"
-#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
-#define D_KNX_ENABLE "Enable KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
-#define D_ADD "Add"
-#define D_DELETE "Delete"
-#define D_REPLY "Reply"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
-#define D_RECEIVED_FROM "Received from"
-#define D_KNX_COMMAND_WRITE "Write"
-#define D_KNX_COMMAND_READ "Read"
-#define D_KNX_COMMAND_OTHER "Other"
-#define D_SENT_TO "sent to"
-#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energy Today"
-#define D_ENERGY_YESTERDAY "Energy Yesterday"
-#define D_ENERGY_TOTAL "Energy Total"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor busy"
-#define D_SENSOR_CRC_ERROR "Sensor CRC error"
-#define D_SENSORS_FOUND "Sensors found"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Timeout waiting for"
-#define D_START_SIGNAL_LOW "start signal low"
-#define D_START_SIGNAL_HIGH "start signal high"
-#define D_PULSE "pulse"
-#define D_CHECKSUM_FAILURE "Checksum failure"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
-#define D_SHT1X_FOUND "SHT1X found"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particals"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remove weigth"
-#define D_HX_CAL_REFERENCE "Load reference weigth"
-#define D_HX_CAL_DONE "Calibrated"
-#define D_HX_CAL_FAIL "Calibration failed"
-#define D_RESET_HX711 "Reset Scale"
-#define D_CONFIGURE_HX711 "Configure Scale"
-#define D_HX711_PARAMETERS "Scale parameters"
-#define D_ITEM_WEIGHT "Item weight"
-#define D_REFERENCE_WEIGHT "Reference weigth"
-#define D_CALIBRATE "Calibrate"
-#define D_CALIBRATION "Calibration"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Wind Direction"
-#define D_TX20_WIND_SPEED "Wind Speed"
-#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
-#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sectors"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_EN_GB_H_
+/*
+ en-GB.h - localization for English - United Kingdom for Tasmota
+
+ Copyright (C) 2019 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 .
+*/
+
+#ifndef _LANGUAGE_EN_GB_H_
+#define _LANGUAGE_EN_GB_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.2.1.11
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+// https://www.science.co.il/language/Locale-codes.php
+#define LANGUAGE_LCID 2057
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "en"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "SunMonTueWedThuFriSat"
+#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Air quality"
+#define D_AP "AP" // Access Point
+#define D_AS "as"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Boot Count"
+#define D_BRIGHTLIGHT "Bright"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Button"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Channel"
+#define D_CO2 "Carbon dioxide"
+#define D_CODE "code" // Button code
+#define D_COLDLIGHT "Cold"
+#define D_COMMAND "Command"
+#define D_CONNECTED "Connected"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Count"
+#define D_COUNTER "Counter"
+#define D_CURRENT "Current" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Dark"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Disabled"
+#define D_DISTANCE "Distance"
+#define D_DNS_SERVER "DNS Server"
+#define D_DONE "Done"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulation"
+#define D_ENABLED "Enabled"
+#define D_ERASE "Erase"
+#define D_ERROR "Error"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Failed"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback Topic"
+#define D_FALSE "False"
+#define D_FILE "File"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Free Memory"
+#define D_FREQUENCY "Frequency"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Group"
+#define D_HOST "Host"
+#define D_HOSTNAME "Hostname"
+#define D_HUMIDITY "Humidity"
+#define D_ILLUMINANCE "Illuminance"
+#define D_IMMEDIATE "immediate" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infrared"
+#define D_INITIALIZED "Initialized"
+#define D_IP_ADDRESS "IP Address"
+#define D_LIGHT "Light"
+#define D_LWT "LWT"
+#define D_MODULE "Module"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-press"
+#define D_NOISE "Noise"
+#define D_NONE "None"
+#define D_OFF "Off"
+#define D_OFFLINE "Offline"
+#define D_OK "Ok"
+#define D_ON "On"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Password"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Power Factor"
+#define D_POWERUSAGE "Power"
+#define D_POWERUSAGE_ACTIVE "Active Power"
+#define D_POWERUSAGE_APPARENT "Apparent Power"
+#define D_POWERUSAGE_REACTIVE "Reactive Power"
+#define D_PRESSURE "Pressure"
+#define D_PRESSUREATSEALEVEL "SeaPressure"
+#define D_PROGRAM_FLASH_SIZE "Program Flash Size"
+#define D_PROGRAM_SIZE "Program Size"
+#define D_PROJECT "Project"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Received"
+#define D_RESTART "Restart"
+#define D_RESTARTING "Restarting"
+#define D_RESTART_REASON "Restart Reason"
+#define D_RESTORE "restore"
+#define D_RETAINED "retained"
+#define D_RULE "Rule"
+#define D_SAVE "Save"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Start"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Subnet Mask"
+#define D_SUBSCRIBE_TO "Subscribe to"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Successful"
+#define D_SUNRISE "Sunrise"
+#define D_SUNSET "Sunset"
+#define D_TEMPERATURE "Temperature"
+#define D_TO "to"
+#define D_TOGGLE "Toggle"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Transmit"
+#define D_TRUE "True"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "upgrade"
+#define D_UPLOAD "Upload"
+#define D_UPTIME "Uptime"
+#define D_USER "User"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Low"
+#define D_UV_INDEX_2 "Mid"
+#define D_UV_INDEX_3 "High"
+#define D_UV_INDEX_4 "Danger"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR" // Out of Range
+#define D_UV_LEVEL "UV Level"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Version"
+#define D_VOLTAGE "Voltage"
+#define D_WEIGHT "Weight"
+#define D_WARMLIGHT "Warm"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "WARNING This version does not support persistent settings"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serial logging disabled"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog logging re-enabled"
+
+#define D_SET_BAUDRATE_TO "Set Baudrate to"
+#define D_RECEIVED_TOPIC "Received Topic"
+#define D_DATA_SIZE "Data Size"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
+#define D_ACTIVE_FOR_3_MINUTES "active for 3 minutes"
+#define D_FAILED_TO_START "failed to start"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "Connecting to AP"
+#define D_IN_MODE "in mode"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connect failed as no IP address received"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Connect failed as AP cannot be reached"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Connect failed with AP incorrect password"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Connect failed with AP timeout"
+#define D_ATTEMPTING_CONNECTION "Attempting connection..."
+#define D_CHECKING_CONNECTION "Checking connection..."
+#define D_QUERY_DONE "Query done. MQTT services found"
+#define D_MQTT_SERVICE_FOUND "MQTT service found on"
+#define D_FOUND_AT "found at"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host not found"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Saved to flash at"
+#define D_LOADED_FROM_FLASH_AT "Loaded from flash at"
+#define D_USE_DEFAULTS "Use defaults"
+#define D_ERASED_SECTOR "Erased sector"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
please upgrade"
+#define D_WEBSERVER_ACTIVE_ON "Web server active on"
+#define D_WITH_IP_ADDRESS "with IP address"
+#define D_WEBSERVER_STOPPED "Web server stopped"
+#define D_FILE_NOT_FOUND "File Not Found"
+#define D_REDIRECTED "Redirected to captive portal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
+#define D_TRYING_TO_CONNECT "Trying to connect device to network"
+
+#define D_RESTART_IN "Restart in"
+#define D_SECONDS "seconds"
+#define D_DEVICE_WILL_RESTART "Device will restart in a few seconds"
+#define D_BUTTON_TOGGLE "Toggle"
+#define D_CONFIGURATION "Configuration"
+#define D_INFORMATION "Information"
+#define D_FIRMWARE_UPGRADE "Firmware Upgrade"
+#define D_CONSOLE "Console"
+#define D_CONFIRM_RESTART "Confirm Restart"
+
+#define D_CONFIGURE_MODULE "Configure Module"
+#define D_CONFIGURE_WIFI "Configure WiFi"
+#define D_CONFIGURE_MQTT "Configure MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configure Domoticz"
+#define D_CONFIGURE_LOGGING "Configure Logging"
+#define D_CONFIGURE_OTHER "Configure Other"
+#define D_CONFIRM_RESET_CONFIGURATION "Confirm Reset Configuration"
+#define D_RESET_CONFIGURATION "Reset Configuration"
+#define D_BACKUP_CONFIGURATION "Backup Configuration"
+#define D_RESTORE_CONFIGURATION "Restore Configuration"
+#define D_MAIN_MENU "Main Menu"
+
+#define D_MODULE_PARAMETERS "Module parameters"
+#define D_MODULE_TYPE "Module type"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Wifi parameters"
+#define D_SCAN_FOR_WIFI_NETWORKS "Scan for wifi networks"
+#define D_SCAN_DONE "Scan done"
+#define D_NO_NETWORKS_FOUND "No networks found"
+#define D_REFRESH_TO_SCAN_AGAIN "Refresh to scan again"
+#define D_DUPLICATE_ACCESSPOINT "Duplicate AccessPoint"
+#define D_SKIPPING_LOW_QUALITY "Skipping due to low quality"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Password"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Password"
+
+#define D_MQTT_PARAMETERS "MQTT parameters"
+#define D_CLIENT "Client"
+#define D_FULL_TOPIC "Full Topic"
+
+#define D_LOGGING_PARAMETERS "Logging parameters"
+#define D_SERIAL_LOG_LEVEL "Serial log level"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web log level"
+#define D_SYS_LOG_LEVEL "Syslog level"
+#define D_MORE_DEBUG "More debug"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Telemetry period"
+
+#define D_OTHER_PARAMETERS "Other parameters"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Web Admin Password"
+#define D_MQTT_ENABLE "MQTT enable"
+#define D_FRIENDLY_NAME "Friendly Name"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "single device"
+#define D_MULTI_DEVICE "multi device"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Save configuration"
+#define D_CONFIGURATION_SAVED "Configuration saved"
+#define D_CONFIGURATION_RESET "Configuration reset"
+
+#define D_PROGRAM_VERSION "Program Version"
+#define D_BUILD_DATE_AND_TIME "Build Date & Time"
+#define D_CORE_AND_SDK_VERSION "Core/SDK Version"
+#define D_FLASH_WRITE_COUNT "Flash write Count"
+#define D_MAC_ADDRESS "MAC Address"
+#define D_MQTT_HOST "MQTT Host"
+#define D_MQTT_PORT "MQTT Port"
+#define D_MQTT_CLIENT "MQTT Client"
+#define D_MQTT_USER "MQTT User"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Flash Size"
+#define D_FREE_PROGRAM_SPACE "Free Program Space"
+
+#define D_UPGRADE_BY_WEBSERVER "Upgrade by web server"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Start upgrade"
+#define D_UPGRADE_BY_FILE_UPLOAD "Upgrade by file upload"
+#define D_UPLOAD_STARTED "Upload started"
+#define D_UPGRADE_STARTED "Upgrade started"
+#define D_UPLOAD_DONE "Upload done"
+#define D_UPLOAD_ERR_1 "No file selected"
+#define D_UPLOAD_ERR_2 "Not enough space"
+#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
+#define D_UPLOAD_ERR_4 "Program flash size is larger than real flash size"
+#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
+#define D_UPLOAD_ERR_6 "Upload failed. Enable logging 3"
+#define D_UPLOAD_ERR_7 "Upload aborted"
+#define D_UPLOAD_ERR_8 "File invalid"
+#define D_UPLOAD_ERR_9 "File too large"
+#define D_UPLOAD_ERR_10 "Failed to init RF chip"
+#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
+#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
+#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERROR_CODE "Upload error code"
+
+#define D_ENTER_COMMAND "Enter command"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
+#define D_NEED_USER_AND_PASSWORD "Need user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verify TLS fingerprint..."
+#define D_TLS_CONNECT_FAILED_TO "TLS Connect failed to"
+#define D_RETRY_IN "Retry in"
+#define D_VERIFIED "Verified using Fingerprint"
+#define D_INSECURE "Insecure connection due to invalid Fingerprint"
+#define D_CONNECT_FAILED_TO "Connect failed to"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast disabled"
+#define D_MULTICAST_REJOINED "Multicast (re)joined"
+#define D_MULTICAST_JOIN_FAILED "Multicast join failed"
+#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo setup"
+#define D_RESPONSE_SENT "Response sent"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue setup"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API not implemented"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configure Timer"
+#define D_TIMER_PARAMETERS "Timer parameters"
+#define D_TIMER_ENABLE "Enable Timers"
+#define D_TIMER_ARM "Arm"
+#define D_TIMER_TIME "Time"
+#define D_TIMER_DAYS "Days"
+#define D_TIMER_REPEAT "Repeat"
+#define D_TIMER_OUTPUT "Output"
+#define D_TIMER_ACTION "Action"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configure KNX"
+#define D_KNX_PARAMETERS "KNX Parameters"
+#define D_KNX_GENERAL_CONFIG "General"
+#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
+#define D_KNX_ENABLE "Enable KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
+#define D_ADD "Add"
+#define D_DELETE "Delete"
+#define D_REPLY "Reply"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
+#define D_RECEIVED_FROM "Received from"
+#define D_KNX_COMMAND_WRITE "Write"
+#define D_KNX_COMMAND_READ "Read"
+#define D_KNX_COMMAND_OTHER "Other"
+#define D_SENT_TO "sent to"
+#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energy Today"
+#define D_ENERGY_YESTERDAY "Energy Yesterday"
+#define D_ENERGY_TOTAL "Energy Total"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor busy"
+#define D_SENSOR_CRC_ERROR "Sensor CRC error"
+#define D_SENSORS_FOUND "Sensors found"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Timeout waiting for"
+#define D_START_SIGNAL_LOW "start signal low"
+#define D_START_SIGNAL_HIGH "start signal high"
+#define D_PULSE "pulse"
+#define D_CHECKSUM_FAILURE "Checksum failure"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
+#define D_SHT1X_FOUND "SHT1X found"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particals"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remove weigth"
+#define D_HX_CAL_REFERENCE "Load reference weigth"
+#define D_HX_CAL_DONE "Calibrated"
+#define D_HX_CAL_FAIL "Calibration failed"
+#define D_RESET_HX711 "Reset Scale"
+#define D_CONFIGURE_HX711 "Configure Scale"
+#define D_HX711_PARAMETERS "Scale parameters"
+#define D_ITEM_WEIGHT "Item weight"
+#define D_REFERENCE_WEIGHT "Reference weigth"
+#define D_CALIBRATE "Calibrate"
+#define D_CALIBRATION "Calibration"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Wind Direction"
+#define D_TX20_WIND_SPEED "Wind Speed"
+#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
+#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sectors"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_EN_GB_H_
diff --git a/tasmota/language/es-ES.h b/tasmota/language/es-ES.h
index 7527bb77a..4c98d8ebe 100644
--- a/tasmota/language/es-ES.h
+++ b/tasmota/language/es-ES.h
@@ -1,701 +1,703 @@
-/*
- es-ES.h - localization for Spanish - Spain for Tasmota
-
- Copyright (C) 2019 Adrian Scillato
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_ES_ES_H_
-#define _LANGUAGE_ES_ES_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v7.0.0.5
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1034
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "es"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "DomLunMarMieJueVieSab"
-#define D_MONTH3LIST "EneFebMarAbrMayJunJulAgoSepOctNovDic"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Calidad del Aire"
-#define D_AP "AP" // Access Point
-#define D_AS "como"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Conteo Reinicios"
-#define D_BRIGHTLIGHT "Brillante"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Botón"
-#define D_BY "por" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Canal"
-#define D_CO2 "CO2"
-#define D_CODE "código" // Button code
-#define D_COLDLIGHT "Fría"
-#define D_COMMAND "Comando"
-#define D_CONNECTED "Conectado"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Conteo"
-#define D_COUNTER "Contador"
-#define D_CURRENT "Corriente" // As in Voltage and Current
-#define D_DATA "Datos"
-#define D_DARKLIGHT "Oscuro"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Deshabilitado"
-#define D_DISTANCE "Distancia"
-#define D_DNS_SERVER "DNS Server"
-#define D_DONE "Listo"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulación"
-#define D_ENABLED "Habilitado"
-#define D_ERASE "Borrar"
-#define D_ERROR "Error"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Falló"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "FallbackTopic"
-#define D_FALSE "Falso"
-#define D_FILE "Archivo"
-#define D_FLOW_RATE "Caudal"
-#define D_FREE_MEMORY "Memoria Libre"
-#define D_FREQUENCY "Frecuencia"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Grupo"
-#define D_HOST "Host"
-#define D_HOSTNAME "Hostname"
-#define D_HUMIDITY "Humedad"
-#define D_ILLUMINANCE "Luminancia"
-#define D_IMMEDIATE "inmediato" // Button immediate
-#define D_INDEX "Índice"
-#define D_INFO "Información"
-#define D_INFRARED "Infrarrojo"
-#define D_INITIALIZED "Inicializado"
-#define D_IP_ADDRESS "Dirección IP"
-#define D_LIGHT "Luz"
-#define D_LWT "LWT"
-#define D_MODULE "Módulo"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-press"
-#define D_NOISE "Ruido"
-#define D_NONE "Ninguno"
-#define D_OFF "Apagado"
-#define D_OFFLINE "Offline"
-#define D_OK "Ok"
-#define D_ON "Encendido"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Clave"
-#define D_PORT "Puerto"
-#define D_POWER_FACTOR "Factor de Potencia"
-#define D_POWERUSAGE "Potencia"
-#define D_POWERUSAGE_ACTIVE "Potencia Activa"
-#define D_POWERUSAGE_APPARENT "Potencia Aparente"
-#define D_POWERUSAGE_REACTIVE "Potencia Reactiva"
-#define D_PRESSURE "Presión"
-#define D_PRESSUREATSEALEVEL "Presión al nivel del mar"
-#define D_PROGRAM_FLASH_SIZE "Tamaño de Flash de Programa"
-#define D_PROGRAM_SIZE "Tamaño Programa"
-#define D_PROJECT "Proyecto"
-#define D_RAIN "Lluvia"
-#define D_RECEIVED "Recibido"
-#define D_RESTART "Reiniciar"
-#define D_RESTARTING "Reiniciando"
-#define D_RESTART_REASON "Causa Reinicio"
-#define D_RESTORE "Restauración"
-#define D_RETAINED "Grabado"
-#define D_RULE "Regla"
-#define D_SAVE "Grabar"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Iniciar"
-#define D_STD_TIME "STD"
-#define D_STOP "Detener"
-#define D_SUBNET_MASK "Máscara Subred"
-#define D_SUBSCRIBE_TO "Suscribir a"
-#define D_UNSUBSCRIBE_FROM "Desuscribirse de"
-#define D_SUCCESSFUL "Exitosa"
-#define D_SUNRISE "Salida del Sol"
-#define D_SUNSET "Puesta del Sol"
-#define D_TEMPERATURE "Temperatura"
-#define D_TO "a"
-#define D_TOGGLE "Conmutar"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usado"
-#define D_TRANSMIT "Transmitir"
-#define D_TRUE "Verdadero"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "Actualización"
-#define D_UPLOAD "Carga"
-#define D_UPTIME "Tiempo Encendido"
-#define D_USER "Usuario"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Índice UV"
-#define D_UV_INDEX_1 "Bajo"
-#define D_UV_INDEX_2 "Medio"
-#define D_UV_INDEX_3 "Alto"
-#define D_UV_INDEX_4 "Peligroso"
-#define D_UV_INDEX_5 "Quemaduras 1 a 2 grad"
-#define D_UV_INDEX_6 "Quemaduras 3 grad"
-#define D_UV_INDEX_7 "Fuera de Rango"
-#define D_UV_LEVEL "Nivel UV"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Versión"
-#define D_VOLTAGE "Tensión"
-#define D_WEIGHT "Peso"
-#define D_WARMLIGHT "Cálida"
-#define D_WEB_SERVER "Servidor Web"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "Cuidado, esta versión no guarda los cambios"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Log serial deshabilitado"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog re-habilitado"
-
-#define D_SET_BAUDRATE_TO "Baudrate a"
-#define D_RECEIVED_TOPIC "Topic Recibido"
-#define D_DATA_SIZE "Tamaño de Datos"
-#define D_ANALOG_INPUT "Entrada Analógica"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Ciclo Bloqueado"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig FALLÓ con estado"
-#define D_ACTIVE_FOR_3_MINUTES "activo por 3 minutos"
-#define D_FAILED_TO_START "falló inicio"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "Connectando a AP"
-#define D_IN_MODE "en modo"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Falló Conexión, Dirección IP no recibida"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Falló Conexión, AP no pudo ser contactado"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Falló Conexión, clave de AP incorrecta"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Falló Conexión, timeout de AP"
-#define D_ATTEMPTING_CONNECTION "Intentando conectar..."
-#define D_CHECKING_CONNECTION "Probando conexión..."
-#define D_QUERY_DONE "Consulta lista. Servicio MQTT encontrado"
-#define D_MQTT_SERVICE_FOUND "Servicio MQTT encontrado en"
-#define D_FOUND_AT "encontrado en"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host no encontrado"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Grabado a la flash en"
-#define D_LOADED_FROM_FLASH_AT "Cargado desde flash en"
-#define D_USE_DEFAULTS "Usar valores por defecto"
-#define D_ERASED_SECTOR "Sector borrado"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Habilitar JavaScript para usar Tasmota"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MÍNIMO
actualice por favor"
-#define D_WEBSERVER_ACTIVE_ON "Servidor web activo en"
-#define D_WITH_IP_ADDRESS "con dirección IP"
-#define D_WEBSERVER_STOPPED "Servidor web detenido"
-#define D_FILE_NOT_FOUND "Archivo No Encontrado"
-#define D_REDIRECTED "Redireccionado al portal captivo"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager como AccessPoint y Estación"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager como AccessPoint"
-#define D_TRYING_TO_CONNECT "Intentado conectar dispositivo a la red"
-
-#define D_RESTART_IN "Reinicio en"
-#define D_SECONDS "segundos"
-#define D_DEVICE_WILL_RESTART "El dispositivo se reiniciará en unos segundos"
-#define D_BUTTON_TOGGLE "Alternar ON/OFF"
-#define D_CONFIGURATION "Configuración"
-#define D_INFORMATION "Información"
-#define D_FIRMWARE_UPGRADE "Actualizar Firmware"
-#define D_CONSOLE "Consola"
-#define D_CONFIRM_RESTART "Confirmar Reinicio"
-
-#define D_CONFIGURE_MODULE "Configuración del Módulo"
-#define D_CONFIGURE_WIFI "Configuración WiFi"
-#define D_CONFIGURE_MQTT "Configuración MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configuración Domoticz"
-#define D_CONFIGURE_LOGGING "Configuración Logging"
-#define D_CONFIGURE_OTHER "Configuración Extra"
-#define D_CONFIRM_RESET_CONFIGURATION "Confirmar Reset Configuración"
-#define D_RESET_CONFIGURATION "Reset de Configuración"
-#define D_BACKUP_CONFIGURATION "Backup de Configuración"
-#define D_RESTORE_CONFIGURATION "Restaurar Configuración"
-#define D_MAIN_MENU "Menú Principal"
-
-#define D_MODULE_PARAMETERS "Parámetros del módulo"
-#define D_MODULE_TYPE "Tipo de módulo"
-#define D_PULLUP_ENABLE "Botón/Llave sin pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Parámetros Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Buscar redes wifi"
-#define D_SCAN_DONE "Busqueda finalizada"
-#define D_NO_NETWORKS_FOUND "Ninguna red encontrada"
-#define D_REFRESH_TO_SCAN_AGAIN "Recargar página para buscar nuevamente"
-#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplicado"
-#define D_SKIPPING_LOW_QUALITY "Ignorado por baja calidad"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "SSId AP1"
-#define D_AP1_PASSWORD "Clave AP1"
-#define D_AP2_SSID "SSId AP2"
-#define D_AP2_PASSWORD "Clave AP2"
-
-#define D_MQTT_PARAMETERS "Parámetros MQTT"
-#define D_CLIENT "Cliente"
-#define D_FULL_TOPIC "Full Topic"
-
-#define D_LOGGING_PARAMETERS "Parámetros Logging"
-#define D_SERIAL_LOG_LEVEL "Nivel de log por Serial"
-#define D_MQTT_LOG_LEVEL "Nivel de log por Mqtt"
-#define D_WEB_LOG_LEVEL "Nivel de log por Web"
-#define D_SYS_LOG_LEVEL "Nivel de log por Syslog"
-#define D_MORE_DEBUG "Más Debug"
-#define D_SYSLOG_HOST "Host del Syslog"
-#define D_SYSLOG_PORT "Puerto del Syslog"
-#define D_TELEMETRY_PERIOD "Período de Telemetría"
-
-#define D_OTHER_PARAMETERS "Otros parámetros"
-#define D_TEMPLATE "Plantilla"
-#define D_ACTIVATE "Activar"
-#define D_WEB_ADMIN_PASSWORD "Clave Administrador Web"
-#define D_MQTT_ENABLE "Habilitar MQTT"
-#define D_FRIENDLY_NAME "Nombre Amigable"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "dispositivo simple"
-#define D_MULTI_DEVICE "dispositivo múltiple"
-
-#define D_CONFIGURE_TEMPLATE "Configurar Plantilla"
-#define D_TEMPLATE_PARAMETERS "Parámetros de Plantilla"
-#define D_TEMPLATE_NAME "Nombre"
-#define D_BASE_TYPE "Basada en"
-#define D_TEMPLATE_FLAGS "Opciones"
-
-#define D_SAVE_CONFIGURATION "Grabar configuración"
-#define D_CONFIGURATION_SAVED "Configuración grabada"
-#define D_CONFIGURATION_RESET "Configuración restablecida"
-
-#define D_PROGRAM_VERSION "Versión del Programa"
-#define D_BUILD_DATE_AND_TIME "Fecha y Hora de Compilación"
-#define D_CORE_AND_SDK_VERSION "Versión Core/SDK"
-#define D_FLASH_WRITE_COUNT "Contador de escritura en Flash"
-#define D_MAC_ADDRESS "Dirección MAC"
-#define D_MQTT_HOST "Host MQTT"
-#define D_MQTT_PORT "Puerto MQTT"
-#define D_MQTT_CLIENT "Cliente MQTT"
-#define D_MQTT_USER "Usuario MQTT"
-#define D_MQTT_TOPIC "Topic MQTT"
-#define D_MQTT_GROUP_TOPIC "Group Topic MQTT"
-#define D_MQTT_FULL_TOPIC "Full Topic MQTT"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Tamaño Flash"
-#define D_FREE_PROGRAM_SPACE "Memoria de Programa Libre"
-
-#define D_UPGRADE_BY_WEBSERVER "Actualizar por servidor web"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Comenzar actualización"
-#define D_UPGRADE_BY_FILE_UPLOAD "Actualizar cargando archivo bin"
-#define D_UPLOAD_STARTED "Cargando archivo"
-#define D_UPGRADE_STARTED "Actualización iniciada"
-#define D_UPLOAD_DONE "Carga finalizada"
-#define D_UPLOAD_ERR_1 "Ningún archivo seleccionado"
-#define D_UPLOAD_ERR_2 "Espacio insuficiente"
-#define D_UPLOAD_ERR_3 "Magic byte no corresponde a 0xE9"
-#define D_UPLOAD_ERR_4 "El tamaño de la memoria de programa es mayor que la de la flash"
-#define D_UPLOAD_ERR_5 "Error de comparación del buffer de carga"
-#define D_UPLOAD_ERR_6 "Carga fallida. Habilitar logging 3"
-#define D_UPLOAD_ERR_7 "Carga cancelada"
-#define D_UPLOAD_ERR_8 "Archivo no válido"
-#define D_UPLOAD_ERR_9 "Archivo muy grande"
-#define D_UPLOAD_ERR_10 "No inició chip RF"
-#define D_UPLOAD_ERR_11 "No se pudo borrar en el chip RF"
-#define D_UPLOAD_ERR_12 "No se puedo escribir en el chip RF"
-#define D_UPLOAD_ERR_13 "No se pudo decodificar firmware RF"
-#define D_UPLOAD_ERROR_CODE "Código de error de carga"
-
-#define D_ENTER_COMMAND "Ingresar comando"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 si desea respuesta"
-#define D_NEED_USER_AND_PASSWORD "Se necesita user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verificar TLS fingerprint..."
-#define D_TLS_CONNECT_FAILED_TO "Falló Conexión TLS a"
-#define D_RETRY_IN "Reintentando"
-#define D_VERIFIED "Verificado Fingerprint"
-#define D_INSECURE "Conexión insegura por Fingerprint inválido"
-#define D_CONNECT_FAILED_TO "Falló Conexión a"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast deshabilitado"
-#define D_MULTICAST_REJOINED "Multicast (re)conectado"
-#define D_MULTICAST_JOIN_FAILED "Conexión Multicast fallida"
-#define D_FAILED_TO_SEND_RESPONSE "Falla al enviar respuesta"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "Evento base de WeMo"
-#define D_WEMO_EVENT_SERVICE "Evento de servicio de WeMo"
-#define D_WEMO_META_SERVICE "Meta Servicio de WeMo"
-#define D_WEMO_SETUP "Configuración de WeMo"
-#define D_RESPONSE_SENT "Respuesta enviada"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Configuración Hue"
-#define D_HUE_API_NOT_IMPLEMENTED "API de Hue no implementada"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 paquetes de respuesta enviados"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Parámetros Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Potencia,Energía"
- #define D_DOMOTICZ_ILLUMINANCE "Luminancia"
- #define D_DOMOTICZ_COUNT "Contador/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltaje/PM2,5"
- #define D_DOMOTICZ_CURRENT "Corriente/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Calidad del Aire"
- #define D_DOMOTICZ_P1_SMART_METER "Medidor Inteligente P1"
-#define D_DOMOTICZ_UPDATE_TIMER "Intervalo de refresco"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configuración Temporizadores"
-#define D_TIMER_PARAMETERS "Parámetros de Temporizadores"
-#define D_TIMER_ENABLE "Habilitar Temporizadores"
-#define D_TIMER_ARM "Activo"
-#define D_TIMER_TIME "Hora"
-#define D_TIMER_DAYS "Días"
-#define D_TIMER_REPEAT "Repetir"
-#define D_TIMER_OUTPUT "Salida"
-#define D_TIMER_ACTION "Estado"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configuración de KNX"
-#define D_KNX_PARAMETERS "Parámetros de KNX"
-#define D_KNX_GENERAL_CONFIG "General"
-#define D_KNX_PHYSICAL_ADDRESS "Dirección Física"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Debe ser única en la red KNX )"
-#define D_KNX_ENABLE "Habilitar KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Datos a Enviar a las Direcciones de Grupo"
-#define D_ADD "Agregar"
-#define D_DELETE "Eliminar"
-#define D_REPLY "Responder"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Direcciones de Grupo para Recibir Datos"
-#define D_RECEIVED_FROM "Recibido desde"
-#define D_KNX_COMMAND_WRITE "Escribir"
-#define D_KNX_COMMAND_READ "Leer"
-#define D_KNX_COMMAND_OTHER "Otro"
-#define D_SENT_TO "enviada a"
-#define D_KNX_WARNING "La dirección de grupo ( 0 / 0 / 0 ) está reservada y no puede ser utilizada."
-#define D_KNX_ENHANCEMENT "Mejora de Comunicación"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energía Hoy"
-#define D_ENERGY_YESTERDAY "Energía Ayer"
-#define D_ENERGY_TOTAL "Energía Total"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Abrir"
-#define D_CLOSE "Cerrar"
-#define D_DOMOTICZ_SHUTTER "Cortina"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configurar PCF8574"
-#define D_PCF8574_PARAMETERS "Parámetros de PCF8574"
-#define D_INVERT_PORTS "Invertir Puertos"
-#define D_DEVICE "Dispositivo"
-#define D_DEVICE_INPUT "Entrada"
-#define D_DEVICE_OUTPUT "Salida"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor ocupado"
-#define D_SENSOR_CRC_ERROR "Error CRC del Sensor"
-#define D_SENSORS_FOUND "Sensores encontrados"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Espera de timeout por"
-#define D_START_SIGNAL_LOW "iniciar señal baja"
-#define D_START_SIGNAL_HIGH "iniciar señal alta"
-#define D_PULSE "pulso"
-#define D_CHECKSUM_FAILURE "Falló Checksum"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor no ha enviado el comando ACK"
-#define D_SHT1X_FOUND "SHT1X encontrado"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Partículas"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remover Peso"
-#define D_HX_CAL_REFERENCE "Poner Peso de Referencia"
-#define D_HX_CAL_DONE "Calibrado"
-#define D_HX_CAL_FAIL "Falló Calibración"
-#define D_RESET_HX711 "Restablecer Escala"
-#define D_CONFIGURE_HX711 "Configurar Escala"
-#define D_HX711_PARAMETERS "Parámetros de Escala"
-#define D_ITEM_WEIGHT "Peso"
-#define D_REFERENCE_WEIGHT "Peso de Referencia"
-#define D_CALIBRATE "Calibrar"
-#define D_CALIBRATION "Calibración"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Dirección del Viento"
-#define D_TX20_WIND_SPEED "Vel. del Viento"
-#define D_TX20_WIND_SPEED_AVG "Vel. Prom. del Viento"
-#define D_TX20_WIND_SPEED_MAX "Vel. Max. del Viento"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "O"
-
-// 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 "User"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IR Tx"
-#define D_SENSOR_SWITCH "Llave" // Suffix "1"
-#define D_SENSOR_BUTTON "Botón" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Contador" // Suffix "1"
-#define D_SENSOR_IRRECV "IR Rx"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "seg"
-#define D_UNIT_SECTORS "sectores"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Ángulo de Fase"
-#define D_IMPORT_ACTIVE "P. Activa Entrante"
-#define D_EXPORT_ACTIVE "P. Activa Saliente"
-#define D_IMPORT_REACTIVE "P. Reactiva Entrante"
-#define D_EXPORT_REACTIVE "P. Reactiva Saliente"
-#define D_TOTAL_REACTIVE "P. Reactiva Total"
-#define D_UNIT_KWARH "kVArH"
-#define D_UNIT_ANGLE "Grados"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltaje"
-#define D_PV1_CURRENT "PV1 Corriente"
-#define D_PV1_POWER "PV1 Potencia"
-#define D_PV2_VOLTAGE "PV2 Voltaee"
-#define D_PV2_CURRENT "PV2 Corriente"
-#define D_PV2_POWER "PV2 Potencia"
-#define D_SOLAR_POWER "Potencia Solar"
-#define D_INVERTER_POWER "Potencia del Inversor"
-#define D_STATUS "Estado"
-#define D_WAITING "En Espera"
-#define D_CHECKING "Revisando"
-#define D_WORKING "Funcionando"
-#define D_FAILURE "Falla"
-#define D_SOLAX_ERROR_0 "Sin código de Error"
-#define D_SOLAX_ERROR_1 "Falla por Pérdida de Red"
-#define D_SOLAX_ERROR_2 "Falla por Voltaje de Red"
-#define D_SOLAX_ERROR_3 "Falla por Frecuencia de Red"
-#define D_SOLAX_ERROR_4 "Falla por Voltaje en PV"
-#define D_SOLAX_ERROR_5 "Falla de Aislación"
-#define D_SOLAX_ERROR_6 "Falla por sobretemperatura"
-#define D_SOLAX_ERROR_7 "Falla de Ventilador"
-#define D_SOLAX_ERROR_8 "Falla del Dispositivo"
-
-#endif // _LANGUAGE_ES_ES_H_
+/*
+ es-ES.h - localization for Spanish - Spain for Tasmota
+
+ Copyright (C) 2019 Adrian Scillato
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_ES_ES_H_
+#define _LANGUAGE_ES_ES_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v7.0.0.5
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1034
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "es"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "DomLunMarMieJueVieSab"
+#define D_MONTH3LIST "EneFebMarAbrMayJunJulAgoSepOctNovDic"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Calidad del Aire"
+#define D_AP "AP" // Access Point
+#define D_AS "como"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Conteo Reinicios"
+#define D_BRIGHTLIGHT "Brillante"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Botón"
+#define D_BY "por" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Canal"
+#define D_CO2 "CO2"
+#define D_CODE "código" // Button code
+#define D_COLDLIGHT "Fría"
+#define D_COMMAND "Comando"
+#define D_CONNECTED "Conectado"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Conteo"
+#define D_COUNTER "Contador"
+#define D_CURRENT "Corriente" // As in Voltage and Current
+#define D_DATA "Datos"
+#define D_DARKLIGHT "Oscuro"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Deshabilitado"
+#define D_DISTANCE "Distancia"
+#define D_DNS_SERVER "DNS Server"
+#define D_DONE "Listo"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulación"
+#define D_ENABLED "Habilitado"
+#define D_ERASE "Borrar"
+#define D_ERROR "Error"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Falló"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "FallbackTopic"
+#define D_FALSE "Falso"
+#define D_FILE "Archivo"
+#define D_FLOW_RATE "Caudal"
+#define D_FREE_MEMORY "Memoria Libre"
+#define D_FREQUENCY "Frecuencia"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Grupo"
+#define D_HOST "Host"
+#define D_HOSTNAME "Hostname"
+#define D_HUMIDITY "Humedad"
+#define D_ILLUMINANCE "Luminancia"
+#define D_IMMEDIATE "inmediato" // Button immediate
+#define D_INDEX "Índice"
+#define D_INFO "Información"
+#define D_INFRARED "Infrarrojo"
+#define D_INITIALIZED "Inicializado"
+#define D_IP_ADDRESS "Dirección IP"
+#define D_LIGHT "Luz"
+#define D_LWT "LWT"
+#define D_MODULE "Módulo"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-press"
+#define D_NOISE "Ruido"
+#define D_NONE "Ninguno"
+#define D_OFF "Apagado"
+#define D_OFFLINE "Offline"
+#define D_OK "Ok"
+#define D_ON "Encendido"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Clave"
+#define D_PORT "Puerto"
+#define D_POWER_FACTOR "Factor de Potencia"
+#define D_POWERUSAGE "Potencia"
+#define D_POWERUSAGE_ACTIVE "Potencia Activa"
+#define D_POWERUSAGE_APPARENT "Potencia Aparente"
+#define D_POWERUSAGE_REACTIVE "Potencia Reactiva"
+#define D_PRESSURE "Presión"
+#define D_PRESSUREATSEALEVEL "Presión al nivel del mar"
+#define D_PROGRAM_FLASH_SIZE "Tamaño de Flash de Programa"
+#define D_PROGRAM_SIZE "Tamaño Programa"
+#define D_PROJECT "Proyecto"
+#define D_RAIN "Lluvia"
+#define D_RECEIVED "Recibido"
+#define D_RESTART "Reiniciar"
+#define D_RESTARTING "Reiniciando"
+#define D_RESTART_REASON "Causa Reinicio"
+#define D_RESTORE "Restauración"
+#define D_RETAINED "Grabado"
+#define D_RULE "Regla"
+#define D_SAVE "Grabar"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Iniciar"
+#define D_STD_TIME "STD"
+#define D_STOP "Detener"
+#define D_SUBNET_MASK "Máscara Subred"
+#define D_SUBSCRIBE_TO "Suscribir a"
+#define D_UNSUBSCRIBE_FROM "Desuscribirse de"
+#define D_SUCCESSFUL "Exitosa"
+#define D_SUNRISE "Salida del Sol"
+#define D_SUNSET "Puesta del Sol"
+#define D_TEMPERATURE "Temperatura"
+#define D_TO "a"
+#define D_TOGGLE "Conmutar"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usado"
+#define D_TRANSMIT "Transmitir"
+#define D_TRUE "Verdadero"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "Actualización"
+#define D_UPLOAD "Carga"
+#define D_UPTIME "Tiempo Encendido"
+#define D_USER "Usuario"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Índice UV"
+#define D_UV_INDEX_1 "Bajo"
+#define D_UV_INDEX_2 "Medio"
+#define D_UV_INDEX_3 "Alto"
+#define D_UV_INDEX_4 "Peligroso"
+#define D_UV_INDEX_5 "Quemaduras 1 a 2 grad"
+#define D_UV_INDEX_6 "Quemaduras 3 grad"
+#define D_UV_INDEX_7 "Fuera de Rango"
+#define D_UV_LEVEL "Nivel UV"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Versión"
+#define D_VOLTAGE "Tensión"
+#define D_WEIGHT "Peso"
+#define D_WARMLIGHT "Cálida"
+#define D_WEB_SERVER "Servidor Web"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "Cuidado, esta versión no guarda los cambios"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Log serial deshabilitado"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog re-habilitado"
+
+#define D_SET_BAUDRATE_TO "Baudrate a"
+#define D_RECEIVED_TOPIC "Topic Recibido"
+#define D_DATA_SIZE "Tamaño de Datos"
+#define D_ANALOG_INPUT "Entrada Analógica"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Ciclo Bloqueado"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig FALLÓ con estado"
+#define D_ACTIVE_FOR_3_MINUTES "activo por 3 minutos"
+#define D_FAILED_TO_START "falló inicio"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "Connectando a AP"
+#define D_IN_MODE "en modo"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Falló Conexión, Dirección IP no recibida"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Falló Conexión, AP no pudo ser contactado"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Falló Conexión, clave de AP incorrecta"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Falló Conexión, timeout de AP"
+#define D_ATTEMPTING_CONNECTION "Intentando conectar..."
+#define D_CHECKING_CONNECTION "Probando conexión..."
+#define D_QUERY_DONE "Consulta lista. Servicio MQTT encontrado"
+#define D_MQTT_SERVICE_FOUND "Servicio MQTT encontrado en"
+#define D_FOUND_AT "encontrado en"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host no encontrado"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Grabado a la flash en"
+#define D_LOADED_FROM_FLASH_AT "Cargado desde flash en"
+#define D_USE_DEFAULTS "Usar valores por defecto"
+#define D_ERASED_SECTOR "Sector borrado"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Habilitar JavaScript para usar Tasmota"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MÍNIMO
actualice por favor"
+#define D_WEBSERVER_ACTIVE_ON "Servidor web activo en"
+#define D_WITH_IP_ADDRESS "con dirección IP"
+#define D_WEBSERVER_STOPPED "Servidor web detenido"
+#define D_FILE_NOT_FOUND "Archivo No Encontrado"
+#define D_REDIRECTED "Redireccionado al portal captivo"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager como AccessPoint y Estación"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager como AccessPoint"
+#define D_TRYING_TO_CONNECT "Intentado conectar dispositivo a la red"
+
+#define D_RESTART_IN "Reinicio en"
+#define D_SECONDS "segundos"
+#define D_DEVICE_WILL_RESTART "El dispositivo se reiniciará en unos segundos"
+#define D_BUTTON_TOGGLE "Alternar ON/OFF"
+#define D_CONFIGURATION "Configuración"
+#define D_INFORMATION "Información"
+#define D_FIRMWARE_UPGRADE "Actualizar Firmware"
+#define D_CONSOLE "Consola"
+#define D_CONFIRM_RESTART "Confirmar Reinicio"
+
+#define D_CONFIGURE_MODULE "Configuración del Módulo"
+#define D_CONFIGURE_WIFI "Configuración WiFi"
+#define D_CONFIGURE_MQTT "Configuración MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configuración Domoticz"
+#define D_CONFIGURE_LOGGING "Configuración Logging"
+#define D_CONFIGURE_OTHER "Configuración Extra"
+#define D_CONFIRM_RESET_CONFIGURATION "Confirmar Reset Configuración"
+#define D_RESET_CONFIGURATION "Reset de Configuración"
+#define D_BACKUP_CONFIGURATION "Backup de Configuración"
+#define D_RESTORE_CONFIGURATION "Restaurar Configuración"
+#define D_MAIN_MENU "Menú Principal"
+
+#define D_MODULE_PARAMETERS "Parámetros del módulo"
+#define D_MODULE_TYPE "Tipo de módulo"
+#define D_PULLUP_ENABLE "Botón/Llave sin pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Parámetros Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Buscar redes wifi"
+#define D_SCAN_DONE "Busqueda finalizada"
+#define D_NO_NETWORKS_FOUND "Ninguna red encontrada"
+#define D_REFRESH_TO_SCAN_AGAIN "Recargar página para buscar nuevamente"
+#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplicado"
+#define D_SKIPPING_LOW_QUALITY "Ignorado por baja calidad"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "SSId AP1"
+#define D_AP1_PASSWORD "Clave AP1"
+#define D_AP2_SSID "SSId AP2"
+#define D_AP2_PASSWORD "Clave AP2"
+
+#define D_MQTT_PARAMETERS "Parámetros MQTT"
+#define D_CLIENT "Cliente"
+#define D_FULL_TOPIC "Full Topic"
+
+#define D_LOGGING_PARAMETERS "Parámetros Logging"
+#define D_SERIAL_LOG_LEVEL "Nivel de log por Serial"
+#define D_MQTT_LOG_LEVEL "Nivel de log por Mqtt"
+#define D_WEB_LOG_LEVEL "Nivel de log por Web"
+#define D_SYS_LOG_LEVEL "Nivel de log por Syslog"
+#define D_MORE_DEBUG "Más Debug"
+#define D_SYSLOG_HOST "Host del Syslog"
+#define D_SYSLOG_PORT "Puerto del Syslog"
+#define D_TELEMETRY_PERIOD "Período de Telemetría"
+
+#define D_OTHER_PARAMETERS "Otros parámetros"
+#define D_TEMPLATE "Plantilla"
+#define D_ACTIVATE "Activar"
+#define D_WEB_ADMIN_PASSWORD "Clave Administrador Web"
+#define D_MQTT_ENABLE "Habilitar MQTT"
+#define D_FRIENDLY_NAME "Nombre Amigable"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "dispositivo simple"
+#define D_MULTI_DEVICE "dispositivo múltiple"
+
+#define D_CONFIGURE_TEMPLATE "Configurar Plantilla"
+#define D_TEMPLATE_PARAMETERS "Parámetros de Plantilla"
+#define D_TEMPLATE_NAME "Nombre"
+#define D_BASE_TYPE "Basada en"
+#define D_TEMPLATE_FLAGS "Opciones"
+
+#define D_SAVE_CONFIGURATION "Grabar configuración"
+#define D_CONFIGURATION_SAVED "Configuración grabada"
+#define D_CONFIGURATION_RESET "Configuración restablecida"
+
+#define D_PROGRAM_VERSION "Versión del Programa"
+#define D_BUILD_DATE_AND_TIME "Fecha y Hora de Compilación"
+#define D_CORE_AND_SDK_VERSION "Versión Core/SDK"
+#define D_FLASH_WRITE_COUNT "Contador de escritura en Flash"
+#define D_MAC_ADDRESS "Dirección MAC"
+#define D_MQTT_HOST "Host MQTT"
+#define D_MQTT_PORT "Puerto MQTT"
+#define D_MQTT_CLIENT "Cliente MQTT"
+#define D_MQTT_USER "Usuario MQTT"
+#define D_MQTT_TOPIC "Topic MQTT"
+#define D_MQTT_GROUP_TOPIC "Group Topic MQTT"
+#define D_MQTT_FULL_TOPIC "Full Topic MQTT"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Tamaño Flash"
+#define D_FREE_PROGRAM_SPACE "Memoria de Programa Libre"
+
+#define D_UPGRADE_BY_WEBSERVER "Actualizar por servidor web"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Comenzar actualización"
+#define D_UPGRADE_BY_FILE_UPLOAD "Actualizar cargando archivo bin"
+#define D_UPLOAD_STARTED "Cargando archivo"
+#define D_UPGRADE_STARTED "Actualización iniciada"
+#define D_UPLOAD_DONE "Carga finalizada"
+#define D_UPLOAD_ERR_1 "Ningún archivo seleccionado"
+#define D_UPLOAD_ERR_2 "Espacio insuficiente"
+#define D_UPLOAD_ERR_3 "Magic byte no corresponde a 0xE9"
+#define D_UPLOAD_ERR_4 "El tamaño de la memoria de programa es mayor que la de la flash"
+#define D_UPLOAD_ERR_5 "Error de comparación del buffer de carga"
+#define D_UPLOAD_ERR_6 "Carga fallida. Habilitar logging 3"
+#define D_UPLOAD_ERR_7 "Carga cancelada"
+#define D_UPLOAD_ERR_8 "Archivo no válido"
+#define D_UPLOAD_ERR_9 "Archivo muy grande"
+#define D_UPLOAD_ERR_10 "No inició chip RF"
+#define D_UPLOAD_ERR_11 "No se pudo borrar en el chip RF"
+#define D_UPLOAD_ERR_12 "No se puedo escribir en el chip RF"
+#define D_UPLOAD_ERR_13 "No se pudo decodificar firmware RF"
+#define D_UPLOAD_ERROR_CODE "Código de error de carga"
+
+#define D_ENTER_COMMAND "Ingresar comando"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 si desea respuesta"
+#define D_NEED_USER_AND_PASSWORD "Se necesita user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verificar TLS fingerprint..."
+#define D_TLS_CONNECT_FAILED_TO "Falló Conexión TLS a"
+#define D_RETRY_IN "Reintentando"
+#define D_VERIFIED "Verificado Fingerprint"
+#define D_INSECURE "Conexión insegura por Fingerprint inválido"
+#define D_CONNECT_FAILED_TO "Falló Conexión a"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast deshabilitado"
+#define D_MULTICAST_REJOINED "Multicast (re)conectado"
+#define D_MULTICAST_JOIN_FAILED "Conexión Multicast fallida"
+#define D_FAILED_TO_SEND_RESPONSE "Falla al enviar respuesta"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "Evento base de WeMo"
+#define D_WEMO_EVENT_SERVICE "Evento de servicio de WeMo"
+#define D_WEMO_META_SERVICE "Meta Servicio de WeMo"
+#define D_WEMO_SETUP "Configuración de WeMo"
+#define D_RESPONSE_SENT "Respuesta enviada"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Configuración Hue"
+#define D_HUE_API_NOT_IMPLEMENTED "API de Hue no implementada"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 paquetes de respuesta enviados"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Parámetros Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Potencia,Energía"
+ #define D_DOMOTICZ_ILLUMINANCE "Luminancia"
+ #define D_DOMOTICZ_COUNT "Contador/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltaje/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Corriente/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Calidad del Aire"
+ #define D_DOMOTICZ_P1_SMART_METER "Medidor Inteligente P1"
+#define D_DOMOTICZ_UPDATE_TIMER "Intervalo de refresco"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configuración Temporizadores"
+#define D_TIMER_PARAMETERS "Parámetros de Temporizadores"
+#define D_TIMER_ENABLE "Habilitar Temporizadores"
+#define D_TIMER_ARM "Activo"
+#define D_TIMER_TIME "Hora"
+#define D_TIMER_DAYS "Días"
+#define D_TIMER_REPEAT "Repetir"
+#define D_TIMER_OUTPUT "Salida"
+#define D_TIMER_ACTION "Estado"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configuración de KNX"
+#define D_KNX_PARAMETERS "Parámetros de KNX"
+#define D_KNX_GENERAL_CONFIG "General"
+#define D_KNX_PHYSICAL_ADDRESS "Dirección Física"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Debe ser única en la red KNX )"
+#define D_KNX_ENABLE "Habilitar KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Datos a Enviar a las Direcciones de Grupo"
+#define D_ADD "Agregar"
+#define D_DELETE "Eliminar"
+#define D_REPLY "Responder"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Direcciones de Grupo para Recibir Datos"
+#define D_RECEIVED_FROM "Recibido desde"
+#define D_KNX_COMMAND_WRITE "Escribir"
+#define D_KNX_COMMAND_READ "Leer"
+#define D_KNX_COMMAND_OTHER "Otro"
+#define D_SENT_TO "enviada a"
+#define D_KNX_WARNING "La dirección de grupo ( 0 / 0 / 0 ) está reservada y no puede ser utilizada."
+#define D_KNX_ENHANCEMENT "Mejora de Comunicación"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energía Hoy"
+#define D_ENERGY_YESTERDAY "Energía Ayer"
+#define D_ENERGY_TOTAL "Energía Total"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Abrir"
+#define D_CLOSE "Cerrar"
+#define D_DOMOTICZ_SHUTTER "Cortina"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configurar PCF8574"
+#define D_PCF8574_PARAMETERS "Parámetros de PCF8574"
+#define D_INVERT_PORTS "Invertir Puertos"
+#define D_DEVICE "Dispositivo"
+#define D_DEVICE_INPUT "Entrada"
+#define D_DEVICE_OUTPUT "Salida"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor ocupado"
+#define D_SENSOR_CRC_ERROR "Error CRC del Sensor"
+#define D_SENSORS_FOUND "Sensores encontrados"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Espera de timeout por"
+#define D_START_SIGNAL_LOW "iniciar señal baja"
+#define D_START_SIGNAL_HIGH "iniciar señal alta"
+#define D_PULSE "pulso"
+#define D_CHECKSUM_FAILURE "Falló Checksum"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor no ha enviado el comando ACK"
+#define D_SHT1X_FOUND "SHT1X encontrado"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Partículas"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remover Peso"
+#define D_HX_CAL_REFERENCE "Poner Peso de Referencia"
+#define D_HX_CAL_DONE "Calibrado"
+#define D_HX_CAL_FAIL "Falló Calibración"
+#define D_RESET_HX711 "Restablecer Escala"
+#define D_CONFIGURE_HX711 "Configurar Escala"
+#define D_HX711_PARAMETERS "Parámetros de Escala"
+#define D_ITEM_WEIGHT "Peso"
+#define D_REFERENCE_WEIGHT "Peso de Referencia"
+#define D_CALIBRATE "Calibrar"
+#define D_CALIBRATION "Calibración"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Dirección del Viento"
+#define D_TX20_WIND_SPEED "Vel. del Viento"
+#define D_TX20_WIND_SPEED_AVG "Vel. Prom. del Viento"
+#define D_TX20_WIND_SPEED_MAX "Vel. Max. del Viento"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "O"
+
+// 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 "User"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IR Tx"
+#define D_SENSOR_SWITCH "Llave" // Suffix "1"
+#define D_SENSOR_BUTTON "Botón" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Contador" // Suffix "1"
+#define D_SENSOR_IRRECV "IR Rx"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "seg"
+#define D_UNIT_SECTORS "sectores"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Ángulo de Fase"
+#define D_IMPORT_ACTIVE "P. Activa Entrante"
+#define D_EXPORT_ACTIVE "P. Activa Saliente"
+#define D_IMPORT_REACTIVE "P. Reactiva Entrante"
+#define D_EXPORT_REACTIVE "P. Reactiva Saliente"
+#define D_TOTAL_REACTIVE "P. Reactiva Total"
+#define D_UNIT_KWARH "kVArH"
+#define D_UNIT_ANGLE "Grados"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltaje"
+#define D_PV1_CURRENT "PV1 Corriente"
+#define D_PV1_POWER "PV1 Potencia"
+#define D_PV2_VOLTAGE "PV2 Voltaee"
+#define D_PV2_CURRENT "PV2 Corriente"
+#define D_PV2_POWER "PV2 Potencia"
+#define D_SOLAR_POWER "Potencia Solar"
+#define D_INVERTER_POWER "Potencia del Inversor"
+#define D_STATUS "Estado"
+#define D_WAITING "En Espera"
+#define D_CHECKING "Revisando"
+#define D_WORKING "Funcionando"
+#define D_FAILURE "Falla"
+#define D_SOLAX_ERROR_0 "Sin código de Error"
+#define D_SOLAX_ERROR_1 "Falla por Pérdida de Red"
+#define D_SOLAX_ERROR_2 "Falla por Voltaje de Red"
+#define D_SOLAX_ERROR_3 "Falla por Frecuencia de Red"
+#define D_SOLAX_ERROR_4 "Falla por Voltaje en PV"
+#define D_SOLAX_ERROR_5 "Falla de Aislación"
+#define D_SOLAX_ERROR_6 "Falla por sobretemperatura"
+#define D_SOLAX_ERROR_7 "Falla de Ventilador"
+#define D_SOLAX_ERROR_8 "Falla del Dispositivo"
+
+#endif // _LANGUAGE_ES_ES_H_
diff --git a/tasmota/language/fr-FR.h b/tasmota/language/fr-FR.h
index e107409e3..7b8d291b8 100644
--- a/tasmota/language/fr-FR.h
+++ b/tasmota/language/fr-FR.h
@@ -1,701 +1,703 @@
-/*
- fr-FR.h - localization for French - France for Tasmota
-
- Copyright (C) 2019 Olivier Francais
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_FR_FR_H_
-#define _LANGUAGE_FR_FR_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v7.1.2.4
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1036
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "fr"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "DimLunMarMerJeuVenSam"
-#define D_MONTH3LIST "JanFevMarAvrMaiJunJulAutSepOctNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Qualité de l'Air"
-#define D_AP "AP" // Access Point
-#define D_AS "comme"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Nombre de boot"
-#define D_BRIGHTLIGHT "Luminosité"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Bouton"
-#define D_BY "par" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Canal"
-#define D_CO2 "Dioxyde de carbone"
-#define D_CODE "code" // Button code
-#define D_COLDLIGHT "Froid"
-#define D_COMMAND "Commande"
-#define D_CONNECTED "Connecté"
-#define D_CORS_DOMAIN "Domaine CORS"
-#define D_COUNT "Compte"
-#define D_COUNTER "Compteur"
-#define D_CURRENT "Courant" // As in Voltage and Current
-#define D_DATA "Donnée"
-#define D_DARKLIGHT "Sombre"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Désactivé"
-#define D_DISTANCE "Distance"
-#define D_DNS_SERVER "Serveur DNS"
-#define D_DONE "Fait"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Émulation"
-#define D_ENABLED "Activé"
-#define D_ERASE "Effacer"
-#define D_ERROR "Erreur"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Échoué"
-#define D_FALLBACK "Secours"
-#define D_FALLBACK_TOPIC "Topic de secours"
-#define D_FALSE "Faux"
-#define D_FILE "Fichier"
-#define D_FLOW_RATE "Débit"
-#define D_FREE_MEMORY "Mémoire libre"
-#define D_FREQUENCY "Fréquence"
-#define D_GAS "Gaz"
-#define D_GATEWAY "Passerelle"
-#define D_GROUP "Groupe"
-#define D_HOST "Hôte"
-#define D_HOSTNAME "Nom d'Hôte"
-#define D_HUMIDITY "Humidité"
-#define D_ILLUMINANCE "Éclairement"
-#define D_IMMEDIATE "immédiat" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infra-rouge"
-#define D_INITIALIZED "Initialisé"
-#define D_IP_ADDRESS "Adresse IP"
-#define D_LIGHT "Lumière"
-#define D_LWT "LWT"
-#define D_MODULE "Module"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-pression"
-#define D_NOISE "Bruit"
-#define D_NONE "Aucun"
-#define D_OFF "Arrêt"
-#define D_OFFLINE "Déconnecté"
-#define D_OK "Ok"
-#define D_ON "Marche"
-#define D_ONLINE "Connecté"
-#define D_PASSWORD "Mot de passe"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Fact de puiss"
-#define D_POWERUSAGE "Puissance"
-#define D_POWERUSAGE_ACTIVE "Puiss active"
-#define D_POWERUSAGE_APPARENT "Puiss apparente"
-#define D_POWERUSAGE_REACTIVE "Puiss réactive"
-#define D_PRESSURE "Pression"
-#define D_PRESSUREATSEALEVEL "PressionMer"
-#define D_PROGRAM_FLASH_SIZE "Taille Flash Programme"
-#define D_PROGRAM_SIZE "Taille programme"
-#define D_PROJECT "Projet"
-#define D_RAIN "Pluie"
-#define D_RECEIVED "Reçu"
-#define D_RESTART "Redémarrage"
-#define D_RESTARTING "Redémarre"
-#define D_RESTART_REASON "Raison du redémarrage"
-#define D_RESTORE "restaurer"
-#define D_RETAINED "persistant" // MQTT
-#define D_RULE "Règle"
-#define D_SAVE "Enregistrer"
-#define D_SENSOR "Capteur"
-#define D_SSID "SSID"
-#define D_START "Lancer" // "Lancer la mise à jour"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Masque sous-réseau"
-#define D_SUBSCRIBE_TO "S'abonner à"
-#define D_UNSUBSCRIBE_FROM "Se désabonner de"
-#define D_SUCCESSFUL "Réussi"
-#define D_SUNRISE "Lever du jour"
-#define D_SUNSET "Tombée de la nuit"
-#define D_TEMPERATURE "Température"
-#define D_TO "à"
-#define D_TOGGLE "Inverser"
-#define D_TOPIC "Topic" // Keep MQTT keyword
-#define D_TOTAL_USAGE "Eau totale"
-#define D_TRANSMIT "Transmettre"
-#define D_TRUE "Vrai"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "la mise à jour" // "Lancer la mise à jour"
-#define D_UPLOAD "Upload" // Not better in french
-#define D_UPTIME "Durée d'activité"
-#define D_USER "Utilisateur"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Indice UV"
-#define D_UV_INDEX_1 "Faible"
-#define D_UV_INDEX_2 "Modéré"
-#define D_UV_INDEX_3 "Élevé"
-#define D_UV_INDEX_4 "Très élevé"
-#define D_UV_INDEX_5 "Brûlure niv.1/2"
-#define D_UV_INDEX_6 "Brûlure niv.3"
-#define D_UV_INDEX_7 "Hors échelle"
-#define D_UV_LEVEL "Niveau UV"
-#define D_UV_POWER "Puissance UV"
-#define D_VERSION "Version"
-#define D_VOLTAGE "Tension"
-#define D_WEIGHT "Poids"
-#define D_WARMLIGHT "Chaud"
-#define D_WEB_SERVER "Serveur web"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ATTENTION Cette version ne supporte pas les réglages persistants"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Journalisation série désactivée"
-#define D_SYSLOG_LOGGING_REENABLED "Jounalisation SysLog réactivée"
-
-#define D_SET_BAUDRATE_TO "Définir le débit à"
-#define D_RECEIVED_TOPIC "Topic reçu" // Terme MQTT
-#define D_DATA_SIZE "Taille données"
-#define D_ANALOG_INPUT "Analogique"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Boucle bloquée"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig ÉCHOUÉ avec status"
-#define D_ACTIVE_FOR_3_MINUTES "actif pour 3 minutes"
-#define D_FAILED_TO_START "Échec de démarrage"
-#define D_PATCH_ISSUE_2186 "Correction 2186"
-#define D_CONNECTING_TO_AP "Connexion à l'AP"
-#define D_IN_MODE "en mode"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Échec de connexion car aucune adresse IP n'a été reçue"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Échec de connexion car l'AP ne peut-être contacté"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Échec de connexion car le mot de passe de l'AP est incorrect"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Échec de connexion avec l'AP, expiré"
-#define D_ATTEMPTING_CONNECTION "Tentative de connexion..."
-#define D_CHECKING_CONNECTION "Vérification connexion..."
-#define D_QUERY_DONE "Requête terminée. Services MQTT trouvés"
-#define D_MQTT_SERVICE_FOUND "Service MQTT trouvé sur"
-#define D_FOUND_AT "trouvé à"
-#define D_SYSLOG_HOST_NOT_FOUND "Hôte SysLog introuvable"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Enregistré en flash à"
-#define D_LOADED_FROM_FLASH_AT "Chargé de la flash à"
-#define D_USE_DEFAULTS "Utiliser par défaut"
-#define D_ERASED_SECTOR "Secteur effacé"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Pour utiliser Tasmota, veuillez activer JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMAL
merci de mettre à jour"
-#define D_WEBSERVER_ACTIVE_ON "Serveur web actif sur"
-#define D_WITH_IP_ADDRESS "avec l'adresse IP"
-#define D_WEBSERVER_STOPPED "Serveur web éteint"
-#define D_FILE_NOT_FOUND "Fichier introuvable"
-#define D_REDIRECTED "Redirection sur le portail captif"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager en mode Point d'Accès et Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager en mode Point d'Accès"
-#define D_TRYING_TO_CONNECT "Tentative de connexion du module au réseau"
-
-#define D_RESTART_IN "Redémarrage dans"
-#define D_SECONDS "secondes"
-#define D_DEVICE_WILL_RESTART "Le module va redémarrer dans quelques secondes"
-#define D_BUTTON_TOGGLE "on/off"
-#define D_CONFIGURATION "Configuration"
-#define D_INFORMATION "Informations"
-#define D_FIRMWARE_UPGRADE "Mise à jour du Firmware"
-#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Confirmer redémarrage"
-
-#define D_CONFIGURE_MODULE "Configuration du Module"
-#define D_CONFIGURE_WIFI "Configuration WiFi"
-#define D_CONFIGURE_MQTT "Configuration MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configuration Domoticz"
-#define D_CONFIGURE_LOGGING "Configuration du journal"
-#define D_CONFIGURE_OTHER "Autre configuration"
-#define D_CONFIRM_RESET_CONFIGURATION "Confirmer la réinit. de la config."
-#define D_RESET_CONFIGURATION "Configuration par défaut"
-#define D_BACKUP_CONFIGURATION "Sauvegarde de la config."
-#define D_RESTORE_CONFIGURATION "Restauration de la config."
-#define D_MAIN_MENU "Menu principal"
-
-#define D_MODULE_PARAMETERS "Paramètres module"
-#define D_MODULE_TYPE "Type de module"
-#define D_PULLUP_ENABLE "Inter. sans pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Entrée série"
-#define D_SERIAL_OUT "Sortie série"
-
-#define D_WIFI_PARAMETERS "Paramètres Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Scan des réseaux wifi"
-#define D_SCAN_DONE "Scan terminé"
-#define D_NO_NETWORKS_FOUND "Aucun réseau trouvé"
-#define D_REFRESH_TO_SCAN_AGAIN "Rafraîchir pour scanner à nouveau"
-#define D_DUPLICATE_ACCESSPOINT "Point d'Accès dupliqué"
-#define D_SKIPPING_LOW_QUALITY "Évité car de mauvaise qualité"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSID"
-#define D_AP1_PASSWORD "Mot de passe AP1"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "Mot de passe AP2"
-
-#define D_MQTT_PARAMETERS "Paramètres MQTT"
-#define D_CLIENT "Client"
-#define D_FULL_TOPIC "Topic complet"
-
-#define D_LOGGING_PARAMETERS "Paramètres du journal"
-#define D_SERIAL_LOG_LEVEL "Niveau de journalisation série"
-#define D_MQTT_LOG_LEVEL "Niveau de journalisation MQTT"
-#define D_WEB_LOG_LEVEL "Niveau de journalisation web"
-#define D_SYS_LOG_LEVEL "Niveau SysLog"
-#define D_MORE_DEBUG "Plus de debug"
-#define D_SYSLOG_HOST "Hôte SysLog"
-#define D_SYSLOG_PORT "Port SysLog"
-#define D_TELEMETRY_PERIOD "Période télémétrie"
-
-#define D_OTHER_PARAMETERS "Autres paramètres"
-#define D_TEMPLATE "Modèle"
-#define D_ACTIVATE "Activer"
-#define D_WEB_ADMIN_PASSWORD "Mot de passe Web Admin"
-#define D_MQTT_ENABLE "MQTT activé"
-#define D_FRIENDLY_NAME "Surnom"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "module unique"
-#define D_MULTI_DEVICE "multi module"
-
-#define D_CONFIGURE_TEMPLATE "Configuration du modèle"
-#define D_TEMPLATE_PARAMETERS "Paramètres du modèle"
-#define D_TEMPLATE_NAME "Nom"
-#define D_BASE_TYPE "Basé sur"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Enregistrer la configuration"
-#define D_CONFIGURATION_SAVED "Configuration enregistrée"
-#define D_CONFIGURATION_RESET "Configuration réinitialisée"
-
-#define D_PROGRAM_VERSION "Version du programme"
-#define D_BUILD_DATE_AND_TIME "Date & Heure de build"
-#define D_CORE_AND_SDK_VERSION "Version Core/SDK"
-#define D_FLASH_WRITE_COUNT "Compteur écriture flash"
-#define D_MAC_ADDRESS "Adresse MAC"
-#define D_MQTT_HOST "Hôte MQTT"
-#define D_MQTT_PORT "Port MQTT"
-#define D_MQTT_CLIENT "Client MQTT"
-#define D_MQTT_USER "Utilisateur MQTT"
-#define D_MQTT_TOPIC "Topic MQTT"
-#define D_MQTT_GROUP_TOPIC "Groupe topic MQTT"
-#define D_MQTT_FULL_TOPIC "Topic complet MQTT"
-#define D_MDNS_DISCOVERY "Découverte mDNS"
-#define D_MDNS_ADVERTISE "Annonce mDNS"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Taille flash"
-#define D_FREE_PROGRAM_SPACE "Espace programme libre"
-
-#define D_UPGRADE_BY_WEBSERVER "Mise à jour par serveur web"
-#define D_OTA_URL "URL OTA"
-#define D_START_UPGRADE "Lancer la mise à jour"
-#define D_UPGRADE_BY_FILE_UPLOAD "Mise à jour par téléchargement fichier"
-#define D_UPLOAD_STARTED "Téléchargement lancé"
-#define D_UPGRADE_STARTED "Mise à jour lancée"
-#define D_UPLOAD_DONE "Téléchargement terminé"
-#define D_UPLOAD_ERR_1 "Aucun fichier sélectionné"
-#define D_UPLOAD_ERR_2 "Espace insuffisant"
-#define D_UPLOAD_ERR_3 "L'octet magique n'est pas 0xE9"
-#define D_UPLOAD_ERR_4 "La taille du programme à flasher est plus grande que la taille réelle de la mémoire flash"
-#define D_UPLOAD_ERR_5 "Erreur de comparaison du buffer de téléchargement"
-#define D_UPLOAD_ERR_6 "Téléchargement échoué. Activer WebLog 3"
-#define D_UPLOAD_ERR_7 "Téléchargement annulé"
-#define D_UPLOAD_ERR_8 "Fichier invalide"
-#define D_UPLOAD_ERR_9 "Fichier trop grand"
-#define D_UPLOAD_ERR_10 "Erreur d'initialisation du chip RF"
-#define D_UPLOAD_ERR_11 "Erreur d'effacement du chip RF"
-#define D_UPLOAD_ERR_12 "Erreur d'accès en écriture au chip RF"
-#define D_UPLOAD_ERR_13 "Erreur de décodage du firmware RF"
-#define D_UPLOAD_ERROR_CODE "Code d'erreur téléchargement"
-
-#define D_ENTER_COMMAND "Saisir une commande"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Activer WebLog 2 si une réponse est attendue"
-#define D_NEED_USER_AND_PASSWORD "Nécessite utilisateur=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Vérification d'empreinte TLS ..."
-#define D_TLS_CONNECT_FAILED_TO "Échec de connexion TLS à"
-#define D_RETRY_IN "Nouvelle tentative dans"
-#define D_VERIFIED "Vérifié par empreinte "
-#define D_INSECURE "Connexion non sécurisée car empreinte non vérifiée"
-#define D_CONNECT_FAILED_TO "Échec de connexion à"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast désactivé"
-#define D_MULTICAST_REJOINED "Multicast (re)joint"
-#define D_MULTICAST_JOIN_FAILED "Multicast échec abonnement"
-#define D_FAILED_TO_SEND_RESPONSE "Échec d'envoi réponse"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "Réglage WeMo"
-#define D_RESPONSE_SENT "Réponse envoyée"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Réglage Hue"
-#define D_HUE_API_NOT_IMPLEMENTED "API Hue non implémentée"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 paquets de réponse envoyés"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Paramètres Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Puissance,Énergie"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Compteur/PM1"
- #define D_DOMOTICZ_VOLTAGE "Tension/PM2,5"
- #define D_DOMOTICZ_CURRENT "Courant/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Qualité de l'air"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Durée de rafraichissement"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configuration des Timers"
-#define D_TIMER_PARAMETERS "Paramètres Timer"
-#define D_TIMER_ENABLE "Activer les Timers"
-#define D_TIMER_ARM "Armer"
-#define D_TIMER_TIME "Temps"
-#define D_TIMER_DAYS "Jours"
-#define D_TIMER_REPEAT "Répéter"
-#define D_TIMER_OUTPUT "Sortie"
-#define D_TIMER_ACTION "Action"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configuration de KNX"
-#define D_KNX_PARAMETERS "Paramètres KNX"
-#define D_KNX_GENERAL_CONFIG "Général"
-#define D_KNX_PHYSICAL_ADDRESS "Adresse individuelle" // Backbone/Line/Device -> Zone/Ligne/Participant
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Doit être unique sur le réseau KNX)"
-#define D_KNX_ENABLE "Activer KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Données à envoyer aux Adresses de Groupe"
-#define D_ADD "Ajoûter"
-#define D_DELETE "Supprimer"
-#define D_REPLY "Répondre"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Données à recevoir des Adresses de Groupe"
-#define D_RECEIVED_FROM "Reçu de"
-#define D_KNX_COMMAND_WRITE "Écrire"
-#define D_KNX_COMMAND_READ "Lire"
-#define D_KNX_COMMAND_OTHER "Autre"
-#define D_SENT_TO "envoyé à"
-#define D_KNX_WARNING "L'Adresse de Groupe (0/0/0) est réservée et ne peut être utilisée."
-#define D_KNX_ENHANCEMENT "Amélioration de la communication"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xsns_03_energy.ino
-#define D_ENERGY_TODAY "Énergie aujourd'hui"
-#define D_ENERGY_YESTERDAY "Énergie hier"
-#define D_ENERGY_TOTAL "Énergie totale"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Ouvert"
-#define D_CLOSE "Fermé"
-#define D_DOMOTICZ_SHUTTER "Volet"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configurer PCF8574"
-#define D_PCF8574_PARAMETERS "Paramètres PCF8574"
-#define D_INVERT_PORTS "Inverser les Ports"
-#define D_DEVICE "Module"
-#define D_DEVICE_INPUT "Entrée"
-#define D_DEVICE_OUTPUT "Sortie"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Capteur occupé"
-#define D_SENSOR_CRC_ERROR "Erreur CRC capteur"
-#define D_SENSORS_FOUND "Capteur trouvé"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Expiration du délai"
-#define D_START_SIGNAL_LOW "Signal Start bas"
-#define D_START_SIGNAL_HIGH "Signal Start haut"
-#define D_PULSE "Impulsion"
-#define D_CHECKSUM_FAILURE "Erreur checksum"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Le capteur n'a pas acquitté la commande"
-#define D_SHT1X_FOUND "SHT1X found"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particules"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accél. Axe-X"
-#define D_AY_AXIS "Accél. Axe-Y"
-#define D_AZ_AXIS "Accél. Axe-Z"
-#define D_GX_AXIS "Gyro Axe-X"
-#define D_GY_AXIS "Gyro Axe-Y"
-#define D_GZ_AXIS "Gyro Axe-Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Retirer la charge"
-#define D_HX_CAL_REFERENCE "Charger l'étalon de poids"
-#define D_HX_CAL_DONE "Étalonné"
-#define D_HX_CAL_FAIL "L'étalonnage a échoué"
-#define D_RESET_HX711 "Réinitialiser le capteur"
-#define D_CONFIGURE_HX711 "Configurer le capteur"
-#define D_HX711_PARAMETERS "Paramètres capteur"
-#define D_ITEM_WEIGHT "Poids de l'objet"
-#define D_REFERENCE_WEIGHT "Poids de référence"
-#define D_CALIBRATE "Étalonner"
-#define D_CALIBRATION "Étalonnage"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Direction du vent"
-#define D_TX20_WIND_SPEED "Vitesse du vent"
-#define D_TX20_WIND_SPEED_AVG "Vitesse Moy."
-#define D_TX20_WIND_SPEED_MAX "Vitesse Max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "O"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "ÉmetIR"
-#define D_SENSOR_SWITCH "Inter." // Suffix "1"
-#define D_SENSOR_BUTTON "Bouton" // Suffix "1"
-#define D_SENSOR_RELAY "Relais" // Suffix "1i"
-#define D_SENSOR_LED "LED" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Compteur" // Suffix "1"
-#define D_SENSOR_IRRECV "RécptIR"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "RétroÉcl"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "h"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "gal/mn"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h"
-#define D_UNIT_KILOOHM "kΩ"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
-#define D_UNIT_MICROMETER "µm"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "mn"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "s"
-#define D_UNIT_SECTORS "secteurs"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Angle de phase"
-#define D_IMPORT_ACTIVE "Énergie act conso"
-#define D_EXPORT_ACTIVE "Énergie act fournie"
-#define D_IMPORT_REACTIVE "Énergie réa conso"
-#define D_EXPORT_REACTIVE "Énergie réa fournie"
-#define D_TOTAL_REACTIVE "Énergie réa totale"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "°"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "Tension PV1"
-#define D_PV1_CURRENT "Courant PV1"
-#define D_PV1_POWER "Puissance PV1"
-#define D_PV2_VOLTAGE "Tension PV2"
-#define D_PV2_CURRENT "Courant PV2"
-#define D_PV2_POWER "Puissance PV2"
-#define D_SOLAR_POWER "Puissance solaire"
-#define D_INVERTER_POWER "Puissance onduleur"
-#define D_STATUS "Statut"
-#define D_WAITING "En attente"
-#define D_CHECKING "En test"
-#define D_WORKING "En marche"
-#define D_FAILURE "Défault"
-#define D_SOLAX_ERROR_0 "Aucun code d'erreur"
-#define D_SOLAX_ERROR_1 "Défaut Perte de réseau"
-#define D_SOLAX_ERROR_2 "Défaut Tension réseau"
-#define D_SOLAX_ERROR_3 "Défaut Fréquence réseau"
-#define D_SOLAX_ERROR_4 "Défaut Tension PV"
-#define D_SOLAX_ERROR_5 "Défaut Isolation"
-#define D_SOLAX_ERROR_6 "Défaut Surchauffe"
-#define D_SOLAX_ERROR_7 "Défaut Ventilateur"
-#define D_SOLAX_ERROR_8 "Défaut Autre équipement"
-
-#endif // _LANGUAGE_FR_FR_H_
+/*
+ fr-FR.h - localization for French - France for Tasmota
+
+ Copyright (C) 2019 Olivier Francais
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_FR_FR_H_
+#define _LANGUAGE_FR_FR_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v7.1.2.4
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1036
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "fr"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "DimLunMarMerJeuVenSam"
+#define D_MONTH3LIST "JanFevMarAvrMaiJunJulAutSepOctNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Qualité de l'Air"
+#define D_AP "AP" // Access Point
+#define D_AS "comme"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Nombre de boot"
+#define D_BRIGHTLIGHT "Luminosité"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Bouton"
+#define D_BY "par" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Canal"
+#define D_CO2 "Dioxyde de carbone"
+#define D_CODE "code" // Button code
+#define D_COLDLIGHT "Froid"
+#define D_COMMAND "Commande"
+#define D_CONNECTED "Connecté"
+#define D_CORS_DOMAIN "Domaine CORS"
+#define D_COUNT "Compte"
+#define D_COUNTER "Compteur"
+#define D_CURRENT "Courant" // As in Voltage and Current
+#define D_DATA "Donnée"
+#define D_DARKLIGHT "Sombre"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Désactivé"
+#define D_DISTANCE "Distance"
+#define D_DNS_SERVER "Serveur DNS"
+#define D_DONE "Fait"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Émulation"
+#define D_ENABLED "Activé"
+#define D_ERASE "Effacer"
+#define D_ERROR "Erreur"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Échoué"
+#define D_FALLBACK "Secours"
+#define D_FALLBACK_TOPIC "Topic de secours"
+#define D_FALSE "Faux"
+#define D_FILE "Fichier"
+#define D_FLOW_RATE "Débit"
+#define D_FREE_MEMORY "Mémoire libre"
+#define D_FREQUENCY "Fréquence"
+#define D_GAS "Gaz"
+#define D_GATEWAY "Passerelle"
+#define D_GROUP "Groupe"
+#define D_HOST "Hôte"
+#define D_HOSTNAME "Nom d'Hôte"
+#define D_HUMIDITY "Humidité"
+#define D_ILLUMINANCE "Éclairement"
+#define D_IMMEDIATE "immédiat" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infra-rouge"
+#define D_INITIALIZED "Initialisé"
+#define D_IP_ADDRESS "Adresse IP"
+#define D_LIGHT "Lumière"
+#define D_LWT "LWT"
+#define D_MODULE "Module"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-pression"
+#define D_NOISE "Bruit"
+#define D_NONE "Aucun"
+#define D_OFF "Arrêt"
+#define D_OFFLINE "Déconnecté"
+#define D_OK "Ok"
+#define D_ON "Marche"
+#define D_ONLINE "Connecté"
+#define D_PASSWORD "Mot de passe"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Fact de puiss"
+#define D_POWERUSAGE "Puissance"
+#define D_POWERUSAGE_ACTIVE "Puiss active"
+#define D_POWERUSAGE_APPARENT "Puiss apparente"
+#define D_POWERUSAGE_REACTIVE "Puiss réactive"
+#define D_PRESSURE "Pression"
+#define D_PRESSUREATSEALEVEL "PressionMer"
+#define D_PROGRAM_FLASH_SIZE "Taille Flash Programme"
+#define D_PROGRAM_SIZE "Taille programme"
+#define D_PROJECT "Projet"
+#define D_RAIN "Pluie"
+#define D_RECEIVED "Reçu"
+#define D_RESTART "Redémarrage"
+#define D_RESTARTING "Redémarre"
+#define D_RESTART_REASON "Raison du redémarrage"
+#define D_RESTORE "restaurer"
+#define D_RETAINED "persistant" // MQTT
+#define D_RULE "Règle"
+#define D_SAVE "Enregistrer"
+#define D_SENSOR "Capteur"
+#define D_SSID "SSID"
+#define D_START "Lancer" // "Lancer la mise à jour"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Masque sous-réseau"
+#define D_SUBSCRIBE_TO "S'abonner à"
+#define D_UNSUBSCRIBE_FROM "Se désabonner de"
+#define D_SUCCESSFUL "Réussi"
+#define D_SUNRISE "Lever du jour"
+#define D_SUNSET "Tombée de la nuit"
+#define D_TEMPERATURE "Température"
+#define D_TO "à"
+#define D_TOGGLE "Inverser"
+#define D_TOPIC "Topic" // Keep MQTT keyword
+#define D_TOTAL_USAGE "Eau totale"
+#define D_TRANSMIT "Transmettre"
+#define D_TRUE "Vrai"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "la mise à jour" // "Lancer la mise à jour"
+#define D_UPLOAD "Upload" // Not better in french
+#define D_UPTIME "Durée d'activité"
+#define D_USER "Utilisateur"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Indice UV"
+#define D_UV_INDEX_1 "Faible"
+#define D_UV_INDEX_2 "Modéré"
+#define D_UV_INDEX_3 "Élevé"
+#define D_UV_INDEX_4 "Très élevé"
+#define D_UV_INDEX_5 "Brûlure niv.1/2"
+#define D_UV_INDEX_6 "Brûlure niv.3"
+#define D_UV_INDEX_7 "Hors échelle"
+#define D_UV_LEVEL "Niveau UV"
+#define D_UV_POWER "Puissance UV"
+#define D_VERSION "Version"
+#define D_VOLTAGE "Tension"
+#define D_WEIGHT "Poids"
+#define D_WARMLIGHT "Chaud"
+#define D_WEB_SERVER "Serveur web"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ATTENTION Cette version ne supporte pas les réglages persistants"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Journalisation série désactivée"
+#define D_SYSLOG_LOGGING_REENABLED "Jounalisation SysLog réactivée"
+
+#define D_SET_BAUDRATE_TO "Définir le débit à"
+#define D_RECEIVED_TOPIC "Topic reçu" // Terme MQTT
+#define D_DATA_SIZE "Taille données"
+#define D_ANALOG_INPUT "Analogique"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Boucle bloquée"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig ÉCHOUÉ avec status"
+#define D_ACTIVE_FOR_3_MINUTES "actif pour 3 minutes"
+#define D_FAILED_TO_START "Échec de démarrage"
+#define D_PATCH_ISSUE_2186 "Correction 2186"
+#define D_CONNECTING_TO_AP "Connexion à l'AP"
+#define D_IN_MODE "en mode"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Échec de connexion car aucune adresse IP n'a été reçue"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Échec de connexion car l'AP ne peut-être contacté"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Échec de connexion car le mot de passe de l'AP est incorrect"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Échec de connexion avec l'AP, expiré"
+#define D_ATTEMPTING_CONNECTION "Tentative de connexion..."
+#define D_CHECKING_CONNECTION "Vérification connexion..."
+#define D_QUERY_DONE "Requête terminée. Services MQTT trouvés"
+#define D_MQTT_SERVICE_FOUND "Service MQTT trouvé sur"
+#define D_FOUND_AT "trouvé à"
+#define D_SYSLOG_HOST_NOT_FOUND "Hôte SysLog introuvable"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Enregistré en flash à"
+#define D_LOADED_FROM_FLASH_AT "Chargé de la flash à"
+#define D_USE_DEFAULTS "Utiliser par défaut"
+#define D_ERASED_SECTOR "Secteur effacé"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Pour utiliser Tasmota, veuillez activer JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMAL
merci de mettre à jour"
+#define D_WEBSERVER_ACTIVE_ON "Serveur web actif sur"
+#define D_WITH_IP_ADDRESS "avec l'adresse IP"
+#define D_WEBSERVER_STOPPED "Serveur web éteint"
+#define D_FILE_NOT_FOUND "Fichier introuvable"
+#define D_REDIRECTED "Redirection sur le portail captif"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager en mode Point d'Accès et Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager en mode Point d'Accès"
+#define D_TRYING_TO_CONNECT "Tentative de connexion du module au réseau"
+
+#define D_RESTART_IN "Redémarrage dans"
+#define D_SECONDS "secondes"
+#define D_DEVICE_WILL_RESTART "Le module va redémarrer dans quelques secondes"
+#define D_BUTTON_TOGGLE "on/off"
+#define D_CONFIGURATION "Configuration"
+#define D_INFORMATION "Informations"
+#define D_FIRMWARE_UPGRADE "Mise à jour du Firmware"
+#define D_CONSOLE "Console"
+#define D_CONFIRM_RESTART "Confirmer redémarrage"
+
+#define D_CONFIGURE_MODULE "Configuration du Module"
+#define D_CONFIGURE_WIFI "Configuration WiFi"
+#define D_CONFIGURE_MQTT "Configuration MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configuration Domoticz"
+#define D_CONFIGURE_LOGGING "Configuration du journal"
+#define D_CONFIGURE_OTHER "Autre configuration"
+#define D_CONFIRM_RESET_CONFIGURATION "Confirmer la réinit. de la config."
+#define D_RESET_CONFIGURATION "Configuration par défaut"
+#define D_BACKUP_CONFIGURATION "Sauvegarde de la config."
+#define D_RESTORE_CONFIGURATION "Restauration de la config."
+#define D_MAIN_MENU "Menu principal"
+
+#define D_MODULE_PARAMETERS "Paramètres module"
+#define D_MODULE_TYPE "Type de module"
+#define D_PULLUP_ENABLE "Inter. sans pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Entrée série"
+#define D_SERIAL_OUT "Sortie série"
+
+#define D_WIFI_PARAMETERS "Paramètres Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Scan des réseaux wifi"
+#define D_SCAN_DONE "Scan terminé"
+#define D_NO_NETWORKS_FOUND "Aucun réseau trouvé"
+#define D_REFRESH_TO_SCAN_AGAIN "Rafraîchir pour scanner à nouveau"
+#define D_DUPLICATE_ACCESSPOINT "Point d'Accès dupliqué"
+#define D_SKIPPING_LOW_QUALITY "Évité car de mauvaise qualité"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSID"
+#define D_AP1_PASSWORD "Mot de passe AP1"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "Mot de passe AP2"
+
+#define D_MQTT_PARAMETERS "Paramètres MQTT"
+#define D_CLIENT "Client"
+#define D_FULL_TOPIC "Topic complet"
+
+#define D_LOGGING_PARAMETERS "Paramètres du journal"
+#define D_SERIAL_LOG_LEVEL "Niveau de journalisation série"
+#define D_MQTT_LOG_LEVEL "Niveau de journalisation MQTT"
+#define D_WEB_LOG_LEVEL "Niveau de journalisation web"
+#define D_SYS_LOG_LEVEL "Niveau SysLog"
+#define D_MORE_DEBUG "Plus de debug"
+#define D_SYSLOG_HOST "Hôte SysLog"
+#define D_SYSLOG_PORT "Port SysLog"
+#define D_TELEMETRY_PERIOD "Période télémétrie"
+
+#define D_OTHER_PARAMETERS "Autres paramètres"
+#define D_TEMPLATE "Modèle"
+#define D_ACTIVATE "Activer"
+#define D_WEB_ADMIN_PASSWORD "Mot de passe Web Admin"
+#define D_MQTT_ENABLE "MQTT activé"
+#define D_FRIENDLY_NAME "Surnom"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "module unique"
+#define D_MULTI_DEVICE "multi module"
+
+#define D_CONFIGURE_TEMPLATE "Configuration du modèle"
+#define D_TEMPLATE_PARAMETERS "Paramètres du modèle"
+#define D_TEMPLATE_NAME "Nom"
+#define D_BASE_TYPE "Basé sur"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Enregistrer la configuration"
+#define D_CONFIGURATION_SAVED "Configuration enregistrée"
+#define D_CONFIGURATION_RESET "Configuration réinitialisée"
+
+#define D_PROGRAM_VERSION "Version du programme"
+#define D_BUILD_DATE_AND_TIME "Date & Heure de build"
+#define D_CORE_AND_SDK_VERSION "Version Core/SDK"
+#define D_FLASH_WRITE_COUNT "Compteur écriture flash"
+#define D_MAC_ADDRESS "Adresse MAC"
+#define D_MQTT_HOST "Hôte MQTT"
+#define D_MQTT_PORT "Port MQTT"
+#define D_MQTT_CLIENT "Client MQTT"
+#define D_MQTT_USER "Utilisateur MQTT"
+#define D_MQTT_TOPIC "Topic MQTT"
+#define D_MQTT_GROUP_TOPIC "Groupe topic MQTT"
+#define D_MQTT_FULL_TOPIC "Topic complet MQTT"
+#define D_MDNS_DISCOVERY "Découverte mDNS"
+#define D_MDNS_ADVERTISE "Annonce mDNS"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Taille flash"
+#define D_FREE_PROGRAM_SPACE "Espace programme libre"
+
+#define D_UPGRADE_BY_WEBSERVER "Mise à jour par serveur web"
+#define D_OTA_URL "URL OTA"
+#define D_START_UPGRADE "Lancer la mise à jour"
+#define D_UPGRADE_BY_FILE_UPLOAD "Mise à jour par téléchargement fichier"
+#define D_UPLOAD_STARTED "Téléchargement lancé"
+#define D_UPGRADE_STARTED "Mise à jour lancée"
+#define D_UPLOAD_DONE "Téléchargement terminé"
+#define D_UPLOAD_ERR_1 "Aucun fichier sélectionné"
+#define D_UPLOAD_ERR_2 "Espace insuffisant"
+#define D_UPLOAD_ERR_3 "L'octet magique n'est pas 0xE9"
+#define D_UPLOAD_ERR_4 "La taille du programme à flasher est plus grande que la taille réelle de la mémoire flash"
+#define D_UPLOAD_ERR_5 "Erreur de comparaison du buffer de téléchargement"
+#define D_UPLOAD_ERR_6 "Téléchargement échoué. Activer WebLog 3"
+#define D_UPLOAD_ERR_7 "Téléchargement annulé"
+#define D_UPLOAD_ERR_8 "Fichier invalide"
+#define D_UPLOAD_ERR_9 "Fichier trop grand"
+#define D_UPLOAD_ERR_10 "Erreur d'initialisation du chip RF"
+#define D_UPLOAD_ERR_11 "Erreur d'effacement du chip RF"
+#define D_UPLOAD_ERR_12 "Erreur d'accès en écriture au chip RF"
+#define D_UPLOAD_ERR_13 "Erreur de décodage du firmware RF"
+#define D_UPLOAD_ERROR_CODE "Code d'erreur téléchargement"
+
+#define D_ENTER_COMMAND "Saisir une commande"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Activer WebLog 2 si une réponse est attendue"
+#define D_NEED_USER_AND_PASSWORD "Nécessite utilisateur=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Vérification d'empreinte TLS ..."
+#define D_TLS_CONNECT_FAILED_TO "Échec de connexion TLS à"
+#define D_RETRY_IN "Nouvelle tentative dans"
+#define D_VERIFIED "Vérifié par empreinte "
+#define D_INSECURE "Connexion non sécurisée car empreinte non vérifiée"
+#define D_CONNECT_FAILED_TO "Échec de connexion à"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast désactivé"
+#define D_MULTICAST_REJOINED "Multicast (re)joint"
+#define D_MULTICAST_JOIN_FAILED "Multicast échec abonnement"
+#define D_FAILED_TO_SEND_RESPONSE "Échec d'envoi réponse"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "Réglage WeMo"
+#define D_RESPONSE_SENT "Réponse envoyée"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Réglage Hue"
+#define D_HUE_API_NOT_IMPLEMENTED "API Hue non implémentée"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 paquets de réponse envoyés"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Paramètres Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Puissance,Énergie"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Compteur/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Tension/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Courant/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Qualité de l'air"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Durée de rafraichissement"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configuration des Timers"
+#define D_TIMER_PARAMETERS "Paramètres Timer"
+#define D_TIMER_ENABLE "Activer les Timers"
+#define D_TIMER_ARM "Armer"
+#define D_TIMER_TIME "Temps"
+#define D_TIMER_DAYS "Jours"
+#define D_TIMER_REPEAT "Répéter"
+#define D_TIMER_OUTPUT "Sortie"
+#define D_TIMER_ACTION "Action"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configuration de KNX"
+#define D_KNX_PARAMETERS "Paramètres KNX"
+#define D_KNX_GENERAL_CONFIG "Général"
+#define D_KNX_PHYSICAL_ADDRESS "Adresse individuelle" // Backbone/Line/Device -> Zone/Ligne/Participant
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Doit être unique sur le réseau KNX)"
+#define D_KNX_ENABLE "Activer KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Données à envoyer aux Adresses de Groupe"
+#define D_ADD "Ajoûter"
+#define D_DELETE "Supprimer"
+#define D_REPLY "Répondre"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Données à recevoir des Adresses de Groupe"
+#define D_RECEIVED_FROM "Reçu de"
+#define D_KNX_COMMAND_WRITE "Écrire"
+#define D_KNX_COMMAND_READ "Lire"
+#define D_KNX_COMMAND_OTHER "Autre"
+#define D_SENT_TO "envoyé à"
+#define D_KNX_WARNING "L'Adresse de Groupe (0/0/0) est réservée et ne peut être utilisée."
+#define D_KNX_ENHANCEMENT "Amélioration de la communication"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xsns_03_energy.ino
+#define D_ENERGY_TODAY "Énergie aujourd'hui"
+#define D_ENERGY_YESTERDAY "Énergie hier"
+#define D_ENERGY_TOTAL "Énergie totale"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Ouvert"
+#define D_CLOSE "Fermé"
+#define D_DOMOTICZ_SHUTTER "Volet"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configurer PCF8574"
+#define D_PCF8574_PARAMETERS "Paramètres PCF8574"
+#define D_INVERT_PORTS "Inverser les Ports"
+#define D_DEVICE "Module"
+#define D_DEVICE_INPUT "Entrée"
+#define D_DEVICE_OUTPUT "Sortie"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Capteur occupé"
+#define D_SENSOR_CRC_ERROR "Erreur CRC capteur"
+#define D_SENSORS_FOUND "Capteur trouvé"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Expiration du délai"
+#define D_START_SIGNAL_LOW "Signal Start bas"
+#define D_START_SIGNAL_HIGH "Signal Start haut"
+#define D_PULSE "Impulsion"
+#define D_CHECKSUM_FAILURE "Erreur checksum"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Le capteur n'a pas acquitté la commande"
+#define D_SHT1X_FOUND "SHT1X found"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particules"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accél. Axe-X"
+#define D_AY_AXIS "Accél. Axe-Y"
+#define D_AZ_AXIS "Accél. Axe-Z"
+#define D_GX_AXIS "Gyro Axe-X"
+#define D_GY_AXIS "Gyro Axe-Y"
+#define D_GZ_AXIS "Gyro Axe-Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Retirer la charge"
+#define D_HX_CAL_REFERENCE "Charger l'étalon de poids"
+#define D_HX_CAL_DONE "Étalonné"
+#define D_HX_CAL_FAIL "L'étalonnage a échoué"
+#define D_RESET_HX711 "Réinitialiser le capteur"
+#define D_CONFIGURE_HX711 "Configurer le capteur"
+#define D_HX711_PARAMETERS "Paramètres capteur"
+#define D_ITEM_WEIGHT "Poids de l'objet"
+#define D_REFERENCE_WEIGHT "Poids de référence"
+#define D_CALIBRATE "Étalonner"
+#define D_CALIBRATION "Étalonnage"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Direction du vent"
+#define D_TX20_WIND_SPEED "Vitesse du vent"
+#define D_TX20_WIND_SPEED_AVG "Vitesse Moy."
+#define D_TX20_WIND_SPEED_MAX "Vitesse Max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "O"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "ÉmetIR"
+#define D_SENSOR_SWITCH "Inter." // Suffix "1"
+#define D_SENSOR_BUTTON "Bouton" // Suffix "1"
+#define D_SENSOR_RELAY "Relais" // Suffix "1i"
+#define D_SENSOR_LED "LED" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Compteur" // Suffix "1"
+#define D_SENSOR_IRRECV "RécptIR"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "RétroÉcl"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "h"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "gal/mn"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h"
+#define D_UNIT_KILOOHM "kΩ"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
+#define D_UNIT_MICROMETER "µm"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "mn"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "s"
+#define D_UNIT_SECTORS "secteurs"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Angle de phase"
+#define D_IMPORT_ACTIVE "Énergie act conso"
+#define D_EXPORT_ACTIVE "Énergie act fournie"
+#define D_IMPORT_REACTIVE "Énergie réa conso"
+#define D_EXPORT_REACTIVE "Énergie réa fournie"
+#define D_TOTAL_REACTIVE "Énergie réa totale"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "°"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "Tension PV1"
+#define D_PV1_CURRENT "Courant PV1"
+#define D_PV1_POWER "Puissance PV1"
+#define D_PV2_VOLTAGE "Tension PV2"
+#define D_PV2_CURRENT "Courant PV2"
+#define D_PV2_POWER "Puissance PV2"
+#define D_SOLAR_POWER "Puissance solaire"
+#define D_INVERTER_POWER "Puissance onduleur"
+#define D_STATUS "Statut"
+#define D_WAITING "En attente"
+#define D_CHECKING "En test"
+#define D_WORKING "En marche"
+#define D_FAILURE "Défault"
+#define D_SOLAX_ERROR_0 "Aucun code d'erreur"
+#define D_SOLAX_ERROR_1 "Défaut Perte de réseau"
+#define D_SOLAX_ERROR_2 "Défaut Tension réseau"
+#define D_SOLAX_ERROR_3 "Défaut Fréquence réseau"
+#define D_SOLAX_ERROR_4 "Défaut Tension PV"
+#define D_SOLAX_ERROR_5 "Défaut Isolation"
+#define D_SOLAX_ERROR_6 "Défaut Surchauffe"
+#define D_SOLAX_ERROR_7 "Défaut Ventilateur"
+#define D_SOLAX_ERROR_8 "Défaut Autre équipement"
+
+#endif // _LANGUAGE_FR_FR_H_
diff --git a/tasmota/language/he-HE.h b/tasmota/language/he-HE.h
index ac4dadb8e..869c31fb7 100644
--- a/tasmota/language/he-HE.h
+++ b/tasmota/language/he-HE.h
@@ -1,701 +1,703 @@
-/*
- he-HE.h - localization for Hebrew - Israel for Tasmota
-
- Copyright (C) 2019 Yuval Mejahez
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_HE_HE_H_
-#define _LANGUAGE_HE_HE_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.14.0b
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1037
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "he"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "SunMonTueWedThuFriSat"
-#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "מנהל"
-#define D_AIR_QUALITY "איכות אוויר"
-#define D_AP "AP" // Access Point
-#define D_AS "-כ"
-#define D_AUTO "אוטומטי"
-#define D_BLINK "מהבהב"
-#define D_BLINKOFF "כיבוי היבהוב"
-#define D_BOOT_COUNT "מונה הפעלה מחדש"
-#define D_BRIGHTLIGHT "בהירות"
-#define D_BSSID "BSSId"
-#define D_BUTTON "לחצן"
-#define D_BY "על ידי" // Written by me
-#define D_BYTES "בייט"
-#define D_CELSIUS "צלזיוס"
-#define D_CHANNEL "ערוץ"
-#define D_CO2 "פחמן דו חמצני"
-#define D_CODE "קוד" // Button code
-#define D_COLDLIGHT "אור קר"
-#define D_COMMAND "פקודה"
-#define D_CONNECTED "מחובר"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "סופר"
-#define D_COUNTER "מונה"
-#define D_CURRENT "נוכחי" // As in Voltage and Current
-#define D_DATA "נתונים"
-#define D_DARKLIGHT "חושך"
-#define D_DEBUG "באגים"
-#define D_DISABLED "מבוטל"
-#define D_DISTANCE "מרחק"
-#define D_DNS_SERVER "DNS שרת"
-#define D_DONE "סיים"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "הדמיה"
-#define D_ENABLED "מאופשר"
-#define D_ERASE "מחיקה"
-#define D_ERROR "שגיאה"
-#define D_FAHRENHEIT "פרנהייט"
-#define D_FAILED "נכשל"
-#define D_FALLBACK "חזרה"
-#define D_FALLBACK_TOPIC "נושא לחזרה"
-#define D_FALSE "שגוי"
-#define D_FILE "קובץ"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "זכרון פנוי"
-#define D_FREQUENCY "תדר"
-#define D_GAS "גז"
-#define D_GATEWAY "שער"
-#define D_GROUP "קבוצה"
-#define D_HOST "מארח"
-#define D_HOSTNAME "שם מארח"
-#define D_HUMIDITY "לחות"
-#define D_ILLUMINANCE "רמת חשיפה"
-#define D_IMMEDIATE "מידי" // Button immediate
-#define D_INDEX "אינדקס"
-#define D_INFO "מידע"
-#define D_INFRARED "אינפרא"
-#define D_INITIALIZED "מאותחל"
-#define D_IP_ADDRESS "IP כתובת"
-#define D_LIGHT "אור"
-#define D_LWT "LWT"
-#define D_MODULE "מודול"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "לחיצה מרובה"
-#define D_NOISE "רעש"
-#define D_NONE "כלום"
-#define D_OFF "כבוי"
-#define D_OFFLINE "מנותק"
-#define D_OK "אוקיי"
-#define D_ON "פועל"
-#define D_ONLINE "מחובר"
-#define D_PASSWORD "סיסמא"
-#define D_PORT "פורט"
-#define D_POWER_FACTOR "גורם כוח"
-#define D_POWERUSAGE "כוח"
-#define D_POWERUSAGE_ACTIVE "כוח פעיל"
-#define D_POWERUSAGE_APPARENT "כוח לכאורה"
-#define D_POWERUSAGE_REACTIVE "כוח תגובתי"
-#define D_PRESSURE "לחץ"
-#define D_PRESSUREATSEALEVEL "לחץ ימי"
-#define D_PROGRAM_FLASH_SIZE "גודל תוכנית פלאש"
-#define D_PROGRAM_SIZE "גודל תוכנית"
-#define D_PROJECT "פרויקט"
-#define D_RAIN "גשם"
-#define D_RECEIVED "התקבל"
-#define D_RESTART "איתחול"
-#define D_RESTARTING "הפעלה מחדש"
-#define D_RESTART_REASON "סיבת הפעלה מחדש"
-#define D_RESTORE "שחזור"
-#define D_RETAINED "שמור"
-#define D_RULE "חוק"
-#define D_SAVE "שמירה"
-#define D_SENSOR "חיישן"
-#define D_SSID "SSId"
-#define D_START "התחלה"
-#define D_STD_TIME "STD"
-#define D_STOP "עצירה"
-#define D_SUBNET_MASK "רשת מסכת משנה"
-#define D_SUBSCRIBE_TO "הרשם ל"
-#define D_UNSUBSCRIBE_FROM "בטל רישום"
-#define D_SUCCESSFUL "הצליח"
-#define D_SUNRISE "זריחה"
-#define D_SUNSET "שקיעה"
-#define D_TEMPERATURE "טמפרטורה"
-#define D_TO "ל"
-#define D_TOGGLE "מתג"
-#define D_TOPIC "נושא"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "עבר"
-#define D_TRUE "נכון"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "שדרוג"
-#define D_UPLOAD "העלאה"
-#define D_UPTIME "זמן עליה"
-#define D_USER "משתמש"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV אינדקס"
-#define D_UV_INDEX_1 "Low"
-#define D_UV_INDEX_2 "Mid"
-#define D_UV_INDEX_3 "High"
-#define D_UV_INDEX_4 "Danger"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR" // Out of Range
-#define D_UV_LEVEL "UV רמת"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "גרסה"
-#define D_VOLTAGE "מתח"
-#define D_WEIGHT "משקל"
-#define D_WARMLIGHT "חום"
-#define D_WEB_SERVER "Web שרת"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "אזהרה גרסה זו אינה תומכת בהגדרות קבועות"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "רישום טורי מושבת"
-#define D_SYSLOG_LOGGING_REENABLED "הופעל מחדש Syslog רישום"
-
-#define D_SET_BAUDRATE_TO "הגדר קצב שידור ל"
-#define D_RECEIVED_TOPIC "Topic התקבל"
-#define D_DATA_SIZE "גודל נתונים"
-#define D_ANALOG_INPUT "אנלוגי"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "לולאות חסומות"
-#define D_WPS_FAILED_WITH_STATUS "נכשל עם הסטטוס WPSconfig"
-#define D_ACTIVE_FOR_3_MINUTES "פעיל במשך 3 דקות"
-#define D_FAILED_TO_START "נכשל בנסיון להתחיל"
-#define D_PATCH_ISSUE_2186 "בעית תיקון 2186"
-#define D_CONNECTING_TO_AP "AP -מתחבר ל"
-#define D_IN_MODE "במצב"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP החיבור נכשל מכיוון שלא התקבלה כתובת"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "זמין AP החיבור נכשל כיוון שאין"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "סיסמא שגויה , AP חיבור נכשל ל"
-#define D_CONNECT_FAILED_AP_TIMEOUT "פג זמן המתנה , AP חיבור נכשל ל"
-#define D_ATTEMPTING_CONNECTION "...מנסה להתחבר"
-#define D_CHECKING_CONNECTION "...בודק חיבור"
-#define D_QUERY_DONE "MQTT השאילתה נעשתה. נמצאו שירותי"
-#define D_MQTT_SERVICE_FOUND "MQTT נמצאו שירותי"
-#define D_FOUND_AT "נמצא ב"
-#define D_SYSLOG_HOST_NOT_FOUND "לא נמצא Syslog מארח"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "נשמר לפלאש ב"
-#define D_LOADED_FROM_FLASH_AT "נטען מהפלאש מ"
-#define D_USE_DEFAULTS "השתמש בהגדרות ברירת המחדל"
-#define D_ERASED_SECTOR "סקטור מחוק"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "JavaScript - כדי להשתמש בקושחת אסמוטה אנא הפעל"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "קושחה מינימלית
בבקשה אנא שדרג"
-#define D_WEBSERVER_ACTIVE_ON "שרת ווב פעיל"
-#define D_WITH_IP_ADDRESS "IP עם כתובת"
-#define D_WEBSERVER_STOPPED "שרת ווב הופסק"
-#define D_FILE_NOT_FOUND "קובץ לא נמצא"
-#define D_REDIRECTED "הופנה מחדש לפורטל"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
-#define D_TRYING_TO_CONNECT "מנסה לחבר את ההתקן לרשת"
-
-#define D_RESTART_IN "הפעלה מחדש תוך"
-#define D_SECONDS "שניות"
-#define D_DEVICE_WILL_RESTART "ההתקן יופעל מחדש בעוד מס' שניות"
-#define D_BUTTON_TOGGLE "מצב"
-#define D_CONFIGURATION "הגדרות"
-#define D_INFORMATION "מידע"
-#define D_FIRMWARE_UPGRADE "שדרוג קושחה"
-#define D_CONSOLE "קונסול"
-#define D_CONFIRM_RESTART "אישור הפעלה מחדש"
-
-#define D_CONFIGURE_MODULE "הגדרות מודול"
-#define D_CONFIGURE_WIFI "WIFI הגדרות"
-#define D_CONFIGURE_MQTT "MQTT הגדרות"
-#define D_CONFIGURE_DOMOTICZ "Domoticz הגדרות"
-#define D_CONFIGURE_LOGGING "הגדרת לוגים"
-#define D_CONFIGURE_OTHER "הגדרות שונות"
-#define D_CONFIRM_RESET_CONFIGURATION "אישור שינוי הגדרות"
-#define D_RESET_CONFIGURATION "אתחול הגדרות"
-#define D_BACKUP_CONFIGURATION "גיבוי הגדרות"
-#define D_RESTORE_CONFIGURATION "שחזור הגדרות"
-#define D_MAIN_MENU "תפריט ראשי"
-
-#define D_MODULE_PARAMETERS "מודול פרמטרים"
-#define D_MODULE_TYPE "סוג מודול"
-#define D_PULLUP_ENABLE "pull-up אין לחצן/מתג"
-#define D_ADC "ADC"
-#define D_GPIO " רגל "
-#define D_SERIAL_IN "כניסת סריאל"
-#define D_SERIAL_OUT "יציאת סריאל"
-
-#define D_WIFI_PARAMETERS "Wifi פרמטרים"
-#define D_SCAN_FOR_WIFI_NETWORKS "סורק עבור רשתות אלחוטיות"
-#define D_SCAN_DONE "סריקה הושלמה"
-#define D_NO_NETWORKS_FOUND "לא נמצאו רשתות אלחוטיות"
-#define D_REFRESH_TO_SCAN_AGAIN "רענן כדי לסרוק שוב"
-#define D_DUPLICATE_ACCESSPOINT "נקודות גישה משוכפלות"
-#define D_SKIPPING_LOW_QUALITY "מדלג עקב איכות רשת נמוכה"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Password"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Password"
-
-#define D_MQTT_PARAMETERS "MQTT פרמטרים"
-#define D_CLIENT "לקוח"
-#define D_FULL_TOPIC "זיהוי מלא"
-
-#define D_LOGGING_PARAMETERS "פרמטרי לוגים"
-#define D_SERIAL_LOG_LEVEL "רמת לוג עבור סריאל"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "רמת לוג עבור אתר"
-#define D_SYS_LOG_LEVEL "Syslog רמת לוג עבור שרת"
-#define D_MORE_DEBUG "מיפוי נוסף"
-#define D_SYSLOG_HOST "Syslog מארח"
-#define D_SYSLOG_PORT "Syslog פורט"
-#define D_TELEMETRY_PERIOD "זמן שידור"
-
-#define D_OTHER_PARAMETERS "פרמטרים שונים"
-#define D_TEMPLATE "תבנית"
-#define D_ACTIVATE "הפעל"
-#define D_WEB_ADMIN_PASSWORD "סיסמת מנהל"
-#define D_MQTT_ENABLE "MQTT אפשר"
-#define D_FRIENDLY_NAME "שם ידידותי"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "התקן בודד"
-#define D_MULTI_DEVICE "התקנים"
-
-#define D_CONFIGURE_TEMPLATE "הגדר תבנית"
-#define D_TEMPLATE_PARAMETERS "פרמטרים של תבנית"
-#define D_TEMPLATE_NAME "שם"
-#define D_BASE_TYPE "מבוסס על"
-#define D_TEMPLATE_FLAGS "אפשריות"
-
-#define D_SAVE_CONFIGURATION "שמירת הגדרות"
-#define D_CONFIGURATION_SAVED "הגדרות נשמרו"
-#define D_CONFIGURATION_RESET "איפוס הגדרות"
-
-#define D_PROGRAM_VERSION "גירסת תוכנה"
-#define D_BUILD_DATE_AND_TIME "Build Date & Time"
-#define D_CORE_AND_SDK_VERSION "Core/SDK Version"
-#define D_FLASH_WRITE_COUNT "מונה צריבות"
-#define D_MAC_ADDRESS "MAC כתובת"
-#define D_MQTT_HOST "MQTT מארח"
-#define D_MQTT_PORT "MQTT פורט"
-#define D_MQTT_CLIENT "MQTT לקוח"
-#define D_MQTT_USER "MQTT שם משתמש"
-#define D_MQTT_TOPIC "MQTT נושא"
-#define D_MQTT_GROUP_TOPIC "MQTT נושא קבוצת"
-#define D_MQTT_FULL_TOPIC "MQTT נושא מלא"
-#define D_MDNS_DISCOVERY "mDNS זיהוי"
-#define D_MDNS_ADVERTISE "mDNS פרסום"
-#define D_ESP_CHIP_ID "ESP מס' רכיב"
-#define D_FLASH_CHIP_ID "מס' רכיב פלאש"
-#define D_FLASH_CHIP_SIZE "גודל זיכרון פלאש"
-#define D_FREE_PROGRAM_SPACE "מקום פנוי - תוכנה"
-
-#define D_UPGRADE_BY_WEBSERVER "שדרוג קושחה"
-#define D_OTA_URL "OTA כתובת"
-#define D_START_UPGRADE "התחל בשדרוג"
-#define D_UPGRADE_BY_FILE_UPLOAD "שדרוג דרך קובץ נכשל"
-#define D_UPLOAD_STARTED "העלאה מתחילה"
-#define D_UPGRADE_STARTED "שדרוג מתחיל"
-#define D_UPLOAD_DONE "העלאה הסתיימה"
-#define D_UPLOAD_ERR_1 "לא נבחר קובץ"
-#define D_UPLOAD_ERR_2 "אין מספיק מקום"
-#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
-#define D_UPLOAD_ERR_4 "גודל קובץ השדרוג גדול מנפח האחסון של הפלאש"
-#define D_UPLOAD_ERR_5 "מאגר העלאה לא תקין"
-#define D_UPLOAD_ERR_6 "העלאה נכשלה. אפשר רישום 3"
-#define D_UPLOAD_ERR_7 "ההעלאה בוטלה"
-#define D_UPLOAD_ERR_8 "קובץ שגוי"
-#define D_UPLOAD_ERR_9 "קובץ גדול מדי"
-#define D_UPLOAD_ERR_10 "נכשלה RF הפעלת שבב"
-#define D_UPLOAD_ERR_11 "נכשלה RF מחיקת שבב"
-#define D_UPLOAD_ERR_12 "נכשלה RF כתיבת שבב"
-#define D_UPLOAD_ERR_13 "נכשלה RF קידוד קושחת שבב"
-#define D_UPLOAD_ERROR_CODE "שגיאת קוד העלאה"
-
-#define D_ENTER_COMMAND "הקש פקודה"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
-#define D_NEED_USER_AND_PASSWORD "Need user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "...TLS אמת טביעת אצבע של"
-#define D_TLS_CONNECT_FAILED_TO "נכשל TLS חיבור"
-#define D_RETRY_IN "נסה שוב תוך"
-#define D_VERIFIED "מאומת באמצעות טביעת אצבע"
-#define D_INSECURE "חיבור לא מאובטח עקב טביעת אצבע לא חוקית"
-#define D_CONNECT_FAILED_TO "חיבור נכשל ל"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast disabled"
-#define D_MULTICAST_REJOINED "Multicast (re)joined"
-#define D_MULTICAST_JOIN_FAILED "Multicast join failed"
-#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo הגדרת"
-#define D_RESPONSE_SENT "תגובה נשלחה"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue הגדרת"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API not implemented"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz פרמטרי"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "טמפרטורה"
- #define D_DOMOTICZ_TEMP_HUM "טמפרטורה,לחות"
- #define D_DOMOTICZ_TEMP_HUM_BARO "טמפרטורה,לחות,ברומטר"
- #define D_DOMOTICZ_POWER_ENERGY "הספק,צריכה"
- #define D_DOMOTICZ_ILLUMINANCE "עוצמת אור"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "איכות אוויר"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "עדכן טיימר"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "הגדרות תזמון"
-#define D_TIMER_PARAMETERS "פרמטרים עבור תזמון"
-#define D_TIMER_ENABLE "אפשר תזמון"
-#define D_TIMER_ARM "טען"
-#define D_TIMER_TIME "זמן"
-#define D_TIMER_DAYS "ימים"
-#define D_TIMER_REPEAT "חזרות"
-#define D_TIMER_OUTPUT "פלט"
-#define D_TIMER_ACTION "פעולה"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX הגדר"
-#define D_KNX_PARAMETERS "KNX פרמטרי"
-#define D_KNX_GENERAL_CONFIG "כללי"
-#define D_KNX_PHYSICAL_ADDRESS "כתובת פיזית"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
-#define D_KNX_ENABLE "KNX אפשר"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "נתונים לשליחה אל כתובות קבוצתיות"
-#define D_ADD "הוסף"
-#define D_DELETE "מחק"
-#define D_REPLY "השב"
-#define D_KNX_GROUP_ADDRESS_TO_READ "כתובות קבוצתיות לקבלת נתונים מ"
-#define D_RECEIVED_FROM "התקבל מאת"
-#define D_KNX_COMMAND_WRITE "כתיבה"
-#define D_KNX_COMMAND_READ "קריאה"
-#define D_KNX_COMMAND_OTHER "אחר"
-#define D_SENT_TO "נשלח ל"
-#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
-#define D_KNX_ENHANCEMENT "שיפור התקשורת"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "צריכה יומית"
-#define D_ENERGY_YESTERDAY "צריכה בעבר"
-#define D_ENERGY_TOTAL "צריכה כללית"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "שרת עסוק"
-#define D_SENSOR_CRC_ERROR "בחיישן CRC שגיאת"
-#define D_SENSORS_FOUND "חיישנים לא נמצאו"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "הזמן הקצוב להמתנה"
-#define D_START_SIGNAL_LOW "להתחיל אות נמוך"
-#define D_START_SIGNAL_HIGH "להתחיל אות גבוה"
-#define D_PULSE "פעימה"
-#define D_CHECKSUM_FAILURE "בדיקת כשל נכשלה"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
-#define D_SHT1X_FOUND "SHT1X found"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "חלקיקים"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "הסר משקל"
-#define D_HX_CAL_REFERENCE "טען משקל התייחסות"
-#define D_HX_CAL_DONE "מכויל"
-#define D_HX_CAL_FAIL "כיול נכשל"
-#define D_RESET_HX711 "אפס את קנה המידה"
-#define D_CONFIGURE_HX711 "הגדר קנה מידה"
-#define D_HX711_PARAMETERS "פרמטרים של קנה מידה"
-#define D_ITEM_WEIGHT "משקל פריט"
-#define D_REFERENCE_WEIGHT "משקל הפניה"
-#define D_CALIBRATE "כייל"
-#define D_CALIBRATION "כיול"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "כיוון הרוח"
-#define D_TX20_WIND_SPEED "מהירות הרוח"
-#define D_TX20_WIND_SPEED_AVG "מהירות הרוח ממוצעת"
-#define D_TX20_WIND_SPEED_MAX "מהירות הרוח מקסימלית"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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 "משתמש"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "נגן מוזיקה"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "מתג" // Suffix "1"
-#define D_SENSOR_BUTTON "לחצן" // Suffix "1"
-#define D_SENSOR_RELAY "ממסר" // Suffix "1i"
-#define D_SENSOR_LED "לד" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "מונה" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sectors"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_HE_HE_H_
+/*
+ he-HE.h - localization for Hebrew - Israel for Tasmota
+
+ Copyright (C) 2019 Yuval Mejahez
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_HE_HE_H_
+#define _LANGUAGE_HE_HE_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.14.0b
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1037
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "he"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "SunMonTueWedThuFriSat"
+#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "מנהל"
+#define D_AIR_QUALITY "איכות אוויר"
+#define D_AP "AP" // Access Point
+#define D_AS "-כ"
+#define D_AUTO "אוטומטי"
+#define D_BLINK "מהבהב"
+#define D_BLINKOFF "כיבוי היבהוב"
+#define D_BOOT_COUNT "מונה הפעלה מחדש"
+#define D_BRIGHTLIGHT "בהירות"
+#define D_BSSID "BSSId"
+#define D_BUTTON "לחצן"
+#define D_BY "על ידי" // Written by me
+#define D_BYTES "בייט"
+#define D_CELSIUS "צלזיוס"
+#define D_CHANNEL "ערוץ"
+#define D_CO2 "פחמן דו חמצני"
+#define D_CODE "קוד" // Button code
+#define D_COLDLIGHT "אור קר"
+#define D_COMMAND "פקודה"
+#define D_CONNECTED "מחובר"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "סופר"
+#define D_COUNTER "מונה"
+#define D_CURRENT "נוכחי" // As in Voltage and Current
+#define D_DATA "נתונים"
+#define D_DARKLIGHT "חושך"
+#define D_DEBUG "באגים"
+#define D_DISABLED "מבוטל"
+#define D_DISTANCE "מרחק"
+#define D_DNS_SERVER "DNS שרת"
+#define D_DONE "סיים"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "הדמיה"
+#define D_ENABLED "מאופשר"
+#define D_ERASE "מחיקה"
+#define D_ERROR "שגיאה"
+#define D_FAHRENHEIT "פרנהייט"
+#define D_FAILED "נכשל"
+#define D_FALLBACK "חזרה"
+#define D_FALLBACK_TOPIC "נושא לחזרה"
+#define D_FALSE "שגוי"
+#define D_FILE "קובץ"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "זכרון פנוי"
+#define D_FREQUENCY "תדר"
+#define D_GAS "גז"
+#define D_GATEWAY "שער"
+#define D_GROUP "קבוצה"
+#define D_HOST "מארח"
+#define D_HOSTNAME "שם מארח"
+#define D_HUMIDITY "לחות"
+#define D_ILLUMINANCE "רמת חשיפה"
+#define D_IMMEDIATE "מידי" // Button immediate
+#define D_INDEX "אינדקס"
+#define D_INFO "מידע"
+#define D_INFRARED "אינפרא"
+#define D_INITIALIZED "מאותחל"
+#define D_IP_ADDRESS "IP כתובת"
+#define D_LIGHT "אור"
+#define D_LWT "LWT"
+#define D_MODULE "מודול"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "לחיצה מרובה"
+#define D_NOISE "רעש"
+#define D_NONE "כלום"
+#define D_OFF "כבוי"
+#define D_OFFLINE "מנותק"
+#define D_OK "אוקיי"
+#define D_ON "פועל"
+#define D_ONLINE "מחובר"
+#define D_PASSWORD "סיסמא"
+#define D_PORT "פורט"
+#define D_POWER_FACTOR "גורם כוח"
+#define D_POWERUSAGE "כוח"
+#define D_POWERUSAGE_ACTIVE "כוח פעיל"
+#define D_POWERUSAGE_APPARENT "כוח לכאורה"
+#define D_POWERUSAGE_REACTIVE "כוח תגובתי"
+#define D_PRESSURE "לחץ"
+#define D_PRESSUREATSEALEVEL "לחץ ימי"
+#define D_PROGRAM_FLASH_SIZE "גודל תוכנית פלאש"
+#define D_PROGRAM_SIZE "גודל תוכנית"
+#define D_PROJECT "פרויקט"
+#define D_RAIN "גשם"
+#define D_RECEIVED "התקבל"
+#define D_RESTART "איתחול"
+#define D_RESTARTING "הפעלה מחדש"
+#define D_RESTART_REASON "סיבת הפעלה מחדש"
+#define D_RESTORE "שחזור"
+#define D_RETAINED "שמור"
+#define D_RULE "חוק"
+#define D_SAVE "שמירה"
+#define D_SENSOR "חיישן"
+#define D_SSID "SSId"
+#define D_START "התחלה"
+#define D_STD_TIME "STD"
+#define D_STOP "עצירה"
+#define D_SUBNET_MASK "רשת מסכת משנה"
+#define D_SUBSCRIBE_TO "הרשם ל"
+#define D_UNSUBSCRIBE_FROM "בטל רישום"
+#define D_SUCCESSFUL "הצליח"
+#define D_SUNRISE "זריחה"
+#define D_SUNSET "שקיעה"
+#define D_TEMPERATURE "טמפרטורה"
+#define D_TO "ל"
+#define D_TOGGLE "מתג"
+#define D_TOPIC "נושא"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "עבר"
+#define D_TRUE "נכון"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "שדרוג"
+#define D_UPLOAD "העלאה"
+#define D_UPTIME "זמן עליה"
+#define D_USER "משתמש"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV אינדקס"
+#define D_UV_INDEX_1 "Low"
+#define D_UV_INDEX_2 "Mid"
+#define D_UV_INDEX_3 "High"
+#define D_UV_INDEX_4 "Danger"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR" // Out of Range
+#define D_UV_LEVEL "UV רמת"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "גרסה"
+#define D_VOLTAGE "מתח"
+#define D_WEIGHT "משקל"
+#define D_WARMLIGHT "חום"
+#define D_WEB_SERVER "Web שרת"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "אזהרה גרסה זו אינה תומכת בהגדרות קבועות"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "רישום טורי מושבת"
+#define D_SYSLOG_LOGGING_REENABLED "הופעל מחדש Syslog רישום"
+
+#define D_SET_BAUDRATE_TO "הגדר קצב שידור ל"
+#define D_RECEIVED_TOPIC "Topic התקבל"
+#define D_DATA_SIZE "גודל נתונים"
+#define D_ANALOG_INPUT "אנלוגי"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "לולאות חסומות"
+#define D_WPS_FAILED_WITH_STATUS "נכשל עם הסטטוס WPSconfig"
+#define D_ACTIVE_FOR_3_MINUTES "פעיל במשך 3 דקות"
+#define D_FAILED_TO_START "נכשל בנסיון להתחיל"
+#define D_PATCH_ISSUE_2186 "בעית תיקון 2186"
+#define D_CONNECTING_TO_AP "AP -מתחבר ל"
+#define D_IN_MODE "במצב"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP החיבור נכשל מכיוון שלא התקבלה כתובת"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "זמין AP החיבור נכשל כיוון שאין"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "סיסמא שגויה , AP חיבור נכשל ל"
+#define D_CONNECT_FAILED_AP_TIMEOUT "פג זמן המתנה , AP חיבור נכשל ל"
+#define D_ATTEMPTING_CONNECTION "...מנסה להתחבר"
+#define D_CHECKING_CONNECTION "...בודק חיבור"
+#define D_QUERY_DONE "MQTT השאילתה נעשתה. נמצאו שירותי"
+#define D_MQTT_SERVICE_FOUND "MQTT נמצאו שירותי"
+#define D_FOUND_AT "נמצא ב"
+#define D_SYSLOG_HOST_NOT_FOUND "לא נמצא Syslog מארח"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "נשמר לפלאש ב"
+#define D_LOADED_FROM_FLASH_AT "נטען מהפלאש מ"
+#define D_USE_DEFAULTS "השתמש בהגדרות ברירת המחדל"
+#define D_ERASED_SECTOR "סקטור מחוק"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "JavaScript - כדי להשתמש בקושחת אסמוטה אנא הפעל"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "קושחה מינימלית
בבקשה אנא שדרג"
+#define D_WEBSERVER_ACTIVE_ON "שרת ווב פעיל"
+#define D_WITH_IP_ADDRESS "IP עם כתובת"
+#define D_WEBSERVER_STOPPED "שרת ווב הופסק"
+#define D_FILE_NOT_FOUND "קובץ לא נמצא"
+#define D_REDIRECTED "הופנה מחדש לפורטל"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
+#define D_TRYING_TO_CONNECT "מנסה לחבר את ההתקן לרשת"
+
+#define D_RESTART_IN "הפעלה מחדש תוך"
+#define D_SECONDS "שניות"
+#define D_DEVICE_WILL_RESTART "ההתקן יופעל מחדש בעוד מס' שניות"
+#define D_BUTTON_TOGGLE "מצב"
+#define D_CONFIGURATION "הגדרות"
+#define D_INFORMATION "מידע"
+#define D_FIRMWARE_UPGRADE "שדרוג קושחה"
+#define D_CONSOLE "קונסול"
+#define D_CONFIRM_RESTART "אישור הפעלה מחדש"
+
+#define D_CONFIGURE_MODULE "הגדרות מודול"
+#define D_CONFIGURE_WIFI "WIFI הגדרות"
+#define D_CONFIGURE_MQTT "MQTT הגדרות"
+#define D_CONFIGURE_DOMOTICZ "Domoticz הגדרות"
+#define D_CONFIGURE_LOGGING "הגדרת לוגים"
+#define D_CONFIGURE_OTHER "הגדרות שונות"
+#define D_CONFIRM_RESET_CONFIGURATION "אישור שינוי הגדרות"
+#define D_RESET_CONFIGURATION "אתחול הגדרות"
+#define D_BACKUP_CONFIGURATION "גיבוי הגדרות"
+#define D_RESTORE_CONFIGURATION "שחזור הגדרות"
+#define D_MAIN_MENU "תפריט ראשי"
+
+#define D_MODULE_PARAMETERS "מודול פרמטרים"
+#define D_MODULE_TYPE "סוג מודול"
+#define D_PULLUP_ENABLE "pull-up אין לחצן/מתג"
+#define D_ADC "ADC"
+#define D_GPIO " רגל "
+#define D_SERIAL_IN "כניסת סריאל"
+#define D_SERIAL_OUT "יציאת סריאל"
+
+#define D_WIFI_PARAMETERS "Wifi פרמטרים"
+#define D_SCAN_FOR_WIFI_NETWORKS "סורק עבור רשתות אלחוטיות"
+#define D_SCAN_DONE "סריקה הושלמה"
+#define D_NO_NETWORKS_FOUND "לא נמצאו רשתות אלחוטיות"
+#define D_REFRESH_TO_SCAN_AGAIN "רענן כדי לסרוק שוב"
+#define D_DUPLICATE_ACCESSPOINT "נקודות גישה משוכפלות"
+#define D_SKIPPING_LOW_QUALITY "מדלג עקב איכות רשת נמוכה"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Password"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Password"
+
+#define D_MQTT_PARAMETERS "MQTT פרמטרים"
+#define D_CLIENT "לקוח"
+#define D_FULL_TOPIC "זיהוי מלא"
+
+#define D_LOGGING_PARAMETERS "פרמטרי לוגים"
+#define D_SERIAL_LOG_LEVEL "רמת לוג עבור סריאל"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "רמת לוג עבור אתר"
+#define D_SYS_LOG_LEVEL "Syslog רמת לוג עבור שרת"
+#define D_MORE_DEBUG "מיפוי נוסף"
+#define D_SYSLOG_HOST "Syslog מארח"
+#define D_SYSLOG_PORT "Syslog פורט"
+#define D_TELEMETRY_PERIOD "זמן שידור"
+
+#define D_OTHER_PARAMETERS "פרמטרים שונים"
+#define D_TEMPLATE "תבנית"
+#define D_ACTIVATE "הפעל"
+#define D_WEB_ADMIN_PASSWORD "סיסמת מנהל"
+#define D_MQTT_ENABLE "MQTT אפשר"
+#define D_FRIENDLY_NAME "שם ידידותי"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "התקן בודד"
+#define D_MULTI_DEVICE "התקנים"
+
+#define D_CONFIGURE_TEMPLATE "הגדר תבנית"
+#define D_TEMPLATE_PARAMETERS "פרמטרים של תבנית"
+#define D_TEMPLATE_NAME "שם"
+#define D_BASE_TYPE "מבוסס על"
+#define D_TEMPLATE_FLAGS "אפשריות"
+
+#define D_SAVE_CONFIGURATION "שמירת הגדרות"
+#define D_CONFIGURATION_SAVED "הגדרות נשמרו"
+#define D_CONFIGURATION_RESET "איפוס הגדרות"
+
+#define D_PROGRAM_VERSION "גירסת תוכנה"
+#define D_BUILD_DATE_AND_TIME "Build Date & Time"
+#define D_CORE_AND_SDK_VERSION "Core/SDK Version"
+#define D_FLASH_WRITE_COUNT "מונה צריבות"
+#define D_MAC_ADDRESS "MAC כתובת"
+#define D_MQTT_HOST "MQTT מארח"
+#define D_MQTT_PORT "MQTT פורט"
+#define D_MQTT_CLIENT "MQTT לקוח"
+#define D_MQTT_USER "MQTT שם משתמש"
+#define D_MQTT_TOPIC "MQTT נושא"
+#define D_MQTT_GROUP_TOPIC "MQTT נושא קבוצת"
+#define D_MQTT_FULL_TOPIC "MQTT נושא מלא"
+#define D_MDNS_DISCOVERY "mDNS זיהוי"
+#define D_MDNS_ADVERTISE "mDNS פרסום"
+#define D_ESP_CHIP_ID "ESP מס' רכיב"
+#define D_FLASH_CHIP_ID "מס' רכיב פלאש"
+#define D_FLASH_CHIP_SIZE "גודל זיכרון פלאש"
+#define D_FREE_PROGRAM_SPACE "מקום פנוי - תוכנה"
+
+#define D_UPGRADE_BY_WEBSERVER "שדרוג קושחה"
+#define D_OTA_URL "OTA כתובת"
+#define D_START_UPGRADE "התחל בשדרוג"
+#define D_UPGRADE_BY_FILE_UPLOAD "שדרוג דרך קובץ נכשל"
+#define D_UPLOAD_STARTED "העלאה מתחילה"
+#define D_UPGRADE_STARTED "שדרוג מתחיל"
+#define D_UPLOAD_DONE "העלאה הסתיימה"
+#define D_UPLOAD_ERR_1 "לא נבחר קובץ"
+#define D_UPLOAD_ERR_2 "אין מספיק מקום"
+#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
+#define D_UPLOAD_ERR_4 "גודל קובץ השדרוג גדול מנפח האחסון של הפלאש"
+#define D_UPLOAD_ERR_5 "מאגר העלאה לא תקין"
+#define D_UPLOAD_ERR_6 "העלאה נכשלה. אפשר רישום 3"
+#define D_UPLOAD_ERR_7 "ההעלאה בוטלה"
+#define D_UPLOAD_ERR_8 "קובץ שגוי"
+#define D_UPLOAD_ERR_9 "קובץ גדול מדי"
+#define D_UPLOAD_ERR_10 "נכשלה RF הפעלת שבב"
+#define D_UPLOAD_ERR_11 "נכשלה RF מחיקת שבב"
+#define D_UPLOAD_ERR_12 "נכשלה RF כתיבת שבב"
+#define D_UPLOAD_ERR_13 "נכשלה RF קידוד קושחת שבב"
+#define D_UPLOAD_ERROR_CODE "שגיאת קוד העלאה"
+
+#define D_ENTER_COMMAND "הקש פקודה"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
+#define D_NEED_USER_AND_PASSWORD "Need user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "...TLS אמת טביעת אצבע של"
+#define D_TLS_CONNECT_FAILED_TO "נכשל TLS חיבור"
+#define D_RETRY_IN "נסה שוב תוך"
+#define D_VERIFIED "מאומת באמצעות טביעת אצבע"
+#define D_INSECURE "חיבור לא מאובטח עקב טביעת אצבע לא חוקית"
+#define D_CONNECT_FAILED_TO "חיבור נכשל ל"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast disabled"
+#define D_MULTICAST_REJOINED "Multicast (re)joined"
+#define D_MULTICAST_JOIN_FAILED "Multicast join failed"
+#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo הגדרת"
+#define D_RESPONSE_SENT "תגובה נשלחה"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue הגדרת"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API not implemented"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz פרמטרי"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "טמפרטורה"
+ #define D_DOMOTICZ_TEMP_HUM "טמפרטורה,לחות"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "טמפרטורה,לחות,ברומטר"
+ #define D_DOMOTICZ_POWER_ENERGY "הספק,צריכה"
+ #define D_DOMOTICZ_ILLUMINANCE "עוצמת אור"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "איכות אוויר"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "עדכן טיימר"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "הגדרות תזמון"
+#define D_TIMER_PARAMETERS "פרמטרים עבור תזמון"
+#define D_TIMER_ENABLE "אפשר תזמון"
+#define D_TIMER_ARM "טען"
+#define D_TIMER_TIME "זמן"
+#define D_TIMER_DAYS "ימים"
+#define D_TIMER_REPEAT "חזרות"
+#define D_TIMER_OUTPUT "פלט"
+#define D_TIMER_ACTION "פעולה"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX הגדר"
+#define D_KNX_PARAMETERS "KNX פרמטרי"
+#define D_KNX_GENERAL_CONFIG "כללי"
+#define D_KNX_PHYSICAL_ADDRESS "כתובת פיזית"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
+#define D_KNX_ENABLE "KNX אפשר"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "נתונים לשליחה אל כתובות קבוצתיות"
+#define D_ADD "הוסף"
+#define D_DELETE "מחק"
+#define D_REPLY "השב"
+#define D_KNX_GROUP_ADDRESS_TO_READ "כתובות קבוצתיות לקבלת נתונים מ"
+#define D_RECEIVED_FROM "התקבל מאת"
+#define D_KNX_COMMAND_WRITE "כתיבה"
+#define D_KNX_COMMAND_READ "קריאה"
+#define D_KNX_COMMAND_OTHER "אחר"
+#define D_SENT_TO "נשלח ל"
+#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
+#define D_KNX_ENHANCEMENT "שיפור התקשורת"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "צריכה יומית"
+#define D_ENERGY_YESTERDAY "צריכה בעבר"
+#define D_ENERGY_TOTAL "צריכה כללית"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "שרת עסוק"
+#define D_SENSOR_CRC_ERROR "בחיישן CRC שגיאת"
+#define D_SENSORS_FOUND "חיישנים לא נמצאו"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "הזמן הקצוב להמתנה"
+#define D_START_SIGNAL_LOW "להתחיל אות נמוך"
+#define D_START_SIGNAL_HIGH "להתחיל אות גבוה"
+#define D_PULSE "פעימה"
+#define D_CHECKSUM_FAILURE "בדיקת כשל נכשלה"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
+#define D_SHT1X_FOUND "SHT1X found"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "חלקיקים"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "הסר משקל"
+#define D_HX_CAL_REFERENCE "טען משקל התייחסות"
+#define D_HX_CAL_DONE "מכויל"
+#define D_HX_CAL_FAIL "כיול נכשל"
+#define D_RESET_HX711 "אפס את קנה המידה"
+#define D_CONFIGURE_HX711 "הגדר קנה מידה"
+#define D_HX711_PARAMETERS "פרמטרים של קנה מידה"
+#define D_ITEM_WEIGHT "משקל פריט"
+#define D_REFERENCE_WEIGHT "משקל הפניה"
+#define D_CALIBRATE "כייל"
+#define D_CALIBRATION "כיול"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "כיוון הרוח"
+#define D_TX20_WIND_SPEED "מהירות הרוח"
+#define D_TX20_WIND_SPEED_AVG "מהירות הרוח ממוצעת"
+#define D_TX20_WIND_SPEED_MAX "מהירות הרוח מקסימלית"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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 "משתמש"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "נגן מוזיקה"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "מתג" // Suffix "1"
+#define D_SENSOR_BUTTON "לחצן" // Suffix "1"
+#define D_SENSOR_RELAY "ממסר" // Suffix "1i"
+#define D_SENSOR_LED "לד" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "מונה" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sectors"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_HE_HE_H_
diff --git a/tasmota/language/hu-HU.h b/tasmota/language/hu-HU.h
index 62806fa46..9533b355b 100644
--- a/tasmota/language/hu-HU.h
+++ b/tasmota/language/hu-HU.h
@@ -1,701 +1,703 @@
-/*
- hu-HU.h - localization for Hungarian in Hungary for Tasmota
-
- Copyright (C) 2019 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 .
-*/
-
-#ifndef _LANGUAGE_HU_HU_H_
-#define _LANGUAGE_HU_HU_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.12.0e
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1038
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "hu"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "."
-#define D_MONTH_DAY_SEPARATOR "."
-#define D_DATE_TIME_SEPARATOR " "
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "VasHétKedSzeCsüPénSzo"
-#define D_MONTH3LIST "JanFebMárÁprMájJúnJúlAugSzeOktNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Levegőminőség"
-#define D_AP "AP" // Access Point
-#define D_AS "mint"
-#define D_AUTO "AUTO"
-#define D_BLINK "Villogás"
-#define D_BLINKOFF "Villogás ki"
-#define D_BOOT_COUNT "Újraindulások száma"
-#define D_BRIGHTLIGHT "Max. fényerő"
-#define D_BSSID "BSSID"
-#define D_BUTTON "Gomb"
-#define D_BY "by" // Written by me
-#define D_BYTES "Byte-ok"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Csatorna"
-#define D_CO2 "Szén-dioxid"
-#define D_CODE "kód" // Button code
-#define D_COLDLIGHT "Hideg fény"
-#define D_COMMAND "Parancs"
-#define D_CONNECTED "Csatlakoztatva"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Szám"
-#define D_COUNTER "Számláló"
-#define D_CURRENT "Áramerősség" // As in Voltage and Current
-#define D_DATA "Adat"
-#define D_DARKLIGHT "Min. fényerő"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Letiltva"
-#define D_DISTANCE "Távolság"
-#define D_DNS_SERVER "DNS szerver"
-#define D_DONE "Kész"
-#define D_DST_TIME "nyári idő"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emuláció"
-#define D_ENABLED "Engedélyezve"
-#define D_ERASE "Törlés"
-#define D_ERROR "Hiba"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Sikertelen"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "fallback topik"
-#define D_FALSE "Hamis"
-#define D_FILE "Fájl"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Szabad memória"
-#define D_FREQUENCY "Frekvencia"
-#define D_GAS "Gáz"
-#define D_GATEWAY "Átjáró"
-#define D_GROUP "Csoport"
-#define D_HOST "Hoszt"
-#define D_HOSTNAME "Hosztnév"
-#define D_HUMIDITY "Páratartalom"
-#define D_ILLUMINANCE "Megvilágítás"
-#define D_IMMEDIATE "azonnali" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infravörös"
-#define D_INITIALIZED "Inicializálva"
-#define D_IP_ADDRESS "IP cím"
-#define D_LIGHT "Fény"
-#define D_LWT "LWT"
-#define D_MODULE "Modul"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "több lenyomás"
-#define D_NOISE "Zaj"
-#define D_NONE "nincs"
-#define D_OFF "Ki"
-#define D_OFFLINE "Offline"
-#define D_OK "OK"
-#define D_ON "Be"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Jelszó"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Teljesítménytényező"
-#define D_POWERUSAGE "Energiafelhasználás"
-#define D_POWERUSAGE_ACTIVE "Aktív teljesítmény"
-#define D_POWERUSAGE_APPARENT "Látszólagos teljesítmény"
-#define D_POWERUSAGE_REACTIVE "Reaktív teljesítmény"
-#define D_PRESSURE "Nyomás"
-#define D_PRESSUREATSEALEVEL "Tengerszinti nyomás"
-#define D_PROGRAM_FLASH_SIZE "Program flash méret"
-#define D_PROGRAM_SIZE "Program méret"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Eső"
-#define D_RECEIVED "Érkezett"
-#define D_RESTART "Újraindítás"
-#define D_RESTARTING "Újraindítás"
-#define D_RESTART_REASON "Utolsó újraindulás oka"
-#define D_RESTORE "Visszaállítás"
-#define D_RETAINED "retained"
-#define D_RULE "Szabály"
-#define D_SAVE "Mentés"
-#define D_SENSOR "Szenzor"
-#define D_SSID "SSID"
-#define D_START ""
-#define D_STD_TIME "STD"
-#define D_STOP "Leállítás"
-#define D_SUBNET_MASK "Alhálózati maszk"
-#define D_SUBSCRIBE_TO "Feliratkozás a(z)"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Sikeres"
-#define D_SUNRISE "Napkelte"
-#define D_SUNSET "Napnyugta"
-#define D_TEMPERATURE "Hőmérséklet"
-#define D_TO "-nak"
-#define D_TOGGLE "Megfordítás"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Továbbít"
-#define D_TRUE "Igaz"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "Frissítés"
-#define D_UPLOAD "Feltöltés"
-#define D_UPTIME "Üzemidő"
-#define D_USER "Felhasználó"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV index"
-#define D_UV_INDEX_1 "alacsony"
-#define D_UV_INDEX_2 "közepes"
-#define D_UV_INDEX_3 "magas"
-#define D_UV_INDEX_4 "veszélyes"
-#define D_UV_INDEX_5 "égés L1/2"
-#define D_UV_INDEX_6 "égés L3"
-#define D_UV_INDEX_7 "tartományon kívül"
-#define D_UV_LEVEL "UV szint"
-#define D_UV_POWER "UV teljesítmény"
-#define D_VERSION "Verzió"
-#define D_VOLTAGE "Feszültség"
-#define D_WEIGHT "Tömeg"
-#define D_WARMLIGHT "Meleg fény"
-#define D_WEB_SERVER "Webszerver"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "VIGYÁZZ! Ez a verzió nem támogat tartós beállításokat"
-#define D_LEVEL_10 "szint 1-0"
-#define D_LEVEL_01 "szint 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Soros naplózás kikapcsolva"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog logolás újraengedélyezve"
-
-#define D_SET_BAUDRATE_TO "Baudrate beállítása"
-#define D_RECEIVED_TOPIC "Érkezett topic"
-#define D_DATA_SIZE "Adatméret"
-#define D_ANALOG_INPUT "Analóg"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Tiltott hurok"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig SIKERTELEN státusz:"
-#define D_ACTIVE_FOR_3_MINUTES "aktválás 3 percre"
-#define D_FAILED_TO_START "sikertelen indítás"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "AP-hoz csatlakozás:"
-#define D_IN_MODE "mód:"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Sikertelen csatlakozás, nincs kiosztott IP cím"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Sikertelen csatlakozás, AP nem elérhető"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Sikertelen csatlakozás, hibás AP jelszó"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Sikertelen csatlakozás AP időtúllépés miatt"
-#define D_ATTEMPTING_CONNECTION "Csatlakozás..."
-#define D_CHECKING_CONNECTION "Kapcsolat ellenőrzése..."
-#define D_QUERY_DONE "Lekérés kész. MQTT szolgáltatás aktív"
-#define D_MQTT_SERVICE_FOUND "élő MQTT szolgáltatás a(z)"
-#define D_FOUND_AT "a(z)"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog hoszt nem található"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Flash-re mentve a(z)"
-#define D_LOADED_FROM_FLASH_AT "Flash-ről betöltve a(z)"
-#define D_USE_DEFAULTS "Alapértelmezett beáll. használata"
-#define D_ERASED_SECTOR "Szektor törlése"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "A Tasmota használatához engedélyezd a Javascriptet!"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMÁLIS firmware
frissítsd!"
-#define D_WEBSERVER_ACTIVE_ON "Webszerver aktív:"
-#define D_WITH_IP_ADDRESS "IP cím:"
-#define D_WEBSERVER_STOPPED "Webszerver leállítva"
-#define D_FILE_NOT_FOUND "Fájl nem található"
-#define D_REDIRECTED "Átírányítás captive portálra"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "WifiManager AccessPoint(AP) és Station(ST) beállítása"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager AccessPoint(AP) beállítása"
-#define D_TRYING_TO_CONNECT "Csatlakozás a hálózatra..."
-
-#define D_RESTART_IN "Újraindítás..."
-#define D_SECONDS "másodperc"
-#define D_DEVICE_WILL_RESTART "Az eszköz hamarosan újraindul..."
-#define D_BUTTON_TOGGLE "Megfordítás"
-#define D_CONFIGURATION "Beállítások"
-#define D_INFORMATION "Információ"
-#define D_FIRMWARE_UPGRADE "Firmware frissítés"
-#define D_CONSOLE "Konzol"
-#define D_CONFIRM_RESTART "Biztosan újraindítsam a modult?"
-
-#define D_CONFIGURE_MODULE "Eszközbeállítások"
-#define D_CONFIGURE_WIFI "WiFi konfiguráció"
-#define D_CONFIGURE_MQTT "MQTT konfiguráció"
-#define D_CONFIGURE_DOMOTICZ "Domoticz konfiguráció"
-#define D_CONFIGURE_LOGGING "Naplózás beállításai"
-#define D_CONFIGURE_OTHER "Egyéb beállítások"
-#define D_CONFIRM_RESET_CONFIGURATION "Biztosan töröljem a beállításokat?"
-#define D_RESET_CONFIGURATION "Beállítások törlése"
-#define D_BACKUP_CONFIGURATION "Beállítások mentése"
-#define D_RESTORE_CONFIGURATION "Beállítások visszatöltése"
-#define D_MAIN_MENU "Menü"
-
-#define D_MODULE_PARAMETERS "Modul paraméterek"
-#define D_MODULE_TYPE "Alkalmazott modul"
-#define D_PULLUP_ENABLE "Nincs felhúzó ellenállás"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Soros BE"
-#define D_SERIAL_OUT "Soros KI"
-
-#define D_WIFI_PARAMETERS "WiFi paraméterek"
-#define D_SCAN_FOR_WIFI_NETWORKS "WiFi hálózat keresése"
-#define D_SCAN_DONE "Keresés kész"
-#define D_NO_NETWORKS_FOUND "Nincs elérhető hálózat"
-#define D_REFRESH_TO_SCAN_AGAIN "Frissíts az újrakereséshez"
-#define D_DUPLICATE_ACCESSPOINT "Duplikált access point"
-#define D_SKIPPING_LOW_QUALITY "Rossz, alacsony jelminőség"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSID"
-#define D_AP1_PASSWORD "AP1 megosztott kulcs"
-#define D_AP2_SSID "AP2 SSID"
-#define D_AP2_PASSWORD "AP2 megosztott kulcs"
-
-#define D_MQTT_PARAMETERS "MQTT paraméterek"
-#define D_CLIENT "Kliens"
-#define D_FULL_TOPIC "Teljes topic"
-
-#define D_LOGGING_PARAMETERS "Naplózási paraméterek"
-#define D_SERIAL_LOG_LEVEL "Soros naplózási szint"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web naplózási szint"
-#define D_SYS_LOG_LEVEL "Syslog szint"
-#define D_MORE_DEBUG "Részletes hibakeresés"
-#define D_SYSLOG_HOST "Syslog hoszt"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Telemetria (mp.)"
-
-#define D_OTHER_PARAMETERS "Egyéb beállítások"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Web admin jelszó"
-#define D_MQTT_ENABLE "MQTT engedélyezése"
-#define D_FRIENDLY_NAME "Név"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "single device"
-#define D_MULTI_DEVICE "multi device"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Beállítások mentése"
-#define D_CONFIGURATION_SAVED "Beállítások elmentve"
-#define D_CONFIGURATION_RESET "Beállítások visszaállítása"
-
-#define D_PROGRAM_VERSION "Program verzió"
-#define D_BUILD_DATE_AND_TIME "Build ideje"
-#define D_CORE_AND_SDK_VERSION "Core/SDK verzió"
-#define D_FLASH_WRITE_COUNT "Flash írások száma"
-#define D_MAC_ADDRESS "MAC cím"
-#define D_MQTT_HOST "MQTT hoszt"
-#define D_MQTT_PORT "MQTT port"
-#define D_MQTT_CLIENT "MQTT kliens"
-#define D_MQTT_USER "MQTT felhasználó"
-#define D_MQTT_TOPIC "MQTT topic"
-#define D_MQTT_GROUP_TOPIC "MQTT csoport topic"
-#define D_MQTT_FULL_TOPIC "MQTT teljes topic"
-#define D_MDNS_DISCOVERY "mDNS láthatóság"
-#define D_MDNS_ADVERTISE "mDNS hirdetés"
-#define D_ESP_CHIP_ID "ESP chip ID"
-#define D_FLASH_CHIP_ID "Flash chip ID"
-#define D_FLASH_CHIP_SIZE "Flash mérete"
-#define D_FREE_PROGRAM_SPACE "Szabad programhely"
-
-#define D_UPGRADE_BY_WEBSERVER "Frissítés távoli szerverről"
-#define D_OTA_URL "OTA URL"
-#define D_START_UPGRADE "Frissítés"
-#define D_UPGRADE_BY_FILE_UPLOAD "Frissítés helyi fájllal"
-#define D_UPLOAD_STARTED "Feltöltés elindítva"
-#define D_UPGRADE_STARTED "Frissítés elindítva"
-#define D_UPLOAD_DONE "Feltöltés kész"
-#define D_UPLOAD_ERR_1 "Nincs fájl kijelölve"
-#define D_UPLOAD_ERR_2 "Nincs elég memória"
-#define D_UPLOAD_ERR_3 "A \"magic byte\" nem 0xE9"
-#define D_UPLOAD_ERR_4 "A program flashméret nagyobb a valós flashméretnél"
-#define D_UPLOAD_ERR_5 "Feltöltési buffer hiba"
-#define D_UPLOAD_ERR_6 "Feltöltés sikertelen. Endegélyezd a 3. szintű naplózást"
-#define D_UPLOAD_ERR_7 "Feltöltés megszakítva"
-#define D_UPLOAD_ERR_8 "Érvénytelen fájl"
-#define D_UPLOAD_ERR_9 "A fájl túl nagy"
-#define D_UPLOAD_ERR_10 "Az RF chip inicializálása sikertelen"
-#define D_UPLOAD_ERR_11 "Az RF chip törlése sikertelen"
-#define D_UPLOAD_ERR_12 "Az RF chip írása sikertelen"
-#define D_UPLOAD_ERR_13 "Az RF firmware dekódolása sikertelen"
-#define D_UPLOAD_ERROR_CODE "Feltöltési hibakód"
-
-#define D_ENTER_COMMAND "Kérem a parancsot..."
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Engedélyezz 2-es szintű webnaplózást több információért"
-#define D_NEED_USER_AND_PASSWORD "Szükséges a user=&password= paraméter"
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "TLS fingerprint hitelesítése..."
-#define D_TLS_CONNECT_FAILED_TO "TLS csatlakozás sikertelen a(z)"
-#define D_RETRY_IN "Újrapróbálás"
-#define D_VERIFIED "Fingerprint hitelesítve"
-#define D_INSECURE "Nem biztonságos kapcsolat érvénytelen fingerprint miatt"
-#define D_CONNECT_FAILED_TO "Sikertelen csatlakozás a(z)"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast kikapcsolva"
-#define D_MULTICAST_REJOINED "Multicast (újra)csatlakozás"
-#define D_MULTICAST_JOIN_FAILED "Multicast csatlakozás sikertelen"
-#define D_FAILED_TO_SEND_RESPONSE "Nem sikerült választ küldeni"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo beállítás"
-#define D_RESPONSE_SENT "Válasz elküldve"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue beállítás"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API nincs implementálva"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST argumentumok"
-#define D_3_RESPONSE_PACKETS_SENT "3 válaszcsomag elküldve"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz paraméterek"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Kapcsoló idx"
-#define D_DOMOTICZ_SENSOR_IDX "Szenzor idx"
- #define D_DOMOTICZ_TEMP "Hőmérséklet"
- #define D_DOMOTICZ_TEMP_HUM "Hőmérséklet, páratartalom"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Hőmérséklet, páratartalom, légnyomás"
- #define D_DOMOTICZ_POWER_ENERGY "Teljesítmény, energia"
- #define D_DOMOTICZ_ILLUMINANCE "Fényerő"
- #define D_DOMOTICZ_COUNT "Szám/PM1"
- #define D_DOMOTICZ_VOLTAGE "Feszültség/PM2.5"
- #define D_DOMOTICZ_CURRENT "Áram/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Légminőség"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Frissítési időzítő"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Időzítő beállításai"
-#define D_TIMER_PARAMETERS "Időzítő paraméterei"
-#define D_TIMER_ENABLE "Időzítők engedélyezve"
-#define D_TIMER_ARM "Be"
-#define D_TIMER_TIME "Idő"
-#define D_TIMER_DAYS "Napok"
-#define D_TIMER_REPEAT "Ismétlés"
-#define D_TIMER_OUTPUT "Kimenet"
-#define D_TIMER_ACTION "Művelet"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX beállításai"
-#define D_KNX_PARAMETERS "KNX paraméterei"
-#define D_KNX_GENERAL_CONFIG "Általános"
-#define D_KNX_PHYSICAL_ADDRESS "Fizikai cím"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(egyedinek kell lennie a KNX hálózaton)"
-#define D_KNX_ENABLE "KNX engedélyezése"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Íráshoz használt csoportcímek"
-#define D_ADD "Hozzáadás"
-#define D_DELETE "Törlés"
-#define D_REPLY "Válasz"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Fogadáshoz használt csoportcímek"
-#define D_RECEIVED_FROM "Fogadva tőle:"
-#define D_KNX_COMMAND_WRITE "Írás"
-#define D_KNX_COMMAND_READ "Olvasás"
-#define D_KNX_COMMAND_OTHER "Egyáb"
-#define D_SENT_TO "küldve neki:"
-#define D_KNX_WARNING "A csoportcím ( 0 / 0 / 0 ) fenntartott és nem használható."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Mai energia"
-#define D_ENERGY_YESTERDAY "Tegnapi energia"
-#define D_ENERGY_TOTAL "Összes energia"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Szenzor foglalt"
-#define D_SENSOR_CRC_ERROR "Szenzor CRC hiba"
-#define D_SENSORS_FOUND "Szenzorok megtalálva"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Időtúllépés, várakozás"
-#define D_START_SIGNAL_LOW "startjel alacsony"
-#define D_START_SIGNAL_HIGH "startjel magas"
-#define D_PULSE "impulzus"
-#define D_CHECKSUM_FAILURE "Checksum hiba"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "A szenzor nem nyugtázta a parancsot"
-#define D_SHT1X_FOUND "SHT1X megtalálva"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Részecskék"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Gyorsulásm. X-tengely"
-#define D_AY_AXIS "Gyorsulásm. Y-tengely"
-#define D_AZ_AXIS "Gyorsulásm. Z-tengely"
-#define D_GX_AXIS "Giroszkóp X-tengely"
-#define D_GY_AXIS "Giroszkóp Y-tengely"
-#define D_GZ_AXIS "Giroszkóp Z-tengely"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Távolítsa el a súlyt"
-#define D_HX_CAL_REFERENCE "Helyezze fel a referenciasúlyt"
-#define D_HX_CAL_DONE "Kalibrálva"
-#define D_HX_CAL_FAIL "Kalibrálási hiba"
-#define D_RESET_HX711 "Skála újrabeállítása"
-#define D_CONFIGURE_HX711 "Skála konfigurálása"
-#define D_HX711_PARAMETERS "Skálaparaméterek"
-#define D_ITEM_WEIGHT "Tárgy tömege"
-#define D_REFERENCE_WEIGHT "Referenciatömeg"
-#define D_CALIBRATE "Kalibrálás"
-#define D_CALIBRATION "Kalibrálás"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Szélirány"
-#define D_TX20_WIND_SPEED "Szélsebesség"
-#define D_TX20_WIND_SPEED_AVG "Átlag szélsebesség"
-#define D_TX20_WIND_SPEED_MAX "Max. szélsebesség"
-#define D_TX20_NORTH "É"
-#define D_TX20_EAST "K"
-#define D_TX20_SOUTH "D"
-#define D_TX20_WEST "NY"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 lejátszó"
-#define D_SENSOR_IRSEND "IR adó"
-#define D_SENSOR_SWITCH "Kapcsoló" // Suffix "1"
-#define D_SENSOR_BUTTON "Gomb" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "LED" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Számláló" // Suffix "1"
-#define D_SENSOR_IRRECV "IR vevő"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Háttérfény"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "h"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "s"
-#define D_UNIT_SECTORS "szektorok"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Fázisszög"
-#define D_IMPORT_ACTIVE "Bejövő aktív"
-#define D_EXPORT_ACTIVE "Kimenő aktív"
-#define D_IMPORT_REACTIVE "Bejövő reaktív"
-#define D_EXPORT_REACTIVE "Kimenő reaktív"
-#define D_TOTAL_REACTIVE "Összes reaktív"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "fok"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_HU_HU_H_
+/*
+ hu-HU.h - localization for Hungarian in Hungary for Tasmota
+
+ Copyright (C) 2019 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 .
+*/
+
+#ifndef _LANGUAGE_HU_HU_H_
+#define _LANGUAGE_HU_HU_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.12.0e
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1038
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "hu"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "."
+#define D_MONTH_DAY_SEPARATOR "."
+#define D_DATE_TIME_SEPARATOR " "
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "VasHétKedSzeCsüPénSzo"
+#define D_MONTH3LIST "JanFebMárÁprMájJúnJúlAugSzeOktNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Levegőminőség"
+#define D_AP "AP" // Access Point
+#define D_AS "mint"
+#define D_AUTO "AUTO"
+#define D_BLINK "Villogás"
+#define D_BLINKOFF "Villogás ki"
+#define D_BOOT_COUNT "Újraindulások száma"
+#define D_BRIGHTLIGHT "Max. fényerő"
+#define D_BSSID "BSSID"
+#define D_BUTTON "Gomb"
+#define D_BY "by" // Written by me
+#define D_BYTES "Byte-ok"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Csatorna"
+#define D_CO2 "Szén-dioxid"
+#define D_CODE "kód" // Button code
+#define D_COLDLIGHT "Hideg fény"
+#define D_COMMAND "Parancs"
+#define D_CONNECTED "Csatlakoztatva"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Szám"
+#define D_COUNTER "Számláló"
+#define D_CURRENT "Áramerősség" // As in Voltage and Current
+#define D_DATA "Adat"
+#define D_DARKLIGHT "Min. fényerő"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Letiltva"
+#define D_DISTANCE "Távolság"
+#define D_DNS_SERVER "DNS szerver"
+#define D_DONE "Kész"
+#define D_DST_TIME "nyári idő"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emuláció"
+#define D_ENABLED "Engedélyezve"
+#define D_ERASE "Törlés"
+#define D_ERROR "Hiba"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Sikertelen"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "fallback topik"
+#define D_FALSE "Hamis"
+#define D_FILE "Fájl"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Szabad memória"
+#define D_FREQUENCY "Frekvencia"
+#define D_GAS "Gáz"
+#define D_GATEWAY "Átjáró"
+#define D_GROUP "Csoport"
+#define D_HOST "Hoszt"
+#define D_HOSTNAME "Hosztnév"
+#define D_HUMIDITY "Páratartalom"
+#define D_ILLUMINANCE "Megvilágítás"
+#define D_IMMEDIATE "azonnali" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infravörös"
+#define D_INITIALIZED "Inicializálva"
+#define D_IP_ADDRESS "IP cím"
+#define D_LIGHT "Fény"
+#define D_LWT "LWT"
+#define D_MODULE "Modul"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "több lenyomás"
+#define D_NOISE "Zaj"
+#define D_NONE "nincs"
+#define D_OFF "Ki"
+#define D_OFFLINE "Offline"
+#define D_OK "OK"
+#define D_ON "Be"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Jelszó"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Teljesítménytényező"
+#define D_POWERUSAGE "Energiafelhasználás"
+#define D_POWERUSAGE_ACTIVE "Aktív teljesítmény"
+#define D_POWERUSAGE_APPARENT "Látszólagos teljesítmény"
+#define D_POWERUSAGE_REACTIVE "Reaktív teljesítmény"
+#define D_PRESSURE "Nyomás"
+#define D_PRESSUREATSEALEVEL "Tengerszinti nyomás"
+#define D_PROGRAM_FLASH_SIZE "Program flash méret"
+#define D_PROGRAM_SIZE "Program méret"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Eső"
+#define D_RECEIVED "Érkezett"
+#define D_RESTART "Újraindítás"
+#define D_RESTARTING "Újraindítás"
+#define D_RESTART_REASON "Utolsó újraindulás oka"
+#define D_RESTORE "Visszaállítás"
+#define D_RETAINED "retained"
+#define D_RULE "Szabály"
+#define D_SAVE "Mentés"
+#define D_SENSOR "Szenzor"
+#define D_SSID "SSID"
+#define D_START ""
+#define D_STD_TIME "STD"
+#define D_STOP "Leállítás"
+#define D_SUBNET_MASK "Alhálózati maszk"
+#define D_SUBSCRIBE_TO "Feliratkozás a(z)"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Sikeres"
+#define D_SUNRISE "Napkelte"
+#define D_SUNSET "Napnyugta"
+#define D_TEMPERATURE "Hőmérséklet"
+#define D_TO "-nak"
+#define D_TOGGLE "Megfordítás"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Továbbít"
+#define D_TRUE "Igaz"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "Frissítés"
+#define D_UPLOAD "Feltöltés"
+#define D_UPTIME "Üzemidő"
+#define D_USER "Felhasználó"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV index"
+#define D_UV_INDEX_1 "alacsony"
+#define D_UV_INDEX_2 "közepes"
+#define D_UV_INDEX_3 "magas"
+#define D_UV_INDEX_4 "veszélyes"
+#define D_UV_INDEX_5 "égés L1/2"
+#define D_UV_INDEX_6 "égés L3"
+#define D_UV_INDEX_7 "tartományon kívül"
+#define D_UV_LEVEL "UV szint"
+#define D_UV_POWER "UV teljesítmény"
+#define D_VERSION "Verzió"
+#define D_VOLTAGE "Feszültség"
+#define D_WEIGHT "Tömeg"
+#define D_WARMLIGHT "Meleg fény"
+#define D_WEB_SERVER "Webszerver"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "VIGYÁZZ! Ez a verzió nem támogat tartós beállításokat"
+#define D_LEVEL_10 "szint 1-0"
+#define D_LEVEL_01 "szint 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Soros naplózás kikapcsolva"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog logolás újraengedélyezve"
+
+#define D_SET_BAUDRATE_TO "Baudrate beállítása"
+#define D_RECEIVED_TOPIC "Érkezett topic"
+#define D_DATA_SIZE "Adatméret"
+#define D_ANALOG_INPUT "Analóg"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Tiltott hurok"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig SIKERTELEN státusz:"
+#define D_ACTIVE_FOR_3_MINUTES "aktválás 3 percre"
+#define D_FAILED_TO_START "sikertelen indítás"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "AP-hoz csatlakozás:"
+#define D_IN_MODE "mód:"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Sikertelen csatlakozás, nincs kiosztott IP cím"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Sikertelen csatlakozás, AP nem elérhető"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Sikertelen csatlakozás, hibás AP jelszó"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Sikertelen csatlakozás AP időtúllépés miatt"
+#define D_ATTEMPTING_CONNECTION "Csatlakozás..."
+#define D_CHECKING_CONNECTION "Kapcsolat ellenőrzése..."
+#define D_QUERY_DONE "Lekérés kész. MQTT szolgáltatás aktív"
+#define D_MQTT_SERVICE_FOUND "élő MQTT szolgáltatás a(z)"
+#define D_FOUND_AT "a(z)"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog hoszt nem található"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Flash-re mentve a(z)"
+#define D_LOADED_FROM_FLASH_AT "Flash-ről betöltve a(z)"
+#define D_USE_DEFAULTS "Alapértelmezett beáll. használata"
+#define D_ERASED_SECTOR "Szektor törlése"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "A Tasmota használatához engedélyezd a Javascriptet!"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMÁLIS firmware
frissítsd!"
+#define D_WEBSERVER_ACTIVE_ON "Webszerver aktív:"
+#define D_WITH_IP_ADDRESS "IP cím:"
+#define D_WEBSERVER_STOPPED "Webszerver leállítva"
+#define D_FILE_NOT_FOUND "Fájl nem található"
+#define D_REDIRECTED "Átírányítás captive portálra"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "WifiManager AccessPoint(AP) és Station(ST) beállítása"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager AccessPoint(AP) beállítása"
+#define D_TRYING_TO_CONNECT "Csatlakozás a hálózatra..."
+
+#define D_RESTART_IN "Újraindítás..."
+#define D_SECONDS "másodperc"
+#define D_DEVICE_WILL_RESTART "Az eszköz hamarosan újraindul..."
+#define D_BUTTON_TOGGLE "Megfordítás"
+#define D_CONFIGURATION "Beállítások"
+#define D_INFORMATION "Információ"
+#define D_FIRMWARE_UPGRADE "Firmware frissítés"
+#define D_CONSOLE "Konzol"
+#define D_CONFIRM_RESTART "Biztosan újraindítsam a modult?"
+
+#define D_CONFIGURE_MODULE "Eszközbeállítások"
+#define D_CONFIGURE_WIFI "WiFi konfiguráció"
+#define D_CONFIGURE_MQTT "MQTT konfiguráció"
+#define D_CONFIGURE_DOMOTICZ "Domoticz konfiguráció"
+#define D_CONFIGURE_LOGGING "Naplózás beállításai"
+#define D_CONFIGURE_OTHER "Egyéb beállítások"
+#define D_CONFIRM_RESET_CONFIGURATION "Biztosan töröljem a beállításokat?"
+#define D_RESET_CONFIGURATION "Beállítások törlése"
+#define D_BACKUP_CONFIGURATION "Beállítások mentése"
+#define D_RESTORE_CONFIGURATION "Beállítások visszatöltése"
+#define D_MAIN_MENU "Menü"
+
+#define D_MODULE_PARAMETERS "Modul paraméterek"
+#define D_MODULE_TYPE "Alkalmazott modul"
+#define D_PULLUP_ENABLE "Nincs felhúzó ellenállás"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Soros BE"
+#define D_SERIAL_OUT "Soros KI"
+
+#define D_WIFI_PARAMETERS "WiFi paraméterek"
+#define D_SCAN_FOR_WIFI_NETWORKS "WiFi hálózat keresése"
+#define D_SCAN_DONE "Keresés kész"
+#define D_NO_NETWORKS_FOUND "Nincs elérhető hálózat"
+#define D_REFRESH_TO_SCAN_AGAIN "Frissíts az újrakereséshez"
+#define D_DUPLICATE_ACCESSPOINT "Duplikált access point"
+#define D_SKIPPING_LOW_QUALITY "Rossz, alacsony jelminőség"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSID"
+#define D_AP1_PASSWORD "AP1 megosztott kulcs"
+#define D_AP2_SSID "AP2 SSID"
+#define D_AP2_PASSWORD "AP2 megosztott kulcs"
+
+#define D_MQTT_PARAMETERS "MQTT paraméterek"
+#define D_CLIENT "Kliens"
+#define D_FULL_TOPIC "Teljes topic"
+
+#define D_LOGGING_PARAMETERS "Naplózási paraméterek"
+#define D_SERIAL_LOG_LEVEL "Soros naplózási szint"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web naplózási szint"
+#define D_SYS_LOG_LEVEL "Syslog szint"
+#define D_MORE_DEBUG "Részletes hibakeresés"
+#define D_SYSLOG_HOST "Syslog hoszt"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Telemetria (mp.)"
+
+#define D_OTHER_PARAMETERS "Egyéb beállítások"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Web admin jelszó"
+#define D_MQTT_ENABLE "MQTT engedélyezése"
+#define D_FRIENDLY_NAME "Név"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "single device"
+#define D_MULTI_DEVICE "multi device"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Beállítások mentése"
+#define D_CONFIGURATION_SAVED "Beállítások elmentve"
+#define D_CONFIGURATION_RESET "Beállítások visszaállítása"
+
+#define D_PROGRAM_VERSION "Program verzió"
+#define D_BUILD_DATE_AND_TIME "Build ideje"
+#define D_CORE_AND_SDK_VERSION "Core/SDK verzió"
+#define D_FLASH_WRITE_COUNT "Flash írások száma"
+#define D_MAC_ADDRESS "MAC cím"
+#define D_MQTT_HOST "MQTT hoszt"
+#define D_MQTT_PORT "MQTT port"
+#define D_MQTT_CLIENT "MQTT kliens"
+#define D_MQTT_USER "MQTT felhasználó"
+#define D_MQTT_TOPIC "MQTT topic"
+#define D_MQTT_GROUP_TOPIC "MQTT csoport topic"
+#define D_MQTT_FULL_TOPIC "MQTT teljes topic"
+#define D_MDNS_DISCOVERY "mDNS láthatóság"
+#define D_MDNS_ADVERTISE "mDNS hirdetés"
+#define D_ESP_CHIP_ID "ESP chip ID"
+#define D_FLASH_CHIP_ID "Flash chip ID"
+#define D_FLASH_CHIP_SIZE "Flash mérete"
+#define D_FREE_PROGRAM_SPACE "Szabad programhely"
+
+#define D_UPGRADE_BY_WEBSERVER "Frissítés távoli szerverről"
+#define D_OTA_URL "OTA URL"
+#define D_START_UPGRADE "Frissítés"
+#define D_UPGRADE_BY_FILE_UPLOAD "Frissítés helyi fájllal"
+#define D_UPLOAD_STARTED "Feltöltés elindítva"
+#define D_UPGRADE_STARTED "Frissítés elindítva"
+#define D_UPLOAD_DONE "Feltöltés kész"
+#define D_UPLOAD_ERR_1 "Nincs fájl kijelölve"
+#define D_UPLOAD_ERR_2 "Nincs elég memória"
+#define D_UPLOAD_ERR_3 "A \"magic byte\" nem 0xE9"
+#define D_UPLOAD_ERR_4 "A program flashméret nagyobb a valós flashméretnél"
+#define D_UPLOAD_ERR_5 "Feltöltési buffer hiba"
+#define D_UPLOAD_ERR_6 "Feltöltés sikertelen. Endegélyezd a 3. szintű naplózást"
+#define D_UPLOAD_ERR_7 "Feltöltés megszakítva"
+#define D_UPLOAD_ERR_8 "Érvénytelen fájl"
+#define D_UPLOAD_ERR_9 "A fájl túl nagy"
+#define D_UPLOAD_ERR_10 "Az RF chip inicializálása sikertelen"
+#define D_UPLOAD_ERR_11 "Az RF chip törlése sikertelen"
+#define D_UPLOAD_ERR_12 "Az RF chip írása sikertelen"
+#define D_UPLOAD_ERR_13 "Az RF firmware dekódolása sikertelen"
+#define D_UPLOAD_ERROR_CODE "Feltöltési hibakód"
+
+#define D_ENTER_COMMAND "Kérem a parancsot..."
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Engedélyezz 2-es szintű webnaplózást több információért"
+#define D_NEED_USER_AND_PASSWORD "Szükséges a user=&password= paraméter"
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "TLS fingerprint hitelesítése..."
+#define D_TLS_CONNECT_FAILED_TO "TLS csatlakozás sikertelen a(z)"
+#define D_RETRY_IN "Újrapróbálás"
+#define D_VERIFIED "Fingerprint hitelesítve"
+#define D_INSECURE "Nem biztonságos kapcsolat érvénytelen fingerprint miatt"
+#define D_CONNECT_FAILED_TO "Sikertelen csatlakozás a(z)"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast kikapcsolva"
+#define D_MULTICAST_REJOINED "Multicast (újra)csatlakozás"
+#define D_MULTICAST_JOIN_FAILED "Multicast csatlakozás sikertelen"
+#define D_FAILED_TO_SEND_RESPONSE "Nem sikerült választ küldeni"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo beállítás"
+#define D_RESPONSE_SENT "Válasz elküldve"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue beállítás"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API nincs implementálva"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST argumentumok"
+#define D_3_RESPONSE_PACKETS_SENT "3 válaszcsomag elküldve"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz paraméterek"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Kapcsoló idx"
+#define D_DOMOTICZ_SENSOR_IDX "Szenzor idx"
+ #define D_DOMOTICZ_TEMP "Hőmérséklet"
+ #define D_DOMOTICZ_TEMP_HUM "Hőmérséklet, páratartalom"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Hőmérséklet, páratartalom, légnyomás"
+ #define D_DOMOTICZ_POWER_ENERGY "Teljesítmény, energia"
+ #define D_DOMOTICZ_ILLUMINANCE "Fényerő"
+ #define D_DOMOTICZ_COUNT "Szám/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Feszültség/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Áram/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Légminőség"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Frissítési időzítő"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Időzítő beállításai"
+#define D_TIMER_PARAMETERS "Időzítő paraméterei"
+#define D_TIMER_ENABLE "Időzítők engedélyezve"
+#define D_TIMER_ARM "Be"
+#define D_TIMER_TIME "Idő"
+#define D_TIMER_DAYS "Napok"
+#define D_TIMER_REPEAT "Ismétlés"
+#define D_TIMER_OUTPUT "Kimenet"
+#define D_TIMER_ACTION "Művelet"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX beállításai"
+#define D_KNX_PARAMETERS "KNX paraméterei"
+#define D_KNX_GENERAL_CONFIG "Általános"
+#define D_KNX_PHYSICAL_ADDRESS "Fizikai cím"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(egyedinek kell lennie a KNX hálózaton)"
+#define D_KNX_ENABLE "KNX engedélyezése"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Íráshoz használt csoportcímek"
+#define D_ADD "Hozzáadás"
+#define D_DELETE "Törlés"
+#define D_REPLY "Válasz"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Fogadáshoz használt csoportcímek"
+#define D_RECEIVED_FROM "Fogadva tőle:"
+#define D_KNX_COMMAND_WRITE "Írás"
+#define D_KNX_COMMAND_READ "Olvasás"
+#define D_KNX_COMMAND_OTHER "Egyáb"
+#define D_SENT_TO "küldve neki:"
+#define D_KNX_WARNING "A csoportcím ( 0 / 0 / 0 ) fenntartott és nem használható."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Mai energia"
+#define D_ENERGY_YESTERDAY "Tegnapi energia"
+#define D_ENERGY_TOTAL "Összes energia"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Szenzor foglalt"
+#define D_SENSOR_CRC_ERROR "Szenzor CRC hiba"
+#define D_SENSORS_FOUND "Szenzorok megtalálva"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Időtúllépés, várakozás"
+#define D_START_SIGNAL_LOW "startjel alacsony"
+#define D_START_SIGNAL_HIGH "startjel magas"
+#define D_PULSE "impulzus"
+#define D_CHECKSUM_FAILURE "Checksum hiba"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "A szenzor nem nyugtázta a parancsot"
+#define D_SHT1X_FOUND "SHT1X megtalálva"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Részecskék"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Gyorsulásm. X-tengely"
+#define D_AY_AXIS "Gyorsulásm. Y-tengely"
+#define D_AZ_AXIS "Gyorsulásm. Z-tengely"
+#define D_GX_AXIS "Giroszkóp X-tengely"
+#define D_GY_AXIS "Giroszkóp Y-tengely"
+#define D_GZ_AXIS "Giroszkóp Z-tengely"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Távolítsa el a súlyt"
+#define D_HX_CAL_REFERENCE "Helyezze fel a referenciasúlyt"
+#define D_HX_CAL_DONE "Kalibrálva"
+#define D_HX_CAL_FAIL "Kalibrálási hiba"
+#define D_RESET_HX711 "Skála újrabeállítása"
+#define D_CONFIGURE_HX711 "Skála konfigurálása"
+#define D_HX711_PARAMETERS "Skálaparaméterek"
+#define D_ITEM_WEIGHT "Tárgy tömege"
+#define D_REFERENCE_WEIGHT "Referenciatömeg"
+#define D_CALIBRATE "Kalibrálás"
+#define D_CALIBRATION "Kalibrálás"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Szélirány"
+#define D_TX20_WIND_SPEED "Szélsebesség"
+#define D_TX20_WIND_SPEED_AVG "Átlag szélsebesség"
+#define D_TX20_WIND_SPEED_MAX "Max. szélsebesség"
+#define D_TX20_NORTH "É"
+#define D_TX20_EAST "K"
+#define D_TX20_SOUTH "D"
+#define D_TX20_WEST "NY"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 lejátszó"
+#define D_SENSOR_IRSEND "IR adó"
+#define D_SENSOR_SWITCH "Kapcsoló" // Suffix "1"
+#define D_SENSOR_BUTTON "Gomb" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "LED" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Számláló" // Suffix "1"
+#define D_SENSOR_IRRECV "IR vevő"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Háttérfény"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "h"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "s"
+#define D_UNIT_SECTORS "szektorok"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Fázisszög"
+#define D_IMPORT_ACTIVE "Bejövő aktív"
+#define D_EXPORT_ACTIVE "Kimenő aktív"
+#define D_IMPORT_REACTIVE "Bejövő reaktív"
+#define D_EXPORT_REACTIVE "Kimenő reaktív"
+#define D_TOTAL_REACTIVE "Összes reaktív"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "fok"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_HU_HU_H_
diff --git a/tasmota/language/it-IT.h b/tasmota/language/it-IT.h
index 0585c12d8..a716988de 100644
--- a/tasmota/language/it-IT.h
+++ b/tasmota/language/it-IT.h
@@ -1,701 +1,703 @@
-/*
- it-IT.h - localization for Italian - Italy for Tasmota
-
- Copyright (C) 2019 Gennaro Tortone - some mods by Antonio Fragola
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_IT_IT_H_
-#define _LANGUAGE_IT_IT_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.0.0a
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1040
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "it"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "DomLunMarMerGioVenSab"
-#define D_MONTH3LIST "GenFebMarAprMagGiuLugAgoSetOttNovDic"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Qualità dell'aria"
-#define D_AP "AP" // Access Point
-#define D_AS "come"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Numero di boot"
-#define D_BRIGHTLIGHT "Luminoso"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Pulsante"
-#define D_BY "da" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Canale"
-#define D_CO2 "CO2"
-#define D_CODE "codice" // Button code
-#define D_COLDLIGHT "Fredda"
-#define D_COMMAND "Comando"
-#define D_CONNECTED "Connesso"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Conteggio"
-#define D_COUNTER "Contatore"
-#define D_CURRENT "Corrente" // As in Voltage and Current
-#define D_DATA "Dati"
-#define D_DARKLIGHT "Scuro"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Disabilitato"
-#define D_DISTANCE "Distanza"
-#define D_DNS_SERVER "DNS Server"
-#define D_DONE "Fatto"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulazione"
-#define D_ENABLED "Abilitato"
-#define D_ERASE "Cancellare"
-#define D_ERROR "Errore"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Fallito"
-#define D_FALLBACK "Riserva"
-#define D_FALLBACK_TOPIC "Topic Riserva"
-#define D_FALSE "Falso"
-#define D_FILE "File"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Memoria Libera"
-#define D_FREQUENCY "Frequenza"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Gruppo"
-#define D_HOST "Host"
-#define D_HOSTNAME "Nome Host"
-#define D_HUMIDITY "Umidità"
-#define D_ILLUMINANCE "Illuminazione"
-#define D_IMMEDIATE "immediato" // Button immediate
-#define D_INDEX "Indice"
-#define D_INFO "Info"
-#define D_INFRARED "Infrarosso"
-#define D_INITIALIZED "Inizializzato"
-#define D_IP_ADDRESS "Indirizzo IP"
-#define D_LIGHT "Luce"
-#define D_LWT "LWT"
-#define D_MODULE "Modulo"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-pressione"
-#define D_NOISE "Rumore"
-#define D_NONE "Nessuno"
-#define D_OFF "Off"
-#define D_OFFLINE "Offline"
-#define D_OK "Ok"
-#define D_ON "On"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Password"
-#define D_PORT "Porta"
-#define D_POWER_FACTOR "Fattore di potenza"
-#define D_POWERUSAGE "Potenza"
-#define D_POWERUSAGE_ACTIVE "Potenza Attiva"
-#define D_POWERUSAGE_APPARENT "Potenza Apparente"
-#define D_POWERUSAGE_REACTIVE "Potenza Reattiva"
-#define D_PRESSURE "Pressione"
-#define D_PRESSUREATSEALEVEL "Pressione al livello del mare"
-#define D_PROGRAM_FLASH_SIZE "Dimensione Flash Programma"
-#define D_PROGRAM_SIZE "Dimensione Programma"
-#define D_PROJECT "Progetto"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Ricevuto"
-#define D_RESTART "Riavvio"
-#define D_RESTARTING "Riavviando"
-#define D_RESTART_REASON "Causa Riavvio"
-#define D_RESTORE "ripristino"
-#define D_RETAINED "salvato"
-#define D_RULE "Rule"
-#define D_SAVE "Salva"
-#define D_SENSOR "Sensore"
-#define D_SSID "SSId"
-#define D_START "Start"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Maschera Subnet"
-#define D_SUBSCRIBE_TO "Sottoscrivi a"
-#define D_UNSUBSCRIBE_FROM "Cancella da"
-#define D_SUCCESSFUL "Riuscito"
-#define D_SUNRISE "Alba"
-#define D_SUNSET "Tramonto"
-#define D_TEMPERATURE "Temperatura"
-#define D_TO "a"
-#define D_TOGGLE "Toggle"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Trasmesso"
-#define D_TRUE "Vero"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "Aggiornamento"
-#define D_UPLOAD "Invio"
-#define D_UPTIME "Uptime"
-#define D_USER "Utente"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Indice UV"
-#define D_UV_INDEX_1 "Basso"
-#define D_UV_INDEX_2 "Medio"
-#define D_UV_INDEX_3 "Alto"
-#define D_UV_INDEX_4 "Pericolo"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "Livello UV"
-#define D_UV_POWER "Intensità UV"
-#define D_VERSION "Versione"
-#define D_VOLTAGE "Tensione"
-#define D_WEIGHT "Peso"
-#define D_WARMLIGHT "Calda"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ATTENZIONE Questa versione non supporta il salvataggio delle impostazioni"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Log Seriale disabilitato"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog ri-abilitato"
-
-#define D_SET_BAUDRATE_TO "Baudrate impostato a"
-#define D_RECEIVED_TOPIC "Topic Ricevuto"
-#define D_DATA_SIZE "Dimensione Dati"
-#define D_ANALOG_INPUT "Ingresso Analogico"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Ciclo Bloccato"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig Fallito con stato"
-#define D_ACTIVE_FOR_3_MINUTES "Attivo per 3 minuti"
-#define D_FAILED_TO_START "Partenza fallita"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "Connessione ad AP"
-#define D_IN_MODE "In modalità"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connessione fallita, indirizzo IP non ricevuto"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Connessione fallita, AP non raggiungibile"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Connessione fallita, password AP non corretta"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Connessione fallita, timeout AP"
-#define D_ATTEMPTING_CONNECTION "Tentativo di connessione..."
-#define D_CHECKING_CONNECTION "Controllo connessione..."
-#define D_QUERY_DONE "Query eseguita. Servizio MQTT trovato"
-#define D_MQTT_SERVICE_FOUND "Servizio MQTT trovato su"
-#define D_FOUND_AT "trovato a"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host non trovato"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Salvato nella flash in"
-#define D_LOADED_FROM_FLASH_AT "Caricato dalla flash da"
-#define D_USE_DEFAULTS "Utilizzo valori default"
-#define D_ERASED_SECTOR "Settore cancellato"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Abilitare JavaScript per utilizzare Tasmota"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
effettuare aggiornamento"
-#define D_WEBSERVER_ACTIVE_ON "Web server attivo su"
-#define D_WITH_IP_ADDRESS "con indirizzo IP"
-#define D_WEBSERVER_STOPPED "Web server arrestato"
-#define D_FILE_NOT_FOUND "File Non Trovato"
-#define D_REDIRECTED "Redirezione al captive portal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Impostazione Wifimanager come AccessPoint e Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Impostazione Wifimanager come AccessPoint"
-#define D_TRYING_TO_CONNECT "Tentativo di connessione del dispositivo alla rete"
-
-#define D_RESTART_IN "Riavvio in"
-#define D_SECONDS "secondi"
-#define D_DEVICE_WILL_RESTART "Il dispositivo verrà riavviato tra pochi secondi"
-#define D_BUTTON_TOGGLE "On/Off"
-#define D_CONFIGURATION "Configurazione"
-#define D_INFORMATION "Informazioni"
-#define D_FIRMWARE_UPGRADE "Aggiornamento Firmware"
-#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Conferma Riavvio"
-
-#define D_CONFIGURE_MODULE "Configurazione Modulo"
-#define D_CONFIGURE_WIFI "Configurazione WiFi"
-#define D_CONFIGURE_MQTT "Configurazione MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configurazione Domoticz"
-#define D_CONFIGURE_LOGGING "Configurazione Logging"
-#define D_CONFIGURE_OTHER "Configurazione Extra"
-#define D_CONFIRM_RESET_CONFIGURATION "Conferma Reset Configurazione"
-#define D_RESET_CONFIGURATION "Reset Configurazione"
-#define D_BACKUP_CONFIGURATION "Backup Configurazione"
-#define D_RESTORE_CONFIGURATION "Ripristino Configurazione"
-#define D_MAIN_MENU "Menu Principale"
-
-#define D_MODULE_PARAMETERS "Parametri del modulo"
-#define D_MODULE_TYPE "Tipo modulo"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Seriale In"
-#define D_SERIAL_OUT "Seriale Out"
-
-#define D_WIFI_PARAMETERS "Parametri Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Scansione delle reti wifi"
-#define D_SCAN_DONE "Scansione effettuata"
-#define D_NO_NETWORKS_FOUND "Nessuna rete trovata"
-#define D_REFRESH_TO_SCAN_AGAIN "Ricarica per nuova scansione"
-#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplicato"
-#define D_SKIPPING_LOW_QUALITY "Ignorato a causa di bassa qualità"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Password"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Password"
-
-#define D_MQTT_PARAMETERS "Parametri MQTT"
-#define D_CLIENT "Client"
-#define D_FULL_TOPIC "Full Topic"
-
-#define D_LOGGING_PARAMETERS "Parametri Logging"
-#define D_SERIAL_LOG_LEVEL "Livello di log Seriale"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "livello di log Web"
-#define D_SYS_LOG_LEVEL "livello di log Sys"
-#define D_MORE_DEBUG "Debug aggiuntivo"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog porta"
-#define D_TELEMETRY_PERIOD "Periodo Telemetria"
-
-#define D_OTHER_PARAMETERS "Altri parametri"
-#define D_TEMPLATE "Modello"
-#define D_ACTIVATE "Attivare"
-#define D_WEB_ADMIN_PASSWORD "Password Amministratore Web"
-#define D_MQTT_ENABLE "Abilita MQTT"
-#define D_FRIENDLY_NAME "Nome amichevole"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "dispositivo singolo"
-#define D_MULTI_DEVICE "dispositivo multiplo"
-
-#define D_CONFIGURE_TEMPLATE "Configurare Modello"
-#define D_TEMPLATE_PARAMETERS "Parametri Modello"
-#define D_TEMPLATE_NAME "Nome"
-#define D_BASE_TYPE "Basato nel"
-#define D_TEMPLATE_FLAGS "Opzioni"
-
-#define D_SAVE_CONFIGURATION "Salva configurazione"
-#define D_CONFIGURATION_SAVED "Configurazione salvata"
-#define D_CONFIGURATION_RESET "Configurazione azzerata"
-
-#define D_PROGRAM_VERSION "Versione del programma"
-#define D_BUILD_DATE_AND_TIME "Data e ora compilazione"
-#define D_CORE_AND_SDK_VERSION "Versione Core/SDK"
-#define D_FLASH_WRITE_COUNT "Contatore scrittura Flash"
-#define D_MAC_ADDRESS "Indirizzo MAC"
-#define D_MQTT_HOST "MQTT Host"
-#define D_MQTT_PORT "MQTT Porta"
-#define D_MQTT_CLIENT "MQTT Client"
-#define D_MQTT_USER "MQTT Utente"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Dimensione Flash"
-#define D_FREE_PROGRAM_SPACE "Spazio Libero Memoria Programma"
-
-#define D_UPGRADE_BY_WEBSERVER "Aggiornamento da web server"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Avvio aggiornamento"
-#define D_UPGRADE_BY_FILE_UPLOAD "Aggiornamento tramite invio file"
-#define D_UPLOAD_STARTED "Invio iniziato"
-#define D_UPGRADE_STARTED "Aggiornamento avviato"
-#define D_UPLOAD_DONE "Invio effettuato"
-#define D_UPLOAD_ERR_1 "Nessun file selezionato"
-#define D_UPLOAD_ERR_2 "Spazio insufficiente"
-#define D_UPLOAD_ERR_3 "Magic byte non corrispondente a 0xE9"
-#define D_UPLOAD_ERR_4 "Dimensione della memoria programma maggiore della dimensione reale della flash"
-#define D_UPLOAD_ERR_5 "Errore di comparazione del buffer di invio"
-#define D_UPLOAD_ERR_6 "Invio fallito. Abilitare logging 3"
-#define D_UPLOAD_ERR_7 "Invio annullato"
-#define D_UPLOAD_ERR_8 "File non valido"
-#define D_UPLOAD_ERR_9 "File troppo grande"
-#define D_UPLOAD_ERR_10 "Inizializzazione fallita del chip RF"
-#define D_UPLOAD_ERR_11 "Cancellazione fallita del chip RF"
-#define D_UPLOAD_ERR_12 "Scrittura fallita del chip RF"
-#define D_UPLOAD_ERR_13 "Decodifica fallita del firmware RF"
-#define D_UPLOAD_ERROR_CODE "Codice errore invio"
-
-#define D_ENTER_COMMAND "Inserire comando"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Abilitare weblog 2 se è attesa una risposta"
-#define D_NEED_USER_AND_PASSWORD "Richiesto user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifica TLS fingerprint..."
-#define D_TLS_CONNECT_FAILED_TO "Connessione TLS fallita a"
-#define D_RETRY_IN "Nuovo tentativo in"
-#define D_VERIFIED "Verificato Fingerprint"
-#define D_INSECURE "Connessione insicura a causa di Fingerprint non valido"
-#define D_CONNECT_FAILED_TO "Connessione Fallita a"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast disabilitato"
-#define D_MULTICAST_REJOINED "Multicast (ri)associato"
-#define D_MULTICAST_JOIN_FAILED "Associazione Multicast fallita"
-#define D_FAILED_TO_SEND_RESPONSE "Invio risposta fallito"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo evento base"
-#define D_WEMO_EVENT_SERVICE "WeMo servizio eventi"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "Impostazione WeMo"
-#define D_RESPONSE_SENT "Risposta inviata"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Impostazione Hue"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API non implementata"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST argomenti"
-#define D_3_RESPONSE_PACKETS_SENT "3 pacchetti di risposta inviati"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Parametri Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Intervallo di aggiornamento"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configura Timer"
-#define D_TIMER_PARAMETERS "Parametri Timer"
-#define D_TIMER_ENABLE "Abilita Timer"
-#define D_TIMER_ARM "Attiva"
-#define D_TIMER_TIME "Ora"
-#define D_TIMER_DAYS "Giorni"
-#define D_TIMER_REPEAT "Ripeti"
-#define D_TIMER_OUTPUT "Output"
-#define D_TIMER_ACTION "Azione"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configura KNX"
-#define D_KNX_PARAMETERS "Parametri KNX"
-#define D_KNX_GENERAL_CONFIG "Generale"
-#define D_KNX_PHYSICAL_ADDRESS "Indirizzo Fisico"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Deve essere univoco nella rete KNX )"
-#define D_KNX_ENABLE "Abilita KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dati da Inviare al Gruppo di Indirizzi"
-#define D_ADD "Aggiungi"
-#define D_DELETE "Elimina"
-#define D_REPLY "Rispondi"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppo di Indirizzi da cui Ricevere Dati"
-#define D_RECEIVED_FROM "Ricevuto Da"
-#define D_KNX_COMMAND_WRITE "Scrivi"
-#define D_KNX_COMMAND_READ "Leggi"
-#define D_KNX_COMMAND_OTHER "Altro"
-#define D_SENT_TO "invia a"
-#define D_KNX_WARNING "L'indirizzo del gruppo ( 0 / 0 / 0 ) è riservato e non può essere usato."
-#define D_KNX_ENHANCEMENT "Miglioramento Comunicazione"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energia Oggi"
-#define D_ENERGY_YESTERDAY "Energia Ieri"
-#define D_ENERGY_TOTAL "Energia Totale"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Aperta"
-#define D_CLOSE "Chiusa"
-#define D_DOMOTICZ_SHUTTER "Serranda"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configura PCF8574"
-#define D_PCF8574_PARAMETERS "Parametri PCF8574"
-#define D_INVERT_PORTS "Porte Invertite"
-#define D_DEVICE "Dispositivo"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensore occupato"
-#define D_SENSOR_CRC_ERROR "Sensore errore CRC"
-#define D_SENSORS_FOUND "Sensori trovati"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Attesa timeout per"
-#define D_START_SIGNAL_LOW "inizio segnale basso"
-#define D_START_SIGNAL_HIGH "inizio segnale alto"
-#define D_PULSE "impulso"
-#define D_CHECKSUM_FAILURE "Checksum fallito"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensore non ha eseguito il comando ACK"
-#define D_SHT1X_FOUND "SHT1X trovato"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particelle"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. Asse-X"
-#define D_AY_AXIS "Accel. Asse-Y"
-#define D_AZ_AXIS "Accel. Asse-Z"
-#define D_GX_AXIS "Gyro Asse-X"
-#define D_GY_AXIS "Gyro Asse-Y"
-#define D_GZ_AXIS "Gyro Asse-Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Rimuovere peso"
-#define D_HX_CAL_REFERENCE "Caricare peso di riferimento"
-#define D_HX_CAL_DONE "Calibrato"
-#define D_HX_CAL_FAIL "Calibrazione fallita"
-#define D_RESET_HX711 "Reset Scala"
-#define D_CONFIGURE_HX711 "Configura Scala"
-#define D_HX711_PARAMETERS "Parametri Scala"
-#define D_ITEM_WEIGHT "Peso oggetto"
-#define D_REFERENCE_WEIGHT "Peso di riferimento"
-#define D_CALIBRATE "Calibrato"
-#define D_CALIBRATION "Calibrazione"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Direzione Vento"
-#define D_TX20_WIND_SPEED "Velocità Vento"
-#define D_TX20_WIND_SPEED_AVG "Velocità Media Vento"
-#define D_TX20_WIND_SPEED_MAX "Velocità Massima Vento"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "O"
-
-// 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 "User"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "settori"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Angolo Fase"
-#define D_IMPORT_ACTIVE "Potenza Attiva Importata"
-#define D_EXPORT_ACTIVE "Potenza Attiva Esportata"
-#define D_IMPORT_REACTIVE "Potenza Reattiva Importata"
-#define D_EXPORT_REACTIVE "Potenza Reattiva Esportata"
-#define D_TOTAL_REACTIVE "Potenza Reattiva Totale"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "°"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltaggio"
-#define D_PV1_CURRENT "PV1 Corrente"
-#define D_PV1_POWER "PV1 Eergia"
-#define D_PV2_VOLTAGE "PV2 Voltaggio"
-#define D_PV2_CURRENT "PV2 Corrente"
-#define D_PV2_POWER "PV2 Energia"
-#define D_SOLAR_POWER "Energia Solar"
-#define D_INVERTER_POWER "Energia Inverter"
-#define D_STATUS "Stato"
-#define D_WAITING "In attesa"
-#define D_CHECKING "Controllando"
-#define D_WORKING "Lavorando"
-#define D_FAILURE "Errore"
-#define D_SOLAX_ERROR_0 "No Codice Errore"
-#define D_SOLAX_ERROR_1 "Errore Grid Persa"
-#define D_SOLAX_ERROR_2 "Errore Voltaggio Grid"
-#define D_SOLAX_ERROR_3 "Errore Frequenza Grid"
-#define D_SOLAX_ERROR_4 "Errore Voltaggio Pv"
-#define D_SOLAX_ERROR_5 "Errore Isolamento"
-#define D_SOLAX_ERROR_6 "Errore Temperatura Eccessiva"
-#define D_SOLAX_ERROR_7 "Errore Ventilatore"
-#define D_SOLAX_ERROR_8 "Altro Errore del Dispositivo"
-
-#endif // _LANGUAGE_IT_IT_H_
+/*
+ it-IT.h - localization for Italian - Italy for Tasmota
+
+ Copyright (C) 2019 Gennaro Tortone - some mods by Antonio Fragola
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_IT_IT_H_
+#define _LANGUAGE_IT_IT_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.0.0a
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1040
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "it"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "DomLunMarMerGioVenSab"
+#define D_MONTH3LIST "GenFebMarAprMagGiuLugAgoSetOttNovDic"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Qualità dell'aria"
+#define D_AP "AP" // Access Point
+#define D_AS "come"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Numero di boot"
+#define D_BRIGHTLIGHT "Luminoso"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Pulsante"
+#define D_BY "da" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Canale"
+#define D_CO2 "CO2"
+#define D_CODE "codice" // Button code
+#define D_COLDLIGHT "Fredda"
+#define D_COMMAND "Comando"
+#define D_CONNECTED "Connesso"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Conteggio"
+#define D_COUNTER "Contatore"
+#define D_CURRENT "Corrente" // As in Voltage and Current
+#define D_DATA "Dati"
+#define D_DARKLIGHT "Scuro"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Disabilitato"
+#define D_DISTANCE "Distanza"
+#define D_DNS_SERVER "DNS Server"
+#define D_DONE "Fatto"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulazione"
+#define D_ENABLED "Abilitato"
+#define D_ERASE "Cancellare"
+#define D_ERROR "Errore"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Fallito"
+#define D_FALLBACK "Riserva"
+#define D_FALLBACK_TOPIC "Topic Riserva"
+#define D_FALSE "Falso"
+#define D_FILE "File"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Memoria Libera"
+#define D_FREQUENCY "Frequenza"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Gruppo"
+#define D_HOST "Host"
+#define D_HOSTNAME "Nome Host"
+#define D_HUMIDITY "Umidità"
+#define D_ILLUMINANCE "Illuminazione"
+#define D_IMMEDIATE "immediato" // Button immediate
+#define D_INDEX "Indice"
+#define D_INFO "Info"
+#define D_INFRARED "Infrarosso"
+#define D_INITIALIZED "Inizializzato"
+#define D_IP_ADDRESS "Indirizzo IP"
+#define D_LIGHT "Luce"
+#define D_LWT "LWT"
+#define D_MODULE "Modulo"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-pressione"
+#define D_NOISE "Rumore"
+#define D_NONE "Nessuno"
+#define D_OFF "Off"
+#define D_OFFLINE "Offline"
+#define D_OK "Ok"
+#define D_ON "On"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Password"
+#define D_PORT "Porta"
+#define D_POWER_FACTOR "Fattore di potenza"
+#define D_POWERUSAGE "Potenza"
+#define D_POWERUSAGE_ACTIVE "Potenza Attiva"
+#define D_POWERUSAGE_APPARENT "Potenza Apparente"
+#define D_POWERUSAGE_REACTIVE "Potenza Reattiva"
+#define D_PRESSURE "Pressione"
+#define D_PRESSUREATSEALEVEL "Pressione al livello del mare"
+#define D_PROGRAM_FLASH_SIZE "Dimensione Flash Programma"
+#define D_PROGRAM_SIZE "Dimensione Programma"
+#define D_PROJECT "Progetto"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Ricevuto"
+#define D_RESTART "Riavvio"
+#define D_RESTARTING "Riavviando"
+#define D_RESTART_REASON "Causa Riavvio"
+#define D_RESTORE "ripristino"
+#define D_RETAINED "salvato"
+#define D_RULE "Rule"
+#define D_SAVE "Salva"
+#define D_SENSOR "Sensore"
+#define D_SSID "SSId"
+#define D_START "Start"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Maschera Subnet"
+#define D_SUBSCRIBE_TO "Sottoscrivi a"
+#define D_UNSUBSCRIBE_FROM "Cancella da"
+#define D_SUCCESSFUL "Riuscito"
+#define D_SUNRISE "Alba"
+#define D_SUNSET "Tramonto"
+#define D_TEMPERATURE "Temperatura"
+#define D_TO "a"
+#define D_TOGGLE "Toggle"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Trasmesso"
+#define D_TRUE "Vero"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "Aggiornamento"
+#define D_UPLOAD "Invio"
+#define D_UPTIME "Uptime"
+#define D_USER "Utente"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Indice UV"
+#define D_UV_INDEX_1 "Basso"
+#define D_UV_INDEX_2 "Medio"
+#define D_UV_INDEX_3 "Alto"
+#define D_UV_INDEX_4 "Pericolo"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "Livello UV"
+#define D_UV_POWER "Intensità UV"
+#define D_VERSION "Versione"
+#define D_VOLTAGE "Tensione"
+#define D_WEIGHT "Peso"
+#define D_WARMLIGHT "Calda"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ATTENZIONE Questa versione non supporta il salvataggio delle impostazioni"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Log Seriale disabilitato"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog ri-abilitato"
+
+#define D_SET_BAUDRATE_TO "Baudrate impostato a"
+#define D_RECEIVED_TOPIC "Topic Ricevuto"
+#define D_DATA_SIZE "Dimensione Dati"
+#define D_ANALOG_INPUT "Ingresso Analogico"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Ciclo Bloccato"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig Fallito con stato"
+#define D_ACTIVE_FOR_3_MINUTES "Attivo per 3 minuti"
+#define D_FAILED_TO_START "Partenza fallita"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "Connessione ad AP"
+#define D_IN_MODE "In modalità"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connessione fallita, indirizzo IP non ricevuto"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Connessione fallita, AP non raggiungibile"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Connessione fallita, password AP non corretta"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Connessione fallita, timeout AP"
+#define D_ATTEMPTING_CONNECTION "Tentativo di connessione..."
+#define D_CHECKING_CONNECTION "Controllo connessione..."
+#define D_QUERY_DONE "Query eseguita. Servizio MQTT trovato"
+#define D_MQTT_SERVICE_FOUND "Servizio MQTT trovato su"
+#define D_FOUND_AT "trovato a"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host non trovato"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Salvato nella flash in"
+#define D_LOADED_FROM_FLASH_AT "Caricato dalla flash da"
+#define D_USE_DEFAULTS "Utilizzo valori default"
+#define D_ERASED_SECTOR "Settore cancellato"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Abilitare JavaScript per utilizzare Tasmota"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
effettuare aggiornamento"
+#define D_WEBSERVER_ACTIVE_ON "Web server attivo su"
+#define D_WITH_IP_ADDRESS "con indirizzo IP"
+#define D_WEBSERVER_STOPPED "Web server arrestato"
+#define D_FILE_NOT_FOUND "File Non Trovato"
+#define D_REDIRECTED "Redirezione al captive portal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Impostazione Wifimanager come AccessPoint e Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Impostazione Wifimanager come AccessPoint"
+#define D_TRYING_TO_CONNECT "Tentativo di connessione del dispositivo alla rete"
+
+#define D_RESTART_IN "Riavvio in"
+#define D_SECONDS "secondi"
+#define D_DEVICE_WILL_RESTART "Il dispositivo verrà riavviato tra pochi secondi"
+#define D_BUTTON_TOGGLE "On/Off"
+#define D_CONFIGURATION "Configurazione"
+#define D_INFORMATION "Informazioni"
+#define D_FIRMWARE_UPGRADE "Aggiornamento Firmware"
+#define D_CONSOLE "Console"
+#define D_CONFIRM_RESTART "Conferma Riavvio"
+
+#define D_CONFIGURE_MODULE "Configurazione Modulo"
+#define D_CONFIGURE_WIFI "Configurazione WiFi"
+#define D_CONFIGURE_MQTT "Configurazione MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configurazione Domoticz"
+#define D_CONFIGURE_LOGGING "Configurazione Logging"
+#define D_CONFIGURE_OTHER "Configurazione Extra"
+#define D_CONFIRM_RESET_CONFIGURATION "Conferma Reset Configurazione"
+#define D_RESET_CONFIGURATION "Reset Configurazione"
+#define D_BACKUP_CONFIGURATION "Backup Configurazione"
+#define D_RESTORE_CONFIGURATION "Ripristino Configurazione"
+#define D_MAIN_MENU "Menu Principale"
+
+#define D_MODULE_PARAMETERS "Parametri del modulo"
+#define D_MODULE_TYPE "Tipo modulo"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Seriale In"
+#define D_SERIAL_OUT "Seriale Out"
+
+#define D_WIFI_PARAMETERS "Parametri Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Scansione delle reti wifi"
+#define D_SCAN_DONE "Scansione effettuata"
+#define D_NO_NETWORKS_FOUND "Nessuna rete trovata"
+#define D_REFRESH_TO_SCAN_AGAIN "Ricarica per nuova scansione"
+#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplicato"
+#define D_SKIPPING_LOW_QUALITY "Ignorato a causa di bassa qualità"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Password"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Password"
+
+#define D_MQTT_PARAMETERS "Parametri MQTT"
+#define D_CLIENT "Client"
+#define D_FULL_TOPIC "Full Topic"
+
+#define D_LOGGING_PARAMETERS "Parametri Logging"
+#define D_SERIAL_LOG_LEVEL "Livello di log Seriale"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "livello di log Web"
+#define D_SYS_LOG_LEVEL "livello di log Sys"
+#define D_MORE_DEBUG "Debug aggiuntivo"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog porta"
+#define D_TELEMETRY_PERIOD "Periodo Telemetria"
+
+#define D_OTHER_PARAMETERS "Altri parametri"
+#define D_TEMPLATE "Modello"
+#define D_ACTIVATE "Attivare"
+#define D_WEB_ADMIN_PASSWORD "Password Amministratore Web"
+#define D_MQTT_ENABLE "Abilita MQTT"
+#define D_FRIENDLY_NAME "Nome amichevole"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "dispositivo singolo"
+#define D_MULTI_DEVICE "dispositivo multiplo"
+
+#define D_CONFIGURE_TEMPLATE "Configurare Modello"
+#define D_TEMPLATE_PARAMETERS "Parametri Modello"
+#define D_TEMPLATE_NAME "Nome"
+#define D_BASE_TYPE "Basato nel"
+#define D_TEMPLATE_FLAGS "Opzioni"
+
+#define D_SAVE_CONFIGURATION "Salva configurazione"
+#define D_CONFIGURATION_SAVED "Configurazione salvata"
+#define D_CONFIGURATION_RESET "Configurazione azzerata"
+
+#define D_PROGRAM_VERSION "Versione del programma"
+#define D_BUILD_DATE_AND_TIME "Data e ora compilazione"
+#define D_CORE_AND_SDK_VERSION "Versione Core/SDK"
+#define D_FLASH_WRITE_COUNT "Contatore scrittura Flash"
+#define D_MAC_ADDRESS "Indirizzo MAC"
+#define D_MQTT_HOST "MQTT Host"
+#define D_MQTT_PORT "MQTT Porta"
+#define D_MQTT_CLIENT "MQTT Client"
+#define D_MQTT_USER "MQTT Utente"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Dimensione Flash"
+#define D_FREE_PROGRAM_SPACE "Spazio Libero Memoria Programma"
+
+#define D_UPGRADE_BY_WEBSERVER "Aggiornamento da web server"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Avvio aggiornamento"
+#define D_UPGRADE_BY_FILE_UPLOAD "Aggiornamento tramite invio file"
+#define D_UPLOAD_STARTED "Invio iniziato"
+#define D_UPGRADE_STARTED "Aggiornamento avviato"
+#define D_UPLOAD_DONE "Invio effettuato"
+#define D_UPLOAD_ERR_1 "Nessun file selezionato"
+#define D_UPLOAD_ERR_2 "Spazio insufficiente"
+#define D_UPLOAD_ERR_3 "Magic byte non corrispondente a 0xE9"
+#define D_UPLOAD_ERR_4 "Dimensione della memoria programma maggiore della dimensione reale della flash"
+#define D_UPLOAD_ERR_5 "Errore di comparazione del buffer di invio"
+#define D_UPLOAD_ERR_6 "Invio fallito. Abilitare logging 3"
+#define D_UPLOAD_ERR_7 "Invio annullato"
+#define D_UPLOAD_ERR_8 "File non valido"
+#define D_UPLOAD_ERR_9 "File troppo grande"
+#define D_UPLOAD_ERR_10 "Inizializzazione fallita del chip RF"
+#define D_UPLOAD_ERR_11 "Cancellazione fallita del chip RF"
+#define D_UPLOAD_ERR_12 "Scrittura fallita del chip RF"
+#define D_UPLOAD_ERR_13 "Decodifica fallita del firmware RF"
+#define D_UPLOAD_ERROR_CODE "Codice errore invio"
+
+#define D_ENTER_COMMAND "Inserire comando"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Abilitare weblog 2 se è attesa una risposta"
+#define D_NEED_USER_AND_PASSWORD "Richiesto user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifica TLS fingerprint..."
+#define D_TLS_CONNECT_FAILED_TO "Connessione TLS fallita a"
+#define D_RETRY_IN "Nuovo tentativo in"
+#define D_VERIFIED "Verificato Fingerprint"
+#define D_INSECURE "Connessione insicura a causa di Fingerprint non valido"
+#define D_CONNECT_FAILED_TO "Connessione Fallita a"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast disabilitato"
+#define D_MULTICAST_REJOINED "Multicast (ri)associato"
+#define D_MULTICAST_JOIN_FAILED "Associazione Multicast fallita"
+#define D_FAILED_TO_SEND_RESPONSE "Invio risposta fallito"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo evento base"
+#define D_WEMO_EVENT_SERVICE "WeMo servizio eventi"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "Impostazione WeMo"
+#define D_RESPONSE_SENT "Risposta inviata"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Impostazione Hue"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API non implementata"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST argomenti"
+#define D_3_RESPONSE_PACKETS_SENT "3 pacchetti di risposta inviati"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Parametri Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Intervallo di aggiornamento"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configura Timer"
+#define D_TIMER_PARAMETERS "Parametri Timer"
+#define D_TIMER_ENABLE "Abilita Timer"
+#define D_TIMER_ARM "Attiva"
+#define D_TIMER_TIME "Ora"
+#define D_TIMER_DAYS "Giorni"
+#define D_TIMER_REPEAT "Ripeti"
+#define D_TIMER_OUTPUT "Output"
+#define D_TIMER_ACTION "Azione"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configura KNX"
+#define D_KNX_PARAMETERS "Parametri KNX"
+#define D_KNX_GENERAL_CONFIG "Generale"
+#define D_KNX_PHYSICAL_ADDRESS "Indirizzo Fisico"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Deve essere univoco nella rete KNX )"
+#define D_KNX_ENABLE "Abilita KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dati da Inviare al Gruppo di Indirizzi"
+#define D_ADD "Aggiungi"
+#define D_DELETE "Elimina"
+#define D_REPLY "Rispondi"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppo di Indirizzi da cui Ricevere Dati"
+#define D_RECEIVED_FROM "Ricevuto Da"
+#define D_KNX_COMMAND_WRITE "Scrivi"
+#define D_KNX_COMMAND_READ "Leggi"
+#define D_KNX_COMMAND_OTHER "Altro"
+#define D_SENT_TO "invia a"
+#define D_KNX_WARNING "L'indirizzo del gruppo ( 0 / 0 / 0 ) è riservato e non può essere usato."
+#define D_KNX_ENHANCEMENT "Miglioramento Comunicazione"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energia Oggi"
+#define D_ENERGY_YESTERDAY "Energia Ieri"
+#define D_ENERGY_TOTAL "Energia Totale"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Aperta"
+#define D_CLOSE "Chiusa"
+#define D_DOMOTICZ_SHUTTER "Serranda"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configura PCF8574"
+#define D_PCF8574_PARAMETERS "Parametri PCF8574"
+#define D_INVERT_PORTS "Porte Invertite"
+#define D_DEVICE "Dispositivo"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensore occupato"
+#define D_SENSOR_CRC_ERROR "Sensore errore CRC"
+#define D_SENSORS_FOUND "Sensori trovati"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Attesa timeout per"
+#define D_START_SIGNAL_LOW "inizio segnale basso"
+#define D_START_SIGNAL_HIGH "inizio segnale alto"
+#define D_PULSE "impulso"
+#define D_CHECKSUM_FAILURE "Checksum fallito"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensore non ha eseguito il comando ACK"
+#define D_SHT1X_FOUND "SHT1X trovato"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particelle"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. Asse-X"
+#define D_AY_AXIS "Accel. Asse-Y"
+#define D_AZ_AXIS "Accel. Asse-Z"
+#define D_GX_AXIS "Gyro Asse-X"
+#define D_GY_AXIS "Gyro Asse-Y"
+#define D_GZ_AXIS "Gyro Asse-Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Rimuovere peso"
+#define D_HX_CAL_REFERENCE "Caricare peso di riferimento"
+#define D_HX_CAL_DONE "Calibrato"
+#define D_HX_CAL_FAIL "Calibrazione fallita"
+#define D_RESET_HX711 "Reset Scala"
+#define D_CONFIGURE_HX711 "Configura Scala"
+#define D_HX711_PARAMETERS "Parametri Scala"
+#define D_ITEM_WEIGHT "Peso oggetto"
+#define D_REFERENCE_WEIGHT "Peso di riferimento"
+#define D_CALIBRATE "Calibrato"
+#define D_CALIBRATION "Calibrazione"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Direzione Vento"
+#define D_TX20_WIND_SPEED "Velocità Vento"
+#define D_TX20_WIND_SPEED_AVG "Velocità Media Vento"
+#define D_TX20_WIND_SPEED_MAX "Velocità Massima Vento"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "O"
+
+// 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 "User"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "settori"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Angolo Fase"
+#define D_IMPORT_ACTIVE "Potenza Attiva Importata"
+#define D_EXPORT_ACTIVE "Potenza Attiva Esportata"
+#define D_IMPORT_REACTIVE "Potenza Reattiva Importata"
+#define D_EXPORT_REACTIVE "Potenza Reattiva Esportata"
+#define D_TOTAL_REACTIVE "Potenza Reattiva Totale"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "°"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltaggio"
+#define D_PV1_CURRENT "PV1 Corrente"
+#define D_PV1_POWER "PV1 Eergia"
+#define D_PV2_VOLTAGE "PV2 Voltaggio"
+#define D_PV2_CURRENT "PV2 Corrente"
+#define D_PV2_POWER "PV2 Energia"
+#define D_SOLAR_POWER "Energia Solar"
+#define D_INVERTER_POWER "Energia Inverter"
+#define D_STATUS "Stato"
+#define D_WAITING "In attesa"
+#define D_CHECKING "Controllando"
+#define D_WORKING "Lavorando"
+#define D_FAILURE "Errore"
+#define D_SOLAX_ERROR_0 "No Codice Errore"
+#define D_SOLAX_ERROR_1 "Errore Grid Persa"
+#define D_SOLAX_ERROR_2 "Errore Voltaggio Grid"
+#define D_SOLAX_ERROR_3 "Errore Frequenza Grid"
+#define D_SOLAX_ERROR_4 "Errore Voltaggio Pv"
+#define D_SOLAX_ERROR_5 "Errore Isolamento"
+#define D_SOLAX_ERROR_6 "Errore Temperatura Eccessiva"
+#define D_SOLAX_ERROR_7 "Errore Ventilatore"
+#define D_SOLAX_ERROR_8 "Altro Errore del Dispositivo"
+
+#endif // _LANGUAGE_IT_IT_H_
diff --git a/tasmota/language/ko-KO.h b/tasmota/language/ko-KO.h
index bff508474..4da467267 100644
--- a/tasmota/language/ko-KO.h
+++ b/tasmota/language/ko-KO.h
@@ -1,701 +1,703 @@
-/*
- ko-KO.h - localization for Korean - Korean for Tasmota
-
- Copyright (C) 2019 Theo Arends (translated by NyaamZ)
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_KO_KO_H_
-#define _LANGUAGE_KO_KO_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.2.1.11
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-// https://www.science.co.il/language/Locale-codes.php
-#define LANGUAGE_LCID 1042
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "ko"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "일 월 화 수 목 금 토 "
-#define D_MONTH3LIST "1월 2월 3월 4월 5월 6월 7월 8월 9월 10월11월12월"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "공기질"
-#define D_AP "AP" // Access Point
-#define D_AS "as"
-#define D_AUTO "자동"
-#define D_BLINK "깜박임"
-#define D_BLINKOFF "깜박임 끄기"
-#define D_BOOT_COUNT "부팅 횟수"
-#define D_BRIGHTLIGHT "밝게"
-#define D_BSSID "BSSId"
-#define D_BUTTON "버튼"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "섭씨"
-#define D_CHANNEL "채널"
-#define D_CO2 "이산화탄소"
-#define D_CODE "code" // Button code
-#define D_COLDLIGHT "차갑게"
-#define D_COMMAND "커맨드"
-#define D_CONNECTED "연결됨"
-#define D_COUNT "횟수"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNTER "Counter"
-#define D_CURRENT "전류" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "어둡게"
-#define D_DEBUG "디버그"
-#define D_DISABLED "사용안함"
-#define D_DISTANCE "거리"
-#define D_DNS_SERVER "DNS 서버"
-#define D_DONE "완료"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "에뮬레이션"
-#define D_ENABLED "사용"
-#define D_ERASE "삭제"
-#define D_ERROR "에러"
-#define D_FAHRENHEIT "화씨"
-#define D_FAILED "실패"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback Topic"
-#define D_FALSE "거짓"
-#define D_FILE "파일"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "남은 메모리"
-#define D_FREQUENCY "Frequency"
-#define D_GAS "가스"
-#define D_GATEWAY "게이트웨이"
-#define D_GROUP "그룹"
-#define D_HOST "호스트"
-#define D_HOSTNAME "호스트이름"
-#define D_HUMIDITY "습도"
-#define D_ILLUMINANCE "조도"
-#define D_IMMEDIATE "immediate" // Button immediate
-#define D_INDEX "인덱스"
-#define D_INFO "정보"
-#define D_INFRARED "적외선"
-#define D_INITIALIZED "초기화됨"
-#define D_IP_ADDRESS "IP 주소"
-#define D_LIGHT "밝게"
-#define D_LWT "LWT"
-#define D_MODULE "모듈"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-press"
-#define D_NOISE "소음"
-#define D_NONE "없음"
-#define D_OFF "꺼짐"
-#define D_OFFLINE "오프라인"
-#define D_OK "Ok"
-#define D_ON "켜짐"
-#define D_ONLINE "온라인"
-#define D_PASSWORD "비밀번호"
-#define D_PORT "포트"
-#define D_POWER_FACTOR "Power Factor"
-#define D_POWERUSAGE "전원"
-#define D_POWERUSAGE_ACTIVE "Active Power"
-#define D_POWERUSAGE_APPARENT "Apparent Power"
-#define D_POWERUSAGE_REACTIVE "Reactive Power"
-#define D_PRESSURE "기압"
-#define D_PRESSUREATSEALEVEL "해수면기압"
-#define D_PROGRAM_FLASH_SIZE "플래시 용량"
-#define D_PROGRAM_SIZE "프로그램 용량"
-#define D_PROJECT "프로젝트"
-#define D_RAIN "비"
-#define D_RECEIVED "받음"
-#define D_RESTART "재시작"
-#define D_RESTARTING "재시작 중.."
-#define D_RESTART_REASON "재시작 사유"
-#define D_RESTORE "복구"
-#define D_RETAINED "보류"
-#define D_RULE "규칙"
-#define D_SAVE "저장"
-#define D_SENSOR "센서"
-#define D_SSID "SSId"
-#define D_START "시작"
-#define D_STD_TIME "STD"
-#define D_STOP "정지"
-#define D_SUBNET_MASK "서브넷 마스크"
-#define D_SUBSCRIBE_TO "구독"
-#define D_UNSUBSCRIBE_FROM "구독 해제"
-#define D_SUCCESSFUL "성공"
-#define D_SUNRISE "일출"
-#define D_SUNSET "일몰"
-#define D_TEMPERATURE "온도"
-#define D_TO "to"
-#define D_TOGGLE "켜기/끄기"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "전체 사용량"
-#define D_TRANSMIT "전송"
-#define D_TRUE "참"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "업그레이드"
-#define D_UPLOAD "업로드"
-#define D_UPTIME "가동시간"
-#define D_USER "User"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV 색인"
-#define D_UV_INDEX_1 "낮음"
-#define D_UV_INDEX_2 "보통"
-#define D_UV_INDEX_3 "높음"
-#define D_UV_INDEX_4 "위험"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR" // Out of Range
-#define D_UV_LEVEL "UV 레벨"
-#define D_UV_POWER "UV 파워"
-#define D_VERSION "버전"
-#define D_VOLTAGE "전압"
-#define D_WEIGHT "무게"
-#define D_WARMLIGHT "따뜻하게"
-#define D_WEB_SERVER "웹 서버"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "경고: 이 버전은 영구 설정을 지원하지 않습니다"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serial log 사용 안함"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog log 다시 사용"
-
-#define D_SET_BAUDRATE_TO "Set Baudrate to"
-#define D_RECEIVED_TOPIC "Received Topic"
-#define D_DATA_SIZE "데이터 용량"
-#define D_ANALOG_INPUT "아날로그"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "WPS설정 실패"
-#define D_ACTIVE_FOR_3_MINUTES "3분동안 활성화"
-#define D_FAILED_TO_START "시작 실패"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "AP에 연결 중"
-#define D_IN_MODE "in mode"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP 주소가 수신되지 않아 연결이 실패했습니다"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "연결이 닿지 않아 AP에 연결할 수 없습니다"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "비밀번호가 틀려 AP에 연결할 수 없습니다"
-#define D_CONNECT_FAILED_AP_TIMEOUT "시간초과로 AP에 연결할 수 없습니다"
-#define D_ATTEMPTING_CONNECTION "연결 시도 중..."
-#define D_CHECKING_CONNECTION "연결 체크 중..."
-#define D_QUERY_DONE "쿼리 완료. MQTT 서비스 발견"
-#define D_MQTT_SERVICE_FOUND "MQTT 서비스 발견"
-#define D_FOUND_AT "다음을 발견"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog 호스트가 발견되지 않았습니다"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "플래시에 저장"
-#define D_LOADED_FROM_FLASH_AT "플래시에서 로드"
-#define D_USE_DEFAULTS "디폴트 사용"
-#define D_ERASED_SECTOR "삭제된 섹터"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Tasmota를 사용하려면 JavaScript를 활성화 하십시오."
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
업그레이드가 필요합니다"
-#define D_WEBSERVER_ACTIVE_ON "Web 서버 작동 중"
-#define D_WITH_IP_ADDRESS "IP 주소"
-#define D_WEBSERVER_STOPPED "Web 서버 멈춤"
-#define D_FILE_NOT_FOUND "파일을 찾을 수 없습니다"
-#define D_REDIRECTED "인증 페이지로 리디렉션"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "와이파이 매니저가 AccessPoint와 keep Station을 설정"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "와이파이 매니저가 AccessPoint를 설정"
-#define D_TRYING_TO_CONNECT "장치를 네트워크에 연결하려고 시도 중"
-
-#define D_RESTART_IN "재시작"
-#define D_SECONDS "초"
-#define D_DEVICE_WILL_RESTART "이 장치는 몇 초 후 재시작됩니다"
-#define D_BUTTON_TOGGLE "켜기/끄기"
-#define D_CONFIGURATION "설정 메뉴"
-#define D_INFORMATION "정보"
-#define D_FIRMWARE_UPGRADE "펌웨어 업그레이드"
-#define D_CONSOLE "콘솔"
-#define D_CONFIRM_RESTART "재시작"
-
-#define D_CONFIGURE_MODULE "모듈 설정"
-#define D_CONFIGURE_WIFI "WiFi 설정"
-#define D_CONFIGURE_MQTT "MQTT 설정"
-#define D_CONFIGURE_DOMOTICZ "Domoticz 설정"
-#define D_CONFIGURE_LOGGING "로그 설정"
-#define D_CONFIGURE_OTHER "기타 설정"
-#define D_CONFIRM_RESET_CONFIGURATION "설정 초기화 확인"
-#define D_RESET_CONFIGURATION "설정 초기화"
-#define D_BACKUP_CONFIGURATION "설정 백업"
-#define D_RESTORE_CONFIGURATION "설정 복구"
-#define D_MAIN_MENU "메인 메뉴"
-
-#define D_MODULE_PARAMETERS "모듈 설정"
-#define D_MODULE_TYPE "모듈 타입"
-#define D_PULLUP_ENABLE "버튼 없음/스위치 당김"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Wifi 설정"
-#define D_SCAN_FOR_WIFI_NETWORKS "Wifi 네트워크를 검색.."
-#define D_SCAN_DONE "검색 완료"
-#define D_NO_NETWORKS_FOUND "발견된 네트워크가 없습니다"
-#define D_REFRESH_TO_SCAN_AGAIN "검색 재시도"
-#define D_DUPLICATE_ACCESSPOINT "중복된 AccessPoint"
-#define D_SKIPPING_LOW_QUALITY "약한 네트워크 신호 무시"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 비밀번호"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 비밀번호"
-
-#define D_MQTT_PARAMETERS "MQTT 설정"
-#define D_CLIENT "클라이언트"
-#define D_FULL_TOPIC "Full Topic"
-
-#define D_LOGGING_PARAMETERS "로그 설정"
-#define D_SERIAL_LOG_LEVEL "Serial 로그 레벨"
-#define D_MQTT_LOG_LEVEL "Mqtt 로그 레벨"
-#define D_WEB_LOG_LEVEL "Web 로그 레벨"
-#define D_SYS_LOG_LEVEL "시스템로그 레벨"
-#define D_MORE_DEBUG "More debug"
-#define D_SYSLOG_HOST "시스템로그 호스트"
-#define D_SYSLOG_PORT "시스템로그 포트"
-#define D_TELEMETRY_PERIOD "보고 주기"
-
-#define D_OTHER_PARAMETERS "기타 설정"
-#define D_TEMPLATE "템플릿"
-#define D_ACTIVATE "활성화"
-#define D_WEB_ADMIN_PASSWORD "Web Admin 비밀번호"
-#define D_MQTT_ENABLE "MQTT 사용"
-#define D_FRIENDLY_NAME "Friendly Name"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "단일 장치"
-#define D_MULTI_DEVICE "다수 장치"
-
-#define D_CONFIGURE_TEMPLATE "템플릿 설정"
-#define D_TEMPLATE_PARAMETERS "템플릿 설정"
-#define D_TEMPLATE_NAME "이름"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "옵션"
-
-#define D_SAVE_CONFIGURATION "설정 저장"
-#define D_CONFIGURATION_SAVED "설정 저장 완료"
-#define D_CONFIGURATION_RESET "설정 초기화"
-
-#define D_PROGRAM_VERSION "프로그램 버전"
-#define D_BUILD_DATE_AND_TIME "빌드 날짜"
-#define D_CORE_AND_SDK_VERSION "Core/SDK 버전"
-#define D_FLASH_WRITE_COUNT "플래시 쓰기 횟수"
-#define D_MAC_ADDRESS "MAC 주소"
-#define D_MQTT_HOST "MQTT 호스트"
-#define D_MQTT_PORT "MQTT 포트"
-#define D_MQTT_CLIENT "MQTT 클라이언트"
-#define D_MQTT_USER "MQTT 아이디"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP 칩 Id"
-#define D_FLASH_CHIP_ID "플래시 칩 Id"
-#define D_FLASH_CHIP_SIZE "플래시 용량"
-#define D_FREE_PROGRAM_SPACE "여유 프로그램 공간"
-
-#define D_UPGRADE_BY_WEBSERVER "웹 서버에서 업그레이드"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "업그레이드 시작"
-#define D_UPGRADE_BY_FILE_UPLOAD "파일에서 업로드해 업그레이드"
-#define D_UPLOAD_STARTED "업로드 시작됨"
-#define D_UPGRADE_STARTED "업그레이드 시작됨"
-#define D_UPLOAD_DONE "업그레이드 완료"
-#define D_UPLOAD_ERR_1 "파일이 선택되지 않았습니다"
-#define D_UPLOAD_ERR_2 "용량이 충분하지 않습니다"
-#define D_UPLOAD_ERR_3 "Magic 바이트가 0xE9가 아닙니다"
-#define D_UPLOAD_ERR_4 "플래시 프로그램이 실제 플래시 용량보다 큽니다"
-#define D_UPLOAD_ERR_5 "업로드 버퍼가 일치하지 않습니다"
-#define D_UPLOAD_ERR_6 "업로드 실패. 로그 3 사용"
-#define D_UPLOAD_ERR_7 "업로드 중단"
-#define D_UPLOAD_ERR_8 "파일이 유효하지 않습니다"
-#define D_UPLOAD_ERR_9 "용량이 초과되었습니다"
-#define D_UPLOAD_ERR_10 "RF 칩 초기화 실패"
-#define D_UPLOAD_ERR_11 "RF 칩 삭제 실패"
-#define D_UPLOAD_ERR_12 "RF 칩 쓰기 실패"
-#define D_UPLOAD_ERR_13 "RF 펌웨어 decode 실패"
-#define D_UPLOAD_ERROR_CODE "업로드 에러 코드"
-
-#define D_ENTER_COMMAND "커맨드 입력"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "응답이 있다면 Weblog 2를 사용"
-#define D_NEED_USER_AND_PASSWORD "user=<아이디>&password=<비밀번호> 필요"
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "TLS 지문 확인..."
-#define D_TLS_CONNECT_FAILED_TO "TLS 연결 실패"
-#define D_RETRY_IN "재시도 중"
-#define D_VERIFIED "지문 확인 완료"
-#define D_INSECURE "유효하지 않은 지문으로 연결이 되지 않았습니다"
-#define D_CONNECT_FAILED_TO "연결 실패"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast 사용 불가"
-#define D_MULTICAST_REJOINED "Multicast (다시)가입됨"
-#define D_MULTICAST_JOIN_FAILED "Multicast 가입 실패"
-#define D_FAILED_TO_SEND_RESPONSE "요청 전송 실패"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo 기본 이벤트"
-#define D_WEMO_EVENT_SERVICE "WeMo 이벤트 서비스"
-#define D_WEMO_META_SERVICE "WeMo meta 서비스"
-#define D_WEMO_SETUP "WeMo 설정"
-#define D_RESPONSE_SENT "요청 전송됨"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue 설정"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API가 포함되지 않음"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 요청 패킷이 전송됨"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz 설정"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "스위치 idx"
-#define D_DOMOTICZ_SENSOR_IDX "센서 idx"
- #define D_DOMOTICZ_TEMP "온도"
- #define D_DOMOTICZ_TEMP_HUM "온도,습도"
- #define D_DOMOTICZ_TEMP_HUM_BARO "온도,습도,기압"
- #define D_DOMOTICZ_POWER_ENERGY "전력,전력량"
- #define D_DOMOTICZ_ILLUMINANCE "조도"
- #define D_DOMOTICZ_COUNT "횟수/PM1"
- #define D_DOMOTICZ_VOLTAGE "전압/PM2.5"
- #define D_DOMOTICZ_CURRENT "전류/PM10"
- #define D_DOMOTICZ_AIRQUALITY "공기질"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "타이머 갱신"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "타이머 설정"
-#define D_TIMER_PARAMETERS "타이머 설정"
-#define D_TIMER_ENABLE "타이머 사용"
-#define D_TIMER_ARM "Arm"
-#define D_TIMER_TIME "시간"
-#define D_TIMER_DAYS "일"
-#define D_TIMER_REPEAT "반복"
-#define D_TIMER_OUTPUT "출력"
-#define D_TIMER_ACTION "행동"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX 설정"
-#define D_KNX_PARAMETERS "KNX 설정"
-#define D_KNX_GENERAL_CONFIG "일반"
-#define D_KNX_PHYSICAL_ADDRESS "물리적 주소"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( KNX 네트워크 상에서 반드시 고유한 이름이어야 합니다 )"
-#define D_KNX_ENABLE "KNX 사용"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "그룹 주소로 데이타를 보냅니다"
-#define D_ADD "추가"
-#define D_DELETE "삭제"
-#define D_REPLY "응답"
-#define D_KNX_GROUP_ADDRESS_TO_READ "받은 데이터의 그룹 주소"
-#define D_RECEIVED_FROM "다음에서 받음"
-#define D_KNX_COMMAND_WRITE "쓰기"
-#define D_KNX_COMMAND_READ "읽기"
-#define D_KNX_COMMAND_OTHER "기타"
-#define D_SENT_TO "다음으로 보내기"
-#define D_KNX_WARNING "그룹 주소 ( 0 / 0 / 0 )은 예약되어 사용할 수 없습니다"
-#define D_KNX_ENHANCEMENT "커뮤니케이션 강화"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "금일 전력 사용량"
-#define D_ENERGY_YESTERDAY "어제 전력 사용량"
-#define D_ENERGY_TOTAL "총 전력 사용량"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "열기"
-#define D_CLOSE "닫기"
-#define D_DOMOTICZ_SHUTTER "셔터"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "PCF8574 설정"
-#define D_PCF8574_PARAMETERS "PCF8574 파라미터"
-#define D_INVERT_PORTS "포트 반전"
-#define D_DEVICE "장치"
-#define D_DEVICE_INPUT "입력"
-#define D_DEVICE_OUTPUT "출력"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "센서가 사용 중"
-#define D_SENSOR_CRC_ERROR "센서 CRC 에러"
-#define D_SENSORS_FOUND "센서 발견"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "대기 시간 초과"
-#define D_START_SIGNAL_LOW "시작 신호 낮음"
-#define D_START_SIGNAL_HIGH "시작 신호 높음"
-#define D_PULSE "pulse"
-#define D_CHECKSUM_FAILURE "체크섬 실패"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "센서가 ACK 명령을 수행하지 않음"
-#define D_SHT1X_FOUND "SHT1X 발견"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "입자"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "중량 제거"
-#define D_HX_CAL_REFERENCE "참조 중량 로드"
-#define D_HX_CAL_DONE "교정됨"
-#define D_HX_CAL_FAIL "교정 실패"
-#define D_RESET_HX711 "스케일 초기화"
-#define D_CONFIGURE_HX711 "스케일 설정"
-#define D_HX711_PARAMETERS "스케일 상세"
-#define D_ITEM_WEIGHT "아이템 중량"
-#define D_REFERENCE_WEIGHT "참조 중량"
-#define D_CALIBRATE "교정"
-#define D_CALIBRATION "교정"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "풍향"
-#define D_TX20_WIND_SPEED "풍속"
-#define D_TX20_WIND_SPEED_AVG "평균 풍속"
-#define D_TX20_WIND_SPEED_MAX "최대 풍속"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "시"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "마이크로미터"
-#define D_UNIT_MICROSECOND "마이크로초"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "밀리초"
-#define D_UNIT_MINUTE "분"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "초"
-#define D_UNIT_SECTORS "섹터"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_KO_KO_H_
+/*
+ ko-KO.h - localization for Korean - Korean for Tasmota
+
+ Copyright (C) 2019 Theo Arends (translated by NyaamZ)
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_KO_KO_H_
+#define _LANGUAGE_KO_KO_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.2.1.11
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+// https://www.science.co.il/language/Locale-codes.php
+#define LANGUAGE_LCID 1042
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "ko"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "일 월 화 수 목 금 토 "
+#define D_MONTH3LIST "1월 2월 3월 4월 5월 6월 7월 8월 9월 10월11월12월"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "공기질"
+#define D_AP "AP" // Access Point
+#define D_AS "as"
+#define D_AUTO "자동"
+#define D_BLINK "깜박임"
+#define D_BLINKOFF "깜박임 끄기"
+#define D_BOOT_COUNT "부팅 횟수"
+#define D_BRIGHTLIGHT "밝게"
+#define D_BSSID "BSSId"
+#define D_BUTTON "버튼"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "섭씨"
+#define D_CHANNEL "채널"
+#define D_CO2 "이산화탄소"
+#define D_CODE "code" // Button code
+#define D_COLDLIGHT "차갑게"
+#define D_COMMAND "커맨드"
+#define D_CONNECTED "연결됨"
+#define D_COUNT "횟수"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNTER "Counter"
+#define D_CURRENT "전류" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "어둡게"
+#define D_DEBUG "디버그"
+#define D_DISABLED "사용안함"
+#define D_DISTANCE "거리"
+#define D_DNS_SERVER "DNS 서버"
+#define D_DONE "완료"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "에뮬레이션"
+#define D_ENABLED "사용"
+#define D_ERASE "삭제"
+#define D_ERROR "에러"
+#define D_FAHRENHEIT "화씨"
+#define D_FAILED "실패"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback Topic"
+#define D_FALSE "거짓"
+#define D_FILE "파일"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "남은 메모리"
+#define D_FREQUENCY "Frequency"
+#define D_GAS "가스"
+#define D_GATEWAY "게이트웨이"
+#define D_GROUP "그룹"
+#define D_HOST "호스트"
+#define D_HOSTNAME "호스트이름"
+#define D_HUMIDITY "습도"
+#define D_ILLUMINANCE "조도"
+#define D_IMMEDIATE "immediate" // Button immediate
+#define D_INDEX "인덱스"
+#define D_INFO "정보"
+#define D_INFRARED "적외선"
+#define D_INITIALIZED "초기화됨"
+#define D_IP_ADDRESS "IP 주소"
+#define D_LIGHT "밝게"
+#define D_LWT "LWT"
+#define D_MODULE "모듈"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-press"
+#define D_NOISE "소음"
+#define D_NONE "없음"
+#define D_OFF "꺼짐"
+#define D_OFFLINE "오프라인"
+#define D_OK "Ok"
+#define D_ON "켜짐"
+#define D_ONLINE "온라인"
+#define D_PASSWORD "비밀번호"
+#define D_PORT "포트"
+#define D_POWER_FACTOR "Power Factor"
+#define D_POWERUSAGE "전원"
+#define D_POWERUSAGE_ACTIVE "Active Power"
+#define D_POWERUSAGE_APPARENT "Apparent Power"
+#define D_POWERUSAGE_REACTIVE "Reactive Power"
+#define D_PRESSURE "기압"
+#define D_PRESSUREATSEALEVEL "해수면기압"
+#define D_PROGRAM_FLASH_SIZE "플래시 용량"
+#define D_PROGRAM_SIZE "프로그램 용량"
+#define D_PROJECT "프로젝트"
+#define D_RAIN "비"
+#define D_RECEIVED "받음"
+#define D_RESTART "재시작"
+#define D_RESTARTING "재시작 중.."
+#define D_RESTART_REASON "재시작 사유"
+#define D_RESTORE "복구"
+#define D_RETAINED "보류"
+#define D_RULE "규칙"
+#define D_SAVE "저장"
+#define D_SENSOR "센서"
+#define D_SSID "SSId"
+#define D_START "시작"
+#define D_STD_TIME "STD"
+#define D_STOP "정지"
+#define D_SUBNET_MASK "서브넷 마스크"
+#define D_SUBSCRIBE_TO "구독"
+#define D_UNSUBSCRIBE_FROM "구독 해제"
+#define D_SUCCESSFUL "성공"
+#define D_SUNRISE "일출"
+#define D_SUNSET "일몰"
+#define D_TEMPERATURE "온도"
+#define D_TO "to"
+#define D_TOGGLE "켜기/끄기"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "전체 사용량"
+#define D_TRANSMIT "전송"
+#define D_TRUE "참"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "업그레이드"
+#define D_UPLOAD "업로드"
+#define D_UPTIME "가동시간"
+#define D_USER "User"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV 색인"
+#define D_UV_INDEX_1 "낮음"
+#define D_UV_INDEX_2 "보통"
+#define D_UV_INDEX_3 "높음"
+#define D_UV_INDEX_4 "위험"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR" // Out of Range
+#define D_UV_LEVEL "UV 레벨"
+#define D_UV_POWER "UV 파워"
+#define D_VERSION "버전"
+#define D_VOLTAGE "전압"
+#define D_WEIGHT "무게"
+#define D_WARMLIGHT "따뜻하게"
+#define D_WEB_SERVER "웹 서버"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "경고: 이 버전은 영구 설정을 지원하지 않습니다"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serial log 사용 안함"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog log 다시 사용"
+
+#define D_SET_BAUDRATE_TO "Set Baudrate to"
+#define D_RECEIVED_TOPIC "Received Topic"
+#define D_DATA_SIZE "데이터 용량"
+#define D_ANALOG_INPUT "아날로그"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "WPS설정 실패"
+#define D_ACTIVE_FOR_3_MINUTES "3분동안 활성화"
+#define D_FAILED_TO_START "시작 실패"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "AP에 연결 중"
+#define D_IN_MODE "in mode"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP 주소가 수신되지 않아 연결이 실패했습니다"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "연결이 닿지 않아 AP에 연결할 수 없습니다"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "비밀번호가 틀려 AP에 연결할 수 없습니다"
+#define D_CONNECT_FAILED_AP_TIMEOUT "시간초과로 AP에 연결할 수 없습니다"
+#define D_ATTEMPTING_CONNECTION "연결 시도 중..."
+#define D_CHECKING_CONNECTION "연결 체크 중..."
+#define D_QUERY_DONE "쿼리 완료. MQTT 서비스 발견"
+#define D_MQTT_SERVICE_FOUND "MQTT 서비스 발견"
+#define D_FOUND_AT "다음을 발견"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog 호스트가 발견되지 않았습니다"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "플래시에 저장"
+#define D_LOADED_FROM_FLASH_AT "플래시에서 로드"
+#define D_USE_DEFAULTS "디폴트 사용"
+#define D_ERASED_SECTOR "삭제된 섹터"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Tasmota를 사용하려면 JavaScript를 활성화 하십시오."
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
업그레이드가 필요합니다"
+#define D_WEBSERVER_ACTIVE_ON "Web 서버 작동 중"
+#define D_WITH_IP_ADDRESS "IP 주소"
+#define D_WEBSERVER_STOPPED "Web 서버 멈춤"
+#define D_FILE_NOT_FOUND "파일을 찾을 수 없습니다"
+#define D_REDIRECTED "인증 페이지로 리디렉션"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "와이파이 매니저가 AccessPoint와 keep Station을 설정"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "와이파이 매니저가 AccessPoint를 설정"
+#define D_TRYING_TO_CONNECT "장치를 네트워크에 연결하려고 시도 중"
+
+#define D_RESTART_IN "재시작"
+#define D_SECONDS "초"
+#define D_DEVICE_WILL_RESTART "이 장치는 몇 초 후 재시작됩니다"
+#define D_BUTTON_TOGGLE "켜기/끄기"
+#define D_CONFIGURATION "설정 메뉴"
+#define D_INFORMATION "정보"
+#define D_FIRMWARE_UPGRADE "펌웨어 업그레이드"
+#define D_CONSOLE "콘솔"
+#define D_CONFIRM_RESTART "재시작"
+
+#define D_CONFIGURE_MODULE "모듈 설정"
+#define D_CONFIGURE_WIFI "WiFi 설정"
+#define D_CONFIGURE_MQTT "MQTT 설정"
+#define D_CONFIGURE_DOMOTICZ "Domoticz 설정"
+#define D_CONFIGURE_LOGGING "로그 설정"
+#define D_CONFIGURE_OTHER "기타 설정"
+#define D_CONFIRM_RESET_CONFIGURATION "설정 초기화 확인"
+#define D_RESET_CONFIGURATION "설정 초기화"
+#define D_BACKUP_CONFIGURATION "설정 백업"
+#define D_RESTORE_CONFIGURATION "설정 복구"
+#define D_MAIN_MENU "메인 메뉴"
+
+#define D_MODULE_PARAMETERS "모듈 설정"
+#define D_MODULE_TYPE "모듈 타입"
+#define D_PULLUP_ENABLE "버튼 없음/스위치 당김"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Wifi 설정"
+#define D_SCAN_FOR_WIFI_NETWORKS "Wifi 네트워크를 검색.."
+#define D_SCAN_DONE "검색 완료"
+#define D_NO_NETWORKS_FOUND "발견된 네트워크가 없습니다"
+#define D_REFRESH_TO_SCAN_AGAIN "검색 재시도"
+#define D_DUPLICATE_ACCESSPOINT "중복된 AccessPoint"
+#define D_SKIPPING_LOW_QUALITY "약한 네트워크 신호 무시"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 비밀번호"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 비밀번호"
+
+#define D_MQTT_PARAMETERS "MQTT 설정"
+#define D_CLIENT "클라이언트"
+#define D_FULL_TOPIC "Full Topic"
+
+#define D_LOGGING_PARAMETERS "로그 설정"
+#define D_SERIAL_LOG_LEVEL "Serial 로그 레벨"
+#define D_MQTT_LOG_LEVEL "Mqtt 로그 레벨"
+#define D_WEB_LOG_LEVEL "Web 로그 레벨"
+#define D_SYS_LOG_LEVEL "시스템로그 레벨"
+#define D_MORE_DEBUG "More debug"
+#define D_SYSLOG_HOST "시스템로그 호스트"
+#define D_SYSLOG_PORT "시스템로그 포트"
+#define D_TELEMETRY_PERIOD "보고 주기"
+
+#define D_OTHER_PARAMETERS "기타 설정"
+#define D_TEMPLATE "템플릿"
+#define D_ACTIVATE "활성화"
+#define D_WEB_ADMIN_PASSWORD "Web Admin 비밀번호"
+#define D_MQTT_ENABLE "MQTT 사용"
+#define D_FRIENDLY_NAME "Friendly Name"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "단일 장치"
+#define D_MULTI_DEVICE "다수 장치"
+
+#define D_CONFIGURE_TEMPLATE "템플릿 설정"
+#define D_TEMPLATE_PARAMETERS "템플릿 설정"
+#define D_TEMPLATE_NAME "이름"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "옵션"
+
+#define D_SAVE_CONFIGURATION "설정 저장"
+#define D_CONFIGURATION_SAVED "설정 저장 완료"
+#define D_CONFIGURATION_RESET "설정 초기화"
+
+#define D_PROGRAM_VERSION "프로그램 버전"
+#define D_BUILD_DATE_AND_TIME "빌드 날짜"
+#define D_CORE_AND_SDK_VERSION "Core/SDK 버전"
+#define D_FLASH_WRITE_COUNT "플래시 쓰기 횟수"
+#define D_MAC_ADDRESS "MAC 주소"
+#define D_MQTT_HOST "MQTT 호스트"
+#define D_MQTT_PORT "MQTT 포트"
+#define D_MQTT_CLIENT "MQTT 클라이언트"
+#define D_MQTT_USER "MQTT 아이디"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP 칩 Id"
+#define D_FLASH_CHIP_ID "플래시 칩 Id"
+#define D_FLASH_CHIP_SIZE "플래시 용량"
+#define D_FREE_PROGRAM_SPACE "여유 프로그램 공간"
+
+#define D_UPGRADE_BY_WEBSERVER "웹 서버에서 업그레이드"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "업그레이드 시작"
+#define D_UPGRADE_BY_FILE_UPLOAD "파일에서 업로드해 업그레이드"
+#define D_UPLOAD_STARTED "업로드 시작됨"
+#define D_UPGRADE_STARTED "업그레이드 시작됨"
+#define D_UPLOAD_DONE "업그레이드 완료"
+#define D_UPLOAD_ERR_1 "파일이 선택되지 않았습니다"
+#define D_UPLOAD_ERR_2 "용량이 충분하지 않습니다"
+#define D_UPLOAD_ERR_3 "Magic 바이트가 0xE9가 아닙니다"
+#define D_UPLOAD_ERR_4 "플래시 프로그램이 실제 플래시 용량보다 큽니다"
+#define D_UPLOAD_ERR_5 "업로드 버퍼가 일치하지 않습니다"
+#define D_UPLOAD_ERR_6 "업로드 실패. 로그 3 사용"
+#define D_UPLOAD_ERR_7 "업로드 중단"
+#define D_UPLOAD_ERR_8 "파일이 유효하지 않습니다"
+#define D_UPLOAD_ERR_9 "용량이 초과되었습니다"
+#define D_UPLOAD_ERR_10 "RF 칩 초기화 실패"
+#define D_UPLOAD_ERR_11 "RF 칩 삭제 실패"
+#define D_UPLOAD_ERR_12 "RF 칩 쓰기 실패"
+#define D_UPLOAD_ERR_13 "RF 펌웨어 decode 실패"
+#define D_UPLOAD_ERROR_CODE "업로드 에러 코드"
+
+#define D_ENTER_COMMAND "커맨드 입력"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "응답이 있다면 Weblog 2를 사용"
+#define D_NEED_USER_AND_PASSWORD "user=<아이디>&password=<비밀번호> 필요"
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "TLS 지문 확인..."
+#define D_TLS_CONNECT_FAILED_TO "TLS 연결 실패"
+#define D_RETRY_IN "재시도 중"
+#define D_VERIFIED "지문 확인 완료"
+#define D_INSECURE "유효하지 않은 지문으로 연결이 되지 않았습니다"
+#define D_CONNECT_FAILED_TO "연결 실패"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast 사용 불가"
+#define D_MULTICAST_REJOINED "Multicast (다시)가입됨"
+#define D_MULTICAST_JOIN_FAILED "Multicast 가입 실패"
+#define D_FAILED_TO_SEND_RESPONSE "요청 전송 실패"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo 기본 이벤트"
+#define D_WEMO_EVENT_SERVICE "WeMo 이벤트 서비스"
+#define D_WEMO_META_SERVICE "WeMo meta 서비스"
+#define D_WEMO_SETUP "WeMo 설정"
+#define D_RESPONSE_SENT "요청 전송됨"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue 설정"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API가 포함되지 않음"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 요청 패킷이 전송됨"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz 설정"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "스위치 idx"
+#define D_DOMOTICZ_SENSOR_IDX "센서 idx"
+ #define D_DOMOTICZ_TEMP "온도"
+ #define D_DOMOTICZ_TEMP_HUM "온도,습도"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "온도,습도,기압"
+ #define D_DOMOTICZ_POWER_ENERGY "전력,전력량"
+ #define D_DOMOTICZ_ILLUMINANCE "조도"
+ #define D_DOMOTICZ_COUNT "횟수/PM1"
+ #define D_DOMOTICZ_VOLTAGE "전압/PM2.5"
+ #define D_DOMOTICZ_CURRENT "전류/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "공기질"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "타이머 갱신"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "타이머 설정"
+#define D_TIMER_PARAMETERS "타이머 설정"
+#define D_TIMER_ENABLE "타이머 사용"
+#define D_TIMER_ARM "Arm"
+#define D_TIMER_TIME "시간"
+#define D_TIMER_DAYS "일"
+#define D_TIMER_REPEAT "반복"
+#define D_TIMER_OUTPUT "출력"
+#define D_TIMER_ACTION "행동"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX 설정"
+#define D_KNX_PARAMETERS "KNX 설정"
+#define D_KNX_GENERAL_CONFIG "일반"
+#define D_KNX_PHYSICAL_ADDRESS "물리적 주소"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( KNX 네트워크 상에서 반드시 고유한 이름이어야 합니다 )"
+#define D_KNX_ENABLE "KNX 사용"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "그룹 주소로 데이타를 보냅니다"
+#define D_ADD "추가"
+#define D_DELETE "삭제"
+#define D_REPLY "응답"
+#define D_KNX_GROUP_ADDRESS_TO_READ "받은 데이터의 그룹 주소"
+#define D_RECEIVED_FROM "다음에서 받음"
+#define D_KNX_COMMAND_WRITE "쓰기"
+#define D_KNX_COMMAND_READ "읽기"
+#define D_KNX_COMMAND_OTHER "기타"
+#define D_SENT_TO "다음으로 보내기"
+#define D_KNX_WARNING "그룹 주소 ( 0 / 0 / 0 )은 예약되어 사용할 수 없습니다"
+#define D_KNX_ENHANCEMENT "커뮤니케이션 강화"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "금일 전력 사용량"
+#define D_ENERGY_YESTERDAY "어제 전력 사용량"
+#define D_ENERGY_TOTAL "총 전력 사용량"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "열기"
+#define D_CLOSE "닫기"
+#define D_DOMOTICZ_SHUTTER "셔터"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "PCF8574 설정"
+#define D_PCF8574_PARAMETERS "PCF8574 파라미터"
+#define D_INVERT_PORTS "포트 반전"
+#define D_DEVICE "장치"
+#define D_DEVICE_INPUT "입력"
+#define D_DEVICE_OUTPUT "출력"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "센서가 사용 중"
+#define D_SENSOR_CRC_ERROR "센서 CRC 에러"
+#define D_SENSORS_FOUND "센서 발견"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "대기 시간 초과"
+#define D_START_SIGNAL_LOW "시작 신호 낮음"
+#define D_START_SIGNAL_HIGH "시작 신호 높음"
+#define D_PULSE "pulse"
+#define D_CHECKSUM_FAILURE "체크섬 실패"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "센서가 ACK 명령을 수행하지 않음"
+#define D_SHT1X_FOUND "SHT1X 발견"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "입자"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "중량 제거"
+#define D_HX_CAL_REFERENCE "참조 중량 로드"
+#define D_HX_CAL_DONE "교정됨"
+#define D_HX_CAL_FAIL "교정 실패"
+#define D_RESET_HX711 "스케일 초기화"
+#define D_CONFIGURE_HX711 "스케일 설정"
+#define D_HX711_PARAMETERS "스케일 상세"
+#define D_ITEM_WEIGHT "아이템 중량"
+#define D_REFERENCE_WEIGHT "참조 중량"
+#define D_CALIBRATE "교정"
+#define D_CALIBRATION "교정"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "풍향"
+#define D_TX20_WIND_SPEED "풍속"
+#define D_TX20_WIND_SPEED_AVG "평균 풍속"
+#define D_TX20_WIND_SPEED_MAX "최대 풍속"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "시"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "마이크로미터"
+#define D_UNIT_MICROSECOND "마이크로초"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "밀리초"
+#define D_UNIT_MINUTE "분"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "초"
+#define D_UNIT_SECTORS "섹터"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_KO_KO_H_
diff --git a/tasmota/language/nl-NL.h b/tasmota/language/nl-NL.h
index 75d841ddc..cd1414f8f 100644
--- a/tasmota/language/nl-NL.h
+++ b/tasmota/language/nl-NL.h
@@ -1,701 +1,703 @@
-/*
- nl-NL.h - localization for Dutch - Nederland for Tasmota
-
- Copyright (C) 2019 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 .
-*/
-
-#ifndef _LANGUAGE_NL_NL_H_
-#define _LANGUAGE_NL_NL_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.7.0
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1043
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "nl"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "Zo Ma Di Wo Do Vr Za "
-#define D_MONTH3LIST "JanFebMarAprMeiJunJulAugSepOktNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Lucht kwaliteit"
-#define D_AP "AP" // Access Point
-#define D_AS "als"
-#define D_AUTO "AUTO"
-#define D_BLINK "Knipper"
-#define D_BLINKOFF "KnipperUit"
-#define D_BOOT_COUNT "Herstarts"
-#define D_BRIGHTLIGHT "Fel"
-#define D_BSSID "BSSId"
-#define D_BUTTON "DrukKnop"
-#define D_BY "door" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Kanaal"
-#define D_CO2 "Koolstofdioxide"
-#define D_CODE "code" // Button code
-#define D_COLDLIGHT "Koud"
-#define D_COMMAND "Opdracht"
-#define D_CONNECTED "Verbonden"
-#define D_COUNT "Aantal"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNTER "Teller"
-#define D_CURRENT "Stroom" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Donker"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Uitgeschakeld"
-#define D_DISTANCE "Afstand"
-#define D_DNS_SERVER "DNS Server"
-#define D_DONE "Klaar"
-#define D_DST_TIME "ZT"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulatie"
-#define D_ENABLED "Geactiveerd"
-#define D_ERASE "Wissen"
-#define D_ERROR "Fout"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Mislukt"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback Topic"
-#define D_FALSE "Onwaar"
-#define D_FILE "Bestand"
-#define D_FLOW_RATE "Debiet"
-#define D_FREE_MEMORY "Vrij geheugen"
-#define D_FREQUENCY "Frequentie"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Groep"
-#define D_HOST "Host"
-#define D_HOSTNAME "Hostnaam"
-#define D_HUMIDITY "Luchtvochtigheid"
-#define D_ILLUMINANCE "Verlichtingssterkte"
-#define D_IMMEDIATE "onmiddelijk" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infrarood"
-#define D_INITIALIZED "Geinitialiseerd"
-#define D_IP_ADDRESS "IP Adres"
-#define D_LIGHT "Licht"
-#define D_LWT "LWT"
-#define D_MODULE "Module"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "meervoudig"
-#define D_NOISE "Lawaai"
-#define D_NONE "Geen"
-#define D_OFF "Uit"
-#define D_OFFLINE "Offline"
-#define D_OK "Ok"
-#define D_ON "Aan"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Wachtwoord"
-#define D_PORT "Poort"
-#define D_POWER_FACTOR "Arbeidsfactor"
-#define D_POWERUSAGE "Vermogen"
-#define D_POWERUSAGE_ACTIVE "Werkelijk vermogen"
-#define D_POWERUSAGE_APPARENT "Schijnbaar vermogen"
-#define D_POWERUSAGE_REACTIVE "Blindvermogen"
-#define D_PRESSURE "Luchtdruk"
-#define D_PRESSUREATSEALEVEL "ZeeLuchtdruk"
-#define D_PROGRAM_FLASH_SIZE "Programma Flash Grootte"
-#define D_PROGRAM_SIZE "Programma Grootte"
-#define D_PROJECT "Project"
-#define D_RAIN "Regen"
-#define D_RECEIVED "Ontvangen"
-#define D_RESTART "Herstart"
-#define D_RESTARTING "Herstarten"
-#define D_RESTART_REASON "Reden herstart"
-#define D_RESTORE "herstellen"
-#define D_RETAINED "retained"
-#define D_RULE "Regel"
-#define D_SAVE "Opslaan"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Start"
-#define D_STD_TIME "WT"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Subnet Masker"
-#define D_SUBSCRIBE_TO "Abonneer op"
-#define D_UNSUBSCRIBE_FROM "Uitschrijven van"
-#define D_SUCCESSFUL "Gelukt"
-#define D_SUNRISE "Zonsopgang"
-#define D_SUNSET "Zonsondergang"
-#define D_TEMPERATURE "Temperatuur"
-#define D_TO "naar"
-#define D_TOGGLE "Toggle" // Wissel, Tuimel
-#define D_TOPIC "Topic" // Onderwerp
-#define D_TOTAL_USAGE "Totaal verbruik"
-#define D_TRANSMIT "Verzend"
-#define D_TRUE "Waar"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "opwaarderen"
-#define D_UPLOAD "Verzenden"
-#define D_UPTIME "Bedrijfstijd"
-#define D_USER "Gebruiker"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV-index"
-#define D_UV_INDEX_1 "Laag"
-#define D_UV_INDEX_2 "Gemiddeld"
-#define D_UV_INDEX_3 "Hoog"
-#define D_UV_INDEX_4 "Intens"
-#define D_UV_INDEX_5 "Gevaarlijk"
-#define D_UV_INDEX_6 "Schadelijk"
-#define D_UV_INDEX_7 "Uitzonderlijk"
-#define D_UV_LEVEL "UV niveau"
-#define D_UV_POWER "UV intensiteit"
-#define D_VERSION "Versie"
-#define D_VOLTAGE "Spanning"
-#define D_WEIGHT "Gewicht"
-#define D_WARMLIGHT "Warm"
-#define D_WEB_SERVER "Webserver"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "WAARSCHUWING Deze versie bewaart geen instellingen"
-#define D_LEVEL_10 "niveau 1-0"
-#define D_LEVEL_01 "niveau 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serieel logging uitgeschakeld"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog logging weer ingeschakeld"
-
-#define D_SET_BAUDRATE_TO "Zet baudrate op"
-#define D_RECEIVED_TOPIC "Ontvangen topic"
-#define D_DATA_SIZE "Data lengte"
-#define D_ANALOG_INPUT "Analoog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig mislukt met status"
-#define D_ACTIVE_FOR_3_MINUTES "3 minuten actief"
-#define D_FAILED_TO_START "mislukt"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "Verbinden met AP"
-#define D_IN_MODE "in stand"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Verbinding mislukt omdat geen IP adres werd ontvangen"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Verbinding mislukt omdat AP onbereikbaar is"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbinding mislukt door fout wachtwoord"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Verbinding mislukt door AP time-out"
-#define D_ATTEMPTING_CONNECTION "Verbinden..."
-#define D_CHECKING_CONNECTION "Controleer verbinding..."
-#define D_QUERY_DONE "Aanvraag klaar. Aantal MQTT diensten gevonden"
-#define D_MQTT_SERVICE_FOUND "MQTT dienst gevonden op"
-#define D_FOUND_AT "gevonden op"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host niet gevonden"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Opgeslagen in flash op"
-#define D_LOADED_FROM_FLASH_AT "Geladen vanuit flash op"
-#define D_USE_DEFAULTS "Gebruik standaardwaarden"
-#define D_ERASED_SECTOR "Wis sector"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Zet JavaScript aan voor Tasmota"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
opwaarderen"
-#define D_WEBSERVER_ACTIVE_ON "Webserver actief op"
-#define D_WITH_IP_ADDRESS "met IP adres"
-#define D_WEBSERVER_STOPPED "Webserver gestopt"
-#define D_FILE_NOT_FOUND "Bestand niet gevonden"
-#define D_REDIRECTED "Omleiding naar captive portal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager start AccessPoint en hou Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager start AccessPoint"
-#define D_TRYING_TO_CONNECT "Apparaat probeert te verbinden met netwerk"
-
-#define D_RESTART_IN "Herstart over"
-#define D_SECONDS "seconden"
-#define D_DEVICE_WILL_RESTART "Herstart over enkele seconden"
-#define D_BUTTON_TOGGLE "Toggle" // Wissel, Tuimel
-#define D_CONFIGURATION "Configuratie"
-#define D_INFORMATION "Informatie"
-#define D_FIRMWARE_UPGRADE "Opwaarderen"
-#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Bevestig herstart"
-
-#define D_CONFIGURE_MODULE "Configureer Module"
-#define D_CONFIGURE_WIFI "Configureer WiFi"
-#define D_CONFIGURE_MQTT "Configureer MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configureer Domoticz"
-#define D_CONFIGURE_LOGGING "Configureer Logging"
-#define D_CONFIGURE_OTHER "Configureer Overige"
-#define D_CONFIRM_RESET_CONFIGURATION "Bevestig reset configuratie"
-#define D_RESET_CONFIGURATION "Reset Configuratie"
-#define D_BACKUP_CONFIGURATION "Bewaar Configuratie"
-#define D_RESTORE_CONFIGURATION "Herstel Configuration"
-#define D_MAIN_MENU "Hoofdmenu"
-
-#define D_MODULE_PARAMETERS "Module parameters"
-#define D_MODULE_TYPE "Module soort"
-#define D_PULLUP_ENABLE "Geen schakelaar pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serieel In"
-#define D_SERIAL_OUT "Serieel Uit"
-
-#define D_WIFI_PARAMETERS "Wifi parameters"
-#define D_SCAN_FOR_WIFI_NETWORKS "Zoek wifi netwerken"
-#define D_SCAN_DONE "Scan klaar"
-#define D_NO_NETWORKS_FOUND "Geen netwerken gevonden"
-#define D_REFRESH_TO_SCAN_AGAIN "Vernieuw om opnieuw te zoeken"
-#define D_DUPLICATE_ACCESSPOINT "Dubbel AccessPoint"
-#define D_SKIPPING_LOW_QUALITY "Overslaan agv lage ontvangskwaliteit"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Wachtwoord"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Wachtwoord"
-
-#define D_MQTT_PARAMETERS "MQTT parameters"
-#define D_CLIENT "Client"
-#define D_FULL_TOPIC "Volledig Topic"
-
-#define D_LOGGING_PARAMETERS "Logging parameters"
-#define D_SERIAL_LOG_LEVEL "Serieel log niveau"
-#define D_MQTT_LOG_LEVEL "Mqtt log niveau"
-#define D_WEB_LOG_LEVEL "Web log niveau"
-#define D_SYS_LOG_LEVEL "Syslog niveau"
-#define D_MORE_DEBUG "Meer debug"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog poort"
-#define D_TELEMETRY_PERIOD "Telemetry periode"
-
-#define D_OTHER_PARAMETERS "Overige parameters"
-#define D_TEMPLATE "Sjabloon"
-#define D_ACTIVATE "Activeer"
-#define D_WEB_ADMIN_PASSWORD "Web Admin Wachtwoord"
-#define D_MQTT_ENABLE "MQTT ingeschakeld"
-#define D_FRIENDLY_NAME "Beschrijvende naam"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "een apparaat"
-#define D_MULTI_DEVICE "meer apparaten"
-
-#define D_CONFIGURE_TEMPLATE "Configureer Sjabloon"
-#define D_TEMPLATE_PARAMETERS "Sjabloon parameters"
-#define D_TEMPLATE_NAME "Naam"
-#define D_BASE_TYPE "Op basis van"
-#define D_TEMPLATE_FLAGS "Opties"
-
-#define D_SAVE_CONFIGURATION "Bewaar configuratie"
-#define D_CONFIGURATION_SAVED "Configuratie opgeslagen"
-#define D_CONFIGURATION_RESET "Configuratie ge-reset"
-
-#define D_PROGRAM_VERSION "Programma Versie"
-#define D_BUILD_DATE_AND_TIME "Compileer Datum & Tijd"
-#define D_CORE_AND_SDK_VERSION "Core/SDK Versie"
-#define D_FLASH_WRITE_COUNT "Aantal Flash opslagen"
-#define D_MAC_ADDRESS "MAC Adres"
-#define D_MQTT_HOST "MQTT Host"
-#define D_MQTT_PORT "MQTT Poort"
-#define D_MQTT_CLIENT "MQTT Client"
-#define D_MQTT_USER "MQTT Gebruiker"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Groep Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Volledig Topic"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Flash Grootte"
-#define D_FREE_PROGRAM_SPACE "Programma ruimte over"
-
-#define D_UPGRADE_BY_WEBSERVER "Opwaarderen dmv webserver"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Start opwaarderen"
-#define D_UPGRADE_BY_FILE_UPLOAD "Opwaarderen dmv verzenden bestand"
-#define D_UPLOAD_STARTED "Verzending gestart"
-#define D_UPGRADE_STARTED "Opwaarderen gestart"
-#define D_UPLOAD_DONE "Opwaarderen klaar"
-#define D_UPLOAD_ERR_1 "Geen bestand gekozen"
-#define D_UPLOAD_ERR_2 "Onvoldoende geheugen ruimte"
-#define D_UPLOAD_ERR_3 "Magische byte is niet 0xE9"
-#define D_UPLOAD_ERR_4 "Programma flash grootte is groter dan werkelijke flash grootte"
-#define D_UPLOAD_ERR_5 "Opwaardeer buffer verschil"
-#define D_UPLOAD_ERR_6 "Opwaarderen mislukt. Schakel logging 3 in"
-#define D_UPLOAD_ERR_7 "Opwaarderen afgebroken"
-#define D_UPLOAD_ERR_8 "Ongeldig bestand"
-#define D_UPLOAD_ERR_9 "Bestand is te groot"
-#define D_UPLOAD_ERR_10 "Init RF chip mislukt"
-#define D_UPLOAD_ERR_11 "Wissen RF chip mislukt"
-#define D_UPLOAD_ERR_12 "Opwaarderen RF chip mislukt"
-#define D_UPLOAD_ERR_13 "Decoderen RF bestand mislukt"
-#define D_UPLOAD_ERROR_CODE "Opwaardeer foutcode"
-
-#define D_ENTER_COMMAND "Geef opdracht"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Schakel weblog 2 in indien antwoord verwacht"
-#define D_NEED_USER_AND_PASSWORD "Benodig user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Controleer TLS vingerafdruk..."
-#define D_TLS_CONNECT_FAILED_TO "TLS Verbinding mislukt naar"
-#define D_RETRY_IN "Opnieuw proberen over"
-#define D_VERIFIED "Gecontroleerd met vingerafdruk"
-#define D_INSECURE "Door ongeldige vingerafdruk een onveilige verbinding"
-#define D_CONNECT_FAILED_TO "Verbinding mislukt naar"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast uitgeschakeld"
-#define D_MULTICAST_REJOINED "Multicast verbonden"
-#define D_MULTICAST_JOIN_FAILED "Multicast verbinding mislukt"
-#define D_FAILED_TO_SEND_RESPONSE "Antwoord versturen mislukt"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basis gebeurtenis"
-#define D_WEMO_EVENT_SERVICE "WeMo gebeurtenis dienst"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo installatie"
-#define D_RESPONSE_SENT "Antwoord verstuurd"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue installatie"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API niet beschikbaar"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST argumenten"
-#define D_3_RESPONSE_PACKETS_SENT "3 antwoord paketten verstuurd"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Toets idx"
-#define D_DOMOTICZ_SWITCH_IDX "Schakelaar idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Spanning/PM2,5"
- #define D_DOMOTICZ_CURRENT "Stroom/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Bijwerk timer"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configureer Tijdschakelaar"
-#define D_TIMER_PARAMETERS "Tijdschakelaar parameters"
-#define D_TIMER_ENABLE "Tijdschakelaars inschakelen"
-#define D_TIMER_ARM "Actief"
-#define D_TIMER_TIME "Tijd"
-#define D_TIMER_DAYS "Dagen"
-#define D_TIMER_REPEAT "Herhaal"
-#define D_TIMER_OUTPUT "Uitgang"
-#define D_TIMER_ACTION "Actie"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configureer KNX"
-#define D_KNX_PARAMETERS "KNX Parameters"
-#define D_KNX_GENERAL_CONFIG "Algemeen"
-#define D_KNX_PHYSICAL_ADDRESS "Eigen adres"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Moet uniek zijn op het KNX netwerk)"
-#define D_KNX_ENABLE "KNX inschakelen"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Stuur gegevens naar groep adressen"
-#define D_ADD "Toevoegen"
-#define D_DELETE "Verwijder"
-#define D_REPLY "Antwoord"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Ontvang gegevens van groep adressen"
-#define D_RECEIVED_FROM "Ontvangen van"
-#define D_KNX_COMMAND_WRITE "Schrijven"
-#define D_KNX_COMMAND_READ "Lezen"
-#define D_KNX_COMMAND_OTHER "Overige"
-#define D_SENT_TO "verzend naar"
-#define D_KNX_WARNING "Groep adres (0/0/0) is gereserveerd en mag niet worden gebruikt."
-#define D_KNX_ENHANCEMENT "Verbeter verbinding"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Verbruik vandaag"
-#define D_ENERGY_YESTERDAY "Verbruik gisteren"
-#define D_ENERGY_TOTAL "Verbruik totaal"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Openen"
-#define D_CLOSE "Sluiten"
-#define D_DOMOTICZ_SHUTTER "Rolluik"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configureer PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 Parameters"
-#define D_INVERT_PORTS "Inverteer Poorten"
-#define D_DEVICE "Apparaat"
-#define D_DEVICE_INPUT "Ingang"
-#define D_DEVICE_OUTPUT "Uitgang"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor bezet"
-#define D_SENSOR_CRC_ERROR "Sensor CRC fout"
-#define D_SENSORS_FOUND "Aantal sensoren"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Te lang wachten op"
-#define D_START_SIGNAL_LOW "laag start signaal"
-#define D_START_SIGNAL_HIGH "hoog start signaal"
-#define D_PULSE "signaal"
-#define D_CHECKSUM_FAILURE "Controle mislukt"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Geen opdracht ACK van sensor"
-#define D_SHT1X_FOUND "SHT1X gevonden"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Stofdeeltjes"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Verwijder gewicht"
-#define D_HX_CAL_REFERENCE "Plaats ijkgewicht"
-#define D_HX_CAL_DONE "Ge-ijkt"
-#define D_HX_CAL_FAIL "Ijken is mislukt"
-#define D_RESET_HX711 "Nulstelling weegschaal"
-#define D_CONFIGURE_HX711 "Configureer Weegschaal"
-#define D_HX711_PARAMETERS "Weegschaal parameters"
-#define D_ITEM_WEIGHT "Gewicht van onderdeel"
-#define D_REFERENCE_WEIGHT "Ijkgewicht"
-#define D_CALIBRATE "Ijken"
-#define D_CALIBRATION "Ijken"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Windrichting"
-#define D_TX20_WIND_SPEED "Windsnelheid"
-#define D_TX20_WIND_SPEED_AVG "Windsnelheid gemiddeld"
-#define D_TX20_WIND_SPEED_MAX "Windsnelhied maximaal"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Speler"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relais" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Teller" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Zoemer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "h"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kΩ"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
-#define D_UNIT_MICROMETER "µm"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sectoren"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Fase hoek"
-#define D_IMPORT_ACTIVE "Import werkelijk"
-#define D_EXPORT_ACTIVE "Export werkelijk"
-#define D_IMPORT_REACTIVE "Import blind"
-#define D_EXPORT_REACTIVE "Export blind"
-#define D_TOTAL_REACTIVE "Totaal blind"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 spanning"
-#define D_PV1_CURRENT "PV1 stroom"
-#define D_PV1_POWER "PV1 vermogen"
-#define D_PV2_VOLTAGE "PV2 spanning"
-#define D_PV2_CURRENT "PV2 stroom"
-#define D_PV2_POWER "PV2 vermogen"
-#define D_SOLAR_POWER "Zon vermogen"
-#define D_INVERTER_POWER "Omvormer vermogen"
-#define D_STATUS "Status"
-#define D_WAITING "Wacht"
-#define D_CHECKING "Controle"
-#define D_WORKING "Actief"
-#define D_FAILURE "Fout"
-#define D_SOLAX_ERROR_0 "Geen"
-#define D_SOLAX_ERROR_1 "Netverbinding"
-#define D_SOLAX_ERROR_2 "Netspanning"
-#define D_SOLAX_ERROR_3 "Netfrequentie"
-#define D_SOLAX_ERROR_4 "Pv spanning"
-#define D_SOLAX_ERROR_5 "Isolatie"
-#define D_SOLAX_ERROR_6 "Overtemperatuur"
-#define D_SOLAX_ERROR_7 "Ventilator"
-#define D_SOLAX_ERROR_8 "Overige"
-
-#endif // _LANGUAGE_NL_NL_H_
+/*
+ nl-NL.h - localization for Dutch - Nederland for Tasmota
+
+ Copyright (C) 2019 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 .
+*/
+
+#ifndef _LANGUAGE_NL_NL_H_
+#define _LANGUAGE_NL_NL_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.7.0
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1043
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "nl"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "Zo Ma Di Wo Do Vr Za "
+#define D_MONTH3LIST "JanFebMarAprMeiJunJulAugSepOktNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Lucht kwaliteit"
+#define D_AP "AP" // Access Point
+#define D_AS "als"
+#define D_AUTO "AUTO"
+#define D_BLINK "Knipper"
+#define D_BLINKOFF "KnipperUit"
+#define D_BOOT_COUNT "Herstarts"
+#define D_BRIGHTLIGHT "Fel"
+#define D_BSSID "BSSId"
+#define D_BUTTON "DrukKnop"
+#define D_BY "door" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Kanaal"
+#define D_CO2 "Koolstofdioxide"
+#define D_CODE "code" // Button code
+#define D_COLDLIGHT "Koud"
+#define D_COMMAND "Opdracht"
+#define D_CONNECTED "Verbonden"
+#define D_COUNT "Aantal"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNTER "Teller"
+#define D_CURRENT "Stroom" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Donker"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Uitgeschakeld"
+#define D_DISTANCE "Afstand"
+#define D_DNS_SERVER "DNS Server"
+#define D_DONE "Klaar"
+#define D_DST_TIME "ZT"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulatie"
+#define D_ENABLED "Geactiveerd"
+#define D_ERASE "Wissen"
+#define D_ERROR "Fout"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Mislukt"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback Topic"
+#define D_FALSE "Onwaar"
+#define D_FILE "Bestand"
+#define D_FLOW_RATE "Debiet"
+#define D_FREE_MEMORY "Vrij geheugen"
+#define D_FREQUENCY "Frequentie"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Groep"
+#define D_HOST "Host"
+#define D_HOSTNAME "Hostnaam"
+#define D_HUMIDITY "Luchtvochtigheid"
+#define D_ILLUMINANCE "Verlichtingssterkte"
+#define D_IMMEDIATE "onmiddelijk" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infrarood"
+#define D_INITIALIZED "Geinitialiseerd"
+#define D_IP_ADDRESS "IP Adres"
+#define D_LIGHT "Licht"
+#define D_LWT "LWT"
+#define D_MODULE "Module"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "meervoudig"
+#define D_NOISE "Lawaai"
+#define D_NONE "Geen"
+#define D_OFF "Uit"
+#define D_OFFLINE "Offline"
+#define D_OK "Ok"
+#define D_ON "Aan"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Wachtwoord"
+#define D_PORT "Poort"
+#define D_POWER_FACTOR "Arbeidsfactor"
+#define D_POWERUSAGE "Vermogen"
+#define D_POWERUSAGE_ACTIVE "Werkelijk vermogen"
+#define D_POWERUSAGE_APPARENT "Schijnbaar vermogen"
+#define D_POWERUSAGE_REACTIVE "Blindvermogen"
+#define D_PRESSURE "Luchtdruk"
+#define D_PRESSUREATSEALEVEL "ZeeLuchtdruk"
+#define D_PROGRAM_FLASH_SIZE "Programma Flash Grootte"
+#define D_PROGRAM_SIZE "Programma Grootte"
+#define D_PROJECT "Project"
+#define D_RAIN "Regen"
+#define D_RECEIVED "Ontvangen"
+#define D_RESTART "Herstart"
+#define D_RESTARTING "Herstarten"
+#define D_RESTART_REASON "Reden herstart"
+#define D_RESTORE "herstellen"
+#define D_RETAINED "retained"
+#define D_RULE "Regel"
+#define D_SAVE "Opslaan"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Start"
+#define D_STD_TIME "WT"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Subnet Masker"
+#define D_SUBSCRIBE_TO "Abonneer op"
+#define D_UNSUBSCRIBE_FROM "Uitschrijven van"
+#define D_SUCCESSFUL "Gelukt"
+#define D_SUNRISE "Zonsopgang"
+#define D_SUNSET "Zonsondergang"
+#define D_TEMPERATURE "Temperatuur"
+#define D_TO "naar"
+#define D_TOGGLE "Toggle" // Wissel, Tuimel
+#define D_TOPIC "Topic" // Onderwerp
+#define D_TOTAL_USAGE "Totaal verbruik"
+#define D_TRANSMIT "Verzend"
+#define D_TRUE "Waar"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "opwaarderen"
+#define D_UPLOAD "Verzenden"
+#define D_UPTIME "Bedrijfstijd"
+#define D_USER "Gebruiker"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV-index"
+#define D_UV_INDEX_1 "Laag"
+#define D_UV_INDEX_2 "Gemiddeld"
+#define D_UV_INDEX_3 "Hoog"
+#define D_UV_INDEX_4 "Intens"
+#define D_UV_INDEX_5 "Gevaarlijk"
+#define D_UV_INDEX_6 "Schadelijk"
+#define D_UV_INDEX_7 "Uitzonderlijk"
+#define D_UV_LEVEL "UV niveau"
+#define D_UV_POWER "UV intensiteit"
+#define D_VERSION "Versie"
+#define D_VOLTAGE "Spanning"
+#define D_WEIGHT "Gewicht"
+#define D_WARMLIGHT "Warm"
+#define D_WEB_SERVER "Webserver"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "WAARSCHUWING Deze versie bewaart geen instellingen"
+#define D_LEVEL_10 "niveau 1-0"
+#define D_LEVEL_01 "niveau 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serieel logging uitgeschakeld"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog logging weer ingeschakeld"
+
+#define D_SET_BAUDRATE_TO "Zet baudrate op"
+#define D_RECEIVED_TOPIC "Ontvangen topic"
+#define D_DATA_SIZE "Data lengte"
+#define D_ANALOG_INPUT "Analoog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig mislukt met status"
+#define D_ACTIVE_FOR_3_MINUTES "3 minuten actief"
+#define D_FAILED_TO_START "mislukt"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "Verbinden met AP"
+#define D_IN_MODE "in stand"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Verbinding mislukt omdat geen IP adres werd ontvangen"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Verbinding mislukt omdat AP onbereikbaar is"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbinding mislukt door fout wachtwoord"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Verbinding mislukt door AP time-out"
+#define D_ATTEMPTING_CONNECTION "Verbinden..."
+#define D_CHECKING_CONNECTION "Controleer verbinding..."
+#define D_QUERY_DONE "Aanvraag klaar. Aantal MQTT diensten gevonden"
+#define D_MQTT_SERVICE_FOUND "MQTT dienst gevonden op"
+#define D_FOUND_AT "gevonden op"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host niet gevonden"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Opgeslagen in flash op"
+#define D_LOADED_FROM_FLASH_AT "Geladen vanuit flash op"
+#define D_USE_DEFAULTS "Gebruik standaardwaarden"
+#define D_ERASED_SECTOR "Wis sector"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Zet JavaScript aan voor Tasmota"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
opwaarderen"
+#define D_WEBSERVER_ACTIVE_ON "Webserver actief op"
+#define D_WITH_IP_ADDRESS "met IP adres"
+#define D_WEBSERVER_STOPPED "Webserver gestopt"
+#define D_FILE_NOT_FOUND "Bestand niet gevonden"
+#define D_REDIRECTED "Omleiding naar captive portal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager start AccessPoint en hou Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager start AccessPoint"
+#define D_TRYING_TO_CONNECT "Apparaat probeert te verbinden met netwerk"
+
+#define D_RESTART_IN "Herstart over"
+#define D_SECONDS "seconden"
+#define D_DEVICE_WILL_RESTART "Herstart over enkele seconden"
+#define D_BUTTON_TOGGLE "Toggle" // Wissel, Tuimel
+#define D_CONFIGURATION "Configuratie"
+#define D_INFORMATION "Informatie"
+#define D_FIRMWARE_UPGRADE "Opwaarderen"
+#define D_CONSOLE "Console"
+#define D_CONFIRM_RESTART "Bevestig herstart"
+
+#define D_CONFIGURE_MODULE "Configureer Module"
+#define D_CONFIGURE_WIFI "Configureer WiFi"
+#define D_CONFIGURE_MQTT "Configureer MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configureer Domoticz"
+#define D_CONFIGURE_LOGGING "Configureer Logging"
+#define D_CONFIGURE_OTHER "Configureer Overige"
+#define D_CONFIRM_RESET_CONFIGURATION "Bevestig reset configuratie"
+#define D_RESET_CONFIGURATION "Reset Configuratie"
+#define D_BACKUP_CONFIGURATION "Bewaar Configuratie"
+#define D_RESTORE_CONFIGURATION "Herstel Configuration"
+#define D_MAIN_MENU "Hoofdmenu"
+
+#define D_MODULE_PARAMETERS "Module parameters"
+#define D_MODULE_TYPE "Module soort"
+#define D_PULLUP_ENABLE "Geen schakelaar pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serieel In"
+#define D_SERIAL_OUT "Serieel Uit"
+
+#define D_WIFI_PARAMETERS "Wifi parameters"
+#define D_SCAN_FOR_WIFI_NETWORKS "Zoek wifi netwerken"
+#define D_SCAN_DONE "Scan klaar"
+#define D_NO_NETWORKS_FOUND "Geen netwerken gevonden"
+#define D_REFRESH_TO_SCAN_AGAIN "Vernieuw om opnieuw te zoeken"
+#define D_DUPLICATE_ACCESSPOINT "Dubbel AccessPoint"
+#define D_SKIPPING_LOW_QUALITY "Overslaan agv lage ontvangskwaliteit"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Wachtwoord"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Wachtwoord"
+
+#define D_MQTT_PARAMETERS "MQTT parameters"
+#define D_CLIENT "Client"
+#define D_FULL_TOPIC "Volledig Topic"
+
+#define D_LOGGING_PARAMETERS "Logging parameters"
+#define D_SERIAL_LOG_LEVEL "Serieel log niveau"
+#define D_MQTT_LOG_LEVEL "Mqtt log niveau"
+#define D_WEB_LOG_LEVEL "Web log niveau"
+#define D_SYS_LOG_LEVEL "Syslog niveau"
+#define D_MORE_DEBUG "Meer debug"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog poort"
+#define D_TELEMETRY_PERIOD "Telemetry periode"
+
+#define D_OTHER_PARAMETERS "Overige parameters"
+#define D_TEMPLATE "Sjabloon"
+#define D_ACTIVATE "Activeer"
+#define D_WEB_ADMIN_PASSWORD "Web Admin Wachtwoord"
+#define D_MQTT_ENABLE "MQTT ingeschakeld"
+#define D_FRIENDLY_NAME "Beschrijvende naam"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "een apparaat"
+#define D_MULTI_DEVICE "meer apparaten"
+
+#define D_CONFIGURE_TEMPLATE "Configureer Sjabloon"
+#define D_TEMPLATE_PARAMETERS "Sjabloon parameters"
+#define D_TEMPLATE_NAME "Naam"
+#define D_BASE_TYPE "Op basis van"
+#define D_TEMPLATE_FLAGS "Opties"
+
+#define D_SAVE_CONFIGURATION "Bewaar configuratie"
+#define D_CONFIGURATION_SAVED "Configuratie opgeslagen"
+#define D_CONFIGURATION_RESET "Configuratie ge-reset"
+
+#define D_PROGRAM_VERSION "Programma Versie"
+#define D_BUILD_DATE_AND_TIME "Compileer Datum & Tijd"
+#define D_CORE_AND_SDK_VERSION "Core/SDK Versie"
+#define D_FLASH_WRITE_COUNT "Aantal Flash opslagen"
+#define D_MAC_ADDRESS "MAC Adres"
+#define D_MQTT_HOST "MQTT Host"
+#define D_MQTT_PORT "MQTT Poort"
+#define D_MQTT_CLIENT "MQTT Client"
+#define D_MQTT_USER "MQTT Gebruiker"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Groep Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Volledig Topic"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Flash Grootte"
+#define D_FREE_PROGRAM_SPACE "Programma ruimte over"
+
+#define D_UPGRADE_BY_WEBSERVER "Opwaarderen dmv webserver"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Start opwaarderen"
+#define D_UPGRADE_BY_FILE_UPLOAD "Opwaarderen dmv verzenden bestand"
+#define D_UPLOAD_STARTED "Verzending gestart"
+#define D_UPGRADE_STARTED "Opwaarderen gestart"
+#define D_UPLOAD_DONE "Opwaarderen klaar"
+#define D_UPLOAD_ERR_1 "Geen bestand gekozen"
+#define D_UPLOAD_ERR_2 "Onvoldoende geheugen ruimte"
+#define D_UPLOAD_ERR_3 "Magische byte is niet 0xE9"
+#define D_UPLOAD_ERR_4 "Programma flash grootte is groter dan werkelijke flash grootte"
+#define D_UPLOAD_ERR_5 "Opwaardeer buffer verschil"
+#define D_UPLOAD_ERR_6 "Opwaarderen mislukt. Schakel logging 3 in"
+#define D_UPLOAD_ERR_7 "Opwaarderen afgebroken"
+#define D_UPLOAD_ERR_8 "Ongeldig bestand"
+#define D_UPLOAD_ERR_9 "Bestand is te groot"
+#define D_UPLOAD_ERR_10 "Init RF chip mislukt"
+#define D_UPLOAD_ERR_11 "Wissen RF chip mislukt"
+#define D_UPLOAD_ERR_12 "Opwaarderen RF chip mislukt"
+#define D_UPLOAD_ERR_13 "Decoderen RF bestand mislukt"
+#define D_UPLOAD_ERROR_CODE "Opwaardeer foutcode"
+
+#define D_ENTER_COMMAND "Geef opdracht"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Schakel weblog 2 in indien antwoord verwacht"
+#define D_NEED_USER_AND_PASSWORD "Benodig user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Controleer TLS vingerafdruk..."
+#define D_TLS_CONNECT_FAILED_TO "TLS Verbinding mislukt naar"
+#define D_RETRY_IN "Opnieuw proberen over"
+#define D_VERIFIED "Gecontroleerd met vingerafdruk"
+#define D_INSECURE "Door ongeldige vingerafdruk een onveilige verbinding"
+#define D_CONNECT_FAILED_TO "Verbinding mislukt naar"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast uitgeschakeld"
+#define D_MULTICAST_REJOINED "Multicast verbonden"
+#define D_MULTICAST_JOIN_FAILED "Multicast verbinding mislukt"
+#define D_FAILED_TO_SEND_RESPONSE "Antwoord versturen mislukt"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basis gebeurtenis"
+#define D_WEMO_EVENT_SERVICE "WeMo gebeurtenis dienst"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo installatie"
+#define D_RESPONSE_SENT "Antwoord verstuurd"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue installatie"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API niet beschikbaar"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST argumenten"
+#define D_3_RESPONSE_PACKETS_SENT "3 antwoord paketten verstuurd"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Toets idx"
+#define D_DOMOTICZ_SWITCH_IDX "Schakelaar idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Spanning/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Stroom/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Bijwerk timer"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configureer Tijdschakelaar"
+#define D_TIMER_PARAMETERS "Tijdschakelaar parameters"
+#define D_TIMER_ENABLE "Tijdschakelaars inschakelen"
+#define D_TIMER_ARM "Actief"
+#define D_TIMER_TIME "Tijd"
+#define D_TIMER_DAYS "Dagen"
+#define D_TIMER_REPEAT "Herhaal"
+#define D_TIMER_OUTPUT "Uitgang"
+#define D_TIMER_ACTION "Actie"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configureer KNX"
+#define D_KNX_PARAMETERS "KNX Parameters"
+#define D_KNX_GENERAL_CONFIG "Algemeen"
+#define D_KNX_PHYSICAL_ADDRESS "Eigen adres"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Moet uniek zijn op het KNX netwerk)"
+#define D_KNX_ENABLE "KNX inschakelen"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Stuur gegevens naar groep adressen"
+#define D_ADD "Toevoegen"
+#define D_DELETE "Verwijder"
+#define D_REPLY "Antwoord"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Ontvang gegevens van groep adressen"
+#define D_RECEIVED_FROM "Ontvangen van"
+#define D_KNX_COMMAND_WRITE "Schrijven"
+#define D_KNX_COMMAND_READ "Lezen"
+#define D_KNX_COMMAND_OTHER "Overige"
+#define D_SENT_TO "verzend naar"
+#define D_KNX_WARNING "Groep adres (0/0/0) is gereserveerd en mag niet worden gebruikt."
+#define D_KNX_ENHANCEMENT "Verbeter verbinding"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Verbruik vandaag"
+#define D_ENERGY_YESTERDAY "Verbruik gisteren"
+#define D_ENERGY_TOTAL "Verbruik totaal"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Openen"
+#define D_CLOSE "Sluiten"
+#define D_DOMOTICZ_SHUTTER "Rolluik"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configureer PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 Parameters"
+#define D_INVERT_PORTS "Inverteer Poorten"
+#define D_DEVICE "Apparaat"
+#define D_DEVICE_INPUT "Ingang"
+#define D_DEVICE_OUTPUT "Uitgang"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor bezet"
+#define D_SENSOR_CRC_ERROR "Sensor CRC fout"
+#define D_SENSORS_FOUND "Aantal sensoren"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Te lang wachten op"
+#define D_START_SIGNAL_LOW "laag start signaal"
+#define D_START_SIGNAL_HIGH "hoog start signaal"
+#define D_PULSE "signaal"
+#define D_CHECKSUM_FAILURE "Controle mislukt"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Geen opdracht ACK van sensor"
+#define D_SHT1X_FOUND "SHT1X gevonden"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Stofdeeltjes"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Verwijder gewicht"
+#define D_HX_CAL_REFERENCE "Plaats ijkgewicht"
+#define D_HX_CAL_DONE "Ge-ijkt"
+#define D_HX_CAL_FAIL "Ijken is mislukt"
+#define D_RESET_HX711 "Nulstelling weegschaal"
+#define D_CONFIGURE_HX711 "Configureer Weegschaal"
+#define D_HX711_PARAMETERS "Weegschaal parameters"
+#define D_ITEM_WEIGHT "Gewicht van onderdeel"
+#define D_REFERENCE_WEIGHT "Ijkgewicht"
+#define D_CALIBRATE "Ijken"
+#define D_CALIBRATION "Ijken"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Windrichting"
+#define D_TX20_WIND_SPEED "Windsnelheid"
+#define D_TX20_WIND_SPEED_AVG "Windsnelheid gemiddeld"
+#define D_TX20_WIND_SPEED_MAX "Windsnelhied maximaal"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Speler"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relais" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Teller" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Zoemer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "h"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kΩ"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
+#define D_UNIT_MICROMETER "µm"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sectoren"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Fase hoek"
+#define D_IMPORT_ACTIVE "Import werkelijk"
+#define D_EXPORT_ACTIVE "Export werkelijk"
+#define D_IMPORT_REACTIVE "Import blind"
+#define D_EXPORT_REACTIVE "Export blind"
+#define D_TOTAL_REACTIVE "Totaal blind"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 spanning"
+#define D_PV1_CURRENT "PV1 stroom"
+#define D_PV1_POWER "PV1 vermogen"
+#define D_PV2_VOLTAGE "PV2 spanning"
+#define D_PV2_CURRENT "PV2 stroom"
+#define D_PV2_POWER "PV2 vermogen"
+#define D_SOLAR_POWER "Zon vermogen"
+#define D_INVERTER_POWER "Omvormer vermogen"
+#define D_STATUS "Status"
+#define D_WAITING "Wacht"
+#define D_CHECKING "Controle"
+#define D_WORKING "Actief"
+#define D_FAILURE "Fout"
+#define D_SOLAX_ERROR_0 "Geen"
+#define D_SOLAX_ERROR_1 "Netverbinding"
+#define D_SOLAX_ERROR_2 "Netspanning"
+#define D_SOLAX_ERROR_3 "Netfrequentie"
+#define D_SOLAX_ERROR_4 "Pv spanning"
+#define D_SOLAX_ERROR_5 "Isolatie"
+#define D_SOLAX_ERROR_6 "Overtemperatuur"
+#define D_SOLAX_ERROR_7 "Ventilator"
+#define D_SOLAX_ERROR_8 "Overige"
+
+#endif // _LANGUAGE_NL_NL_H_
diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h
index 8f5af6813..1b83f8697 100644
--- a/tasmota/language/pl-PL.h
+++ b/tasmota/language/pl-PL.h
@@ -1,701 +1,703 @@
-/*
- pl-PL-d.h - localization for Polish with diacritics - Poland for Tasmota
-
- Copyright (C) 2019 Theo Arends (translated by roblad - Robert L., upgraded by R. Turala)
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_PL_PL_D_H_
-#define _LANGUAGE_PL_PL_D_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.12.0d
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1045
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "pl"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "NiePonWtoŚroCzwPiąSob"
-#define D_MONTH3LIST "StyLutMarKwiMajCzeLipSieWrzPaźLisGru"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Jakość powietrza"
-#define D_AP "AP" // Access Point
-#define D_AS "jak"
-#define D_AUTO "AUTO"
-#define D_BLINK "Miganie"
-#define D_BLINKOFF "Miganie - Wył."
-#define D_BOOT_COUNT "Licznik restartów"
-#define D_BRIGHTLIGHT "Jasny"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Przycisk"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bajtów"
-#define D_CELSIUS "Celsiusz"
-#define D_CHANNEL "Kanał"
-#define D_CO2 "Dwutlenek węgla"
-#define D_CODE "Kod" // Button code
-#define D_COLDLIGHT "Zimny"
-#define D_COMMAND "Komenda"
-#define D_CONNECTED "Połączony"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Licz"
-#define D_COUNTER "Licznik"
-#define D_CURRENT "Prąd" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Ciemny"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Wyłączony"
-#define D_DISTANCE "Odległość"
-#define D_DNS_SERVER "Serwer DNS"
-#define D_DONE "Wykonane"
-#define D_DST_TIME "Czas DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulacja"
-#define D_ENABLED "Załączony"
-#define D_ERASE "Wyczyść"
-#define D_ERROR "Błąd"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Błędny"
-#define D_FALLBACK "Awaryjny"
-#define D_FALLBACK_TOPIC "Temat zastępczy"
-#define D_FALSE "Fałsz"
-#define D_FILE "Plik"
-#define D_FLOW_RATE "Przepływ"
-#define D_FREE_MEMORY "Wolna pamięć"
-#define D_FREQUENCY "Częstotliwość"
-#define D_GAS "Gas"
-#define D_GATEWAY "Brama"
-#define D_GROUP "Grupa"
-#define D_HOST "Serwer"
-#define D_HOSTNAME "Nazwa serwera"
-#define D_HUMIDITY "Wilgotność"
-#define D_ILLUMINANCE "Podświetlanie"
-#define D_IMMEDIATE "Natychmiastowy" // Button immediate
-#define D_INDEX "Indeks"
-#define D_INFO "Informacja"
-#define D_INFRARED "Podczerwień"
-#define D_INITIALIZED "Zainicjowany"
-#define D_IP_ADDRESS "Adres IP"
-#define D_LIGHT "Światło"
-#define D_LWT "LWT"
-#define D_MODULE "Moduł"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "Wielokrotne naciśnięcie"
-#define D_NOISE "Szum"
-#define D_NONE "Brak"
-#define D_OFF "Wyłączony"
-#define D_OFFLINE "Nieaktywny"
-#define D_OK "Ok"
-#define D_ON "Załączony"
-#define D_ONLINE "Aktywny"
-#define D_PASSWORD "Hasło"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Cosinus fi"
-#define D_POWERUSAGE "Moc"
-#define D_POWERUSAGE_ACTIVE "Moc czynna"
-#define D_POWERUSAGE_APPARENT "Moc pozorna"
-#define D_POWERUSAGE_REACTIVE "Moc bierna"
-#define D_PRESSURE "Ciśnienie"
-#define D_PRESSUREATSEALEVEL "Ciśnienie na poziomie morza"
-#define D_PROGRAM_FLASH_SIZE "Rozmiar programu flash"
-#define D_PROGRAM_SIZE "Rozmiar programu"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Deszcz"
-#define D_RECEIVED "Otrzymany"
-#define D_RESTART "Restart"
-#define D_RESTARTING "Restartowanie"
-#define D_RESTART_REASON "Przyczyna restartu"
-#define D_RESTORE "Przywracanie"
-#define D_RETAINED "Zachowane"
-#define D_RULE "Reguła"
-#define D_SAVE "Zapisz"
-#define D_SENSOR "Czujnik"
-#define D_SSID "SSID"
-#define D_START "Start"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Maska podsieci"
-#define D_SUBSCRIBE_TO "Subskrybuj"
-#define D_UNSUBSCRIBE_FROM "Nie subskrybuj"
-#define D_SUCCESSFUL "Powodzenie"
-#define D_SUNRISE "Wschód słońca"
-#define D_SUNSET "Zachód słońca"
-#define D_TEMPERATURE "Temperatura"
-#define D_TO "do"
-#define D_TOGGLE "Przełącz"
-#define D_TOPIC "Temat"
-#define D_TOTAL_USAGE "Całkowite użycie"
-#define D_TRANSMIT "Wyślij"
-#define D_TRUE "Prawda"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "aktualizacji"
-#define D_UPLOAD "Wgraj"
-#define D_UPTIME "Czas pracy"
-#define D_USER "Użytkownik"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Index UV"
-#define D_UV_INDEX_1 "Niski"
-#define D_UV_INDEX_2 "Średni"
-#define D_UV_INDEX_3 "Wysoki"
-#define D_UV_INDEX_4 "Niebezpieczny"
-#define D_UV_INDEX_5 "Burn L1/2"
-#define D_UV_INDEX_6 "Burn L3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "Poziom UV"
-#define D_UV_POWER "Moc UV"
-#define D_VERSION "Wersja"
-#define D_VOLTAGE "Napięcie"
-#define D_WEIGHT "Waga"
-#define D_WARMLIGHT "Temperatura światła"
-#define D_WEB_SERVER "Serwer Web"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "UWAGA Ta wersja nie obsługuje zapisu ustawień"
-#define D_LEVEL_10 "poziom 1-0"
-#define D_LEVEL_01 "poziom 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Wyłączony dziennik na porcie szeregowym"
-#define D_SYSLOG_LOGGING_REENABLED "Wznowiono zapis do Syslog"
-
-#define D_SET_BAUDRATE_TO "Ustaw szybkość transmisji na"
-#define D_RECEIVED_TOPIC "Otrzymany temat"
-#define D_DATA_SIZE "Wielkość danych"
-#define D_ANALOG_INPUT "Wejście analogowe"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Pętla zablokowana"
-#define D_WPS_FAILED_WITH_STATUS "Błąd konfiguracji WPS ze statusem"
-#define D_ACTIVE_FOR_3_MINUTES "aktywny 3 minuty"
-#define D_FAILED_TO_START "nie udało się uruchomić"
-#define D_PATCH_ISSUE_2186 "Błąd poprawki 2186"
-#define D_CONNECTING_TO_AP "Łączenie z AP"
-#define D_IN_MODE "w trybie"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Połączenie nie powiodło się, ponieważ nie otrzymano adresu IP"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Połączenie nie powiodło się, AP nie osiągalny"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Połączenie nie powiodło się, nieprawidlowe hasło"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Nie udało się nawiązac połączenia, limit czasu przekroczony"
-#define D_ATTEMPTING_CONNECTION "Próba połączenia..."
-#define D_CHECKING_CONNECTION "Sprawdzanie połączenia..."
-#define D_QUERY_DONE "Zapytanie wykonane"
-#define D_MQTT_SERVICE_FOUND "Usługa MQTT została znaleziona"
-#define D_FOUND_AT "znaleziono w"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nie znaleziony"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Zapisano do pamięci flash w"
-#define D_LOADED_FROM_FLASH_AT "Wczytano z pamięci flash w"
-#define D_USE_DEFAULTS "Użyj domyślnych"
-#define D_ERASED_SECTOR "Sektor wymazany"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Aby korzystać z Tasmota, włącz obsługę JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Oprogramowanie MINIMAL
proszę uaktualnić"
-#define D_WEBSERVER_ACTIVE_ON "Aktywny serwer Web"
-#define D_WITH_IP_ADDRESS "z adresem IP"
-#define D_WEBSERVER_STOPPED "Serwer Web zatrzymany"
-#define D_FILE_NOT_FOUND "Plik nie odnaleziony"
-#define D_REDIRECTED "Przekierowano do własnego portalu"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Menedżer Wifi ustawia punkt dostępowy i zachowuje stacje"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Menedżer sieci Wi-Fi Access Point"
-#define D_TRYING_TO_CONNECT "Próbuję połączyć urzadzenie z siecią"
-
-#define D_RESTART_IN "Zrestartuj"
-#define D_SECONDS "Sekund"
-#define D_DEVICE_WILL_RESTART "Urządzenie zrestartuje sie za kilka sekund"
-#define D_BUTTON_TOGGLE "Załącz/Wyłącz"
-#define D_CONFIGURATION "Konfiguracja"
-#define D_INFORMATION "Informacje"
-#define D_FIRMWARE_UPGRADE "Aktualizacja oprogramowania"
-#define D_CONSOLE "Konsola"
-#define D_CONFIRM_RESTART "Potwierdź restart"
-
-#define D_CONFIGURE_MODULE "Konfiguracja modułu"
-#define D_CONFIGURE_WIFI "Konfiguracja WiFi"
-#define D_CONFIGURE_MQTT "Konfiguracja MQTT"
-#define D_CONFIGURE_DOMOTICZ "Konfiguracja Domoticza"
-#define D_CONFIGURE_LOGGING "Konfiguracja dziennika"
-#define D_CONFIGURE_OTHER "Inne konfiguracje"
-#define D_CONFIRM_RESET_CONFIGURATION "Potwierdź reset ustawień"
-#define D_RESET_CONFIGURATION "Reset ustawień"
-#define D_BACKUP_CONFIGURATION "Kopia ustawień"
-#define D_RESTORE_CONFIGURATION "Przywracanie ustawień"
-#define D_MAIN_MENU "Menu główne"
-
-#define D_MODULE_PARAMETERS "Parametry modułu"
-#define D_MODULE_TYPE "Typ"
-#define D_PULLUP_ENABLE "Przełącznik pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Wejście rs"
-#define D_SERIAL_OUT "Wyjście rs"
-
-#define D_WIFI_PARAMETERS "Parametry sieci WiFi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Skanuj sieci"
-#define D_SCAN_DONE "Skanowanie wykonane"
-#define D_NO_NETWORKS_FOUND "Nie znaleziono sieci"
-#define D_REFRESH_TO_SCAN_AGAIN "Odśwież aby ponownie wyszukać sieci"
-#define D_DUPLICATE_ACCESSPOINT "Duplikuj"
-#define D_SKIPPING_LOW_QUALITY "Pominięto z powodu niskiej jakości sygnału"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "Nazwa 1"
-#define D_AP1_PASSWORD "Hasło 1"
-#define D_AP2_SSID "Nazwa 2"
-#define D_AP2_PASSWORD "Hasło 2"
-
-#define D_MQTT_PARAMETERS "Parametry MQTT"
-#define D_CLIENT "Klient"
-#define D_FULL_TOPIC "Pełny temat"
-
-#define D_LOGGING_PARAMETERS "Opcje dziennika"
-#define D_SERIAL_LOG_LEVEL "Serial - poziom"
-#define D_MQTT_LOG_LEVEL "Mqtt - poziom"
-#define D_WEB_LOG_LEVEL "Web - poziom"
-#define D_SYS_LOG_LEVEL "System - poziom"
-#define D_MORE_DEBUG "Więcej informacji dziennika"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Okres telemetrii"
-
-#define D_OTHER_PARAMETERS "Inne parametry"
-#define D_TEMPLATE "Szablon"
-#define D_ACTIVATE "Aktywuj"
-#define D_WEB_ADMIN_PASSWORD "Hasło administratora"
-#define D_MQTT_ENABLE "Załącz MQTT"
-#define D_FRIENDLY_NAME "Nazwa"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Mostek Hue"
-#define D_SINGLE_DEVICE "pojedyńcze urządzenie"
-#define D_MULTI_DEVICE "multi urządzenie"
-
-#define D_CONFIGURE_TEMPLATE "Konfiguracja szablonu"
-#define D_TEMPLATE_PARAMETERS "Parametry szablonu"
-#define D_TEMPLATE_NAME "Nazwa"
-#define D_BASE_TYPE "Na bazie"
-#define D_TEMPLATE_FLAGS "Opcje"
-
-#define D_SAVE_CONFIGURATION "Zapisz ustawienia"
-#define D_CONFIGURATION_SAVED "Ustawienia zapisane"
-#define D_CONFIGURATION_RESET "Ustawienia zresetowane"
-
-#define D_PROGRAM_VERSION "Wersja oprogramowania"
-#define D_BUILD_DATE_AND_TIME "Data kompilacji"
-#define D_CORE_AND_SDK_VERSION "Wersja Core/SDK"
-#define D_FLASH_WRITE_COUNT "Liczba zapisów do pamięci"
-#define D_MAC_ADDRESS "Adres MAC"
-#define D_MQTT_HOST "Host"
-#define D_MQTT_PORT "Port"
-#define D_MQTT_CLIENT "Klient"
-#define D_MQTT_USER "Użytkownik"
-#define D_MQTT_TOPIC "Temat"
-#define D_MQTT_GROUP_TOPIC "Temat grupy"
-#define D_MQTT_FULL_TOPIC "Pełny temat"
-#define D_MDNS_DISCOVERY "Wykrywanie mDNS"
-#define D_MDNS_ADVERTISE "Rozgłaszanie mDNS"
-#define D_ESP_CHIP_ID "ID ukladu ESP"
-#define D_FLASH_CHIP_ID "ID pamięci flash"
-#define D_FLASH_CHIP_SIZE "Rozmiar pamięci flash"
-#define D_FREE_PROGRAM_SPACE "Wolna pamięć programu"
-
-#define D_UPGRADE_BY_WEBSERVER "Aktualizacja z serwera Web"
-#define D_OTA_URL "Adres serwera"
-#define D_START_UPGRADE "Aktualizuj"
-#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizacja z pliku"
-#define D_UPLOAD_STARTED "Wgrywanie rozpoczęte"
-#define D_UPGRADE_STARTED "Aktualizacja rozpoczęta"
-#define D_UPLOAD_DONE "Wgrywanie zakończone"
-#define D_UPLOAD_ERR_1 "Nie wybrano pliku"
-#define D_UPLOAD_ERR_2 "Niewystarczająca ilość miejsca"
-#define D_UPLOAD_ERR_3 "Magiczny bajt jest inny niz 0xE9"
-#define D_UPLOAD_ERR_4 "Rozmiar programu jest większy niż rzeczywisty rozmiar pamięci flash"
-#define D_UPLOAD_ERR_5 "Wgrywanie, bufor niezgodności stanu porównywanych bitow"
-#define D_UPLOAD_ERR_6 "Błąd wgrywania. Uruchomiono zapis do dziennika na poziomie 3"
-#define D_UPLOAD_ERR_7 "Wgrywanie przerwane"
-#define D_UPLOAD_ERR_8 "Błędny plik"
-#define D_UPLOAD_ERR_9 "Plik jest za duży"
-#define D_UPLOAD_ERR_10 "Błąd inicjacji układu RF"
-#define D_UPLOAD_ERR_11 "Błąd kasowania układu RF"
-#define D_UPLOAD_ERR_12 "Błąd zapisu układu RF"
-#define D_UPLOAD_ERR_13 "Błąd dekodowania oprrogramowania układu RF"
-#define D_UPLOAD_ERROR_CODE "Błąd wgrywania"
-
-#define D_ENTER_COMMAND "Wprowadź polecenie"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Włącz poziom 2 zapisu dziennika, jeśli oczekiwana jest odpowiedź"
-#define D_NEED_USER_AND_PASSWORD "Wymagany użytkownik=&hasło="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Weryfikuj odcisk TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Nieudane połączenie TLS do"
-#define D_RETRY_IN "Spróbuj ponownie"
-#define D_VERIFIED "Zweryfikowano odcisk"
-#define D_INSECURE "Nieprawidłowe połączenie z powodu błędnego odcisku TLS"
-#define D_CONNECT_FAILED_TO "Nie udało się nawiązać połączenia"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast wyłączony"
-#define D_MULTICAST_REJOINED "Multicast dołączony"
-#define D_MULTICAST_JOIN_FAILED "Podłączenie Multicast nie powiodło się"
-#define D_FAILED_TO_SEND_RESPONSE "Nie udało się wysłać odpowiedzi"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "Zdarzenie podstawowe"
-#define D_WEMO_EVENT_SERVICE "Zdarzenie serwisowe"
-#define D_WEMO_META_SERVICE "Meta dane serwisowe"
-#define D_WEMO_SETUP "Ustawienia WeMo"
-#define D_RESPONSE_SENT "Wyślij odpowiedź"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Ustawienia Hue"
-#define D_HUE_API_NOT_IMPLEMENTED "Api nie zaimplementowane"
-#define D_HUE_API "API"
-#define D_HUE_POST_ARGS "POST argument"
-#define D_3_RESPONSE_PACKETS_SENT "3 pakiety odpowiedzi wysyłane"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Parametry Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Klucz Idx"
-#define D_DOMOTICZ_SWITCH_IDX "Przełącznik Idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor Idx"
- #define D_DOMOTICZ_TEMP "Temperatura"
- #define D_DOMOTICZ_TEMP_HUM "Temperatura, Wilgotność"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temperatura, Wilgotność, Ciśnienie"
- #define D_DOMOTICZ_POWER_ENERGY "Moc, Energia"
- #define D_DOMOTICZ_ILLUMINANCE "Oświetlenie"
- #define D_DOMOTICZ_COUNT "Licznik"
- #define D_DOMOTICZ_VOLTAGE "Napięcie"
- #define D_DOMOTICZ_CURRENT "Prąd"
- #define D_DOMOTICZ_AIRQUALITY "Jakość powietrza"
- #define D_DOMOTICZ_P1_SMART_METER "Miernik P1"
-#define D_DOMOTICZ_UPDATE_TIMER "Aktualizacja zegara"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Konfiguracja harmonogramu"
-#define D_TIMER_PARAMETERS "Parametry harmonogramu"
-#define D_TIMER_ENABLE "Załącz harmonogram"
-#define D_TIMER_ARM "Załącz"
-#define D_TIMER_TIME "Czas"
-#define D_TIMER_DAYS "Dni"
-#define D_TIMER_REPEAT "Powtarzaj"
-#define D_TIMER_OUTPUT "Wyjście"
-#define D_TIMER_ACTION "Akcja"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Konfiguracja KNX"
-#define D_KNX_PARAMETERS "Parametry KNX"
-#define D_KNX_GENERAL_CONFIG "Konfiguracja ogólna"
-#define D_KNX_PHYSICAL_ADDRESS "Adres fizyczny"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Musi być unikalny w sieci KNX)"
-#define D_KNX_ENABLE "Załącz"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Adresy grupowe do zapisu"
-#define D_ADD "Dodaj"
-#define D_DELETE "Usuń"
-#define D_REPLY "Odpowiedz"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Adresy grupowe do odbioru"
-#define D_RECEIVED_FROM "Odebrane od"
-#define D_KNX_COMMAND_WRITE "Zapisz"
-#define D_KNX_COMMAND_READ "Czytaj"
-#define D_KNX_COMMAND_OTHER "Inna komenda"
-#define D_SENT_TO "Wyślij do"
-#define D_KNX_WARNING "Adres grupy (0/0/0) jest zarezerwowany i nie można go użyć."
-#define D_KNX_ENHANCEMENT "Rozszerzenia"
-#define D_KNX_TX_SLOT "Gniazdo TX"
-#define D_KNX_RX_SLOT "Gniazdo RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energia dzisiaj"
-#define D_ENERGY_YESTERDAY "Energia wczoraj"
-#define D_ENERGY_TOTAL "Energia całkowita"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Otwórz"
-#define D_CLOSE "Zamknij"
-#define D_DOMOTICZ_SHUTTER "Roleta"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Konfiguracja PCF8574"
-#define D_PCF8574_PARAMETERS "Parametry PCF8574"
-#define D_INVERT_PORTS "Porty odwrócone"
-#define D_DEVICE "Urządzenie"
-#define D_DEVICE_INPUT "Wejście"
-#define D_DEVICE_OUTPUT "Wyjście"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Czujnik zajęty"
-#define D_SENSOR_CRC_ERROR "Błąd CRC czujnika"
-#define D_SENSORS_FOUND "Znaleziono czujnik"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Trwa oczekiwanie"
-#define D_START_SIGNAL_LOW "Sygnał startowy niski"
-#define D_START_SIGNAL_HIGH "Sygnał startowy wysoki"
-#define D_PULSE "Impuls"
-#define D_CHECKSUM_FAILURE "Błędna suma kontrolna"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Czujnik nie otrzymał komendy ACK"
-#define D_SHT1X_FOUND "SHT1X znaleziony"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Cząstki"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Usuń wagę"
-#define D_HX_CAL_REFERENCE "Załaduj wagę referencyjną"
-#define D_HX_CAL_DONE "Skalibrowany"
-#define D_HX_CAL_FAIL "Błąd kalibracji"
-#define D_RESET_HX711 "Zresetuj skalę"
-#define D_CONFIGURE_HX711 "Skonfiguruj skalę"
-#define D_HX711_PARAMETERS "Parametry skali"
-#define D_ITEM_WEIGHT "Waga przedmiotu"
-#define D_REFERENCE_WEIGHT "Waga referencyjna"
-#define D_CALIBRATE "Skalibruj"
-#define D_CALIBRATION "Kalibrowanie"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Kierunek"
-#define D_TX20_WIND_SPEED "Prędkość"
-#define D_TX20_WIND_SPEED_AVG "Średnia prędkość"
-#define D_TX20_WIND_SPEED_MAX "Maksymalna prędkość"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "Odtearzacz MP3"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Przełącznik" // Suffix "1"
-#define D_SENSOR_BUTTON "Przycisk" // Suffix "1"
-#define D_SENSOR_RELAY "Przekaźnik" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "Led link" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Licznik" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Podświetlanie"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "Głęboko uśpiony"
-#define D_SENSOR_EXS_ENABLE "Załącz EXS"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Godz"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sektory"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Przesunięcie faz"
-#define D_IMPORT_ACTIVE "Czynna pobrana"
-#define D_EXPORT_ACTIVE "Czynna oddana"
-#define D_IMPORT_REACTIVE "Bierna pobrana"
-#define D_EXPORT_REACTIVE "Bierna oddana"
-#define D_TOTAL_REACTIVE "Bierna całkowita"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "Napięcie PV1"
-#define D_PV1_CURRENT "Prąd PV1"
-#define D_PV1_POWER "Moc PV1 "
-#define D_PV2_VOLTAGE "Napięcie PV2"
-#define D_PV2_CURRENT "Prąd PV2"
-#define D_PV2_POWER "Moc PV2"
-#define D_SOLAR_POWER "Moc PV"
-#define D_INVERTER_POWER "Moc invertera"
-#define D_STATUS "Status"
-#define D_WAITING "Oczekiwanie"
-#define D_CHECKING "Sprawdzanie"
-#define D_WORKING "Praca"
-#define D_FAILURE "Błąd"
-#define D_SOLAX_ERROR_0 "Błąd - brak kodu"
-#define D_SOLAX_ERROR_1 "Błąd - utrata sieci"
-#define D_SOLAX_ERROR_2 "Błąd - napięcie sieci"
-#define D_SOLAX_ERROR_3 "Błąd - częstotliwość sieci"
-#define D_SOLAX_ERROR_4 "Błąd - napięcie PV"
-#define D_SOLAX_ERROR_5 "Błąd - usterka izolacji"
-#define D_SOLAX_ERROR_6 "Błąd - przegrzanie"
-#define D_SOLAX_ERROR_7 "Błąd - wentylator"
-#define D_SOLAX_ERROR_8 "Błąd - inne urządzenie"
-
-#endif // _LANGUAGE_PL_PL_D_H_
+/*
+ pl-PL-d.h - localization for Polish with diacritics - Poland for Tasmota
+
+ Copyright (C) 2019 Theo Arends (translated by roblad - Robert L., upgraded by R. Turala)
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_PL_PL_D_H_
+#define _LANGUAGE_PL_PL_D_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.12.0d
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1045
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "pl"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "NiePonWtoŚroCzwPiąSob"
+#define D_MONTH3LIST "StyLutMarKwiMajCzeLipSieWrzPaźLisGru"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Jakość powietrza"
+#define D_AP "AP" // Access Point
+#define D_AS "jak"
+#define D_AUTO "AUTO"
+#define D_BLINK "Miganie"
+#define D_BLINKOFF "Miganie - Wył."
+#define D_BOOT_COUNT "Licznik restartów"
+#define D_BRIGHTLIGHT "Jasny"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Przycisk"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bajtów"
+#define D_CELSIUS "Celsiusz"
+#define D_CHANNEL "Kanał"
+#define D_CO2 "Dwutlenek węgla"
+#define D_CODE "Kod" // Button code
+#define D_COLDLIGHT "Zimny"
+#define D_COMMAND "Komenda"
+#define D_CONNECTED "Połączony"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Licz"
+#define D_COUNTER "Licznik"
+#define D_CURRENT "Prąd" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Ciemny"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Wyłączony"
+#define D_DISTANCE "Odległość"
+#define D_DNS_SERVER "Serwer DNS"
+#define D_DONE "Wykonane"
+#define D_DST_TIME "Czas DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulacja"
+#define D_ENABLED "Załączony"
+#define D_ERASE "Wyczyść"
+#define D_ERROR "Błąd"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Błędny"
+#define D_FALLBACK "Awaryjny"
+#define D_FALLBACK_TOPIC "Temat zastępczy"
+#define D_FALSE "Fałsz"
+#define D_FILE "Plik"
+#define D_FLOW_RATE "Przepływ"
+#define D_FREE_MEMORY "Wolna pamięć"
+#define D_FREQUENCY "Częstotliwość"
+#define D_GAS "Gas"
+#define D_GATEWAY "Brama"
+#define D_GROUP "Grupa"
+#define D_HOST "Serwer"
+#define D_HOSTNAME "Nazwa serwera"
+#define D_HUMIDITY "Wilgotność"
+#define D_ILLUMINANCE "Podświetlanie"
+#define D_IMMEDIATE "Natychmiastowy" // Button immediate
+#define D_INDEX "Indeks"
+#define D_INFO "Informacja"
+#define D_INFRARED "Podczerwień"
+#define D_INITIALIZED "Zainicjowany"
+#define D_IP_ADDRESS "Adres IP"
+#define D_LIGHT "Światło"
+#define D_LWT "LWT"
+#define D_MODULE "Moduł"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "Wielokrotne naciśnięcie"
+#define D_NOISE "Szum"
+#define D_NONE "Brak"
+#define D_OFF "Wyłączony"
+#define D_OFFLINE "Nieaktywny"
+#define D_OK "Ok"
+#define D_ON "Załączony"
+#define D_ONLINE "Aktywny"
+#define D_PASSWORD "Hasło"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Cosinus fi"
+#define D_POWERUSAGE "Moc"
+#define D_POWERUSAGE_ACTIVE "Moc czynna"
+#define D_POWERUSAGE_APPARENT "Moc pozorna"
+#define D_POWERUSAGE_REACTIVE "Moc bierna"
+#define D_PRESSURE "Ciśnienie"
+#define D_PRESSUREATSEALEVEL "Ciśnienie na poziomie morza"
+#define D_PROGRAM_FLASH_SIZE "Rozmiar programu flash"
+#define D_PROGRAM_SIZE "Rozmiar programu"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Deszcz"
+#define D_RECEIVED "Otrzymany"
+#define D_RESTART "Restart"
+#define D_RESTARTING "Restartowanie"
+#define D_RESTART_REASON "Przyczyna restartu"
+#define D_RESTORE "Przywracanie"
+#define D_RETAINED "Zachowane"
+#define D_RULE "Reguła"
+#define D_SAVE "Zapisz"
+#define D_SENSOR "Czujnik"
+#define D_SSID "SSID"
+#define D_START "Start"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Maska podsieci"
+#define D_SUBSCRIBE_TO "Subskrybuj"
+#define D_UNSUBSCRIBE_FROM "Nie subskrybuj"
+#define D_SUCCESSFUL "Powodzenie"
+#define D_SUNRISE "Wschód słońca"
+#define D_SUNSET "Zachód słońca"
+#define D_TEMPERATURE "Temperatura"
+#define D_TO "do"
+#define D_TOGGLE "Przełącz"
+#define D_TOPIC "Temat"
+#define D_TOTAL_USAGE "Całkowite użycie"
+#define D_TRANSMIT "Wyślij"
+#define D_TRUE "Prawda"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "aktualizacji"
+#define D_UPLOAD "Wgraj"
+#define D_UPTIME "Czas pracy"
+#define D_USER "Użytkownik"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Index UV"
+#define D_UV_INDEX_1 "Niski"
+#define D_UV_INDEX_2 "Średni"
+#define D_UV_INDEX_3 "Wysoki"
+#define D_UV_INDEX_4 "Niebezpieczny"
+#define D_UV_INDEX_5 "Burn L1/2"
+#define D_UV_INDEX_6 "Burn L3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "Poziom UV"
+#define D_UV_POWER "Moc UV"
+#define D_VERSION "Wersja"
+#define D_VOLTAGE "Napięcie"
+#define D_WEIGHT "Waga"
+#define D_WARMLIGHT "Temperatura światła"
+#define D_WEB_SERVER "Serwer Web"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "UWAGA Ta wersja nie obsługuje zapisu ustawień"
+#define D_LEVEL_10 "poziom 1-0"
+#define D_LEVEL_01 "poziom 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Wyłączony dziennik na porcie szeregowym"
+#define D_SYSLOG_LOGGING_REENABLED "Wznowiono zapis do Syslog"
+
+#define D_SET_BAUDRATE_TO "Ustaw szybkość transmisji na"
+#define D_RECEIVED_TOPIC "Otrzymany temat"
+#define D_DATA_SIZE "Wielkość danych"
+#define D_ANALOG_INPUT "Wejście analogowe"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Pętla zablokowana"
+#define D_WPS_FAILED_WITH_STATUS "Błąd konfiguracji WPS ze statusem"
+#define D_ACTIVE_FOR_3_MINUTES "aktywny 3 minuty"
+#define D_FAILED_TO_START "nie udało się uruchomić"
+#define D_PATCH_ISSUE_2186 "Błąd poprawki 2186"
+#define D_CONNECTING_TO_AP "Łączenie z AP"
+#define D_IN_MODE "w trybie"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Połączenie nie powiodło się, ponieważ nie otrzymano adresu IP"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Połączenie nie powiodło się, AP nie osiągalny"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Połączenie nie powiodło się, nieprawidlowe hasło"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Nie udało się nawiązac połączenia, limit czasu przekroczony"
+#define D_ATTEMPTING_CONNECTION "Próba połączenia..."
+#define D_CHECKING_CONNECTION "Sprawdzanie połączenia..."
+#define D_QUERY_DONE "Zapytanie wykonane"
+#define D_MQTT_SERVICE_FOUND "Usługa MQTT została znaleziona"
+#define D_FOUND_AT "znaleziono w"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nie znaleziony"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Zapisano do pamięci flash w"
+#define D_LOADED_FROM_FLASH_AT "Wczytano z pamięci flash w"
+#define D_USE_DEFAULTS "Użyj domyślnych"
+#define D_ERASED_SECTOR "Sektor wymazany"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Aby korzystać z Tasmota, włącz obsługę JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Oprogramowanie MINIMAL
proszę uaktualnić"
+#define D_WEBSERVER_ACTIVE_ON "Aktywny serwer Web"
+#define D_WITH_IP_ADDRESS "z adresem IP"
+#define D_WEBSERVER_STOPPED "Serwer Web zatrzymany"
+#define D_FILE_NOT_FOUND "Plik nie odnaleziony"
+#define D_REDIRECTED "Przekierowano do własnego portalu"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Menedżer Wifi ustawia punkt dostępowy i zachowuje stacje"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Menedżer sieci Wi-Fi Access Point"
+#define D_TRYING_TO_CONNECT "Próbuję połączyć urzadzenie z siecią"
+
+#define D_RESTART_IN "Zrestartuj"
+#define D_SECONDS "Sekund"
+#define D_DEVICE_WILL_RESTART "Urządzenie zrestartuje sie za kilka sekund"
+#define D_BUTTON_TOGGLE "Załącz/Wyłącz"
+#define D_CONFIGURATION "Konfiguracja"
+#define D_INFORMATION "Informacje"
+#define D_FIRMWARE_UPGRADE "Aktualizacja oprogramowania"
+#define D_CONSOLE "Konsola"
+#define D_CONFIRM_RESTART "Potwierdź restart"
+
+#define D_CONFIGURE_MODULE "Konfiguracja modułu"
+#define D_CONFIGURE_WIFI "Konfiguracja WiFi"
+#define D_CONFIGURE_MQTT "Konfiguracja MQTT"
+#define D_CONFIGURE_DOMOTICZ "Konfiguracja Domoticza"
+#define D_CONFIGURE_LOGGING "Konfiguracja dziennika"
+#define D_CONFIGURE_OTHER "Inne konfiguracje"
+#define D_CONFIRM_RESET_CONFIGURATION "Potwierdź reset ustawień"
+#define D_RESET_CONFIGURATION "Reset ustawień"
+#define D_BACKUP_CONFIGURATION "Kopia ustawień"
+#define D_RESTORE_CONFIGURATION "Przywracanie ustawień"
+#define D_MAIN_MENU "Menu główne"
+
+#define D_MODULE_PARAMETERS "Parametry modułu"
+#define D_MODULE_TYPE "Typ"
+#define D_PULLUP_ENABLE "Przełącznik pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Wejście rs"
+#define D_SERIAL_OUT "Wyjście rs"
+
+#define D_WIFI_PARAMETERS "Parametry sieci WiFi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Skanuj sieci"
+#define D_SCAN_DONE "Skanowanie wykonane"
+#define D_NO_NETWORKS_FOUND "Nie znaleziono sieci"
+#define D_REFRESH_TO_SCAN_AGAIN "Odśwież aby ponownie wyszukać sieci"
+#define D_DUPLICATE_ACCESSPOINT "Duplikuj"
+#define D_SKIPPING_LOW_QUALITY "Pominięto z powodu niskiej jakości sygnału"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "Nazwa 1"
+#define D_AP1_PASSWORD "Hasło 1"
+#define D_AP2_SSID "Nazwa 2"
+#define D_AP2_PASSWORD "Hasło 2"
+
+#define D_MQTT_PARAMETERS "Parametry MQTT"
+#define D_CLIENT "Klient"
+#define D_FULL_TOPIC "Pełny temat"
+
+#define D_LOGGING_PARAMETERS "Opcje dziennika"
+#define D_SERIAL_LOG_LEVEL "Serial - poziom"
+#define D_MQTT_LOG_LEVEL "Mqtt - poziom"
+#define D_WEB_LOG_LEVEL "Web - poziom"
+#define D_SYS_LOG_LEVEL "System - poziom"
+#define D_MORE_DEBUG "Więcej informacji dziennika"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Okres telemetrii"
+
+#define D_OTHER_PARAMETERS "Inne parametry"
+#define D_TEMPLATE "Szablon"
+#define D_ACTIVATE "Aktywuj"
+#define D_WEB_ADMIN_PASSWORD "Hasło administratora"
+#define D_MQTT_ENABLE "Załącz MQTT"
+#define D_FRIENDLY_NAME "Nazwa"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Mostek Hue"
+#define D_SINGLE_DEVICE "pojedyńcze urządzenie"
+#define D_MULTI_DEVICE "multi urządzenie"
+
+#define D_CONFIGURE_TEMPLATE "Konfiguracja szablonu"
+#define D_TEMPLATE_PARAMETERS "Parametry szablonu"
+#define D_TEMPLATE_NAME "Nazwa"
+#define D_BASE_TYPE "Na bazie"
+#define D_TEMPLATE_FLAGS "Opcje"
+
+#define D_SAVE_CONFIGURATION "Zapisz ustawienia"
+#define D_CONFIGURATION_SAVED "Ustawienia zapisane"
+#define D_CONFIGURATION_RESET "Ustawienia zresetowane"
+
+#define D_PROGRAM_VERSION "Wersja oprogramowania"
+#define D_BUILD_DATE_AND_TIME "Data kompilacji"
+#define D_CORE_AND_SDK_VERSION "Wersja Core/SDK"
+#define D_FLASH_WRITE_COUNT "Liczba zapisów do pamięci"
+#define D_MAC_ADDRESS "Adres MAC"
+#define D_MQTT_HOST "Host"
+#define D_MQTT_PORT "Port"
+#define D_MQTT_CLIENT "Klient"
+#define D_MQTT_USER "Użytkownik"
+#define D_MQTT_TOPIC "Temat"
+#define D_MQTT_GROUP_TOPIC "Temat grupy"
+#define D_MQTT_FULL_TOPIC "Pełny temat"
+#define D_MDNS_DISCOVERY "Wykrywanie mDNS"
+#define D_MDNS_ADVERTISE "Rozgłaszanie mDNS"
+#define D_ESP_CHIP_ID "ID ukladu ESP"
+#define D_FLASH_CHIP_ID "ID pamięci flash"
+#define D_FLASH_CHIP_SIZE "Rozmiar pamięci flash"
+#define D_FREE_PROGRAM_SPACE "Wolna pamięć programu"
+
+#define D_UPGRADE_BY_WEBSERVER "Aktualizacja z serwera Web"
+#define D_OTA_URL "Adres serwera"
+#define D_START_UPGRADE "Aktualizuj"
+#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizacja z pliku"
+#define D_UPLOAD_STARTED "Wgrywanie rozpoczęte"
+#define D_UPGRADE_STARTED "Aktualizacja rozpoczęta"
+#define D_UPLOAD_DONE "Wgrywanie zakończone"
+#define D_UPLOAD_ERR_1 "Nie wybrano pliku"
+#define D_UPLOAD_ERR_2 "Niewystarczająca ilość miejsca"
+#define D_UPLOAD_ERR_3 "Magiczny bajt jest inny niz 0xE9"
+#define D_UPLOAD_ERR_4 "Rozmiar programu jest większy niż rzeczywisty rozmiar pamięci flash"
+#define D_UPLOAD_ERR_5 "Wgrywanie, bufor niezgodności stanu porównywanych bitow"
+#define D_UPLOAD_ERR_6 "Błąd wgrywania. Uruchomiono zapis do dziennika na poziomie 3"
+#define D_UPLOAD_ERR_7 "Wgrywanie przerwane"
+#define D_UPLOAD_ERR_8 "Błędny plik"
+#define D_UPLOAD_ERR_9 "Plik jest za duży"
+#define D_UPLOAD_ERR_10 "Błąd inicjacji układu RF"
+#define D_UPLOAD_ERR_11 "Błąd kasowania układu RF"
+#define D_UPLOAD_ERR_12 "Błąd zapisu układu RF"
+#define D_UPLOAD_ERR_13 "Błąd dekodowania oprrogramowania układu RF"
+#define D_UPLOAD_ERROR_CODE "Błąd wgrywania"
+
+#define D_ENTER_COMMAND "Wprowadź polecenie"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Włącz poziom 2 zapisu dziennika, jeśli oczekiwana jest odpowiedź"
+#define D_NEED_USER_AND_PASSWORD "Wymagany użytkownik=&hasło="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Weryfikuj odcisk TLS..."
+#define D_TLS_CONNECT_FAILED_TO "Nieudane połączenie TLS do"
+#define D_RETRY_IN "Spróbuj ponownie"
+#define D_VERIFIED "Zweryfikowano odcisk"
+#define D_INSECURE "Nieprawidłowe połączenie z powodu błędnego odcisku TLS"
+#define D_CONNECT_FAILED_TO "Nie udało się nawiązać połączenia"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast wyłączony"
+#define D_MULTICAST_REJOINED "Multicast dołączony"
+#define D_MULTICAST_JOIN_FAILED "Podłączenie Multicast nie powiodło się"
+#define D_FAILED_TO_SEND_RESPONSE "Nie udało się wysłać odpowiedzi"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "Zdarzenie podstawowe"
+#define D_WEMO_EVENT_SERVICE "Zdarzenie serwisowe"
+#define D_WEMO_META_SERVICE "Meta dane serwisowe"
+#define D_WEMO_SETUP "Ustawienia WeMo"
+#define D_RESPONSE_SENT "Wyślij odpowiedź"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Ustawienia Hue"
+#define D_HUE_API_NOT_IMPLEMENTED "Api nie zaimplementowane"
+#define D_HUE_API "API"
+#define D_HUE_POST_ARGS "POST argument"
+#define D_3_RESPONSE_PACKETS_SENT "3 pakiety odpowiedzi wysyłane"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Parametry Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Klucz Idx"
+#define D_DOMOTICZ_SWITCH_IDX "Przełącznik Idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor Idx"
+ #define D_DOMOTICZ_TEMP "Temperatura"
+ #define D_DOMOTICZ_TEMP_HUM "Temperatura, Wilgotność"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temperatura, Wilgotność, Ciśnienie"
+ #define D_DOMOTICZ_POWER_ENERGY "Moc, Energia"
+ #define D_DOMOTICZ_ILLUMINANCE "Oświetlenie"
+ #define D_DOMOTICZ_COUNT "Licznik"
+ #define D_DOMOTICZ_VOLTAGE "Napięcie"
+ #define D_DOMOTICZ_CURRENT "Prąd"
+ #define D_DOMOTICZ_AIRQUALITY "Jakość powietrza"
+ #define D_DOMOTICZ_P1_SMART_METER "Miernik P1"
+#define D_DOMOTICZ_UPDATE_TIMER "Aktualizacja zegara"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Konfiguracja harmonogramu"
+#define D_TIMER_PARAMETERS "Parametry harmonogramu"
+#define D_TIMER_ENABLE "Załącz harmonogram"
+#define D_TIMER_ARM "Załącz"
+#define D_TIMER_TIME "Czas"
+#define D_TIMER_DAYS "Dni"
+#define D_TIMER_REPEAT "Powtarzaj"
+#define D_TIMER_OUTPUT "Wyjście"
+#define D_TIMER_ACTION "Akcja"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Konfiguracja KNX"
+#define D_KNX_PARAMETERS "Parametry KNX"
+#define D_KNX_GENERAL_CONFIG "Konfiguracja ogólna"
+#define D_KNX_PHYSICAL_ADDRESS "Adres fizyczny"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Musi być unikalny w sieci KNX)"
+#define D_KNX_ENABLE "Załącz"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Adresy grupowe do zapisu"
+#define D_ADD "Dodaj"
+#define D_DELETE "Usuń"
+#define D_REPLY "Odpowiedz"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Adresy grupowe do odbioru"
+#define D_RECEIVED_FROM "Odebrane od"
+#define D_KNX_COMMAND_WRITE "Zapisz"
+#define D_KNX_COMMAND_READ "Czytaj"
+#define D_KNX_COMMAND_OTHER "Inna komenda"
+#define D_SENT_TO "Wyślij do"
+#define D_KNX_WARNING "Adres grupy (0/0/0) jest zarezerwowany i nie można go użyć."
+#define D_KNX_ENHANCEMENT "Rozszerzenia"
+#define D_KNX_TX_SLOT "Gniazdo TX"
+#define D_KNX_RX_SLOT "Gniazdo RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energia dzisiaj"
+#define D_ENERGY_YESTERDAY "Energia wczoraj"
+#define D_ENERGY_TOTAL "Energia całkowita"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Otwórz"
+#define D_CLOSE "Zamknij"
+#define D_DOMOTICZ_SHUTTER "Roleta"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Konfiguracja PCF8574"
+#define D_PCF8574_PARAMETERS "Parametry PCF8574"
+#define D_INVERT_PORTS "Porty odwrócone"
+#define D_DEVICE "Urządzenie"
+#define D_DEVICE_INPUT "Wejście"
+#define D_DEVICE_OUTPUT "Wyjście"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Czujnik zajęty"
+#define D_SENSOR_CRC_ERROR "Błąd CRC czujnika"
+#define D_SENSORS_FOUND "Znaleziono czujnik"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Trwa oczekiwanie"
+#define D_START_SIGNAL_LOW "Sygnał startowy niski"
+#define D_START_SIGNAL_HIGH "Sygnał startowy wysoki"
+#define D_PULSE "Impuls"
+#define D_CHECKSUM_FAILURE "Błędna suma kontrolna"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Czujnik nie otrzymał komendy ACK"
+#define D_SHT1X_FOUND "SHT1X znaleziony"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Cząstki"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Usuń wagę"
+#define D_HX_CAL_REFERENCE "Załaduj wagę referencyjną"
+#define D_HX_CAL_DONE "Skalibrowany"
+#define D_HX_CAL_FAIL "Błąd kalibracji"
+#define D_RESET_HX711 "Zresetuj skalę"
+#define D_CONFIGURE_HX711 "Skonfiguruj skalę"
+#define D_HX711_PARAMETERS "Parametry skali"
+#define D_ITEM_WEIGHT "Waga przedmiotu"
+#define D_REFERENCE_WEIGHT "Waga referencyjna"
+#define D_CALIBRATE "Skalibruj"
+#define D_CALIBRATION "Kalibrowanie"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Kierunek"
+#define D_TX20_WIND_SPEED "Prędkość"
+#define D_TX20_WIND_SPEED_AVG "Średnia prędkość"
+#define D_TX20_WIND_SPEED_MAX "Maksymalna prędkość"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "Odtearzacz MP3"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Przełącznik" // Suffix "1"
+#define D_SENSOR_BUTTON "Przycisk" // Suffix "1"
+#define D_SENSOR_RELAY "Przekaźnik" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "Led link" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Licznik" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Podświetlanie"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "Głęboko uśpiony"
+#define D_SENSOR_EXS_ENABLE "Załącz EXS"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Godz"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sektory"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Przesunięcie faz"
+#define D_IMPORT_ACTIVE "Czynna pobrana"
+#define D_EXPORT_ACTIVE "Czynna oddana"
+#define D_IMPORT_REACTIVE "Bierna pobrana"
+#define D_EXPORT_REACTIVE "Bierna oddana"
+#define D_TOTAL_REACTIVE "Bierna całkowita"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "Napięcie PV1"
+#define D_PV1_CURRENT "Prąd PV1"
+#define D_PV1_POWER "Moc PV1 "
+#define D_PV2_VOLTAGE "Napięcie PV2"
+#define D_PV2_CURRENT "Prąd PV2"
+#define D_PV2_POWER "Moc PV2"
+#define D_SOLAR_POWER "Moc PV"
+#define D_INVERTER_POWER "Moc invertera"
+#define D_STATUS "Status"
+#define D_WAITING "Oczekiwanie"
+#define D_CHECKING "Sprawdzanie"
+#define D_WORKING "Praca"
+#define D_FAILURE "Błąd"
+#define D_SOLAX_ERROR_0 "Błąd - brak kodu"
+#define D_SOLAX_ERROR_1 "Błąd - utrata sieci"
+#define D_SOLAX_ERROR_2 "Błąd - napięcie sieci"
+#define D_SOLAX_ERROR_3 "Błąd - częstotliwość sieci"
+#define D_SOLAX_ERROR_4 "Błąd - napięcie PV"
+#define D_SOLAX_ERROR_5 "Błąd - usterka izolacji"
+#define D_SOLAX_ERROR_6 "Błąd - przegrzanie"
+#define D_SOLAX_ERROR_7 "Błąd - wentylator"
+#define D_SOLAX_ERROR_8 "Błąd - inne urządzenie"
+
+#endif // _LANGUAGE_PL_PL_D_H_
diff --git a/tasmota/language/pt-BR.h b/tasmota/language/pt-BR.h
index 0efa57789..43dc9581b 100644
--- a/tasmota/language/pt-BR.h
+++ b/tasmota/language/pt-BR.h
@@ -1,701 +1,703 @@
-/*
- pt-BR.h - localization for Portuguese - Brazil for Tasmota
-
- Copyright (C) 2019 Fabiano Bovo
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_PT_BR_H_
-#define _LANGUAGE_PT_BR_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v7.0.0.1
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1046
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "pt"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "DomSegTerQuaQuiSexSab"
-#define D_MONTH3LIST "JanFevMarAbrMaiJunJulAgoSepOutNovDez"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Qualidade do ar"
-#define D_AP "Ponto de acesso" // Ponto de Acesso
-#define D_AS "como"
-#define D_AUTO "Auto"
-#define D_BLINK "Pulsar"
-#define D_BLINKOFF "Pulsar desligado"
-#define D_BOOT_COUNT "Contagem de inicialização"
-#define D_BRIGHTLIGHT "Brilho"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Botão"
-#define D_BY "por" // Write by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Canal"
-#define D_CO2 "CO2"
-#define D_CODE "Código" // Button code
-#define D_COLDLIGHT "Luz fria"
-#define D_COMMAND "Comando"
-#define D_CONNECTED "Ligado"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Contagem"
-#define D_COUNTER "Contador"
-#define D_CURRENT "Corrente" // As in Voltage and Current
-#define D_DATA "Dados"
-#define D_DARKLIGHT "Luz escura"
-#define D_DEBUG "Depurar"
-#define D_DISABLED "Desabilitado"
-#define D_DISTANCE "Distância"
-#define D_DNS_SERVER "Servidor DNS"
-#define D_DONE "Concluído"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulação"
-#define D_ENABLED "Habilitado"
-#define D_ERASE "Apagar"
-#define D_ERROR "Erro"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Falha"
-#define D_FALLBACK "Retornar"
-#define D_FALLBACK_TOPIC "Tópico para retornar"
-#define D_FALSE "Falso"
-#define D_FILE "Arquivo"
-#define D_FLOW_RATE "Quociente de vazão"
-#define D_FREE_MEMORY "Memória livre"
-#define D_FREQUENCY "Frequência"
-#define D_GAS "Gás"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Grupo"
-#define D_HOST "Host"
-#define D_HOSTNAME "Nome do Host"
-#define D_HUMIDITY "Umidade"
-#define D_ILLUMINANCE "Luminância"
-#define D_IMMEDIATE "Imediato" // Button immediate
-#define D_INDEX "Índice"
-#define D_INFO "Informação"
-#define D_INFRARED "Infravermelho"
-#define D_INITIALIZED "Inicializado"
-#define D_IP_ADDRESS "Endereço IP"
-#define D_LIGHT "Luz"
-#define D_LWT "LWT"
-#define D_MODULE "Módulo"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-pressão"
-#define D_NOISE "Ruído"
-#define D_NONE "Nenhum"
-#define D_OFF "Desligado"
-#define D_OFFLINE "Desconectado"
-#define D_OK "Ok"
-#define D_ON "Ligado"
-#define D_ONLINE "Conectado"
-#define D_PASSWORD "Senha"
-#define D_PORT "Porta"
-#define D_POWER_FACTOR "Fator de potência"
-#define D_POWERUSAGE "Potência"
-#define D_POWERUSAGE_ACTIVE "Potência ativa"
-#define D_POWERUSAGE_APPARENT "Potência aparente"
-#define D_POWERUSAGE_REACTIVE "Potência reativa"
-#define D_PRESSURE "Pressão"
-#define D_PRESSUREATSEALEVEL "Pressão ao nível do mar"
-#define D_PROGRAM_FLASH_SIZE "Tamanho do programa na memória"
-#define D_PROGRAM_SIZE "Tamanho do programa"
-#define D_PROJECT "Projeto"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Recebido"
-#define D_RESTART "Reiniciar"
-#define D_RESTARTING "Reiniciando"
-#define D_RESTART_REASON "Motivo do reinício"
-#define D_RESTORE "Restauração"
-#define D_RETAINED "Manter"
-#define D_RULE "Regra"
-#define D_SAVE "Salvar"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Iniciar"
-#define D_STD_TIME "STD"
-#define D_STOP "Parar"
-#define D_SUBNET_MASK "Máscara sub rede"
-#define D_SUBSCRIBE_TO "Subescrever para"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Successo"
-#define D_SUNRISE "Nascer do sol"
-#define D_SUNSET "Por do sol"
-#define D_TEMPERATURE "Temperatura"
-#define D_TO "Para"
-#define D_TOGGLE "Inverter"
-#define D_TOPIC "Tópico"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Transmitir"
-#define D_TRUE "Verdadeiro"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "atualização"
-#define D_UPLOAD "Enviar"
-#define D_UPTIME "Tempo de atividade"
-#define D_USER "Usuário"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Índice UV"
-#define D_UV_INDEX_1 "Baixo"
-#define D_UV_INDEX_2 "Médio"
-#define D_UV_INDEX_3 "Alto"
-#define D_UV_INDEX_4 "Perigro"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "Nível UV"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Versão"
-#define D_VOLTAGE "Voltagem"
-#define D_WEIGHT "Peso"
-#define D_WARMLIGHT "Luz quente"
-#define D_WEB_SERVER "Servidor WEB"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "AVISO: esta versão não supporta configurações persistentes"
-#define D_LEVEL_10 "nível 1-0"
-#define D_LEVEL_01 "nível 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Registro Serial desabilitado"
-#define D_SYSLOG_LOGGING_REENABLED "Registro do Syslog reativado"
-
-#define D_SET_BAUDRATE_TO "Ajuste da velocidade para"
-#define D_RECEIVED_TOPIC "Tópico recebido"
-#define D_DATA_SIZE "Tamanho de dados"
-#define D_ANALOG_INPUT "Entrada analógica"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Loop bloqueado"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig falha de estado"
-#define D_ACTIVE_FOR_3_MINUTES "Ativo por 3 minutos"
-#define D_FAILED_TO_START "Falha ao iníciar"
-#define D_PATCH_ISSUE_2186 "Questão 2186"
-#define D_CONNECTING_TO_AP "Ligando ao PA"
-#define D_IN_MODE "em modo"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "A ligação falhou porque nenhum endereço IP foi recebido"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "A ligação falhou porque o PA não pôde ser alcançado"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou porque a senha está incorreta"
-#define D_CONNECT_FAILED_AP_TIMEOUT "A ligação falhou porque o tempo foi excedido"
-#define D_ATTEMPTING_CONNECTION "Ligando..."
-#define D_CHECKING_CONNECTION "Verificando ligação..."
-#define D_QUERY_DONE "Consulta finalizada. Serviço MQTT não encontrado"
-#define D_MQTT_SERVICE_FOUND "Serviço MQTT encontrado em"
-#define D_FOUND_AT "encontrado em"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog anfitrião não encontrado"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Guardado na flash em"
-#define D_LOADED_FROM_FLASH_AT "Lido da flash em"
-#define D_USE_DEFAULTS "Usar predefinições"
-#define D_ERASED_SECTOR "Apagar setores"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware mínimo
Atualizar por favor"
-#define D_WEBSERVER_ACTIVE_ON "Servidor WEB ativo em"
-#define D_WITH_IP_ADDRESS "com o endereço IP"
-#define D_WEBSERVER_STOPPED "Servidor WEB parou"
-#define D_FILE_NOT_FOUND "Arquivo não encontrado"
-#define D_REDIRECTED "Redirecionado para o portal ativo"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager: configura o Ponto de Acesso e a Estação"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager: configura o Ponto de Acesso"
-#define D_TRYING_TO_CONNECT "Conectar o dispositivo à rede"
-
-#define D_RESTART_IN "Reinicia em"
-#define D_SECONDS "segundos"
-#define D_DEVICE_WILL_RESTART "O dispositivo irá reiniciar dentro de alguns segundos"
-#define D_BUTTON_TOGGLE "Comandar"
-#define D_CONFIGURATION "Configuração"
-#define D_INFORMATION "Informação"
-#define D_FIRMWARE_UPGRADE "Atualização de Firmware"
-#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Confirmar o reinicio"
-
-#define D_CONFIGURE_MODULE "Configurar Módulo"
-#define D_CONFIGURE_WIFI "Configurar WiFi"
-#define D_CONFIGURE_MQTT "Configurar MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configurar Domoticz"
-#define D_CONFIGURE_LOGGING "Configurar Logging"
-#define D_CONFIGURE_OTHER "Configurar outras opções"
-#define D_CONFIRM_RESET_CONFIGURATION "Confirmar limpeza de configuração"
-#define D_RESET_CONFIGURATION "Apagar configuração"
-#define D_BACKUP_CONFIGURATION "Salvar configuração"
-#define D_RESTORE_CONFIGURATION "Repor configuração"
-#define D_MAIN_MENU "Menu principal"
-
-#define D_MODULE_PARAMETERS "Parâmetros do módulo"
-#define D_MODULE_TYPE "Tipo de módulo"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Entrada serial"
-#define D_SERIAL_OUT "Saída serial"
-
-#define D_WIFI_PARAMETERS "Parâmetros do wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Encontrar redes wifi"
-#define D_SCAN_DONE "Busca finalizada"
-#define D_NO_NETWORKS_FOUND "Sem redes"
-#define D_REFRESH_TO_SCAN_AGAIN "Nova busca"
-#define D_DUPLICATE_ACCESSPOINT "Ponto de Acesso duplicado"
-#define D_SKIPPING_LOW_QUALITY "Ignorado devido à baixa qualidade do sinal"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "Senha AP1"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "Senha AP2"
-
-#define D_MQTT_PARAMETERS "Parâmetros MQTT"
-#define D_CLIENT "Cliente"
-#define D_FULL_TOPIC "Tópico completo"
-
-#define D_LOGGING_PARAMETERS "Parâmetros Logging"
-#define D_SERIAL_LOG_LEVEL "Nível de registro serial"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Nível de registro WEB"
-#define D_SYS_LOG_LEVEL "Nível de registro Syslog"
-#define D_MORE_DEBUG "Depurar mais"
-#define D_SYSLOG_HOST "Syslog anfitrião"
-#define D_SYSLOG_PORT "Porta Syslog"
-#define D_TELEMETRY_PERIOD "Período de telemetria"
-
-#define D_OTHER_PARAMETERS "Outros parâmetros"
-#define D_TEMPLATE "Modelo"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Senha de WEB Admin"
-#define D_MQTT_ENABLE "MQTT habilitado"
-#define D_FRIENDLY_NAME "Nome amigável"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "Dispositivo único"
-#define D_MULTI_DEVICE "Múltiplos dispositivos"
-
-#define D_CONFIGURE_TEMPLATE "Configurar Modelo"
-#define D_TEMPLATE_PARAMETERS "Parâmetros Modelo"
-#define D_TEMPLATE_NAME "Nome"
-#define D_BASE_TYPE "Baseado em"
-#define D_TEMPLATE_FLAGS "Opções"
-
-#define D_SAVE_CONFIGURATION "Gravar configuração"
-#define D_CONFIGURATION_SAVED "Configuração gravada"
-#define D_CONFIGURATION_RESET "Reinicialização da configuração"
-
-#define D_PROGRAM_VERSION "Versão do programa"
-#define D_BUILD_DATE_AND_TIME "Data e Hora da compilação"
-#define D_CORE_AND_SDK_VERSION "Versão Core/SDK"
-#define D_FLASH_WRITE_COUNT "Contagem de gravação flash"
-#define D_MAC_ADDRESS "Endereço MAC"
-#define D_MQTT_HOST "MQTT Servidor"
-#define D_MQTT_PORT "MQTT Porta"
-#define D_MQTT_CLIENT "MQTT Cliente"
-#define D_MQTT_USER "MQTT Usuário"
-#define D_MQTT_TOPIC "MQTT Tópico"
-#define D_MQTT_GROUP_TOPIC "MQTT Tópico Grupo"
-#define D_MQTT_FULL_TOPIC "MQTT Tópico Completo"
-#define D_MDNS_DISCOVERY "Descobrir mDNS"
-#define D_MDNS_ADVERTISE "Anunciar mDNS"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Flash Size"
-#define D_FREE_PROGRAM_SPACE "Espaço Livre Programa"
-
-#define D_UPGRADE_BY_WEBSERVER "Atualizar pelo servidor WEB"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Iniciar atualização"
-#define D_UPGRADE_BY_FILE_UPLOAD "Atualização por arquivo local"
-#define D_UPLOAD_STARTED "Início do envio"
-#define D_UPGRADE_STARTED "Atualização iniciada"
-#define D_UPLOAD_DONE "Atualização finalizada"
-#define D_UPLOAD_ERR_1 "Nenhum arquivo selecionado"
-#define D_UPLOAD_ERR_2 "Não existe memória disponível"
-#define D_UPLOAD_ERR_3 "Byte mágico não é 0xE9"
-#define D_UPLOAD_ERR_4 "O tamanho do programa é maior do que o tamanho da memória"
-#define D_UPLOAD_ERR_5 "Envio buffer miscompare"
-#define D_UPLOAD_ERR_6 "Falha no envio. Habilitar logging 3"
-#define D_UPLOAD_ERR_7 "Envio cancelado"
-#define D_UPLOAD_ERR_8 "Arquivo inválido"
-#define D_UPLOAD_ERR_9 "Arquivo muito grande"
-#define D_UPLOAD_ERR_10 "Falha ao iniciar chip RF"
-#define D_UPLOAD_ERR_11 "Falha ao apagar o chip RF"
-#define D_UPLOAD_ERR_12 "Falha ao escrever o chip RF"
-#define D_UPLOAD_ERR_13 "Falha ao decodificar o firmware de RF"
-#define D_UPLOAD_ERROR_CODE "Código de erro do envio"
-
-#define D_ENTER_COMMAND "Inserir comando"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 se resposta esperada"
-#define D_NEED_USER_AND_PASSWORD "Necessário user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifique a impressão digital TLS..."
-#define D_TLS_CONNECT_FAILED_TO "TLS não conseguiu ligar"
-#define D_RETRY_IN "Tentativa em"
-#define D_VERIFIED "Verificado impressão digital "
-#define D_INSECURE "Ligação insegura devido à impressão digital inválida"
-#define D_CONNECT_FAILED_TO "A ligação falhou ao"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast desabilitado"
-#define D_MULTICAST_REJOINED "Multicast (re)ingressou"
-#define D_MULTICAST_JOIN_FAILED "Multicast falha no reingresso"
-#define D_FAILED_TO_SEND_RESPONSE "Falha no envio de reposta"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo evento básico"
-#define D_WEMO_EVENT_SERVICE "WeMo evento de serviço"
-#define D_WEMO_META_SERVICE "WeMo serviço meta"
-#define D_WEMO_SETUP "WeMo configuração"
-#define D_RESPONSE_SENT "Resposta enviada"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue setup"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API nao implementada"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 pacotes de resposta enviados"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Parâmetros Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Chave idx"
-#define D_DOMOTICZ_SWITCH_IDX "Interruptor idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Umi"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Umi,Pres"
- #define D_DOMOTICZ_POWER_ENERGY "Potência,Energia"
- #define D_DOMOTICZ_ILLUMINANCE "Luminância"
- #define D_DOMOTICZ_COUNT "Contagem/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltagem/PM2.5"
- #define D_DOMOTICZ_CURRENT "Corrente/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Qualidade do ar"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Tempo de atualização"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configurar temporizador"
-#define D_TIMER_PARAMETERS "Parâmetros"
-#define D_TIMER_ENABLE "Habilitar temporizadores"
-#define D_TIMER_ARM "Habilitar"
-#define D_TIMER_TIME "Horário"
-#define D_TIMER_DAYS "Dias"
-#define D_TIMER_REPEAT "Repetir"
-#define D_TIMER_OUTPUT "Saída"
-#define D_TIMER_ACTION "Ação"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configurar KNX"
-#define D_KNX_PARAMETERS "Parâmetros KNX"
-#define D_KNX_GENERAL_CONFIG "Geral"
-#define D_KNX_PHYSICAL_ADDRESS "Endereço físico"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Deve ser único na rede KNX)"
-#define D_KNX_ENABLE "Habilitar KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Endereço do grupo para enviar"
-#define D_ADD "Adicionar"
-#define D_DELETE "Remover"
-#define D_REPLY "Responder"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Endereço do grupo para receber"
-#define D_RECEIVED_FROM "Recebido de"
-#define D_KNX_COMMAND_WRITE "Escrever"
-#define D_KNX_COMMAND_READ "Ler"
-#define D_KNX_COMMAND_OTHER "Outros"
-#define D_SENT_TO "Enviar para"
-#define D_KNX_WARNING "O endereço ( 0 / 0 / 0 ) é reservado e não pode ser usado."
-#define D_KNX_ENHANCEMENT "Melhoria da comunicação"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Consumo energético de hoje"
-#define D_ENERGY_YESTERDAY "Consumo energético de ontem"
-#define D_ENERGY_TOTAL "Consumo total de energia"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Aberta"
-#define D_CLOSE "Fechada"
-#define D_DOMOTICZ_SHUTTER "Persiana"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configura PCF8574"
-#define D_PCF8574_PARAMETERS "Parâmetros PCF8574"
-#define D_INVERT_PORTS "Portas Invertidas"
-#define D_DEVICE "Dispositivo"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor ocupado"
-#define D_SENSOR_CRC_ERROR "Erro sensor CRC"
-#define D_SENSORS_FOUND "Sensores encontrados"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Fim do tempo de espera"
-#define D_START_SIGNAL_LOW "Sinal de início baixo"
-#define D_START_SIGNAL_HIGH "Sinal de início elevado"
-#define D_PULSE "pulso"
-#define D_CHECKSUM_FAILURE "Falha checksum"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor não aceitou o comando ACK"
-#define D_SHT1X_FOUND "SHT1X encontrado"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Partículas"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remover peso"
-#define D_HX_CAL_REFERENCE "Peso de referência de carga"
-#define D_HX_CAL_DONE "Calibrado"
-#define D_HX_CAL_FAIL "Falha na calibração"
-#define D_RESET_HX711 "Redefinir escala"
-#define D_CONFIGURE_HX711 "Configurar escala"
-#define D_HX711_PARAMETERS "Parâmetros de escala"
-#define D_ITEM_WEIGHT "Peso do Item"
-#define D_REFERENCE_WEIGHT "Peso de referência"
-#define D_CALIBRATE "Calibrar"
-#define D_CALIBRATION "Calibração"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Direção do vento"
-#define D_TX20_WIND_SPEED "Velocidade do vento"
-#define D_TX20_WIND_SPEED_AVG "Velocidade média do vento"
-#define D_TX20_WIND_SPEED_MAX "Velocidade do vento Máxima"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "L"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "O"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Interruptor" // Suffix "1"
-#define D_SENSOR_BUTTON "Botão" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Contador" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Luz de fundo"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "H"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "M"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "s"
-#define D_UNIT_SECTORS "setores"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "W/h"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Ângulo de Fase"
-#define D_IMPORT_ACTIVE "Importar Ativo"
-#define D_EXPORT_ACTIVE "Exportar Ativo"
-#define D_IMPORT_REACTIVE "Importar Reativo"
-#define D_EXPORT_REACTIVE "Exportar Reativo"
-#define D_TOTAL_REACTIVE "Reativo total"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltagem"
-#define D_PV1_CURRENT "PV1 Corrente"
-#define D_PV1_POWER "PV1 Energia"
-#define D_PV2_VOLTAGE "PV2 Voltagem"
-#define D_PV2_CURRENT "PV2 Corrente"
-#define D_PV2_POWER "PV2 Energia"
-#define D_SOLAR_POWER "Energia Solar"
-#define D_INVERTER_POWER "Potência do Inversor"
-#define D_STATUS "Status"
-#define D_WAITING "Esperando"
-#define D_CHECKING "Verificando"
-#define D_WORKING "Trabalhando"
-#define D_FAILURE "Falha"
-#define D_SOLAX_ERROR_0 "Nenhum código de erro"
-#define D_SOLAX_ERROR_1 "Erro Grid Perdida"
-#define D_SOLAX_ERROR_2 "Falha na Tensão da rede"
-#define D_SOLAX_ERROR_3 "Falha na Frequência do Grid"
-#define D_SOLAX_ERROR_4 "Pv Falha de Tensão"
-#define D_SOLAX_ERROR_5 "Falha de Isolamento"
-#define D_SOLAX_ERROR_6 "Falha de Temperatura excessiva"
-#define D_SOLAX_ERROR_7 "Falha no Ventilador"
-#define D_SOLAX_ERROR_8 "Outra falha do dispositivo"
-
-#endif // _LANGUAGE_PT_BR_H_
+/*
+ pt-BR.h - localization for Portuguese - Brazil for Tasmota
+
+ Copyright (C) 2019 Fabiano Bovo
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_PT_BR_H_
+#define _LANGUAGE_PT_BR_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v7.0.0.1
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1046
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "pt"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "DomSegTerQuaQuiSexSab"
+#define D_MONTH3LIST "JanFevMarAbrMaiJunJulAgoSepOutNovDez"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Qualidade do ar"
+#define D_AP "Ponto de acesso" // Ponto de Acesso
+#define D_AS "como"
+#define D_AUTO "Auto"
+#define D_BLINK "Pulsar"
+#define D_BLINKOFF "Pulsar desligado"
+#define D_BOOT_COUNT "Contagem de inicialização"
+#define D_BRIGHTLIGHT "Brilho"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Botão"
+#define D_BY "por" // Write by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Canal"
+#define D_CO2 "CO2"
+#define D_CODE "Código" // Button code
+#define D_COLDLIGHT "Luz fria"
+#define D_COMMAND "Comando"
+#define D_CONNECTED "Ligado"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Contagem"
+#define D_COUNTER "Contador"
+#define D_CURRENT "Corrente" // As in Voltage and Current
+#define D_DATA "Dados"
+#define D_DARKLIGHT "Luz escura"
+#define D_DEBUG "Depurar"
+#define D_DISABLED "Desabilitado"
+#define D_DISTANCE "Distância"
+#define D_DNS_SERVER "Servidor DNS"
+#define D_DONE "Concluído"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulação"
+#define D_ENABLED "Habilitado"
+#define D_ERASE "Apagar"
+#define D_ERROR "Erro"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Falha"
+#define D_FALLBACK "Retornar"
+#define D_FALLBACK_TOPIC "Tópico para retornar"
+#define D_FALSE "Falso"
+#define D_FILE "Arquivo"
+#define D_FLOW_RATE "Quociente de vazão"
+#define D_FREE_MEMORY "Memória livre"
+#define D_FREQUENCY "Frequência"
+#define D_GAS "Gás"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Grupo"
+#define D_HOST "Host"
+#define D_HOSTNAME "Nome do Host"
+#define D_HUMIDITY "Umidade"
+#define D_ILLUMINANCE "Luminância"
+#define D_IMMEDIATE "Imediato" // Button immediate
+#define D_INDEX "Índice"
+#define D_INFO "Informação"
+#define D_INFRARED "Infravermelho"
+#define D_INITIALIZED "Inicializado"
+#define D_IP_ADDRESS "Endereço IP"
+#define D_LIGHT "Luz"
+#define D_LWT "LWT"
+#define D_MODULE "Módulo"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-pressão"
+#define D_NOISE "Ruído"
+#define D_NONE "Nenhum"
+#define D_OFF "Desligado"
+#define D_OFFLINE "Desconectado"
+#define D_OK "Ok"
+#define D_ON "Ligado"
+#define D_ONLINE "Conectado"
+#define D_PASSWORD "Senha"
+#define D_PORT "Porta"
+#define D_POWER_FACTOR "Fator de potência"
+#define D_POWERUSAGE "Potência"
+#define D_POWERUSAGE_ACTIVE "Potência ativa"
+#define D_POWERUSAGE_APPARENT "Potência aparente"
+#define D_POWERUSAGE_REACTIVE "Potência reativa"
+#define D_PRESSURE "Pressão"
+#define D_PRESSUREATSEALEVEL "Pressão ao nível do mar"
+#define D_PROGRAM_FLASH_SIZE "Tamanho do programa na memória"
+#define D_PROGRAM_SIZE "Tamanho do programa"
+#define D_PROJECT "Projeto"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Recebido"
+#define D_RESTART "Reiniciar"
+#define D_RESTARTING "Reiniciando"
+#define D_RESTART_REASON "Motivo do reinício"
+#define D_RESTORE "Restauração"
+#define D_RETAINED "Manter"
+#define D_RULE "Regra"
+#define D_SAVE "Salvar"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Iniciar"
+#define D_STD_TIME "STD"
+#define D_STOP "Parar"
+#define D_SUBNET_MASK "Máscara sub rede"
+#define D_SUBSCRIBE_TO "Subescrever para"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Successo"
+#define D_SUNRISE "Nascer do sol"
+#define D_SUNSET "Por do sol"
+#define D_TEMPERATURE "Temperatura"
+#define D_TO "Para"
+#define D_TOGGLE "Inverter"
+#define D_TOPIC "Tópico"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Transmitir"
+#define D_TRUE "Verdadeiro"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "atualização"
+#define D_UPLOAD "Enviar"
+#define D_UPTIME "Tempo de atividade"
+#define D_USER "Usuário"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Índice UV"
+#define D_UV_INDEX_1 "Baixo"
+#define D_UV_INDEX_2 "Médio"
+#define D_UV_INDEX_3 "Alto"
+#define D_UV_INDEX_4 "Perigro"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "Nível UV"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Versão"
+#define D_VOLTAGE "Voltagem"
+#define D_WEIGHT "Peso"
+#define D_WARMLIGHT "Luz quente"
+#define D_WEB_SERVER "Servidor WEB"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "AVISO: esta versão não supporta configurações persistentes"
+#define D_LEVEL_10 "nível 1-0"
+#define D_LEVEL_01 "nível 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Registro Serial desabilitado"
+#define D_SYSLOG_LOGGING_REENABLED "Registro do Syslog reativado"
+
+#define D_SET_BAUDRATE_TO "Ajuste da velocidade para"
+#define D_RECEIVED_TOPIC "Tópico recebido"
+#define D_DATA_SIZE "Tamanho de dados"
+#define D_ANALOG_INPUT "Entrada analógica"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Loop bloqueado"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig falha de estado"
+#define D_ACTIVE_FOR_3_MINUTES "Ativo por 3 minutos"
+#define D_FAILED_TO_START "Falha ao iníciar"
+#define D_PATCH_ISSUE_2186 "Questão 2186"
+#define D_CONNECTING_TO_AP "Ligando ao PA"
+#define D_IN_MODE "em modo"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "A ligação falhou porque nenhum endereço IP foi recebido"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "A ligação falhou porque o PA não pôde ser alcançado"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou porque a senha está incorreta"
+#define D_CONNECT_FAILED_AP_TIMEOUT "A ligação falhou porque o tempo foi excedido"
+#define D_ATTEMPTING_CONNECTION "Ligando..."
+#define D_CHECKING_CONNECTION "Verificando ligação..."
+#define D_QUERY_DONE "Consulta finalizada. Serviço MQTT não encontrado"
+#define D_MQTT_SERVICE_FOUND "Serviço MQTT encontrado em"
+#define D_FOUND_AT "encontrado em"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog anfitrião não encontrado"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Guardado na flash em"
+#define D_LOADED_FROM_FLASH_AT "Lido da flash em"
+#define D_USE_DEFAULTS "Usar predefinições"
+#define D_ERASED_SECTOR "Apagar setores"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware mínimo
Atualizar por favor"
+#define D_WEBSERVER_ACTIVE_ON "Servidor WEB ativo em"
+#define D_WITH_IP_ADDRESS "com o endereço IP"
+#define D_WEBSERVER_STOPPED "Servidor WEB parou"
+#define D_FILE_NOT_FOUND "Arquivo não encontrado"
+#define D_REDIRECTED "Redirecionado para o portal ativo"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager: configura o Ponto de Acesso e a Estação"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager: configura o Ponto de Acesso"
+#define D_TRYING_TO_CONNECT "Conectar o dispositivo à rede"
+
+#define D_RESTART_IN "Reinicia em"
+#define D_SECONDS "segundos"
+#define D_DEVICE_WILL_RESTART "O dispositivo irá reiniciar dentro de alguns segundos"
+#define D_BUTTON_TOGGLE "Comandar"
+#define D_CONFIGURATION "Configuração"
+#define D_INFORMATION "Informação"
+#define D_FIRMWARE_UPGRADE "Atualização de Firmware"
+#define D_CONSOLE "Console"
+#define D_CONFIRM_RESTART "Confirmar o reinicio"
+
+#define D_CONFIGURE_MODULE "Configurar Módulo"
+#define D_CONFIGURE_WIFI "Configurar WiFi"
+#define D_CONFIGURE_MQTT "Configurar MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configurar Domoticz"
+#define D_CONFIGURE_LOGGING "Configurar Logging"
+#define D_CONFIGURE_OTHER "Configurar outras opções"
+#define D_CONFIRM_RESET_CONFIGURATION "Confirmar limpeza de configuração"
+#define D_RESET_CONFIGURATION "Apagar configuração"
+#define D_BACKUP_CONFIGURATION "Salvar configuração"
+#define D_RESTORE_CONFIGURATION "Repor configuração"
+#define D_MAIN_MENU "Menu principal"
+
+#define D_MODULE_PARAMETERS "Parâmetros do módulo"
+#define D_MODULE_TYPE "Tipo de módulo"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Entrada serial"
+#define D_SERIAL_OUT "Saída serial"
+
+#define D_WIFI_PARAMETERS "Parâmetros do wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Encontrar redes wifi"
+#define D_SCAN_DONE "Busca finalizada"
+#define D_NO_NETWORKS_FOUND "Sem redes"
+#define D_REFRESH_TO_SCAN_AGAIN "Nova busca"
+#define D_DUPLICATE_ACCESSPOINT "Ponto de Acesso duplicado"
+#define D_SKIPPING_LOW_QUALITY "Ignorado devido à baixa qualidade do sinal"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "Senha AP1"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "Senha AP2"
+
+#define D_MQTT_PARAMETERS "Parâmetros MQTT"
+#define D_CLIENT "Cliente"
+#define D_FULL_TOPIC "Tópico completo"
+
+#define D_LOGGING_PARAMETERS "Parâmetros Logging"
+#define D_SERIAL_LOG_LEVEL "Nível de registro serial"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Nível de registro WEB"
+#define D_SYS_LOG_LEVEL "Nível de registro Syslog"
+#define D_MORE_DEBUG "Depurar mais"
+#define D_SYSLOG_HOST "Syslog anfitrião"
+#define D_SYSLOG_PORT "Porta Syslog"
+#define D_TELEMETRY_PERIOD "Período de telemetria"
+
+#define D_OTHER_PARAMETERS "Outros parâmetros"
+#define D_TEMPLATE "Modelo"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Senha de WEB Admin"
+#define D_MQTT_ENABLE "MQTT habilitado"
+#define D_FRIENDLY_NAME "Nome amigável"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "Dispositivo único"
+#define D_MULTI_DEVICE "Múltiplos dispositivos"
+
+#define D_CONFIGURE_TEMPLATE "Configurar Modelo"
+#define D_TEMPLATE_PARAMETERS "Parâmetros Modelo"
+#define D_TEMPLATE_NAME "Nome"
+#define D_BASE_TYPE "Baseado em"
+#define D_TEMPLATE_FLAGS "Opções"
+
+#define D_SAVE_CONFIGURATION "Gravar configuração"
+#define D_CONFIGURATION_SAVED "Configuração gravada"
+#define D_CONFIGURATION_RESET "Reinicialização da configuração"
+
+#define D_PROGRAM_VERSION "Versão do programa"
+#define D_BUILD_DATE_AND_TIME "Data e Hora da compilação"
+#define D_CORE_AND_SDK_VERSION "Versão Core/SDK"
+#define D_FLASH_WRITE_COUNT "Contagem de gravação flash"
+#define D_MAC_ADDRESS "Endereço MAC"
+#define D_MQTT_HOST "MQTT Servidor"
+#define D_MQTT_PORT "MQTT Porta"
+#define D_MQTT_CLIENT "MQTT Cliente"
+#define D_MQTT_USER "MQTT Usuário"
+#define D_MQTT_TOPIC "MQTT Tópico"
+#define D_MQTT_GROUP_TOPIC "MQTT Tópico Grupo"
+#define D_MQTT_FULL_TOPIC "MQTT Tópico Completo"
+#define D_MDNS_DISCOVERY "Descobrir mDNS"
+#define D_MDNS_ADVERTISE "Anunciar mDNS"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Flash Size"
+#define D_FREE_PROGRAM_SPACE "Espaço Livre Programa"
+
+#define D_UPGRADE_BY_WEBSERVER "Atualizar pelo servidor WEB"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Iniciar atualização"
+#define D_UPGRADE_BY_FILE_UPLOAD "Atualização por arquivo local"
+#define D_UPLOAD_STARTED "Início do envio"
+#define D_UPGRADE_STARTED "Atualização iniciada"
+#define D_UPLOAD_DONE "Atualização finalizada"
+#define D_UPLOAD_ERR_1 "Nenhum arquivo selecionado"
+#define D_UPLOAD_ERR_2 "Não existe memória disponível"
+#define D_UPLOAD_ERR_3 "Byte mágico não é 0xE9"
+#define D_UPLOAD_ERR_4 "O tamanho do programa é maior do que o tamanho da memória"
+#define D_UPLOAD_ERR_5 "Envio buffer miscompare"
+#define D_UPLOAD_ERR_6 "Falha no envio. Habilitar logging 3"
+#define D_UPLOAD_ERR_7 "Envio cancelado"
+#define D_UPLOAD_ERR_8 "Arquivo inválido"
+#define D_UPLOAD_ERR_9 "Arquivo muito grande"
+#define D_UPLOAD_ERR_10 "Falha ao iniciar chip RF"
+#define D_UPLOAD_ERR_11 "Falha ao apagar o chip RF"
+#define D_UPLOAD_ERR_12 "Falha ao escrever o chip RF"
+#define D_UPLOAD_ERR_13 "Falha ao decodificar o firmware de RF"
+#define D_UPLOAD_ERROR_CODE "Código de erro do envio"
+
+#define D_ENTER_COMMAND "Inserir comando"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 se resposta esperada"
+#define D_NEED_USER_AND_PASSWORD "Necessário user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifique a impressão digital TLS..."
+#define D_TLS_CONNECT_FAILED_TO "TLS não conseguiu ligar"
+#define D_RETRY_IN "Tentativa em"
+#define D_VERIFIED "Verificado impressão digital "
+#define D_INSECURE "Ligação insegura devido à impressão digital inválida"
+#define D_CONNECT_FAILED_TO "A ligação falhou ao"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast desabilitado"
+#define D_MULTICAST_REJOINED "Multicast (re)ingressou"
+#define D_MULTICAST_JOIN_FAILED "Multicast falha no reingresso"
+#define D_FAILED_TO_SEND_RESPONSE "Falha no envio de reposta"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo evento básico"
+#define D_WEMO_EVENT_SERVICE "WeMo evento de serviço"
+#define D_WEMO_META_SERVICE "WeMo serviço meta"
+#define D_WEMO_SETUP "WeMo configuração"
+#define D_RESPONSE_SENT "Resposta enviada"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue setup"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API nao implementada"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 pacotes de resposta enviados"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Parâmetros Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Chave idx"
+#define D_DOMOTICZ_SWITCH_IDX "Interruptor idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Umi"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Umi,Pres"
+ #define D_DOMOTICZ_POWER_ENERGY "Potência,Energia"
+ #define D_DOMOTICZ_ILLUMINANCE "Luminância"
+ #define D_DOMOTICZ_COUNT "Contagem/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltagem/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Corrente/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Qualidade do ar"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Tempo de atualização"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configurar temporizador"
+#define D_TIMER_PARAMETERS "Parâmetros"
+#define D_TIMER_ENABLE "Habilitar temporizadores"
+#define D_TIMER_ARM "Habilitar"
+#define D_TIMER_TIME "Horário"
+#define D_TIMER_DAYS "Dias"
+#define D_TIMER_REPEAT "Repetir"
+#define D_TIMER_OUTPUT "Saída"
+#define D_TIMER_ACTION "Ação"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configurar KNX"
+#define D_KNX_PARAMETERS "Parâmetros KNX"
+#define D_KNX_GENERAL_CONFIG "Geral"
+#define D_KNX_PHYSICAL_ADDRESS "Endereço físico"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Deve ser único na rede KNX)"
+#define D_KNX_ENABLE "Habilitar KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Endereço do grupo para enviar"
+#define D_ADD "Adicionar"
+#define D_DELETE "Remover"
+#define D_REPLY "Responder"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Endereço do grupo para receber"
+#define D_RECEIVED_FROM "Recebido de"
+#define D_KNX_COMMAND_WRITE "Escrever"
+#define D_KNX_COMMAND_READ "Ler"
+#define D_KNX_COMMAND_OTHER "Outros"
+#define D_SENT_TO "Enviar para"
+#define D_KNX_WARNING "O endereço ( 0 / 0 / 0 ) é reservado e não pode ser usado."
+#define D_KNX_ENHANCEMENT "Melhoria da comunicação"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Consumo energético de hoje"
+#define D_ENERGY_YESTERDAY "Consumo energético de ontem"
+#define D_ENERGY_TOTAL "Consumo total de energia"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Aberta"
+#define D_CLOSE "Fechada"
+#define D_DOMOTICZ_SHUTTER "Persiana"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configura PCF8574"
+#define D_PCF8574_PARAMETERS "Parâmetros PCF8574"
+#define D_INVERT_PORTS "Portas Invertidas"
+#define D_DEVICE "Dispositivo"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor ocupado"
+#define D_SENSOR_CRC_ERROR "Erro sensor CRC"
+#define D_SENSORS_FOUND "Sensores encontrados"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Fim do tempo de espera"
+#define D_START_SIGNAL_LOW "Sinal de início baixo"
+#define D_START_SIGNAL_HIGH "Sinal de início elevado"
+#define D_PULSE "pulso"
+#define D_CHECKSUM_FAILURE "Falha checksum"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor não aceitou o comando ACK"
+#define D_SHT1X_FOUND "SHT1X encontrado"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Partículas"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remover peso"
+#define D_HX_CAL_REFERENCE "Peso de referência de carga"
+#define D_HX_CAL_DONE "Calibrado"
+#define D_HX_CAL_FAIL "Falha na calibração"
+#define D_RESET_HX711 "Redefinir escala"
+#define D_CONFIGURE_HX711 "Configurar escala"
+#define D_HX711_PARAMETERS "Parâmetros de escala"
+#define D_ITEM_WEIGHT "Peso do Item"
+#define D_REFERENCE_WEIGHT "Peso de referência"
+#define D_CALIBRATE "Calibrar"
+#define D_CALIBRATION "Calibração"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Direção do vento"
+#define D_TX20_WIND_SPEED "Velocidade do vento"
+#define D_TX20_WIND_SPEED_AVG "Velocidade média do vento"
+#define D_TX20_WIND_SPEED_MAX "Velocidade do vento Máxima"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "L"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "O"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Interruptor" // Suffix "1"
+#define D_SENSOR_BUTTON "Botão" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Contador" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Luz de fundo"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "H"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "M"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "s"
+#define D_UNIT_SECTORS "setores"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "W/h"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Ângulo de Fase"
+#define D_IMPORT_ACTIVE "Importar Ativo"
+#define D_EXPORT_ACTIVE "Exportar Ativo"
+#define D_IMPORT_REACTIVE "Importar Reativo"
+#define D_EXPORT_REACTIVE "Exportar Reativo"
+#define D_TOTAL_REACTIVE "Reativo total"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltagem"
+#define D_PV1_CURRENT "PV1 Corrente"
+#define D_PV1_POWER "PV1 Energia"
+#define D_PV2_VOLTAGE "PV2 Voltagem"
+#define D_PV2_CURRENT "PV2 Corrente"
+#define D_PV2_POWER "PV2 Energia"
+#define D_SOLAR_POWER "Energia Solar"
+#define D_INVERTER_POWER "Potência do Inversor"
+#define D_STATUS "Status"
+#define D_WAITING "Esperando"
+#define D_CHECKING "Verificando"
+#define D_WORKING "Trabalhando"
+#define D_FAILURE "Falha"
+#define D_SOLAX_ERROR_0 "Nenhum código de erro"
+#define D_SOLAX_ERROR_1 "Erro Grid Perdida"
+#define D_SOLAX_ERROR_2 "Falha na Tensão da rede"
+#define D_SOLAX_ERROR_3 "Falha na Frequência do Grid"
+#define D_SOLAX_ERROR_4 "Pv Falha de Tensão"
+#define D_SOLAX_ERROR_5 "Falha de Isolamento"
+#define D_SOLAX_ERROR_6 "Falha de Temperatura excessiva"
+#define D_SOLAX_ERROR_7 "Falha no Ventilador"
+#define D_SOLAX_ERROR_8 "Outra falha do dispositivo"
+
+#endif // _LANGUAGE_PT_BR_H_
diff --git a/tasmota/language/pt-PT.h b/tasmota/language/pt-PT.h
index a6299c0c8..e9a08c753 100644
--- a/tasmota/language/pt-PT.h
+++ b/tasmota/language/pt-PT.h
@@ -1,701 +1,703 @@
-/*
- pt-PT.h - localization for Portuguese - Portugal for Tasmota
-
- Copyright (C) 2019 Paulo Paiva
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_PT_PT_H_
-#define _LANGUAGE_PT_PT_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v7.0.0.1
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 2070
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "pt"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "DomSegTerQuaQuiSexSab"
-#define D_MONTH3LIST "JanFevMarAbrMaiJunJulAgoSepOutNovDez"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Qualidade do Ar"
-#define D_AP "AP" // Ponto de Acesso
-#define D_AS "como"
-#define D_AUTO "AUTO"
-#define D_BLINK "Piscar"
-#define D_BLINKOFF "Piscar Desligado"
-#define D_BOOT_COUNT "Contagem de Inicialização"
-#define D_BRIGHTLIGHT "Brilho"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Botão"
-#define D_BY "por" // Write by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Canal"
-#define D_CO2 "Dioxido de Carbono"
-#define D_CODE "Código" // Button code
-#define D_COLDLIGHT "Luz Fria"
-#define D_COMMAND "Comando"
-#define D_CONNECTED "Ligado"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Contagem"
-#define D_COUNTER "Contador"
-#define D_CURRENT "Corrente" // As in Voltage and Current
-#define D_DATA "Dados"
-#define D_DARKLIGHT "Luz Escura"
-#define D_DEBUG "Depurar"
-#define D_DISABLED "Disabilitado"
-#define D_DISTANCE "Distância"
-#define D_DNS_SERVER "Servidor DNS"
-#define D_DONE "Concluído"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulação"
-#define D_ENABLED "Habilitado"
-#define D_ERASE "Apagar"
-#define D_ERROR "Erro"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Falha"
-#define D_FALLBACK "Retornar"
-#define D_FALLBACK_TOPIC "Tópico para retornar"
-#define D_FALSE "Falso"
-#define D_FILE "Ficheiro"
-#define D_FLOW_RATE "Taxa de Fluxo"
-#define D_FREE_MEMORY "Memoria Livre"
-#define D_FREQUENCY "Frequência"
-#define D_GAS "Gás"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Grupo"
-#define D_HOST "Anfitrião"
-#define D_HOSTNAME "Nome Anfitrião"
-#define D_HUMIDITY "Humidade"
-#define D_ILLUMINANCE "Luminâcia"
-#define D_IMMEDIATE "Immediato" // Button immediate
-#define D_INDEX "Indíce"
-#define D_INFO "Info"
-#define D_INFRARED "Infravermelho"
-#define D_INITIALIZED "Inicializado"
-#define D_IP_ADDRESS "Endereço IP"
-#define D_LIGHT "Luz"
-#define D_LWT "LWT"
-#define D_MODULE "Módulo"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-pressão"
-#define D_NOISE "Ruído"
-#define D_NONE "Nenhum"
-#define D_OFF "Off"
-#define D_OFFLINE "Desconetado"
-#define D_OK "Ok"
-#define D_ON "On"
-#define D_ONLINE "Conetado"
-#define D_PASSWORD "Palavra Chave"
-#define D_PORT "Porta"
-#define D_POWER_FACTOR "Factor de Potência"
-#define D_POWERUSAGE "Potência"
-#define D_POWERUSAGE_ACTIVE "Potência Ativa"
-#define D_POWERUSAGE_APPARENT "Potência Aparente"
-#define D_POWERUSAGE_REACTIVE "Potência Reativa"
-#define D_PRESSURE "Pressão"
-#define D_PRESSUREATSEALEVEL "Pressão ao nível do Mar"
-#define D_PROGRAM_FLASH_SIZE "Tamanho do Programa na Flash"
-#define D_PROGRAM_SIZE "Tamanho do Programa"
-#define D_PROJECT "Projeto"
-#define D_RAIN "Chuva"
-#define D_RECEIVED "Recebido"
-#define D_RESTART "Reiniciar"
-#define D_RESTARTING "A reiniciar"
-#define D_RESTART_REASON "Razão do reinicio"
-#define D_RESTORE "Restauro"
-#define D_RETAINED "Manter"
-#define D_RULE "Regra"
-#define D_SAVE "Guardar"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Início"
-#define D_STD_TIME "STD"
-#define D_STOP "Parar"
-#define D_SUBNET_MASK "Mascara sub rede"
-#define D_SUBSCRIBE_TO "Subscrever"
-#define D_UNSUBSCRIBE_FROM "Cancelar subscrição de"
-#define D_SUCCESSFUL "Successo"
-#define D_SUNRISE "Nascer do Sol"
-#define D_SUNSET "Pôr do Sol"
-#define D_TEMPERATURE "Temperatura"
-#define D_TO "para"
-#define D_TOGGLE "Pressionar"
-#define D_TOPIC "Tópico"
-#define D_TOTAL_USAGE "Uso total"
-#define D_TRANSMIT "Transmitir"
-#define D_TRUE "Verdadeiro"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "Atualizar"
-#define D_UPLOAD "Enviar"
-#define D_UPTIME "Tempo de Atividade"
-#define D_USER "Utilizador"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Indíce UV"
-#define D_UV_INDEX_1 "Baixo"
-#define D_UV_INDEX_2 "Médio"
-#define D_UV_INDEX_3 "Elevado"
-#define D_UV_INDEX_4 "Perigoso"
-#define D_UV_INDEX_5 "QueimaduraL1/2"
-#define D_UV_INDEX_6 "QueimaduraL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "Nível UV"
-#define D_UV_POWER "Poder UV"
-#define D_VERSION "Versão"
-#define D_VOLTAGE "Voltagem"
-#define D_WEIGHT "Peso"
-#define D_WARMLIGHT "Luz Quente"
-#define D_WEB_SERVER "Servidor WEB"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "AVISO esta versão não supporta configurações persistentes"
-#define D_LEVEL_10 "nível 1-0"
-#define D_LEVEL_01 "nível 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Registro de porta série desabilitado"
-#define D_SYSLOG_LOGGING_REENABLED "Registro do Syslog reativado"
-
-#define D_SET_BAUDRATE_TO "Ajuste da velocidade para"
-#define D_RECEIVED_TOPIC "Topico Recebido"
-#define D_DATA_SIZE "Tamanho de Dados"
-#define D_ANALOG_INPUT "Entrada Analógica"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Loop Bloqueado"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig FALHOU com estado"
-#define D_ACTIVE_FOR_3_MINUTES "ativo por 3 minutos"
-#define D_FAILED_TO_START "Falha ao iníciar"
-#define D_PATCH_ISSUE_2186 "Questão 2186"
-#define D_CONNECTING_TO_AP "Ligando ao AP"
-#define D_IN_MODE "em modo"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "A ligação falhou porque nenhum endereço IP foi recebido"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "A ligação falhou porque o AP não pode ser alcançado"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou porque a palavra chave está incorreta"
-#define D_CONNECT_FAILED_AP_TIMEOUT "A ligação falhou porque o tempo excedeu"
-#define D_ATTEMPTING_CONNECTION "A ligar..."
-#define D_CHECKING_CONNECTION "A verificar ligação..."
-#define D_QUERY_DONE "Consulta finalizada. Serviço MQTT não encontrado"
-#define D_MQTT_SERVICE_FOUND "Serviço MQTT encontrado em"
-#define D_FOUND_AT "encontrado em"
-#define D_SYSLOG_HOST_NOT_FOUND "Anfitrião Syslog não encontrado"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Guardado na flash em"
-#define D_LOADED_FROM_FLASH_AT "Lido da flash em"
-#define D_USE_DEFAULTS "Usar predefinições"
-#define D_ERASED_SECTOR "Apagado setor"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Para utilizar o Tasmota, por favor ative o JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MÍNIMO
Por favor atualize"
-#define D_WEBSERVER_ACTIVE_ON "Servidor WEB ativo em"
-#define D_WITH_IP_ADDRESS "com o endereço IP"
-#define D_WEBSERVER_STOPPED "Servitor WEB parou"
-#define D_FILE_NOT_FOUND "Ficheiro não encontrado"
-#define D_REDIRECTED "Redirecionado para o portal ativo"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager configura o Ponto de Acesso e mantem a Estação"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager configura o Ponto de Acesso"
-#define D_TRYING_TO_CONNECT "A tentar ligar o dispositivo à rede"
-
-#define D_RESTART_IN "Reinicia em"
-#define D_SECONDS "segundos"
-#define D_DEVICE_WILL_RESTART "O dispositivo irá reiniciar dentro de alguns segundos"
-#define D_BUTTON_TOGGLE "Alternar"
-#define D_CONFIGURATION "Configuração"
-#define D_INFORMATION "Informação"
-#define D_FIRMWARE_UPGRADE "Atualização de Firmware"
-#define D_CONSOLE "Consola"
-#define D_CONFIRM_RESTART "Confirmar o reinício"
-
-#define D_CONFIGURE_MODULE "Configurar Módulo"
-#define D_CONFIGURE_WIFI "Configurar WiFi"
-#define D_CONFIGURE_MQTT "Configurar MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configurar Domoticz"
-#define D_CONFIGURE_LOGGING "Configurar registro"
-#define D_CONFIGURE_OTHER "Configurar outras opções"
-#define D_CONFIRM_RESET_CONFIGURATION "Confirme o reinício da configuração"
-#define D_RESET_CONFIGURATION "Apagar configuração"
-#define D_BACKUP_CONFIGURATION "Guardar configuração"
-#define D_RESTORE_CONFIGURATION "Repor configuração"
-#define D_MAIN_MENU "Menu Principal"
-
-#define D_MODULE_PARAMETERS "Parametros do Módulo"
-#define D_MODULE_TYPE "Tipo de Módulo"
-#define D_PULLUP_ENABLE "Sem pull-up de Botão/Interruptor"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Entrada de porta série"
-#define D_SERIAL_OUT "Saída de porta série"
-
-#define D_WIFI_PARAMETERS "Parametros Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Procurar redes Wifi"
-#define D_SCAN_DONE "Pesquisa terminada"
-#define D_NO_NETWORKS_FOUND "Sem redes encontradas"
-#define D_REFRESH_TO_SCAN_AGAIN "Atualize para realizar nova pesquisa"
-#define D_DUPLICATE_ACCESSPOINT "Duplicar ponto de Acesso"
-#define D_SKIPPING_LOW_QUALITY "Ignorado devido a baixa qualidade do sinal"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "SSId do AP1"
-#define D_AP1_PASSWORD "Palavra Chave do AP1"
-#define D_AP2_SSID "SSId do AP2"
-#define D_AP2_PASSWORD "Palavra Chave do AP2"
-
-#define D_MQTT_PARAMETERS "Parametros MQTT"
-#define D_CLIENT "Cliente"
-#define D_FULL_TOPIC "Tópico completo"
-
-#define D_LOGGING_PARAMETERS "Parametros para registro"
-#define D_SERIAL_LOG_LEVEL "Nível de registro na porta série"
-#define D_MQTT_LOG_LEVEL "Nível de registro MQTT"
-#define D_WEB_LOG_LEVEL "Nível de registro WEB"
-#define D_SYS_LOG_LEVEL "Nível de registro do Syslog"
-#define D_MORE_DEBUG "Depurar mais"
-#define D_SYSLOG_HOST "Anfitrião Syslog"
-#define D_SYSLOG_PORT "Porta Syslog"
-#define D_TELEMETRY_PERIOD "Período de Telemetria"
-
-#define D_OTHER_PARAMETERS "Outros parametros"
-#define D_TEMPLATE "Modelo"
-#define D_ACTIVATE "Ativar"
-#define D_WEB_ADMIN_PASSWORD "Palavra Chave do Admin WEB"
-#define D_MQTT_ENABLE "MQTT habilitado"
-#define D_FRIENDLY_NAME "Nome amigável"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "dispositivo único"
-#define D_MULTI_DEVICE "dispositivo múltiplo"
-
-#define D_CONFIGURE_TEMPLATE "Configurar Modelo"
-#define D_TEMPLATE_PARAMETERS "Parametros do Modelo"
-#define D_TEMPLATE_NAME "Nome do Modelo"
-#define D_BASE_TYPE "Baseado em"
-#define D_TEMPLATE_FLAGS "Opções"
-
-#define D_SAVE_CONFIGURATION "Guardar configuração"
-#define D_CONFIGURATION_SAVED "Configuração guardada"
-#define D_CONFIGURATION_RESET "Reinicializar a configuração"
-
-#define D_PROGRAM_VERSION "Versão do Programa"
-#define D_BUILD_DATE_AND_TIME "Data e Hora de criação"
-#define D_CORE_AND_SDK_VERSION "Versão Core/SDK"
-#define D_FLASH_WRITE_COUNT "Contagem de gravação da flash"
-#define D_MAC_ADDRESS "Endereço MAC"
-#define D_MQTT_HOST "Servidor MQTT"
-#define D_MQTT_PORT "Porta MQTT"
-#define D_MQTT_CLIENT "Cliente MQTT"
-#define D_MQTT_USER "Utilizador MQTT"
-#define D_MQTT_TOPIC "Tópico MQTT"
-#define D_MQTT_GROUP_TOPIC "Tópico MQTT de Grupo"
-#define D_MQTT_FULL_TOPIC "Tópico MQTT Completo"
-#define D_MDNS_DISCOVERY "Descobrir mDNS"
-#define D_MDNS_ADVERTISE "Anunciar mDNS"
-#define D_ESP_CHIP_ID "ID do chip ESP"
-#define D_FLASH_CHIP_ID "ID do chip da Flash"
-#define D_FLASH_CHIP_SIZE "Tamanho da Flash"
-#define D_FREE_PROGRAM_SPACE "Espaço de Programa Livre"
-
-#define D_UPGRADE_BY_WEBSERVER "Atualizar pelo servidor WEB"
-#define D_OTA_URL "Url OTA"
-#define D_START_UPGRADE "Iniciar atualização"
-#define D_UPGRADE_BY_FILE_UPLOAD "Atualizar por envio de ficheiro"
-#define D_UPLOAD_STARTED "Envio Iniciado"
-#define D_UPGRADE_STARTED "Atualização Iniciada"
-#define D_UPLOAD_DONE "Atualização Finalizada"
-#define D_UPLOAD_ERR_1 "Nenhum ficheiro selecionado"
-#define D_UPLOAD_ERR_2 "Não existe espaço disponível"
-#define D_UPLOAD_ERR_3 "O Byte mágico não é 0xE9"
-#define D_UPLOAD_ERR_4 "O tamanho do programa e maior do que o tamanho real da flash"
-#define D_UPLOAD_ERR_5 "Comparação incorreta do buffer de upload"
-#define D_UPLOAD_ERR_6 "Falha no envio. Habilitar registro 3"
-#define D_UPLOAD_ERR_7 "Envio cancelado"
-#define D_UPLOAD_ERR_8 "Ficheiro inválido"
-#define D_UPLOAD_ERR_9 "Ficheiro demasiado grande"
-#define D_UPLOAD_ERR_10 "Falha ao iniciar o chip de RF"
-#define D_UPLOAD_ERR_11 "Falha ao apagar o chip de RF"
-#define D_UPLOAD_ERR_12 "Falha ao escrever no chip de RF"
-#define D_UPLOAD_ERR_13 "Falha ao descodificar o firmware RF"
-#define D_UPLOAD_ERROR_CODE "Código de erro do envio"
-
-#define D_ENTER_COMMAND "Inserir comando"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 se resposta esperada"
-#define D_NEED_USER_AND_PASSWORD "Necessário user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifique a impressão digital TLS..."
-#define D_TLS_CONNECT_FAILED_TO "TLS não conseguiu ligar"
-#define D_RETRY_IN "Nova tentativa em"
-#define D_VERIFIED "Verificado usando impressão digital"
-#define D_INSECURE "Ligação insegura devido à impressão digital inválida"
-#define D_CONNECT_FAILED_TO "A ligação falhou ao"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast desabilitado"
-#define D_MULTICAST_REJOINED "Multicast (re)ingressado"
-#define D_MULTICAST_JOIN_FAILED "Multicast falha no reingresso"
-#define D_FAILED_TO_SEND_RESPONSE "Falha no envio de reposta"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo evento básico"
-#define D_WEMO_EVENT_SERVICE "WeMo evento de serviço"
-#define D_WEMO_META_SERVICE "WeMo serviço meta"
-#define D_WEMO_SETUP "WeMo configuração"
-#define D_RESPONSE_SENT "Resposta enviada"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Configuração do Hue"
-#define D_HUE_API_NOT_IMPLEMENTED "API Hue nao implementada"
-#define D_HUE_API "API Hue"
-#define D_HUE_POST_ARGS "Argumentos de POST HUE"
-#define D_3_RESPONSE_PACKETS_SENT "3 pacotes de resposta enviados"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Parametros Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Chave idx"
-#define D_DOMOTICZ_SWITCH_IDX "Interruptor idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Potência,Energia"
- #define D_DOMOTICZ_ILLUMINANCE "Luminâcia"
- #define D_DOMOTICZ_COUNT "Contagem/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltagem/PM2.5"
- #define D_DOMOTICZ_CURRENT "Corrente/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Qualidade do Ar"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Temporizador de atualização"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configurar temporizador"
-#define D_TIMER_PARAMETERS "Parâmetros do temporizador"
-#define D_TIMER_ENABLE "Habilitar Temporizadores"
-#define D_TIMER_ARM "Armar"
-#define D_TIMER_TIME "Tempo"
-#define D_TIMER_DAYS "Dias"
-#define D_TIMER_REPEAT "Repetir"
-#define D_TIMER_OUTPUT "Aaída"
-#define D_TIMER_ACTION "Açao"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configurar KNX"
-#define D_KNX_PARAMETERS "Parâmetros KNX"
-#define D_KNX_GENERAL_CONFIG "Geral"
-#define D_KNX_PHYSICAL_ADDRESS "Endereço físico"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Deve ser exclusivo na rede KNX )"
-#define D_KNX_ENABLE "Habilitar KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dados para enviar para Endereços de Grupo"
-#define D_ADD "Adicionar"
-#define D_DELETE "Remover"
-#define D_REPLY "Responder"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Endereços de Grupo de onde receber dados"
-#define D_RECEIVED_FROM "Recebido de"
-#define D_KNX_COMMAND_WRITE "Escrever"
-#define D_KNX_COMMAND_READ "Ler"
-#define D_KNX_COMMAND_OTHER "Outro"
-#define D_SENT_TO "enviar para"
-#define D_KNX_WARNING "O Endereço de Grupo ( 0 / 0 / 0 ) está reservado e não pode ser usado."
-#define D_KNX_ENHANCEMENT "Melhoria de Comunicação"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Consumo energético de hoje"
-#define D_ENERGY_YESTERDAY "Consumo energético de ontem"
-#define D_ENERGY_TOTAL "Consumo energético total"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Abrir"
-#define D_CLOSE "Fechar"
-#define D_DOMOTICZ_SHUTTER "Estore"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configurar PCF8574"
-#define D_PCF8574_PARAMETERS "Parâmetros PCF8574"
-#define D_INVERT_PORTS "Inverter Portas"
-#define D_DEVICE "Dispositivo"
-#define D_DEVICE_INPUT "Entrada"
-#define D_DEVICE_OUTPUT "Saída"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor ocupado"
-#define D_SENSOR_CRC_ERROR "Erro no CRC do sensor"
-#define D_SENSORS_FOUND "Sensores encontrados"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Fim do tempo de espera"
-#define D_START_SIGNAL_LOW "Sinal de início baixo"
-#define D_START_SIGNAL_HIGH "Sinal de início elevado"
-#define D_PULSE "pulso"
-#define D_CHECKSUM_FAILURE "Falha na soma de verificação"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor não aceitou o comando ACK"
-#define D_SHT1X_FOUND "SHT1X encontrado"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Partículas"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remover peso"
-#define D_HX_CAL_REFERENCE "Carregar peso de referência"
-#define D_HX_CAL_DONE "Calibrado"
-#define D_HX_CAL_FAIL "Falha na calibração"
-#define D_RESET_HX711 "Reiniciar balança"
-#define D_CONFIGURE_HX711 "Configurar balança"
-#define D_HX711_PARAMETERS "Parâmetros da balança"
-#define D_ITEM_WEIGHT "Peso do item"
-#define D_REFERENCE_WEIGHT "Peso de referência"
-#define D_CALIBRATE "Calibrar"
-#define D_CALIBRATION "Calibração"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Direção do vento"
-#define D_TX20_WIND_SPEED "Velocidade do vento"
-#define D_TX20_WIND_SPEED_AVG "Velocidade média do vento"
-#define D_TX20_WIND_SPEED_MAX "Velocidade máxima do vento"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "O"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Interruptor" // Suffix "1"
-#define D_SENSOR_BUTTON "Botão" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Contador" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Luz fundo"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "Sensor RF"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotativo" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "setores"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Ângulo de fase"
-#define D_IMPORT_ACTIVE "Ativo importado"
-#define D_EXPORT_ACTIVE "Ativo exportado"
-#define D_IMPORT_REACTIVE "Reativo importado"
-#define D_EXPORT_REACTIVE "Reativo exportado"
-#define D_TOTAL_REACTIVE "Reactivo total"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "Voltagem PV1"
-#define D_PV1_CURRENT "Corrente PV1"
-#define D_PV1_POWER "Potência PV1"
-#define D_PV2_VOLTAGE "Voltagem PV2"
-#define D_PV2_CURRENT "Corrente PV2"
-#define D_PV2_POWER "Potência PV2"
-#define D_SOLAR_POWER "Potência Solar"
-#define D_INVERTER_POWER "Potência do Inversor"
-#define D_STATUS "Estado"
-#define D_WAITING "Esperando"
-#define D_CHECKING "Verificando"
-#define D_WORKING "Trabalhando"
-#define D_FAILURE "Falha"
-#define D_SOLAX_ERROR_0 "Nenhum código de erro"
-#define D_SOLAX_ERROR_1 "Falha devido a perda de rede"
-#define D_SOLAX_ERROR_2 "Falha devido a perda de tensão"
-#define D_SOLAX_ERROR_3 "Falha devido a perda de frequência"
-#define D_SOLAX_ERROR_4 "Falha de tensão de Pv"
-#define D_SOLAX_ERROR_5 "Falha de isolamento"
-#define D_SOLAX_ERROR_6 "Falha de temperatura excessiva"
-#define D_SOLAX_ERROR_7 "Falha no ventilador"
-#define D_SOLAX_ERROR_8 "Outra falha no dispositivo"
-
-#endif // _LANGUAGE_PT_PT_H_
+/*
+ pt-PT.h - localization for Portuguese - Portugal for Tasmota
+
+ Copyright (C) 2019 Paulo Paiva
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_PT_PT_H_
+#define _LANGUAGE_PT_PT_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v7.0.0.1
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 2070
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "pt"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "DomSegTerQuaQuiSexSab"
+#define D_MONTH3LIST "JanFevMarAbrMaiJunJulAgoSepOutNovDez"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Qualidade do Ar"
+#define D_AP "AP" // Ponto de Acesso
+#define D_AS "como"
+#define D_AUTO "AUTO"
+#define D_BLINK "Piscar"
+#define D_BLINKOFF "Piscar Desligado"
+#define D_BOOT_COUNT "Contagem de Inicialização"
+#define D_BRIGHTLIGHT "Brilho"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Botão"
+#define D_BY "por" // Write by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Canal"
+#define D_CO2 "Dioxido de Carbono"
+#define D_CODE "Código" // Button code
+#define D_COLDLIGHT "Luz Fria"
+#define D_COMMAND "Comando"
+#define D_CONNECTED "Ligado"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Contagem"
+#define D_COUNTER "Contador"
+#define D_CURRENT "Corrente" // As in Voltage and Current
+#define D_DATA "Dados"
+#define D_DARKLIGHT "Luz Escura"
+#define D_DEBUG "Depurar"
+#define D_DISABLED "Disabilitado"
+#define D_DISTANCE "Distância"
+#define D_DNS_SERVER "Servidor DNS"
+#define D_DONE "Concluído"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulação"
+#define D_ENABLED "Habilitado"
+#define D_ERASE "Apagar"
+#define D_ERROR "Erro"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Falha"
+#define D_FALLBACK "Retornar"
+#define D_FALLBACK_TOPIC "Tópico para retornar"
+#define D_FALSE "Falso"
+#define D_FILE "Ficheiro"
+#define D_FLOW_RATE "Taxa de Fluxo"
+#define D_FREE_MEMORY "Memoria Livre"
+#define D_FREQUENCY "Frequência"
+#define D_GAS "Gás"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Grupo"
+#define D_HOST "Anfitrião"
+#define D_HOSTNAME "Nome Anfitrião"
+#define D_HUMIDITY "Humidade"
+#define D_ILLUMINANCE "Luminâcia"
+#define D_IMMEDIATE "Immediato" // Button immediate
+#define D_INDEX "Indíce"
+#define D_INFO "Info"
+#define D_INFRARED "Infravermelho"
+#define D_INITIALIZED "Inicializado"
+#define D_IP_ADDRESS "Endereço IP"
+#define D_LIGHT "Luz"
+#define D_LWT "LWT"
+#define D_MODULE "Módulo"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-pressão"
+#define D_NOISE "Ruído"
+#define D_NONE "Nenhum"
+#define D_OFF "Off"
+#define D_OFFLINE "Desconetado"
+#define D_OK "Ok"
+#define D_ON "On"
+#define D_ONLINE "Conetado"
+#define D_PASSWORD "Palavra Chave"
+#define D_PORT "Porta"
+#define D_POWER_FACTOR "Factor de Potência"
+#define D_POWERUSAGE "Potência"
+#define D_POWERUSAGE_ACTIVE "Potência Ativa"
+#define D_POWERUSAGE_APPARENT "Potência Aparente"
+#define D_POWERUSAGE_REACTIVE "Potência Reativa"
+#define D_PRESSURE "Pressão"
+#define D_PRESSUREATSEALEVEL "Pressão ao nível do Mar"
+#define D_PROGRAM_FLASH_SIZE "Tamanho do Programa na Flash"
+#define D_PROGRAM_SIZE "Tamanho do Programa"
+#define D_PROJECT "Projeto"
+#define D_RAIN "Chuva"
+#define D_RECEIVED "Recebido"
+#define D_RESTART "Reiniciar"
+#define D_RESTARTING "A reiniciar"
+#define D_RESTART_REASON "Razão do reinicio"
+#define D_RESTORE "Restauro"
+#define D_RETAINED "Manter"
+#define D_RULE "Regra"
+#define D_SAVE "Guardar"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Início"
+#define D_STD_TIME "STD"
+#define D_STOP "Parar"
+#define D_SUBNET_MASK "Mascara sub rede"
+#define D_SUBSCRIBE_TO "Subscrever"
+#define D_UNSUBSCRIBE_FROM "Cancelar subscrição de"
+#define D_SUCCESSFUL "Successo"
+#define D_SUNRISE "Nascer do Sol"
+#define D_SUNSET "Pôr do Sol"
+#define D_TEMPERATURE "Temperatura"
+#define D_TO "para"
+#define D_TOGGLE "Pressionar"
+#define D_TOPIC "Tópico"
+#define D_TOTAL_USAGE "Uso total"
+#define D_TRANSMIT "Transmitir"
+#define D_TRUE "Verdadeiro"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "Atualizar"
+#define D_UPLOAD "Enviar"
+#define D_UPTIME "Tempo de Atividade"
+#define D_USER "Utilizador"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Indíce UV"
+#define D_UV_INDEX_1 "Baixo"
+#define D_UV_INDEX_2 "Médio"
+#define D_UV_INDEX_3 "Elevado"
+#define D_UV_INDEX_4 "Perigoso"
+#define D_UV_INDEX_5 "QueimaduraL1/2"
+#define D_UV_INDEX_6 "QueimaduraL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "Nível UV"
+#define D_UV_POWER "Poder UV"
+#define D_VERSION "Versão"
+#define D_VOLTAGE "Voltagem"
+#define D_WEIGHT "Peso"
+#define D_WARMLIGHT "Luz Quente"
+#define D_WEB_SERVER "Servidor WEB"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "AVISO esta versão não supporta configurações persistentes"
+#define D_LEVEL_10 "nível 1-0"
+#define D_LEVEL_01 "nível 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Registro de porta série desabilitado"
+#define D_SYSLOG_LOGGING_REENABLED "Registro do Syslog reativado"
+
+#define D_SET_BAUDRATE_TO "Ajuste da velocidade para"
+#define D_RECEIVED_TOPIC "Topico Recebido"
+#define D_DATA_SIZE "Tamanho de Dados"
+#define D_ANALOG_INPUT "Entrada Analógica"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Loop Bloqueado"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig FALHOU com estado"
+#define D_ACTIVE_FOR_3_MINUTES "ativo por 3 minutos"
+#define D_FAILED_TO_START "Falha ao iníciar"
+#define D_PATCH_ISSUE_2186 "Questão 2186"
+#define D_CONNECTING_TO_AP "Ligando ao AP"
+#define D_IN_MODE "em modo"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "A ligação falhou porque nenhum endereço IP foi recebido"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "A ligação falhou porque o AP não pode ser alcançado"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou porque a palavra chave está incorreta"
+#define D_CONNECT_FAILED_AP_TIMEOUT "A ligação falhou porque o tempo excedeu"
+#define D_ATTEMPTING_CONNECTION "A ligar..."
+#define D_CHECKING_CONNECTION "A verificar ligação..."
+#define D_QUERY_DONE "Consulta finalizada. Serviço MQTT não encontrado"
+#define D_MQTT_SERVICE_FOUND "Serviço MQTT encontrado em"
+#define D_FOUND_AT "encontrado em"
+#define D_SYSLOG_HOST_NOT_FOUND "Anfitrião Syslog não encontrado"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Guardado na flash em"
+#define D_LOADED_FROM_FLASH_AT "Lido da flash em"
+#define D_USE_DEFAULTS "Usar predefinições"
+#define D_ERASED_SECTOR "Apagado setor"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Para utilizar o Tasmota, por favor ative o JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MÍNIMO
Por favor atualize"
+#define D_WEBSERVER_ACTIVE_ON "Servidor WEB ativo em"
+#define D_WITH_IP_ADDRESS "com o endereço IP"
+#define D_WEBSERVER_STOPPED "Servitor WEB parou"
+#define D_FILE_NOT_FOUND "Ficheiro não encontrado"
+#define D_REDIRECTED "Redirecionado para o portal ativo"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager configura o Ponto de Acesso e mantem a Estação"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager configura o Ponto de Acesso"
+#define D_TRYING_TO_CONNECT "A tentar ligar o dispositivo à rede"
+
+#define D_RESTART_IN "Reinicia em"
+#define D_SECONDS "segundos"
+#define D_DEVICE_WILL_RESTART "O dispositivo irá reiniciar dentro de alguns segundos"
+#define D_BUTTON_TOGGLE "Alternar"
+#define D_CONFIGURATION "Configuração"
+#define D_INFORMATION "Informação"
+#define D_FIRMWARE_UPGRADE "Atualização de Firmware"
+#define D_CONSOLE "Consola"
+#define D_CONFIRM_RESTART "Confirmar o reinício"
+
+#define D_CONFIGURE_MODULE "Configurar Módulo"
+#define D_CONFIGURE_WIFI "Configurar WiFi"
+#define D_CONFIGURE_MQTT "Configurar MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configurar Domoticz"
+#define D_CONFIGURE_LOGGING "Configurar registro"
+#define D_CONFIGURE_OTHER "Configurar outras opções"
+#define D_CONFIRM_RESET_CONFIGURATION "Confirme o reinício da configuração"
+#define D_RESET_CONFIGURATION "Apagar configuração"
+#define D_BACKUP_CONFIGURATION "Guardar configuração"
+#define D_RESTORE_CONFIGURATION "Repor configuração"
+#define D_MAIN_MENU "Menu Principal"
+
+#define D_MODULE_PARAMETERS "Parametros do Módulo"
+#define D_MODULE_TYPE "Tipo de Módulo"
+#define D_PULLUP_ENABLE "Sem pull-up de Botão/Interruptor"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Entrada de porta série"
+#define D_SERIAL_OUT "Saída de porta série"
+
+#define D_WIFI_PARAMETERS "Parametros Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Procurar redes Wifi"
+#define D_SCAN_DONE "Pesquisa terminada"
+#define D_NO_NETWORKS_FOUND "Sem redes encontradas"
+#define D_REFRESH_TO_SCAN_AGAIN "Atualize para realizar nova pesquisa"
+#define D_DUPLICATE_ACCESSPOINT "Duplicar ponto de Acesso"
+#define D_SKIPPING_LOW_QUALITY "Ignorado devido a baixa qualidade do sinal"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "SSId do AP1"
+#define D_AP1_PASSWORD "Palavra Chave do AP1"
+#define D_AP2_SSID "SSId do AP2"
+#define D_AP2_PASSWORD "Palavra Chave do AP2"
+
+#define D_MQTT_PARAMETERS "Parametros MQTT"
+#define D_CLIENT "Cliente"
+#define D_FULL_TOPIC "Tópico completo"
+
+#define D_LOGGING_PARAMETERS "Parametros para registro"
+#define D_SERIAL_LOG_LEVEL "Nível de registro na porta série"
+#define D_MQTT_LOG_LEVEL "Nível de registro MQTT"
+#define D_WEB_LOG_LEVEL "Nível de registro WEB"
+#define D_SYS_LOG_LEVEL "Nível de registro do Syslog"
+#define D_MORE_DEBUG "Depurar mais"
+#define D_SYSLOG_HOST "Anfitrião Syslog"
+#define D_SYSLOG_PORT "Porta Syslog"
+#define D_TELEMETRY_PERIOD "Período de Telemetria"
+
+#define D_OTHER_PARAMETERS "Outros parametros"
+#define D_TEMPLATE "Modelo"
+#define D_ACTIVATE "Ativar"
+#define D_WEB_ADMIN_PASSWORD "Palavra Chave do Admin WEB"
+#define D_MQTT_ENABLE "MQTT habilitado"
+#define D_FRIENDLY_NAME "Nome amigável"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "dispositivo único"
+#define D_MULTI_DEVICE "dispositivo múltiplo"
+
+#define D_CONFIGURE_TEMPLATE "Configurar Modelo"
+#define D_TEMPLATE_PARAMETERS "Parametros do Modelo"
+#define D_TEMPLATE_NAME "Nome do Modelo"
+#define D_BASE_TYPE "Baseado em"
+#define D_TEMPLATE_FLAGS "Opções"
+
+#define D_SAVE_CONFIGURATION "Guardar configuração"
+#define D_CONFIGURATION_SAVED "Configuração guardada"
+#define D_CONFIGURATION_RESET "Reinicializar a configuração"
+
+#define D_PROGRAM_VERSION "Versão do Programa"
+#define D_BUILD_DATE_AND_TIME "Data e Hora de criação"
+#define D_CORE_AND_SDK_VERSION "Versão Core/SDK"
+#define D_FLASH_WRITE_COUNT "Contagem de gravação da flash"
+#define D_MAC_ADDRESS "Endereço MAC"
+#define D_MQTT_HOST "Servidor MQTT"
+#define D_MQTT_PORT "Porta MQTT"
+#define D_MQTT_CLIENT "Cliente MQTT"
+#define D_MQTT_USER "Utilizador MQTT"
+#define D_MQTT_TOPIC "Tópico MQTT"
+#define D_MQTT_GROUP_TOPIC "Tópico MQTT de Grupo"
+#define D_MQTT_FULL_TOPIC "Tópico MQTT Completo"
+#define D_MDNS_DISCOVERY "Descobrir mDNS"
+#define D_MDNS_ADVERTISE "Anunciar mDNS"
+#define D_ESP_CHIP_ID "ID do chip ESP"
+#define D_FLASH_CHIP_ID "ID do chip da Flash"
+#define D_FLASH_CHIP_SIZE "Tamanho da Flash"
+#define D_FREE_PROGRAM_SPACE "Espaço de Programa Livre"
+
+#define D_UPGRADE_BY_WEBSERVER "Atualizar pelo servidor WEB"
+#define D_OTA_URL "Url OTA"
+#define D_START_UPGRADE "Iniciar atualização"
+#define D_UPGRADE_BY_FILE_UPLOAD "Atualizar por envio de ficheiro"
+#define D_UPLOAD_STARTED "Envio Iniciado"
+#define D_UPGRADE_STARTED "Atualização Iniciada"
+#define D_UPLOAD_DONE "Atualização Finalizada"
+#define D_UPLOAD_ERR_1 "Nenhum ficheiro selecionado"
+#define D_UPLOAD_ERR_2 "Não existe espaço disponível"
+#define D_UPLOAD_ERR_3 "O Byte mágico não é 0xE9"
+#define D_UPLOAD_ERR_4 "O tamanho do programa e maior do que o tamanho real da flash"
+#define D_UPLOAD_ERR_5 "Comparação incorreta do buffer de upload"
+#define D_UPLOAD_ERR_6 "Falha no envio. Habilitar registro 3"
+#define D_UPLOAD_ERR_7 "Envio cancelado"
+#define D_UPLOAD_ERR_8 "Ficheiro inválido"
+#define D_UPLOAD_ERR_9 "Ficheiro demasiado grande"
+#define D_UPLOAD_ERR_10 "Falha ao iniciar o chip de RF"
+#define D_UPLOAD_ERR_11 "Falha ao apagar o chip de RF"
+#define D_UPLOAD_ERR_12 "Falha ao escrever no chip de RF"
+#define D_UPLOAD_ERR_13 "Falha ao descodificar o firmware RF"
+#define D_UPLOAD_ERROR_CODE "Código de erro do envio"
+
+#define D_ENTER_COMMAND "Inserir comando"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 se resposta esperada"
+#define D_NEED_USER_AND_PASSWORD "Necessário user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifique a impressão digital TLS..."
+#define D_TLS_CONNECT_FAILED_TO "TLS não conseguiu ligar"
+#define D_RETRY_IN "Nova tentativa em"
+#define D_VERIFIED "Verificado usando impressão digital"
+#define D_INSECURE "Ligação insegura devido à impressão digital inválida"
+#define D_CONNECT_FAILED_TO "A ligação falhou ao"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast desabilitado"
+#define D_MULTICAST_REJOINED "Multicast (re)ingressado"
+#define D_MULTICAST_JOIN_FAILED "Multicast falha no reingresso"
+#define D_FAILED_TO_SEND_RESPONSE "Falha no envio de reposta"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo evento básico"
+#define D_WEMO_EVENT_SERVICE "WeMo evento de serviço"
+#define D_WEMO_META_SERVICE "WeMo serviço meta"
+#define D_WEMO_SETUP "WeMo configuração"
+#define D_RESPONSE_SENT "Resposta enviada"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Configuração do Hue"
+#define D_HUE_API_NOT_IMPLEMENTED "API Hue nao implementada"
+#define D_HUE_API "API Hue"
+#define D_HUE_POST_ARGS "Argumentos de POST HUE"
+#define D_3_RESPONSE_PACKETS_SENT "3 pacotes de resposta enviados"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Parametros Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Chave idx"
+#define D_DOMOTICZ_SWITCH_IDX "Interruptor idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Potência,Energia"
+ #define D_DOMOTICZ_ILLUMINANCE "Luminâcia"
+ #define D_DOMOTICZ_COUNT "Contagem/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltagem/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Corrente/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Qualidade do Ar"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Temporizador de atualização"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configurar temporizador"
+#define D_TIMER_PARAMETERS "Parâmetros do temporizador"
+#define D_TIMER_ENABLE "Habilitar Temporizadores"
+#define D_TIMER_ARM "Armar"
+#define D_TIMER_TIME "Tempo"
+#define D_TIMER_DAYS "Dias"
+#define D_TIMER_REPEAT "Repetir"
+#define D_TIMER_OUTPUT "Aaída"
+#define D_TIMER_ACTION "Açao"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configurar KNX"
+#define D_KNX_PARAMETERS "Parâmetros KNX"
+#define D_KNX_GENERAL_CONFIG "Geral"
+#define D_KNX_PHYSICAL_ADDRESS "Endereço físico"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Deve ser exclusivo na rede KNX )"
+#define D_KNX_ENABLE "Habilitar KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dados para enviar para Endereços de Grupo"
+#define D_ADD "Adicionar"
+#define D_DELETE "Remover"
+#define D_REPLY "Responder"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Endereços de Grupo de onde receber dados"
+#define D_RECEIVED_FROM "Recebido de"
+#define D_KNX_COMMAND_WRITE "Escrever"
+#define D_KNX_COMMAND_READ "Ler"
+#define D_KNX_COMMAND_OTHER "Outro"
+#define D_SENT_TO "enviar para"
+#define D_KNX_WARNING "O Endereço de Grupo ( 0 / 0 / 0 ) está reservado e não pode ser usado."
+#define D_KNX_ENHANCEMENT "Melhoria de Comunicação"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Consumo energético de hoje"
+#define D_ENERGY_YESTERDAY "Consumo energético de ontem"
+#define D_ENERGY_TOTAL "Consumo energético total"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Abrir"
+#define D_CLOSE "Fechar"
+#define D_DOMOTICZ_SHUTTER "Estore"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configurar PCF8574"
+#define D_PCF8574_PARAMETERS "Parâmetros PCF8574"
+#define D_INVERT_PORTS "Inverter Portas"
+#define D_DEVICE "Dispositivo"
+#define D_DEVICE_INPUT "Entrada"
+#define D_DEVICE_OUTPUT "Saída"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor ocupado"
+#define D_SENSOR_CRC_ERROR "Erro no CRC do sensor"
+#define D_SENSORS_FOUND "Sensores encontrados"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Fim do tempo de espera"
+#define D_START_SIGNAL_LOW "Sinal de início baixo"
+#define D_START_SIGNAL_HIGH "Sinal de início elevado"
+#define D_PULSE "pulso"
+#define D_CHECKSUM_FAILURE "Falha na soma de verificação"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor não aceitou o comando ACK"
+#define D_SHT1X_FOUND "SHT1X encontrado"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Partículas"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remover peso"
+#define D_HX_CAL_REFERENCE "Carregar peso de referência"
+#define D_HX_CAL_DONE "Calibrado"
+#define D_HX_CAL_FAIL "Falha na calibração"
+#define D_RESET_HX711 "Reiniciar balança"
+#define D_CONFIGURE_HX711 "Configurar balança"
+#define D_HX711_PARAMETERS "Parâmetros da balança"
+#define D_ITEM_WEIGHT "Peso do item"
+#define D_REFERENCE_WEIGHT "Peso de referência"
+#define D_CALIBRATE "Calibrar"
+#define D_CALIBRATION "Calibração"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Direção do vento"
+#define D_TX20_WIND_SPEED "Velocidade do vento"
+#define D_TX20_WIND_SPEED_AVG "Velocidade média do vento"
+#define D_TX20_WIND_SPEED_MAX "Velocidade máxima do vento"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "O"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Interruptor" // Suffix "1"
+#define D_SENSOR_BUTTON "Botão" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Contador" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Luz fundo"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "Sensor RF"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotativo" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "setores"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Ângulo de fase"
+#define D_IMPORT_ACTIVE "Ativo importado"
+#define D_EXPORT_ACTIVE "Ativo exportado"
+#define D_IMPORT_REACTIVE "Reativo importado"
+#define D_EXPORT_REACTIVE "Reativo exportado"
+#define D_TOTAL_REACTIVE "Reactivo total"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "Voltagem PV1"
+#define D_PV1_CURRENT "Corrente PV1"
+#define D_PV1_POWER "Potência PV1"
+#define D_PV2_VOLTAGE "Voltagem PV2"
+#define D_PV2_CURRENT "Corrente PV2"
+#define D_PV2_POWER "Potência PV2"
+#define D_SOLAR_POWER "Potência Solar"
+#define D_INVERTER_POWER "Potência do Inversor"
+#define D_STATUS "Estado"
+#define D_WAITING "Esperando"
+#define D_CHECKING "Verificando"
+#define D_WORKING "Trabalhando"
+#define D_FAILURE "Falha"
+#define D_SOLAX_ERROR_0 "Nenhum código de erro"
+#define D_SOLAX_ERROR_1 "Falha devido a perda de rede"
+#define D_SOLAX_ERROR_2 "Falha devido a perda de tensão"
+#define D_SOLAX_ERROR_3 "Falha devido a perda de frequência"
+#define D_SOLAX_ERROR_4 "Falha de tensão de Pv"
+#define D_SOLAX_ERROR_5 "Falha de isolamento"
+#define D_SOLAX_ERROR_6 "Falha de temperatura excessiva"
+#define D_SOLAX_ERROR_7 "Falha no ventilador"
+#define D_SOLAX_ERROR_8 "Outra falha no dispositivo"
+
+#endif // _LANGUAGE_PT_PT_H_
diff --git a/tasmota/language/ru-RU.h b/tasmota/language/ru-RU.h
index 3bd788ede..a603216a9 100644
--- a/tasmota/language/ru-RU.h
+++ b/tasmota/language/ru-RU.h
@@ -1,701 +1,703 @@
-/*
- ru-RU.h - localization for Russian - Rissia for Tasmota
-
- Copyright (C) 2019 Theo Arends / roman-vn
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_RU_RU_H_
-#define _LANGUAGE_RU_RU_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.12.0b
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1049
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "ru"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "ВскПонВтрСрдЧетПятСуб"
-#define D_MONTH3LIST "ЯнвФевМарАпрМайИюнИюлАвгСенОктНояДек"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Качество воздуха"
-#define D_AP "AP" // Access Point
-#define D_AS "как"
-#define D_AUTO "АВТО"
-#define D_BLINK "Мигать"
-#define D_BLINKOFF "Не Мигать"
-#define D_BOOT_COUNT "Количество загрузок"
-#define D_BRIGHTLIGHT "Яркость"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Кнопка"
-#define D_BY "by" // Written by me
-#define D_BYTES "Байт"
-#define D_CELSIUS "Цельсия"
-#define D_CHANNEL "Channel"
-#define D_CO2 "Углекислый газ"
-#define D_CODE "код" // Button code
-#define D_COLDLIGHT "Холодный"
-#define D_COMMAND "Команда"
-#define D_CONNECTED "Соединен"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Подсчет"
-#define D_COUNTER "Счетчик"
-#define D_CURRENT "Ток" // As in Voltage and Current
-#define D_DATA "Данные"
-#define D_DARKLIGHT "Темный"
-#define D_DEBUG "Отладка"
-#define D_DISABLED "Блокирован"
-#define D_DISTANCE "Distance"
-#define D_DNS_SERVER "DNS Сервер"
-#define D_DONE "Выполнено"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Эмуляция"
-#define D_ENABLED "Активно"
-#define D_ERASE "Стирать"
-#define D_ERROR "Ошибка"
-#define D_FAHRENHEIT "Фаренгейт"
-#define D_FAILED "Неудачно"
-#define D_FALLBACK "Обратная связь"
-#define D_FALLBACK_TOPIC "Топик обратной связи"
-#define D_FALSE "Ложно"
-#define D_FILE "Файл"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Свободная память"
-#define D_FREQUENCY "Frequency"
-#define D_GAS "Газ"
-#define D_GATEWAY "Шлюз"
-#define D_GROUP "Группа"
-#define D_HOST "Хост"
-#define D_HOSTNAME "Имя Хоста"
-#define D_HUMIDITY "Влажность"
-#define D_ILLUMINANCE "Освещенность"
-#define D_IMMEDIATE "немедленно" // Button immediate
-#define D_INDEX "Индекс"
-#define D_INFO "Инфо"
-#define D_INFRARED "Infrared"
-#define D_INITIALIZED "Инициализировано"
-#define D_IP_ADDRESS "IP Адрес"
-#define D_LIGHT "Свет"
-#define D_LWT "LWT"
-#define D_MODULE "Модуль"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "многократное нажатие"
-#define D_NOISE "Шум"
-#define D_NONE "Нет"
-#define D_OFF "Выкл"
-#define D_OFFLINE "Офф-лайн"
-#define D_OK "Ок"
-#define D_ON "Вкл"
-#define D_ONLINE "Он-лайн"
-#define D_PASSWORD "Пароль"
-#define D_PORT "Порт"
-#define D_POWER_FACTOR "Коэффициент Мощности"
-#define D_POWERUSAGE "Мощность"
-#define D_POWERUSAGE_ACTIVE "Active Power"
-#define D_POWERUSAGE_APPARENT "Apparent Power"
-#define D_POWERUSAGE_REACTIVE "Reactive Power"
-#define D_PRESSURE "Давление"
-#define D_PRESSUREATSEALEVEL "Давление на уровне моря"
-#define D_PROGRAM_FLASH_SIZE "Размер Flash для программ"
-#define D_PROGRAM_SIZE "Размер программы "
-#define D_PROJECT "Проект"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Получено"
-#define D_RESTART "Перезапуск"
-#define D_RESTARTING "Перезапуск"
-#define D_RESTART_REASON "Причина перезагрузки"
-#define D_RESTORE "восстановление"
-#define D_RETAINED "нераспред."
-#define D_RULE "Rule"
-#define D_SAVE "Сохранить"
-#define D_SENSOR "Датчик"
-#define D_SSID "SSId"
-#define D_START "Старт"
-#define D_STD_TIME "STD"
-#define D_STOP "Стоп"
-#define D_SUBNET_MASK "Маска Подсети"
-#define D_SUBSCRIBE_TO "Подписаться на"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Успешно"
-#define D_SUNRISE "Sunrise"
-#define D_SUNSET "Sunset"
-#define D_TEMPERATURE "Температура"
-#define D_TO "до"
-#define D_TOGGLE "Переключить"
-#define D_TOPIC "Топик"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Передать"
-#define D_TRUE "Истина"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "обновление"
-#define D_UPLOAD "Загрузить"
-#define D_UPTIME "Uptime"
-#define D_USER "Пользователь"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Low"
-#define D_UV_INDEX_2 "Mid"
-#define D_UV_INDEX_3 "High"
-#define D_UV_INDEX_4 "Danger"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "УФ уровень"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Версия"
-#define D_VOLTAGE "Напряжение"
-#define D_WEIGHT "Weight"
-#define D_WARMLIGHT "Тепло"
-#define D_WEB_SERVER "Web сервер"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ПРЕДУПРЕЖДЕНИЕ Эта версия не поддерживает персистентные настройки"
-#define D_LEVEL_10 "уровень 1-0"
-#define D_LEVEL_01 "уровень 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serial logging отключен"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog logging включен"
-
-#define D_SET_BAUDRATE_TO "Установить скорость передачи (Baudrate)"
-#define D_RECEIVED_TOPIC "Полученный Топик"
-#define D_DATA_SIZE "Размер данных"
-#define D_ANALOG_INPUT "Аналоговый вход"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Блокирующий цикл"
-#define D_WPS_FAILED_WITH_STATUS "WPS конфигурация НЕУДАЧНА со статусом"
-#define D_ACTIVE_FOR_3_MINUTES "активен в течение 3 минут"
-#define D_FAILED_TO_START "не удалось запустить"
-#define D_PATCH_ISSUE_2186 "Проблема с исправлением 2186"
-#define D_CONNECTING_TO_AP "Подключение к AP"
-#define D_IN_MODE "в режиме"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Ошибка подключения, IP-адрес не получен"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Ошибка соединения, AP не может быть достигнута"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Ошибка соединения, неверный пароль к AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Ошибка соединения с AP по тайм-ауту"
-#define D_ATTEMPTING_CONNECTION "Попытка подключения..."
-#define D_CHECKING_CONNECTION "Проверка соединения..."
-#define D_QUERY_DONE "Запрос выполнен. Обнаружены службы MQTT"
-#define D_MQTT_SERVICE_FOUND "MQTT сервис service найдено"
-#define D_FOUND_AT "найдено в"
-#define D_SYSLOG_HOST_NOT_FOUND "System лог хост не найден"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Сохранено во флэш-память"
-#define D_LOADED_FROM_FLASH_AT "Загружено из флэш-памяти"
-#define D_USE_DEFAULTS "Использовать значение по умолчанию"
-#define D_ERASED_SECTOR "Стереть сектор"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Прошивка MINIMAL
пожалуйста обновите"
-#define D_WEBSERVER_ACTIVE_ON "Веб-сервер активен"
-#define D_WITH_IP_ADDRESS "с IP-адресом"
-#define D_WEBSERVER_STOPPED "Веб-сервер остановлен"
-#define D_FILE_NOT_FOUND "Файл не найден"
-#define D_REDIRECTED "Перенаправлено на адаптивный портал"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi менеджер устанавливает Точку Доступа и сохраняет станцию"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi менеджер установил Точку Доступа"
-#define D_TRYING_TO_CONNECT "Попытка подключения устройства к сети"
-
-#define D_RESTART_IN "Перезапуск"
-#define D_SECONDS "секунд"
-#define D_DEVICE_WILL_RESTART "Устройство будет перезапущено через несколько секунд"
-#define D_BUTTON_TOGGLE "Переключить"
-#define D_CONFIGURATION "Конфигурация"
-#define D_INFORMATION "Информация"
-#define D_FIRMWARE_UPGRADE "Обновление прошивки"
-#define D_CONSOLE "Консоль"
-#define D_CONFIRM_RESTART "Подтвердить перезагрузку"
-
-#define D_CONFIGURE_MODULE "Конфигурация Модуля"
-#define D_CONFIGURE_WIFI "Конфигурация WiFi"
-#define D_CONFIGURE_MQTT "Конфигурация MQTT"
-#define D_CONFIGURE_DOMOTICZ "Конфигурация Domoticz"
-#define D_CONFIGURE_LOGGING "Конфигурация Logging"
-#define D_CONFIGURE_OTHER "Конфигурация прочее"
-#define D_CONFIRM_RESET_CONFIGURATION "Подтвердить Сброс Конфигурации"
-#define D_RESET_CONFIGURATION "Сброс Конфигурации"
-#define D_BACKUP_CONFIGURATION "Резервное копирование Конфигурации"
-#define D_RESTORE_CONFIGURATION "Восстановление Конфигурации"
-#define D_MAIN_MENU "Главное Меню"
-
-#define D_MODULE_PARAMETERS "Параметры модуля"
-#define D_MODULE_TYPE "Тип модуля"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial вход"
-#define D_SERIAL_OUT "Serial выход"
-
-#define D_WIFI_PARAMETERS "Параметры Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Сканирование беспроводных сетей Wifi"
-#define D_SCAN_DONE "Сканирование завершено"
-#define D_NO_NETWORKS_FOUND "Не найдено сетей"
-#define D_REFRESH_TO_SCAN_AGAIN "Обновить для повторного сканирования"
-#define D_DUPLICATE_ACCESSPOINT "Дублировать Точку Доступа (AP)"
-#define D_SKIPPING_LOW_QUALITY "Пропущено из-за низкого качества"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Пароль"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Пароль"
-
-#define D_MQTT_PARAMETERS "Параметры MQTT"
-#define D_CLIENT "Клиент"
-#define D_FULL_TOPIC "Полный Топик"
-
-#define D_LOGGING_PARAMETERS "Параметры Logging"
-#define D_SERIAL_LOG_LEVEL "Serial лог уровень"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web лог уровень"
-#define D_SYS_LOG_LEVEL "System лог уровень"
-#define D_MORE_DEBUG "Дополнительная информация для отладки"
-#define D_SYSLOG_HOST "System лог хост"
-#define D_SYSLOG_PORT "System лог порт"
-#define D_TELEMETRY_PERIOD "Период телеметрии"
-
-#define D_OTHER_PARAMETERS "Параметры Прочие"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Пароль Web администратора"
-#define D_MQTT_ENABLE "MQTT активен"
-#define D_FRIENDLY_NAME "Дружественное Имя"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "одиночное"
-#define D_MULTI_DEVICE "мульти"
-
-#define D_CONFIGURE_TEMPLATE "Конфигурация Template"
-#define D_TEMPLATE_PARAMETERS "Параметры Template"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Сохранить конфигурацию"
-#define D_CONFIGURATION_SAVED "Конфигурация сохранена "
-#define D_CONFIGURATION_RESET "Конфигурация сброшена"
-
-#define D_PROGRAM_VERSION "Версия программы"
-#define D_BUILD_DATE_AND_TIME "Дата & Время сборки"
-#define D_CORE_AND_SDK_VERSION "Версия Core/SDK"
-#define D_FLASH_WRITE_COUNT "Кол-во записей Flash"
-#define D_MAC_ADDRESS "MAC Адрес"
-#define D_MQTT_HOST "MQTT Хост"
-#define D_MQTT_PORT "MQTT Порт"
-#define D_MQTT_CLIENT "MQTT Клиент ID"
-#define D_MQTT_USER "MQTT Пользователь"
-#define D_MQTT_TOPIC "MQTT Топик"
-#define D_MQTT_GROUP_TOPIC "MQTT Топик группы"
-#define D_MQTT_FULL_TOPIC "MQTT Топик полный"
-#define D_MDNS_DISCOVERY "mDNS Обнаружение"
-#define D_MDNS_ADVERTISE "mDNS Транcляция"
-#define D_ESP_CHIP_ID "ID чипа ESP"
-#define D_FLASH_CHIP_ID "ID чипа Flash памяти"
-#define D_FLASH_CHIP_SIZE "Размер Flash памяти"
-#define D_FREE_PROGRAM_SPACE "Свободное пространство программ"
-
-#define D_UPGRADE_BY_WEBSERVER "Обновление через Веб-сервер"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Начать обновление"
-#define D_UPGRADE_BY_FILE_UPLOAD "Обновление путем загрузки файлов"
-#define D_UPLOAD_STARTED "Загрузка началась"
-#define D_UPGRADE_STARTED "Обновление началось"
-#define D_UPLOAD_DONE "Загрузка завершена"
-#define D_UPLOAD_ERR_1 "Файл не выбран"
-#define D_UPLOAD_ERR_2 "Недостаточно места"
-#define D_UPLOAD_ERR_3 "Magic байт не 0xE9"
-#define D_UPLOAD_ERR_4 "Размер прошивки больше, чем реальный размер флеш памяти"
-#define D_UPLOAD_ERR_5 "Ошибка загрузки буфера"
-#define D_UPLOAD_ERR_6 "Ошибка загрузки. Включено лог уровня 3"
-#define D_UPLOAD_ERR_7 "Загрузка прервана"
-#define D_UPLOAD_ERR_8 "Файл неверный"
-#define D_UPLOAD_ERR_9 "Слишком большой файл"
-#define D_UPLOAD_ERR_10 "Failed to init RF chip"
-#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
-#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
-#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
-#define D_UPLOAD_ERROR_CODE "Код ошибки загрузки"
-
-#define D_ENTER_COMMAND "Введите команду"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Включить Веб лог уровня 2 если ожидается ответ"
-#define D_NEED_USER_AND_PASSWORD "Ожидается user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Проверка TLS Fingerprint..."
-#define D_TLS_CONNECT_FAILED_TO "Сбой подключения TLS к"
-#define D_RETRY_IN "Повторить"
-#define D_VERIFIED "Проверено Fingerprint"
-#define D_INSECURE "Небезопасное соединение, недействительный Fingerprint"
-#define D_CONNECT_FAILED_TO "Ошибка подключения к"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast отключен"
-#define D_MULTICAST_REJOINED "Multicast (ре)соединился"
-#define D_MULTICAST_JOIN_FAILED "Multicast ошибка соединения"
-#define D_FAILED_TO_SEND_RESPONSE "Не удалось отправить ответ"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo основное событие"
-#define D_WEMO_EVENT_SERVICE "WeMo служба событий"
-#define D_WEMO_META_SERVICE "WeMo мета-сервис"
-#define D_WEMO_SETUP "WeMo настройка"
-#define D_RESPONSE_SENT "Ответ отправлен"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue настройка"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API не реализовано"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 ответных пакета получено"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Параметры Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2,5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Конфигурация Timer"
-#define D_TIMER_PARAMETERS "Параметры Timer"
-#define D_TIMER_ENABLE "Enable Timers"
-#define D_TIMER_ARM "Arm"
-#define D_TIMER_TIME "Time"
-#define D_TIMER_DAYS "Days"
-#define D_TIMER_REPEAT "Repeat"
-#define D_TIMER_OUTPUT "Output"
-#define D_TIMER_ACTION "Action"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Конфигурация KNX"
-#define D_KNX_PARAMETERS "Параметры KNX"
-#define D_KNX_GENERAL_CONFIG "General"
-#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
-#define D_KNX_ENABLE "Enable KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
-#define D_ADD "Add"
-#define D_DELETE "Delete"
-#define D_REPLY "Reply"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
-#define D_RECEIVED_FROM "Received from"
-#define D_KNX_COMMAND_WRITE "Write"
-#define D_KNX_COMMAND_READ "Read"
-#define D_KNX_COMMAND_OTHER "Other"
-#define D_SENT_TO "sent to"
-#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Энергия Сегодня"
-#define D_ENERGY_YESTERDAY "Энергия Вчера"
-#define D_ENERGY_TOTAL "Энергия Всего"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Датчик DS18x20 занят"
-#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - ошибка CRC"
-#define D_SENSORS_FOUND "Датчик DS18x20 найден"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Тайм-аут, в ожидании"
-#define D_START_SIGNAL_LOW "сигнал старт низкий"
-#define D_START_SIGNAL_HIGH "сигнал старт высокий"
-#define D_PULSE "пульс"
-#define D_CHECKSUM_FAILURE "Ошибка контрольной суммы"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчик не получил команду ACK"
-#define D_SHT1X_FOUND "SHT1X найден"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particals"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remove weigth"
-#define D_HX_CAL_REFERENCE "Load reference weigth"
-#define D_HX_CAL_DONE "Calibrated"
-#define D_HX_CAL_FAIL "Calibration failed"
-#define D_RESET_HX711 "Reset Scale"
-#define D_CONFIGURE_HX711 "Configure Scale"
-#define D_HX711_PARAMETERS "Scale parameters"
-#define D_ITEM_WEIGHT "Item weight"
-#define D_REFERENCE_WEIGHT "Reference weigth"
-#define D_CALIBRATE "Calibrate"
-#define D_CALIBRATION "Calibration"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Wind Direction"
-#define D_TX20_WIND_SPEED "Wind Speed"
-#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
-#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Свич" // Suffix "1"
-#define D_SENSOR_BUTTON "Кнопка" // Suffix "1"
-#define D_SENSOR_RELAY "Реле" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Счетчик" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "А"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Ч"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "кОм"
-#define D_UNIT_KILOWATTHOUR "кВт"
-#define D_UNIT_LUX "лк"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "мкг/м3"
-#define D_UNIT_MICROMETER "мкм"
-#define D_UNIT_MICROSECOND "мкс"
-#define D_UNIT_MILLIAMPERE "мА"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "мм рт.ст."
-#define D_UNIT_MILLISECOND "мс"
-#define D_UNIT_MINUTE "мин"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "гПа"
-#define D_UNIT_SECOND "сек"
-#define D_UNIT_SECTORS "секторов"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "В"
-#define D_UNIT_WATT "Вт"
-#define D_UNIT_WATTHOUR "ВтЧ"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Угол фазы"
-#define D_IMPORT_ACTIVE "Импорт активной мощности"
-#define D_EXPORT_ACTIVE "Экспорт активной мощности"
-#define D_IMPORT_REACTIVE "Импорт реактивной мощности"
-#define D_EXPORT_REACTIVE "Экспорт реактивной мощности"
-#define D_TOTAL_REACTIVE "Итого реактивная мощность"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Град"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_RU_RU_H_
+/*
+ ru-RU.h - localization for Russian - Rissia for Tasmota
+
+ Copyright (C) 2019 Theo Arends / roman-vn
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_RU_RU_H_
+#define _LANGUAGE_RU_RU_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.12.0b
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1049
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "ru"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "ВскПонВтрСрдЧетПятСуб"
+#define D_MONTH3LIST "ЯнвФевМарАпрМайИюнИюлАвгСенОктНояДек"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Качество воздуха"
+#define D_AP "AP" // Access Point
+#define D_AS "как"
+#define D_AUTO "АВТО"
+#define D_BLINK "Мигать"
+#define D_BLINKOFF "Не Мигать"
+#define D_BOOT_COUNT "Количество загрузок"
+#define D_BRIGHTLIGHT "Яркость"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Кнопка"
+#define D_BY "by" // Written by me
+#define D_BYTES "Байт"
+#define D_CELSIUS "Цельсия"
+#define D_CHANNEL "Channel"
+#define D_CO2 "Углекислый газ"
+#define D_CODE "код" // Button code
+#define D_COLDLIGHT "Холодный"
+#define D_COMMAND "Команда"
+#define D_CONNECTED "Соединен"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Подсчет"
+#define D_COUNTER "Счетчик"
+#define D_CURRENT "Ток" // As in Voltage and Current
+#define D_DATA "Данные"
+#define D_DARKLIGHT "Темный"
+#define D_DEBUG "Отладка"
+#define D_DISABLED "Блокирован"
+#define D_DISTANCE "Distance"
+#define D_DNS_SERVER "DNS Сервер"
+#define D_DONE "Выполнено"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Эмуляция"
+#define D_ENABLED "Активно"
+#define D_ERASE "Стирать"
+#define D_ERROR "Ошибка"
+#define D_FAHRENHEIT "Фаренгейт"
+#define D_FAILED "Неудачно"
+#define D_FALLBACK "Обратная связь"
+#define D_FALLBACK_TOPIC "Топик обратной связи"
+#define D_FALSE "Ложно"
+#define D_FILE "Файл"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Свободная память"
+#define D_FREQUENCY "Frequency"
+#define D_GAS "Газ"
+#define D_GATEWAY "Шлюз"
+#define D_GROUP "Группа"
+#define D_HOST "Хост"
+#define D_HOSTNAME "Имя Хоста"
+#define D_HUMIDITY "Влажность"
+#define D_ILLUMINANCE "Освещенность"
+#define D_IMMEDIATE "немедленно" // Button immediate
+#define D_INDEX "Индекс"
+#define D_INFO "Инфо"
+#define D_INFRARED "Infrared"
+#define D_INITIALIZED "Инициализировано"
+#define D_IP_ADDRESS "IP Адрес"
+#define D_LIGHT "Свет"
+#define D_LWT "LWT"
+#define D_MODULE "Модуль"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "многократное нажатие"
+#define D_NOISE "Шум"
+#define D_NONE "Нет"
+#define D_OFF "Выкл"
+#define D_OFFLINE "Офф-лайн"
+#define D_OK "Ок"
+#define D_ON "Вкл"
+#define D_ONLINE "Он-лайн"
+#define D_PASSWORD "Пароль"
+#define D_PORT "Порт"
+#define D_POWER_FACTOR "Коэффициент Мощности"
+#define D_POWERUSAGE "Мощность"
+#define D_POWERUSAGE_ACTIVE "Active Power"
+#define D_POWERUSAGE_APPARENT "Apparent Power"
+#define D_POWERUSAGE_REACTIVE "Reactive Power"
+#define D_PRESSURE "Давление"
+#define D_PRESSUREATSEALEVEL "Давление на уровне моря"
+#define D_PROGRAM_FLASH_SIZE "Размер Flash для программ"
+#define D_PROGRAM_SIZE "Размер программы "
+#define D_PROJECT "Проект"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Получено"
+#define D_RESTART "Перезапуск"
+#define D_RESTARTING "Перезапуск"
+#define D_RESTART_REASON "Причина перезагрузки"
+#define D_RESTORE "восстановление"
+#define D_RETAINED "нераспред."
+#define D_RULE "Rule"
+#define D_SAVE "Сохранить"
+#define D_SENSOR "Датчик"
+#define D_SSID "SSId"
+#define D_START "Старт"
+#define D_STD_TIME "STD"
+#define D_STOP "Стоп"
+#define D_SUBNET_MASK "Маска Подсети"
+#define D_SUBSCRIBE_TO "Подписаться на"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Успешно"
+#define D_SUNRISE "Sunrise"
+#define D_SUNSET "Sunset"
+#define D_TEMPERATURE "Температура"
+#define D_TO "до"
+#define D_TOGGLE "Переключить"
+#define D_TOPIC "Топик"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Передать"
+#define D_TRUE "Истина"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "обновление"
+#define D_UPLOAD "Загрузить"
+#define D_UPTIME "Uptime"
+#define D_USER "Пользователь"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Low"
+#define D_UV_INDEX_2 "Mid"
+#define D_UV_INDEX_3 "High"
+#define D_UV_INDEX_4 "Danger"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "УФ уровень"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Версия"
+#define D_VOLTAGE "Напряжение"
+#define D_WEIGHT "Weight"
+#define D_WARMLIGHT "Тепло"
+#define D_WEB_SERVER "Web сервер"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ПРЕДУПРЕЖДЕНИЕ Эта версия не поддерживает персистентные настройки"
+#define D_LEVEL_10 "уровень 1-0"
+#define D_LEVEL_01 "уровень 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serial logging отключен"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog logging включен"
+
+#define D_SET_BAUDRATE_TO "Установить скорость передачи (Baudrate)"
+#define D_RECEIVED_TOPIC "Полученный Топик"
+#define D_DATA_SIZE "Размер данных"
+#define D_ANALOG_INPUT "Аналоговый вход"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Блокирующий цикл"
+#define D_WPS_FAILED_WITH_STATUS "WPS конфигурация НЕУДАЧНА со статусом"
+#define D_ACTIVE_FOR_3_MINUTES "активен в течение 3 минут"
+#define D_FAILED_TO_START "не удалось запустить"
+#define D_PATCH_ISSUE_2186 "Проблема с исправлением 2186"
+#define D_CONNECTING_TO_AP "Подключение к AP"
+#define D_IN_MODE "в режиме"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Ошибка подключения, IP-адрес не получен"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Ошибка соединения, AP не может быть достигнута"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Ошибка соединения, неверный пароль к AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Ошибка соединения с AP по тайм-ауту"
+#define D_ATTEMPTING_CONNECTION "Попытка подключения..."
+#define D_CHECKING_CONNECTION "Проверка соединения..."
+#define D_QUERY_DONE "Запрос выполнен. Обнаружены службы MQTT"
+#define D_MQTT_SERVICE_FOUND "MQTT сервис service найдено"
+#define D_FOUND_AT "найдено в"
+#define D_SYSLOG_HOST_NOT_FOUND "System лог хост не найден"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Сохранено во флэш-память"
+#define D_LOADED_FROM_FLASH_AT "Загружено из флэш-памяти"
+#define D_USE_DEFAULTS "Использовать значение по умолчанию"
+#define D_ERASED_SECTOR "Стереть сектор"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Прошивка MINIMAL
пожалуйста обновите"
+#define D_WEBSERVER_ACTIVE_ON "Веб-сервер активен"
+#define D_WITH_IP_ADDRESS "с IP-адресом"
+#define D_WEBSERVER_STOPPED "Веб-сервер остановлен"
+#define D_FILE_NOT_FOUND "Файл не найден"
+#define D_REDIRECTED "Перенаправлено на адаптивный портал"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi менеджер устанавливает Точку Доступа и сохраняет станцию"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi менеджер установил Точку Доступа"
+#define D_TRYING_TO_CONNECT "Попытка подключения устройства к сети"
+
+#define D_RESTART_IN "Перезапуск"
+#define D_SECONDS "секунд"
+#define D_DEVICE_WILL_RESTART "Устройство будет перезапущено через несколько секунд"
+#define D_BUTTON_TOGGLE "Переключить"
+#define D_CONFIGURATION "Конфигурация"
+#define D_INFORMATION "Информация"
+#define D_FIRMWARE_UPGRADE "Обновление прошивки"
+#define D_CONSOLE "Консоль"
+#define D_CONFIRM_RESTART "Подтвердить перезагрузку"
+
+#define D_CONFIGURE_MODULE "Конфигурация Модуля"
+#define D_CONFIGURE_WIFI "Конфигурация WiFi"
+#define D_CONFIGURE_MQTT "Конфигурация MQTT"
+#define D_CONFIGURE_DOMOTICZ "Конфигурация Domoticz"
+#define D_CONFIGURE_LOGGING "Конфигурация Logging"
+#define D_CONFIGURE_OTHER "Конфигурация прочее"
+#define D_CONFIRM_RESET_CONFIGURATION "Подтвердить Сброс Конфигурации"
+#define D_RESET_CONFIGURATION "Сброс Конфигурации"
+#define D_BACKUP_CONFIGURATION "Резервное копирование Конфигурации"
+#define D_RESTORE_CONFIGURATION "Восстановление Конфигурации"
+#define D_MAIN_MENU "Главное Меню"
+
+#define D_MODULE_PARAMETERS "Параметры модуля"
+#define D_MODULE_TYPE "Тип модуля"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial вход"
+#define D_SERIAL_OUT "Serial выход"
+
+#define D_WIFI_PARAMETERS "Параметры Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Сканирование беспроводных сетей Wifi"
+#define D_SCAN_DONE "Сканирование завершено"
+#define D_NO_NETWORKS_FOUND "Не найдено сетей"
+#define D_REFRESH_TO_SCAN_AGAIN "Обновить для повторного сканирования"
+#define D_DUPLICATE_ACCESSPOINT "Дублировать Точку Доступа (AP)"
+#define D_SKIPPING_LOW_QUALITY "Пропущено из-за низкого качества"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Пароль"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Пароль"
+
+#define D_MQTT_PARAMETERS "Параметры MQTT"
+#define D_CLIENT "Клиент"
+#define D_FULL_TOPIC "Полный Топик"
+
+#define D_LOGGING_PARAMETERS "Параметры Logging"
+#define D_SERIAL_LOG_LEVEL "Serial лог уровень"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web лог уровень"
+#define D_SYS_LOG_LEVEL "System лог уровень"
+#define D_MORE_DEBUG "Дополнительная информация для отладки"
+#define D_SYSLOG_HOST "System лог хост"
+#define D_SYSLOG_PORT "System лог порт"
+#define D_TELEMETRY_PERIOD "Период телеметрии"
+
+#define D_OTHER_PARAMETERS "Параметры Прочие"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Пароль Web администратора"
+#define D_MQTT_ENABLE "MQTT активен"
+#define D_FRIENDLY_NAME "Дружественное Имя"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "одиночное"
+#define D_MULTI_DEVICE "мульти"
+
+#define D_CONFIGURE_TEMPLATE "Конфигурация Template"
+#define D_TEMPLATE_PARAMETERS "Параметры Template"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Сохранить конфигурацию"
+#define D_CONFIGURATION_SAVED "Конфигурация сохранена "
+#define D_CONFIGURATION_RESET "Конфигурация сброшена"
+
+#define D_PROGRAM_VERSION "Версия программы"
+#define D_BUILD_DATE_AND_TIME "Дата & Время сборки"
+#define D_CORE_AND_SDK_VERSION "Версия Core/SDK"
+#define D_FLASH_WRITE_COUNT "Кол-во записей Flash"
+#define D_MAC_ADDRESS "MAC Адрес"
+#define D_MQTT_HOST "MQTT Хост"
+#define D_MQTT_PORT "MQTT Порт"
+#define D_MQTT_CLIENT "MQTT Клиент ID"
+#define D_MQTT_USER "MQTT Пользователь"
+#define D_MQTT_TOPIC "MQTT Топик"
+#define D_MQTT_GROUP_TOPIC "MQTT Топик группы"
+#define D_MQTT_FULL_TOPIC "MQTT Топик полный"
+#define D_MDNS_DISCOVERY "mDNS Обнаружение"
+#define D_MDNS_ADVERTISE "mDNS Транcляция"
+#define D_ESP_CHIP_ID "ID чипа ESP"
+#define D_FLASH_CHIP_ID "ID чипа Flash памяти"
+#define D_FLASH_CHIP_SIZE "Размер Flash памяти"
+#define D_FREE_PROGRAM_SPACE "Свободное пространство программ"
+
+#define D_UPGRADE_BY_WEBSERVER "Обновление через Веб-сервер"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Начать обновление"
+#define D_UPGRADE_BY_FILE_UPLOAD "Обновление путем загрузки файлов"
+#define D_UPLOAD_STARTED "Загрузка началась"
+#define D_UPGRADE_STARTED "Обновление началось"
+#define D_UPLOAD_DONE "Загрузка завершена"
+#define D_UPLOAD_ERR_1 "Файл не выбран"
+#define D_UPLOAD_ERR_2 "Недостаточно места"
+#define D_UPLOAD_ERR_3 "Magic байт не 0xE9"
+#define D_UPLOAD_ERR_4 "Размер прошивки больше, чем реальный размер флеш памяти"
+#define D_UPLOAD_ERR_5 "Ошибка загрузки буфера"
+#define D_UPLOAD_ERR_6 "Ошибка загрузки. Включено лог уровня 3"
+#define D_UPLOAD_ERR_7 "Загрузка прервана"
+#define D_UPLOAD_ERR_8 "Файл неверный"
+#define D_UPLOAD_ERR_9 "Слишком большой файл"
+#define D_UPLOAD_ERR_10 "Failed to init RF chip"
+#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
+#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
+#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERROR_CODE "Код ошибки загрузки"
+
+#define D_ENTER_COMMAND "Введите команду"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Включить Веб лог уровня 2 если ожидается ответ"
+#define D_NEED_USER_AND_PASSWORD "Ожидается user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Проверка TLS Fingerprint..."
+#define D_TLS_CONNECT_FAILED_TO "Сбой подключения TLS к"
+#define D_RETRY_IN "Повторить"
+#define D_VERIFIED "Проверено Fingerprint"
+#define D_INSECURE "Небезопасное соединение, недействительный Fingerprint"
+#define D_CONNECT_FAILED_TO "Ошибка подключения к"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast отключен"
+#define D_MULTICAST_REJOINED "Multicast (ре)соединился"
+#define D_MULTICAST_JOIN_FAILED "Multicast ошибка соединения"
+#define D_FAILED_TO_SEND_RESPONSE "Не удалось отправить ответ"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo основное событие"
+#define D_WEMO_EVENT_SERVICE "WeMo служба событий"
+#define D_WEMO_META_SERVICE "WeMo мета-сервис"
+#define D_WEMO_SETUP "WeMo настройка"
+#define D_RESPONSE_SENT "Ответ отправлен"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue настройка"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API не реализовано"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 ответных пакета получено"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Параметры Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Конфигурация Timer"
+#define D_TIMER_PARAMETERS "Параметры Timer"
+#define D_TIMER_ENABLE "Enable Timers"
+#define D_TIMER_ARM "Arm"
+#define D_TIMER_TIME "Time"
+#define D_TIMER_DAYS "Days"
+#define D_TIMER_REPEAT "Repeat"
+#define D_TIMER_OUTPUT "Output"
+#define D_TIMER_ACTION "Action"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Конфигурация KNX"
+#define D_KNX_PARAMETERS "Параметры KNX"
+#define D_KNX_GENERAL_CONFIG "General"
+#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
+#define D_KNX_ENABLE "Enable KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
+#define D_ADD "Add"
+#define D_DELETE "Delete"
+#define D_REPLY "Reply"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
+#define D_RECEIVED_FROM "Received from"
+#define D_KNX_COMMAND_WRITE "Write"
+#define D_KNX_COMMAND_READ "Read"
+#define D_KNX_COMMAND_OTHER "Other"
+#define D_SENT_TO "sent to"
+#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Энергия Сегодня"
+#define D_ENERGY_YESTERDAY "Энергия Вчера"
+#define D_ENERGY_TOTAL "Энергия Всего"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Датчик DS18x20 занят"
+#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - ошибка CRC"
+#define D_SENSORS_FOUND "Датчик DS18x20 найден"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Тайм-аут, в ожидании"
+#define D_START_SIGNAL_LOW "сигнал старт низкий"
+#define D_START_SIGNAL_HIGH "сигнал старт высокий"
+#define D_PULSE "пульс"
+#define D_CHECKSUM_FAILURE "Ошибка контрольной суммы"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчик не получил команду ACK"
+#define D_SHT1X_FOUND "SHT1X найден"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particals"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remove weigth"
+#define D_HX_CAL_REFERENCE "Load reference weigth"
+#define D_HX_CAL_DONE "Calibrated"
+#define D_HX_CAL_FAIL "Calibration failed"
+#define D_RESET_HX711 "Reset Scale"
+#define D_CONFIGURE_HX711 "Configure Scale"
+#define D_HX711_PARAMETERS "Scale parameters"
+#define D_ITEM_WEIGHT "Item weight"
+#define D_REFERENCE_WEIGHT "Reference weigth"
+#define D_CALIBRATE "Calibrate"
+#define D_CALIBRATION "Calibration"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Wind Direction"
+#define D_TX20_WIND_SPEED "Wind Speed"
+#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
+#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Свич" // Suffix "1"
+#define D_SENSOR_BUTTON "Кнопка" // Suffix "1"
+#define D_SENSOR_RELAY "Реле" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Счетчик" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "А"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Ч"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "кОм"
+#define D_UNIT_KILOWATTHOUR "кВт"
+#define D_UNIT_LUX "лк"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "мкг/м3"
+#define D_UNIT_MICROMETER "мкм"
+#define D_UNIT_MICROSECOND "мкс"
+#define D_UNIT_MILLIAMPERE "мА"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "мм рт.ст."
+#define D_UNIT_MILLISECOND "мс"
+#define D_UNIT_MINUTE "мин"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "гПа"
+#define D_UNIT_SECOND "сек"
+#define D_UNIT_SECTORS "секторов"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "В"
+#define D_UNIT_WATT "Вт"
+#define D_UNIT_WATTHOUR "ВтЧ"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Угол фазы"
+#define D_IMPORT_ACTIVE "Импорт активной мощности"
+#define D_EXPORT_ACTIVE "Экспорт активной мощности"
+#define D_IMPORT_REACTIVE "Импорт реактивной мощности"
+#define D_EXPORT_REACTIVE "Экспорт реактивной мощности"
+#define D_TOTAL_REACTIVE "Итого реактивная мощность"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Град"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_RU_RU_H_
diff --git a/tasmota/language/sk-SK.h b/tasmota/language/sk-SK.h
index a64e49e01..52540be9c 100644
--- a/tasmota/language/sk-SK.h
+++ b/tasmota/language/sk-SK.h
@@ -1,701 +1,703 @@
-/*
- sk-SK.h - localization for Slovak with diacritics - Slovak for Tasmota
-
- Copyright (C) 2019 Vladimír Jendroľ
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_SK_SK_H_
-#define _LANGUAGE_SK_SK_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.2.1.14
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1029
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "sk"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "Ne Po Ut St Št Pi So"
-#define D_MONTH3LIST "JanFebMarAprMájJúnJúlAugSepOktNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Kvalita vzduchu"
-#define D_AP "AP" // Access Point
-#define D_AS "ako"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blikanie"
-#define D_BLINKOFF "BlikanieVyp"
-#define D_BOOT_COUNT "Počítadlo spustení"
-#define D_BRIGHTLIGHT "Svetlý"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Tlačídlo"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bytov"
-#define D_CELSIUS "°C"
-#define D_CHANNEL "Kanál"
-#define D_CO2 "CO2"
-#define D_CODE "kód" // Button code
-#define D_COLDLIGHT "Studené svetlo"
-#define D_COMMAND "Príkaz"
-#define D_CONNECTED "...pripojené"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Počítaj"
-#define D_COUNTER "Počítadlo"
-#define D_CURRENT "Prúd" // As in Voltage and Current
-#define D_DATA "Dáta"
-#define D_FLOW_RATE "Flow rate"
-#define D_DARKLIGHT "Tmavý"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Zablokované"
-#define D_DISTANCE "Vzdialenosť"
-#define D_DNS_SERVER "Server DNS"
-#define D_DONE "Hotovo"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulácia"
-#define D_ENABLED "Otvorený"
-#define D_ERASE "Zmaž"
-#define D_ERROR "Chyba"
-#define D_FAHRENHEIT "Fahrenheita"
-#define D_FAILED "chyba"
-#define D_FALLBACK "Záložný"
-#define D_FALLBACK_TOPIC "Záložný topic"
-#define D_FALSE "Nepravda"
-#define D_FILE "Súbor"
-#define D_FREE_MEMORY "Voľná pamäť"
-#define D_FREQUENCY "Frekvencia"
-#define D_GAS "Plyn"
-#define D_GATEWAY "Predvolená brána"
-#define D_GROUP "Skupina"
-#define D_HOST "Server"
-#define D_HOSTNAME "Názov servera"
-#define D_HUMIDITY "Vlhkosť"
-#define D_ILLUMINANCE "Osvetlenie"
-#define D_IMMEDIATE "Okamžité" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Informácie"
-#define D_INFRARED "Infračervené"
-#define D_INITIALIZED "Inicializovaný"
-#define D_IP_ADDRESS "Adresa IP"
-#define D_LIGHT "Svetlo"
-#define D_LWT "LWT"
-#define D_MODULE "Modul"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-stlačenie"
-#define D_NOISE "Hluk"
-#define D_NONE "Žiadny"
-#define D_OFF "Vyp."
-#define D_OFFLINE "Neaktívny"
-#define D_OK "OK"
-#define D_ON "Zap."
-#define D_ONLINE "Aktívny"
-#define D_PASSWORD "Heslo"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Účinník"
-#define D_POWERUSAGE "Príkon"
-#define D_POWERUSAGE_ACTIVE "Činný príkon"
-#define D_POWERUSAGE_APPARENT "Zdanlivý príkon"
-#define D_POWERUSAGE_REACTIVE "Jalový príkon"
-#define D_PRESSURE "Tlak"
-#define D_PRESSUREATSEALEVEL "Tlak na hladine mora"
-#define D_PROGRAM_FLASH_SIZE "Veľkosť flash pamäte"
-#define D_PROGRAM_SIZE "Veľkosť programu"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Dážď"
-#define D_RECEIVED "Prijatý"
-#define D_RESTART "Reštart"
-#define D_RESTARTING "Reštartuje sa"
-#define D_RESTART_REASON "Príčina reštartu"
-#define D_RESTORE "Obnoviť"
-#define D_RETAINED "Zachované"
-#define D_RULE "Pravidlo"
-#define D_SAVE "Ulož"
-#define D_SENSOR "Senzor"
-#define D_SSID "SSID"
-#define D_START "Spustiť"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Maska podsiete"
-#define D_SUBSCRIBE_TO "Prihlásiť do"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "úspešné."
-#define D_SUNRISE "Svitanie"
-#define D_SUNSET "Súmrak"
-#define D_TEMPERATURE "Teplota"
-#define D_TO "do"
-#define D_TOGGLE "Prepni"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Odošli"
-#define D_TRUE "Pravda"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "aktualizáciu"
-#define D_UPLOAD "Nahrávanie..."
-#define D_UPTIME "Uptime"
-#define D_USER "Používateľ"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Nízky"
-#define D_UV_INDEX_2 "Stredný"
-#define D_UV_INDEX_3 "Vysoký"
-#define D_UV_INDEX_4 "Nebezpečný"
-#define D_UV_INDEX_5 "Popál1/2"
-#define D_UV_INDEX_6 "Popál3"
-#define D_UV_INDEX_7 "MimoRozsah"
-#define D_UV_LEVEL "úroveň UV"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Verzia"
-#define D_VOLTAGE "Napätie"
-#define D_WEIGHT "Hmotnosť"
-#define D_WARMLIGHT "Teplé svetlo"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "UPOZORNENIE Táto verzia nepodporuje trvalé nastavenia"
-#define D_LEVEL_10 "úroveň 1-0"
-#define D_LEVEL_01 "úroveň 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Logovanie na sériovom porte ukončené"
-#define D_SYSLOG_LOGGING_REENABLED "Obnovený zápis do Syslog"
-
-#define D_SET_BAUDRATE_TO "Nastaviť rýchlosti prenosu na"
-#define D_RECEIVED_TOPIC "Prijatý topic"
-#define D_DATA_SIZE "Veľkosť dát"
-#define D_ANALOG_INPUT "Analógový vstup"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Zablokovanie slučky"
-#define D_WPS_FAILED_WITH_STATUS "Chyba WPSconfig so statusom"
-#define D_ACTIVE_FOR_3_MINUTES "aktívny 3 minúty"
-#define D_FAILED_TO_START "nepodarilo sa spustiť"
-#define D_PATCH_ISSUE_2186 "Chyba 2186"
-#define D_CONNECTING_TO_AP "Pripájanie k AP"
-#define D_IN_MODE "v režime"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba pripojenia, nebola obdržaná IP adresa"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba pripojenia, nedostupný AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba pripojenia, nesprávne heslo pre AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba pripojenia, uplynul AP timeout"
-#define D_ATTEMPTING_CONNECTION "Pripájanie..."
-#define D_CHECKING_CONNECTION "Skúška spojenia..."
-#define D_QUERY_DONE "Vyslanie požiadavky. Nájdená služba MQTT"
-#define D_MQTT_SERVICE_FOUND "Služba MQTT bola nájdená"
-#define D_FOUND_AT "nájdené v"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nebol nájdený"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Uložené do flash pamäte v"
-#define D_LOADED_FROM_FLASH_AT "Stiahnuté z flash pamäte z"
-#define D_USE_DEFAULTS "Použi prednastavené hodnoty"
-#define D_ERASED_SECTOR "Zmazaný sektor"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Pre používanie prostredia Tasmota povoľte JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMÁLNY
prosím aktualizujte"
-#define D_WEBSERVER_ACTIVE_ON "Aktívny Web server"
-#define D_WITH_IP_ADDRESS "na IP adrese"
-#define D_WEBSERVER_STOPPED "Web server zastavený"
-#define D_FILE_NOT_FOUND "Súbor nebol nájdený"
-#define D_REDIRECTED "Presmerovanie na vlastný portál"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wi-Fi manažér nastaví AP a zachová STA"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wi-Fi manažér nastaví Access Point"
-#define D_TRYING_TO_CONNECT "Skúšam pripojiť zariadenie k sieti"
-
-#define D_RESTART_IN "Reštart"
-#define D_SECONDS "sekúnd"
-#define D_DEVICE_WILL_RESTART "Zariadenie bude reštartované behom niekoľkých sekúnd"
-#define D_BUTTON_TOGGLE "Prepínač"
-#define D_CONFIGURATION "Nastavenia"
-#define D_INFORMATION "Informácie"
-#define D_FIRMWARE_UPGRADE "Aktualizácia firmware"
-#define D_CONSOLE "Konzola"
-#define D_CONFIRM_RESTART "Potvrdenie reštartu"
-
-#define D_CONFIGURE_MODULE "Nastavenia modulu"
-#define D_CONFIGURE_WIFI "Nastavenia WiFi"
-#define D_CONFIGURE_MQTT "Nastavenia MQTT"
-#define D_CONFIGURE_DOMOTICZ "Nastavenia Domoticz"
-#define D_CONFIGURE_LOGGING "Nastavenia logovania"
-#define D_CONFIGURE_OTHER "Ostatné nastavenia"
-#define D_CONFIRM_RESET_CONFIGURATION "Potvrdenie resetu nastavení"
-#define D_RESET_CONFIGURATION "Reset nastavení"
-#define D_BACKUP_CONFIGURATION "Záloha nastavení"
-#define D_RESTORE_CONFIGURATION "Obnovenie nastavení"
-#define D_MAIN_MENU "Hlavné menu"
-
-#define D_MODULE_PARAMETERS "Nastavenia modulu"
-#define D_MODULE_TYPE "Typ modulu"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Nastavenia WiFi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Sken WiFi sietí"
-#define D_SCAN_DONE "Sken dokončený"
-#define D_NO_NETWORKS_FOUND "Sieť nebola nájdená"
-#define D_REFRESH_TO_SCAN_AGAIN "Zopakovať sken"
-#define D_DUPLICATE_ACCESSPOINT "Kópia AP"
-#define D_SKIPPING_LOW_QUALITY "Preskočenie z dôvodu kvality signálu"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSID"
-#define D_AP1_PASSWORD "Heslo AP1"
-#define D_AP2_SSID "AP2 SSID"
-#define D_AP2_PASSWORD "Heslo AP2"
-
-#define D_MQTT_PARAMETERS "Nastavenia MQTT"
-#define D_CLIENT "Klient"
-#define D_FULL_TOPIC "Celý topic"
-
-#define D_LOGGING_PARAMETERS "Voľba logovania"
-#define D_SERIAL_LOG_LEVEL "Sériová úroveň logu"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Webová úroveň logu"
-#define D_SYS_LOG_LEVEL "Systemová úroveň logu"
-#define D_MORE_DEBUG "Viac debug informácí"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Interval telemetrie"
-
-#define D_OTHER_PARAMETERS "Ostatné nastavenia"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
-#define D_MQTT_ENABLE "MQTT aktívne"
-#define D_FRIENDLY_NAME "Friendly Name"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "single device"
-#define D_MULTI_DEVICE "multi device"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Ulož nastavenia"
-#define D_CONFIGURATION_SAVED "Nastavenia uložené"
-#define D_CONFIGURATION_RESET "Nastavenia resetované"
-
-#define D_PROGRAM_VERSION "Verzia programu"
-#define D_BUILD_DATE_AND_TIME "Datum a čas kompilácie"
-#define D_CORE_AND_SDK_VERSION "Verzia Core/SDK"
-#define D_FLASH_WRITE_COUNT "Počet zápisov do pamäte"
-#define D_MAC_ADDRESS "Adresa MAC"
-#define D_MQTT_HOST "Host MQTT"
-#define D_MQTT_PORT "Port MQTT"
-#define D_MQTT_CLIENT "Klient MQTT"
-#define D_MQTT_USER "Používateľ MQTT"
-#define D_MQTT_TOPIC "Topic MQTT"
-#define D_MQTT_GROUP_TOPIC "Topic skupiny MQTT"
-#define D_MQTT_FULL_TOPIC "Celý topic MQTT"
-#define D_MDNS_DISCOVERY "Získavanie mDNS"
-#define D_MDNS_ADVERTISE "Rozosielanie mDNS"
-#define D_ESP_CHIP_ID "ID systému ESP"
-#define D_FLASH_CHIP_ID "ID systému flash pamäte"
-#define D_FLASH_CHIP_SIZE "Veľkosť flash"
-#define D_FREE_PROGRAM_SPACE "Voľné místo pre program"
-
-#define D_UPGRADE_BY_WEBSERVER "Aktualizácia z Web serveru"
-#define D_OTA_URL "URL OTA"
-#define D_START_UPGRADE "Spustiť aktualizáciu"
-#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizácia nahraním súboru"
-#define D_UPLOAD_STARTED "Nahrávanie spustené"
-#define D_UPGRADE_STARTED "Aktualizácia spustená"
-#define D_UPLOAD_DONE "Nahrávanie ukončené"
-#define D_UPLOAD_ERR_1 "Súbor nebol vybraný"
-#define D_UPLOAD_ERR_2 "Málo miesta"
-#define D_UPLOAD_ERR_3 "Magický byte má hodnotu inú než 0xE9"
-#define D_UPLOAD_ERR_4 "Veľkosť programu je väčšia než skutočná veľkosť flash pamäte"
-#define D_UPLOAD_ERR_5 "Chyba nahrávania, nesúhlasia porovnávané bity"
-#define D_UPLOAD_ERR_6 "Chyba nahrávania. Spustený zápis do logu na úrovni 3"
-#define D_UPLOAD_ERR_7 "Nahrávanie prerušené"
-#define D_UPLOAD_ERR_8 "Nesprávny súbor"
-#define D_UPLOAD_ERR_9 "Súbor je príliš veľký"
-#define D_UPLOAD_ERR_10 "Chyba inicializácie RF chipu"
-#define D_UPLOAD_ERR_11 "Chyba zmazania RF chipu"
-#define D_UPLOAD_ERR_12 "Chyba pri zápise do RF chipu"
-#define D_UPLOAD_ERR_13 "Chyba dekódovania RF firmwaru"
-#define D_UPLOAD_ERROR_CODE "Chyba nahrávania"
-
-#define D_ENTER_COMMAND "Vlož príkaz"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Zapni úroveň 2 zápisu Weblog, ak je očekávaná odpoveď"
-#define D_NEED_USER_AND_PASSWORD "Vyžadovaný používateľ=&heslo="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifikuj odtlačok TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Nepripojené TLS do"
-#define D_RETRY_IN "Zopakujem o"
-#define D_VERIFIED "Overený odtlačok "
-#define D_INSECURE "Nesprávne pripojenie z dôvodu chybného odtlačku TLS"
-#define D_CONNECT_FAILED_TO "Nepodarilo sa nadviazať spojenie"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast je vypnutý"
-#define D_MULTICAST_REJOINED "Multicast opäť pripojený"
-#define D_MULTICAST_JOIN_FAILED "Multicast neúspešný"
-#define D_FAILED_TO_SEND_RESPONSE "Nepodarilo sa odoslať odpoveď"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo základná udalosť"
-#define D_WEMO_EVENT_SERVICE "WeMo servisná udalosť"
-#define D_WEMO_META_SERVICE "WeMo meta udalosť"
-#define D_WEMO_SETUP "WeMo setup"
-#define D_RESPONSE_SENT "Odpoveď odoslaná"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue setup"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API nie je implementované"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 pakety odpovede odoslané"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Nastavenia Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Spinac idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Vlhk"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Vlhk,Tlak"
- #define D_DOMOTICZ_POWER_ENERGY "Príkon,Energia"
- #define D_DOMOTICZ_ILLUMINANCE "Osvetlenie"
- #define D_DOMOTICZ_COUNT "Počítadlo/PM1"
- #define D_DOMOTICZ_VOLTAGE "Napätie/PM2,5"
- #define D_DOMOTICZ_CURRENT "Prúd/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Aktualizácia časovača"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Nastavenia časovača"
-#define D_TIMER_PARAMETERS "Časovač"
-#define D_TIMER_ENABLE "Povoľ časovače"
-#define D_TIMER_ARM "Aktívne"
-#define D_TIMER_TIME "Čas"
-#define D_TIMER_DAYS "Dni"
-#define D_TIMER_REPEAT "Opakovať"
-#define D_TIMER_OUTPUT "Výstup"
-#define D_TIMER_ACTION "Napájanie"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Nastavenie KNX"
-#define D_KNX_PARAMETERS "KNX parametre"
-#define D_KNX_GENERAL_CONFIG "Všeobecné"
-#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v sieti KNX )"
-#define D_KNX_ENABLE "Povoľ KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dáta na odoslanie na skupinové adresy"
-#define D_ADD "Pridať"
-#define D_DELETE "Zmazať"
-#define D_REPLY "Odpoveď"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pre príjem dát z"
-#define D_RECEIVED_FROM "Prijaté z"
-#define D_KNX_COMMAND_WRITE "Zapíš"
-#define D_KNX_COMMAND_READ "Čítaj"
-#define D_KNX_COMMAND_OTHER "Iné"
-#define D_SENT_TO "pošli"
-#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervovaná a nemôže byť použitá."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Spotreba dnes"
-#define D_ENERGY_YESTERDAY "Spotreba včera"
-#define D_ENERGY_TOTAL "Celková spotreba"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor DS18x20 obsadený"
-#define D_SENSOR_CRC_ERROR "Sensor DS18x20 chyba CRC"
-#define D_SENSORS_FOUND "Nanájdený senzor DS18x20"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Čakanie na"
-#define D_START_SIGNAL_LOW "nízký štartovací signál"
-#define D_START_SIGNAL_HIGH "vysoký štartovací signál"
-#define D_PULSE "impulz"
-#define D_CHECKSUM_FAILURE "Chybný kontrolný súčet"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Senzor neobdržal príkaz ACK"
-#define D_SHT1X_FOUND "SHT1X nanájdený"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "častíc"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. os-X"
-#define D_AY_AXIS "Accel. os-Y"
-#define D_AZ_AXIS "Accel. os-Z"
-#define D_GX_AXIS "Gyro os-X"
-#define D_GY_AXIS "Gyro os-Y"
-#define D_GZ_AXIS "Gyro os-Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Odstráňte záťaž"
-#define D_HX_CAL_REFERENCE "Vložte referenčnú záťaž"
-#define D_HX_CAL_DONE "Skalibrováné"
-#define D_HX_CAL_FAIL "Chyba kalibráce"
-#define D_RESET_HX711 "Reset váhy"
-#define D_CONFIGURE_HX711 "Konfiguráce váhy"
-#define D_HX711_PARAMETERS "Parametre váhy"
-#define D_ITEM_WEIGHT "Vlastná hmotnosť"
-#define D_REFERENCE_WEIGHT "Referenčná hmotnosť"
-#define D_CALIBRATE "Kalibruj"
-#define D_CALIBRATION "Kalibrácia"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Smer vetra"
-#define D_TX20_WIND_SPEED "Rýchlosť vetra"
-#define D_TX20_WIND_SPEED_AVG "Priemerná rýchlosť vetra"
-#define D_TX20_WIND_SPEED_MAX "Maximálna rýchlosť vetra"
-#define D_TX20_NORTH "S"
-#define D_TX20_EAST "V"
-#define D_TX20_SOUTH "J"
-#define D_TX20_WEST "Z"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Spínač" // Suffix "1"
-#define D_SENSOR_BUTTON "Tlačidlo" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1",
-#define D_SENSOR_COUNTER "Počítadlo" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Senzor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "hod"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sek"
-#define D_UNIT_SECTORS "sektory"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_SK_SK_H_
+/*
+ sk-SK.h - localization for Slovak with diacritics - Slovak for Tasmota
+
+ Copyright (C) 2019 Vladimír Jendroľ
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_SK_SK_H_
+#define _LANGUAGE_SK_SK_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.2.1.14
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1029
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "sk"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "Ne Po Ut St Št Pi So"
+#define D_MONTH3LIST "JanFebMarAprMájJúnJúlAugSepOktNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Kvalita vzduchu"
+#define D_AP "AP" // Access Point
+#define D_AS "ako"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blikanie"
+#define D_BLINKOFF "BlikanieVyp"
+#define D_BOOT_COUNT "Počítadlo spustení"
+#define D_BRIGHTLIGHT "Svetlý"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Tlačídlo"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bytov"
+#define D_CELSIUS "°C"
+#define D_CHANNEL "Kanál"
+#define D_CO2 "CO2"
+#define D_CODE "kód" // Button code
+#define D_COLDLIGHT "Studené svetlo"
+#define D_COMMAND "Príkaz"
+#define D_CONNECTED "...pripojené"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Počítaj"
+#define D_COUNTER "Počítadlo"
+#define D_CURRENT "Prúd" // As in Voltage and Current
+#define D_DATA "Dáta"
+#define D_FLOW_RATE "Flow rate"
+#define D_DARKLIGHT "Tmavý"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Zablokované"
+#define D_DISTANCE "Vzdialenosť"
+#define D_DNS_SERVER "Server DNS"
+#define D_DONE "Hotovo"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulácia"
+#define D_ENABLED "Otvorený"
+#define D_ERASE "Zmaž"
+#define D_ERROR "Chyba"
+#define D_FAHRENHEIT "Fahrenheita"
+#define D_FAILED "chyba"
+#define D_FALLBACK "Záložný"
+#define D_FALLBACK_TOPIC "Záložný topic"
+#define D_FALSE "Nepravda"
+#define D_FILE "Súbor"
+#define D_FREE_MEMORY "Voľná pamäť"
+#define D_FREQUENCY "Frekvencia"
+#define D_GAS "Plyn"
+#define D_GATEWAY "Predvolená brána"
+#define D_GROUP "Skupina"
+#define D_HOST "Server"
+#define D_HOSTNAME "Názov servera"
+#define D_HUMIDITY "Vlhkosť"
+#define D_ILLUMINANCE "Osvetlenie"
+#define D_IMMEDIATE "Okamžité" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Informácie"
+#define D_INFRARED "Infračervené"
+#define D_INITIALIZED "Inicializovaný"
+#define D_IP_ADDRESS "Adresa IP"
+#define D_LIGHT "Svetlo"
+#define D_LWT "LWT"
+#define D_MODULE "Modul"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-stlačenie"
+#define D_NOISE "Hluk"
+#define D_NONE "Žiadny"
+#define D_OFF "Vyp."
+#define D_OFFLINE "Neaktívny"
+#define D_OK "OK"
+#define D_ON "Zap."
+#define D_ONLINE "Aktívny"
+#define D_PASSWORD "Heslo"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Účinník"
+#define D_POWERUSAGE "Príkon"
+#define D_POWERUSAGE_ACTIVE "Činný príkon"
+#define D_POWERUSAGE_APPARENT "Zdanlivý príkon"
+#define D_POWERUSAGE_REACTIVE "Jalový príkon"
+#define D_PRESSURE "Tlak"
+#define D_PRESSUREATSEALEVEL "Tlak na hladine mora"
+#define D_PROGRAM_FLASH_SIZE "Veľkosť flash pamäte"
+#define D_PROGRAM_SIZE "Veľkosť programu"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Dážď"
+#define D_RECEIVED "Prijatý"
+#define D_RESTART "Reštart"
+#define D_RESTARTING "Reštartuje sa"
+#define D_RESTART_REASON "Príčina reštartu"
+#define D_RESTORE "Obnoviť"
+#define D_RETAINED "Zachované"
+#define D_RULE "Pravidlo"
+#define D_SAVE "Ulož"
+#define D_SENSOR "Senzor"
+#define D_SSID "SSID"
+#define D_START "Spustiť"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Maska podsiete"
+#define D_SUBSCRIBE_TO "Prihlásiť do"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "úspešné."
+#define D_SUNRISE "Svitanie"
+#define D_SUNSET "Súmrak"
+#define D_TEMPERATURE "Teplota"
+#define D_TO "do"
+#define D_TOGGLE "Prepni"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Odošli"
+#define D_TRUE "Pravda"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "aktualizáciu"
+#define D_UPLOAD "Nahrávanie..."
+#define D_UPTIME "Uptime"
+#define D_USER "Používateľ"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Nízky"
+#define D_UV_INDEX_2 "Stredný"
+#define D_UV_INDEX_3 "Vysoký"
+#define D_UV_INDEX_4 "Nebezpečný"
+#define D_UV_INDEX_5 "Popál1/2"
+#define D_UV_INDEX_6 "Popál3"
+#define D_UV_INDEX_7 "MimoRozsah"
+#define D_UV_LEVEL "úroveň UV"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Verzia"
+#define D_VOLTAGE "Napätie"
+#define D_WEIGHT "Hmotnosť"
+#define D_WARMLIGHT "Teplé svetlo"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "UPOZORNENIE Táto verzia nepodporuje trvalé nastavenia"
+#define D_LEVEL_10 "úroveň 1-0"
+#define D_LEVEL_01 "úroveň 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Logovanie na sériovom porte ukončené"
+#define D_SYSLOG_LOGGING_REENABLED "Obnovený zápis do Syslog"
+
+#define D_SET_BAUDRATE_TO "Nastaviť rýchlosti prenosu na"
+#define D_RECEIVED_TOPIC "Prijatý topic"
+#define D_DATA_SIZE "Veľkosť dát"
+#define D_ANALOG_INPUT "Analógový vstup"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Zablokovanie slučky"
+#define D_WPS_FAILED_WITH_STATUS "Chyba WPSconfig so statusom"
+#define D_ACTIVE_FOR_3_MINUTES "aktívny 3 minúty"
+#define D_FAILED_TO_START "nepodarilo sa spustiť"
+#define D_PATCH_ISSUE_2186 "Chyba 2186"
+#define D_CONNECTING_TO_AP "Pripájanie k AP"
+#define D_IN_MODE "v režime"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba pripojenia, nebola obdržaná IP adresa"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba pripojenia, nedostupný AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba pripojenia, nesprávne heslo pre AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba pripojenia, uplynul AP timeout"
+#define D_ATTEMPTING_CONNECTION "Pripájanie..."
+#define D_CHECKING_CONNECTION "Skúška spojenia..."
+#define D_QUERY_DONE "Vyslanie požiadavky. Nájdená služba MQTT"
+#define D_MQTT_SERVICE_FOUND "Služba MQTT bola nájdená"
+#define D_FOUND_AT "nájdené v"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nebol nájdený"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Uložené do flash pamäte v"
+#define D_LOADED_FROM_FLASH_AT "Stiahnuté z flash pamäte z"
+#define D_USE_DEFAULTS "Použi prednastavené hodnoty"
+#define D_ERASED_SECTOR "Zmazaný sektor"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Pre používanie prostredia Tasmota povoľte JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMÁLNY
prosím aktualizujte"
+#define D_WEBSERVER_ACTIVE_ON "Aktívny Web server"
+#define D_WITH_IP_ADDRESS "na IP adrese"
+#define D_WEBSERVER_STOPPED "Web server zastavený"
+#define D_FILE_NOT_FOUND "Súbor nebol nájdený"
+#define D_REDIRECTED "Presmerovanie na vlastný portál"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wi-Fi manažér nastaví AP a zachová STA"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wi-Fi manažér nastaví Access Point"
+#define D_TRYING_TO_CONNECT "Skúšam pripojiť zariadenie k sieti"
+
+#define D_RESTART_IN "Reštart"
+#define D_SECONDS "sekúnd"
+#define D_DEVICE_WILL_RESTART "Zariadenie bude reštartované behom niekoľkých sekúnd"
+#define D_BUTTON_TOGGLE "Prepínač"
+#define D_CONFIGURATION "Nastavenia"
+#define D_INFORMATION "Informácie"
+#define D_FIRMWARE_UPGRADE "Aktualizácia firmware"
+#define D_CONSOLE "Konzola"
+#define D_CONFIRM_RESTART "Potvrdenie reštartu"
+
+#define D_CONFIGURE_MODULE "Nastavenia modulu"
+#define D_CONFIGURE_WIFI "Nastavenia WiFi"
+#define D_CONFIGURE_MQTT "Nastavenia MQTT"
+#define D_CONFIGURE_DOMOTICZ "Nastavenia Domoticz"
+#define D_CONFIGURE_LOGGING "Nastavenia logovania"
+#define D_CONFIGURE_OTHER "Ostatné nastavenia"
+#define D_CONFIRM_RESET_CONFIGURATION "Potvrdenie resetu nastavení"
+#define D_RESET_CONFIGURATION "Reset nastavení"
+#define D_BACKUP_CONFIGURATION "Záloha nastavení"
+#define D_RESTORE_CONFIGURATION "Obnovenie nastavení"
+#define D_MAIN_MENU "Hlavné menu"
+
+#define D_MODULE_PARAMETERS "Nastavenia modulu"
+#define D_MODULE_TYPE "Typ modulu"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Nastavenia WiFi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Sken WiFi sietí"
+#define D_SCAN_DONE "Sken dokončený"
+#define D_NO_NETWORKS_FOUND "Sieť nebola nájdená"
+#define D_REFRESH_TO_SCAN_AGAIN "Zopakovať sken"
+#define D_DUPLICATE_ACCESSPOINT "Kópia AP"
+#define D_SKIPPING_LOW_QUALITY "Preskočenie z dôvodu kvality signálu"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSID"
+#define D_AP1_PASSWORD "Heslo AP1"
+#define D_AP2_SSID "AP2 SSID"
+#define D_AP2_PASSWORD "Heslo AP2"
+
+#define D_MQTT_PARAMETERS "Nastavenia MQTT"
+#define D_CLIENT "Klient"
+#define D_FULL_TOPIC "Celý topic"
+
+#define D_LOGGING_PARAMETERS "Voľba logovania"
+#define D_SERIAL_LOG_LEVEL "Sériová úroveň logu"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Webová úroveň logu"
+#define D_SYS_LOG_LEVEL "Systemová úroveň logu"
+#define D_MORE_DEBUG "Viac debug informácí"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Interval telemetrie"
+
+#define D_OTHER_PARAMETERS "Ostatné nastavenia"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
+#define D_MQTT_ENABLE "MQTT aktívne"
+#define D_FRIENDLY_NAME "Friendly Name"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "single device"
+#define D_MULTI_DEVICE "multi device"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Ulož nastavenia"
+#define D_CONFIGURATION_SAVED "Nastavenia uložené"
+#define D_CONFIGURATION_RESET "Nastavenia resetované"
+
+#define D_PROGRAM_VERSION "Verzia programu"
+#define D_BUILD_DATE_AND_TIME "Datum a čas kompilácie"
+#define D_CORE_AND_SDK_VERSION "Verzia Core/SDK"
+#define D_FLASH_WRITE_COUNT "Počet zápisov do pamäte"
+#define D_MAC_ADDRESS "Adresa MAC"
+#define D_MQTT_HOST "Host MQTT"
+#define D_MQTT_PORT "Port MQTT"
+#define D_MQTT_CLIENT "Klient MQTT"
+#define D_MQTT_USER "Používateľ MQTT"
+#define D_MQTT_TOPIC "Topic MQTT"
+#define D_MQTT_GROUP_TOPIC "Topic skupiny MQTT"
+#define D_MQTT_FULL_TOPIC "Celý topic MQTT"
+#define D_MDNS_DISCOVERY "Získavanie mDNS"
+#define D_MDNS_ADVERTISE "Rozosielanie mDNS"
+#define D_ESP_CHIP_ID "ID systému ESP"
+#define D_FLASH_CHIP_ID "ID systému flash pamäte"
+#define D_FLASH_CHIP_SIZE "Veľkosť flash"
+#define D_FREE_PROGRAM_SPACE "Voľné místo pre program"
+
+#define D_UPGRADE_BY_WEBSERVER "Aktualizácia z Web serveru"
+#define D_OTA_URL "URL OTA"
+#define D_START_UPGRADE "Spustiť aktualizáciu"
+#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizácia nahraním súboru"
+#define D_UPLOAD_STARTED "Nahrávanie spustené"
+#define D_UPGRADE_STARTED "Aktualizácia spustená"
+#define D_UPLOAD_DONE "Nahrávanie ukončené"
+#define D_UPLOAD_ERR_1 "Súbor nebol vybraný"
+#define D_UPLOAD_ERR_2 "Málo miesta"
+#define D_UPLOAD_ERR_3 "Magický byte má hodnotu inú než 0xE9"
+#define D_UPLOAD_ERR_4 "Veľkosť programu je väčšia než skutočná veľkosť flash pamäte"
+#define D_UPLOAD_ERR_5 "Chyba nahrávania, nesúhlasia porovnávané bity"
+#define D_UPLOAD_ERR_6 "Chyba nahrávania. Spustený zápis do logu na úrovni 3"
+#define D_UPLOAD_ERR_7 "Nahrávanie prerušené"
+#define D_UPLOAD_ERR_8 "Nesprávny súbor"
+#define D_UPLOAD_ERR_9 "Súbor je príliš veľký"
+#define D_UPLOAD_ERR_10 "Chyba inicializácie RF chipu"
+#define D_UPLOAD_ERR_11 "Chyba zmazania RF chipu"
+#define D_UPLOAD_ERR_12 "Chyba pri zápise do RF chipu"
+#define D_UPLOAD_ERR_13 "Chyba dekódovania RF firmwaru"
+#define D_UPLOAD_ERROR_CODE "Chyba nahrávania"
+
+#define D_ENTER_COMMAND "Vlož príkaz"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Zapni úroveň 2 zápisu Weblog, ak je očekávaná odpoveď"
+#define D_NEED_USER_AND_PASSWORD "Vyžadovaný používateľ=&heslo="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifikuj odtlačok TLS..."
+#define D_TLS_CONNECT_FAILED_TO "Nepripojené TLS do"
+#define D_RETRY_IN "Zopakujem o"
+#define D_VERIFIED "Overený odtlačok "
+#define D_INSECURE "Nesprávne pripojenie z dôvodu chybného odtlačku TLS"
+#define D_CONNECT_FAILED_TO "Nepodarilo sa nadviazať spojenie"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast je vypnutý"
+#define D_MULTICAST_REJOINED "Multicast opäť pripojený"
+#define D_MULTICAST_JOIN_FAILED "Multicast neúspešný"
+#define D_FAILED_TO_SEND_RESPONSE "Nepodarilo sa odoslať odpoveď"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo základná udalosť"
+#define D_WEMO_EVENT_SERVICE "WeMo servisná udalosť"
+#define D_WEMO_META_SERVICE "WeMo meta udalosť"
+#define D_WEMO_SETUP "WeMo setup"
+#define D_RESPONSE_SENT "Odpoveď odoslaná"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue setup"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API nie je implementované"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 pakety odpovede odoslané"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Nastavenia Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Spinac idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Vlhk"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Vlhk,Tlak"
+ #define D_DOMOTICZ_POWER_ENERGY "Príkon,Energia"
+ #define D_DOMOTICZ_ILLUMINANCE "Osvetlenie"
+ #define D_DOMOTICZ_COUNT "Počítadlo/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Napätie/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Prúd/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Aktualizácia časovača"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Nastavenia časovača"
+#define D_TIMER_PARAMETERS "Časovač"
+#define D_TIMER_ENABLE "Povoľ časovače"
+#define D_TIMER_ARM "Aktívne"
+#define D_TIMER_TIME "Čas"
+#define D_TIMER_DAYS "Dni"
+#define D_TIMER_REPEAT "Opakovať"
+#define D_TIMER_OUTPUT "Výstup"
+#define D_TIMER_ACTION "Napájanie"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Nastavenie KNX"
+#define D_KNX_PARAMETERS "KNX parametre"
+#define D_KNX_GENERAL_CONFIG "Všeobecné"
+#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v sieti KNX )"
+#define D_KNX_ENABLE "Povoľ KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dáta na odoslanie na skupinové adresy"
+#define D_ADD "Pridať"
+#define D_DELETE "Zmazať"
+#define D_REPLY "Odpoveď"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pre príjem dát z"
+#define D_RECEIVED_FROM "Prijaté z"
+#define D_KNX_COMMAND_WRITE "Zapíš"
+#define D_KNX_COMMAND_READ "Čítaj"
+#define D_KNX_COMMAND_OTHER "Iné"
+#define D_SENT_TO "pošli"
+#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervovaná a nemôže byť použitá."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Spotreba dnes"
+#define D_ENERGY_YESTERDAY "Spotreba včera"
+#define D_ENERGY_TOTAL "Celková spotreba"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor DS18x20 obsadený"
+#define D_SENSOR_CRC_ERROR "Sensor DS18x20 chyba CRC"
+#define D_SENSORS_FOUND "Nanájdený senzor DS18x20"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Čakanie na"
+#define D_START_SIGNAL_LOW "nízký štartovací signál"
+#define D_START_SIGNAL_HIGH "vysoký štartovací signál"
+#define D_PULSE "impulz"
+#define D_CHECKSUM_FAILURE "Chybný kontrolný súčet"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Senzor neobdržal príkaz ACK"
+#define D_SHT1X_FOUND "SHT1X nanájdený"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "častíc"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. os-X"
+#define D_AY_AXIS "Accel. os-Y"
+#define D_AZ_AXIS "Accel. os-Z"
+#define D_GX_AXIS "Gyro os-X"
+#define D_GY_AXIS "Gyro os-Y"
+#define D_GZ_AXIS "Gyro os-Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Odstráňte záťaž"
+#define D_HX_CAL_REFERENCE "Vložte referenčnú záťaž"
+#define D_HX_CAL_DONE "Skalibrováné"
+#define D_HX_CAL_FAIL "Chyba kalibráce"
+#define D_RESET_HX711 "Reset váhy"
+#define D_CONFIGURE_HX711 "Konfiguráce váhy"
+#define D_HX711_PARAMETERS "Parametre váhy"
+#define D_ITEM_WEIGHT "Vlastná hmotnosť"
+#define D_REFERENCE_WEIGHT "Referenčná hmotnosť"
+#define D_CALIBRATE "Kalibruj"
+#define D_CALIBRATION "Kalibrácia"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Smer vetra"
+#define D_TX20_WIND_SPEED "Rýchlosť vetra"
+#define D_TX20_WIND_SPEED_AVG "Priemerná rýchlosť vetra"
+#define D_TX20_WIND_SPEED_MAX "Maximálna rýchlosť vetra"
+#define D_TX20_NORTH "S"
+#define D_TX20_EAST "V"
+#define D_TX20_SOUTH "J"
+#define D_TX20_WEST "Z"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Spínač" // Suffix "1"
+#define D_SENSOR_BUTTON "Tlačidlo" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1",
+#define D_SENSOR_COUNTER "Počítadlo" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Senzor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "hod"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sek"
+#define D_UNIT_SECTORS "sektory"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_SK_SK_H_
diff --git a/tasmota/language/sv-SE.h b/tasmota/language/sv-SE.h
index 51ffc2ae3..3edeaf193 100644
--- a/tasmota/language/sv-SE.h
+++ b/tasmota/language/sv-SE.h
@@ -1,701 +1,703 @@
-/*
- sv-SE.h - localization for Swedish - Svenska for Tasmota
-
- Copyright (C) 2019 Gunnar Norin
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_SV_SE_H_
-#define _LANGUAGE_SV_SE_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.2.1.11
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-// https://www.science.co.il/language/Locale-codes.php
-#define LANGUAGE_LCID 1053
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "sv"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "SönMånTisOnsTorFreLör"
-#define D_MONTH3LIST "JanFebMarAprMajJunJulAugSepOktNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Luftkvalitet"
-#define D_AP "AP" // Access Point
-#define D_AS "som"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blinka"
-#define D_BLINKOFF "BlinkaAv"
-#define D_BOOT_COUNT "Uppstartsräknare"
-#define D_BRIGHTLIGHT "Ljust"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Knapp"
-#define D_BY "av" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Kanal"
-#define D_CO2 "Koldioxid"
-#define D_CODE "kod" // Button code
-#define D_COLDLIGHT "Kallt"
-#define D_COMMAND "Kommando"
-#define D_CONNECTED "Ansluten"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Räkna"
-#define D_COUNTER "Räknare"
-#define D_CURRENT "Ström" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Mörkt"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Inaktiverad"
-#define D_DISTANCE "Distans"
-#define D_DNS_SERVER "DNS-server"
-#define D_DONE "Gjort"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulation"
-#define D_ENABLED "Aktiverad"
-#define D_ERASE "Ta bort"
-#define D_ERROR "Fel"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Misslyckades"
-#define D_FALLBACK "Reserv"
-#define D_FALLBACK_TOPIC "Reservämne"
-#define D_FALSE "Falskt"
-#define D_FILE "Fil"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Ledigt minne"
-#define D_FREQUENCY "Frekvens"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Grupp"
-#define D_HOST "Värd"
-#define D_HOSTNAME "Värdnamn"
-#define D_HUMIDITY "Fuktighet"
-#define D_ILLUMINANCE "Belysnings"
-#define D_IMMEDIATE "Omedelbar" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infraröd"
-#define D_INITIALIZED "Initialiserad"
-#define D_IP_ADDRESS "IP-adress"
-#define D_LIGHT "Ljus"
-#define D_LWT "LWT"
-#define D_MODULE "Modul"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "fler tryck"
-#define D_NOISE "Oväsen"
-#define D_NONE "Ingen"
-#define D_OFF "Av"
-#define D_OFFLINE "Off-line"
-#define D_OK "Ok"
-#define D_ON "På"
-#define D_ONLINE "Ansluten"
-#define D_PASSWORD "Lösenord"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Spänningsfaktor"
-#define D_POWERUSAGE "Spänning"
-#define D_POWERUSAGE_ACTIVE "Aktiv spänning"
-#define D_POWERUSAGE_APPARENT "Skenbar spänning"
-#define D_POWERUSAGE_REACTIVE "Responsiv spänning"
-#define D_PRESSURE "Tryck"
-#define D_PRESSUREATSEALEVEL "Havstryck"
-#define D_PROGRAM_FLASH_SIZE "Program-flashstorlek"
-#define D_PROGRAM_SIZE "Programstorlek"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Regn"
-#define D_RECEIVED "Mottagen"
-#define D_RESTART "Omstart"
-#define D_RESTARTING "Startar om"
-#define D_RESTART_REASON "Omstartsorsak"
-#define D_RESTORE "återställ"
-#define D_RETAINED "bevarad"
-#define D_RULE "Regel"
-#define D_SAVE "Spara"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Starta"
-#define D_STD_TIME "STD"
-#define D_STOP "Stoppa"
-#define D_SUBNET_MASK "Nätmask"
-#define D_SUBSCRIBE_TO "Prenumera på"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Lyckat"
-#define D_SUNRISE "Soluppgång"
-#define D_SUNSET "Solnedgång"
-#define D_TEMPERATURE "Temperatur"
-#define D_TO "till"
-#define D_TOGGLE "Växla"
-#define D_TOPIC "Ämne"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Sänd"
-#define D_TRUE "Sant"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "uppgradera"
-#define D_UPLOAD "Ladda upp"
-#define D_UPTIME "Upptid"
-#define D_USER "Användare"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Låg"
-#define D_UV_INDEX_2 "Med"
-#define D_UV_INDEX_3 "Hög"
-#define D_UV_INDEX_4 "Farligt"
-#define D_UV_INDEX_5 "Skadligt"
-#define D_UV_INDEX_6 "Extremt"
-#define D_UV_INDEX_7 "UO" // Out of Range
-#define D_UV_LEVEL "UV nivå"
-#define D_UV_POWER "UV kraft"
-#define D_VERSION "Version"
-#define D_VOLTAGE "Volttal"
-#define D_WEIGHT "Vikt"
-#define D_WARMLIGHT "Varm"
-#define D_WEB_SERVER "Webbserver"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "VARNING Denna version supporterar inte beständiga inställningar"
-#define D_LEVEL_10 "nivå 1-0"
-#define D_LEVEL_01 "nivå 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Seriell loggning inaktiverad"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog återaktiverad"
-
-#define D_SET_BAUDRATE_TO "Ange Baudrate till"
-#define D_RECEIVED_TOPIC "Mottaget ämne"
-#define D_DATA_SIZE "Datastorlek"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blockerad loop"
-#define D_WPS_FAILED_WITH_STATUS "WPS-konfigurering MISSLYCKADES med status"
-#define D_ACTIVE_FOR_3_MINUTES "aktiv för 3 minuter"
-#define D_FAILED_TO_START "misslyckades att starta"
-#define D_PATCH_ISSUE_2186 "Laga problem 2186"
-#define D_CONNECTING_TO_AP "Ansluter till AP"
-#define D_IN_MODE "i läge"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Anslutning misslyckades mottog ingen IP-adress"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Anslutning misslyckades, kunde inte nå AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Anslutning misslyckades, fel lösenord för AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Anslutning misslyckadess med AP, timeout"
-#define D_ATTEMPTING_CONNECTION "Försöker ansluta..."
-#define D_CHECKING_CONNECTION "Kontrollerar anslutning..."
-#define D_QUERY_DONE "Fråga utförd. MQTT-tjänster hittades"
-#define D_MQTT_SERVICE_FOUND "MQTT-tjänst hittades på"
-#define D_FOUND_AT "hittades vid"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog-värd hittades inte"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Sparade till flash vid"
-#define D_LOADED_FROM_FLASH_AT "Laddade från flash vid"
-#define D_USE_DEFAULTS "Använd standard"
-#define D_ERASED_SECTOR "Rensade sektor"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "För att använda Tasmota, aktivera JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
var god uppgradera"
-#define D_WEBSERVER_ACTIVE_ON "Webbserver aktiv på"
-#define D_WITH_IP_ADDRESS "med IP-adress"
-#define D_WEBSERVER_STOPPED "Webbserver stoppad"
-#define D_FILE_NOT_FOUND "Filen hittades inte"
-#define D_REDIRECTED "Omdirigerad till fångstportal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifihanterare ange accesspunkt och behåll station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifihanterare ange accesspunkt"
-#define D_TRYING_TO_CONNECT "Försöker att ansluta enheten till nätverk"
-
-#define D_RESTART_IN "Omstart om"
-#define D_SECONDS "sekunder"
-#define D_DEVICE_WILL_RESTART "Enheten kommer att starta om inom ett antal sekunder"
-#define D_BUTTON_TOGGLE "Växla"
-#define D_CONFIGURATION "Konfigurering"
-#define D_INFORMATION "Information"
-#define D_FIRMWARE_UPGRADE "Uppgradera firmware"
-#define D_CONSOLE "Konsol"
-#define D_CONFIRM_RESTART "Bekräfta omstart"
-
-#define D_CONFIGURE_MODULE "Konfigurera modul"
-#define D_CONFIGURE_WIFI "Konfigurera WiFi"
-#define D_CONFIGURE_MQTT "Konfigurera MQTT"
-#define D_CONFIGURE_DOMOTICZ "Konfigurera Domoticz"
-#define D_CONFIGURE_LOGGING "Konfigurera loggning"
-#define D_CONFIGURE_OTHER "Konfigurera annat"
-#define D_CONFIRM_RESET_CONFIGURATION "Bekräfta nollställning av konfiguration"
-#define D_RESET_CONFIGURATION "Nollställ konfiguration"
-#define D_BACKUP_CONFIGURATION "Säkerhetskopiera konfiguration"
-#define D_RESTORE_CONFIGURATION "Återställ konfiguration"
-#define D_MAIN_MENU "Huvudmeny"
-
-#define D_MODULE_PARAMETERS "Modulparameterar"
-#define D_MODULE_TYPE "Modultyp"
-#define D_PULLUP_ENABLE "Ingen knapp/brytare pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Seriell in"
-#define D_SERIAL_OUT "Seriell ut"
-
-#define D_WIFI_PARAMETERS "Wifi-parameterar"
-#define D_SCAN_FOR_WIFI_NETWORKS "Skanna efter wifi-nätverk"
-#define D_SCAN_DONE "Skanning slutförd"
-#define D_NO_NETWORKS_FOUND "Inga nätverk hittades"
-#define D_REFRESH_TO_SCAN_AGAIN "Uppdatera för att skanna igen"
-#define D_DUPLICATE_ACCESSPOINT "Dubblett accesspunkt"
-#define D_SKIPPING_LOW_QUALITY "Hoppa över pga dålig kvalitet"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 lösenord"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 lösenord"
-
-#define D_MQTT_PARAMETERS "MQTT-parameterar"
-#define D_CLIENT "Klient"
-#define D_FULL_TOPIC "Fullt ämne"
-
-#define D_LOGGING_PARAMETERS "Loggningsparametrar"
-#define D_SERIAL_LOG_LEVEL "Seriell loggnivå"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Webb loggnivå"
-#define D_SYS_LOG_LEVEL "Syslog-nivå"
-#define D_MORE_DEBUG "Mer debugging"
-#define D_SYSLOG_HOST "Syslog-värd"
-#define D_SYSLOG_PORT "Syslog-port"
-#define D_TELEMETRY_PERIOD "Telemetriperiod"
-
-#define D_OTHER_PARAMETERS "Andra parametrar"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Webbadmin-lösenord"
-#define D_MQTT_ENABLE "MQTT aktivera"
-#define D_FRIENDLY_NAME "Läsbart namn"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "soloenhet"
-#define D_MULTI_DEVICE "multienhet"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Spara konfiguration"
-#define D_CONFIGURATION_SAVED "Konfiguration sparad"
-#define D_CONFIGURATION_RESET "Konfiguration nollställd"
-
-#define D_PROGRAM_VERSION "Programversion"
-#define D_BUILD_DATE_AND_TIME "Kompilerings datum & tid"
-#define D_CORE_AND_SDK_VERSION "Core/SDK version"
-#define D_FLASH_WRITE_COUNT "Flash-skrivningsräknare"
-#define D_MAC_ADDRESS "MAC-adress"
-#define D_MQTT_HOST "MQTT-värd"
-#define D_MQTT_PORT "MQTT-port"
-#define D_MQTT_CLIENT "MQTT-klient"
-#define D_MQTT_USER "MQTT-användare"
-#define D_MQTT_TOPIC "MQTT-ämne"
-#define D_MQTT_GROUP_TOPIC "MQTT gruppämne"
-#define D_MQTT_FULL_TOPIC "MQTT fullt ämne"
-#define D_MDNS_DISCOVERY "mDNS upptäckning"
-#define D_MDNS_ADVERTISE "mDNS annonsering"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Flash-storlek"
-#define D_FREE_PROGRAM_SPACE "Ledigt programutrymme"
-
-#define D_UPGRADE_BY_WEBSERVER "Uppgradering via webbserver"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Starta uppdatering"
-#define D_UPGRADE_BY_FILE_UPLOAD "Uppgradering via filuppladdning"
-#define D_UPLOAD_STARTED "Uppladdning startad"
-#define D_UPGRADE_STARTED "Uppgradeing startad"
-#define D_UPLOAD_DONE "Uppladdning klar"
-#define D_UPLOAD_ERR_1 "Ingen fil vald"
-#define D_UPLOAD_ERR_2 "Inte tillräckligt med ledigt utrymme"
-#define D_UPLOAD_ERR_3 "Magisk byte är inte 0xE9"
-#define D_UPLOAD_ERR_4 "Programmets flashstorlek är större än den verkliga flashstorleken"
-#define D_UPLOAD_ERR_5 "Uppladdningbuffert stämmer inte överens"
-#define D_UPLOAD_ERR_6 "Uppladdning misslyckad. Aktivera loggning 3"
-#define D_UPLOAD_ERR_7 "Uppladdning avbruten"
-#define D_UPLOAD_ERR_8 "Ogiltig fil"
-#define D_UPLOAD_ERR_9 "För stor fil"
-#define D_UPLOAD_ERR_10 "Misslyckades initera RF chip"
-#define D_UPLOAD_ERR_11 "Misslyckades rensa RF chip"
-#define D_UPLOAD_ERR_12 "Misslyckades skriva till RF chip"
-#define D_UPLOAD_ERR_13 "Misslyckades avkoda RF firmware"
-#define D_UPLOAD_ERROR_CODE "Uppladdningsfelkod"
-
-#define D_ENTER_COMMAND "Ange kommando"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Aktivera webblogg 2 om svar förväntas"
-#define D_NEED_USER_AND_PASSWORD "Behöver user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifierar TLS fingeravtryck..."
-#define D_TLS_CONNECT_FAILED_TO "TLS-anslutning misslyckades"
-#define D_RETRY_IN "Försöker igen om"
-#define D_VERIFIED "Verifierad med fingeravtryck"
-#define D_INSECURE "Osäker anslutning pga ogiltigt fingeravtryck"
-#define D_CONNECT_FAILED_TO "Anslutning misslyckades"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast inaktiverad"
-#define D_MULTICAST_REJOINED "Multicast (åter)anslöt"
-#define D_MULTICAST_JOIN_FAILED "Multicast anslutning misslyckades"
-#define D_FAILED_TO_SEND_RESPONSE "Misslyckades skicka svar"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo standardhändelse"
-#define D_WEMO_EVENT_SERVICE "WeMo händelsetjänst"
-#define D_WEMO_META_SERVICE "WeMo metatjänst"
-#define D_WEMO_SETUP "WeMo installation"
-#define D_RESPONSE_SENT "Svar skickat"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue installation"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API inte implementerat"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 svarspaket skickade"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz parametetrar"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Nyckel idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Fuk"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Fuk,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Spänning,Energi"
- #define D_DOMOTICZ_ILLUMINANCE "Belysningsstyrka"
- #define D_DOMOTICZ_COUNT "Antal/PM1"
- #define D_DOMOTICZ_VOLTAGE "Volt/PM2.5"
- #define D_DOMOTICZ_CURRENT "Ström/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Luftkvalitet"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Uppdatera timer"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Konfigurera timer"
-#define D_TIMER_PARAMETERS "Timerparametrar"
-#define D_TIMER_ENABLE "Aktivera timer"
-#define D_TIMER_ARM "Aktivera"
-#define D_TIMER_TIME "Tid"
-#define D_TIMER_DAYS "Dagar"
-#define D_TIMER_REPEAT "Repetera"
-#define D_TIMER_OUTPUT "Utgång"
-#define D_TIMER_ACTION "Åtgärd"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Konfigurera KNX"
-#define D_KNX_PARAMETERS "KNX Parametrar"
-#define D_KNX_GENERAL_CONFIG "Allmänt"
-#define D_KNX_PHYSICAL_ADDRESS "Fysisk adress"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Måste vara unik på KNX-nätverket )"
-#define D_KNX_ENABLE "Aktivera KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data att skicka till gruppadresser"
-#define D_ADD "Lägg till"
-#define D_DELETE "Ta bort"
-#define D_REPLY "Svara"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppadresser att ta emot data från"
-#define D_RECEIVED_FROM "Mottagen från"
-#define D_KNX_COMMAND_WRITE "Skriv"
-#define D_KNX_COMMAND_READ "Läs"
-#define D_KNX_COMMAND_OTHER "Andra"
-#define D_SENT_TO "skickad till"
-#define D_KNX_WARNING "Gruppadressen ( 0 / 0 / 0 ) är reserverad och kan inte användas."
-#define D_KNX_ENHANCEMENT "Kommuniceringsförbättring"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energi idag"
-#define D_ENERGY_YESTERDAY "Energi igår"
-#define D_ENERGY_TOTAL "Energi totalt"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor upptagen"
-#define D_SENSOR_CRC_ERROR "Sensor CRC-fel"
-#define D_SENSORS_FOUND "Sensorer hittades"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Timeout under väntan"
-#define D_START_SIGNAL_LOW "startsignal låg"
-#define D_START_SIGNAL_HIGH "startsignal hög"
-#define D_PULSE "puls"
-#define D_CHECKSUM_FAILURE "Fel kontrollsumma"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor besvarade inte med ACK kommando"
-#define D_SHT1X_FOUND "SHT1X hittades"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Partiklar"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axel"
-#define D_AY_AXIS "Accel. Y-Axel"
-#define D_AZ_AXIS "Accel. Z-Axel"
-#define D_GX_AXIS "Gyro X-Axel"
-#define D_GY_AXIS "Gyro Y-Axel"
-#define D_GZ_AXIS "Gyro Z-Axel"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Ta bort vikter"
-#define D_HX_CAL_REFERENCE "Ladda referensvikt"
-#define D_HX_CAL_DONE "Kalibrerad"
-#define D_HX_CAL_FAIL "Kalibrering misslyckad"
-#define D_RESET_HX711 "Återställ våg"
-#define D_CONFIGURE_HX711 "Konfigurera våg"
-#define D_HX711_PARAMETERS "Vågparametrar"
-#define D_ITEM_WEIGHT "Objektsvikt"
-#define D_REFERENCE_WEIGHT "Referensvikt"
-#define D_CALIBRATE "Kalibrera"
-#define D_CALIBRATION "Kalibrering"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Vindriktning"
-#define D_TX20_WIND_SPEED "Vindstyrka"
-#define D_TX20_WIND_SPEED_AVG "Vindstyrka medel"
-#define D_TX20_WIND_SPEED_MAX "Vindstyrka max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "Ö"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "V"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3-spelare"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Omkopplare" // Suffix "1"
-#define D_SENSOR_BUTTON "Knapp" // Suffix "1"
-#define D_SENSOR_RELAY "Relä" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Räknare" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Tim"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "ink"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sek"
-#define D_UNIT_SECTORS "sektorer"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Fasvinkel"
-#define D_IMPORT_ACTIVE "Import aktiv"
-#define D_EXPORT_ACTIVE "Export aktiv"
-#define D_IMPORT_REACTIVE "Import reaktiv"
-#define D_EXPORT_REACTIVE "Export reaktiv"
-#define D_TOTAL_REACTIVE "Total reaktiv"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_SV_SE_H_
+/*
+ sv-SE.h - localization for Swedish - Svenska for Tasmota
+
+ Copyright (C) 2019 Gunnar Norin
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_SV_SE_H_
+#define _LANGUAGE_SV_SE_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.2.1.11
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+// https://www.science.co.il/language/Locale-codes.php
+#define LANGUAGE_LCID 1053
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "sv"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "SönMånTisOnsTorFreLör"
+#define D_MONTH3LIST "JanFebMarAprMajJunJulAugSepOktNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Luftkvalitet"
+#define D_AP "AP" // Access Point
+#define D_AS "som"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blinka"
+#define D_BLINKOFF "BlinkaAv"
+#define D_BOOT_COUNT "Uppstartsräknare"
+#define D_BRIGHTLIGHT "Ljust"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Knapp"
+#define D_BY "av" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Kanal"
+#define D_CO2 "Koldioxid"
+#define D_CODE "kod" // Button code
+#define D_COLDLIGHT "Kallt"
+#define D_COMMAND "Kommando"
+#define D_CONNECTED "Ansluten"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Räkna"
+#define D_COUNTER "Räknare"
+#define D_CURRENT "Ström" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Mörkt"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Inaktiverad"
+#define D_DISTANCE "Distans"
+#define D_DNS_SERVER "DNS-server"
+#define D_DONE "Gjort"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulation"
+#define D_ENABLED "Aktiverad"
+#define D_ERASE "Ta bort"
+#define D_ERROR "Fel"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Misslyckades"
+#define D_FALLBACK "Reserv"
+#define D_FALLBACK_TOPIC "Reservämne"
+#define D_FALSE "Falskt"
+#define D_FILE "Fil"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Ledigt minne"
+#define D_FREQUENCY "Frekvens"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Grupp"
+#define D_HOST "Värd"
+#define D_HOSTNAME "Värdnamn"
+#define D_HUMIDITY "Fuktighet"
+#define D_ILLUMINANCE "Belysnings"
+#define D_IMMEDIATE "Omedelbar" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infraröd"
+#define D_INITIALIZED "Initialiserad"
+#define D_IP_ADDRESS "IP-adress"
+#define D_LIGHT "Ljus"
+#define D_LWT "LWT"
+#define D_MODULE "Modul"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "fler tryck"
+#define D_NOISE "Oväsen"
+#define D_NONE "Ingen"
+#define D_OFF "Av"
+#define D_OFFLINE "Off-line"
+#define D_OK "Ok"
+#define D_ON "På"
+#define D_ONLINE "Ansluten"
+#define D_PASSWORD "Lösenord"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Spänningsfaktor"
+#define D_POWERUSAGE "Spänning"
+#define D_POWERUSAGE_ACTIVE "Aktiv spänning"
+#define D_POWERUSAGE_APPARENT "Skenbar spänning"
+#define D_POWERUSAGE_REACTIVE "Responsiv spänning"
+#define D_PRESSURE "Tryck"
+#define D_PRESSUREATSEALEVEL "Havstryck"
+#define D_PROGRAM_FLASH_SIZE "Program-flashstorlek"
+#define D_PROGRAM_SIZE "Programstorlek"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Regn"
+#define D_RECEIVED "Mottagen"
+#define D_RESTART "Omstart"
+#define D_RESTARTING "Startar om"
+#define D_RESTART_REASON "Omstartsorsak"
+#define D_RESTORE "återställ"
+#define D_RETAINED "bevarad"
+#define D_RULE "Regel"
+#define D_SAVE "Spara"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Starta"
+#define D_STD_TIME "STD"
+#define D_STOP "Stoppa"
+#define D_SUBNET_MASK "Nätmask"
+#define D_SUBSCRIBE_TO "Prenumera på"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Lyckat"
+#define D_SUNRISE "Soluppgång"
+#define D_SUNSET "Solnedgång"
+#define D_TEMPERATURE "Temperatur"
+#define D_TO "till"
+#define D_TOGGLE "Växla"
+#define D_TOPIC "Ämne"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Sänd"
+#define D_TRUE "Sant"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "uppgradera"
+#define D_UPLOAD "Ladda upp"
+#define D_UPTIME "Upptid"
+#define D_USER "Användare"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Låg"
+#define D_UV_INDEX_2 "Med"
+#define D_UV_INDEX_3 "Hög"
+#define D_UV_INDEX_4 "Farligt"
+#define D_UV_INDEX_5 "Skadligt"
+#define D_UV_INDEX_6 "Extremt"
+#define D_UV_INDEX_7 "UO" // Out of Range
+#define D_UV_LEVEL "UV nivå"
+#define D_UV_POWER "UV kraft"
+#define D_VERSION "Version"
+#define D_VOLTAGE "Volttal"
+#define D_WEIGHT "Vikt"
+#define D_WARMLIGHT "Varm"
+#define D_WEB_SERVER "Webbserver"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "VARNING Denna version supporterar inte beständiga inställningar"
+#define D_LEVEL_10 "nivå 1-0"
+#define D_LEVEL_01 "nivå 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Seriell loggning inaktiverad"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog återaktiverad"
+
+#define D_SET_BAUDRATE_TO "Ange Baudrate till"
+#define D_RECEIVED_TOPIC "Mottaget ämne"
+#define D_DATA_SIZE "Datastorlek"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blockerad loop"
+#define D_WPS_FAILED_WITH_STATUS "WPS-konfigurering MISSLYCKADES med status"
+#define D_ACTIVE_FOR_3_MINUTES "aktiv för 3 minuter"
+#define D_FAILED_TO_START "misslyckades att starta"
+#define D_PATCH_ISSUE_2186 "Laga problem 2186"
+#define D_CONNECTING_TO_AP "Ansluter till AP"
+#define D_IN_MODE "i läge"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Anslutning misslyckades mottog ingen IP-adress"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Anslutning misslyckades, kunde inte nå AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Anslutning misslyckades, fel lösenord för AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Anslutning misslyckadess med AP, timeout"
+#define D_ATTEMPTING_CONNECTION "Försöker ansluta..."
+#define D_CHECKING_CONNECTION "Kontrollerar anslutning..."
+#define D_QUERY_DONE "Fråga utförd. MQTT-tjänster hittades"
+#define D_MQTT_SERVICE_FOUND "MQTT-tjänst hittades på"
+#define D_FOUND_AT "hittades vid"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog-värd hittades inte"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Sparade till flash vid"
+#define D_LOADED_FROM_FLASH_AT "Laddade från flash vid"
+#define D_USE_DEFAULTS "Använd standard"
+#define D_ERASED_SECTOR "Rensade sektor"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "För att använda Tasmota, aktivera JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
var god uppgradera"
+#define D_WEBSERVER_ACTIVE_ON "Webbserver aktiv på"
+#define D_WITH_IP_ADDRESS "med IP-adress"
+#define D_WEBSERVER_STOPPED "Webbserver stoppad"
+#define D_FILE_NOT_FOUND "Filen hittades inte"
+#define D_REDIRECTED "Omdirigerad till fångstportal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifihanterare ange accesspunkt och behåll station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifihanterare ange accesspunkt"
+#define D_TRYING_TO_CONNECT "Försöker att ansluta enheten till nätverk"
+
+#define D_RESTART_IN "Omstart om"
+#define D_SECONDS "sekunder"
+#define D_DEVICE_WILL_RESTART "Enheten kommer att starta om inom ett antal sekunder"
+#define D_BUTTON_TOGGLE "Växla"
+#define D_CONFIGURATION "Konfigurering"
+#define D_INFORMATION "Information"
+#define D_FIRMWARE_UPGRADE "Uppgradera firmware"
+#define D_CONSOLE "Konsol"
+#define D_CONFIRM_RESTART "Bekräfta omstart"
+
+#define D_CONFIGURE_MODULE "Konfigurera modul"
+#define D_CONFIGURE_WIFI "Konfigurera WiFi"
+#define D_CONFIGURE_MQTT "Konfigurera MQTT"
+#define D_CONFIGURE_DOMOTICZ "Konfigurera Domoticz"
+#define D_CONFIGURE_LOGGING "Konfigurera loggning"
+#define D_CONFIGURE_OTHER "Konfigurera annat"
+#define D_CONFIRM_RESET_CONFIGURATION "Bekräfta nollställning av konfiguration"
+#define D_RESET_CONFIGURATION "Nollställ konfiguration"
+#define D_BACKUP_CONFIGURATION "Säkerhetskopiera konfiguration"
+#define D_RESTORE_CONFIGURATION "Återställ konfiguration"
+#define D_MAIN_MENU "Huvudmeny"
+
+#define D_MODULE_PARAMETERS "Modulparameterar"
+#define D_MODULE_TYPE "Modultyp"
+#define D_PULLUP_ENABLE "Ingen knapp/brytare pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Seriell in"
+#define D_SERIAL_OUT "Seriell ut"
+
+#define D_WIFI_PARAMETERS "Wifi-parameterar"
+#define D_SCAN_FOR_WIFI_NETWORKS "Skanna efter wifi-nätverk"
+#define D_SCAN_DONE "Skanning slutförd"
+#define D_NO_NETWORKS_FOUND "Inga nätverk hittades"
+#define D_REFRESH_TO_SCAN_AGAIN "Uppdatera för att skanna igen"
+#define D_DUPLICATE_ACCESSPOINT "Dubblett accesspunkt"
+#define D_SKIPPING_LOW_QUALITY "Hoppa över pga dålig kvalitet"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 lösenord"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 lösenord"
+
+#define D_MQTT_PARAMETERS "MQTT-parameterar"
+#define D_CLIENT "Klient"
+#define D_FULL_TOPIC "Fullt ämne"
+
+#define D_LOGGING_PARAMETERS "Loggningsparametrar"
+#define D_SERIAL_LOG_LEVEL "Seriell loggnivå"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Webb loggnivå"
+#define D_SYS_LOG_LEVEL "Syslog-nivå"
+#define D_MORE_DEBUG "Mer debugging"
+#define D_SYSLOG_HOST "Syslog-värd"
+#define D_SYSLOG_PORT "Syslog-port"
+#define D_TELEMETRY_PERIOD "Telemetriperiod"
+
+#define D_OTHER_PARAMETERS "Andra parametrar"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Webbadmin-lösenord"
+#define D_MQTT_ENABLE "MQTT aktivera"
+#define D_FRIENDLY_NAME "Läsbart namn"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "soloenhet"
+#define D_MULTI_DEVICE "multienhet"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Spara konfiguration"
+#define D_CONFIGURATION_SAVED "Konfiguration sparad"
+#define D_CONFIGURATION_RESET "Konfiguration nollställd"
+
+#define D_PROGRAM_VERSION "Programversion"
+#define D_BUILD_DATE_AND_TIME "Kompilerings datum & tid"
+#define D_CORE_AND_SDK_VERSION "Core/SDK version"
+#define D_FLASH_WRITE_COUNT "Flash-skrivningsräknare"
+#define D_MAC_ADDRESS "MAC-adress"
+#define D_MQTT_HOST "MQTT-värd"
+#define D_MQTT_PORT "MQTT-port"
+#define D_MQTT_CLIENT "MQTT-klient"
+#define D_MQTT_USER "MQTT-användare"
+#define D_MQTT_TOPIC "MQTT-ämne"
+#define D_MQTT_GROUP_TOPIC "MQTT gruppämne"
+#define D_MQTT_FULL_TOPIC "MQTT fullt ämne"
+#define D_MDNS_DISCOVERY "mDNS upptäckning"
+#define D_MDNS_ADVERTISE "mDNS annonsering"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Flash-storlek"
+#define D_FREE_PROGRAM_SPACE "Ledigt programutrymme"
+
+#define D_UPGRADE_BY_WEBSERVER "Uppgradering via webbserver"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Starta uppdatering"
+#define D_UPGRADE_BY_FILE_UPLOAD "Uppgradering via filuppladdning"
+#define D_UPLOAD_STARTED "Uppladdning startad"
+#define D_UPGRADE_STARTED "Uppgradeing startad"
+#define D_UPLOAD_DONE "Uppladdning klar"
+#define D_UPLOAD_ERR_1 "Ingen fil vald"
+#define D_UPLOAD_ERR_2 "Inte tillräckligt med ledigt utrymme"
+#define D_UPLOAD_ERR_3 "Magisk byte är inte 0xE9"
+#define D_UPLOAD_ERR_4 "Programmets flashstorlek är större än den verkliga flashstorleken"
+#define D_UPLOAD_ERR_5 "Uppladdningbuffert stämmer inte överens"
+#define D_UPLOAD_ERR_6 "Uppladdning misslyckad. Aktivera loggning 3"
+#define D_UPLOAD_ERR_7 "Uppladdning avbruten"
+#define D_UPLOAD_ERR_8 "Ogiltig fil"
+#define D_UPLOAD_ERR_9 "För stor fil"
+#define D_UPLOAD_ERR_10 "Misslyckades initera RF chip"
+#define D_UPLOAD_ERR_11 "Misslyckades rensa RF chip"
+#define D_UPLOAD_ERR_12 "Misslyckades skriva till RF chip"
+#define D_UPLOAD_ERR_13 "Misslyckades avkoda RF firmware"
+#define D_UPLOAD_ERROR_CODE "Uppladdningsfelkod"
+
+#define D_ENTER_COMMAND "Ange kommando"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Aktivera webblogg 2 om svar förväntas"
+#define D_NEED_USER_AND_PASSWORD "Behöver user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifierar TLS fingeravtryck..."
+#define D_TLS_CONNECT_FAILED_TO "TLS-anslutning misslyckades"
+#define D_RETRY_IN "Försöker igen om"
+#define D_VERIFIED "Verifierad med fingeravtryck"
+#define D_INSECURE "Osäker anslutning pga ogiltigt fingeravtryck"
+#define D_CONNECT_FAILED_TO "Anslutning misslyckades"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast inaktiverad"
+#define D_MULTICAST_REJOINED "Multicast (åter)anslöt"
+#define D_MULTICAST_JOIN_FAILED "Multicast anslutning misslyckades"
+#define D_FAILED_TO_SEND_RESPONSE "Misslyckades skicka svar"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo standardhändelse"
+#define D_WEMO_EVENT_SERVICE "WeMo händelsetjänst"
+#define D_WEMO_META_SERVICE "WeMo metatjänst"
+#define D_WEMO_SETUP "WeMo installation"
+#define D_RESPONSE_SENT "Svar skickat"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue installation"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API inte implementerat"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 svarspaket skickade"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz parametetrar"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Nyckel idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Fuk"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Fuk,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Spänning,Energi"
+ #define D_DOMOTICZ_ILLUMINANCE "Belysningsstyrka"
+ #define D_DOMOTICZ_COUNT "Antal/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Volt/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Ström/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Luftkvalitet"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Uppdatera timer"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Konfigurera timer"
+#define D_TIMER_PARAMETERS "Timerparametrar"
+#define D_TIMER_ENABLE "Aktivera timer"
+#define D_TIMER_ARM "Aktivera"
+#define D_TIMER_TIME "Tid"
+#define D_TIMER_DAYS "Dagar"
+#define D_TIMER_REPEAT "Repetera"
+#define D_TIMER_OUTPUT "Utgång"
+#define D_TIMER_ACTION "Åtgärd"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Konfigurera KNX"
+#define D_KNX_PARAMETERS "KNX Parametrar"
+#define D_KNX_GENERAL_CONFIG "Allmänt"
+#define D_KNX_PHYSICAL_ADDRESS "Fysisk adress"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Måste vara unik på KNX-nätverket )"
+#define D_KNX_ENABLE "Aktivera KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data att skicka till gruppadresser"
+#define D_ADD "Lägg till"
+#define D_DELETE "Ta bort"
+#define D_REPLY "Svara"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppadresser att ta emot data från"
+#define D_RECEIVED_FROM "Mottagen från"
+#define D_KNX_COMMAND_WRITE "Skriv"
+#define D_KNX_COMMAND_READ "Läs"
+#define D_KNX_COMMAND_OTHER "Andra"
+#define D_SENT_TO "skickad till"
+#define D_KNX_WARNING "Gruppadressen ( 0 / 0 / 0 ) är reserverad och kan inte användas."
+#define D_KNX_ENHANCEMENT "Kommuniceringsförbättring"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energi idag"
+#define D_ENERGY_YESTERDAY "Energi igår"
+#define D_ENERGY_TOTAL "Energi totalt"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor upptagen"
+#define D_SENSOR_CRC_ERROR "Sensor CRC-fel"
+#define D_SENSORS_FOUND "Sensorer hittades"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Timeout under väntan"
+#define D_START_SIGNAL_LOW "startsignal låg"
+#define D_START_SIGNAL_HIGH "startsignal hög"
+#define D_PULSE "puls"
+#define D_CHECKSUM_FAILURE "Fel kontrollsumma"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor besvarade inte med ACK kommando"
+#define D_SHT1X_FOUND "SHT1X hittades"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Partiklar"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axel"
+#define D_AY_AXIS "Accel. Y-Axel"
+#define D_AZ_AXIS "Accel. Z-Axel"
+#define D_GX_AXIS "Gyro X-Axel"
+#define D_GY_AXIS "Gyro Y-Axel"
+#define D_GZ_AXIS "Gyro Z-Axel"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Ta bort vikter"
+#define D_HX_CAL_REFERENCE "Ladda referensvikt"
+#define D_HX_CAL_DONE "Kalibrerad"
+#define D_HX_CAL_FAIL "Kalibrering misslyckad"
+#define D_RESET_HX711 "Återställ våg"
+#define D_CONFIGURE_HX711 "Konfigurera våg"
+#define D_HX711_PARAMETERS "Vågparametrar"
+#define D_ITEM_WEIGHT "Objektsvikt"
+#define D_REFERENCE_WEIGHT "Referensvikt"
+#define D_CALIBRATE "Kalibrera"
+#define D_CALIBRATION "Kalibrering"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Vindriktning"
+#define D_TX20_WIND_SPEED "Vindstyrka"
+#define D_TX20_WIND_SPEED_AVG "Vindstyrka medel"
+#define D_TX20_WIND_SPEED_MAX "Vindstyrka max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "Ö"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "V"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3-spelare"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Omkopplare" // Suffix "1"
+#define D_SENSOR_BUTTON "Knapp" // Suffix "1"
+#define D_SENSOR_RELAY "Relä" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Räknare" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Tim"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "ink"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sek"
+#define D_UNIT_SECTORS "sektorer"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Fasvinkel"
+#define D_IMPORT_ACTIVE "Import aktiv"
+#define D_EXPORT_ACTIVE "Export aktiv"
+#define D_IMPORT_REACTIVE "Import reaktiv"
+#define D_EXPORT_REACTIVE "Export reaktiv"
+#define D_TOTAL_REACTIVE "Total reaktiv"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_SV_SE_H_
diff --git a/tasmota/language/tr-TR.h b/tasmota/language/tr-TR.h
index 6bc48c40f..02f89c833 100644
--- a/tasmota/language/tr-TR.h
+++ b/tasmota/language/tr-TR.h
@@ -1,701 +1,703 @@
-/*
- tr-TR.h - localization for Turkish - Turkey for Tasmota
-
- Copyright (C) 2019 Ali Sait Teke 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 .
-*/
-
-#ifndef _LANGUAGE_TR_TR_H_
-#define _LANGUAGE_TR_TR_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.1.1
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1055
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "tr"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "."
-#define D_MONTH_DAY_SEPARATOR "."
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "PazPztSalCarPerCumCmt"
-#define D_MONTH3LIST "OckSubMarNisMayHazTemAguEylEkmKasAra"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Hava Kalitesi"
-#define D_AP "AP" // Access Point
-#define D_AS "as"
-#define D_AUTO "OTOMATIK"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Yeniden başlama sayısı"
-#define D_BRIGHTLIGHT "Işık"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Buton"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bayt"
-#define D_CELSIUS "Derece"
-#define D_CHANNEL "Channel"
-#define D_CO2 "Karbon dioksit"
-#define D_CODE "kod" // Button code
-#define D_COLDLIGHT "Soğuk"
-#define D_COMMAND "Komut"
-#define D_CONNECTED "Bağlandı"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Sayı"
-#define D_COUNTER "Sayaç"
-#define D_CURRENT "Current" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Karanlık"
-#define D_DEBUG "Hata Ayıklama"
-#define D_DISABLED "Etkin Değil"
-#define D_DISTANCE "Mesage"
-#define D_DNS_SERVER "DNS Sunucu"
-#define D_DONE "Tamam"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emülasyon"
-#define D_ENABLED "Etkin"
-#define D_ERASE "Temizle"
-#define D_ERROR "Hata"
-#define D_FAHRENHEIT "Fahrenayt"
-#define D_FAILED "Başlarısız"
-#define D_FALLBACK "Geri iletim"
-#define D_FALLBACK_TOPIC "Geri İletim Topiği"
-#define D_FALSE "False"
-#define D_FILE "Dosya"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Boş Hafıza"
-#define D_FREQUENCY "Frekans"
-#define D_GAS "Gas"
-#define D_GATEWAY "Geçit"
-#define D_GROUP "Grup"
-#define D_HOST "Host"
-#define D_HOSTNAME "Host Adresi"
-#define D_HUMIDITY "Nem"
-#define D_ILLUMINANCE "Aydınlık"
-#define D_IMMEDIATE "derhal" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Bilgi"
-#define D_INFRARED "Kızılötesi"
-#define D_INITIALIZED "Başlatıldı"
-#define D_IP_ADDRESS "IP Adresi"
-#define D_LIGHT "Işık"
-#define D_LWT "LWT"
-#define D_MODULE "Modül"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-press"
-#define D_NOISE "Noise"
-#define D_NONE "None"
-#define D_OFF "Off"
-#define D_OFFLINE "Çevirimdışı"
-#define D_OK "Tamam"
-#define D_ON "On"
-#define D_ONLINE "Çevirimiçi"
-#define D_PASSWORD "Şifre"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Güç Faktörü"
-#define D_POWERUSAGE "Güç"
-#define D_POWERUSAGE_ACTIVE "Aktif Güç"
-#define D_POWERUSAGE_APPARENT "Görünen Güç"
-#define D_POWERUSAGE_REACTIVE "Reaktif Güç"
-#define D_PRESSURE "Basınç"
-#define D_PRESSUREATSEALEVEL "Deniz Seviyesi Basıncı"
-#define D_PROGRAM_FLASH_SIZE "Yazılım Flash Boyutu"
-#define D_PROGRAM_SIZE "Yazılım Boyutu"
-#define D_PROJECT "Proje"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Alınan"
-#define D_RESTART "Yeniden Başlat"
-#define D_RESTARTING "Yeniden Başlatılıyor"
-#define D_RESTART_REASON "Yeniden Başlatma Sebebi"
-#define D_RESTORE "restore"
-#define D_RETAINED "tutulan"
-#define D_RULE "Kural"
-#define D_SAVE "Kaydet"
-#define D_SENSOR "Sensör"
-#define D_SSID "SSId"
-#define D_START "Başlat"
-#define D_STD_TIME "STD"
-#define D_STOP "Durdur"
-#define D_SUBNET_MASK "Altağ Geçidi Maskesi"
-#define D_SUBSCRIBE_TO "Abone olunan"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Başarıyla Tamamlandı"
-#define D_SUNRISE "Gün doğumu"
-#define D_SUNSET "Gün batımı"
-#define D_TEMPERATURE "Sıcaklık"
-#define D_TO "den"
-#define D_TOGGLE "Geçiş Tuşu"
-#define D_TOPIC "Başlık"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "İletim"
-#define D_TRUE "True"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "yükseltme"
-#define D_UPLOAD "Yükleme"
-#define D_UPTIME "Açık Kalma Süresi"
-#define D_USER "Kullanıcı"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Indeksi"
-#define D_UV_INDEX_1 "Low"
-#define D_UV_INDEX_2 "Mid"
-#define D_UV_INDEX_3 "High"
-#define D_UV_INDEX_4 "Danger"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "UV Seviyesi"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Versiyon"
-#define D_VOLTAGE "Voltaj"
-#define D_WEIGHT "Weight"
-#define D_WARMLIGHT "Sıcak"
-#define D_WEB_SERVER "Web Sunucusu"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "UYARI Bu versiyon ayarların kalıcı olarak kaydedilmesine olanak sağlamıyor"
-#define D_LEVEL_10 "seviye 1-0"
-#define D_LEVEL_01 "seviye 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Seri port loglaması kapalı"
-#define D_SYSLOG_LOGGING_REENABLED "Sistem loglaması tekrar aktif"
-
-#define D_SET_BAUDRATE_TO "Baud hızını şu şekilde değiştir"
-#define D_RECEIVED_TOPIC "Alınan Başlık"
-#define D_DATA_SIZE "Veri Büyüklüğü"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Döngü bloke edildi"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
-#define D_ACTIVE_FOR_3_MINUTES "3 dakika aktif"
-#define D_FAILED_TO_START "başlatma başarılı olamadı"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "AP'ye bağlan"
-#define D_IN_MODE "modunda"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP adresi alınamadığı için bağlantı kurulamadı"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Ap'ye ulaşılamadı"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Girilen parolayı AP kabul etmedi"
-#define D_CONNECT_FAILED_AP_TIMEOUT "AP'ye bağlanılırken süre aşımı oluştu"
-#define D_ATTEMPTING_CONNECTION "Yeniden bağlanılıyor..."
-#define D_CHECKING_CONNECTION "Bağlantı kontrol ediliyor..."
-#define D_QUERY_DONE "Soru tamamlandı. MQTT servisleri bulundu"
-#define D_MQTT_SERVICE_FOUND "Üzerinden MQTT serivisi tespit edildi"
-#define D_FOUND_AT "(bulundu)"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog hostu bulunamadı"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Bellekten (Flash) kaydedidi:"
-#define D_LOADED_FROM_FLASH_AT "Bellekten (Flash) okundu"
-#define D_USE_DEFAULTS "Varsayılanları Kullan"
-#define D_ERASED_SECTOR "Sektör temizlendi"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Donanım yazılımı çok düşük
lütfen yükseltin"
-#define D_WEBSERVER_ACTIVE_ON "Web sunucusu aktif"
-#define D_WITH_IP_ADDRESS "IP adres ile"
-#define D_WEBSERVER_STOPPED "Web sunucusu durdu"
-#define D_FILE_NOT_FOUND "Dosya Bulunamadı"
-#define D_REDIRECTED "Portala yönlendirildiniz"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi yöneticisi AP olarak ayarlandı ve istasyon olarak bekletiliyor"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi yöneticisi AP olarak ayarlandı"
-#define D_TRYING_TO_CONNECT "Cihaz ağa bağlanmaya çalışıyor"
-
-#define D_RESTART_IN "Burada tekrar başlat"
-#define D_SECONDS "saniye"
-#define D_DEVICE_WILL_RESTART "Birkaç saniye içerisinde cihaz tekrar başlatılacak"
-#define D_BUTTON_TOGGLE "Toggle"
-#define D_CONFIGURATION "Konfigürasyon"
-#define D_INFORMATION "Bilgi"
-#define D_FIRMWARE_UPGRADE "Cihaz yazılımını Güncelle"
-#define D_CONSOLE "Konsol"
-#define D_CONFIRM_RESTART "Yeniden Başlatmayı Onayla"
-
-#define D_CONFIGURE_MODULE "Modül Ayarlarını Değiştir"
-#define D_CONFIGURE_WIFI "WiFi'i Ayarlarını Değiştir"
-#define D_CONFIGURE_MQTT "MQTT'yi Ayarlarını Değiştir"
-#define D_CONFIGURE_DOMOTICZ "Domoticz Ayarlarını Değiştir"
-#define D_CONFIGURE_LOGGING "Loglama Ayarlarını Değiştir"
-#define D_CONFIGURE_OTHER "Diğer Ayarları Değiştir"
-#define D_CONFIRM_RESET_CONFIGURATION "Resetleme Ayarlarını Onayla"
-#define D_RESET_CONFIGURATION "Tüm Ayarları Resetle"
-#define D_BACKUP_CONFIGURATION "Ayarları Yedekle"
-#define D_RESTORE_CONFIGURATION "Ayarları Geri Yükle"
-#define D_MAIN_MENU "Ana Menü"
-
-#define D_MODULE_PARAMETERS "Modül parametreleri"
-#define D_MODULE_TYPE "Modul türü"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Wifi parametreleri"
-#define D_SCAN_FOR_WIFI_NETWORKS "Çevredeki Wifi Networklerini Tara"
-#define D_SCAN_DONE "Tarama tamamladı"
-#define D_NO_NETWORKS_FOUND "Herhangi wifi ağı bulunamadı"
-#define D_REFRESH_TO_SCAN_AGAIN "Tekrar tarama - yenile"
-#define D_DUPLICATE_ACCESSPOINT "AP'yi çoğalt"
-#define D_SKIPPING_LOW_QUALITY "Düşük kalitedekileri dikkate alma"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 Adı (SSId)"
-#define D_AP1_PASSWORD "AP1 Parolası"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Parolası"
-
-#define D_MQTT_PARAMETERS "MQTT parametreleri"
-#define D_CLIENT "İstemci"
-#define D_FULL_TOPIC "Tüm Başlık"
-
-#define D_LOGGING_PARAMETERS "Loglama parametreleri"
-#define D_SERIAL_LOG_LEVEL "Serial log seviyesi"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web log seviyesi"
-#define D_SYS_LOG_LEVEL "Syslog seviyesi"
-#define D_MORE_DEBUG "Hata ayıklama devamı"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Telemetri peryodu"
-
-#define D_OTHER_PARAMETERS "Diğer parametreler"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Web Yönetici Şifresi"
-#define D_MQTT_ENABLE "MQTT aktif"
-#define D_FRIENDLY_NAME "Kullanıcı Dostu İsim"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "tekli cihaz"
-#define D_MULTI_DEVICE "çoklu cihaz"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Ayarları Kaydet"
-#define D_CONFIGURATION_SAVED "Ayarlar kaydedildi"
-#define D_CONFIGURATION_RESET "Ayarlar resetlendi"
-
-#define D_PROGRAM_VERSION "Yazılım versiyonu"
-#define D_BUILD_DATE_AND_TIME "Derleme Tarihi ve Saati"
-#define D_CORE_AND_SDK_VERSION "Core/SDK Versiyonu"
-#define D_FLASH_WRITE_COUNT "Belleğe (flash) Yazma Sayısı"
-#define D_MAC_ADDRESS "MAC Adresi"
-#define D_MQTT_HOST "MQTT Host"
-#define D_MQTT_PORT "MQTT Port"
-#define D_MQTT_CLIENT "MQTT İstemcisi"
-#define D_MQTT_USER "MQTT Kullanıcısı"
-#define D_MQTT_TOPIC "MQTT Topiği"
-#define D_MQTT_GROUP_TOPIC "MQTT Grup Topiği"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topik"
-#define D_MDNS_DISCOVERY "mDNS Keşfi"
-#define D_MDNS_ADVERTISE "mDNS Yayını"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Flash Boyutu"
-#define D_FREE_PROGRAM_SPACE "Boşta Yazılım Alanı Boyutu"
-
-#define D_UPGRADE_BY_WEBSERVER "Web server kullanarak yükselt"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Yükseltmeyi başlat"
-#define D_UPGRADE_BY_FILE_UPLOAD "Dosya kullanrak yükset"
-#define D_UPLOAD_STARTED "Yükleme başlatıldı"
-#define D_UPGRADE_STARTED "YÜkestlme başlatıldı"
-#define D_UPLOAD_DONE "Yükleme Tamamlandı"
-#define D_UPLOAD_ERR_1 "Dosya seçilmedi"
-#define D_UPLOAD_ERR_2 "Boş yer yok"
-#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
-#define D_UPLOAD_ERR_4 "Yazılımın boyutu gerçek boyutundan fazla"
-#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
-#define D_UPLOAD_ERR_6 "Yükleme başarısız. Enable logging 3"
-#define D_UPLOAD_ERR_7 "Yükleme iptal edildi"
-#define D_UPLOAD_ERR_8 "Geçersiz dosya"
-#define D_UPLOAD_ERR_9 "File too large"
-#define D_UPLOAD_ERR_10 "Failed to init RF chip"
-#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
-#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
-#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
-#define D_UPLOAD_ERROR_CODE "Upload error code"
-
-#define D_ENTER_COMMAND "Komut girişi"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
-#define D_NEED_USER_AND_PASSWORD "Need user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verify TLS fingerprint..."
-#define D_TLS_CONNECT_FAILED_TO "TLS Connect failed to"
-#define D_RETRY_IN "Retry in"
-#define D_VERIFIED "Verified using Fingerprint"
-#define D_INSECURE "Insecure connection due to invalid Fingerprint"
-#define D_CONNECT_FAILED_TO "Connect failed to"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast kapalı"
-#define D_MULTICAST_REJOINED "Multicast (tekrar)bağlanıldı"
-#define D_MULTICAST_JOIN_FAILED "Multicast bağlantısı başarısız"
-#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo setup"
-#define D_RESPONSE_SENT "Response sent"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue kurulumu"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API'si entegre edilmedi"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST argümanları"
-#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Zamanlayıcıyı güncelle"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Zamanlayıcı Ayarları"
-#define D_TIMER_PARAMETERS "Zamanlayıcı Parametreleri"
-#define D_TIMER_ENABLE "Zamanlayıcı Aktif"
-#define D_TIMER_ARM "Arm"
-#define D_TIMER_TIME "Zaman"
-#define D_TIMER_DAYS "Gün"
-#define D_TIMER_REPEAT "Tekrar"
-#define D_TIMER_OUTPUT "Output"
-#define D_TIMER_ACTION "Action"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX Ayarları"
-#define D_KNX_PARAMETERS "KNX Parametreleri"
-#define D_KNX_GENERAL_CONFIG "Genel Ayarlar"
-#define D_KNX_PHYSICAL_ADDRESS "Fiziksel Addres"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
-#define D_KNX_ENABLE "KNX Aktif"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
-#define D_ADD "Ekle"
-#define D_DELETE "Sil"
-#define D_REPLY "Cevapla"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
-#define D_RECEIVED_FROM "Received from"
-#define D_KNX_COMMAND_WRITE "Yaz"
-#define D_KNX_COMMAND_READ "Oku"
-#define D_KNX_COMMAND_OTHER "Diğer"
-#define D_SENT_TO "gönder"
-#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energy Today"
-#define D_ENERGY_YESTERDAY "Energy Yesterday"
-#define D_ENERGY_TOTAL "Energy Total"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensör başgül"
-#define D_SENSOR_CRC_ERROR "Sensor CRC hatası"
-#define D_SENSORS_FOUND "Sensörler bulundu"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Timeout waiting for"
-#define D_START_SIGNAL_LOW "düşük sinyal başlat"
-#define D_START_SIGNAL_HIGH "yüksek sinyal başlat"
-#define D_PULSE "pulse"
-#define D_CHECKSUM_FAILURE "Checksum failure"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
-#define D_SHT1X_FOUND "SHT1X found"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particals"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remove weigth"
-#define D_HX_CAL_REFERENCE "Load reference weigth"
-#define D_HX_CAL_DONE "Calibrated"
-#define D_HX_CAL_FAIL "Calibration failed"
-#define D_RESET_HX711 "Reset Scale"
-#define D_CONFIGURE_HX711 "Configure Scale"
-#define D_HX711_PARAMETERS "Scale parameters"
-#define D_ITEM_WEIGHT "Item weight"
-#define D_REFERENCE_WEIGHT "Reference weigth"
-#define D_CALIBRATE "Calibrate"
-#define D_CALIBRATION "Calibration"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Wind Direction"
-#define D_TX20_WIND_SPEED "Wind Speed"
-#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
-#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sectors"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_TR_TR_H_
+/*
+ tr-TR.h - localization for Turkish - Turkey for Tasmota
+
+ Copyright (C) 2019 Ali Sait Teke 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 .
+*/
+
+#ifndef _LANGUAGE_TR_TR_H_
+#define _LANGUAGE_TR_TR_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.1.1
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1055
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "tr"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "."
+#define D_MONTH_DAY_SEPARATOR "."
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "PazPztSalCarPerCumCmt"
+#define D_MONTH3LIST "OckSubMarNisMayHazTemAguEylEkmKasAra"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Hava Kalitesi"
+#define D_AP "AP" // Access Point
+#define D_AS "as"
+#define D_AUTO "OTOMATIK"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Yeniden başlama sayısı"
+#define D_BRIGHTLIGHT "Işık"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Buton"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bayt"
+#define D_CELSIUS "Derece"
+#define D_CHANNEL "Channel"
+#define D_CO2 "Karbon dioksit"
+#define D_CODE "kod" // Button code
+#define D_COLDLIGHT "Soğuk"
+#define D_COMMAND "Komut"
+#define D_CONNECTED "Bağlandı"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Sayı"
+#define D_COUNTER "Sayaç"
+#define D_CURRENT "Current" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Karanlık"
+#define D_DEBUG "Hata Ayıklama"
+#define D_DISABLED "Etkin Değil"
+#define D_DISTANCE "Mesage"
+#define D_DNS_SERVER "DNS Sunucu"
+#define D_DONE "Tamam"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emülasyon"
+#define D_ENABLED "Etkin"
+#define D_ERASE "Temizle"
+#define D_ERROR "Hata"
+#define D_FAHRENHEIT "Fahrenayt"
+#define D_FAILED "Başlarısız"
+#define D_FALLBACK "Geri iletim"
+#define D_FALLBACK_TOPIC "Geri İletim Topiği"
+#define D_FALSE "False"
+#define D_FILE "Dosya"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Boş Hafıza"
+#define D_FREQUENCY "Frekans"
+#define D_GAS "Gas"
+#define D_GATEWAY "Geçit"
+#define D_GROUP "Grup"
+#define D_HOST "Host"
+#define D_HOSTNAME "Host Adresi"
+#define D_HUMIDITY "Nem"
+#define D_ILLUMINANCE "Aydınlık"
+#define D_IMMEDIATE "derhal" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Bilgi"
+#define D_INFRARED "Kızılötesi"
+#define D_INITIALIZED "Başlatıldı"
+#define D_IP_ADDRESS "IP Adresi"
+#define D_LIGHT "Işık"
+#define D_LWT "LWT"
+#define D_MODULE "Modül"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-press"
+#define D_NOISE "Noise"
+#define D_NONE "None"
+#define D_OFF "Off"
+#define D_OFFLINE "Çevirimdışı"
+#define D_OK "Tamam"
+#define D_ON "On"
+#define D_ONLINE "Çevirimiçi"
+#define D_PASSWORD "Şifre"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Güç Faktörü"
+#define D_POWERUSAGE "Güç"
+#define D_POWERUSAGE_ACTIVE "Aktif Güç"
+#define D_POWERUSAGE_APPARENT "Görünen Güç"
+#define D_POWERUSAGE_REACTIVE "Reaktif Güç"
+#define D_PRESSURE "Basınç"
+#define D_PRESSUREATSEALEVEL "Deniz Seviyesi Basıncı"
+#define D_PROGRAM_FLASH_SIZE "Yazılım Flash Boyutu"
+#define D_PROGRAM_SIZE "Yazılım Boyutu"
+#define D_PROJECT "Proje"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Alınan"
+#define D_RESTART "Yeniden Başlat"
+#define D_RESTARTING "Yeniden Başlatılıyor"
+#define D_RESTART_REASON "Yeniden Başlatma Sebebi"
+#define D_RESTORE "restore"
+#define D_RETAINED "tutulan"
+#define D_RULE "Kural"
+#define D_SAVE "Kaydet"
+#define D_SENSOR "Sensör"
+#define D_SSID "SSId"
+#define D_START "Başlat"
+#define D_STD_TIME "STD"
+#define D_STOP "Durdur"
+#define D_SUBNET_MASK "Altağ Geçidi Maskesi"
+#define D_SUBSCRIBE_TO "Abone olunan"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Başarıyla Tamamlandı"
+#define D_SUNRISE "Gün doğumu"
+#define D_SUNSET "Gün batımı"
+#define D_TEMPERATURE "Sıcaklık"
+#define D_TO "den"
+#define D_TOGGLE "Geçiş Tuşu"
+#define D_TOPIC "Başlık"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "İletim"
+#define D_TRUE "True"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "yükseltme"
+#define D_UPLOAD "Yükleme"
+#define D_UPTIME "Açık Kalma Süresi"
+#define D_USER "Kullanıcı"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Indeksi"
+#define D_UV_INDEX_1 "Low"
+#define D_UV_INDEX_2 "Mid"
+#define D_UV_INDEX_3 "High"
+#define D_UV_INDEX_4 "Danger"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "UV Seviyesi"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Versiyon"
+#define D_VOLTAGE "Voltaj"
+#define D_WEIGHT "Weight"
+#define D_WARMLIGHT "Sıcak"
+#define D_WEB_SERVER "Web Sunucusu"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "UYARI Bu versiyon ayarların kalıcı olarak kaydedilmesine olanak sağlamıyor"
+#define D_LEVEL_10 "seviye 1-0"
+#define D_LEVEL_01 "seviye 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Seri port loglaması kapalı"
+#define D_SYSLOG_LOGGING_REENABLED "Sistem loglaması tekrar aktif"
+
+#define D_SET_BAUDRATE_TO "Baud hızını şu şekilde değiştir"
+#define D_RECEIVED_TOPIC "Alınan Başlık"
+#define D_DATA_SIZE "Veri Büyüklüğü"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Döngü bloke edildi"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
+#define D_ACTIVE_FOR_3_MINUTES "3 dakika aktif"
+#define D_FAILED_TO_START "başlatma başarılı olamadı"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "AP'ye bağlan"
+#define D_IN_MODE "modunda"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP adresi alınamadığı için bağlantı kurulamadı"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Ap'ye ulaşılamadı"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Girilen parolayı AP kabul etmedi"
+#define D_CONNECT_FAILED_AP_TIMEOUT "AP'ye bağlanılırken süre aşımı oluştu"
+#define D_ATTEMPTING_CONNECTION "Yeniden bağlanılıyor..."
+#define D_CHECKING_CONNECTION "Bağlantı kontrol ediliyor..."
+#define D_QUERY_DONE "Soru tamamlandı. MQTT servisleri bulundu"
+#define D_MQTT_SERVICE_FOUND "Üzerinden MQTT serivisi tespit edildi"
+#define D_FOUND_AT "(bulundu)"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog hostu bulunamadı"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Bellekten (Flash) kaydedidi:"
+#define D_LOADED_FROM_FLASH_AT "Bellekten (Flash) okundu"
+#define D_USE_DEFAULTS "Varsayılanları Kullan"
+#define D_ERASED_SECTOR "Sektör temizlendi"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Donanım yazılımı çok düşük
lütfen yükseltin"
+#define D_WEBSERVER_ACTIVE_ON "Web sunucusu aktif"
+#define D_WITH_IP_ADDRESS "IP adres ile"
+#define D_WEBSERVER_STOPPED "Web sunucusu durdu"
+#define D_FILE_NOT_FOUND "Dosya Bulunamadı"
+#define D_REDIRECTED "Portala yönlendirildiniz"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi yöneticisi AP olarak ayarlandı ve istasyon olarak bekletiliyor"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi yöneticisi AP olarak ayarlandı"
+#define D_TRYING_TO_CONNECT "Cihaz ağa bağlanmaya çalışıyor"
+
+#define D_RESTART_IN "Burada tekrar başlat"
+#define D_SECONDS "saniye"
+#define D_DEVICE_WILL_RESTART "Birkaç saniye içerisinde cihaz tekrar başlatılacak"
+#define D_BUTTON_TOGGLE "Toggle"
+#define D_CONFIGURATION "Konfigürasyon"
+#define D_INFORMATION "Bilgi"
+#define D_FIRMWARE_UPGRADE "Cihaz yazılımını Güncelle"
+#define D_CONSOLE "Konsol"
+#define D_CONFIRM_RESTART "Yeniden Başlatmayı Onayla"
+
+#define D_CONFIGURE_MODULE "Modül Ayarlarını Değiştir"
+#define D_CONFIGURE_WIFI "WiFi'i Ayarlarını Değiştir"
+#define D_CONFIGURE_MQTT "MQTT'yi Ayarlarını Değiştir"
+#define D_CONFIGURE_DOMOTICZ "Domoticz Ayarlarını Değiştir"
+#define D_CONFIGURE_LOGGING "Loglama Ayarlarını Değiştir"
+#define D_CONFIGURE_OTHER "Diğer Ayarları Değiştir"
+#define D_CONFIRM_RESET_CONFIGURATION "Resetleme Ayarlarını Onayla"
+#define D_RESET_CONFIGURATION "Tüm Ayarları Resetle"
+#define D_BACKUP_CONFIGURATION "Ayarları Yedekle"
+#define D_RESTORE_CONFIGURATION "Ayarları Geri Yükle"
+#define D_MAIN_MENU "Ana Menü"
+
+#define D_MODULE_PARAMETERS "Modül parametreleri"
+#define D_MODULE_TYPE "Modul türü"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Wifi parametreleri"
+#define D_SCAN_FOR_WIFI_NETWORKS "Çevredeki Wifi Networklerini Tara"
+#define D_SCAN_DONE "Tarama tamamladı"
+#define D_NO_NETWORKS_FOUND "Herhangi wifi ağı bulunamadı"
+#define D_REFRESH_TO_SCAN_AGAIN "Tekrar tarama - yenile"
+#define D_DUPLICATE_ACCESSPOINT "AP'yi çoğalt"
+#define D_SKIPPING_LOW_QUALITY "Düşük kalitedekileri dikkate alma"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 Adı (SSId)"
+#define D_AP1_PASSWORD "AP1 Parolası"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Parolası"
+
+#define D_MQTT_PARAMETERS "MQTT parametreleri"
+#define D_CLIENT "İstemci"
+#define D_FULL_TOPIC "Tüm Başlık"
+
+#define D_LOGGING_PARAMETERS "Loglama parametreleri"
+#define D_SERIAL_LOG_LEVEL "Serial log seviyesi"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web log seviyesi"
+#define D_SYS_LOG_LEVEL "Syslog seviyesi"
+#define D_MORE_DEBUG "Hata ayıklama devamı"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Telemetri peryodu"
+
+#define D_OTHER_PARAMETERS "Diğer parametreler"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Web Yönetici Şifresi"
+#define D_MQTT_ENABLE "MQTT aktif"
+#define D_FRIENDLY_NAME "Kullanıcı Dostu İsim"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "tekli cihaz"
+#define D_MULTI_DEVICE "çoklu cihaz"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Ayarları Kaydet"
+#define D_CONFIGURATION_SAVED "Ayarlar kaydedildi"
+#define D_CONFIGURATION_RESET "Ayarlar resetlendi"
+
+#define D_PROGRAM_VERSION "Yazılım versiyonu"
+#define D_BUILD_DATE_AND_TIME "Derleme Tarihi ve Saati"
+#define D_CORE_AND_SDK_VERSION "Core/SDK Versiyonu"
+#define D_FLASH_WRITE_COUNT "Belleğe (flash) Yazma Sayısı"
+#define D_MAC_ADDRESS "MAC Adresi"
+#define D_MQTT_HOST "MQTT Host"
+#define D_MQTT_PORT "MQTT Port"
+#define D_MQTT_CLIENT "MQTT İstemcisi"
+#define D_MQTT_USER "MQTT Kullanıcısı"
+#define D_MQTT_TOPIC "MQTT Topiği"
+#define D_MQTT_GROUP_TOPIC "MQTT Grup Topiği"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topik"
+#define D_MDNS_DISCOVERY "mDNS Keşfi"
+#define D_MDNS_ADVERTISE "mDNS Yayını"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Flash Boyutu"
+#define D_FREE_PROGRAM_SPACE "Boşta Yazılım Alanı Boyutu"
+
+#define D_UPGRADE_BY_WEBSERVER "Web server kullanarak yükselt"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Yükseltmeyi başlat"
+#define D_UPGRADE_BY_FILE_UPLOAD "Dosya kullanrak yükset"
+#define D_UPLOAD_STARTED "Yükleme başlatıldı"
+#define D_UPGRADE_STARTED "YÜkestlme başlatıldı"
+#define D_UPLOAD_DONE "Yükleme Tamamlandı"
+#define D_UPLOAD_ERR_1 "Dosya seçilmedi"
+#define D_UPLOAD_ERR_2 "Boş yer yok"
+#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
+#define D_UPLOAD_ERR_4 "Yazılımın boyutu gerçek boyutundan fazla"
+#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
+#define D_UPLOAD_ERR_6 "Yükleme başarısız. Enable logging 3"
+#define D_UPLOAD_ERR_7 "Yükleme iptal edildi"
+#define D_UPLOAD_ERR_8 "Geçersiz dosya"
+#define D_UPLOAD_ERR_9 "File too large"
+#define D_UPLOAD_ERR_10 "Failed to init RF chip"
+#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
+#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
+#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERROR_CODE "Upload error code"
+
+#define D_ENTER_COMMAND "Komut girişi"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
+#define D_NEED_USER_AND_PASSWORD "Need user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verify TLS fingerprint..."
+#define D_TLS_CONNECT_FAILED_TO "TLS Connect failed to"
+#define D_RETRY_IN "Retry in"
+#define D_VERIFIED "Verified using Fingerprint"
+#define D_INSECURE "Insecure connection due to invalid Fingerprint"
+#define D_CONNECT_FAILED_TO "Connect failed to"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast kapalı"
+#define D_MULTICAST_REJOINED "Multicast (tekrar)bağlanıldı"
+#define D_MULTICAST_JOIN_FAILED "Multicast bağlantısı başarısız"
+#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo setup"
+#define D_RESPONSE_SENT "Response sent"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue kurulumu"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API'si entegre edilmedi"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST argümanları"
+#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Zamanlayıcıyı güncelle"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Zamanlayıcı Ayarları"
+#define D_TIMER_PARAMETERS "Zamanlayıcı Parametreleri"
+#define D_TIMER_ENABLE "Zamanlayıcı Aktif"
+#define D_TIMER_ARM "Arm"
+#define D_TIMER_TIME "Zaman"
+#define D_TIMER_DAYS "Gün"
+#define D_TIMER_REPEAT "Tekrar"
+#define D_TIMER_OUTPUT "Output"
+#define D_TIMER_ACTION "Action"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX Ayarları"
+#define D_KNX_PARAMETERS "KNX Parametreleri"
+#define D_KNX_GENERAL_CONFIG "Genel Ayarlar"
+#define D_KNX_PHYSICAL_ADDRESS "Fiziksel Addres"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
+#define D_KNX_ENABLE "KNX Aktif"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
+#define D_ADD "Ekle"
+#define D_DELETE "Sil"
+#define D_REPLY "Cevapla"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
+#define D_RECEIVED_FROM "Received from"
+#define D_KNX_COMMAND_WRITE "Yaz"
+#define D_KNX_COMMAND_READ "Oku"
+#define D_KNX_COMMAND_OTHER "Diğer"
+#define D_SENT_TO "gönder"
+#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energy Today"
+#define D_ENERGY_YESTERDAY "Energy Yesterday"
+#define D_ENERGY_TOTAL "Energy Total"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensör başgül"
+#define D_SENSOR_CRC_ERROR "Sensor CRC hatası"
+#define D_SENSORS_FOUND "Sensörler bulundu"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Timeout waiting for"
+#define D_START_SIGNAL_LOW "düşük sinyal başlat"
+#define D_START_SIGNAL_HIGH "yüksek sinyal başlat"
+#define D_PULSE "pulse"
+#define D_CHECKSUM_FAILURE "Checksum failure"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
+#define D_SHT1X_FOUND "SHT1X found"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particals"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remove weigth"
+#define D_HX_CAL_REFERENCE "Load reference weigth"
+#define D_HX_CAL_DONE "Calibrated"
+#define D_HX_CAL_FAIL "Calibration failed"
+#define D_RESET_HX711 "Reset Scale"
+#define D_CONFIGURE_HX711 "Configure Scale"
+#define D_HX711_PARAMETERS "Scale parameters"
+#define D_ITEM_WEIGHT "Item weight"
+#define D_REFERENCE_WEIGHT "Reference weigth"
+#define D_CALIBRATE "Calibrate"
+#define D_CALIBRATION "Calibration"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Wind Direction"
+#define D_TX20_WIND_SPEED "Wind Speed"
+#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
+#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sectors"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_TR_TR_H_
diff --git a/tasmota/language/uk-UK.h b/tasmota/language/uk-UK.h
index b4a314630..98f87e932 100644
--- a/tasmota/language/uk-UK.h
+++ b/tasmota/language/uk-UK.h
@@ -1,701 +1,703 @@
-/*
- uk-UK.h - localization for Ukrainian - Ukraine for Tasmota
-
- Copyright (C) 2019 Theo Arends / vadym-adik
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_UK_UK_H_
-#define _LANGUAGE_UK_UK_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.14.0a
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1058
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "uk"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "НедПонВівСерЧетПятСуб"
-#define D_MONTH3LIST "СічЛютБерКвіТраЧерЛипСерВерЖовЛисГру"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Якість повітря"
-#define D_AP "Точка доступу" // Access Point
-#define D_AS "як"
-#define D_AUTO "АВТО"
-#define D_BLINK "Блимати"
-#define D_BLINKOFF "Не блимати"
-#define D_BOOT_COUNT "К-сть завант."
-#define D_BRIGHTLIGHT "Яскравість"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Кнопка"
-#define D_BY " " // Written by me
-#define D_BYTES "Байт"
-#define D_CELSIUS "Цельсія"
-#define D_CHANNEL "Канал"
-#define D_CO2 "Вуглек. газ"
-#define D_CODE "код" // Button code
-#define D_COLDLIGHT "Холодний"
-#define D_COMMAND "Команда"
-#define D_CONNECTED "Під'єднано"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Розмір"
-#define D_COUNTER "Лічильник"
-#define D_CURRENT "Струм" // As in Voltage and Current
-#define D_DATA "Дані"
-#define D_DARKLIGHT "Темний"
-#define D_DEBUG "Налагодження"
-#define D_DISABLED "Заблоковано"
-#define D_DISTANCE "Відстань"
-#define D_DNS_SERVER "Сервер DNS"
-#define D_DONE "Виконано"
-#define D_DST_TIME "Літній час"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Емуляція"
-#define D_ENABLED "Активно"
-#define D_ERASE "Стирати"
-#define D_ERROR "Помилка"
-#define D_FAHRENHEIT "Фаренгейт"
-#define D_FAILED "Невдало"
-#define D_FALLBACK "Зворотній зв'язок"
-#define D_FALLBACK_TOPIC "Топік зворотнього зв'язку"
-#define D_FALSE "Ні"
-#define D_FILE "Файл"
-#define D_FLOW_RATE "Потік"
-#define D_FREE_MEMORY "Вільна память"
-#define D_FREQUENCY "Частота"
-#define D_GAS "Газ"
-#define D_GATEWAY "Шлюз"
-#define D_GROUP "Група"
-#define D_HOST "Хост"
-#define D_HOSTNAME "Назва хосту"
-#define D_HUMIDITY "Вологість"
-#define D_ILLUMINANCE "Освітленність"
-#define D_IMMEDIATE "Негайно" // Button immediate
-#define D_INDEX "Індекс"
-#define D_INFO "Інфо"
-#define D_INFRARED "Інфрачервоний"
-#define D_INITIALIZED "Ініціалізовано"
-#define D_IP_ADDRESS "IP адреса"
-#define D_LIGHT "Світло"
-#define D_LWT "LWT"
-#define D_MODULE "Модуль"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "Багаторазове натискання"
-#define D_NOISE "Шум"
-#define D_NONE "Нічого"
-#define D_OFF "Вимк."
-#define D_OFFLINE "Офф-лайн"
-#define D_OK "Ок"
-#define D_ON "Увімк."
-#define D_ONLINE "Он-лайн"
-#define D_PASSWORD "Гасло"
-#define D_PORT "Порт"
-#define D_POWER_FACTOR "Коефіцієнт потужності"
-#define D_POWERUSAGE "Потужність"
-#define D_POWERUSAGE_ACTIVE "Активна потужність"
-#define D_POWERUSAGE_APPARENT "Дійсна потужність"
-#define D_POWERUSAGE_REACTIVE "Реактивна потужність"
-#define D_PRESSURE "Тиск"
-#define D_PRESSUREATSEALEVEL "Тиск на рівні моря"
-#define D_PROGRAM_FLASH_SIZE "Розмір Flash для програм"
-#define D_PROGRAM_SIZE "Розмір програм"
-#define D_PROJECT "Проект"
-#define D_RAIN "Дощ"
-#define D_RECEIVED "Отримано"
-#define D_RESTART "Перезавантаження"
-#define D_RESTARTING "Перезавантаження"
-#define D_RESTART_REASON "Причина перезавантаження"
-#define D_RESTORE "відновлення"
-#define D_RETAINED "зберігати"
-#define D_RULE "Правило"
-#define D_SAVE "Зберегти"
-#define D_SENSOR "Давач"
-#define D_SSID "SSID"
-#define D_START "Старт"
-#define D_STD_TIME "Стандартний час"
-#define D_STOP "Стоп"
-#define D_SUBNET_MASK "Маска підмережі"
-#define D_SUBSCRIBE_TO "Підписатись на"
-#define D_UNSUBSCRIBE_FROM "Відписатися від"
-#define D_SUCCESSFUL "Успішно"
-#define D_SUNRISE "Схід сонця"
-#define D_SUNSET "Захід сонця"
-#define D_TEMPERATURE "Температура"
-#define D_TO "до"
-#define D_TOGGLE "Перекл."
-#define D_TOPIC "Топік"
-#define D_TOTAL_USAGE "Загальне споживання"
-#define D_TRANSMIT "Передати"
-#define D_TRUE "Так"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "оновлення"
-#define D_UPLOAD "Завантажити"
-#define D_UPTIME "Час роботи"
-#define D_USER "Користувач"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Індекс УФ"
-#define D_UV_INDEX_1 "Низький"
-#define D_UV_INDEX_2 "Середній"
-#define D_UV_INDEX_3 "Високий"
-#define D_UV_INDEX_4 "Небезпечний"
-#define D_UV_INDEX_5 "Опіки 1/2 ступеня"
-#define D_UV_INDEX_6 "Опіки 3 ступеня"
-#define D_UV_INDEX_7 "Невідомий"
-#define D_UV_LEVEL "Рівень УФ"
-#define D_UV_POWER "Потужність УФ"
-#define D_VERSION "Версія"
-#define D_VOLTAGE "Напруга"
-#define D_WEIGHT "Вага"
-#define D_WARMLIGHT "Тепло"
-#define D_WEB_SERVER "Web сервер"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ПОПЕРЕДЖЕННЯ! Ця версія не підтримує збереження налаштувань"
-#define D_LEVEL_10 "рівень 1-0"
-#define D_LEVEL_01 "рівень 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serial журнал вимкнений"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog журнал увімкнений"
-
-#define D_SET_BAUDRATE_TO "Встановити швидкість передачі (Baudrate)"
-#define D_RECEIVED_TOPIC "Отриманий Топік"
-#define D_DATA_SIZE "Розмір даних"
-#define D_ANALOG_INPUT "Напруга"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Цикл заблокований"
-#define D_WPS_FAILED_WITH_STATUS "WPS конфігурація з статусом НЕВДАЛА"
-#define D_ACTIVE_FOR_3_MINUTES "активний протягом 3 хвилин"
-#define D_FAILED_TO_START "не вдалось запустити"
-#define D_PATCH_ISSUE_2186 "Проблема з виправленням 2186"
-#define D_CONNECTING_TO_AP "Підключення до AP"
-#define D_IN_MODE "в режимі"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Помилка підключення, IP-адреса не отримана"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Помилка з'єднання, AP не знайдено"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Помилка з'єднання, невірне гасло до AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Помилка з'єднання з AP по тайм-ауту"
-#define D_ATTEMPTING_CONNECTION "Спроба підключення..."
-#define D_CHECKING_CONNECTION "Перевірка з'єднання..."
-#define D_QUERY_DONE "Запит виконаний. Виявлено сервер MQTT"
-#define D_MQTT_SERVICE_FOUND "MQTT сервер знайдено"
-#define D_FOUND_AT "знайдено в"
-#define D_SYSLOG_HOST_NOT_FOUND "Сервер журналу не знайдено"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Збережено в флэш-пам'ять"
-#define D_LOADED_FROM_FLASH_AT "Завантажено з флэш-пам'яті"
-#define D_USE_DEFAULTS "Використовувати значення за замовчуванням"
-#define D_ERASED_SECTOR "Стерто сектор"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Для використання Tasmota треба увімкнути JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Прошивка MINIMAL
будь-ласка оновіть"
-#define D_WEBSERVER_ACTIVE_ON "Веб-сервер активний"
-#define D_WITH_IP_ADDRESS "з IP-адресою"
-#define D_WEBSERVER_STOPPED "Веб-сервер зупинений"
-#define D_FILE_NOT_FOUND "Файл не знайдений"
-#define D_REDIRECTED "Перенаправлено на адаптивний портал"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi менеджер встановлює Точку Доступу і зберігає параметри"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi менеджер встановив Точку Доступу"
-#define D_TRYING_TO_CONNECT "Спроба підключення пристрою до мережі"
-
-#define D_RESTART_IN "Перезавантаження"
-#define D_SECONDS "секунд"
-#define D_DEVICE_WILL_RESTART "Пристрій буде перезавантажено через декілька секунд"
-#define D_BUTTON_TOGGLE "Переключити"
-#define D_CONFIGURATION "Конфігурація"
-#define D_INFORMATION "Інформація"
-#define D_FIRMWARE_UPGRADE "Оновлення прошивки"
-#define D_CONSOLE "Консоль"
-#define D_CONFIRM_RESTART "Підтвердити перезавантаження"
-
-#define D_CONFIGURE_MODULE "Конфігурація модуля"
-#define D_CONFIGURE_WIFI "Конфігурація WiFi"
-#define D_CONFIGURE_MQTT "Конфігурація MQTT"
-#define D_CONFIGURE_DOMOTICZ "Конфігурація Domoticz"
-#define D_CONFIGURE_LOGGING "Конфігурація журналів"
-#define D_CONFIGURE_OTHER "Конфігурація інше"
-#define D_CONFIRM_RESET_CONFIGURATION "Підтвердити скидання конфігурації"
-#define D_RESET_CONFIGURATION "Скидання конфігурації"
-#define D_BACKUP_CONFIGURATION "Резервне копіювання конфігурації"
-#define D_RESTORE_CONFIGURATION "Відновлення конфігурації"
-#define D_MAIN_MENU "Головне меню"
-
-#define D_MODULE_PARAMETERS "Параметри модуля"
-#define D_MODULE_TYPE "Тип модуля"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "АЦП"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial вхід"
-#define D_SERIAL_OUT "Serial вихід"
-
-#define D_WIFI_PARAMETERS "Параметри Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Сканування бездротовихих мереж Wifi"
-#define D_SCAN_DONE "Сканування завершене"
-#define D_NO_NETWORKS_FOUND "Не знайдено мереж"
-#define D_REFRESH_TO_SCAN_AGAIN "Оновити для повторного сканування"
-#define D_DUPLICATE_ACCESSPOINT "Дублювати Точку Доступу (AP)"
-#define D_SKIPPING_LOW_QUALITY "Пропущено через низьку якість"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSID"
-#define D_AP1_PASSWORD "AP1 гасло"
-#define D_AP2_SSID "AP2 SSID"
-#define D_AP2_PASSWORD "AP2 гасло"
-
-#define D_MQTT_PARAMETERS "Параметри MQTT"
-#define D_CLIENT "Клієнт"
-#define D_FULL_TOPIC "Повний Топік"
-
-#define D_LOGGING_PARAMETERS "Параметри журналу"
-#define D_SERIAL_LOG_LEVEL "Serial рівень"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web рівень"
-#define D_SYS_LOG_LEVEL "System рівень"
-#define D_MORE_DEBUG "Додаткова інформація для налагодження"
-#define D_SYSLOG_HOST "System хост"
-#define D_SYSLOG_PORT "System порт"
-#define D_TELEMETRY_PERIOD "Період телеметрії"
-
-#define D_OTHER_PARAMETERS "Параметри Інше"
-#define D_TEMPLATE "Шаблони"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Гасло Web адміністратора"
-#define D_MQTT_ENABLE "MQTT активний"
-#define D_FRIENDLY_NAME "Дружнє Ім'я"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "одиночне"
-#define D_MULTI_DEVICE "мульти"
-
-#define D_CONFIGURE_TEMPLATE "Конфігурація шаблона"
-#define D_TEMPLATE_PARAMETERS "Параметри шаблона"
-#define D_TEMPLATE_NAME "Назва"
-#define D_BASE_TYPE "На основі"
-#define D_TEMPLATE_FLAGS "Опції"
-
-#define D_SAVE_CONFIGURATION "Зберегти конфігурацію"
-#define D_CONFIGURATION_SAVED "Конфігурація збережена "
-#define D_CONFIGURATION_RESET "Конфігурація скинута"
-
-#define D_PROGRAM_VERSION "Версія програми"
-#define D_BUILD_DATE_AND_TIME "Дата і час збірки"
-#define D_CORE_AND_SDK_VERSION "Версія Core/SDK"
-#define D_FLASH_WRITE_COUNT "Кількість записів Flash"
-#define D_MAC_ADDRESS "MAC Адреса"
-#define D_MQTT_HOST "MQTT Хост"
-#define D_MQTT_PORT "MQTT Порт"
-#define D_MQTT_CLIENT "MQTT ID Клієнта"
-#define D_MQTT_USER "MQTT Користувач"
-#define D_MQTT_TOPIC "MQTT Топік"
-#define D_MQTT_GROUP_TOPIC "MQTT Топік групи"
-#define D_MQTT_FULL_TOPIC "MQTT Топік повний"
-#define D_MDNS_DISCOVERY "mDNS Виявлення"
-#define D_MDNS_ADVERTISE "mDNS Транcляція"
-#define D_ESP_CHIP_ID "ID чипу ESP"
-#define D_FLASH_CHIP_ID "ID чипу Flash пам'яті"
-#define D_FLASH_CHIP_SIZE "Розмір Flash пам'яті"
-#define D_FREE_PROGRAM_SPACE "Вільний простір для програм"
-
-#define D_UPGRADE_BY_WEBSERVER "Оновлення через Веб-сервер"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Почати оновлення"
-#define D_UPGRADE_BY_FILE_UPLOAD "Оновлення шляхом завантаження файлів"
-#define D_UPLOAD_STARTED "Завантаження почалось"
-#define D_UPGRADE_STARTED "Оновлення почалось"
-#define D_UPLOAD_DONE "Завантаження завершено"
-#define D_UPLOAD_ERR_1 "Файл не вибраний"
-#define D_UPLOAD_ERR_2 "Недостатньо місця"
-#define D_UPLOAD_ERR_3 "Магічний байт не 0xE9"
-#define D_UPLOAD_ERR_4 "Размір прошивки більший, ніж размір Flash пам'яті"
-#define D_UPLOAD_ERR_5 "Помилка завантаження буферу"
-#define D_UPLOAD_ERR_6 "Помилка завантаження. Увімкнено лог рівень 3"
-#define D_UPLOAD_ERR_7 "Завантаження перервано"
-#define D_UPLOAD_ERR_8 "Файл невірний"
-#define D_UPLOAD_ERR_9 "Занадто великий файл"
-#define D_UPLOAD_ERR_10 "Помилка ініціалізаціції чипу FR"
-#define D_UPLOAD_ERR_11 "Помилка стирання чипу RF"
-#define D_UPLOAD_ERR_12 "Помилка запису чипу RF"
-#define D_UPLOAD_ERR_13 "Помилка розкодування прошивки RF"
-#define D_UPLOAD_ERROR_CODE "Код помилки завантаження"
-
-#define D_ENTER_COMMAND "Уведіть команду"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Увімкніть Веб лог рівня 2 якщо очікуєте відповідь"
-#define D_NEED_USER_AND_PASSWORD "Очікується user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Перевірка відбитка TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Збій підключення TLS до"
-#define D_RETRY_IN "Повторити"
-#define D_VERIFIED "Перевірено відбиток"
-#define D_INSECURE "Небезпечне з'єднання, недійсний відбиток"
-#define D_CONNECT_FAILED_TO "Помилка підключення до"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast вимкнений"
-#define D_MULTICAST_REJOINED "Multicast (пере)під'єднався"
-#define D_MULTICAST_JOIN_FAILED "Multicast помилка з'єднання"
-#define D_FAILED_TO_SEND_RESPONSE "Не вдалось надіслати відповідь"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo основна подія"
-#define D_WEMO_EVENT_SERVICE "WeMo служба подій"
-#define D_WEMO_META_SERVICE "WeMo мета-сервіс"
-#define D_WEMO_SETUP "WeMo налаштування"
-#define D_RESPONSE_SENT "Відповідь відіслана"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue налаштування"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API не реалізовано"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 пакету відповіді отримано"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz налаштування"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Ключ idx"
-#define D_DOMOTICZ_SWITCH_IDX "Перемикач idx"
-#define D_DOMOTICZ_SENSOR_IDX "Давач idx"
- #define D_DOMOTICZ_TEMP "Температура"
- #define D_DOMOTICZ_TEMP_HUM "Темп,Волог"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Темп,Волог,Тиск"
- #define D_DOMOTICZ_POWER_ENERGY "Потуж,Енергія"
- #define D_DOMOTICZ_ILLUMINANCE "Освітлення"
- #define D_DOMOTICZ_COUNT "Лічильник/PM1"
- #define D_DOMOTICZ_VOLTAGE "Напруга/PM2,5"
- #define D_DOMOTICZ_CURRENT "Струм/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Якість повітря"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Оновлення таймерів"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Конфігурація таймерів"
-#define D_TIMER_PARAMETERS "Налаштування таймерів"
-#define D_TIMER_ENABLE "Таймери увімкнені"
-#define D_TIMER_ARM "Увімкнений"
-#define D_TIMER_TIME "Час"
-#define D_TIMER_DAYS "Дні"
-#define D_TIMER_REPEAT "Повтор"
-#define D_TIMER_OUTPUT "Вихід"
-#define D_TIMER_ACTION "Дія"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Конфігурація KNX"
-#define D_KNX_PARAMETERS "Налаштування KNX"
-#define D_KNX_GENERAL_CONFIG "Основні"
-#define D_KNX_PHYSICAL_ADDRESS "Фізична адреса"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Має бути унікальною у мережі KNX)"
-#define D_KNX_ENABLE "KNX Увімкнений"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Дані для запису групових адрес"
-#define D_ADD "Додати"
-#define D_DELETE "Видалити"
-#define D_REPLY "Повторити"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Дані для читання групових адрес"
-#define D_RECEIVED_FROM "Отримати з"
-#define D_KNX_COMMAND_WRITE "Записати"
-#define D_KNX_COMMAND_READ "Читати"
-#define D_KNX_COMMAND_OTHER "Інше"
-#define D_SENT_TO "надіслати до"
-#define D_KNX_WARNING "Адреса групи (0/0/0) зарезервована і не може бути використана."
-#define D_KNX_ENHANCEMENT "Підвищення зв'язку"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Енергія Сьогодні"
-#define D_ENERGY_YESTERDAY "Енергія Вчора"
-#define D_ENERGY_TOTAL "Енергія Всього"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Датчик DS18x20 зайнятий"
-#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - помилка CRC"
-#define D_SENSORS_FOUND "Датчик DS18x20 знайдено"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Тайм-аут, в очікуванні"
-#define D_START_SIGNAL_LOW "стартовий сигнал низький"
-#define D_START_SIGNAL_HIGH "стартовий сигнал високий"
-#define D_PULSE "імпульс"
-#define D_CHECKSUM_FAILURE "Помилка контрольної суми"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчик не підтвердив отримання команди"
-#define D_SHT1X_FOUND "SHT1X знайдено"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Частинки понад"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Приск. Вісь-X"
-#define D_AY_AXIS "Приск. Вісь-Y"
-#define D_AZ_AXIS "Приск. Вісь-Z"
-#define D_GX_AXIS "Орієнт Вісь-X"
-#define D_GY_AXIS "Орієнт Вісь-Y"
-#define D_GZ_AXIS "Орієнт Вісь-Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remove weigth"
-#define D_HX_CAL_REFERENCE "Load reference weigth"
-#define D_HX_CAL_DONE "Calibrated"
-#define D_HX_CAL_FAIL "Calibration failed"
-#define D_RESET_HX711 "Reset Scale"
-#define D_CONFIGURE_HX711 "Configure Scale"
-#define D_HX711_PARAMETERS "Scale parameters"
-#define D_ITEM_WEIGHT "Item weight"
-#define D_REFERENCE_WEIGHT "Reference weigth"
-#define D_CALIBRATE "Calibrate"
-#define D_CALIBRATION "Calibration"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Напрям вітру"
-#define D_TX20_WIND_SPEED "Швидкість вітру"
-#define D_TX20_WIND_SPEED_AVG "Середня швидкість вітру"
-#define D_TX20_WIND_SPEED_MAX "Максимальна швидкість вітру"
-#define D_TX20_NORTH "Пн"
-#define D_TX20_EAST "Сх"
-#define D_TX20_SOUTH "Пд"
-#define D_TX20_WEST "Зх"
-
-// 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 "Користувач"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Перемикач" // Suffix "1"
-#define D_SENSOR_BUTTON "Кнопка" // Suffix "1"
-#define D_SENSOR_RELAY "Реле" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "ШІМ" // Suffix "1"
-#define D_SENSOR_COUNTER "Лічильник" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Регулятор" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Зуммер"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "А"
-#define D_UNIT_CENTIMETER "cм"
-#define D_UNIT_HERTZ "Гц"
-#define D_UNIT_HOUR "Г"
-#define D_UNIT_GALLONS "гал"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "кг"
-#define D_UNIT_KILOMETER_PER_HOUR "км/г" // or "km/h"
-#define D_UNIT_KILOOHM "кОм"
-#define D_UNIT_KILOWATTHOUR "кВт"
-#define D_UNIT_LUX "лк"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "мкг/м3"
-#define D_UNIT_MICROMETER "мкм"
-#define D_UNIT_MICROSECOND "мкс"
-#define D_UNIT_MILLIAMPERE "мА"
-#define D_UNIT_MILLIMETER "мм"
-#define D_UNIT_MILLIMETER_MERCURY "ммHg"
-#define D_UNIT_MILLISECOND "мс"
-#define D_UNIT_MINUTE "хв"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "гПа"
-#define D_UNIT_SECOND "сек"
-#define D_UNIT_SECTORS "секторів"
-#define D_UNIT_VA "ВА"
-#define D_UNIT_VAR "ВАр"
-#define D_UNIT_VOLT "В"
-#define D_UNIT_WATT "Вт"
-#define D_UNIT_WATTHOUR "Вт/Год"
-#define D_UNIT_WATT_METER_QUADRAT "Вт/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Кут фази"
-#define D_IMPORT_ACTIVE "Активна вхід"
-#define D_EXPORT_ACTIVE "Активна вихід"
-#define D_IMPORT_REACTIVE "Рекативна вхід"
-#define D_EXPORT_REACTIVE "Реактивна вихід"
-#define D_TOTAL_REACTIVE "Всього реактивна"
-#define D_UNIT_KWARH "кВАр/г"
-#define D_UNIT_ANGLE "Град"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_UK_UK_H_
+/*
+ uk-UK.h - localization for Ukrainian - Ukraine for Tasmota
+
+ Copyright (C) 2019 Theo Arends / vadym-adik
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_UK_UK_H_
+#define _LANGUAGE_UK_UK_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.14.0a
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1058
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "uk"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "НедПонВівСерЧетПятСуб"
+#define D_MONTH3LIST "СічЛютБерКвіТраЧерЛипСерВерЖовЛисГру"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Якість повітря"
+#define D_AP "Точка доступу" // Access Point
+#define D_AS "як"
+#define D_AUTO "АВТО"
+#define D_BLINK "Блимати"
+#define D_BLINKOFF "Не блимати"
+#define D_BOOT_COUNT "К-сть завант."
+#define D_BRIGHTLIGHT "Яскравість"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Кнопка"
+#define D_BY " " // Written by me
+#define D_BYTES "Байт"
+#define D_CELSIUS "Цельсія"
+#define D_CHANNEL "Канал"
+#define D_CO2 "Вуглек. газ"
+#define D_CODE "код" // Button code
+#define D_COLDLIGHT "Холодний"
+#define D_COMMAND "Команда"
+#define D_CONNECTED "Під'єднано"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Розмір"
+#define D_COUNTER "Лічильник"
+#define D_CURRENT "Струм" // As in Voltage and Current
+#define D_DATA "Дані"
+#define D_DARKLIGHT "Темний"
+#define D_DEBUG "Налагодження"
+#define D_DISABLED "Заблоковано"
+#define D_DISTANCE "Відстань"
+#define D_DNS_SERVER "Сервер DNS"
+#define D_DONE "Виконано"
+#define D_DST_TIME "Літній час"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Емуляція"
+#define D_ENABLED "Активно"
+#define D_ERASE "Стирати"
+#define D_ERROR "Помилка"
+#define D_FAHRENHEIT "Фаренгейт"
+#define D_FAILED "Невдало"
+#define D_FALLBACK "Зворотній зв'язок"
+#define D_FALLBACK_TOPIC "Топік зворотнього зв'язку"
+#define D_FALSE "Ні"
+#define D_FILE "Файл"
+#define D_FLOW_RATE "Потік"
+#define D_FREE_MEMORY "Вільна память"
+#define D_FREQUENCY "Частота"
+#define D_GAS "Газ"
+#define D_GATEWAY "Шлюз"
+#define D_GROUP "Група"
+#define D_HOST "Хост"
+#define D_HOSTNAME "Назва хосту"
+#define D_HUMIDITY "Вологість"
+#define D_ILLUMINANCE "Освітленність"
+#define D_IMMEDIATE "Негайно" // Button immediate
+#define D_INDEX "Індекс"
+#define D_INFO "Інфо"
+#define D_INFRARED "Інфрачервоний"
+#define D_INITIALIZED "Ініціалізовано"
+#define D_IP_ADDRESS "IP адреса"
+#define D_LIGHT "Світло"
+#define D_LWT "LWT"
+#define D_MODULE "Модуль"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "Багаторазове натискання"
+#define D_NOISE "Шум"
+#define D_NONE "Нічого"
+#define D_OFF "Вимк."
+#define D_OFFLINE "Офф-лайн"
+#define D_OK "Ок"
+#define D_ON "Увімк."
+#define D_ONLINE "Он-лайн"
+#define D_PASSWORD "Гасло"
+#define D_PORT "Порт"
+#define D_POWER_FACTOR "Коефіцієнт потужності"
+#define D_POWERUSAGE "Потужність"
+#define D_POWERUSAGE_ACTIVE "Активна потужність"
+#define D_POWERUSAGE_APPARENT "Дійсна потужність"
+#define D_POWERUSAGE_REACTIVE "Реактивна потужність"
+#define D_PRESSURE "Тиск"
+#define D_PRESSUREATSEALEVEL "Тиск на рівні моря"
+#define D_PROGRAM_FLASH_SIZE "Розмір Flash для програм"
+#define D_PROGRAM_SIZE "Розмір програм"
+#define D_PROJECT "Проект"
+#define D_RAIN "Дощ"
+#define D_RECEIVED "Отримано"
+#define D_RESTART "Перезавантаження"
+#define D_RESTARTING "Перезавантаження"
+#define D_RESTART_REASON "Причина перезавантаження"
+#define D_RESTORE "відновлення"
+#define D_RETAINED "зберігати"
+#define D_RULE "Правило"
+#define D_SAVE "Зберегти"
+#define D_SENSOR "Давач"
+#define D_SSID "SSID"
+#define D_START "Старт"
+#define D_STD_TIME "Стандартний час"
+#define D_STOP "Стоп"
+#define D_SUBNET_MASK "Маска підмережі"
+#define D_SUBSCRIBE_TO "Підписатись на"
+#define D_UNSUBSCRIBE_FROM "Відписатися від"
+#define D_SUCCESSFUL "Успішно"
+#define D_SUNRISE "Схід сонця"
+#define D_SUNSET "Захід сонця"
+#define D_TEMPERATURE "Температура"
+#define D_TO "до"
+#define D_TOGGLE "Перекл."
+#define D_TOPIC "Топік"
+#define D_TOTAL_USAGE "Загальне споживання"
+#define D_TRANSMIT "Передати"
+#define D_TRUE "Так"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "оновлення"
+#define D_UPLOAD "Завантажити"
+#define D_UPTIME "Час роботи"
+#define D_USER "Користувач"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Індекс УФ"
+#define D_UV_INDEX_1 "Низький"
+#define D_UV_INDEX_2 "Середній"
+#define D_UV_INDEX_3 "Високий"
+#define D_UV_INDEX_4 "Небезпечний"
+#define D_UV_INDEX_5 "Опіки 1/2 ступеня"
+#define D_UV_INDEX_6 "Опіки 3 ступеня"
+#define D_UV_INDEX_7 "Невідомий"
+#define D_UV_LEVEL "Рівень УФ"
+#define D_UV_POWER "Потужність УФ"
+#define D_VERSION "Версія"
+#define D_VOLTAGE "Напруга"
+#define D_WEIGHT "Вага"
+#define D_WARMLIGHT "Тепло"
+#define D_WEB_SERVER "Web сервер"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ПОПЕРЕДЖЕННЯ! Ця версія не підтримує збереження налаштувань"
+#define D_LEVEL_10 "рівень 1-0"
+#define D_LEVEL_01 "рівень 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serial журнал вимкнений"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog журнал увімкнений"
+
+#define D_SET_BAUDRATE_TO "Встановити швидкість передачі (Baudrate)"
+#define D_RECEIVED_TOPIC "Отриманий Топік"
+#define D_DATA_SIZE "Розмір даних"
+#define D_ANALOG_INPUT "Напруга"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Цикл заблокований"
+#define D_WPS_FAILED_WITH_STATUS "WPS конфігурація з статусом НЕВДАЛА"
+#define D_ACTIVE_FOR_3_MINUTES "активний протягом 3 хвилин"
+#define D_FAILED_TO_START "не вдалось запустити"
+#define D_PATCH_ISSUE_2186 "Проблема з виправленням 2186"
+#define D_CONNECTING_TO_AP "Підключення до AP"
+#define D_IN_MODE "в режимі"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Помилка підключення, IP-адреса не отримана"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Помилка з'єднання, AP не знайдено"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Помилка з'єднання, невірне гасло до AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Помилка з'єднання з AP по тайм-ауту"
+#define D_ATTEMPTING_CONNECTION "Спроба підключення..."
+#define D_CHECKING_CONNECTION "Перевірка з'єднання..."
+#define D_QUERY_DONE "Запит виконаний. Виявлено сервер MQTT"
+#define D_MQTT_SERVICE_FOUND "MQTT сервер знайдено"
+#define D_FOUND_AT "знайдено в"
+#define D_SYSLOG_HOST_NOT_FOUND "Сервер журналу не знайдено"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Збережено в флэш-пам'ять"
+#define D_LOADED_FROM_FLASH_AT "Завантажено з флэш-пам'яті"
+#define D_USE_DEFAULTS "Використовувати значення за замовчуванням"
+#define D_ERASED_SECTOR "Стерто сектор"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Для використання Tasmota треба увімкнути JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Прошивка MINIMAL
будь-ласка оновіть"
+#define D_WEBSERVER_ACTIVE_ON "Веб-сервер активний"
+#define D_WITH_IP_ADDRESS "з IP-адресою"
+#define D_WEBSERVER_STOPPED "Веб-сервер зупинений"
+#define D_FILE_NOT_FOUND "Файл не знайдений"
+#define D_REDIRECTED "Перенаправлено на адаптивний портал"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi менеджер встановлює Точку Доступу і зберігає параметри"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi менеджер встановив Точку Доступу"
+#define D_TRYING_TO_CONNECT "Спроба підключення пристрою до мережі"
+
+#define D_RESTART_IN "Перезавантаження"
+#define D_SECONDS "секунд"
+#define D_DEVICE_WILL_RESTART "Пристрій буде перезавантажено через декілька секунд"
+#define D_BUTTON_TOGGLE "Переключити"
+#define D_CONFIGURATION "Конфігурація"
+#define D_INFORMATION "Інформація"
+#define D_FIRMWARE_UPGRADE "Оновлення прошивки"
+#define D_CONSOLE "Консоль"
+#define D_CONFIRM_RESTART "Підтвердити перезавантаження"
+
+#define D_CONFIGURE_MODULE "Конфігурація модуля"
+#define D_CONFIGURE_WIFI "Конфігурація WiFi"
+#define D_CONFIGURE_MQTT "Конфігурація MQTT"
+#define D_CONFIGURE_DOMOTICZ "Конфігурація Domoticz"
+#define D_CONFIGURE_LOGGING "Конфігурація журналів"
+#define D_CONFIGURE_OTHER "Конфігурація інше"
+#define D_CONFIRM_RESET_CONFIGURATION "Підтвердити скидання конфігурації"
+#define D_RESET_CONFIGURATION "Скидання конфігурації"
+#define D_BACKUP_CONFIGURATION "Резервне копіювання конфігурації"
+#define D_RESTORE_CONFIGURATION "Відновлення конфігурації"
+#define D_MAIN_MENU "Головне меню"
+
+#define D_MODULE_PARAMETERS "Параметри модуля"
+#define D_MODULE_TYPE "Тип модуля"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "АЦП"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial вхід"
+#define D_SERIAL_OUT "Serial вихід"
+
+#define D_WIFI_PARAMETERS "Параметри Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Сканування бездротовихих мереж Wifi"
+#define D_SCAN_DONE "Сканування завершене"
+#define D_NO_NETWORKS_FOUND "Не знайдено мереж"
+#define D_REFRESH_TO_SCAN_AGAIN "Оновити для повторного сканування"
+#define D_DUPLICATE_ACCESSPOINT "Дублювати Точку Доступу (AP)"
+#define D_SKIPPING_LOW_QUALITY "Пропущено через низьку якість"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSID"
+#define D_AP1_PASSWORD "AP1 гасло"
+#define D_AP2_SSID "AP2 SSID"
+#define D_AP2_PASSWORD "AP2 гасло"
+
+#define D_MQTT_PARAMETERS "Параметри MQTT"
+#define D_CLIENT "Клієнт"
+#define D_FULL_TOPIC "Повний Топік"
+
+#define D_LOGGING_PARAMETERS "Параметри журналу"
+#define D_SERIAL_LOG_LEVEL "Serial рівень"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web рівень"
+#define D_SYS_LOG_LEVEL "System рівень"
+#define D_MORE_DEBUG "Додаткова інформація для налагодження"
+#define D_SYSLOG_HOST "System хост"
+#define D_SYSLOG_PORT "System порт"
+#define D_TELEMETRY_PERIOD "Період телеметрії"
+
+#define D_OTHER_PARAMETERS "Параметри Інше"
+#define D_TEMPLATE "Шаблони"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Гасло Web адміністратора"
+#define D_MQTT_ENABLE "MQTT активний"
+#define D_FRIENDLY_NAME "Дружнє Ім'я"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "одиночне"
+#define D_MULTI_DEVICE "мульти"
+
+#define D_CONFIGURE_TEMPLATE "Конфігурація шаблона"
+#define D_TEMPLATE_PARAMETERS "Параметри шаблона"
+#define D_TEMPLATE_NAME "Назва"
+#define D_BASE_TYPE "На основі"
+#define D_TEMPLATE_FLAGS "Опції"
+
+#define D_SAVE_CONFIGURATION "Зберегти конфігурацію"
+#define D_CONFIGURATION_SAVED "Конфігурація збережена "
+#define D_CONFIGURATION_RESET "Конфігурація скинута"
+
+#define D_PROGRAM_VERSION "Версія програми"
+#define D_BUILD_DATE_AND_TIME "Дата і час збірки"
+#define D_CORE_AND_SDK_VERSION "Версія Core/SDK"
+#define D_FLASH_WRITE_COUNT "Кількість записів Flash"
+#define D_MAC_ADDRESS "MAC Адреса"
+#define D_MQTT_HOST "MQTT Хост"
+#define D_MQTT_PORT "MQTT Порт"
+#define D_MQTT_CLIENT "MQTT ID Клієнта"
+#define D_MQTT_USER "MQTT Користувач"
+#define D_MQTT_TOPIC "MQTT Топік"
+#define D_MQTT_GROUP_TOPIC "MQTT Топік групи"
+#define D_MQTT_FULL_TOPIC "MQTT Топік повний"
+#define D_MDNS_DISCOVERY "mDNS Виявлення"
+#define D_MDNS_ADVERTISE "mDNS Транcляція"
+#define D_ESP_CHIP_ID "ID чипу ESP"
+#define D_FLASH_CHIP_ID "ID чипу Flash пам'яті"
+#define D_FLASH_CHIP_SIZE "Розмір Flash пам'яті"
+#define D_FREE_PROGRAM_SPACE "Вільний простір для програм"
+
+#define D_UPGRADE_BY_WEBSERVER "Оновлення через Веб-сервер"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Почати оновлення"
+#define D_UPGRADE_BY_FILE_UPLOAD "Оновлення шляхом завантаження файлів"
+#define D_UPLOAD_STARTED "Завантаження почалось"
+#define D_UPGRADE_STARTED "Оновлення почалось"
+#define D_UPLOAD_DONE "Завантаження завершено"
+#define D_UPLOAD_ERR_1 "Файл не вибраний"
+#define D_UPLOAD_ERR_2 "Недостатньо місця"
+#define D_UPLOAD_ERR_3 "Магічний байт не 0xE9"
+#define D_UPLOAD_ERR_4 "Размір прошивки більший, ніж размір Flash пам'яті"
+#define D_UPLOAD_ERR_5 "Помилка завантаження буферу"
+#define D_UPLOAD_ERR_6 "Помилка завантаження. Увімкнено лог рівень 3"
+#define D_UPLOAD_ERR_7 "Завантаження перервано"
+#define D_UPLOAD_ERR_8 "Файл невірний"
+#define D_UPLOAD_ERR_9 "Занадто великий файл"
+#define D_UPLOAD_ERR_10 "Помилка ініціалізаціції чипу FR"
+#define D_UPLOAD_ERR_11 "Помилка стирання чипу RF"
+#define D_UPLOAD_ERR_12 "Помилка запису чипу RF"
+#define D_UPLOAD_ERR_13 "Помилка розкодування прошивки RF"
+#define D_UPLOAD_ERROR_CODE "Код помилки завантаження"
+
+#define D_ENTER_COMMAND "Уведіть команду"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Увімкніть Веб лог рівня 2 якщо очікуєте відповідь"
+#define D_NEED_USER_AND_PASSWORD "Очікується user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Перевірка відбитка TLS..."
+#define D_TLS_CONNECT_FAILED_TO "Збій підключення TLS до"
+#define D_RETRY_IN "Повторити"
+#define D_VERIFIED "Перевірено відбиток"
+#define D_INSECURE "Небезпечне з'єднання, недійсний відбиток"
+#define D_CONNECT_FAILED_TO "Помилка підключення до"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast вимкнений"
+#define D_MULTICAST_REJOINED "Multicast (пере)під'єднався"
+#define D_MULTICAST_JOIN_FAILED "Multicast помилка з'єднання"
+#define D_FAILED_TO_SEND_RESPONSE "Не вдалось надіслати відповідь"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo основна подія"
+#define D_WEMO_EVENT_SERVICE "WeMo служба подій"
+#define D_WEMO_META_SERVICE "WeMo мета-сервіс"
+#define D_WEMO_SETUP "WeMo налаштування"
+#define D_RESPONSE_SENT "Відповідь відіслана"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue налаштування"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API не реалізовано"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 пакету відповіді отримано"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz налаштування"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Ключ idx"
+#define D_DOMOTICZ_SWITCH_IDX "Перемикач idx"
+#define D_DOMOTICZ_SENSOR_IDX "Давач idx"
+ #define D_DOMOTICZ_TEMP "Температура"
+ #define D_DOMOTICZ_TEMP_HUM "Темп,Волог"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Темп,Волог,Тиск"
+ #define D_DOMOTICZ_POWER_ENERGY "Потуж,Енергія"
+ #define D_DOMOTICZ_ILLUMINANCE "Освітлення"
+ #define D_DOMOTICZ_COUNT "Лічильник/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Напруга/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Струм/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Якість повітря"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Оновлення таймерів"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Конфігурація таймерів"
+#define D_TIMER_PARAMETERS "Налаштування таймерів"
+#define D_TIMER_ENABLE "Таймери увімкнені"
+#define D_TIMER_ARM "Увімкнений"
+#define D_TIMER_TIME "Час"
+#define D_TIMER_DAYS "Дні"
+#define D_TIMER_REPEAT "Повтор"
+#define D_TIMER_OUTPUT "Вихід"
+#define D_TIMER_ACTION "Дія"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Конфігурація KNX"
+#define D_KNX_PARAMETERS "Налаштування KNX"
+#define D_KNX_GENERAL_CONFIG "Основні"
+#define D_KNX_PHYSICAL_ADDRESS "Фізична адреса"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Має бути унікальною у мережі KNX)"
+#define D_KNX_ENABLE "KNX Увімкнений"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Дані для запису групових адрес"
+#define D_ADD "Додати"
+#define D_DELETE "Видалити"
+#define D_REPLY "Повторити"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Дані для читання групових адрес"
+#define D_RECEIVED_FROM "Отримати з"
+#define D_KNX_COMMAND_WRITE "Записати"
+#define D_KNX_COMMAND_READ "Читати"
+#define D_KNX_COMMAND_OTHER "Інше"
+#define D_SENT_TO "надіслати до"
+#define D_KNX_WARNING "Адреса групи (0/0/0) зарезервована і не може бути використана."
+#define D_KNX_ENHANCEMENT "Підвищення зв'язку"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Енергія Сьогодні"
+#define D_ENERGY_YESTERDAY "Енергія Вчора"
+#define D_ENERGY_TOTAL "Енергія Всього"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Датчик DS18x20 зайнятий"
+#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - помилка CRC"
+#define D_SENSORS_FOUND "Датчик DS18x20 знайдено"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Тайм-аут, в очікуванні"
+#define D_START_SIGNAL_LOW "стартовий сигнал низький"
+#define D_START_SIGNAL_HIGH "стартовий сигнал високий"
+#define D_PULSE "імпульс"
+#define D_CHECKSUM_FAILURE "Помилка контрольної суми"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчик не підтвердив отримання команди"
+#define D_SHT1X_FOUND "SHT1X знайдено"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Частинки понад"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Приск. Вісь-X"
+#define D_AY_AXIS "Приск. Вісь-Y"
+#define D_AZ_AXIS "Приск. Вісь-Z"
+#define D_GX_AXIS "Орієнт Вісь-X"
+#define D_GY_AXIS "Орієнт Вісь-Y"
+#define D_GZ_AXIS "Орієнт Вісь-Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remove weigth"
+#define D_HX_CAL_REFERENCE "Load reference weigth"
+#define D_HX_CAL_DONE "Calibrated"
+#define D_HX_CAL_FAIL "Calibration failed"
+#define D_RESET_HX711 "Reset Scale"
+#define D_CONFIGURE_HX711 "Configure Scale"
+#define D_HX711_PARAMETERS "Scale parameters"
+#define D_ITEM_WEIGHT "Item weight"
+#define D_REFERENCE_WEIGHT "Reference weigth"
+#define D_CALIBRATE "Calibrate"
+#define D_CALIBRATION "Calibration"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Напрям вітру"
+#define D_TX20_WIND_SPEED "Швидкість вітру"
+#define D_TX20_WIND_SPEED_AVG "Середня швидкість вітру"
+#define D_TX20_WIND_SPEED_MAX "Максимальна швидкість вітру"
+#define D_TX20_NORTH "Пн"
+#define D_TX20_EAST "Сх"
+#define D_TX20_SOUTH "Пд"
+#define D_TX20_WEST "Зх"
+
+// 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 "Користувач"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Перемикач" // Suffix "1"
+#define D_SENSOR_BUTTON "Кнопка" // Suffix "1"
+#define D_SENSOR_RELAY "Реле" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "ШІМ" // Suffix "1"
+#define D_SENSOR_COUNTER "Лічильник" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Регулятор" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Зуммер"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "А"
+#define D_UNIT_CENTIMETER "cм"
+#define D_UNIT_HERTZ "Гц"
+#define D_UNIT_HOUR "Г"
+#define D_UNIT_GALLONS "гал"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "кг"
+#define D_UNIT_KILOMETER_PER_HOUR "км/г" // or "km/h"
+#define D_UNIT_KILOOHM "кОм"
+#define D_UNIT_KILOWATTHOUR "кВт"
+#define D_UNIT_LUX "лк"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "мкг/м3"
+#define D_UNIT_MICROMETER "мкм"
+#define D_UNIT_MICROSECOND "мкс"
+#define D_UNIT_MILLIAMPERE "мА"
+#define D_UNIT_MILLIMETER "мм"
+#define D_UNIT_MILLIMETER_MERCURY "ммHg"
+#define D_UNIT_MILLISECOND "мс"
+#define D_UNIT_MINUTE "хв"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "гПа"
+#define D_UNIT_SECOND "сек"
+#define D_UNIT_SECTORS "секторів"
+#define D_UNIT_VA "ВА"
+#define D_UNIT_VAR "ВАр"
+#define D_UNIT_VOLT "В"
+#define D_UNIT_WATT "Вт"
+#define D_UNIT_WATTHOUR "Вт/Год"
+#define D_UNIT_WATT_METER_QUADRAT "Вт/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Кут фази"
+#define D_IMPORT_ACTIVE "Активна вхід"
+#define D_EXPORT_ACTIVE "Активна вихід"
+#define D_IMPORT_REACTIVE "Рекативна вхід"
+#define D_EXPORT_REACTIVE "Реактивна вихід"
+#define D_TOTAL_REACTIVE "Всього реактивна"
+#define D_UNIT_KWARH "кВАр/г"
+#define D_UNIT_ANGLE "Град"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_UK_UK_H_
diff --git a/tasmota/language/zh-CN.h b/tasmota/language/zh-CN.h
index 21aa63be3..275216007 100644
--- a/tasmota/language/zh-CN.h
+++ b/tasmota/language/zh-CN.h
@@ -1,701 +1,703 @@
-/*
- zh-CN.h - localization for Chinese (Simplified) - China for Tasmota
-
- Copyright (C) 2019 Theo Arends (translated by killadm)
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_ZH_CN_H_
-#define _LANGUAGE_ZH_CN_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.14.0b
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 2052
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "zh"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "日 一 二 三 四 五 六 "
-#define D_MONTH3LIST "1月 2月 3月 4月 5月 6月 7月 8月 9月 10月11月12月"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "空气质量"
-#define D_AP "AP" // Access Point
-#define D_AS "名称:"
-#define D_AUTO "自动"
-#define D_BLINK "闪烁"
-#define D_BLINKOFF "闪烁关"
-#define D_BOOT_COUNT "启动次数"
-#define D_BRIGHTLIGHT "亮"
-#define D_BSSID "BSSId"
-#define D_BUTTON "按钮"
-#define D_BY "汉化: killadm 作者:" // Written by me
-#define D_BYTES "大小:"
-#define D_CELSIUS "摄氏"
-#define D_CHANNEL "频道"
-#define D_CO2 "二氧化碳"
-#define D_CODE "代码" // Button code
-#define D_COLDLIGHT "冷"
-#define D_COMMAND "命令:"
-#define D_CONNECTED "已连接"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "数量:"
-#define D_COUNTER "计数器"
-#define D_CURRENT "电流" // As in Voltage and Current
-#define D_DATA "数据:"
-#define D_DARKLIGHT "暗"
-#define D_DEBUG "调试"
-#define D_DISABLED "禁用"
-#define D_DISTANCE "距离"
-#define D_DNS_SERVER "DNS服务器"
-#define D_DONE "完成"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "设备模拟"
-#define D_ENABLED "启用"
-#define D_ERASE "擦除"
-#define D_ERROR "错误"
-#define D_FAHRENHEIT "华氏"
-#define D_FAILED "失败"
-#define D_FALLBACK "回退"
-#define D_FALLBACK_TOPIC "回退主题"
-#define D_FALSE "False"
-#define D_FILE "文件:"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "空闲内存"
-#define D_FREQUENCY "频率"
-#define D_GAS "气体"
-#define D_GATEWAY "网关"
-#define D_GROUP "组:"
-#define D_HOST "主机"
-#define D_HOSTNAME "主机名"
-#define D_HUMIDITY "湿度"
-#define D_ILLUMINANCE "照度"
-#define D_IMMEDIATE "单次按键" // Button immediate
-#define D_INDEX "索引:"
-#define D_INFO "信息"
-#define D_INFRARED "红外线"
-#define D_INITIALIZED "初始化完成"
-#define D_IP_ADDRESS "IP地址"
-#define D_LIGHT "灯"
-#define D_LWT "LWT"
-#define D_MODULE "模块"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "多次按键"
-#define D_NOISE "嘈杂"
-#define D_NONE "无"
-#define D_OFF "关"
-#define D_OFFLINE "离线"
-#define D_OK "好"
-#define D_ON "开"
-#define D_ONLINE "在线"
-#define D_PASSWORD "密码"
-#define D_PORT "端口"
-#define D_POWER_FACTOR "功率因数"
-#define D_POWERUSAGE "功率"
-#define D_POWERUSAGE_ACTIVE "有功功率"
-#define D_POWERUSAGE_APPARENT "视在功率"
-#define D_POWERUSAGE_REACTIVE "无功功率"
-#define D_PRESSURE "气压"
-#define D_PRESSUREATSEALEVEL "海平面气压"
-#define D_PROGRAM_FLASH_SIZE "固件 Flash 大小"
-#define D_PROGRAM_SIZE "固件大小"
-#define D_PROJECT "项目:"
-#define D_RAIN "降水量"
-#define D_RECEIVED "已接收"
-#define D_RESTART "重启"
-#define D_RESTARTING "正在重启"
-#define D_RESTART_REASON "重启原因"
-#define D_RESTORE "恢复"
-#define D_RETAINED "已保留"
-#define D_RULE "规则"
-#define D_SAVE "保存"
-#define D_SENSOR "传感器"
-#define D_SSID "名称"
-#define D_START "开始"
-#define D_STD_TIME "STD"
-#define D_STOP "停止"
-#define D_SUBNET_MASK "子网掩码"
-#define D_SUBSCRIBE_TO "订阅"
-#define D_UNSUBSCRIBE_FROM "退订"
-#define D_SUCCESSFUL "成功"
-#define D_SUNRISE "日出"
-#define D_SUNSET "日落"
-#define D_TEMPERATURE "温度"
-#define D_TO "to"
-#define D_TOGGLE "切换"
-#define D_TOPIC "主题"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "发送"
-#define D_TRUE "True"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "升级"
-#define D_UPLOAD "上传"
-#define D_UPTIME "运行时间"
-#define D_USER "用户名"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "紫外线指数"
-#define D_UV_INDEX_1 "低"
-#define D_UV_INDEX_2 "中"
-#define D_UV_INDEX_3 "高"
-#define D_UV_INDEX_4 "危险"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "紫外线水平"
-#define D_UV_POWER "紫外线功率 "
-#define D_VERSION "版本"
-#define D_VOLTAGE "电压"
-#define D_WEIGHT "重量"
-#define D_WARMLIGHT "暖"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "警告:精简固件不支持配置持久化保存"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "串口日志已禁用"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog 日志已开启"
-
-#define D_SET_BAUDRATE_TO "设置波特率为:"
-#define D_RECEIVED_TOPIC "接收到的主题:"
-#define D_DATA_SIZE "数据大小:"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "WPS 配置失败,状态:"
-#define D_ACTIVE_FOR_3_MINUTES "激活 3 分钟"
-#define D_FAILED_TO_START "未能启动"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "连接到 AP"
-#define D_IN_MODE "模式:"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "连接失败,因为没有获取到 IP 地址"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "连接失败,无法连接 AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "连接失败,AP 密码不正确"
-#define D_CONNECT_FAILED_AP_TIMEOUT "连接失败,AP 超时"
-#define D_ATTEMPTING_CONNECTION "尝试连接..."
-#define D_CHECKING_CONNECTION "检查连接..."
-#define D_QUERY_DONE "查询完成。 发现 MQTT 服务"
-#define D_MQTT_SERVICE_FOUND "发现 MQTT 服务:"
-#define D_FOUND_AT "发现:"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog 主机未找到"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "保存到 flash:"
-#define D_LOADED_FROM_FLASH_AT "从 flash 载入:"
-#define D_USE_DEFAULTS "使用默认设置"
-#define D_ERASED_SECTOR "擦除扇区"
-
-// webserver.ino
-#define D_NOSCRIPT "Tasmota要求浏览器支持 JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "当前是精简版固件
请升级"
-#define D_WEBSERVER_ACTIVE_ON "Web 服务器地址:"
-#define D_WITH_IP_ADDRESS "IP 地址:"
-#define D_WEBSERVER_STOPPED "Web 服务已停止"
-#define D_FILE_NOT_FOUND "文件未找到"
-#define D_REDIRECTED "重定向到认证页面"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager 设置无线操作模式"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager 设置接入点"
-#define D_TRYING_TO_CONNECT "尝试将设备连接到网络"
-
-#define D_RESTART_IN "重启需要"
-#define D_SECONDS "秒"
-#define D_DEVICE_WILL_RESTART "设备将在几秒钟内重启"
-#define D_BUTTON_TOGGLE "状态切换"
-#define D_CONFIGURATION "设置"
-#define D_INFORMATION "信息"
-#define D_FIRMWARE_UPGRADE "固件升级"
-#define D_CONSOLE "控制台"
-#define D_CONFIRM_RESTART "确认重启"
-
-#define D_CONFIGURE_MODULE "模块设置"
-#define D_CONFIGURE_WIFI "WiFi设置"
-#define D_CONFIGURE_MQTT "MQTT设置"
-#define D_CONFIGURE_DOMOTICZ "Domoticz设置"
-#define D_CONFIGURE_LOGGING "日志设置"
-#define D_CONFIGURE_OTHER "其他设置"
-#define D_CONFIRM_RESET_CONFIGURATION "确认重置配置"
-#define D_RESET_CONFIGURATION "重置配置"
-#define D_BACKUP_CONFIGURATION "备份配置"
-#define D_RESTORE_CONFIGURATION "还原配置"
-#define D_MAIN_MENU "主菜单"
-
-#define D_MODULE_PARAMETERS "模块设置"
-#define D_MODULE_TYPE "模块类型"
-#define D_PULLUP_ENABLE "没有按钮/开关上拉"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "串口输入(RX)"
-#define D_SERIAL_OUT "串口输出(TX)"
-
-#define D_WIFI_PARAMETERS "Wifi设置"
-#define D_SCAN_FOR_WIFI_NETWORKS "扫描无线网络"
-#define D_SCAN_DONE "扫描完毕"
-#define D_NO_NETWORKS_FOUND "未找到任何网络"
-#define D_REFRESH_TO_SCAN_AGAIN "刷新并重试"
-#define D_DUPLICATE_ACCESSPOINT "重复AP"
-#define D_SKIPPING_LOW_QUALITY "忽略弱信号网络"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 名称"
-#define D_AP1_PASSWORD "AP1 密码"
-#define D_AP2_SSID "AP2 名称"
-#define D_AP2_PASSWORD "AP2 密码"
-
-#define D_MQTT_PARAMETERS "MQTT 设置"
-#define D_CLIENT "客户端"
-#define D_FULL_TOPIC "完整主题"
-
-#define D_LOGGING_PARAMETERS "日志设置"
-#define D_SERIAL_LOG_LEVEL "串口日志级别"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web 日志级别"
-#define D_SYS_LOG_LEVEL "Syslog 日志级别"
-#define D_MORE_DEBUG "全部调试"
-#define D_SYSLOG_HOST "Syslog 主机地址"
-#define D_SYSLOG_PORT "Syslog 端口"
-#define D_TELEMETRY_PERIOD "上报周期"
-
-#define D_OTHER_PARAMETERS "其他设置"
-#define D_TEMPLATE "模板"
-#define D_ACTIVATE "启用"
-#define D_WEB_ADMIN_PASSWORD "WEB 管理密码"
-#define D_MQTT_ENABLE "启用MQTT"
-#define D_FRIENDLY_NAME "昵称"
-#define D_BELKIN_WEMO "贝尔金 WeMo"
-#define D_HUE_BRIDGE "飞利浦 Hue 网桥"
-#define D_SINGLE_DEVICE "单设备"
-#define D_MULTI_DEVICE "多设备"
-
-#define D_CONFIGURE_TEMPLATE "模板配置"
-#define D_TEMPLATE_PARAMETERS "模板参数"
-#define D_TEMPLATE_NAME "名称"
-#define D_BASE_TYPE "基于"
-#define D_TEMPLATE_FLAGS "选项"
-
-#define D_SAVE_CONFIGURATION "保存设置"
-#define D_CONFIGURATION_SAVED "设置已保存"
-#define D_CONFIGURATION_RESET "设置已重置"
-
-#define D_PROGRAM_VERSION "固件版本"
-#define D_BUILD_DATE_AND_TIME "编译时间"
-#define D_CORE_AND_SDK_VERSION "内核和 SDK 版本"
-#define D_FLASH_WRITE_COUNT "Flash 写入次数"
-#define D_MAC_ADDRESS "MAC 地址"
-#define D_MQTT_HOST "MQTT 主机"
-#define D_MQTT_PORT "MQTT 端口"
-#define D_MQTT_CLIENT "MQTT 客户端"
-#define D_MQTT_USER "MQTT 用户名"
-#define D_MQTT_TOPIC "MQTT 主题"
-#define D_MQTT_GROUP_TOPIC "MQTT 主题组"
-#define D_MQTT_FULL_TOPIC "MQTT 完整主题"
-#define D_MDNS_DISCOVERY "mDNS 发现"
-#define D_MDNS_ADVERTISE "mDNS 广播"
-#define D_ESP_CHIP_ID "ESP 芯片 ID"
-#define D_FLASH_CHIP_ID "Flash 芯片 ID"
-#define D_FLASH_CHIP_SIZE "Flash 大小"
-#define D_FREE_PROGRAM_SPACE "空闲程序空间"
-
-#define D_UPGRADE_BY_WEBSERVER "通过 Web 升级"
-#define D_OTA_URL "OTA 地址"
-#define D_START_UPGRADE "开始升级"
-#define D_UPGRADE_BY_FILE_UPLOAD "通过文件升级"
-#define D_UPLOAD_STARTED "开始上传"
-#define D_UPGRADE_STARTED "开始升级"
-#define D_UPLOAD_DONE "上传完成"
-#define D_UPLOAD_ERR_1 "没有选择任何文件"
-#define D_UPLOAD_ERR_2 "没有足够空间"
-#define D_UPLOAD_ERR_3 "固件头不是 0xE9"
-#define D_UPLOAD_ERR_4 "固件大小超过 flash 容量"
-#define D_UPLOAD_ERR_5 "上传缓冲区不足,请先刷入精简固件再升级"
-#define D_UPLOAD_ERR_6 "上传失败。 启用日志级别 3 调试"
-#define D_UPLOAD_ERR_7 "上传取消"
-#define D_UPLOAD_ERR_8 "错误的固件"
-#define D_UPLOAD_ERR_9 "固件太大"
-#define D_UPLOAD_ERR_10 "初始化 RF 芯片失败"
-#define D_UPLOAD_ERR_11 "擦除 RF 芯片失败"
-#define D_UPLOAD_ERR_12 "写入 RF 芯片失败"
-#define D_UPLOAD_ERR_13 "解码 RF 固件失败"
-#define D_UPLOAD_ERROR_CODE "上传错误代码"
-
-#define D_ENTER_COMMAND "输入命令"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "如果想得到预期响应,请调整日志级别至: 2 信息"
-#define D_NEED_USER_AND_PASSWORD "需要 user=<用户名>&password=<密码>"
-
-// xdrv_00_mqtt.ino
-#define D_FINGERPRINT "验证 TLS 指纹..."
-#define D_TLS_CONNECT_FAILED_TO "TLS 连接失败"
-#define D_RETRY_IN "重试倒计时:"
-#define D_VERIFIED "验证成功"
-#define D_INSECURE "指纹无效导致连接不安全"
-#define D_CONNECT_FAILED_TO "连接失败:"
-
-// xdrv_wemohue.ino
-#define D_MULTICAST_DISABLED "组播已禁用"
-#define D_MULTICAST_REJOINED "组播已(重新)加入"
-#define D_MULTICAST_JOIN_FAILED "组播加入失败"
-#define D_FAILED_TO_SEND_RESPONSE "请求发送失败"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo 基础事件"
-#define D_WEMO_EVENT_SERVICE "WeMo 事件服务"
-#define D_WEMO_META_SERVICE "WeMo meta 服务"
-#define D_WEMO_SETUP "WeMo 设置"
-#define D_RESPONSE_SENT "发送请求"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue 设置"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API 未实现"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST 参数"
-#define D_3_RESPONSE_PACKETS_SENT "3 请求包发送"
-
-// xdrv_05_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz 设置"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "开关 idx"
-#define D_DOMOTICZ_SENSOR_IDX "传感器 idx"
- #define D_DOMOTICZ_TEMP "温度"
- #define D_DOMOTICZ_TEMP_HUM "温度,湿度"
- #define D_DOMOTICZ_TEMP_HUM_BARO "温度,湿度,气压"
- #define D_DOMOTICZ_POWER_ENERGY "功率,电量"
- #define D_DOMOTICZ_ILLUMINANCE "照度"
- #define D_DOMOTICZ_COUNT "数值/PM1"
- #define D_DOMOTICZ_VOLTAGE "电压/PM2.5"
- #define D_DOMOTICZ_CURRENT "电流/PM10"
- #define D_DOMOTICZ_AIRQUALITY "空气质量"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "更新计时器"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "定时器设置"
-#define D_TIMER_PARAMETERS "定时器参数"
-#define D_TIMER_ENABLE "启用定时器"
-#define D_TIMER_ARM "启用"
-#define D_TIMER_TIME "时间"
-#define D_TIMER_DAYS "天"
-#define D_TIMER_REPEAT "重复"
-#define D_TIMER_OUTPUT "输出"
-#define D_TIMER_ACTION "动作"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX 配置"
-#define D_KNX_PARAMETERS "KNX 参数"
-#define D_KNX_GENERAL_CONFIG "同用"
-#define D_KNX_PHYSICAL_ADDRESS "物理地址"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( 在 KNX 网络上必须是唯一的 )"
-#define D_KNX_ENABLE "启用 KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "要发送到组地址的数据"
-#define D_ADD "添加"
-#define D_DELETE "删除"
-#define D_REPLY "回复"
-#define D_KNX_GROUP_ADDRESS_TO_READ "用来接收数据的组地址"
-#define D_RECEIVED_FROM "接收自"
-#define D_KNX_COMMAND_WRITE "写"
-#define D_KNX_COMMAND_READ "读"
-#define D_KNX_COMMAND_OTHER "其他"
-#define D_SENT_TO "发送到"
-#define D_KNX_WARNING "组地址(0/0/0)被保留,不能使用。"
-#define D_KNX_ENHANCEMENT "通讯增强"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "今日用电量"
-#define D_ENERGY_YESTERDAY "昨日用电量"
-#define D_ENERGY_TOTAL "总用电量"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "传感器正忙"
-#define D_SENSOR_CRC_ERROR "传感器 CRC 校验错误"
-#define D_SENSORS_FOUND "发现传感器"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "等待超时"
-#define D_START_SIGNAL_LOW "开始低电平"
-#define D_START_SIGNAL_HIGH "开始高电平"
-#define D_PULSE "pulse"
-#define D_CHECKSUM_FAILURE "校验失败"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "传感器没有确认命令"
-#define D_SHT1X_FOUND "发现 SHT1X 传感器"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "颗粒物直径大于"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "加速度计X轴分量"
-#define D_AY_AXIS "加速度计Y轴分量"
-#define D_AZ_AXIS "加速度计Z轴分量"
-#define D_GX_AXIS "绕X轴旋转的角速度"
-#define D_GY_AXIS "绕Y轴旋转的角速度"
-#define D_GZ_AXIS "绕Z轴旋转的角速度"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "去除重量"
-#define D_HX_CAL_REFERENCE "加载参考重量"
-#define D_HX_CAL_DONE "已校准"
-#define D_HX_CAL_FAIL "校准失败"
-#define D_RESET_HX711 "秤重置"
-#define D_CONFIGURE_HX711 "秤配置"
-#define D_HX711_PARAMETERS "秤参数"
-#define D_ITEM_WEIGHT "物品中粮"
-#define D_REFERENCE_WEIGHT "参考重量"
-#define D_CALIBRATE "校准"
-#define D_CALIBRATION "校准"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "风向"
-#define D_TX20_WIND_SPEED "风速"
-#define D_TX20_WIND_SPEED_AVG "平均风速"
-#define D_TX20_WIND_SPEED_MAX "最高风速"
-#define D_TX20_NORTH "北"
-#define D_TX20_EAST "东"
-#define D_TX20_SOUTH "南"
-#define D_TX20_WEST "西"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "安"
-#define D_UNIT_CENTIMETER "厘米"
-#define D_UNIT_HERTZ "赫兹"
-#define D_UNIT_HOUR "时"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "千克"
-#define D_UNIT_KILOMETER_PER_HOUR "公里/时" // or "km/h"
-#define D_UNIT_KILOOHM "千欧"
-#define D_UNIT_KILOWATTHOUR "千瓦时"
-#define D_UNIT_LUX "勒克斯"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "微克/立方米"
-#define D_UNIT_MICROMETER "微米"
-#define D_UNIT_MICROSECOND "微秒"
-#define D_UNIT_MILLIAMPERE "毫安"
-#define D_UNIT_MILLIMETER "毫米"
-#define D_UNIT_MILLIMETER_MERCURY "毫米汞柱"
-#define D_UNIT_MILLISECOND "毫秒"
-#define D_UNIT_MINUTE "分"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "每分升"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "百帕"
-#define D_UNIT_SECOND "秒"
-#define D_UNIT_SECTORS "扇区"
-#define D_UNIT_VA "伏安"
-#define D_UNIT_VAR "无功伏安"
-#define D_UNIT_VOLT "伏"
-#define D_UNIT_WATT "瓦"
-#define D_UNIT_WATTHOUR "瓦时"
-#define D_UNIT_WATT_METER_QUADRAT "瓦/平米"
-
-//SDM220
-#define D_PHASE_ANGLE "相位角"
-#define D_IMPORT_ACTIVE "有功输入"
-#define D_EXPORT_ACTIVE "有功输出"
-#define D_IMPORT_REACTIVE "无功输入"
-#define D_EXPORT_REACTIVE "无功输出"
-#define D_TOTAL_REACTIVE "总无功功率"
-#define D_UNIT_KWARH "千乏时"
-#define D_UNIT_ANGLE "度"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_ZH_CN_H_
+/*
+ zh-CN.h - localization for Chinese (Simplified) - China for Tasmota
+
+ Copyright (C) 2019 Theo Arends (translated by killadm)
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_ZH_CN_H_
+#define _LANGUAGE_ZH_CN_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.14.0b
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 2052
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "zh"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "日 一 二 三 四 五 六 "
+#define D_MONTH3LIST "1月 2月 3月 4月 5月 6月 7月 8月 9月 10月11月12月"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "空气质量"
+#define D_AP "AP" // Access Point
+#define D_AS "名称:"
+#define D_AUTO "自动"
+#define D_BLINK "闪烁"
+#define D_BLINKOFF "闪烁关"
+#define D_BOOT_COUNT "启动次数"
+#define D_BRIGHTLIGHT "亮"
+#define D_BSSID "BSSId"
+#define D_BUTTON "按钮"
+#define D_BY "汉化: killadm 作者:" // Written by me
+#define D_BYTES "大小:"
+#define D_CELSIUS "摄氏"
+#define D_CHANNEL "频道"
+#define D_CO2 "二氧化碳"
+#define D_CODE "代码" // Button code
+#define D_COLDLIGHT "冷"
+#define D_COMMAND "命令:"
+#define D_CONNECTED "已连接"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "数量:"
+#define D_COUNTER "计数器"
+#define D_CURRENT "电流" // As in Voltage and Current
+#define D_DATA "数据:"
+#define D_DARKLIGHT "暗"
+#define D_DEBUG "调试"
+#define D_DISABLED "禁用"
+#define D_DISTANCE "距离"
+#define D_DNS_SERVER "DNS服务器"
+#define D_DONE "完成"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "设备模拟"
+#define D_ENABLED "启用"
+#define D_ERASE "擦除"
+#define D_ERROR "错误"
+#define D_FAHRENHEIT "华氏"
+#define D_FAILED "失败"
+#define D_FALLBACK "回退"
+#define D_FALLBACK_TOPIC "回退主题"
+#define D_FALSE "False"
+#define D_FILE "文件:"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "空闲内存"
+#define D_FREQUENCY "频率"
+#define D_GAS "气体"
+#define D_GATEWAY "网关"
+#define D_GROUP "组:"
+#define D_HOST "主机"
+#define D_HOSTNAME "主机名"
+#define D_HUMIDITY "湿度"
+#define D_ILLUMINANCE "照度"
+#define D_IMMEDIATE "单次按键" // Button immediate
+#define D_INDEX "索引:"
+#define D_INFO "信息"
+#define D_INFRARED "红外线"
+#define D_INITIALIZED "初始化完成"
+#define D_IP_ADDRESS "IP地址"
+#define D_LIGHT "灯"
+#define D_LWT "LWT"
+#define D_MODULE "模块"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "多次按键"
+#define D_NOISE "嘈杂"
+#define D_NONE "无"
+#define D_OFF "关"
+#define D_OFFLINE "离线"
+#define D_OK "好"
+#define D_ON "开"
+#define D_ONLINE "在线"
+#define D_PASSWORD "密码"
+#define D_PORT "端口"
+#define D_POWER_FACTOR "功率因数"
+#define D_POWERUSAGE "功率"
+#define D_POWERUSAGE_ACTIVE "有功功率"
+#define D_POWERUSAGE_APPARENT "视在功率"
+#define D_POWERUSAGE_REACTIVE "无功功率"
+#define D_PRESSURE "气压"
+#define D_PRESSUREATSEALEVEL "海平面气压"
+#define D_PROGRAM_FLASH_SIZE "固件 Flash 大小"
+#define D_PROGRAM_SIZE "固件大小"
+#define D_PROJECT "项目:"
+#define D_RAIN "降水量"
+#define D_RECEIVED "已接收"
+#define D_RESTART "重启"
+#define D_RESTARTING "正在重启"
+#define D_RESTART_REASON "重启原因"
+#define D_RESTORE "恢复"
+#define D_RETAINED "已保留"
+#define D_RULE "规则"
+#define D_SAVE "保存"
+#define D_SENSOR "传感器"
+#define D_SSID "名称"
+#define D_START "开始"
+#define D_STD_TIME "STD"
+#define D_STOP "停止"
+#define D_SUBNET_MASK "子网掩码"
+#define D_SUBSCRIBE_TO "订阅"
+#define D_UNSUBSCRIBE_FROM "退订"
+#define D_SUCCESSFUL "成功"
+#define D_SUNRISE "日出"
+#define D_SUNSET "日落"
+#define D_TEMPERATURE "温度"
+#define D_TO "to"
+#define D_TOGGLE "切换"
+#define D_TOPIC "主题"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "发送"
+#define D_TRUE "True"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "升级"
+#define D_UPLOAD "上传"
+#define D_UPTIME "运行时间"
+#define D_USER "用户名"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "紫外线指数"
+#define D_UV_INDEX_1 "低"
+#define D_UV_INDEX_2 "中"
+#define D_UV_INDEX_3 "高"
+#define D_UV_INDEX_4 "危险"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "紫外线水平"
+#define D_UV_POWER "紫外线功率 "
+#define D_VERSION "版本"
+#define D_VOLTAGE "电压"
+#define D_WEIGHT "重量"
+#define D_WARMLIGHT "暖"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "警告:精简固件不支持配置持久化保存"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "串口日志已禁用"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog 日志已开启"
+
+#define D_SET_BAUDRATE_TO "设置波特率为:"
+#define D_RECEIVED_TOPIC "接收到的主题:"
+#define D_DATA_SIZE "数据大小:"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "WPS 配置失败,状态:"
+#define D_ACTIVE_FOR_3_MINUTES "激活 3 分钟"
+#define D_FAILED_TO_START "未能启动"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "连接到 AP"
+#define D_IN_MODE "模式:"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "连接失败,因为没有获取到 IP 地址"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "连接失败,无法连接 AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "连接失败,AP 密码不正确"
+#define D_CONNECT_FAILED_AP_TIMEOUT "连接失败,AP 超时"
+#define D_ATTEMPTING_CONNECTION "尝试连接..."
+#define D_CHECKING_CONNECTION "检查连接..."
+#define D_QUERY_DONE "查询完成。 发现 MQTT 服务"
+#define D_MQTT_SERVICE_FOUND "发现 MQTT 服务:"
+#define D_FOUND_AT "发现:"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog 主机未找到"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "保存到 flash:"
+#define D_LOADED_FROM_FLASH_AT "从 flash 载入:"
+#define D_USE_DEFAULTS "使用默认设置"
+#define D_ERASED_SECTOR "擦除扇区"
+
+// webserver.ino
+#define D_NOSCRIPT "Tasmota要求浏览器支持 JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "当前是精简版固件
请升级"
+#define D_WEBSERVER_ACTIVE_ON "Web 服务器地址:"
+#define D_WITH_IP_ADDRESS "IP 地址:"
+#define D_WEBSERVER_STOPPED "Web 服务已停止"
+#define D_FILE_NOT_FOUND "文件未找到"
+#define D_REDIRECTED "重定向到认证页面"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager 设置无线操作模式"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager 设置接入点"
+#define D_TRYING_TO_CONNECT "尝试将设备连接到网络"
+
+#define D_RESTART_IN "重启需要"
+#define D_SECONDS "秒"
+#define D_DEVICE_WILL_RESTART "设备将在几秒钟内重启"
+#define D_BUTTON_TOGGLE "状态切换"
+#define D_CONFIGURATION "设置"
+#define D_INFORMATION "信息"
+#define D_FIRMWARE_UPGRADE "固件升级"
+#define D_CONSOLE "控制台"
+#define D_CONFIRM_RESTART "确认重启"
+
+#define D_CONFIGURE_MODULE "模块设置"
+#define D_CONFIGURE_WIFI "WiFi设置"
+#define D_CONFIGURE_MQTT "MQTT设置"
+#define D_CONFIGURE_DOMOTICZ "Domoticz设置"
+#define D_CONFIGURE_LOGGING "日志设置"
+#define D_CONFIGURE_OTHER "其他设置"
+#define D_CONFIRM_RESET_CONFIGURATION "确认重置配置"
+#define D_RESET_CONFIGURATION "重置配置"
+#define D_BACKUP_CONFIGURATION "备份配置"
+#define D_RESTORE_CONFIGURATION "还原配置"
+#define D_MAIN_MENU "主菜单"
+
+#define D_MODULE_PARAMETERS "模块设置"
+#define D_MODULE_TYPE "模块类型"
+#define D_PULLUP_ENABLE "没有按钮/开关上拉"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "串口输入(RX)"
+#define D_SERIAL_OUT "串口输出(TX)"
+
+#define D_WIFI_PARAMETERS "Wifi设置"
+#define D_SCAN_FOR_WIFI_NETWORKS "扫描无线网络"
+#define D_SCAN_DONE "扫描完毕"
+#define D_NO_NETWORKS_FOUND "未找到任何网络"
+#define D_REFRESH_TO_SCAN_AGAIN "刷新并重试"
+#define D_DUPLICATE_ACCESSPOINT "重复AP"
+#define D_SKIPPING_LOW_QUALITY "忽略弱信号网络"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 名称"
+#define D_AP1_PASSWORD "AP1 密码"
+#define D_AP2_SSID "AP2 名称"
+#define D_AP2_PASSWORD "AP2 密码"
+
+#define D_MQTT_PARAMETERS "MQTT 设置"
+#define D_CLIENT "客户端"
+#define D_FULL_TOPIC "完整主题"
+
+#define D_LOGGING_PARAMETERS "日志设置"
+#define D_SERIAL_LOG_LEVEL "串口日志级别"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web 日志级别"
+#define D_SYS_LOG_LEVEL "Syslog 日志级别"
+#define D_MORE_DEBUG "全部调试"
+#define D_SYSLOG_HOST "Syslog 主机地址"
+#define D_SYSLOG_PORT "Syslog 端口"
+#define D_TELEMETRY_PERIOD "上报周期"
+
+#define D_OTHER_PARAMETERS "其他设置"
+#define D_TEMPLATE "模板"
+#define D_ACTIVATE "启用"
+#define D_WEB_ADMIN_PASSWORD "WEB 管理密码"
+#define D_MQTT_ENABLE "启用MQTT"
+#define D_FRIENDLY_NAME "昵称"
+#define D_BELKIN_WEMO "贝尔金 WeMo"
+#define D_HUE_BRIDGE "飞利浦 Hue 网桥"
+#define D_SINGLE_DEVICE "单设备"
+#define D_MULTI_DEVICE "多设备"
+
+#define D_CONFIGURE_TEMPLATE "模板配置"
+#define D_TEMPLATE_PARAMETERS "模板参数"
+#define D_TEMPLATE_NAME "名称"
+#define D_BASE_TYPE "基于"
+#define D_TEMPLATE_FLAGS "选项"
+
+#define D_SAVE_CONFIGURATION "保存设置"
+#define D_CONFIGURATION_SAVED "设置已保存"
+#define D_CONFIGURATION_RESET "设置已重置"
+
+#define D_PROGRAM_VERSION "固件版本"
+#define D_BUILD_DATE_AND_TIME "编译时间"
+#define D_CORE_AND_SDK_VERSION "内核和 SDK 版本"
+#define D_FLASH_WRITE_COUNT "Flash 写入次数"
+#define D_MAC_ADDRESS "MAC 地址"
+#define D_MQTT_HOST "MQTT 主机"
+#define D_MQTT_PORT "MQTT 端口"
+#define D_MQTT_CLIENT "MQTT 客户端"
+#define D_MQTT_USER "MQTT 用户名"
+#define D_MQTT_TOPIC "MQTT 主题"
+#define D_MQTT_GROUP_TOPIC "MQTT 主题组"
+#define D_MQTT_FULL_TOPIC "MQTT 完整主题"
+#define D_MDNS_DISCOVERY "mDNS 发现"
+#define D_MDNS_ADVERTISE "mDNS 广播"
+#define D_ESP_CHIP_ID "ESP 芯片 ID"
+#define D_FLASH_CHIP_ID "Flash 芯片 ID"
+#define D_FLASH_CHIP_SIZE "Flash 大小"
+#define D_FREE_PROGRAM_SPACE "空闲程序空间"
+
+#define D_UPGRADE_BY_WEBSERVER "通过 Web 升级"
+#define D_OTA_URL "OTA 地址"
+#define D_START_UPGRADE "开始升级"
+#define D_UPGRADE_BY_FILE_UPLOAD "通过文件升级"
+#define D_UPLOAD_STARTED "开始上传"
+#define D_UPGRADE_STARTED "开始升级"
+#define D_UPLOAD_DONE "上传完成"
+#define D_UPLOAD_ERR_1 "没有选择任何文件"
+#define D_UPLOAD_ERR_2 "没有足够空间"
+#define D_UPLOAD_ERR_3 "固件头不是 0xE9"
+#define D_UPLOAD_ERR_4 "固件大小超过 flash 容量"
+#define D_UPLOAD_ERR_5 "上传缓冲区不足,请先刷入精简固件再升级"
+#define D_UPLOAD_ERR_6 "上传失败。 启用日志级别 3 调试"
+#define D_UPLOAD_ERR_7 "上传取消"
+#define D_UPLOAD_ERR_8 "错误的固件"
+#define D_UPLOAD_ERR_9 "固件太大"
+#define D_UPLOAD_ERR_10 "初始化 RF 芯片失败"
+#define D_UPLOAD_ERR_11 "擦除 RF 芯片失败"
+#define D_UPLOAD_ERR_12 "写入 RF 芯片失败"
+#define D_UPLOAD_ERR_13 "解码 RF 固件失败"
+#define D_UPLOAD_ERROR_CODE "上传错误代码"
+
+#define D_ENTER_COMMAND "输入命令"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "如果想得到预期响应,请调整日志级别至: 2 信息"
+#define D_NEED_USER_AND_PASSWORD "需要 user=<用户名>&password=<密码>"
+
+// xdrv_00_mqtt.ino
+#define D_FINGERPRINT "验证 TLS 指纹..."
+#define D_TLS_CONNECT_FAILED_TO "TLS 连接失败"
+#define D_RETRY_IN "重试倒计时:"
+#define D_VERIFIED "验证成功"
+#define D_INSECURE "指纹无效导致连接不安全"
+#define D_CONNECT_FAILED_TO "连接失败:"
+
+// xdrv_wemohue.ino
+#define D_MULTICAST_DISABLED "组播已禁用"
+#define D_MULTICAST_REJOINED "组播已(重新)加入"
+#define D_MULTICAST_JOIN_FAILED "组播加入失败"
+#define D_FAILED_TO_SEND_RESPONSE "请求发送失败"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo 基础事件"
+#define D_WEMO_EVENT_SERVICE "WeMo 事件服务"
+#define D_WEMO_META_SERVICE "WeMo meta 服务"
+#define D_WEMO_SETUP "WeMo 设置"
+#define D_RESPONSE_SENT "发送请求"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue 设置"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API 未实现"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST 参数"
+#define D_3_RESPONSE_PACKETS_SENT "3 请求包发送"
+
+// xdrv_05_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz 设置"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "开关 idx"
+#define D_DOMOTICZ_SENSOR_IDX "传感器 idx"
+ #define D_DOMOTICZ_TEMP "温度"
+ #define D_DOMOTICZ_TEMP_HUM "温度,湿度"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "温度,湿度,气压"
+ #define D_DOMOTICZ_POWER_ENERGY "功率,电量"
+ #define D_DOMOTICZ_ILLUMINANCE "照度"
+ #define D_DOMOTICZ_COUNT "数值/PM1"
+ #define D_DOMOTICZ_VOLTAGE "电压/PM2.5"
+ #define D_DOMOTICZ_CURRENT "电流/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "空气质量"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "更新计时器"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "定时器设置"
+#define D_TIMER_PARAMETERS "定时器参数"
+#define D_TIMER_ENABLE "启用定时器"
+#define D_TIMER_ARM "启用"
+#define D_TIMER_TIME "时间"
+#define D_TIMER_DAYS "天"
+#define D_TIMER_REPEAT "重复"
+#define D_TIMER_OUTPUT "输出"
+#define D_TIMER_ACTION "动作"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX 配置"
+#define D_KNX_PARAMETERS "KNX 参数"
+#define D_KNX_GENERAL_CONFIG "同用"
+#define D_KNX_PHYSICAL_ADDRESS "物理地址"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( 在 KNX 网络上必须是唯一的 )"
+#define D_KNX_ENABLE "启用 KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "要发送到组地址的数据"
+#define D_ADD "添加"
+#define D_DELETE "删除"
+#define D_REPLY "回复"
+#define D_KNX_GROUP_ADDRESS_TO_READ "用来接收数据的组地址"
+#define D_RECEIVED_FROM "接收自"
+#define D_KNX_COMMAND_WRITE "写"
+#define D_KNX_COMMAND_READ "读"
+#define D_KNX_COMMAND_OTHER "其他"
+#define D_SENT_TO "发送到"
+#define D_KNX_WARNING "组地址(0/0/0)被保留,不能使用。"
+#define D_KNX_ENHANCEMENT "通讯增强"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "今日用电量"
+#define D_ENERGY_YESTERDAY "昨日用电量"
+#define D_ENERGY_TOTAL "总用电量"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "传感器正忙"
+#define D_SENSOR_CRC_ERROR "传感器 CRC 校验错误"
+#define D_SENSORS_FOUND "发现传感器"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "等待超时"
+#define D_START_SIGNAL_LOW "开始低电平"
+#define D_START_SIGNAL_HIGH "开始高电平"
+#define D_PULSE "pulse"
+#define D_CHECKSUM_FAILURE "校验失败"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "传感器没有确认命令"
+#define D_SHT1X_FOUND "发现 SHT1X 传感器"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "颗粒物直径大于"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "加速度计X轴分量"
+#define D_AY_AXIS "加速度计Y轴分量"
+#define D_AZ_AXIS "加速度计Z轴分量"
+#define D_GX_AXIS "绕X轴旋转的角速度"
+#define D_GY_AXIS "绕Y轴旋转的角速度"
+#define D_GZ_AXIS "绕Z轴旋转的角速度"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "去除重量"
+#define D_HX_CAL_REFERENCE "加载参考重量"
+#define D_HX_CAL_DONE "已校准"
+#define D_HX_CAL_FAIL "校准失败"
+#define D_RESET_HX711 "秤重置"
+#define D_CONFIGURE_HX711 "秤配置"
+#define D_HX711_PARAMETERS "秤参数"
+#define D_ITEM_WEIGHT "物品中粮"
+#define D_REFERENCE_WEIGHT "参考重量"
+#define D_CALIBRATE "校准"
+#define D_CALIBRATION "校准"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "风向"
+#define D_TX20_WIND_SPEED "风速"
+#define D_TX20_WIND_SPEED_AVG "平均风速"
+#define D_TX20_WIND_SPEED_MAX "最高风速"
+#define D_TX20_NORTH "北"
+#define D_TX20_EAST "东"
+#define D_TX20_SOUTH "南"
+#define D_TX20_WEST "西"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "安"
+#define D_UNIT_CENTIMETER "厘米"
+#define D_UNIT_HERTZ "赫兹"
+#define D_UNIT_HOUR "时"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "千克"
+#define D_UNIT_KILOMETER_PER_HOUR "公里/时" // or "km/h"
+#define D_UNIT_KILOOHM "千欧"
+#define D_UNIT_KILOWATTHOUR "千瓦时"
+#define D_UNIT_LUX "勒克斯"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "微克/立方米"
+#define D_UNIT_MICROMETER "微米"
+#define D_UNIT_MICROSECOND "微秒"
+#define D_UNIT_MILLIAMPERE "毫安"
+#define D_UNIT_MILLIMETER "毫米"
+#define D_UNIT_MILLIMETER_MERCURY "毫米汞柱"
+#define D_UNIT_MILLISECOND "毫秒"
+#define D_UNIT_MINUTE "分"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "每分升"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "百帕"
+#define D_UNIT_SECOND "秒"
+#define D_UNIT_SECTORS "扇区"
+#define D_UNIT_VA "伏安"
+#define D_UNIT_VAR "无功伏安"
+#define D_UNIT_VOLT "伏"
+#define D_UNIT_WATT "瓦"
+#define D_UNIT_WATTHOUR "瓦时"
+#define D_UNIT_WATT_METER_QUADRAT "瓦/平米"
+
+//SDM220
+#define D_PHASE_ANGLE "相位角"
+#define D_IMPORT_ACTIVE "有功输入"
+#define D_EXPORT_ACTIVE "有功输出"
+#define D_IMPORT_REACTIVE "无功输入"
+#define D_EXPORT_REACTIVE "无功输出"
+#define D_TOTAL_REACTIVE "总无功功率"
+#define D_UNIT_KWARH "千乏时"
+#define D_UNIT_ANGLE "度"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_ZH_CN_H_
diff --git a/tasmota/language/zh-TW.h b/tasmota/language/zh-TW.h
index 1d78f181e..ed67b2931 100644
--- a/tasmota/language/zh-TW.h
+++ b/tasmota/language/zh-TW.h
@@ -1,701 +1,703 @@
-/*
- zh-TW.h - localization for Chinese (Traditional) - Taiwan for Tasmota
-
- Copyright (C) 2019 Theo Arends (translated by dannydu)
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_ZH_TW_H_
-#define _LANGUAGE_ZH_TW_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.12.0d
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1028
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "zh"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "SunMonTueWedThuFriSat"
-#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "空氣品質"
-#define D_AP "AP" // Access Point
-#define D_AS "名稱:"
-#define D_AUTO "自動"
-#define D_BLINK "閃爍"
-#define D_BLINKOFF "閃爍關"
-#define D_BOOT_COUNT "啟動次數"
-#define D_BRIGHTLIGHT "亮度"
-#define D_BSSID "BSSId"
-#define D_BUTTON "按鈕"
-#define D_BY "by" // Written by me
-#define D_BYTES "大小:"
-#define D_CELSIUS "攝氏"
-#define D_CHANNEL "Channel"
-#define D_CO2 "二氧化碳"
-#define D_CODE "代碼" // Button code
-#define D_COLDLIGHT "冷"
-#define D_COMMAND "命令:"
-#define D_CONNECTED "已連接"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "數量:"
-#define D_COUNTER "Counter"
-#define D_CURRENT "電流" // As in Voltage and Current
-#define D_DATA "數據:"
-#define D_DARKLIGHT "Dark"
-#define D_DEBUG "除錯"
-#define D_DISABLED "停用"
-#define D_DISTANCE "Distance"
-#define D_DNS_SERVER "DNS伺服器"
-#define D_DONE "完成"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "設備模擬"
-#define D_ENABLED "啟用"
-#define D_ERASE "刪除"
-#define D_ERROR "錯誤"
-#define D_FAHRENHEIT "華氏"
-#define D_FAILED "失敗"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback Topic"
-#define D_FALSE "False"
-#define D_FILE "文件:"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "可用記憶體"
-#define D_FREQUENCY "Frequency"
-#define D_GAS "氣體"
-#define D_GATEWAY "網關"
-#define D_GROUP "組:"
-#define D_HOST "主機"
-#define D_HOSTNAME "主機名"
-#define D_HUMIDITY "濕度"
-#define D_ILLUMINANCE "照度"
-#define D_IMMEDIATE "immediate" // Button immediate
-#define D_INDEX "索引:"
-#define D_INFO "信息"
-#define D_INFRARED "Infrared"
-#define D_INITIALIZED "初始化完成"
-#define D_IP_ADDRESS "IP地址"
-#define D_LIGHT "燈"
-#define D_LWT "LWT"
-#define D_MODULE "模組"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "多次按鍵"
-#define D_NOISE "雜訊"
-#define D_NONE "無"
-#define D_OFF "關"
-#define D_OFFLINE "離線"
-#define D_OK "好"
-#define D_ON "開"
-#define D_ONLINE "在線"
-#define D_PASSWORD "密碼"
-#define D_PORT "端口"
-#define D_POWER_FACTOR "功率因數"
-#define D_POWERUSAGE "功率"
-#define D_POWERUSAGE_ACTIVE "Active Power"
-#define D_POWERUSAGE_APPARENT "Apparent Power"
-#define D_POWERUSAGE_REACTIVE "Reactive Power"
-#define D_PRESSURE "氣壓"
-#define D_PRESSUREATSEALEVEL "海平面氣壓"
-#define D_PROGRAM_FLASH_SIZE "韌體 Flash 大小"
-#define D_PROGRAM_SIZE "韌體大小"
-#define D_PROJECT "項目:"
-#define D_RAIN "Rain"
-#define D_RECEIVED "已接收"
-#define D_RESTART "重啟"
-#define D_RESTARTING "正在重啟"
-#define D_RESTART_REASON "重啟原因"
-#define D_RESTORE "恢覆"
-#define D_RETAINED "已保留"
-#define D_RULE "Rule"
-#define D_SAVE "存檔"
-#define D_SENSOR "感測器"
-#define D_SSID "名稱"
-#define D_START "開始"
-#define D_STD_TIME "STD"
-#define D_STOP "停止"
-#define D_SUBNET_MASK "子網遮罩"
-#define D_SUBSCRIBE_TO "訂閱"
-#define D_UNSUBSCRIBE_FROM "退訂"
-#define D_SUCCESSFUL "成功"
-#define D_SUNRISE "Sunrise"
-#define D_SUNSET "Sunset"
-#define D_TEMPERATURE "溫度"
-#define D_TO "to"
-#define D_TOGGLE "切換"
-#define D_TOPIC "主題"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "發送"
-#define D_TRUE "True"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "升級"
-#define D_UPLOAD "上傳"
-#define D_UPTIME "運行時間"
-#define D_USER "用戶名"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Low"
-#define D_UV_INDEX_2 "Mid"
-#define D_UV_INDEX_3 "High"
-#define D_UV_INDEX_4 "Danger"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "紫外線等級"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "版本"
-#define D_VOLTAGE "電壓"
-#define D_WEIGHT "Weight"
-#define D_WARMLIGHT "暖"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "警告:精簡產品不支持配置寫入保存"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "串口日誌已禁用"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog 日誌已開啟"
-
-#define D_SET_BAUDRATE_TO "設置波特率為:"
-#define D_RECEIVED_TOPIC "接收到的主題:"
-#define D_DATA_SIZE "數據大小:"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
-#define D_ACTIVE_FOR_3_MINUTES "active for 3 minutes"
-#define D_FAILED_TO_START "未能啟動"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "連接到 AP"
-#define D_IN_MODE "模式:"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "連接失敗,因為沒有獲取到IP地址"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "連接失敗,無法連接AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "連接失敗,AP密碼不正確"
-#define D_CONNECT_FAILED_AP_TIMEOUT "連接失敗,AP超時"
-#define D_ATTEMPTING_CONNECTION "嘗試連接..."
-#define D_CHECKING_CONNECTION "檢查連接..."
-#define D_QUERY_DONE "查詢完成。 發現MQTT服務"
-#define D_MQTT_SERVICE_FOUND "發現MQTT服務:"
-#define D_FOUND_AT "found at"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog主機未找到"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "保存到 flash:"
-#define D_LOADED_FROM_FLASH_AT "從 flash 載入"
-#define D_USE_DEFAULTS "使用默認設置"
-#define D_ERASED_SECTOR "擦除刪除"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "固件版本過低
請升級"
-#define D_WEBSERVER_ACTIVE_ON "Web服務器:"
-#define D_WITH_IP_ADDRESS "IP地址:"
-#define D_WEBSERVER_STOPPED "Web 服務器已停止"
-#define D_FILE_NOT_FOUND "文件未找到"
-#define D_REDIRECTED "重定向到認證頁面"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager 設置接入點"
-#define D_TRYING_TO_CONNECT "嘗試將設備連接到網絡"
-
-#define D_RESTART_IN "重啟需要"
-#define D_SECONDS "秒"
-#define D_DEVICE_WILL_RESTART "設備將在幾分鐘內重啟"
-#define D_BUTTON_TOGGLE "狀態切換"
-#define D_CONFIGURATION "設置"
-#define D_INFORMATION "信息"
-#define D_FIRMWARE_UPGRADE "固件升級"
-#define D_CONSOLE "控制台"
-#define D_CONFIRM_RESTART "確認重啟"
-
-#define D_CONFIGURE_MODULE "模塊設置"
-#define D_CONFIGURE_WIFI "WiFi設置"
-#define D_CONFIGURE_MQTT "MQTT設置"
-#define D_CONFIGURE_DOMOTICZ "Domoticz設置"
-#define D_CONFIGURE_LOGGING "日志設置"
-#define D_CONFIGURE_OTHER "其他設置"
-#define D_CONFIRM_RESET_CONFIGURATION "確認重置配置"
-#define D_RESET_CONFIGURATION "重置配置"
-#define D_BACKUP_CONFIGURATION "備份配置"
-#define D_RESTORE_CONFIGURATION "還原配置"
-#define D_MAIN_MENU "主菜單"
-
-#define D_MODULE_PARAMETERS "模塊設置"
-#define D_MODULE_TYPE "模塊類型"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "串口輸入(RX)"
-#define D_SERIAL_OUT "串口輸出(TX)"
-
-#define D_WIFI_PARAMETERS "Wifi設置"
-#define D_SCAN_FOR_WIFI_NETWORKS "掃描無線網絡"
-#define D_SCAN_DONE "掃描完畢"
-#define D_NO_NETWORKS_FOUND "未找到任何網絡"
-#define D_REFRESH_TO_SCAN_AGAIN "刷新並重試"
-#define D_DUPLICATE_ACCESSPOINT "重覆AP"
-#define D_SKIPPING_LOW_QUALITY "忽略弱信號網絡"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 名稱"
-#define D_AP1_PASSWORD "AP1 密碼"
-#define D_AP2_SSID "AP2 名稱"
-#define D_AP2_PASSWORD "AP2 密碼"
-
-#define D_MQTT_PARAMETERS "MQTT設置"
-#define D_CLIENT "客戶端"
-#define D_FULL_TOPIC "完整主題"
-
-#define D_LOGGING_PARAMETERS "日志設置"
-#define D_SERIAL_LOG_LEVEL "串口日志級別"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web 日志級別"
-#define D_SYS_LOG_LEVEL "Syslog 日志級別"
-#define D_MORE_DEBUG "全部調試"
-#define D_SYSLOG_HOST "Syslog 主機地址"
-#define D_SYSLOG_PORT "Syslog 端口"
-#define D_TELEMETRY_PERIOD "上報周期"
-
-#define D_OTHER_PARAMETERS "其他設置"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "WEB管理密碼"
-#define D_MQTT_ENABLE "啟用MQTT"
-#define D_FRIENDLY_NAME "昵稱"
-#define D_BELKIN_WEMO "貝爾金 WeMo"
-#define D_HUE_BRIDGE "飛利浦 Hue 網橋"
-#define D_SINGLE_DEVICE "單設備"
-#define D_MULTI_DEVICE "多設備"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "保存設置"
-#define D_CONFIGURATION_SAVED "設置已保存"
-#define D_CONFIGURATION_RESET "設置已重置"
-
-#define D_PROGRAM_VERSION "固件版本"
-#define D_BUILD_DATE_AND_TIME "編譯時間"
-#define D_CORE_AND_SDK_VERSION "內核版本"
-#define D_FLASH_WRITE_COUNT "刷機次數"
-#define D_MAC_ADDRESS "MAC地址"
-#define D_MQTT_HOST "MQTT主機"
-#define D_MQTT_PORT "MQTT端口"
-#define D_MQTT_CLIENT "MQTT客戶端"
-#define D_MQTT_USER "MQTT用戶名"
-#define D_MQTT_TOPIC "MQTT 主題(Topic)"
-#define D_MQTT_GROUP_TOPIC "MQTT 主題組(Group Topic)"
-#define D_MQTT_FULL_TOPIC "MQTT 完整主題(Full Topic)"
-#define D_MDNS_DISCOVERY "mDNS 發現"
-#define D_MDNS_ADVERTISE "mDNS 廣播"
-#define D_ESP_CHIP_ID "ESP芯片ID"
-#define D_FLASH_CHIP_ID "Flash芯片ID"
-#define D_FLASH_CHIP_SIZE "Flash大小"
-#define D_FREE_PROGRAM_SPACE "空閑程序空間"
-
-#define D_UPGRADE_BY_WEBSERVER "通過Web升級"
-#define D_OTA_URL "OTA地址"
-#define D_START_UPGRADE "開始升級"
-#define D_UPGRADE_BY_FILE_UPLOAD "通過文件升級"
-#define D_UPLOAD_STARTED "開始上傳"
-#define D_UPGRADE_STARTED "開始升級"
-#define D_UPLOAD_DONE "上傳完成"
-#define D_UPLOAD_ERR_1 "沒有選擇文件"
-#define D_UPLOAD_ERR_2 "沒有足夠空間"
-#define D_UPLOAD_ERR_3 "固件頭不是 0xE9"
-#define D_UPLOAD_ERR_4 "固件太大"
-#define D_UPLOAD_ERR_5 "上傳緩沖區不匹配"
-#define D_UPLOAD_ERR_6 "上傳失敗。 啟用日志記錄 3"
-#define D_UPLOAD_ERR_7 "上傳取消"
-#define D_UPLOAD_ERR_8 "錯誤的固件"
-#define D_UPLOAD_ERR_9 "固件太大"
-#define D_UPLOAD_ERR_10 "Failed to init RF chip"
-#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
-#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
-#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
-#define D_UPLOAD_ERROR_CODE "上傳錯誤代碼"
-
-#define D_ENTER_COMMAND "輸入命令"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "如果預期響應,則啟用Weblog 2"
-#define D_NEED_USER_AND_PASSWORD "需要 user=<用戶名>&password=<密碼>"
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "驗證 TLS 指紋..."
-#define D_TLS_CONNECT_FAILED_TO "TLS 連接失敗"
-#define D_RETRY_IN "重試倒計時:"
-#define D_VERIFIED "驗證成功"
-#define D_INSECURE "指紋無效導致連接不安全"
-#define D_CONNECT_FAILED_TO "連接失敗:"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "組播已禁用"
-#define D_MULTICAST_REJOINED "組播已(重新)加入"
-#define D_MULTICAST_JOIN_FAILED "組播加入失敗"
-#define D_FAILED_TO_SEND_RESPONSE "請求發送失敗"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo 基礎事件"
-#define D_WEMO_EVENT_SERVICE "WeMo 事件服務"
-#define D_WEMO_META_SERVICE "WeMo meta 服務"
-#define D_WEMO_SETUP "WeMo 設置"
-#define D_RESPONSE_SENT "發送請求"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue 設置"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API 未實現"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST 參數"
-#define D_3_RESPONSE_PACKETS_SENT "3 請求包發送"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz 設置"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "開關 idx"
-#define D_DOMOTICZ_SENSOR_IDX "傳感器 idx"
- #define D_DOMOTICZ_TEMP "溫度"
- #define D_DOMOTICZ_TEMP_HUM "溫度,濕度"
- #define D_DOMOTICZ_TEMP_HUM_BARO "溫度,濕度,氣壓"
- #define D_DOMOTICZ_POWER_ENERGY "功率,電量"
- #define D_DOMOTICZ_ILLUMINANCE "照度"
- #define D_DOMOTICZ_COUNT "數值/PM1"
- #define D_DOMOTICZ_VOLTAGE "電壓/PM2.5"
- #define D_DOMOTICZ_CURRENT "電流/PM10"
- #define D_DOMOTICZ_AIRQUALITY "空氣品質"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "更新計時器"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configure Timer"
-#define D_TIMER_PARAMETERS "Timer parameters"
-#define D_TIMER_ENABLE "Enable Timers"
-#define D_TIMER_ARM "Arm"
-#define D_TIMER_TIME "Time"
-#define D_TIMER_DAYS "Days"
-#define D_TIMER_REPEAT "Repeat"
-#define D_TIMER_OUTPUT "Output"
-#define D_TIMER_ACTION "Action"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configure KNX"
-#define D_KNX_PARAMETERS "KNX Parameters"
-#define D_KNX_GENERAL_CONFIG "General"
-#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
-#define D_KNX_ENABLE "Enable KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
-#define D_ADD "Add"
-#define D_DELETE "Delete"
-#define D_REPLY "Reply"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
-#define D_RECEIVED_FROM "Received from"
-#define D_KNX_COMMAND_WRITE "Write"
-#define D_KNX_COMMAND_READ "Read"
-#define D_KNX_COMMAND_OTHER "Other"
-#define D_SENT_TO "sent to"
-#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "今日用電量"
-#define D_ENERGY_YESTERDAY "昨日用電量"
-#define D_ENERGY_TOTAL "總用電量"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "傳感器正忙"
-#define D_SENSOR_CRC_ERROR "傳感器 CRC 校驗錯誤"
-#define D_SENSORS_FOUND "發現傳感器"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "等待超時"
-#define D_START_SIGNAL_LOW "開始低電平"
-#define D_START_SIGNAL_HIGH "開始高電平"
-#define D_PULSE "pulse"
-#define D_CHECKSUM_FAILURE "校驗失敗"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "傳感器沒有確認命令"
-#define D_SHT1X_FOUND "發現 SHT1X 傳感器"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "顆粒物直徑大於"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remove weigth"
-#define D_HX_CAL_REFERENCE "Load reference weigth"
-#define D_HX_CAL_DONE "Calibrated"
-#define D_HX_CAL_FAIL "Calibration failed"
-#define D_RESET_HX711 "Reset Scale"
-#define D_CONFIGURE_HX711 "Configure Scale"
-#define D_HX711_PARAMETERS "Scale parameters"
-#define D_ITEM_WEIGHT "Item weight"
-#define D_REFERENCE_WEIGHT "Reference weigth"
-#define D_CALIBRATE "Calibrate"
-#define D_CALIBRATION "Calibration"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Wind Direction"
-#define D_TX20_WIND_SPEED "Wind Speed"
-#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
-#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-
-// Units
-#define D_UNIT_AMPERE "安"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "時"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "千歐"
-#define D_UNIT_KILOWATTHOUR "千瓦時"
-#define D_UNIT_LUX "勒克斯"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "微克/立方米"
-#define D_UNIT_MICROMETER "微米"
-#define D_UNIT_MICROSECOND "微秒"
-#define D_UNIT_MILLIAMPERE "毫安"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "毫秒"
-#define D_UNIT_MINUTE "分"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "每分升"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "百帕"
-#define D_UNIT_SECOND "秒"
-#define D_UNIT_SECTORS "扇區"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "伏"
-#define D_UNIT_WATT "瓦"
-#define D_UNIT_WATTHOUR "瓦時"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_ZH_TW_H_
+/*
+ zh-TW.h - localization for Chinese (Traditional) - Taiwan for Tasmota
+
+ Copyright (C) 2019 Theo Arends (translated by dannydu)
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_ZH_TW_H_
+#define _LANGUAGE_ZH_TW_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.12.0d
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1028
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "zh"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "SunMonTueWedThuFriSat"
+#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "空氣品質"
+#define D_AP "AP" // Access Point
+#define D_AS "名稱:"
+#define D_AUTO "自動"
+#define D_BLINK "閃爍"
+#define D_BLINKOFF "閃爍關"
+#define D_BOOT_COUNT "啟動次數"
+#define D_BRIGHTLIGHT "亮度"
+#define D_BSSID "BSSId"
+#define D_BUTTON "按鈕"
+#define D_BY "by" // Written by me
+#define D_BYTES "大小:"
+#define D_CELSIUS "攝氏"
+#define D_CHANNEL "Channel"
+#define D_CO2 "二氧化碳"
+#define D_CODE "代碼" // Button code
+#define D_COLDLIGHT "冷"
+#define D_COMMAND "命令:"
+#define D_CONNECTED "已連接"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "數量:"
+#define D_COUNTER "Counter"
+#define D_CURRENT "電流" // As in Voltage and Current
+#define D_DATA "數據:"
+#define D_DARKLIGHT "Dark"
+#define D_DEBUG "除錯"
+#define D_DISABLED "停用"
+#define D_DISTANCE "Distance"
+#define D_DNS_SERVER "DNS伺服器"
+#define D_DONE "完成"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "設備模擬"
+#define D_ENABLED "啟用"
+#define D_ERASE "刪除"
+#define D_ERROR "錯誤"
+#define D_FAHRENHEIT "華氏"
+#define D_FAILED "失敗"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback Topic"
+#define D_FALSE "False"
+#define D_FILE "文件:"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "可用記憶體"
+#define D_FREQUENCY "Frequency"
+#define D_GAS "氣體"
+#define D_GATEWAY "網關"
+#define D_GROUP "組:"
+#define D_HOST "主機"
+#define D_HOSTNAME "主機名"
+#define D_HUMIDITY "濕度"
+#define D_ILLUMINANCE "照度"
+#define D_IMMEDIATE "immediate" // Button immediate
+#define D_INDEX "索引:"
+#define D_INFO "信息"
+#define D_INFRARED "Infrared"
+#define D_INITIALIZED "初始化完成"
+#define D_IP_ADDRESS "IP地址"
+#define D_LIGHT "燈"
+#define D_LWT "LWT"
+#define D_MODULE "模組"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "多次按鍵"
+#define D_NOISE "雜訊"
+#define D_NONE "無"
+#define D_OFF "關"
+#define D_OFFLINE "離線"
+#define D_OK "好"
+#define D_ON "開"
+#define D_ONLINE "在線"
+#define D_PASSWORD "密碼"
+#define D_PORT "端口"
+#define D_POWER_FACTOR "功率因數"
+#define D_POWERUSAGE "功率"
+#define D_POWERUSAGE_ACTIVE "Active Power"
+#define D_POWERUSAGE_APPARENT "Apparent Power"
+#define D_POWERUSAGE_REACTIVE "Reactive Power"
+#define D_PRESSURE "氣壓"
+#define D_PRESSUREATSEALEVEL "海平面氣壓"
+#define D_PROGRAM_FLASH_SIZE "韌體 Flash 大小"
+#define D_PROGRAM_SIZE "韌體大小"
+#define D_PROJECT "項目:"
+#define D_RAIN "Rain"
+#define D_RECEIVED "已接收"
+#define D_RESTART "重啟"
+#define D_RESTARTING "正在重啟"
+#define D_RESTART_REASON "重啟原因"
+#define D_RESTORE "恢覆"
+#define D_RETAINED "已保留"
+#define D_RULE "Rule"
+#define D_SAVE "存檔"
+#define D_SENSOR "感測器"
+#define D_SSID "名稱"
+#define D_START "開始"
+#define D_STD_TIME "STD"
+#define D_STOP "停止"
+#define D_SUBNET_MASK "子網遮罩"
+#define D_SUBSCRIBE_TO "訂閱"
+#define D_UNSUBSCRIBE_FROM "退訂"
+#define D_SUCCESSFUL "成功"
+#define D_SUNRISE "Sunrise"
+#define D_SUNSET "Sunset"
+#define D_TEMPERATURE "溫度"
+#define D_TO "to"
+#define D_TOGGLE "切換"
+#define D_TOPIC "主題"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "發送"
+#define D_TRUE "True"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "升級"
+#define D_UPLOAD "上傳"
+#define D_UPTIME "運行時間"
+#define D_USER "用戶名"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Low"
+#define D_UV_INDEX_2 "Mid"
+#define D_UV_INDEX_3 "High"
+#define D_UV_INDEX_4 "Danger"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "紫外線等級"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "版本"
+#define D_VOLTAGE "電壓"
+#define D_WEIGHT "Weight"
+#define D_WARMLIGHT "暖"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "警告:精簡產品不支持配置寫入保存"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "串口日誌已禁用"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog 日誌已開啟"
+
+#define D_SET_BAUDRATE_TO "設置波特率為:"
+#define D_RECEIVED_TOPIC "接收到的主題:"
+#define D_DATA_SIZE "數據大小:"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
+#define D_ACTIVE_FOR_3_MINUTES "active for 3 minutes"
+#define D_FAILED_TO_START "未能啟動"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "連接到 AP"
+#define D_IN_MODE "模式:"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "連接失敗,因為沒有獲取到IP地址"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "連接失敗,無法連接AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "連接失敗,AP密碼不正確"
+#define D_CONNECT_FAILED_AP_TIMEOUT "連接失敗,AP超時"
+#define D_ATTEMPTING_CONNECTION "嘗試連接..."
+#define D_CHECKING_CONNECTION "檢查連接..."
+#define D_QUERY_DONE "查詢完成。 發現MQTT服務"
+#define D_MQTT_SERVICE_FOUND "發現MQTT服務:"
+#define D_FOUND_AT "found at"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog主機未找到"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "保存到 flash:"
+#define D_LOADED_FROM_FLASH_AT "從 flash 載入"
+#define D_USE_DEFAULTS "使用默認設置"
+#define D_ERASED_SECTOR "擦除刪除"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "固件版本過低
請升級"
+#define D_WEBSERVER_ACTIVE_ON "Web服務器:"
+#define D_WITH_IP_ADDRESS "IP地址:"
+#define D_WEBSERVER_STOPPED "Web 服務器已停止"
+#define D_FILE_NOT_FOUND "文件未找到"
+#define D_REDIRECTED "重定向到認證頁面"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager 設置接入點"
+#define D_TRYING_TO_CONNECT "嘗試將設備連接到網絡"
+
+#define D_RESTART_IN "重啟需要"
+#define D_SECONDS "秒"
+#define D_DEVICE_WILL_RESTART "設備將在幾分鐘內重啟"
+#define D_BUTTON_TOGGLE "狀態切換"
+#define D_CONFIGURATION "設置"
+#define D_INFORMATION "信息"
+#define D_FIRMWARE_UPGRADE "固件升級"
+#define D_CONSOLE "控制台"
+#define D_CONFIRM_RESTART "確認重啟"
+
+#define D_CONFIGURE_MODULE "模塊設置"
+#define D_CONFIGURE_WIFI "WiFi設置"
+#define D_CONFIGURE_MQTT "MQTT設置"
+#define D_CONFIGURE_DOMOTICZ "Domoticz設置"
+#define D_CONFIGURE_LOGGING "日志設置"
+#define D_CONFIGURE_OTHER "其他設置"
+#define D_CONFIRM_RESET_CONFIGURATION "確認重置配置"
+#define D_RESET_CONFIGURATION "重置配置"
+#define D_BACKUP_CONFIGURATION "備份配置"
+#define D_RESTORE_CONFIGURATION "還原配置"
+#define D_MAIN_MENU "主菜單"
+
+#define D_MODULE_PARAMETERS "模塊設置"
+#define D_MODULE_TYPE "模塊類型"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "串口輸入(RX)"
+#define D_SERIAL_OUT "串口輸出(TX)"
+
+#define D_WIFI_PARAMETERS "Wifi設置"
+#define D_SCAN_FOR_WIFI_NETWORKS "掃描無線網絡"
+#define D_SCAN_DONE "掃描完畢"
+#define D_NO_NETWORKS_FOUND "未找到任何網絡"
+#define D_REFRESH_TO_SCAN_AGAIN "刷新並重試"
+#define D_DUPLICATE_ACCESSPOINT "重覆AP"
+#define D_SKIPPING_LOW_QUALITY "忽略弱信號網絡"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 名稱"
+#define D_AP1_PASSWORD "AP1 密碼"
+#define D_AP2_SSID "AP2 名稱"
+#define D_AP2_PASSWORD "AP2 密碼"
+
+#define D_MQTT_PARAMETERS "MQTT設置"
+#define D_CLIENT "客戶端"
+#define D_FULL_TOPIC "完整主題"
+
+#define D_LOGGING_PARAMETERS "日志設置"
+#define D_SERIAL_LOG_LEVEL "串口日志級別"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web 日志級別"
+#define D_SYS_LOG_LEVEL "Syslog 日志級別"
+#define D_MORE_DEBUG "全部調試"
+#define D_SYSLOG_HOST "Syslog 主機地址"
+#define D_SYSLOG_PORT "Syslog 端口"
+#define D_TELEMETRY_PERIOD "上報周期"
+
+#define D_OTHER_PARAMETERS "其他設置"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "WEB管理密碼"
+#define D_MQTT_ENABLE "啟用MQTT"
+#define D_FRIENDLY_NAME "昵稱"
+#define D_BELKIN_WEMO "貝爾金 WeMo"
+#define D_HUE_BRIDGE "飛利浦 Hue 網橋"
+#define D_SINGLE_DEVICE "單設備"
+#define D_MULTI_DEVICE "多設備"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "保存設置"
+#define D_CONFIGURATION_SAVED "設置已保存"
+#define D_CONFIGURATION_RESET "設置已重置"
+
+#define D_PROGRAM_VERSION "固件版本"
+#define D_BUILD_DATE_AND_TIME "編譯時間"
+#define D_CORE_AND_SDK_VERSION "內核版本"
+#define D_FLASH_WRITE_COUNT "刷機次數"
+#define D_MAC_ADDRESS "MAC地址"
+#define D_MQTT_HOST "MQTT主機"
+#define D_MQTT_PORT "MQTT端口"
+#define D_MQTT_CLIENT "MQTT客戶端"
+#define D_MQTT_USER "MQTT用戶名"
+#define D_MQTT_TOPIC "MQTT 主題(Topic)"
+#define D_MQTT_GROUP_TOPIC "MQTT 主題組(Group Topic)"
+#define D_MQTT_FULL_TOPIC "MQTT 完整主題(Full Topic)"
+#define D_MDNS_DISCOVERY "mDNS 發現"
+#define D_MDNS_ADVERTISE "mDNS 廣播"
+#define D_ESP_CHIP_ID "ESP芯片ID"
+#define D_FLASH_CHIP_ID "Flash芯片ID"
+#define D_FLASH_CHIP_SIZE "Flash大小"
+#define D_FREE_PROGRAM_SPACE "空閑程序空間"
+
+#define D_UPGRADE_BY_WEBSERVER "通過Web升級"
+#define D_OTA_URL "OTA地址"
+#define D_START_UPGRADE "開始升級"
+#define D_UPGRADE_BY_FILE_UPLOAD "通過文件升級"
+#define D_UPLOAD_STARTED "開始上傳"
+#define D_UPGRADE_STARTED "開始升級"
+#define D_UPLOAD_DONE "上傳完成"
+#define D_UPLOAD_ERR_1 "沒有選擇文件"
+#define D_UPLOAD_ERR_2 "沒有足夠空間"
+#define D_UPLOAD_ERR_3 "固件頭不是 0xE9"
+#define D_UPLOAD_ERR_4 "固件太大"
+#define D_UPLOAD_ERR_5 "上傳緩沖區不匹配"
+#define D_UPLOAD_ERR_6 "上傳失敗。 啟用日志記錄 3"
+#define D_UPLOAD_ERR_7 "上傳取消"
+#define D_UPLOAD_ERR_8 "錯誤的固件"
+#define D_UPLOAD_ERR_9 "固件太大"
+#define D_UPLOAD_ERR_10 "Failed to init RF chip"
+#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
+#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
+#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERROR_CODE "上傳錯誤代碼"
+
+#define D_ENTER_COMMAND "輸入命令"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "如果預期響應,則啟用Weblog 2"
+#define D_NEED_USER_AND_PASSWORD "需要 user=<用戶名>&password=<密碼>"
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "驗證 TLS 指紋..."
+#define D_TLS_CONNECT_FAILED_TO "TLS 連接失敗"
+#define D_RETRY_IN "重試倒計時:"
+#define D_VERIFIED "驗證成功"
+#define D_INSECURE "指紋無效導致連接不安全"
+#define D_CONNECT_FAILED_TO "連接失敗:"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "組播已禁用"
+#define D_MULTICAST_REJOINED "組播已(重新)加入"
+#define D_MULTICAST_JOIN_FAILED "組播加入失敗"
+#define D_FAILED_TO_SEND_RESPONSE "請求發送失敗"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo 基礎事件"
+#define D_WEMO_EVENT_SERVICE "WeMo 事件服務"
+#define D_WEMO_META_SERVICE "WeMo meta 服務"
+#define D_WEMO_SETUP "WeMo 設置"
+#define D_RESPONSE_SENT "發送請求"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue 設置"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API 未實現"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST 參數"
+#define D_3_RESPONSE_PACKETS_SENT "3 請求包發送"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz 設置"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "開關 idx"
+#define D_DOMOTICZ_SENSOR_IDX "傳感器 idx"
+ #define D_DOMOTICZ_TEMP "溫度"
+ #define D_DOMOTICZ_TEMP_HUM "溫度,濕度"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "溫度,濕度,氣壓"
+ #define D_DOMOTICZ_POWER_ENERGY "功率,電量"
+ #define D_DOMOTICZ_ILLUMINANCE "照度"
+ #define D_DOMOTICZ_COUNT "數值/PM1"
+ #define D_DOMOTICZ_VOLTAGE "電壓/PM2.5"
+ #define D_DOMOTICZ_CURRENT "電流/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "空氣品質"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "更新計時器"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configure Timer"
+#define D_TIMER_PARAMETERS "Timer parameters"
+#define D_TIMER_ENABLE "Enable Timers"
+#define D_TIMER_ARM "Arm"
+#define D_TIMER_TIME "Time"
+#define D_TIMER_DAYS "Days"
+#define D_TIMER_REPEAT "Repeat"
+#define D_TIMER_OUTPUT "Output"
+#define D_TIMER_ACTION "Action"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configure KNX"
+#define D_KNX_PARAMETERS "KNX Parameters"
+#define D_KNX_GENERAL_CONFIG "General"
+#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
+#define D_KNX_ENABLE "Enable KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
+#define D_ADD "Add"
+#define D_DELETE "Delete"
+#define D_REPLY "Reply"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
+#define D_RECEIVED_FROM "Received from"
+#define D_KNX_COMMAND_WRITE "Write"
+#define D_KNX_COMMAND_READ "Read"
+#define D_KNX_COMMAND_OTHER "Other"
+#define D_SENT_TO "sent to"
+#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "今日用電量"
+#define D_ENERGY_YESTERDAY "昨日用電量"
+#define D_ENERGY_TOTAL "總用電量"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "傳感器正忙"
+#define D_SENSOR_CRC_ERROR "傳感器 CRC 校驗錯誤"
+#define D_SENSORS_FOUND "發現傳感器"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "等待超時"
+#define D_START_SIGNAL_LOW "開始低電平"
+#define D_START_SIGNAL_HIGH "開始高電平"
+#define D_PULSE "pulse"
+#define D_CHECKSUM_FAILURE "校驗失敗"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "傳感器沒有確認命令"
+#define D_SHT1X_FOUND "發現 SHT1X 傳感器"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "顆粒物直徑大於"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remove weigth"
+#define D_HX_CAL_REFERENCE "Load reference weigth"
+#define D_HX_CAL_DONE "Calibrated"
+#define D_HX_CAL_FAIL "Calibration failed"
+#define D_RESET_HX711 "Reset Scale"
+#define D_CONFIGURE_HX711 "Configure Scale"
+#define D_HX711_PARAMETERS "Scale parameters"
+#define D_ITEM_WEIGHT "Item weight"
+#define D_REFERENCE_WEIGHT "Reference weigth"
+#define D_CALIBRATE "Calibrate"
+#define D_CALIBRATION "Calibration"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Wind Direction"
+#define D_TX20_WIND_SPEED "Wind Speed"
+#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
+#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
+
+// Units
+#define D_UNIT_AMPERE "安"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "時"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "千歐"
+#define D_UNIT_KILOWATTHOUR "千瓦時"
+#define D_UNIT_LUX "勒克斯"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "微克/立方米"
+#define D_UNIT_MICROMETER "微米"
+#define D_UNIT_MICROSECOND "微秒"
+#define D_UNIT_MILLIAMPERE "毫安"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "毫秒"
+#define D_UNIT_MINUTE "分"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "每分升"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "百帕"
+#define D_UNIT_SECOND "秒"
+#define D_UNIT_SECTORS "扇區"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "伏"
+#define D_UNIT_WATT "瓦"
+#define D_UNIT_WATTHOUR "瓦時"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_ZH_TW_H_
From 4cb4aee86b95554eb53b6a659c93548205160779 Mon Sep 17 00:00:00 2001
From: ascillato
Date: Mon, 16 Dec 2019 23:09:34 -0300
Subject: [PATCH 080/559] Revert "Add GPS Support - Language Files"
This reverts commit b1e24bb9c37f94a6168c06ddf58eee6e54239e15.
---
tasmota/language/bg-BG.h | 1404 +++++++++++++++++++-------------------
tasmota/language/cs-CZ.h | 1404 +++++++++++++++++++-------------------
tasmota/language/de-DE.h | 1404 +++++++++++++++++++-------------------
tasmota/language/el-GR.h | 1404 +++++++++++++++++++-------------------
tasmota/language/en-GB.h | 1404 +++++++++++++++++++-------------------
tasmota/language/es-ES.h | 1404 +++++++++++++++++++-------------------
tasmota/language/fr-FR.h | 1404 +++++++++++++++++++-------------------
tasmota/language/he-HE.h | 1404 +++++++++++++++++++-------------------
tasmota/language/hu-HU.h | 1404 +++++++++++++++++++-------------------
tasmota/language/it-IT.h | 1404 +++++++++++++++++++-------------------
tasmota/language/ko-KO.h | 1404 +++++++++++++++++++-------------------
tasmota/language/nl-NL.h | 1404 +++++++++++++++++++-------------------
tasmota/language/pl-PL.h | 1404 +++++++++++++++++++-------------------
tasmota/language/pt-BR.h | 1404 +++++++++++++++++++-------------------
tasmota/language/pt-PT.h | 1404 +++++++++++++++++++-------------------
tasmota/language/ru-RU.h | 1404 +++++++++++++++++++-------------------
tasmota/language/sk-SK.h | 1404 +++++++++++++++++++-------------------
tasmota/language/sv-SE.h | 1404 +++++++++++++++++++-------------------
tasmota/language/tr-TR.h | 1404 +++++++++++++++++++-------------------
tasmota/language/uk-UK.h | 1404 +++++++++++++++++++-------------------
tasmota/language/zh-CN.h | 1404 +++++++++++++++++++-------------------
tasmota/language/zh-TW.h | 1404 +++++++++++++++++++-------------------
22 files changed, 15422 insertions(+), 15466 deletions(-)
diff --git a/tasmota/language/bg-BG.h b/tasmota/language/bg-BG.h
index ffb5bc3ec..1f18d8efb 100644
--- a/tasmota/language/bg-BG.h
+++ b/tasmota/language/bg-BG.h
@@ -1,703 +1,701 @@
-/*
- bg-BG.h - localization for Bulgaria - Bulgarian for Tasmota
-
- Copyright (C) 2019 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 .
-*/
-
-#ifndef _LANGUAGE_BG_BG_H_
-#define _LANGUAGE_BG_BG_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v7.1.2.4
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1026
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "bg"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "НедПонВтрСрдЧетПетСъб"
-#define D_MONTH3LIST "ЯнуФевМарАпрМайЮниЮлиАвгСепОктНоеДек"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Качество на въздуха"
-#define D_AP "Точка за достъп" // Access Point
-#define D_AS "като"
-#define D_AUTO "АВТОМАТИЧНО"
-#define D_BLINK "Мигане вкл."
-#define D_BLINKOFF "Мигане изкл."
-#define D_BOOT_COUNT "Брой на стартиранията"
-#define D_BRIGHTLIGHT "Яркост"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Бутон"
-#define D_BY "от" // Written by me
-#define D_BYTES "Байта"
-#define D_CELSIUS "Целзий"
-#define D_CHANNEL "Канал"
-#define D_CO2 "Въглероден диоксид"
-#define D_CODE "код" // Button code
-#define D_COLDLIGHT "Хладна"
-#define D_COMMAND "Команда"
-#define D_CONNECTED "Свързан"
-#define D_CORS_DOMAIN "CORS домейн"
-#define D_COUNT "Брой"
-#define D_COUNTER "Брояч"
-#define D_CURRENT "Ток" // As in Voltage and Current
-#define D_DATA "Данни"
-#define D_DARKLIGHT "Тъмна"
-#define D_DEBUG "Дебъгване"
-#define D_DISABLED "Забранен"
-#define D_DISTANCE "Разстояние"
-#define D_DNS_SERVER "DNS Сървър"
-#define D_DONE "Изпълнено"
-#define D_DST_TIME "Лятно време"
-#define D_ECO2 "eCO₂"
-#define D_EMULATION "Емулация"
-#define D_ENABLED "Разрешен"
-#define D_ERASE "Изтриване"
-#define D_ERROR "Грешка"
-#define D_FAHRENHEIT "Фаренхайт"
-#define D_FAILED "Неуспешно"
-#define D_FALLBACK "Помощен"
-#define D_FALLBACK_TOPIC "Помощен топик"
-#define D_FALSE "Невярно"
-#define D_FILE "Файл"
-#define D_FLOW_RATE "Дебит"
-#define D_FREE_MEMORY "Свободна памет"
-#define D_FREQUENCY "Честота"
-#define D_GAS "Газ"
-#define D_GATEWAY "Шлюз"
-#define D_GROUP "Група"
-#define D_HOST "Хост"
-#define D_HOSTNAME "Име на хоста"
-#define D_HUMIDITY "Влажност"
-#define D_ILLUMINANCE "Осветеност"
-#define D_IMMEDIATE "Моментен" // Button immediate
-#define D_INDEX "Индекс"
-#define D_INFO "Информация"
-#define D_INFRARED "Инфрачервен"
-#define D_INITIALIZED "Инициализирано"
-#define D_IP_ADDRESS "IP адрес"
-#define D_LIGHT "Светлина"
-#define D_LWT "LWT"
-#define D_MODULE "Модул"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "неколкократно натискане"
-#define D_NOISE "Шум"
-#define D_NONE "Няма"
-#define D_OFF "Изкл."
-#define D_OFFLINE "Офлайн"
-#define D_OK "Ок"
-#define D_ON "Вкл."
-#define D_ONLINE "Онлайн"
-#define D_PASSWORD "Парола"
-#define D_PORT "Порт"
-#define D_POWER_FACTOR "Фактор на мощността"
-#define D_POWERUSAGE "Мощност"
-#define D_POWERUSAGE_ACTIVE "Активна мощност"
-#define D_POWERUSAGE_APPARENT "Пълна мощност"
-#define D_POWERUSAGE_REACTIVE "Реактивна мощност"
-#define D_PRESSURE "Налягане"
-#define D_PRESSUREATSEALEVEL "Налягане при морското ниво"
-#define D_PROGRAM_FLASH_SIZE "Размер на флаш паметта за програми"
-#define D_PROGRAM_SIZE "Размер на програмата"
-#define D_PROJECT "Проект"
-#define D_RAIN "Дъжд"
-#define D_RECEIVED "Получено"
-#define D_RESTART "Рестарт"
-#define D_RESTARTING "Рестартиране"
-#define D_RESTART_REASON "Причина за рестарта"
-#define D_RESTORE "възстановяване"
-#define D_RETAINED "запазено"
-#define D_RULE "Правило"
-#define D_SAVE "Запис"
-#define D_SENSOR "Датчик"
-#define D_SSID "SSId"
-#define D_START "Старт"
-#define D_STD_TIME "STD"
-#define D_STOP "Стоп"
-#define D_SUBNET_MASK "Маска на подмрежата"
-#define D_SUBSCRIBE_TO "Записване за"
-#define D_UNSUBSCRIBE_FROM "Отписване от"
-#define D_SUCCESSFUL "Успешно"
-#define D_SUNRISE "Изгрев"
-#define D_SUNSET "Залез"
-#define D_TEMPERATURE "Температура"
-#define D_TO "към"
-#define D_TOGGLE "Превключване"
-#define D_TOPIC "Топик"
-#define D_TOTAL_USAGE "Използвана вода"
-#define D_TRANSMIT "Предаване"
-#define D_TRUE "Вярно"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "Обновяване"
-#define D_UPLOAD "Зареждане"
-#define D_UPTIME "Време от стартирането"
-#define D_USER "Потребител"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV индекс"
-#define D_UV_INDEX_1 "Нисък"
-#define D_UV_INDEX_2 "Среден"
-#define D_UV_INDEX_3 "Висок"
-#define D_UV_INDEX_4 "Много висок"
-#define D_UV_INDEX_5 "Изгаряне 1/2 степен"
-#define D_UV_INDEX_6 "Изгаряне 3-та степен"
-#define D_UV_INDEX_7 "Извън обхват"
-#define D_UV_LEVEL "UV ниво"
-#define D_UV_POWER "UV мощност"
-#define D_VERSION "Версия"
-#define D_VOLTAGE "Напрежение"
-#define D_WEIGHT "Тегло"
-#define D_WARMLIGHT "Топла"
-#define D_WEB_SERVER "Уеб сървър"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ПРЕДУПРЕЖДЕНИЕ Тази версия не поддържа постоянни настройки"
-#define D_LEVEL_10 "ниво 1-0"
-#define D_LEVEL_01 "ниво 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Серийният лог изключен"
-#define D_SYSLOG_LOGGING_REENABLED "Системният лог активиран"
-
-#define D_SET_BAUDRATE_TO "Задаване скорост на предаване (Baudrate)"
-#define D_RECEIVED_TOPIC "Получен топик"
-#define D_DATA_SIZE "Размер на данните"
-#define D_ANALOG_INPUT "Аналогов вход"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Блокиран цикъл"
-#define D_WPS_FAILED_WITH_STATUS "WPS конфигурацията е НЕУСПЕШНА със статус"
-#define D_ACTIVE_FOR_3_MINUTES "активно в течение на 3 минути"
-#define D_FAILED_TO_START "Неуспешно стартиране"
-#define D_PATCH_ISSUE_2186 "Проблем с патч 2186"
-#define D_CONNECTING_TO_AP "Свързване към точка за достъп"
-#define D_IN_MODE "в режим"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Грешка при свързването, не е получен IP адрес"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Грешка при свързването, точката за достъп е недостижима"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Грешка при свързването, грешна парола към точката за достъп"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Грешка при свързването, превишено време за изчакване"
-#define D_ATTEMPTING_CONNECTION "Опитва свързване..."
-#define D_CHECKING_CONNECTION "Проверка на свързването..."
-#define D_QUERY_DONE "Запитването е изпълнено. Намерена е услуга MQTT"
-#define D_MQTT_SERVICE_FOUND "MQTT услуга е намерена на"
-#define D_FOUND_AT "намерена в"
-#define D_SYSLOG_HOST_NOT_FOUND "Хостът на системния лог не е намерен"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Запазено във флаш паметта на"
-#define D_LOADED_FROM_FLASH_AT "Заредено от флаш паметта от"
-#define D_USE_DEFAULTS "Използване на параметри по подразбиране"
-#define D_ERASED_SECTOR "Изтрит сектор"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Разрешете JavaScript, за да използвате Tasmota"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Минимален фърмуер
моля надградете го"
-#define D_WEBSERVER_ACTIVE_ON "Уеб сървърът е активен на"
-#define D_WITH_IP_ADDRESS "с IP адрес"
-#define D_WEBSERVER_STOPPED "Уеб сървърът е спрян"
-#define D_FILE_NOT_FOUND "Файлът не е намерен"
-#define D_REDIRECTED "Пренасочено към адаптивния портал"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi мениджърът настройва точка за достъп и запомня станцията"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi мениджърът настрои точката за достъп"
-#define D_TRYING_TO_CONNECT "Опит за свързване на устройството към мрежата"
-
-#define D_RESTART_IN "Рестарт след"
-#define D_SECONDS "секунди"
-#define D_DEVICE_WILL_RESTART "Устройството ще се рестартира след няколко секунди"
-#define D_BUTTON_TOGGLE "Превключване"
-#define D_CONFIGURATION "Конфигурация"
-#define D_INFORMATION "Информация"
-#define D_FIRMWARE_UPGRADE "Обновяване на фърмуера"
-#define D_CONSOLE "Конзола"
-#define D_CONFIRM_RESTART "Потвърдете рестартирането"
-
-#define D_CONFIGURE_MODULE "Конфигурация на модула"
-#define D_CONFIGURE_WIFI "Конфигурация на WiFi"
-#define D_CONFIGURE_MQTT "Конфигурация на MQTT"
-#define D_CONFIGURE_DOMOTICZ "Конфигурация на Domoticz"
-#define D_CONFIGURE_LOGGING "Конфигурация на лога"
-#define D_CONFIGURE_OTHER "Други конфигурации"
-#define D_CONFIRM_RESET_CONFIGURATION "Потвърдете изчистването"
-#define D_RESET_CONFIGURATION "Изчистване на конфигурацията"
-#define D_BACKUP_CONFIGURATION "Запазване на конфигурацията"
-#define D_RESTORE_CONFIGURATION "Възстановяване на конфигурацията"
-#define D_MAIN_MENU "Основно меню"
-
-#define D_MODULE_PARAMETERS "Параметри на модула"
-#define D_MODULE_TYPE "Тип на модула"
-#define D_PULLUP_ENABLE "Без pull-up за бутон/ключ"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Сериен вход"
-#define D_SERIAL_OUT "Сериен изход"
-
-#define D_WIFI_PARAMETERS "Wifi параметри"
-#define D_SCAN_FOR_WIFI_NETWORKS "Сканиране за безжични мрежи"
-#define D_SCAN_DONE "Сканирането приключи"
-#define D_NO_NETWORKS_FOUND "Не бяха открити мрежи"
-#define D_REFRESH_TO_SCAN_AGAIN "Обновяване за повторно сканиране"
-#define D_DUPLICATE_ACCESSPOINT "Дублиране на точката за достъп (AP)"
-#define D_SKIPPING_LOW_QUALITY "Пропускане поради лошо качество"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Парола"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Парола"
-
-#define D_MQTT_PARAMETERS "Параметри на MQTT"
-#define D_CLIENT "Клиент"
-#define D_FULL_TOPIC "Пълен топик"
-
-#define D_LOGGING_PARAMETERS "Параметри на лога"
-#define D_SERIAL_LOG_LEVEL "Степен на серийния лог"
-#define D_MQTT_LOG_LEVEL "Степен на MQTT лога"
-#define D_WEB_LOG_LEVEL "Степен на уеб лога"
-#define D_SYS_LOG_LEVEL "Степен на системния лог"
-#define D_MORE_DEBUG "Допълнителна debug информация"
-#define D_SYSLOG_HOST "Хост на системния лог"
-#define D_SYSLOG_PORT "Порт на системния лог"
-#define D_TELEMETRY_PERIOD "Период на телеметрия"
-
-#define D_OTHER_PARAMETERS "Други параметри"
-#define D_TEMPLATE "Модел"
-#define D_ACTIVATE "Активирай"
-#define D_WEB_ADMIN_PASSWORD "Парола на уеб администратора"
-#define D_MQTT_ENABLE "Активиране на MQTT"
-#define D_FRIENDLY_NAME "Приятелско име"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "Единично"
-#define D_MULTI_DEVICE "Мулти"
-
-#define D_CONFIGURE_TEMPLATE "Конфигуриране на шаблон"
-#define D_TEMPLATE_PARAMETERS "Параметри на шаблона"
-#define D_TEMPLATE_NAME "Име"
-#define D_BASE_TYPE "Базиран на"
-#define D_TEMPLATE_FLAGS "Опции"
-
-#define D_SAVE_CONFIGURATION "Запазване на конфигурацията"
-#define D_CONFIGURATION_SAVED "Конфигурацията е запазена"
-#define D_CONFIGURATION_RESET "Конфигурацията е изчистена"
-
-#define D_PROGRAM_VERSION "Версия на програмата"
-#define D_BUILD_DATE_AND_TIME "Дата и час на компилацията"
-#define D_CORE_AND_SDK_VERSION "Версия на Core/SDK"
-#define D_FLASH_WRITE_COUNT "Брой на записите във флаш паметта"
-#define D_MAC_ADDRESS "MAC адрес"
-#define D_MQTT_HOST "MQTT хост"
-#define D_MQTT_PORT "MQTT порт"
-#define D_MQTT_CLIENT "MQTT ID на клиент"
-#define D_MQTT_USER "MQTT потребител"
-#define D_MQTT_TOPIC "MQTT топик"
-#define D_MQTT_GROUP_TOPIC "MQTT групов топик"
-#define D_MQTT_FULL_TOPIC "MQTT пълен топик"
-#define D_MDNS_DISCOVERY "mDNS откриване"
-#define D_MDNS_ADVERTISE "mDNS известяване"
-#define D_ESP_CHIP_ID "ID на ESP чипа"
-#define D_FLASH_CHIP_ID "ID на чипа на флаш паметта"
-#define D_FLASH_CHIP_SIZE "Размер на флаш паметта"
-#define D_FREE_PROGRAM_SPACE "Свободно пространство за програми"
-
-#define D_UPGRADE_BY_WEBSERVER "Обновяване чрез уеб сървър"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Започване на обновяване"
-#define D_UPGRADE_BY_FILE_UPLOAD "Обновяване чрез зареждане на файл"
-#define D_UPLOAD_STARTED "Зареждането започна"
-#define D_UPGRADE_STARTED "Обновяването започна"
-#define D_UPLOAD_DONE "Зареждането завърши"
-#define D_UPLOAD_ERR_1 "Не е избран файл"
-#define D_UPLOAD_ERR_2 "Недостатъчно свободно място"
-#define D_UPLOAD_ERR_3 "Magic байтът не е 0xE9"
-#define D_UPLOAD_ERR_4 "Размерът на програмата е по-голям от реалния размер на флаш паметта"
-#define D_UPLOAD_ERR_5 "Грешка при зареждането в буфера"
-#define D_UPLOAD_ERR_6 "Грешка при зареждането. Включено е ниво 3 на лога"
-#define D_UPLOAD_ERR_7 "Зареждането е прекъснато"
-#define D_UPLOAD_ERR_8 "Файлът е невалиден"
-#define D_UPLOAD_ERR_9 "Файлът е прекалено голям"
-#define D_UPLOAD_ERR_10 "Грешка при инициализация на RF чипа"
-#define D_UPLOAD_ERR_11 "Грешка при изтриване на RF чипа"
-#define D_UPLOAD_ERR_12 "Грешка при записване в RF чипа"
-#define D_UPLOAD_ERR_13 "Грешка при декодиране на RF фърмуера"
-#define D_UPLOAD_ERROR_CODE "Код на грешка при зареждането"
-
-#define D_ENTER_COMMAND "Въвеждане на команда"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Включете ниво 2 на лога, ако очаквате отговор"
-#define D_NEED_USER_AND_PASSWORD "Очаква user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Проверка на TLS отпечатък..."
-#define D_TLS_CONNECT_FAILED_TO "Неуспешно TLS свързване към"
-#define D_RETRY_IN "Повтори след"
-#define D_VERIFIED "Проверен отпечтък"
-#define D_INSECURE "Нешифрована връзка, недействителен отпечатък"
-#define D_CONNECT_FAILED_TO "Грешка при свързването към"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast е изключен"
-#define D_MULTICAST_REJOINED "Multicast е повторно съединен"
-#define D_MULTICAST_JOIN_FAILED "Multicast грешка при присъединяването"
-#define D_FAILED_TO_SEND_RESPONSE "Неуспех при изпращането на отговор"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo главно събитие"
-#define D_WEMO_EVENT_SERVICE "WeMo услуга за събитията"
-#define D_WEMO_META_SERVICE "WeMo мета-услуга"
-#define D_WEMO_SETUP "WeMo настройка"
-#define D_RESPONSE_SENT "Отговорът е изпратен"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Настройка на Hue bridge"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API не е внедрен"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST аргументи"
-#define D_3_RESPONSE_PACKETS_SENT "Изпратени са 3 пакета за отговор"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz параметри"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Мощност,Енергия"
- #define D_DOMOTICZ_ILLUMINANCE "Осветеност"
- #define D_DOMOTICZ_COUNT "Брояч/PM1"
- #define D_DOMOTICZ_VOLTAGE "Напрежение/PM2,5"
- #define D_DOMOTICZ_CURRENT "Ток/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Качество на въздуха"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Период на опресняване"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Конфигуриране на таймер"
-#define D_TIMER_PARAMETERS "Параметри на таймера"
-#define D_TIMER_ENABLE "Активиране на таймера"
-#define D_TIMER_ARM "Активиран"
-#define D_TIMER_TIME "Време"
-#define D_TIMER_DAYS "Дни"
-#define D_TIMER_REPEAT "Повтори"
-#define D_TIMER_OUTPUT "Изход"
-#define D_TIMER_ACTION "Действие"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Конфигуриране на KNX"
-#define D_KNX_PARAMETERS "KNX параметри"
-#define D_KNX_GENERAL_CONFIG "Основни"
-#define D_KNX_PHYSICAL_ADDRESS "Физически адрес"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Трябва да е уникален в KNX мрежата )"
-#define D_KNX_ENABLE "Активиране на KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Групови адреси за изпращане на данни"
-#define D_ADD "Добаване"
-#define D_DELETE "Изтриване"
-#define D_REPLY "Отговор"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Групови адреси за получаване на данни"
-#define D_RECEIVED_FROM "Получен от"
-#define D_KNX_COMMAND_WRITE "Писане"
-#define D_KNX_COMMAND_READ "Четене"
-#define D_KNX_COMMAND_OTHER "Друго"
-#define D_SENT_TO "изпратен до"
-#define D_KNX_WARNING "Груповият адрес (0/0/0) е резервиран и не може да бъде използван."
-#define D_KNX_ENHANCEMENT "Подобрена комуникация"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Използвана енергия днес"
-#define D_ENERGY_YESTERDAY "Използвана енергия вчера"
-#define D_ENERGY_TOTAL "Използвана енергия общо"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Отворена"
-#define D_CLOSE "Затворена"
-#define D_DOMOTICZ_SHUTTER "Щора"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Конфигуриране на PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 параметри"
-#define D_INVERT_PORTS "Обърни портовете"
-#define D_DEVICE "Устройство"
-#define D_DEVICE_INPUT "Вход"
-#define D_DEVICE_OUTPUT "Изход"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Датчикът DS18x20 е зает"
-#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - грешка CRC"
-#define D_SENSORS_FOUND "Намерен е датчик DS18x20"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Изтекло време за очакване на"
-#define D_START_SIGNAL_LOW "Нисък стартов сигнал"
-#define D_START_SIGNAL_HIGH "Висок стартов сигнал"
-#define D_PULSE "Импулс"
-#define D_CHECKSUM_FAILURE "Грешка в контролната сума"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчикът не прие команда ACK"
-#define D_SHT1X_FOUND "Намерен е SHT1X"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Частици"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Ускорение - ос X"
-#define D_AY_AXIS "Ускорение - ос Y"
-#define D_AZ_AXIS "Ускорение - ос Z"
-#define D_GX_AXIS "Жироскоп - ос X"
-#define D_GY_AXIS "Жироскоп - ос Y"
-#define D_GZ_AXIS "Жироскоп - ос Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Премахване на тегло"
-#define D_HX_CAL_REFERENCE "Зареждане на референтно тегло"
-#define D_HX_CAL_DONE "Калибриран"
-#define D_HX_CAL_FAIL "Неуспешно калибриране"
-#define D_RESET_HX711 "Нулиране на кантара"
-#define D_CONFIGURE_HX711 "Конфигуриране на кантара"
-#define D_HX711_PARAMETERS "Параметри на кантара"
-#define D_ITEM_WEIGHT "Тегло"
-#define D_REFERENCE_WEIGHT "Референтно тегло"
-#define D_CALIBRATE "Калибриране"
-#define D_CALIBRATION "Калибровка"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Посока на вятъра"
-#define D_TX20_WIND_SPEED "Скорост на вятъра"
-#define D_TX20_WIND_SPEED_AVG "Средна скорост на вятъра"
-#define D_TX20_WIND_SPEED_MAX "Макс. скорост на вятъра"
-#define D_TX20_NORTH "С"
-#define D_TX20_EAST "И"
-#define D_TX20_SOUTH "Ю"
-#define D_TX20_WEST "З"
-
-// 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 "Потребит."
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 плейър"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Ключ" // Suffix "1"
-#define D_SENSOR_BUTTON "Бутон" // Suffix "1"
-#define D_SENSOR_RELAY "Реле" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Брояч" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Подсветка"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF датчик"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "h"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "gal/min"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h"
-#define D_UNIT_KILOOHM "kΩ"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
-#define D_UNIT_MICROMETER "µm"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "s"
-#define D_UNIT_SECTORS "сектори"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Фазов ъгъл"
-#define D_IMPORT_ACTIVE "Входна активна мощност"
-#define D_EXPORT_ACTIVE "Изходна активна мощност"
-#define D_IMPORT_REACTIVE "Входна реактивна мощност"
-#define D_EXPORT_REACTIVE "Изходна реактивна мощност"
-#define D_TOTAL_REACTIVE "Общо реактивна мощност"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "°"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "Напрежение на PV1"
-#define D_PV1_CURRENT "Ток на PV1"
-#define D_PV1_POWER "Мощност на PV1"
-#define D_PV2_VOLTAGE "Напрежение на PV2"
-#define D_PV2_CURRENT "Ток на PV2"
-#define D_PV2_POWER "Мощност на PV2"
-#define D_SOLAR_POWER "Слънчева мощност"
-#define D_INVERTER_POWER "Мощност на инвертера"
-#define D_STATUS "Състояние"
-#define D_WAITING "Очакване"
-#define D_CHECKING "Проверка"
-#define D_WORKING "Работи"
-#define D_FAILURE "Грешка"
-#define D_SOLAX_ERROR_0 "Грешка - няма код"
-#define D_SOLAX_ERROR_1 "Грешка - загуба на мрежата"
-#define D_SOLAX_ERROR_2 "Грешка - мрежово напрежение"
-#define D_SOLAX_ERROR_3 "Грешка - мрежова честота"
-#define D_SOLAX_ERROR_4 "Грешка - напрежение на Pv"
-#define D_SOLAX_ERROR_5 "Грешка - проблем с изолацията"
-#define D_SOLAX_ERROR_6 "Грешка - прегряване"
-#define D_SOLAX_ERROR_7 "Грешка - вентилатор"
-#define D_SOLAX_ERROR_8 "Грешка - друго оборудване"
-
-#endif // _LANGUAGE_BG_BG_H_
+/*
+ bg-BG.h - localization for Bulgaria - Bulgarian for Tasmota
+
+ Copyright (C) 2019 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 .
+*/
+
+#ifndef _LANGUAGE_BG_BG_H_
+#define _LANGUAGE_BG_BG_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v7.1.2.4
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1026
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "bg"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "НедПонВтрСрдЧетПетСъб"
+#define D_MONTH3LIST "ЯнуФевМарАпрМайЮниЮлиАвгСепОктНоеДек"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Качество на въздуха"
+#define D_AP "Точка за достъп" // Access Point
+#define D_AS "като"
+#define D_AUTO "АВТОМАТИЧНО"
+#define D_BLINK "Мигане вкл."
+#define D_BLINKOFF "Мигане изкл."
+#define D_BOOT_COUNT "Брой на стартиранията"
+#define D_BRIGHTLIGHT "Яркост"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Бутон"
+#define D_BY "от" // Written by me
+#define D_BYTES "Байта"
+#define D_CELSIUS "Целзий"
+#define D_CHANNEL "Канал"
+#define D_CO2 "Въглероден диоксид"
+#define D_CODE "код" // Button code
+#define D_COLDLIGHT "Хладна"
+#define D_COMMAND "Команда"
+#define D_CONNECTED "Свързан"
+#define D_CORS_DOMAIN "CORS домейн"
+#define D_COUNT "Брой"
+#define D_COUNTER "Брояч"
+#define D_CURRENT "Ток" // As in Voltage and Current
+#define D_DATA "Данни"
+#define D_DARKLIGHT "Тъмна"
+#define D_DEBUG "Дебъгване"
+#define D_DISABLED "Забранен"
+#define D_DISTANCE "Разстояние"
+#define D_DNS_SERVER "DNS Сървър"
+#define D_DONE "Изпълнено"
+#define D_DST_TIME "Лятно време"
+#define D_ECO2 "eCO₂"
+#define D_EMULATION "Емулация"
+#define D_ENABLED "Разрешен"
+#define D_ERASE "Изтриване"
+#define D_ERROR "Грешка"
+#define D_FAHRENHEIT "Фаренхайт"
+#define D_FAILED "Неуспешно"
+#define D_FALLBACK "Помощен"
+#define D_FALLBACK_TOPIC "Помощен топик"
+#define D_FALSE "Невярно"
+#define D_FILE "Файл"
+#define D_FLOW_RATE "Дебит"
+#define D_FREE_MEMORY "Свободна памет"
+#define D_FREQUENCY "Честота"
+#define D_GAS "Газ"
+#define D_GATEWAY "Шлюз"
+#define D_GROUP "Група"
+#define D_HOST "Хост"
+#define D_HOSTNAME "Име на хоста"
+#define D_HUMIDITY "Влажност"
+#define D_ILLUMINANCE "Осветеност"
+#define D_IMMEDIATE "Моментен" // Button immediate
+#define D_INDEX "Индекс"
+#define D_INFO "Информация"
+#define D_INFRARED "Инфрачервен"
+#define D_INITIALIZED "Инициализирано"
+#define D_IP_ADDRESS "IP адрес"
+#define D_LIGHT "Светлина"
+#define D_LWT "LWT"
+#define D_MODULE "Модул"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "неколкократно натискане"
+#define D_NOISE "Шум"
+#define D_NONE "Няма"
+#define D_OFF "Изкл."
+#define D_OFFLINE "Офлайн"
+#define D_OK "Ок"
+#define D_ON "Вкл."
+#define D_ONLINE "Онлайн"
+#define D_PASSWORD "Парола"
+#define D_PORT "Порт"
+#define D_POWER_FACTOR "Фактор на мощността"
+#define D_POWERUSAGE "Мощност"
+#define D_POWERUSAGE_ACTIVE "Активна мощност"
+#define D_POWERUSAGE_APPARENT "Пълна мощност"
+#define D_POWERUSAGE_REACTIVE "Реактивна мощност"
+#define D_PRESSURE "Налягане"
+#define D_PRESSUREATSEALEVEL "Налягане при морското ниво"
+#define D_PROGRAM_FLASH_SIZE "Размер на флаш паметта за програми"
+#define D_PROGRAM_SIZE "Размер на програмата"
+#define D_PROJECT "Проект"
+#define D_RAIN "Дъжд"
+#define D_RECEIVED "Получено"
+#define D_RESTART "Рестарт"
+#define D_RESTARTING "Рестартиране"
+#define D_RESTART_REASON "Причина за рестарта"
+#define D_RESTORE "възстановяване"
+#define D_RETAINED "запазено"
+#define D_RULE "Правило"
+#define D_SAVE "Запис"
+#define D_SENSOR "Датчик"
+#define D_SSID "SSId"
+#define D_START "Старт"
+#define D_STD_TIME "STD"
+#define D_STOP "Стоп"
+#define D_SUBNET_MASK "Маска на подмрежата"
+#define D_SUBSCRIBE_TO "Записване за"
+#define D_UNSUBSCRIBE_FROM "Отписване от"
+#define D_SUCCESSFUL "Успешно"
+#define D_SUNRISE "Изгрев"
+#define D_SUNSET "Залез"
+#define D_TEMPERATURE "Температура"
+#define D_TO "към"
+#define D_TOGGLE "Превключване"
+#define D_TOPIC "Топик"
+#define D_TOTAL_USAGE "Използвана вода"
+#define D_TRANSMIT "Предаване"
+#define D_TRUE "Вярно"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "Обновяване"
+#define D_UPLOAD "Зареждане"
+#define D_UPTIME "Време от стартирането"
+#define D_USER "Потребител"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV индекс"
+#define D_UV_INDEX_1 "Нисък"
+#define D_UV_INDEX_2 "Среден"
+#define D_UV_INDEX_3 "Висок"
+#define D_UV_INDEX_4 "Много висок"
+#define D_UV_INDEX_5 "Изгаряне 1/2 степен"
+#define D_UV_INDEX_6 "Изгаряне 3-та степен"
+#define D_UV_INDEX_7 "Извън обхват"
+#define D_UV_LEVEL "UV ниво"
+#define D_UV_POWER "UV мощност"
+#define D_VERSION "Версия"
+#define D_VOLTAGE "Напрежение"
+#define D_WEIGHT "Тегло"
+#define D_WARMLIGHT "Топла"
+#define D_WEB_SERVER "Уеб сървър"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ПРЕДУПРЕЖДЕНИЕ Тази версия не поддържа постоянни настройки"
+#define D_LEVEL_10 "ниво 1-0"
+#define D_LEVEL_01 "ниво 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Серийният лог изключен"
+#define D_SYSLOG_LOGGING_REENABLED "Системният лог активиран"
+
+#define D_SET_BAUDRATE_TO "Задаване скорост на предаване (Baudrate)"
+#define D_RECEIVED_TOPIC "Получен топик"
+#define D_DATA_SIZE "Размер на данните"
+#define D_ANALOG_INPUT "Аналогов вход"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Блокиран цикъл"
+#define D_WPS_FAILED_WITH_STATUS "WPS конфигурацията е НЕУСПЕШНА със статус"
+#define D_ACTIVE_FOR_3_MINUTES "активно в течение на 3 минути"
+#define D_FAILED_TO_START "Неуспешно стартиране"
+#define D_PATCH_ISSUE_2186 "Проблем с патч 2186"
+#define D_CONNECTING_TO_AP "Свързване към точка за достъп"
+#define D_IN_MODE "в режим"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Грешка при свързването, не е получен IP адрес"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Грешка при свързването, точката за достъп е недостижима"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Грешка при свързването, грешна парола към точката за достъп"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Грешка при свързването, превишено време за изчакване"
+#define D_ATTEMPTING_CONNECTION "Опитва свързване..."
+#define D_CHECKING_CONNECTION "Проверка на свързването..."
+#define D_QUERY_DONE "Запитването е изпълнено. Намерена е услуга MQTT"
+#define D_MQTT_SERVICE_FOUND "MQTT услуга е намерена на"
+#define D_FOUND_AT "намерена в"
+#define D_SYSLOG_HOST_NOT_FOUND "Хостът на системния лог не е намерен"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Запазено във флаш паметта на"
+#define D_LOADED_FROM_FLASH_AT "Заредено от флаш паметта от"
+#define D_USE_DEFAULTS "Използване на параметри по подразбиране"
+#define D_ERASED_SECTOR "Изтрит сектор"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Разрешете JavaScript, за да използвате Tasmota"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Минимален фърмуер
моля надградете го"
+#define D_WEBSERVER_ACTIVE_ON "Уеб сървърът е активен на"
+#define D_WITH_IP_ADDRESS "с IP адрес"
+#define D_WEBSERVER_STOPPED "Уеб сървърът е спрян"
+#define D_FILE_NOT_FOUND "Файлът не е намерен"
+#define D_REDIRECTED "Пренасочено към адаптивния портал"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi мениджърът настройва точка за достъп и запомня станцията"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi мениджърът настрои точката за достъп"
+#define D_TRYING_TO_CONNECT "Опит за свързване на устройството към мрежата"
+
+#define D_RESTART_IN "Рестарт след"
+#define D_SECONDS "секунди"
+#define D_DEVICE_WILL_RESTART "Устройството ще се рестартира след няколко секунди"
+#define D_BUTTON_TOGGLE "Превключване"
+#define D_CONFIGURATION "Конфигурация"
+#define D_INFORMATION "Информация"
+#define D_FIRMWARE_UPGRADE "Обновяване на фърмуера"
+#define D_CONSOLE "Конзола"
+#define D_CONFIRM_RESTART "Потвърдете рестартирането"
+
+#define D_CONFIGURE_MODULE "Конфигурация на модула"
+#define D_CONFIGURE_WIFI "Конфигурация на WiFi"
+#define D_CONFIGURE_MQTT "Конфигурация на MQTT"
+#define D_CONFIGURE_DOMOTICZ "Конфигурация на Domoticz"
+#define D_CONFIGURE_LOGGING "Конфигурация на лога"
+#define D_CONFIGURE_OTHER "Други конфигурации"
+#define D_CONFIRM_RESET_CONFIGURATION "Потвърдете изчистването"
+#define D_RESET_CONFIGURATION "Изчистване на конфигурацията"
+#define D_BACKUP_CONFIGURATION "Запазване на конфигурацията"
+#define D_RESTORE_CONFIGURATION "Възстановяване на конфигурацията"
+#define D_MAIN_MENU "Основно меню"
+
+#define D_MODULE_PARAMETERS "Параметри на модула"
+#define D_MODULE_TYPE "Тип на модула"
+#define D_PULLUP_ENABLE "Без pull-up за бутон/ключ"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Сериен вход"
+#define D_SERIAL_OUT "Сериен изход"
+
+#define D_WIFI_PARAMETERS "Wifi параметри"
+#define D_SCAN_FOR_WIFI_NETWORKS "Сканиране за безжични мрежи"
+#define D_SCAN_DONE "Сканирането приключи"
+#define D_NO_NETWORKS_FOUND "Не бяха открити мрежи"
+#define D_REFRESH_TO_SCAN_AGAIN "Обновяване за повторно сканиране"
+#define D_DUPLICATE_ACCESSPOINT "Дублиране на точката за достъп (AP)"
+#define D_SKIPPING_LOW_QUALITY "Пропускане поради лошо качество"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Парола"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Парола"
+
+#define D_MQTT_PARAMETERS "Параметри на MQTT"
+#define D_CLIENT "Клиент"
+#define D_FULL_TOPIC "Пълен топик"
+
+#define D_LOGGING_PARAMETERS "Параметри на лога"
+#define D_SERIAL_LOG_LEVEL "Степен на серийния лог"
+#define D_MQTT_LOG_LEVEL "Степен на MQTT лога"
+#define D_WEB_LOG_LEVEL "Степен на уеб лога"
+#define D_SYS_LOG_LEVEL "Степен на системния лог"
+#define D_MORE_DEBUG "Допълнителна debug информация"
+#define D_SYSLOG_HOST "Хост на системния лог"
+#define D_SYSLOG_PORT "Порт на системния лог"
+#define D_TELEMETRY_PERIOD "Период на телеметрия"
+
+#define D_OTHER_PARAMETERS "Други параметри"
+#define D_TEMPLATE "Модел"
+#define D_ACTIVATE "Активирай"
+#define D_WEB_ADMIN_PASSWORD "Парола на уеб администратора"
+#define D_MQTT_ENABLE "Активиране на MQTT"
+#define D_FRIENDLY_NAME "Приятелско име"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "Единично"
+#define D_MULTI_DEVICE "Мулти"
+
+#define D_CONFIGURE_TEMPLATE "Конфигуриране на шаблон"
+#define D_TEMPLATE_PARAMETERS "Параметри на шаблона"
+#define D_TEMPLATE_NAME "Име"
+#define D_BASE_TYPE "Базиран на"
+#define D_TEMPLATE_FLAGS "Опции"
+
+#define D_SAVE_CONFIGURATION "Запазване на конфигурацията"
+#define D_CONFIGURATION_SAVED "Конфигурацията е запазена"
+#define D_CONFIGURATION_RESET "Конфигурацията е изчистена"
+
+#define D_PROGRAM_VERSION "Версия на програмата"
+#define D_BUILD_DATE_AND_TIME "Дата и час на компилацията"
+#define D_CORE_AND_SDK_VERSION "Версия на Core/SDK"
+#define D_FLASH_WRITE_COUNT "Брой на записите във флаш паметта"
+#define D_MAC_ADDRESS "MAC адрес"
+#define D_MQTT_HOST "MQTT хост"
+#define D_MQTT_PORT "MQTT порт"
+#define D_MQTT_CLIENT "MQTT ID на клиент"
+#define D_MQTT_USER "MQTT потребител"
+#define D_MQTT_TOPIC "MQTT топик"
+#define D_MQTT_GROUP_TOPIC "MQTT групов топик"
+#define D_MQTT_FULL_TOPIC "MQTT пълен топик"
+#define D_MDNS_DISCOVERY "mDNS откриване"
+#define D_MDNS_ADVERTISE "mDNS известяване"
+#define D_ESP_CHIP_ID "ID на ESP чипа"
+#define D_FLASH_CHIP_ID "ID на чипа на флаш паметта"
+#define D_FLASH_CHIP_SIZE "Размер на флаш паметта"
+#define D_FREE_PROGRAM_SPACE "Свободно пространство за програми"
+
+#define D_UPGRADE_BY_WEBSERVER "Обновяване чрез уеб сървър"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Започване на обновяване"
+#define D_UPGRADE_BY_FILE_UPLOAD "Обновяване чрез зареждане на файл"
+#define D_UPLOAD_STARTED "Зареждането започна"
+#define D_UPGRADE_STARTED "Обновяването започна"
+#define D_UPLOAD_DONE "Зареждането завърши"
+#define D_UPLOAD_ERR_1 "Не е избран файл"
+#define D_UPLOAD_ERR_2 "Недостатъчно свободно място"
+#define D_UPLOAD_ERR_3 "Magic байтът не е 0xE9"
+#define D_UPLOAD_ERR_4 "Размерът на програмата е по-голям от реалния размер на флаш паметта"
+#define D_UPLOAD_ERR_5 "Грешка при зареждането в буфера"
+#define D_UPLOAD_ERR_6 "Грешка при зареждането. Включено е ниво 3 на лога"
+#define D_UPLOAD_ERR_7 "Зареждането е прекъснато"
+#define D_UPLOAD_ERR_8 "Файлът е невалиден"
+#define D_UPLOAD_ERR_9 "Файлът е прекалено голям"
+#define D_UPLOAD_ERR_10 "Грешка при инициализация на RF чипа"
+#define D_UPLOAD_ERR_11 "Грешка при изтриване на RF чипа"
+#define D_UPLOAD_ERR_12 "Грешка при записване в RF чипа"
+#define D_UPLOAD_ERR_13 "Грешка при декодиране на RF фърмуера"
+#define D_UPLOAD_ERROR_CODE "Код на грешка при зареждането"
+
+#define D_ENTER_COMMAND "Въвеждане на команда"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Включете ниво 2 на лога, ако очаквате отговор"
+#define D_NEED_USER_AND_PASSWORD "Очаква user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Проверка на TLS отпечатък..."
+#define D_TLS_CONNECT_FAILED_TO "Неуспешно TLS свързване към"
+#define D_RETRY_IN "Повтори след"
+#define D_VERIFIED "Проверен отпечтък"
+#define D_INSECURE "Нешифрована връзка, недействителен отпечатък"
+#define D_CONNECT_FAILED_TO "Грешка при свързването към"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast е изключен"
+#define D_MULTICAST_REJOINED "Multicast е повторно съединен"
+#define D_MULTICAST_JOIN_FAILED "Multicast грешка при присъединяването"
+#define D_FAILED_TO_SEND_RESPONSE "Неуспех при изпращането на отговор"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo главно събитие"
+#define D_WEMO_EVENT_SERVICE "WeMo услуга за събитията"
+#define D_WEMO_META_SERVICE "WeMo мета-услуга"
+#define D_WEMO_SETUP "WeMo настройка"
+#define D_RESPONSE_SENT "Отговорът е изпратен"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Настройка на Hue bridge"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API не е внедрен"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST аргументи"
+#define D_3_RESPONSE_PACKETS_SENT "Изпратени са 3 пакета за отговор"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz параметри"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Мощност,Енергия"
+ #define D_DOMOTICZ_ILLUMINANCE "Осветеност"
+ #define D_DOMOTICZ_COUNT "Брояч/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Напрежение/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Ток/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Качество на въздуха"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Период на опресняване"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Конфигуриране на таймер"
+#define D_TIMER_PARAMETERS "Параметри на таймера"
+#define D_TIMER_ENABLE "Активиране на таймера"
+#define D_TIMER_ARM "Активиран"
+#define D_TIMER_TIME "Време"
+#define D_TIMER_DAYS "Дни"
+#define D_TIMER_REPEAT "Повтори"
+#define D_TIMER_OUTPUT "Изход"
+#define D_TIMER_ACTION "Действие"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Конфигуриране на KNX"
+#define D_KNX_PARAMETERS "KNX параметри"
+#define D_KNX_GENERAL_CONFIG "Основни"
+#define D_KNX_PHYSICAL_ADDRESS "Физически адрес"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Трябва да е уникален в KNX мрежата )"
+#define D_KNX_ENABLE "Активиране на KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Групови адреси за изпращане на данни"
+#define D_ADD "Добаване"
+#define D_DELETE "Изтриване"
+#define D_REPLY "Отговор"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Групови адреси за получаване на данни"
+#define D_RECEIVED_FROM "Получен от"
+#define D_KNX_COMMAND_WRITE "Писане"
+#define D_KNX_COMMAND_READ "Четене"
+#define D_KNX_COMMAND_OTHER "Друго"
+#define D_SENT_TO "изпратен до"
+#define D_KNX_WARNING "Груповият адрес (0/0/0) е резервиран и не може да бъде използван."
+#define D_KNX_ENHANCEMENT "Подобрена комуникация"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Използвана енергия днес"
+#define D_ENERGY_YESTERDAY "Използвана енергия вчера"
+#define D_ENERGY_TOTAL "Използвана енергия общо"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Отворена"
+#define D_CLOSE "Затворена"
+#define D_DOMOTICZ_SHUTTER "Щора"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Конфигуриране на PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 параметри"
+#define D_INVERT_PORTS "Обърни портовете"
+#define D_DEVICE "Устройство"
+#define D_DEVICE_INPUT "Вход"
+#define D_DEVICE_OUTPUT "Изход"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Датчикът DS18x20 е зает"
+#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - грешка CRC"
+#define D_SENSORS_FOUND "Намерен е датчик DS18x20"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Изтекло време за очакване на"
+#define D_START_SIGNAL_LOW "Нисък стартов сигнал"
+#define D_START_SIGNAL_HIGH "Висок стартов сигнал"
+#define D_PULSE "Импулс"
+#define D_CHECKSUM_FAILURE "Грешка в контролната сума"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчикът не прие команда ACK"
+#define D_SHT1X_FOUND "Намерен е SHT1X"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Частици"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Ускорение - ос X"
+#define D_AY_AXIS "Ускорение - ос Y"
+#define D_AZ_AXIS "Ускорение - ос Z"
+#define D_GX_AXIS "Жироскоп - ос X"
+#define D_GY_AXIS "Жироскоп - ос Y"
+#define D_GZ_AXIS "Жироскоп - ос Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Премахване на тегло"
+#define D_HX_CAL_REFERENCE "Зареждане на референтно тегло"
+#define D_HX_CAL_DONE "Калибриран"
+#define D_HX_CAL_FAIL "Неуспешно калибриране"
+#define D_RESET_HX711 "Нулиране на кантара"
+#define D_CONFIGURE_HX711 "Конфигуриране на кантара"
+#define D_HX711_PARAMETERS "Параметри на кантара"
+#define D_ITEM_WEIGHT "Тегло"
+#define D_REFERENCE_WEIGHT "Референтно тегло"
+#define D_CALIBRATE "Калибриране"
+#define D_CALIBRATION "Калибровка"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Посока на вятъра"
+#define D_TX20_WIND_SPEED "Скорост на вятъра"
+#define D_TX20_WIND_SPEED_AVG "Средна скорост на вятъра"
+#define D_TX20_WIND_SPEED_MAX "Макс. скорост на вятъра"
+#define D_TX20_NORTH "С"
+#define D_TX20_EAST "И"
+#define D_TX20_SOUTH "Ю"
+#define D_TX20_WEST "З"
+
+// 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 "Потребит."
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 плейър"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Ключ" // Suffix "1"
+#define D_SENSOR_BUTTON "Бутон" // Suffix "1"
+#define D_SENSOR_RELAY "Реле" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Брояч" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Подсветка"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF датчик"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "h"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "gal/min"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h"
+#define D_UNIT_KILOOHM "kΩ"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
+#define D_UNIT_MICROMETER "µm"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "s"
+#define D_UNIT_SECTORS "сектори"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Фазов ъгъл"
+#define D_IMPORT_ACTIVE "Входна активна мощност"
+#define D_EXPORT_ACTIVE "Изходна активна мощност"
+#define D_IMPORT_REACTIVE "Входна реактивна мощност"
+#define D_EXPORT_REACTIVE "Изходна реактивна мощност"
+#define D_TOTAL_REACTIVE "Общо реактивна мощност"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "°"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "Напрежение на PV1"
+#define D_PV1_CURRENT "Ток на PV1"
+#define D_PV1_POWER "Мощност на PV1"
+#define D_PV2_VOLTAGE "Напрежение на PV2"
+#define D_PV2_CURRENT "Ток на PV2"
+#define D_PV2_POWER "Мощност на PV2"
+#define D_SOLAR_POWER "Слънчева мощност"
+#define D_INVERTER_POWER "Мощност на инвертера"
+#define D_STATUS "Състояние"
+#define D_WAITING "Очакване"
+#define D_CHECKING "Проверка"
+#define D_WORKING "Работи"
+#define D_FAILURE "Грешка"
+#define D_SOLAX_ERROR_0 "Грешка - няма код"
+#define D_SOLAX_ERROR_1 "Грешка - загуба на мрежата"
+#define D_SOLAX_ERROR_2 "Грешка - мрежово напрежение"
+#define D_SOLAX_ERROR_3 "Грешка - мрежова честота"
+#define D_SOLAX_ERROR_4 "Грешка - напрежение на Pv"
+#define D_SOLAX_ERROR_5 "Грешка - проблем с изолацията"
+#define D_SOLAX_ERROR_6 "Грешка - прегряване"
+#define D_SOLAX_ERROR_7 "Грешка - вентилатор"
+#define D_SOLAX_ERROR_8 "Грешка - друго оборудване"
+
+#endif // _LANGUAGE_BG_BG_H_
diff --git a/tasmota/language/cs-CZ.h b/tasmota/language/cs-CZ.h
index 7579e1922..1d7c6f381 100644
--- a/tasmota/language/cs-CZ.h
+++ b/tasmota/language/cs-CZ.h
@@ -1,703 +1,701 @@
-/*
- cs-CZ.h - localization for Czech with diacritics - Czech for Tasmota
-
- Copyright (C) 2019 Vladimír Synek
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_CS_CZ_H_
-#define _LANGUAGE_CS_CZ_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.5.0.9
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1029
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "cs"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "Ne Po Út St Čt Pá So "
-#define D_MONTH3LIST "LedÚnoBřeDubKvěČvnČvcSrpZářŘíjLisPro"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Kvalita vzduchu"
-#define D_AP "AP" // Access Point
-#define D_AS "jako"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blikání"
-#define D_BLINKOFF "BlikáníVyp"
-#define D_BOOT_COUNT "Počítadlo spuštění"
-#define D_BRIGHTLIGHT "Světlý"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Tlačítko"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bytů"
-#define D_CELSIUS "°C"
-#define D_CHANNEL "Channel"
-#define D_CO2 "CO2"
-#define D_CODE "kód" // Button code
-#define D_COLDLIGHT "Studené světlo"
-#define D_COMMAND "Příkaz"
-#define D_CONNECTED "...připojeno"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Počítej"
-#define D_COUNTER "Počítadlo"
-#define D_CURRENT "Proud" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Tmavý"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Zablokováno"
-#define D_DISTANCE "Distance"
-#define D_DNS_SERVER "Server DNS"
-#define D_DONE "Provedeno"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulace"
-#define D_ENABLED "Otevřený"
-#define D_ERASE "Smaž"
-#define D_ERROR "Chyba"
-#define D_FAHRENHEIT "Fahrenheita"
-#define D_FAILED "chyba"
-#define D_FALLBACK "Záložní"
-#define D_FALLBACK_TOPIC "Záložní topic"
-#define D_FALSE "Nepravda"
-#define D_FILE "Soubor"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Volná paměť"
-#define D_FREQUENCY "Kmitočet"
-#define D_GAS "Plyn"
-#define D_GATEWAY "Výchozí brána"
-#define D_GROUP "Skupina"
-#define D_HOST "Server"
-#define D_HOSTNAME "Název serveru"
-#define D_HUMIDITY "Vlhkost"
-#define D_ILLUMINANCE "Osvětlení"
-#define D_IMMEDIATE "Okamžité" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Informace"
-#define D_INFRARED "Infrared"
-#define D_INITIALIZED "Inicializovaný"
-#define D_IP_ADDRESS "Adresa IP"
-#define D_LIGHT "Světlo"
-#define D_LWT "LWT"
-#define D_MODULE "Modul"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "několikeré-stisknutí"
-#define D_NOISE "Hluk"
-#define D_NONE "Žádný"
-#define D_OFF "Vyp."
-#define D_OFFLINE "Neaktivní"
-#define D_OK "OK"
-#define D_ON "Zap."
-#define D_ONLINE "Aktivní"
-#define D_PASSWORD "Heslo"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Účiník"
-#define D_POWERUSAGE "Příkon"
-#define D_POWERUSAGE_ACTIVE "Činný příkon"
-#define D_POWERUSAGE_APPARENT "Zdánlivý příkon"
-#define D_POWERUSAGE_REACTIVE "Jalový příkon"
-#define D_PRESSURE "Tlak"
-#define D_PRESSUREATSEALEVEL "Tlak na hladině moře"
-#define D_PROGRAM_FLASH_SIZE "Velikost paměti flash"
-#define D_PROGRAM_SIZE "Velikost programu"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Přijatý"
-#define D_RESTART "Restart"
-#define D_RESTARTING "Restartování"
-#define D_RESTART_REASON "Příčina restartu"
-#define D_RESTORE "Obnovit"
-#define D_RETAINED "Zachováno"
-#define D_RULE "Rule"
-#define D_SAVE "Ulož"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSID"
-#define D_START "Start"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Maska podsítě"
-#define D_SUBSCRIBE_TO "Přihlaš se do"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "úspěšné."
-#define D_SUNRISE "Svítání"
-#define D_SUNSET "Soumrak"
-#define D_TEMPERATURE "Teplota"
-#define D_TO "do"
-#define D_TOGGLE "Přepni"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Odešli"
-#define D_TRUE "Pravda"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "aktualizace"
-#define D_UPLOAD "Nahrání..."
-#define D_UPTIME "Uptime"
-#define D_USER "Uživatel"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Nízký"
-#define D_UV_INDEX_2 "Střední"
-#define D_UV_INDEX_3 "Vysoký"
-#define D_UV_INDEX_4 "Nebezpečný"
-#define D_UV_INDEX_5 "Popál1/2"
-#define D_UV_INDEX_6 "Popál3"
-#define D_UV_INDEX_7 "MimoRozsah"
-#define D_UV_LEVEL "úroveň UV"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Verze"
-#define D_VOLTAGE "Napětí"
-#define D_WEIGHT "Hmotnost"
-#define D_WARMLIGHT "Teplé světlo"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "UPOZORNĚNÍ Tato verze nepodporuje trvalé nastavení"
-#define D_LEVEL_10 "úroveň 1-0"
-#define D_LEVEL_01 "úroveň 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Logování na sériovém portu ukončeno"
-#define D_SYSLOG_LOGGING_REENABLED "Obnoven zápis do Syslog"
-
-#define D_SET_BAUDRATE_TO "Nastavení rychlosti přenosu na"
-#define D_RECEIVED_TOPIC "Přijatý topic"
-#define D_DATA_SIZE "Velikost dat"
-#define D_ANALOG_INPUT "Analogový vstup"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Zablokování smyčky"
-#define D_WPS_FAILED_WITH_STATUS "Chyba WPSconfig se statusem"
-#define D_ACTIVE_FOR_3_MINUTES "aktivní 3 minuty"
-#define D_FAILED_TO_START "nepodařilo se spustit"
-#define D_PATCH_ISSUE_2186 "Chyba 2186"
-#define D_CONNECTING_TO_AP "Připojování k AP"
-#define D_IN_MODE "v módu"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba připojení, nebyla obdržena IP adresa"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba připojení, nedostupný AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba připojení, nesprávné heslo pro AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba připojení, uplynul AP timeout"
-#define D_ATTEMPTING_CONNECTION "Připojování..."
-#define D_CHECKING_CONNECTION "Zkouška spojení..."
-#define D_QUERY_DONE "Vyslání dotazu. Nalezena služba MQTT"
-#define D_MQTT_SERVICE_FOUND "Služba MQTT byla nalezena"
-#define D_FOUND_AT "znalezeno v"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nebyl nalezen"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Uloženo do paměti flash v"
-#define D_LOADED_FROM_FLASH_AT "Staženo z paměti flash z"
-#define D_USE_DEFAULTS "Použij defaultní hodnoty"
-#define D_ERASED_SECTOR "Smazaný sektor"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Pro používání prostředí Tasmota povolte JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMÁLNÍ
prosím zaktualizujte"
-#define D_WEBSERVER_ACTIVE_ON "Aktivní Web server"
-#define D_WITH_IP_ADDRESS "na IP adrese"
-#define D_WEBSERVER_STOPPED "Web server zastaven"
-#define D_FILE_NOT_FOUND "Soubor nebyl nalezen"
-#define D_REDIRECTED "Přesměrování na vlastní portál"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wi-Fi manager nastaví AP a zachová STA"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wi-Fi manager nastaví Access Point"
-#define D_TRYING_TO_CONNECT "Zkouším připojit zařízení k síti"
-
-#define D_RESTART_IN "Restart"
-#define D_SECONDS "sekund"
-#define D_DEVICE_WILL_RESTART "Zařízení bude zrestartováno během několika sekund"
-#define D_BUTTON_TOGGLE "Přepínač"
-#define D_CONFIGURATION "Nastavení"
-#define D_INFORMATION "Informace"
-#define D_FIRMWARE_UPGRADE "Aktualizace firmware"
-#define D_CONSOLE "Konzole"
-#define D_CONFIRM_RESTART "Potvrzení restartu"
-
-#define D_CONFIGURE_MODULE "Nastavení modulu"
-#define D_CONFIGURE_WIFI "Nastavení WiFi"
-#define D_CONFIGURE_MQTT "Nastavení MQTT"
-#define D_CONFIGURE_DOMOTICZ "Nastavení Domoticz"
-#define D_CONFIGURE_LOGGING "Nastavení logování"
-#define D_CONFIGURE_OTHER "Jiná nastavení"
-#define D_CONFIRM_RESET_CONFIGURATION "Potvrzení resetu nastavení"
-#define D_RESET_CONFIGURATION "Reset nastavení"
-#define D_BACKUP_CONFIGURATION "Záloha nastavení"
-#define D_RESTORE_CONFIGURATION "Obnovení nastavení"
-#define D_MAIN_MENU "Hlavní menu"
-
-#define D_MODULE_PARAMETERS "Nastavení modulu"
-#define D_MODULE_TYPE "Typ modulu"
-#define D_PULLUP_ENABLE "Tlačítko/Spínač bez pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Nastavení WiFi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Scan sítí WiFi"
-#define D_SCAN_DONE "Scan dokončen"
-#define D_NO_NETWORKS_FOUND "Síť nebyla nalezena"
-#define D_REFRESH_TO_SCAN_AGAIN "Zopakovat scan"
-#define D_DUPLICATE_ACCESSPOINT "Kopie AP"
-#define D_SKIPPING_LOW_QUALITY "Přeskočení z důvodu kvality signálu"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSID"
-#define D_AP1_PASSWORD "Heslo AP1"
-#define D_AP2_SSID "AP2 SSID"
-#define D_AP2_PASSWORD "Heslo AP2"
-
-#define D_MQTT_PARAMETERS "Nastavení MQTT"
-#define D_CLIENT "Klient"
-#define D_FULL_TOPIC "Celý topic"
-
-#define D_LOGGING_PARAMETERS "Volba logování"
-#define D_SERIAL_LOG_LEVEL "Seriová úroveň logu"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Webová úroveň logu"
-#define D_SYS_LOG_LEVEL "Systemová úroveň logu"
-#define D_MORE_DEBUG "Více debug informací"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Interval telemetrie"
-
-#define D_OTHER_PARAMETERS "Další nastavení"
-#define D_TEMPLATE "Šablona"
-#define D_ACTIVATE "Aktivovat"
-#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
-#define D_MQTT_ENABLE "MQTT aktivní"
-#define D_FRIENDLY_NAME "Friendly Name"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "single device"
-#define D_MULTI_DEVICE "multi device"
-
-#define D_CONFIGURE_TEMPLATE "Nastavení šablony"
-#define D_TEMPLATE_PARAMETERS "Parametry šablony"
-#define D_TEMPLATE_NAME "Název"
-#define D_BASE_TYPE "Vzor z"
-#define D_TEMPLATE_FLAGS "Volby"
-
-#define D_SAVE_CONFIGURATION "Ulož nastavení"
-#define D_CONFIGURATION_SAVED "Nastavení uloženo"
-#define D_CONFIGURATION_RESET "Nastavení resetováno"
-
-#define D_PROGRAM_VERSION "Verze programu"
-#define D_BUILD_DATE_AND_TIME "Datum a čas kompilace"
-#define D_CORE_AND_SDK_VERSION "Verze Core/SDK"
-#define D_FLASH_WRITE_COUNT "Počet zápisů do paměti"
-#define D_MAC_ADDRESS "Adresa MAC"
-#define D_MQTT_HOST "Host MQTT"
-#define D_MQTT_PORT "Port MQTT"
-#define D_MQTT_CLIENT "Klient MQTT"
-#define D_MQTT_USER "Uživatel MQTT"
-#define D_MQTT_TOPIC "Topic MQTT"
-#define D_MQTT_GROUP_TOPIC "Topic skupiny MQTT"
-#define D_MQTT_FULL_TOPIC "Celý topic MQTT"
-#define D_MDNS_DISCOVERY "Získávání mDNS"
-#define D_MDNS_ADVERTISE "Rozesílání mDNS"
-#define D_ESP_CHIP_ID "ID systému ESP"
-#define D_FLASH_CHIP_ID "ID systému paměti flash"
-#define D_FLASH_CHIP_SIZE "Velikost flash"
-#define D_FREE_PROGRAM_SPACE "Volné místo pro program"
-
-#define D_UPGRADE_BY_WEBSERVER "Aktualizace z Web serveru"
-#define D_OTA_URL "URL OTA"
-#define D_START_UPGRADE "Start aktualizace"
-#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizace nahráním souboru"
-#define D_UPLOAD_STARTED "Nahrávání zahájeno"
-#define D_UPGRADE_STARTED "Zahájení aktualizace"
-#define D_UPLOAD_DONE "Nahrávání ukončeno"
-#define D_UPLOAD_ERR_1 "Soubor nebyl vybrán"
-#define D_UPLOAD_ERR_2 "Málo místa"
-#define D_UPLOAD_ERR_3 "Magický byte má hodnotu jinou než 0xE9"
-#define D_UPLOAD_ERR_4 "Velikost programu je větší než skutečná velikost paměti flash"
-#define D_UPLOAD_ERR_5 "Chyba nahrávání, nesouhlasí porovnávané bity"
-#define D_UPLOAD_ERR_6 "Chyba nahrávání. Spuštěn zápis do logu na úrovni 3"
-#define D_UPLOAD_ERR_7 "Nahrávání přerušeno"
-#define D_UPLOAD_ERR_8 "Špatný soubor"
-#define D_UPLOAD_ERR_9 "Soubor je příliš velký"
-#define D_UPLOAD_ERR_10 "Chyba inicializace RF chipu"
-#define D_UPLOAD_ERR_11 "Chyba smazání RF chipu"
-#define D_UPLOAD_ERR_12 "Chyba při zápisu do RF chipu"
-#define D_UPLOAD_ERR_13 "Chyba dekódování RF firmwaru"
-#define D_UPLOAD_ERROR_CODE "Chyba nahrávání"
-
-#define D_ENTER_COMMAND "Vlož příkaz"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Zapni úroveň 2 zápisu Weblog, pokud je očekávána odpověď"
-#define D_NEED_USER_AND_PASSWORD "Vyžadován uživatel=&heslo="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifikuj otisk TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Nepřipojeno TLS do"
-#define D_RETRY_IN "Zopakuji za"
-#define D_VERIFIED "Ověřeno otisk "
-#define D_INSECURE "Nesprávné připojení z důvodu chybného otisku TLS"
-#define D_CONNECT_FAILED_TO "Spojení se nepodařilo navázat"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast je vypnutý"
-#define D_MULTICAST_REJOINED "Multicast opět připojený"
-#define D_MULTICAST_JOIN_FAILED "Multicast neúspěšný"
-#define D_FAILED_TO_SEND_RESPONSE "Nepodařilo se odeslat odpověď"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo základní událost"
-#define D_WEMO_EVENT_SERVICE "WeMo servisní událost"
-#define D_WEMO_META_SERVICE "WeMo meta událost"
-#define D_WEMO_SETUP "WeMo setup"
-#define D_RESPONSE_SENT "Odpověď odeslána"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue setup"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API není implementováno"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 pakety odpovědi odeslány"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Nastavení Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Spinac idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Vlhk"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Vlhk,Tlak"
- #define D_DOMOTICZ_POWER_ENERGY "Příkon,Energie"
- #define D_DOMOTICZ_ILLUMINANCE "Osvětlení"
- #define D_DOMOTICZ_COUNT "Počítadlo/PM1"
- #define D_DOMOTICZ_VOLTAGE "Napětí/PM2,5"
- #define D_DOMOTICZ_CURRENT "Proud/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Aktualizace stopek"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Nastavení Časovače"
-#define D_TIMER_PARAMETERS "Časovač"
-#define D_TIMER_ENABLE "Povol časovače"
-#define D_TIMER_ARM "Aktivní"
-#define D_TIMER_TIME "Čas"
-#define D_TIMER_DAYS "Dny"
-#define D_TIMER_REPEAT "Opakovat"
-#define D_TIMER_OUTPUT "Výstup"
-#define D_TIMER_ACTION "Napájení"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Nastavení KNX"
-#define D_KNX_PARAMETERS "KNX parametry"
-#define D_KNX_GENERAL_CONFIG "Obecné"
-#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v síti KNX )"
-#define D_KNX_ENABLE "Povol KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data k odeslání na skupinové adresy"
-#define D_ADD "Přidej"
-#define D_DELETE "Smaž"
-#define D_REPLY "Odpověď"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pro příjem dat z"
-#define D_RECEIVED_FROM "Přijato z"
-#define D_KNX_COMMAND_WRITE "Zapiš"
-#define D_KNX_COMMAND_READ "Čti"
-#define D_KNX_COMMAND_OTHER "Jiné"
-#define D_SENT_TO "pošli"
-#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervována a nemůže být použita."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Spotřeba Dnes"
-#define D_ENERGY_YESTERDAY "Spotřeba Včera"
-#define D_ENERGY_TOTAL "Celková spotřeba"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor DS18x20 obsazen"
-#define D_SENSOR_CRC_ERROR "Sensor DS18x20 chyba CRC"
-#define D_SENSORS_FOUND "Nalezen sensor DS18x20"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Čekání na"
-#define D_START_SIGNAL_LOW "nízký startovní signál"
-#define D_START_SIGNAL_HIGH "vysoký startovní signál"
-#define D_PULSE "impuls"
-#define D_CHECKSUM_FAILURE "Chybný kontrolní součet"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor neobdržel příkaz ACK"
-#define D_SHT1X_FOUND "SHT1X nalezen"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "částic"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. osa-X"
-#define D_AY_AXIS "Accel. osa-Y"
-#define D_AZ_AXIS "Accel. osa-Z"
-#define D_GX_AXIS "Gyro osa-X"
-#define D_GY_AXIS "Gyro osa-Y"
-#define D_GZ_AXIS "Gyro osa-Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Odstraňte zátěž"
-#define D_HX_CAL_REFERENCE "Vložte referenční zátěž"
-#define D_HX_CAL_DONE "Zkalibrováno"
-#define D_HX_CAL_FAIL "Chyba kalibrace"
-#define D_RESET_HX711 "Reset váhy"
-#define D_CONFIGURE_HX711 "Konfigurace váhy"
-#define D_HX711_PARAMETERS "Parametry váhy"
-#define D_ITEM_WEIGHT "Vlastní hmotnost"
-#define D_REFERENCE_WEIGHT "Referenční hmotnost"
-#define D_CALIBRATE "Kalibruj"
-#define D_CALIBRATION "Kalibrace"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Směr větru"
-#define D_TX20_WIND_SPEED "Rychlost větru"
-#define D_TX20_WIND_SPEED_AVG "Průměrná rychlost větru"
-#define D_TX20_WIND_SPEED_MAX "Maximální rychlost větru"
-#define D_TX20_NORTH "S"
-#define D_TX20_EAST "V"
-#define D_TX20_SOUTH "J"
-#define D_TX20_WEST "Z"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Spínač" // Suffix "1"
-#define D_SENSOR_BUTTON "Tlačítko" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1",
-#define D_SENSOR_COUNTER "Počítadlo" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "hod"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
-#define D_UNIT_MICROMETER "µm"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sektory"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_CS_CZ_H_
+/*
+ cs-CZ.h - localization for Czech with diacritics - Czech for Tasmota
+
+ Copyright (C) 2019 Vladimír Synek
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_CS_CZ_H_
+#define _LANGUAGE_CS_CZ_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.5.0.9
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1029
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "cs"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "Ne Po Út St Čt Pá So "
+#define D_MONTH3LIST "LedÚnoBřeDubKvěČvnČvcSrpZářŘíjLisPro"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Kvalita vzduchu"
+#define D_AP "AP" // Access Point
+#define D_AS "jako"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blikání"
+#define D_BLINKOFF "BlikáníVyp"
+#define D_BOOT_COUNT "Počítadlo spuštění"
+#define D_BRIGHTLIGHT "Světlý"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Tlačítko"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bytů"
+#define D_CELSIUS "°C"
+#define D_CHANNEL "Channel"
+#define D_CO2 "CO2"
+#define D_CODE "kód" // Button code
+#define D_COLDLIGHT "Studené světlo"
+#define D_COMMAND "Příkaz"
+#define D_CONNECTED "...připojeno"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Počítej"
+#define D_COUNTER "Počítadlo"
+#define D_CURRENT "Proud" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Tmavý"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Zablokováno"
+#define D_DISTANCE "Distance"
+#define D_DNS_SERVER "Server DNS"
+#define D_DONE "Provedeno"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulace"
+#define D_ENABLED "Otevřený"
+#define D_ERASE "Smaž"
+#define D_ERROR "Chyba"
+#define D_FAHRENHEIT "Fahrenheita"
+#define D_FAILED "chyba"
+#define D_FALLBACK "Záložní"
+#define D_FALLBACK_TOPIC "Záložní topic"
+#define D_FALSE "Nepravda"
+#define D_FILE "Soubor"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Volná paměť"
+#define D_FREQUENCY "Kmitočet"
+#define D_GAS "Plyn"
+#define D_GATEWAY "Výchozí brána"
+#define D_GROUP "Skupina"
+#define D_HOST "Server"
+#define D_HOSTNAME "Název serveru"
+#define D_HUMIDITY "Vlhkost"
+#define D_ILLUMINANCE "Osvětlení"
+#define D_IMMEDIATE "Okamžité" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Informace"
+#define D_INFRARED "Infrared"
+#define D_INITIALIZED "Inicializovaný"
+#define D_IP_ADDRESS "Adresa IP"
+#define D_LIGHT "Světlo"
+#define D_LWT "LWT"
+#define D_MODULE "Modul"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "několikeré-stisknutí"
+#define D_NOISE "Hluk"
+#define D_NONE "Žádný"
+#define D_OFF "Vyp."
+#define D_OFFLINE "Neaktivní"
+#define D_OK "OK"
+#define D_ON "Zap."
+#define D_ONLINE "Aktivní"
+#define D_PASSWORD "Heslo"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Účiník"
+#define D_POWERUSAGE "Příkon"
+#define D_POWERUSAGE_ACTIVE "Činný příkon"
+#define D_POWERUSAGE_APPARENT "Zdánlivý příkon"
+#define D_POWERUSAGE_REACTIVE "Jalový příkon"
+#define D_PRESSURE "Tlak"
+#define D_PRESSUREATSEALEVEL "Tlak na hladině moře"
+#define D_PROGRAM_FLASH_SIZE "Velikost paměti flash"
+#define D_PROGRAM_SIZE "Velikost programu"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Přijatý"
+#define D_RESTART "Restart"
+#define D_RESTARTING "Restartování"
+#define D_RESTART_REASON "Příčina restartu"
+#define D_RESTORE "Obnovit"
+#define D_RETAINED "Zachováno"
+#define D_RULE "Rule"
+#define D_SAVE "Ulož"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSID"
+#define D_START "Start"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Maska podsítě"
+#define D_SUBSCRIBE_TO "Přihlaš se do"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "úspěšné."
+#define D_SUNRISE "Svítání"
+#define D_SUNSET "Soumrak"
+#define D_TEMPERATURE "Teplota"
+#define D_TO "do"
+#define D_TOGGLE "Přepni"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Odešli"
+#define D_TRUE "Pravda"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "aktualizace"
+#define D_UPLOAD "Nahrání..."
+#define D_UPTIME "Uptime"
+#define D_USER "Uživatel"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Nízký"
+#define D_UV_INDEX_2 "Střední"
+#define D_UV_INDEX_3 "Vysoký"
+#define D_UV_INDEX_4 "Nebezpečný"
+#define D_UV_INDEX_5 "Popál1/2"
+#define D_UV_INDEX_6 "Popál3"
+#define D_UV_INDEX_7 "MimoRozsah"
+#define D_UV_LEVEL "úroveň UV"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Verze"
+#define D_VOLTAGE "Napětí"
+#define D_WEIGHT "Hmotnost"
+#define D_WARMLIGHT "Teplé světlo"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "UPOZORNĚNÍ Tato verze nepodporuje trvalé nastavení"
+#define D_LEVEL_10 "úroveň 1-0"
+#define D_LEVEL_01 "úroveň 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Logování na sériovém portu ukončeno"
+#define D_SYSLOG_LOGGING_REENABLED "Obnoven zápis do Syslog"
+
+#define D_SET_BAUDRATE_TO "Nastavení rychlosti přenosu na"
+#define D_RECEIVED_TOPIC "Přijatý topic"
+#define D_DATA_SIZE "Velikost dat"
+#define D_ANALOG_INPUT "Analogový vstup"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Zablokování smyčky"
+#define D_WPS_FAILED_WITH_STATUS "Chyba WPSconfig se statusem"
+#define D_ACTIVE_FOR_3_MINUTES "aktivní 3 minuty"
+#define D_FAILED_TO_START "nepodařilo se spustit"
+#define D_PATCH_ISSUE_2186 "Chyba 2186"
+#define D_CONNECTING_TO_AP "Připojování k AP"
+#define D_IN_MODE "v módu"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba připojení, nebyla obdržena IP adresa"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba připojení, nedostupný AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba připojení, nesprávné heslo pro AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba připojení, uplynul AP timeout"
+#define D_ATTEMPTING_CONNECTION "Připojování..."
+#define D_CHECKING_CONNECTION "Zkouška spojení..."
+#define D_QUERY_DONE "Vyslání dotazu. Nalezena služba MQTT"
+#define D_MQTT_SERVICE_FOUND "Služba MQTT byla nalezena"
+#define D_FOUND_AT "znalezeno v"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nebyl nalezen"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Uloženo do paměti flash v"
+#define D_LOADED_FROM_FLASH_AT "Staženo z paměti flash z"
+#define D_USE_DEFAULTS "Použij defaultní hodnoty"
+#define D_ERASED_SECTOR "Smazaný sektor"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Pro používání prostředí Tasmota povolte JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMÁLNÍ
prosím zaktualizujte"
+#define D_WEBSERVER_ACTIVE_ON "Aktivní Web server"
+#define D_WITH_IP_ADDRESS "na IP adrese"
+#define D_WEBSERVER_STOPPED "Web server zastaven"
+#define D_FILE_NOT_FOUND "Soubor nebyl nalezen"
+#define D_REDIRECTED "Přesměrování na vlastní portál"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wi-Fi manager nastaví AP a zachová STA"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wi-Fi manager nastaví Access Point"
+#define D_TRYING_TO_CONNECT "Zkouším připojit zařízení k síti"
+
+#define D_RESTART_IN "Restart"
+#define D_SECONDS "sekund"
+#define D_DEVICE_WILL_RESTART "Zařízení bude zrestartováno během několika sekund"
+#define D_BUTTON_TOGGLE "Přepínač"
+#define D_CONFIGURATION "Nastavení"
+#define D_INFORMATION "Informace"
+#define D_FIRMWARE_UPGRADE "Aktualizace firmware"
+#define D_CONSOLE "Konzole"
+#define D_CONFIRM_RESTART "Potvrzení restartu"
+
+#define D_CONFIGURE_MODULE "Nastavení modulu"
+#define D_CONFIGURE_WIFI "Nastavení WiFi"
+#define D_CONFIGURE_MQTT "Nastavení MQTT"
+#define D_CONFIGURE_DOMOTICZ "Nastavení Domoticz"
+#define D_CONFIGURE_LOGGING "Nastavení logování"
+#define D_CONFIGURE_OTHER "Jiná nastavení"
+#define D_CONFIRM_RESET_CONFIGURATION "Potvrzení resetu nastavení"
+#define D_RESET_CONFIGURATION "Reset nastavení"
+#define D_BACKUP_CONFIGURATION "Záloha nastavení"
+#define D_RESTORE_CONFIGURATION "Obnovení nastavení"
+#define D_MAIN_MENU "Hlavní menu"
+
+#define D_MODULE_PARAMETERS "Nastavení modulu"
+#define D_MODULE_TYPE "Typ modulu"
+#define D_PULLUP_ENABLE "Tlačítko/Spínač bez pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Nastavení WiFi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Scan sítí WiFi"
+#define D_SCAN_DONE "Scan dokončen"
+#define D_NO_NETWORKS_FOUND "Síť nebyla nalezena"
+#define D_REFRESH_TO_SCAN_AGAIN "Zopakovat scan"
+#define D_DUPLICATE_ACCESSPOINT "Kopie AP"
+#define D_SKIPPING_LOW_QUALITY "Přeskočení z důvodu kvality signálu"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSID"
+#define D_AP1_PASSWORD "Heslo AP1"
+#define D_AP2_SSID "AP2 SSID"
+#define D_AP2_PASSWORD "Heslo AP2"
+
+#define D_MQTT_PARAMETERS "Nastavení MQTT"
+#define D_CLIENT "Klient"
+#define D_FULL_TOPIC "Celý topic"
+
+#define D_LOGGING_PARAMETERS "Volba logování"
+#define D_SERIAL_LOG_LEVEL "Seriová úroveň logu"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Webová úroveň logu"
+#define D_SYS_LOG_LEVEL "Systemová úroveň logu"
+#define D_MORE_DEBUG "Více debug informací"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Interval telemetrie"
+
+#define D_OTHER_PARAMETERS "Další nastavení"
+#define D_TEMPLATE "Šablona"
+#define D_ACTIVATE "Aktivovat"
+#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
+#define D_MQTT_ENABLE "MQTT aktivní"
+#define D_FRIENDLY_NAME "Friendly Name"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "single device"
+#define D_MULTI_DEVICE "multi device"
+
+#define D_CONFIGURE_TEMPLATE "Nastavení šablony"
+#define D_TEMPLATE_PARAMETERS "Parametry šablony"
+#define D_TEMPLATE_NAME "Název"
+#define D_BASE_TYPE "Vzor z"
+#define D_TEMPLATE_FLAGS "Volby"
+
+#define D_SAVE_CONFIGURATION "Ulož nastavení"
+#define D_CONFIGURATION_SAVED "Nastavení uloženo"
+#define D_CONFIGURATION_RESET "Nastavení resetováno"
+
+#define D_PROGRAM_VERSION "Verze programu"
+#define D_BUILD_DATE_AND_TIME "Datum a čas kompilace"
+#define D_CORE_AND_SDK_VERSION "Verze Core/SDK"
+#define D_FLASH_WRITE_COUNT "Počet zápisů do paměti"
+#define D_MAC_ADDRESS "Adresa MAC"
+#define D_MQTT_HOST "Host MQTT"
+#define D_MQTT_PORT "Port MQTT"
+#define D_MQTT_CLIENT "Klient MQTT"
+#define D_MQTT_USER "Uživatel MQTT"
+#define D_MQTT_TOPIC "Topic MQTT"
+#define D_MQTT_GROUP_TOPIC "Topic skupiny MQTT"
+#define D_MQTT_FULL_TOPIC "Celý topic MQTT"
+#define D_MDNS_DISCOVERY "Získávání mDNS"
+#define D_MDNS_ADVERTISE "Rozesílání mDNS"
+#define D_ESP_CHIP_ID "ID systému ESP"
+#define D_FLASH_CHIP_ID "ID systému paměti flash"
+#define D_FLASH_CHIP_SIZE "Velikost flash"
+#define D_FREE_PROGRAM_SPACE "Volné místo pro program"
+
+#define D_UPGRADE_BY_WEBSERVER "Aktualizace z Web serveru"
+#define D_OTA_URL "URL OTA"
+#define D_START_UPGRADE "Start aktualizace"
+#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizace nahráním souboru"
+#define D_UPLOAD_STARTED "Nahrávání zahájeno"
+#define D_UPGRADE_STARTED "Zahájení aktualizace"
+#define D_UPLOAD_DONE "Nahrávání ukončeno"
+#define D_UPLOAD_ERR_1 "Soubor nebyl vybrán"
+#define D_UPLOAD_ERR_2 "Málo místa"
+#define D_UPLOAD_ERR_3 "Magický byte má hodnotu jinou než 0xE9"
+#define D_UPLOAD_ERR_4 "Velikost programu je větší než skutečná velikost paměti flash"
+#define D_UPLOAD_ERR_5 "Chyba nahrávání, nesouhlasí porovnávané bity"
+#define D_UPLOAD_ERR_6 "Chyba nahrávání. Spuštěn zápis do logu na úrovni 3"
+#define D_UPLOAD_ERR_7 "Nahrávání přerušeno"
+#define D_UPLOAD_ERR_8 "Špatný soubor"
+#define D_UPLOAD_ERR_9 "Soubor je příliš velký"
+#define D_UPLOAD_ERR_10 "Chyba inicializace RF chipu"
+#define D_UPLOAD_ERR_11 "Chyba smazání RF chipu"
+#define D_UPLOAD_ERR_12 "Chyba při zápisu do RF chipu"
+#define D_UPLOAD_ERR_13 "Chyba dekódování RF firmwaru"
+#define D_UPLOAD_ERROR_CODE "Chyba nahrávání"
+
+#define D_ENTER_COMMAND "Vlož příkaz"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Zapni úroveň 2 zápisu Weblog, pokud je očekávána odpověď"
+#define D_NEED_USER_AND_PASSWORD "Vyžadován uživatel=&heslo="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifikuj otisk TLS..."
+#define D_TLS_CONNECT_FAILED_TO "Nepřipojeno TLS do"
+#define D_RETRY_IN "Zopakuji za"
+#define D_VERIFIED "Ověřeno otisk "
+#define D_INSECURE "Nesprávné připojení z důvodu chybného otisku TLS"
+#define D_CONNECT_FAILED_TO "Spojení se nepodařilo navázat"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast je vypnutý"
+#define D_MULTICAST_REJOINED "Multicast opět připojený"
+#define D_MULTICAST_JOIN_FAILED "Multicast neúspěšný"
+#define D_FAILED_TO_SEND_RESPONSE "Nepodařilo se odeslat odpověď"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo základní událost"
+#define D_WEMO_EVENT_SERVICE "WeMo servisní událost"
+#define D_WEMO_META_SERVICE "WeMo meta událost"
+#define D_WEMO_SETUP "WeMo setup"
+#define D_RESPONSE_SENT "Odpověď odeslána"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue setup"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API není implementováno"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 pakety odpovědi odeslány"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Nastavení Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Spinac idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Vlhk"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Vlhk,Tlak"
+ #define D_DOMOTICZ_POWER_ENERGY "Příkon,Energie"
+ #define D_DOMOTICZ_ILLUMINANCE "Osvětlení"
+ #define D_DOMOTICZ_COUNT "Počítadlo/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Napětí/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Proud/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Aktualizace stopek"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Nastavení Časovače"
+#define D_TIMER_PARAMETERS "Časovač"
+#define D_TIMER_ENABLE "Povol časovače"
+#define D_TIMER_ARM "Aktivní"
+#define D_TIMER_TIME "Čas"
+#define D_TIMER_DAYS "Dny"
+#define D_TIMER_REPEAT "Opakovat"
+#define D_TIMER_OUTPUT "Výstup"
+#define D_TIMER_ACTION "Napájení"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Nastavení KNX"
+#define D_KNX_PARAMETERS "KNX parametry"
+#define D_KNX_GENERAL_CONFIG "Obecné"
+#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v síti KNX )"
+#define D_KNX_ENABLE "Povol KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data k odeslání na skupinové adresy"
+#define D_ADD "Přidej"
+#define D_DELETE "Smaž"
+#define D_REPLY "Odpověď"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pro příjem dat z"
+#define D_RECEIVED_FROM "Přijato z"
+#define D_KNX_COMMAND_WRITE "Zapiš"
+#define D_KNX_COMMAND_READ "Čti"
+#define D_KNX_COMMAND_OTHER "Jiné"
+#define D_SENT_TO "pošli"
+#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervována a nemůže být použita."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Spotřeba Dnes"
+#define D_ENERGY_YESTERDAY "Spotřeba Včera"
+#define D_ENERGY_TOTAL "Celková spotřeba"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor DS18x20 obsazen"
+#define D_SENSOR_CRC_ERROR "Sensor DS18x20 chyba CRC"
+#define D_SENSORS_FOUND "Nalezen sensor DS18x20"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Čekání na"
+#define D_START_SIGNAL_LOW "nízký startovní signál"
+#define D_START_SIGNAL_HIGH "vysoký startovní signál"
+#define D_PULSE "impuls"
+#define D_CHECKSUM_FAILURE "Chybný kontrolní součet"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor neobdržel příkaz ACK"
+#define D_SHT1X_FOUND "SHT1X nalezen"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "částic"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. osa-X"
+#define D_AY_AXIS "Accel. osa-Y"
+#define D_AZ_AXIS "Accel. osa-Z"
+#define D_GX_AXIS "Gyro osa-X"
+#define D_GY_AXIS "Gyro osa-Y"
+#define D_GZ_AXIS "Gyro osa-Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Odstraňte zátěž"
+#define D_HX_CAL_REFERENCE "Vložte referenční zátěž"
+#define D_HX_CAL_DONE "Zkalibrováno"
+#define D_HX_CAL_FAIL "Chyba kalibrace"
+#define D_RESET_HX711 "Reset váhy"
+#define D_CONFIGURE_HX711 "Konfigurace váhy"
+#define D_HX711_PARAMETERS "Parametry váhy"
+#define D_ITEM_WEIGHT "Vlastní hmotnost"
+#define D_REFERENCE_WEIGHT "Referenční hmotnost"
+#define D_CALIBRATE "Kalibruj"
+#define D_CALIBRATION "Kalibrace"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Směr větru"
+#define D_TX20_WIND_SPEED "Rychlost větru"
+#define D_TX20_WIND_SPEED_AVG "Průměrná rychlost větru"
+#define D_TX20_WIND_SPEED_MAX "Maximální rychlost větru"
+#define D_TX20_NORTH "S"
+#define D_TX20_EAST "V"
+#define D_TX20_SOUTH "J"
+#define D_TX20_WEST "Z"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Spínač" // Suffix "1"
+#define D_SENSOR_BUTTON "Tlačítko" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1",
+#define D_SENSOR_COUNTER "Počítadlo" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "hod"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
+#define D_UNIT_MICROMETER "µm"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sektory"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_CS_CZ_H_
diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h
index d4e434e0c..6569dd232 100644
--- a/tasmota/language/de-DE.h
+++ b/tasmota/language/de-DE.h
@@ -1,703 +1,701 @@
-/*
- de-DE.h - localization for German - Germany for Tasmota
-
- Copyright (C) 2019 VinceMasuka
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_DE_DE_H_
-#define _LANGUAGE_DE_DE_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.6.0.21
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1031
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "de"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "."
-#define D_MONTH_DAY_SEPARATOR "."
-#define D_DATE_TIME_SEPARATOR " "
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "So Mo Di Mi Do Fr Sa "
-#define D_MONTH3LIST "JanFebMärAprMaiJunJulAugSepOktNovDez"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Luftqualität"
-#define D_AP "AP" // Access Point
-#define D_AS "als"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blinken"
-#define D_BLINKOFF "BlinkenAus"
-#define D_BOOT_COUNT "Anzahl Startvorgänge"
-#define D_BRIGHTLIGHT "hell"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Knopf"
-#define D_BY "von" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Kanal"
-#define D_CO2 "CO²"
-#define D_CODE "code" // Button code
-#define D_COLDLIGHT "kalt"
-#define D_COMMAND "Befehl"
-#define D_CONNECTED "verbunden"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "zählen"
-#define D_COUNTER "Zähler"
-#define D_CURRENT "Strom" // As in Voltage and Current
-#define D_DATA "Daten"
-#define D_DARKLIGHT "dunkel"
-#define D_DEBUG "debug"
-#define D_DISABLED "deaktiviert"
-#define D_DISTANCE "Abstand"
-#define D_DNS_SERVER "DNS-Server"
-#define D_DONE "erledigt"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulation"
-#define D_ENABLED "aktiviert"
-#define D_ERASE "löschen"
-#define D_ERROR "Fehler"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "fehlgeschlagen"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback-Topic"
-#define D_FALSE "falsch"
-#define D_FILE "Datei"
-#define D_FLOW_RATE "Durchflussmenge"
-#define D_FREE_MEMORY "Freier Arbeitsspeicher"
-#define D_FREQUENCY "Frequenz"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Gruppe"
-#define D_HOST "Host"
-#define D_HOSTNAME "Hostname"
-#define D_HUMIDITY "Feuchtigkeit"
-#define D_ILLUMINANCE "Beleuchtungsintensität"
-#define D_IMMEDIATE "direkt" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infrarot"
-#define D_INITIALIZED "initialisiert"
-#define D_IP_ADDRESS "IP-Adresse"
-#define D_LIGHT "Licht"
-#define D_LWT "LWT"
-#define D_MODULE "Modul"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "Mehrfachdruck"
-#define D_NOISE "Lautstärke"
-#define D_NONE "keine"
-#define D_OFF "aus"
-#define D_OFFLINE "Offline"
-#define D_OK "OK"
-#define D_ON "an"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Passwort"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Leistungsfaktor"
-#define D_POWERUSAGE "Leistung"
-#define D_POWERUSAGE_ACTIVE "Wirkleistung"
-#define D_POWERUSAGE_APPARENT "Scheinleistung"
-#define D_POWERUSAGE_REACTIVE "Blindleistung"
-#define D_PRESSURE "Luftdruck"
-#define D_PRESSUREATSEALEVEL "Luftdruck auf Meereshöhe"
-#define D_PROGRAM_FLASH_SIZE "Ges. Flash Speicher"
-#define D_PROGRAM_SIZE "Ben. Flash Speicher"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Regen"
-#define D_RECEIVED "erhalten"
-#define D_RESTART "Neustart"
-#define D_RESTARTING "starte neu"
-#define D_RESTART_REASON "Grund für Neustart"
-#define D_RESTORE "Wiederherstellung"
-#define D_RETAINED "beibehalten"
-#define D_RULE "Regel"
-#define D_SAVE "Speichern"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSID"
-#define D_START "Start"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Subnetzmaske"
-#define D_SUBSCRIBE_TO "abonniere"
-#define D_UNSUBSCRIBE_FROM "löse abo. von"
-#define D_SUCCESSFUL "erfolgreich"
-#define D_SUNRISE "Sonnenaufgang"
-#define D_SUNSET "Sonnenuntergang"
-#define D_TEMPERATURE "Temperatur"
-#define D_TO "zu"
-#define D_TOGGLE "An/Aus"
-#define D_TOPIC "topic"
-#define D_TOTAL_USAGE "Gesamtverbrauch"
-#define D_TRANSMIT "Übertragen"
-#define D_TRUE "wahr"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "update"
-#define D_UPLOAD "Upload"
-#define D_UPTIME "Laufzeit"
-#define D_USER "Benutzer"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV-Index"
-#define D_UV_INDEX_1 "Niedrig"
-#define D_UV_INDEX_2 "Mittel"
-#define D_UV_INDEX_3 "Hoch"
-#define D_UV_INDEX_4 "Intensiv"
-#define D_UV_INDEX_5 "Gefährlich"
-#define D_UV_INDEX_6 "Schädlich"
-#define D_UV_INDEX_7 "Messwert!"
-#define D_UV_LEVEL "UV-Level"
-#define D_UV_POWER "UV Intensität"
-#define D_VERSION "Version"
-#define D_VOLTAGE "Spannung"
-#define D_WEIGHT "Gewicht"
-#define D_WARMLIGHT "warm"
-#define D_WEB_SERVER "Web-Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ACHTUNG: Diese Version unterstützt keine persistenten Einstellungen"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serielles Logging deaktiviert"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog-Logging aktiviert"
-
-#define D_SET_BAUDRATE_TO "Setze Baudrate auf"
-#define D_RECEIVED_TOPIC "empfangenes topic"
-#define D_DATA_SIZE "Datengröße"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Schleife blockiert."
-#define D_WPS_FAILED_WITH_STATUS "WPS fehlgeschlagen mit Status"
-#define D_ACTIVE_FOR_3_MINUTES "aktiv für 3 Minuten"
-#define D_FAILED_TO_START "Starten fehlgeschlagen"
-#define D_PATCH_ISSUE_2186 "Repariere Problem #2186"
-#define D_CONNECTING_TO_AP "verbinden mit AP"
-#define D_IN_MODE "in Modus"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Verbindung fehlgeschlagen, da keine IP-Adresse zugeteilt wurde"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Verbindung fehlgeschlagen, da AP nicht erreicht werden konnte"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbindung fehlgeschlagen, da das Passwort falsch ist"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Verbindung fehlgeschlagen, da der AP nicht antwortet (timeout)"
-#define D_ATTEMPTING_CONNECTION "Verbindungsversuch..."
-#define D_CHECKING_CONNECTION "Prüfe Verbindung..."
-#define D_QUERY_DONE "Suchanfrage abgeschlossen. MQTT-Services gefunden"
-#define D_MQTT_SERVICE_FOUND "MQTT-Service gefunden bei"
-#define D_FOUND_AT "gefunden bei"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog-Host nicht gefunden"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "in Flash gespeichert am"
-#define D_LOADED_FROM_FLASH_AT "aus Flash geladen am"
-#define D_USE_DEFAULTS "Standard verwenden"
-#define D_ERASED_SECTOR "gelöschter Sektor"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "JavaScript aktivieren um Tasmota benutzen zu können"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMUM-Firmware
bitte upgraden"
-#define D_WEBSERVER_ACTIVE_ON "Web-Server aktiv bei"
-#define D_WITH_IP_ADDRESS "mit IP-Adresse"
-#define D_WEBSERVER_STOPPED "Web-Server angehalten"
-#define D_FILE_NOT_FOUND "Datei nicht gefunden"
-#define D_REDIRECTED "umgeleitet zu captive portal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "WLAN-Manager AccessPoint gesetzt und behält Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "WLAN-Manager AccessPoint gesetzt"
-#define D_TRYING_TO_CONNECT "Versuche Gerät mit Netzwerk zu verbinden"
-
-#define D_RESTART_IN "Neustart in"
-#define D_SECONDS "Sekunden"
-#define D_DEVICE_WILL_RESTART "Gerät wird jetzt neu gestartet"
-#define D_BUTTON_TOGGLE "An/Aus"
-#define D_CONFIGURATION "Einstellungen"
-#define D_INFORMATION "Informationen"
-#define D_FIRMWARE_UPGRADE "Firmware Update"
-#define D_CONSOLE "Konsole"
-#define D_CONFIRM_RESTART "Wirklich neustarten?"
-
-#define D_CONFIGURE_MODULE "Gerät konfigurieren"
-#define D_CONFIGURE_WIFI "WLAN konfigurieren"
-#define D_CONFIGURE_MQTT "MQTT konfigurieren"
-#define D_CONFIGURE_DOMOTICZ "Domoticz konfigurieren"
-#define D_CONFIGURE_LOGGING "Logging konfigurieren"
-#define D_CONFIGURE_OTHER "Sonstige Konfiguration"
-#define D_CONFIRM_RESET_CONFIGURATION "Zurücksetzen der Konfiguration bestätigen"
-#define D_RESET_CONFIGURATION "Konfiguration zurücksetzen"
-#define D_BACKUP_CONFIGURATION "Konfiguration sichern"
-#define D_RESTORE_CONFIGURATION "Konfiguration wiederherstellen"
-#define D_MAIN_MENU "Hauptmenü"
-
-#define D_MODULE_PARAMETERS "Geräte-Einstellungen"
-#define D_MODULE_TYPE "Gerätetyp"
-#define D_PULLUP_ENABLE "Kein Taster/Schalter Pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "serieller Eingang [serial in]"
-#define D_SERIAL_OUT "serieller Ausgang [serial out]"
-
-#define D_WIFI_PARAMETERS "WLAN-Einstellungen"
-#define D_SCAN_FOR_WIFI_NETWORKS "WLAN-Netzwerk suchen und auswählen"
-#define D_SCAN_DONE "Suche abgeschlossen"
-#define D_NO_NETWORKS_FOUND "Keine Netzwerke gefunden"
-#define D_REFRESH_TO_SCAN_AGAIN "Aktualisieren, um erneut zu suchen"
-#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplizieren"
-#define D_SKIPPING_LOW_QUALITY "überspringe wegen niedriger Qualität"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA-PSK"
-#define D_WPA2_PSK "WPA2-PSK"
-#define D_AP1_SSID "WLAN 1 - SSID"
-#define D_AP1_PASSWORD "WLAN 1 - Passwort"
-#define D_AP2_SSID "WLAN 2 - SSID"
-#define D_AP2_PASSWORD "WLAN 2 - Passwort"
-
-#define D_MQTT_PARAMETERS "MQTT-Einstellungen"
-#define D_CLIENT "client"
-#define D_FULL_TOPIC "full topic"
-
-#define D_LOGGING_PARAMETERS "Logging-Einstellungen"
-#define D_SERIAL_LOG_LEVEL "Seriell-Log Level"
-#define D_MQTT_LOG_LEVEL "Mqtt-Log Level"
-#define D_WEB_LOG_LEVEL "Web-Log Level"
-#define D_SYS_LOG_LEVEL "Sys-Log Level"
-#define D_MORE_DEBUG "Mehr Details"
-#define D_SYSLOG_HOST "Sys-Log Host"
-#define D_SYSLOG_PORT "Sys-Log Port"
-#define D_TELEMETRY_PERIOD "Telemetrieperiode"
-
-#define D_OTHER_PARAMETERS "Sonstige Einstellungen"
-#define D_TEMPLATE "Vorlage"
-#define D_ACTIVATE "Aktivieren"
-#define D_WEB_ADMIN_PASSWORD "Passwort für Web Oberfläche"
-#define D_MQTT_ENABLE "MQTT aktivieren"
-#define D_FRIENDLY_NAME "Name [friendly name]"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "Einzelnes Gerät"
-#define D_MULTI_DEVICE "Mehrfachgerät"
-
-#define D_CONFIGURE_TEMPLATE "Vorlage konfigurieren"
-#define D_TEMPLATE_PARAMETERS "Vorlage Parameter"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "basiert auf"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Konfiguration speichern"
-#define D_CONFIGURATION_SAVED "Konfiguration gespeichert"
-#define D_CONFIGURATION_RESET "Konfiguration zurücksetzen"
-
-#define D_PROGRAM_VERSION "Tasmota Version"
-#define D_BUILD_DATE_AND_TIME "Build-Datum & -Uhrzeit"
-#define D_CORE_AND_SDK_VERSION "Core-/SDK-Version"
-#define D_FLASH_WRITE_COUNT "Anz. Flash Schreibzugriffe"
-#define D_MAC_ADDRESS "MAC-Adresse"
-#define D_MQTT_HOST "MQTT Host"
-#define D_MQTT_PORT "MQTT Port"
-#define D_MQTT_CLIENT "MQTT Client"
-#define D_MQTT_USER "MQTT Benutzer"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
-#define D_MDNS_DISCOVERY "mDNS-Ermittlung"
-#define D_MDNS_ADVERTISE "mDNS-Bekanntmachung"
-#define D_ESP_CHIP_ID "ESP Chip ID"
-#define D_FLASH_CHIP_ID "Flash Chip ID"
-#define D_FLASH_CHIP_SIZE "Realer Flash Speicher"
-#define D_FREE_PROGRAM_SPACE "Verf. Flash Speicher"
-
-#define D_UPGRADE_BY_WEBSERVER "Update über Web-Server"
-#define D_OTA_URL "OTA-URL"
-#define D_START_UPGRADE "Update starten"
-#define D_UPGRADE_BY_FILE_UPLOAD "Update Datei hochladen"
-#define D_UPLOAD_STARTED "Upload gestartet"
-#define D_UPGRADE_STARTED "Update gestartet"
-#define D_UPLOAD_DONE "Upload abgeschlossen"
-#define D_UPLOAD_ERR_1 "Keine Datei ausgewählt"
-#define D_UPLOAD_ERR_2 "Ungenügend Speicherplatz"
-#define D_UPLOAD_ERR_3 "Magic Byte ist nicht 0xE9"
-#define D_UPLOAD_ERR_4 "Datei überschreitet vorhdn. Flashspeicher"
-#define D_UPLOAD_ERR_5 "Upload Buffer Vergleich weicht ab"
-#define D_UPLOAD_ERR_6 "Upload fehlgeschlagen. Aktiviere logging 3"
-#define D_UPLOAD_ERR_7 "Upload abgebrochen"
-#define D_UPLOAD_ERR_8 "Datei ungültig"
-#define D_UPLOAD_ERR_9 "Datei zu groß"
-#define D_UPLOAD_ERR_10 "RF Chip init fehlgeschlagen"
-#define D_UPLOAD_ERR_11 "RF Chip löschen fehlgeschlagen"
-#define D_UPLOAD_ERR_12 "RF Chip beschreiben fehlgeschlagen"
-#define D_UPLOAD_ERR_13 "RF Firmware ungültig"
-#define D_UPLOAD_ERROR_CODE "Upload Fehler Nummer"
-
-#define D_ENTER_COMMAND "Befehl eingeben"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Aktivere Web Log Level 2 falls Reaktion erwartet"
-#define D_NEED_USER_AND_PASSWORD "Benötige user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "TLS-Fingerabdruck wird verifiziert..."
-#define D_TLS_CONNECT_FAILED_TO "TLS-Verbindung fehlgeschlagen an"
-#define D_RETRY_IN "Wiederversuch in"
-#define D_VERIFIED "verifiziert mit Fingerabdruck"
-#define D_INSECURE "unsichere Verbindung aufgrund ungültigen Fingerabdrucks"
-#define D_CONNECT_FAILED_TO "Verbindung fehlgeschlagen aufgrund von"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast deaktiviert"
-#define D_MULTICAST_REJOINED "Multicast (wieder-)verbunden"
-#define D_MULTICAST_JOIN_FAILED "Multicast Verbindung fehlgeschlagen"
-#define D_FAILED_TO_SEND_RESPONSE "Antwort senden fehlgeschlagen"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo-Setup"
-#define D_RESPONSE_SENT "Antwort gesendet"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue-Setup"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue-API nicht implementiert"
-#define D_HUE_API "Hue-API"
-#define D_HUE_POST_ARGS "Hue POST-Argumente"
-#define D_3_RESPONSE_PACKETS_SENT "3 Antwortpakete gesendet"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz-Parameter"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Update Zeitplan"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Zeitplan konfigurieren"
-#define D_TIMER_PARAMETERS "Zeitplan-Einstellungen"
-#define D_TIMER_ENABLE "Zeitpläne aktivieren"
-#define D_TIMER_ARM "Aktiv"
-#define D_TIMER_TIME "Uhrzeit"
-#define D_TIMER_DAYS "Wochentage"
-#define D_TIMER_REPEAT "Wiederholen"
-#define D_TIMER_OUTPUT "Ausgang"
-#define D_TIMER_ACTION "Aktion"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX konfigurieren"
-#define D_KNX_PARAMETERS "KNX-Parameter"
-#define D_KNX_GENERAL_CONFIG "Allgemein"
-#define D_KNX_PHYSICAL_ADDRESS "Physikalische Adresse"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Muss einmalig im KNX-Netzwerk sein )"
-#define D_KNX_ENABLE "KNX aktivieren"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Daten zum Senden an Gruppenadresse"
-#define D_ADD "Hinzufügen"
-#define D_DELETE "Löschen"
-#define D_REPLY "Antworten"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppenadresse zum Emfang von Daten"
-#define D_RECEIVED_FROM "Empfangen von"
-#define D_KNX_COMMAND_WRITE "Schreiben"
-#define D_KNX_COMMAND_READ "Lesen"
-#define D_KNX_COMMAND_OTHER "Andere"
-#define D_SENT_TO "gesendet an"
-#define D_KNX_WARNING "Die Gruppenadresse (0/0/0) ist reserviert und kann nicht verwendet werden."
-#define D_KNX_ENHANCEMENT "Erweiterte Kommunikation"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energie heute"
-#define D_ENERGY_YESTERDAY "Energie gestern"
-#define D_ENERGY_TOTAL "Energie insgesamt"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Öffnen"
-#define D_CLOSE "Schliessen"
-#define D_DOMOTICZ_SHUTTER "Rollo"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Konfiguriere PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 Parameter"
-#define D_INVERT_PORTS "Invertiere Ports"
-#define D_DEVICE "Gerät"
-#define D_DEVICE_INPUT "Eingang"
-#define D_DEVICE_OUTPUT "Ausgang"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor beschäftigt"
-#define D_SENSOR_CRC_ERROR "Sensor CRC-Fehler"
-#define D_SENSORS_FOUND "Sensor gefunden"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Timeout während Warten auf"
-#define D_START_SIGNAL_LOW "Startausschlag niedrig"
-#define D_START_SIGNAL_HIGH "Startausschlag hoch"
-#define D_PULSE "Puls"
-#define D_CHECKSUM_FAILURE "Checksum-Fehler"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor hat ACK-Befehl nicht ausgeführt"
-#define D_SHT1X_FOUND "SHT1X gefunden"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Partikel"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Beschl. X-Achse"
-#define D_AY_AXIS "Beschl. Y-Achse"
-#define D_AZ_AXIS "Beschl. Z-Achse"
-#define D_GX_AXIS "Gyroskop X-Achse"
-#define D_GY_AXIS "Gyroskop Y-Achse"
-#define D_GZ_AXIS "Gyroskop Z-Achse"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Wägegut entfernen"
-#define D_HX_CAL_REFERENCE "Referenzgewicht auflegen"
-#define D_HX_CAL_DONE "kalibriert"
-#define D_HX_CAL_FAIL "Kalibrierung fehlgeschlagen"
-#define D_RESET_HX711 "Tara"
-#define D_CONFIGURE_HX711 "Tara Wert?"
-#define D_HX711_PARAMETERS "Skala Parameter"
-#define D_ITEM_WEIGHT "Wägegut Gewicht"
-#define D_REFERENCE_WEIGHT "Referenz Gewicht"
-#define D_CALIBRATE "kalibriert"
-#define D_CALIBRATION "Kalibrierung"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Wind Richtung"
-#define D_TX20_WIND_SPEED "Windgeschwindigkeit"
-#define D_TX20_WIND_SPEED_AVG "Ø Windgeschwindigkeit"
-#define D_TX20_WIND_SPEED_MAX "max Windgeschwindigkeit"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "O"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "h"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h"
-#define D_UNIT_KILOOHM "kΩ"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
-#define D_UNIT_MICROMETER "µm"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "s"
-#define D_UNIT_SECTORS "Sektoren"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phasenwinkel"
-#define D_IMPORT_ACTIVE "Importiere Wirk"
-#define D_EXPORT_ACTIVE "Exportiere Wirk"
-#define D_IMPORT_REACTIVE "Importiere Blind"
-#define D_EXPORT_REACTIVE "Exportiere Blind"
-#define D_TOTAL_REACTIVE "Total Blind"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Grad"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Spannung"
-#define D_PV1_CURRENT "PV1 Strom"
-#define D_PV1_POWER "PV1 Leistung"
-#define D_PV2_VOLTAGE "PV2 Spannung"
-#define D_PV2_CURRENT "PV2 Strom"
-#define D_PV2_POWER "PV2 Leistung"
-#define D_SOLAR_POWER "solare Leistung"
-#define D_INVERTER_POWER "Inverter Leistung"
-#define D_STATUS "Status"
-#define D_WAITING "warten"
-#define D_CHECKING "prüfen"
-#define D_WORKING "arbeitet"
-#define D_FAILURE "Fehler"
-#define D_SOLAX_ERROR_0 "Kein Fehler Code"
-#define D_SOLAX_ERROR_1 "Fehler im Solarstromnetz"
-#define D_SOLAX_ERROR_2 "Spannungsfehler im Solarstromnetz"
-#define D_SOLAX_ERROR_3 "Frequenzfehler im Solarstromnetz"
-#define D_SOLAX_ERROR_4 "Pv Spannungsfehler"
-#define D_SOLAX_ERROR_5 "Isolationsfehler"
-#define D_SOLAX_ERROR_6 "Übertemperatur"
-#define D_SOLAX_ERROR_7 "Lüfterfehler"
-#define D_SOLAX_ERROR_8 "sonstiger Fehler"
-
-#endif // _LANGUAGE_DE_DE_H_
+/*
+ de-DE.h - localization for German - Germany for Tasmota
+
+ Copyright (C) 2019 VinceMasuka
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_DE_DE_H_
+#define _LANGUAGE_DE_DE_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.6.0.21
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1031
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "de"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "."
+#define D_MONTH_DAY_SEPARATOR "."
+#define D_DATE_TIME_SEPARATOR " "
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "So Mo Di Mi Do Fr Sa "
+#define D_MONTH3LIST "JanFebMärAprMaiJunJulAugSepOktNovDez"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Luftqualität"
+#define D_AP "AP" // Access Point
+#define D_AS "als"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blinken"
+#define D_BLINKOFF "BlinkenAus"
+#define D_BOOT_COUNT "Anzahl Startvorgänge"
+#define D_BRIGHTLIGHT "hell"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Knopf"
+#define D_BY "von" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Kanal"
+#define D_CO2 "CO²"
+#define D_CODE "code" // Button code
+#define D_COLDLIGHT "kalt"
+#define D_COMMAND "Befehl"
+#define D_CONNECTED "verbunden"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "zählen"
+#define D_COUNTER "Zähler"
+#define D_CURRENT "Strom" // As in Voltage and Current
+#define D_DATA "Daten"
+#define D_DARKLIGHT "dunkel"
+#define D_DEBUG "debug"
+#define D_DISABLED "deaktiviert"
+#define D_DISTANCE "Abstand"
+#define D_DNS_SERVER "DNS-Server"
+#define D_DONE "erledigt"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulation"
+#define D_ENABLED "aktiviert"
+#define D_ERASE "löschen"
+#define D_ERROR "Fehler"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "fehlgeschlagen"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback-Topic"
+#define D_FALSE "falsch"
+#define D_FILE "Datei"
+#define D_FLOW_RATE "Durchflussmenge"
+#define D_FREE_MEMORY "Freier Arbeitsspeicher"
+#define D_FREQUENCY "Frequenz"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Gruppe"
+#define D_HOST "Host"
+#define D_HOSTNAME "Hostname"
+#define D_HUMIDITY "Feuchtigkeit"
+#define D_ILLUMINANCE "Beleuchtungsintensität"
+#define D_IMMEDIATE "direkt" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infrarot"
+#define D_INITIALIZED "initialisiert"
+#define D_IP_ADDRESS "IP-Adresse"
+#define D_LIGHT "Licht"
+#define D_LWT "LWT"
+#define D_MODULE "Modul"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "Mehrfachdruck"
+#define D_NOISE "Lautstärke"
+#define D_NONE "keine"
+#define D_OFF "aus"
+#define D_OFFLINE "Offline"
+#define D_OK "OK"
+#define D_ON "an"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Passwort"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Leistungsfaktor"
+#define D_POWERUSAGE "Leistung"
+#define D_POWERUSAGE_ACTIVE "Wirkleistung"
+#define D_POWERUSAGE_APPARENT "Scheinleistung"
+#define D_POWERUSAGE_REACTIVE "Blindleistung"
+#define D_PRESSURE "Luftdruck"
+#define D_PRESSUREATSEALEVEL "Luftdruck auf Meereshöhe"
+#define D_PROGRAM_FLASH_SIZE "Ges. Flash Speicher"
+#define D_PROGRAM_SIZE "Ben. Flash Speicher"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Regen"
+#define D_RECEIVED "erhalten"
+#define D_RESTART "Neustart"
+#define D_RESTARTING "starte neu"
+#define D_RESTART_REASON "Grund für Neustart"
+#define D_RESTORE "Wiederherstellung"
+#define D_RETAINED "beibehalten"
+#define D_RULE "Regel"
+#define D_SAVE "Speichern"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSID"
+#define D_START "Start"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Subnetzmaske"
+#define D_SUBSCRIBE_TO "abonniere"
+#define D_UNSUBSCRIBE_FROM "löse abo. von"
+#define D_SUCCESSFUL "erfolgreich"
+#define D_SUNRISE "Sonnenaufgang"
+#define D_SUNSET "Sonnenuntergang"
+#define D_TEMPERATURE "Temperatur"
+#define D_TO "zu"
+#define D_TOGGLE "An/Aus"
+#define D_TOPIC "topic"
+#define D_TOTAL_USAGE "Gesamtverbrauch"
+#define D_TRANSMIT "Übertragen"
+#define D_TRUE "wahr"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "update"
+#define D_UPLOAD "Upload"
+#define D_UPTIME "Laufzeit"
+#define D_USER "Benutzer"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV-Index"
+#define D_UV_INDEX_1 "Niedrig"
+#define D_UV_INDEX_2 "Mittel"
+#define D_UV_INDEX_3 "Hoch"
+#define D_UV_INDEX_4 "Intensiv"
+#define D_UV_INDEX_5 "Gefährlich"
+#define D_UV_INDEX_6 "Schädlich"
+#define D_UV_INDEX_7 "Messwert!"
+#define D_UV_LEVEL "UV-Level"
+#define D_UV_POWER "UV Intensität"
+#define D_VERSION "Version"
+#define D_VOLTAGE "Spannung"
+#define D_WEIGHT "Gewicht"
+#define D_WARMLIGHT "warm"
+#define D_WEB_SERVER "Web-Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ACHTUNG: Diese Version unterstützt keine persistenten Einstellungen"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serielles Logging deaktiviert"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog-Logging aktiviert"
+
+#define D_SET_BAUDRATE_TO "Setze Baudrate auf"
+#define D_RECEIVED_TOPIC "empfangenes topic"
+#define D_DATA_SIZE "Datengröße"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Schleife blockiert."
+#define D_WPS_FAILED_WITH_STATUS "WPS fehlgeschlagen mit Status"
+#define D_ACTIVE_FOR_3_MINUTES "aktiv für 3 Minuten"
+#define D_FAILED_TO_START "Starten fehlgeschlagen"
+#define D_PATCH_ISSUE_2186 "Repariere Problem #2186"
+#define D_CONNECTING_TO_AP "verbinden mit AP"
+#define D_IN_MODE "in Modus"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Verbindung fehlgeschlagen, da keine IP-Adresse zugeteilt wurde"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Verbindung fehlgeschlagen, da AP nicht erreicht werden konnte"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbindung fehlgeschlagen, da das Passwort falsch ist"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Verbindung fehlgeschlagen, da der AP nicht antwortet (timeout)"
+#define D_ATTEMPTING_CONNECTION "Verbindungsversuch..."
+#define D_CHECKING_CONNECTION "Prüfe Verbindung..."
+#define D_QUERY_DONE "Suchanfrage abgeschlossen. MQTT-Services gefunden"
+#define D_MQTT_SERVICE_FOUND "MQTT-Service gefunden bei"
+#define D_FOUND_AT "gefunden bei"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog-Host nicht gefunden"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "in Flash gespeichert am"
+#define D_LOADED_FROM_FLASH_AT "aus Flash geladen am"
+#define D_USE_DEFAULTS "Standard verwenden"
+#define D_ERASED_SECTOR "gelöschter Sektor"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "JavaScript aktivieren um Tasmota benutzen zu können"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMUM-Firmware
bitte upgraden"
+#define D_WEBSERVER_ACTIVE_ON "Web-Server aktiv bei"
+#define D_WITH_IP_ADDRESS "mit IP-Adresse"
+#define D_WEBSERVER_STOPPED "Web-Server angehalten"
+#define D_FILE_NOT_FOUND "Datei nicht gefunden"
+#define D_REDIRECTED "umgeleitet zu captive portal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "WLAN-Manager AccessPoint gesetzt und behält Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "WLAN-Manager AccessPoint gesetzt"
+#define D_TRYING_TO_CONNECT "Versuche Gerät mit Netzwerk zu verbinden"
+
+#define D_RESTART_IN "Neustart in"
+#define D_SECONDS "Sekunden"
+#define D_DEVICE_WILL_RESTART "Gerät wird jetzt neu gestartet"
+#define D_BUTTON_TOGGLE "An/Aus"
+#define D_CONFIGURATION "Einstellungen"
+#define D_INFORMATION "Informationen"
+#define D_FIRMWARE_UPGRADE "Firmware Update"
+#define D_CONSOLE "Konsole"
+#define D_CONFIRM_RESTART "Wirklich neustarten?"
+
+#define D_CONFIGURE_MODULE "Gerät konfigurieren"
+#define D_CONFIGURE_WIFI "WLAN konfigurieren"
+#define D_CONFIGURE_MQTT "MQTT konfigurieren"
+#define D_CONFIGURE_DOMOTICZ "Domoticz konfigurieren"
+#define D_CONFIGURE_LOGGING "Logging konfigurieren"
+#define D_CONFIGURE_OTHER "Sonstige Konfiguration"
+#define D_CONFIRM_RESET_CONFIGURATION "Zurücksetzen der Konfiguration bestätigen"
+#define D_RESET_CONFIGURATION "Konfiguration zurücksetzen"
+#define D_BACKUP_CONFIGURATION "Konfiguration sichern"
+#define D_RESTORE_CONFIGURATION "Konfiguration wiederherstellen"
+#define D_MAIN_MENU "Hauptmenü"
+
+#define D_MODULE_PARAMETERS "Geräte-Einstellungen"
+#define D_MODULE_TYPE "Gerätetyp"
+#define D_PULLUP_ENABLE "Kein Taster/Schalter Pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "serieller Eingang [serial in]"
+#define D_SERIAL_OUT "serieller Ausgang [serial out]"
+
+#define D_WIFI_PARAMETERS "WLAN-Einstellungen"
+#define D_SCAN_FOR_WIFI_NETWORKS "WLAN-Netzwerk suchen und auswählen"
+#define D_SCAN_DONE "Suche abgeschlossen"
+#define D_NO_NETWORKS_FOUND "Keine Netzwerke gefunden"
+#define D_REFRESH_TO_SCAN_AGAIN "Aktualisieren, um erneut zu suchen"
+#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplizieren"
+#define D_SKIPPING_LOW_QUALITY "überspringe wegen niedriger Qualität"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA-PSK"
+#define D_WPA2_PSK "WPA2-PSK"
+#define D_AP1_SSID "WLAN 1 - SSID"
+#define D_AP1_PASSWORD "WLAN 1 - Passwort"
+#define D_AP2_SSID "WLAN 2 - SSID"
+#define D_AP2_PASSWORD "WLAN 2 - Passwort"
+
+#define D_MQTT_PARAMETERS "MQTT-Einstellungen"
+#define D_CLIENT "client"
+#define D_FULL_TOPIC "full topic"
+
+#define D_LOGGING_PARAMETERS "Logging-Einstellungen"
+#define D_SERIAL_LOG_LEVEL "Seriell-Log Level"
+#define D_MQTT_LOG_LEVEL "Mqtt-Log Level"
+#define D_WEB_LOG_LEVEL "Web-Log Level"
+#define D_SYS_LOG_LEVEL "Sys-Log Level"
+#define D_MORE_DEBUG "Mehr Details"
+#define D_SYSLOG_HOST "Sys-Log Host"
+#define D_SYSLOG_PORT "Sys-Log Port"
+#define D_TELEMETRY_PERIOD "Telemetrieperiode"
+
+#define D_OTHER_PARAMETERS "Sonstige Einstellungen"
+#define D_TEMPLATE "Vorlage"
+#define D_ACTIVATE "Aktivieren"
+#define D_WEB_ADMIN_PASSWORD "Passwort für Web Oberfläche"
+#define D_MQTT_ENABLE "MQTT aktivieren"
+#define D_FRIENDLY_NAME "Name [friendly name]"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "Einzelnes Gerät"
+#define D_MULTI_DEVICE "Mehrfachgerät"
+
+#define D_CONFIGURE_TEMPLATE "Vorlage konfigurieren"
+#define D_TEMPLATE_PARAMETERS "Vorlage Parameter"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "basiert auf"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Konfiguration speichern"
+#define D_CONFIGURATION_SAVED "Konfiguration gespeichert"
+#define D_CONFIGURATION_RESET "Konfiguration zurücksetzen"
+
+#define D_PROGRAM_VERSION "Tasmota Version"
+#define D_BUILD_DATE_AND_TIME "Build-Datum & -Uhrzeit"
+#define D_CORE_AND_SDK_VERSION "Core-/SDK-Version"
+#define D_FLASH_WRITE_COUNT "Anz. Flash Schreibzugriffe"
+#define D_MAC_ADDRESS "MAC-Adresse"
+#define D_MQTT_HOST "MQTT Host"
+#define D_MQTT_PORT "MQTT Port"
+#define D_MQTT_CLIENT "MQTT Client"
+#define D_MQTT_USER "MQTT Benutzer"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
+#define D_MDNS_DISCOVERY "mDNS-Ermittlung"
+#define D_MDNS_ADVERTISE "mDNS-Bekanntmachung"
+#define D_ESP_CHIP_ID "ESP Chip ID"
+#define D_FLASH_CHIP_ID "Flash Chip ID"
+#define D_FLASH_CHIP_SIZE "Realer Flash Speicher"
+#define D_FREE_PROGRAM_SPACE "Verf. Flash Speicher"
+
+#define D_UPGRADE_BY_WEBSERVER "Update über Web-Server"
+#define D_OTA_URL "OTA-URL"
+#define D_START_UPGRADE "Update starten"
+#define D_UPGRADE_BY_FILE_UPLOAD "Update Datei hochladen"
+#define D_UPLOAD_STARTED "Upload gestartet"
+#define D_UPGRADE_STARTED "Update gestartet"
+#define D_UPLOAD_DONE "Upload abgeschlossen"
+#define D_UPLOAD_ERR_1 "Keine Datei ausgewählt"
+#define D_UPLOAD_ERR_2 "Ungenügend Speicherplatz"
+#define D_UPLOAD_ERR_3 "Magic Byte ist nicht 0xE9"
+#define D_UPLOAD_ERR_4 "Datei überschreitet vorhdn. Flashspeicher"
+#define D_UPLOAD_ERR_5 "Upload Buffer Vergleich weicht ab"
+#define D_UPLOAD_ERR_6 "Upload fehlgeschlagen. Aktiviere logging 3"
+#define D_UPLOAD_ERR_7 "Upload abgebrochen"
+#define D_UPLOAD_ERR_8 "Datei ungültig"
+#define D_UPLOAD_ERR_9 "Datei zu groß"
+#define D_UPLOAD_ERR_10 "RF Chip init fehlgeschlagen"
+#define D_UPLOAD_ERR_11 "RF Chip löschen fehlgeschlagen"
+#define D_UPLOAD_ERR_12 "RF Chip beschreiben fehlgeschlagen"
+#define D_UPLOAD_ERR_13 "RF Firmware ungültig"
+#define D_UPLOAD_ERROR_CODE "Upload Fehler Nummer"
+
+#define D_ENTER_COMMAND "Befehl eingeben"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Aktivere Web Log Level 2 falls Reaktion erwartet"
+#define D_NEED_USER_AND_PASSWORD "Benötige user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "TLS-Fingerabdruck wird verifiziert..."
+#define D_TLS_CONNECT_FAILED_TO "TLS-Verbindung fehlgeschlagen an"
+#define D_RETRY_IN "Wiederversuch in"
+#define D_VERIFIED "verifiziert mit Fingerabdruck"
+#define D_INSECURE "unsichere Verbindung aufgrund ungültigen Fingerabdrucks"
+#define D_CONNECT_FAILED_TO "Verbindung fehlgeschlagen aufgrund von"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast deaktiviert"
+#define D_MULTICAST_REJOINED "Multicast (wieder-)verbunden"
+#define D_MULTICAST_JOIN_FAILED "Multicast Verbindung fehlgeschlagen"
+#define D_FAILED_TO_SEND_RESPONSE "Antwort senden fehlgeschlagen"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo-Setup"
+#define D_RESPONSE_SENT "Antwort gesendet"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue-Setup"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue-API nicht implementiert"
+#define D_HUE_API "Hue-API"
+#define D_HUE_POST_ARGS "Hue POST-Argumente"
+#define D_3_RESPONSE_PACKETS_SENT "3 Antwortpakete gesendet"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz-Parameter"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Update Zeitplan"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Zeitplan konfigurieren"
+#define D_TIMER_PARAMETERS "Zeitplan-Einstellungen"
+#define D_TIMER_ENABLE "Zeitpläne aktivieren"
+#define D_TIMER_ARM "Aktiv"
+#define D_TIMER_TIME "Uhrzeit"
+#define D_TIMER_DAYS "Wochentage"
+#define D_TIMER_REPEAT "Wiederholen"
+#define D_TIMER_OUTPUT "Ausgang"
+#define D_TIMER_ACTION "Aktion"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX konfigurieren"
+#define D_KNX_PARAMETERS "KNX-Parameter"
+#define D_KNX_GENERAL_CONFIG "Allgemein"
+#define D_KNX_PHYSICAL_ADDRESS "Physikalische Adresse"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Muss einmalig im KNX-Netzwerk sein )"
+#define D_KNX_ENABLE "KNX aktivieren"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Daten zum Senden an Gruppenadresse"
+#define D_ADD "Hinzufügen"
+#define D_DELETE "Löschen"
+#define D_REPLY "Antworten"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppenadresse zum Emfang von Daten"
+#define D_RECEIVED_FROM "Empfangen von"
+#define D_KNX_COMMAND_WRITE "Schreiben"
+#define D_KNX_COMMAND_READ "Lesen"
+#define D_KNX_COMMAND_OTHER "Andere"
+#define D_SENT_TO "gesendet an"
+#define D_KNX_WARNING "Die Gruppenadresse (0/0/0) ist reserviert und kann nicht verwendet werden."
+#define D_KNX_ENHANCEMENT "Erweiterte Kommunikation"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energie heute"
+#define D_ENERGY_YESTERDAY "Energie gestern"
+#define D_ENERGY_TOTAL "Energie insgesamt"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Öffnen"
+#define D_CLOSE "Schliessen"
+#define D_DOMOTICZ_SHUTTER "Rollo"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Konfiguriere PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 Parameter"
+#define D_INVERT_PORTS "Invertiere Ports"
+#define D_DEVICE "Gerät"
+#define D_DEVICE_INPUT "Eingang"
+#define D_DEVICE_OUTPUT "Ausgang"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor beschäftigt"
+#define D_SENSOR_CRC_ERROR "Sensor CRC-Fehler"
+#define D_SENSORS_FOUND "Sensor gefunden"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Timeout während Warten auf"
+#define D_START_SIGNAL_LOW "Startausschlag niedrig"
+#define D_START_SIGNAL_HIGH "Startausschlag hoch"
+#define D_PULSE "Puls"
+#define D_CHECKSUM_FAILURE "Checksum-Fehler"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor hat ACK-Befehl nicht ausgeführt"
+#define D_SHT1X_FOUND "SHT1X gefunden"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Partikel"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Beschl. X-Achse"
+#define D_AY_AXIS "Beschl. Y-Achse"
+#define D_AZ_AXIS "Beschl. Z-Achse"
+#define D_GX_AXIS "Gyroskop X-Achse"
+#define D_GY_AXIS "Gyroskop Y-Achse"
+#define D_GZ_AXIS "Gyroskop Z-Achse"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Wägegut entfernen"
+#define D_HX_CAL_REFERENCE "Referenzgewicht auflegen"
+#define D_HX_CAL_DONE "kalibriert"
+#define D_HX_CAL_FAIL "Kalibrierung fehlgeschlagen"
+#define D_RESET_HX711 "Tara"
+#define D_CONFIGURE_HX711 "Tara Wert?"
+#define D_HX711_PARAMETERS "Skala Parameter"
+#define D_ITEM_WEIGHT "Wägegut Gewicht"
+#define D_REFERENCE_WEIGHT "Referenz Gewicht"
+#define D_CALIBRATE "kalibriert"
+#define D_CALIBRATION "Kalibrierung"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Wind Richtung"
+#define D_TX20_WIND_SPEED "Windgeschwindigkeit"
+#define D_TX20_WIND_SPEED_AVG "Ø Windgeschwindigkeit"
+#define D_TX20_WIND_SPEED_MAX "max Windgeschwindigkeit"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "O"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "h"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h"
+#define D_UNIT_KILOOHM "kΩ"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
+#define D_UNIT_MICROMETER "µm"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "s"
+#define D_UNIT_SECTORS "Sektoren"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phasenwinkel"
+#define D_IMPORT_ACTIVE "Importiere Wirk"
+#define D_EXPORT_ACTIVE "Exportiere Wirk"
+#define D_IMPORT_REACTIVE "Importiere Blind"
+#define D_EXPORT_REACTIVE "Exportiere Blind"
+#define D_TOTAL_REACTIVE "Total Blind"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Grad"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Spannung"
+#define D_PV1_CURRENT "PV1 Strom"
+#define D_PV1_POWER "PV1 Leistung"
+#define D_PV2_VOLTAGE "PV2 Spannung"
+#define D_PV2_CURRENT "PV2 Strom"
+#define D_PV2_POWER "PV2 Leistung"
+#define D_SOLAR_POWER "solare Leistung"
+#define D_INVERTER_POWER "Inverter Leistung"
+#define D_STATUS "Status"
+#define D_WAITING "warten"
+#define D_CHECKING "prüfen"
+#define D_WORKING "arbeitet"
+#define D_FAILURE "Fehler"
+#define D_SOLAX_ERROR_0 "Kein Fehler Code"
+#define D_SOLAX_ERROR_1 "Fehler im Solarstromnetz"
+#define D_SOLAX_ERROR_2 "Spannungsfehler im Solarstromnetz"
+#define D_SOLAX_ERROR_3 "Frequenzfehler im Solarstromnetz"
+#define D_SOLAX_ERROR_4 "Pv Spannungsfehler"
+#define D_SOLAX_ERROR_5 "Isolationsfehler"
+#define D_SOLAX_ERROR_6 "Übertemperatur"
+#define D_SOLAX_ERROR_7 "Lüfterfehler"
+#define D_SOLAX_ERROR_8 "sonstiger Fehler"
+
+#endif // _LANGUAGE_DE_DE_H_
diff --git a/tasmota/language/el-GR.h b/tasmota/language/el-GR.h
index 2ae0bef38..f8b9c9614 100644
--- a/tasmota/language/el-GR.h
+++ b/tasmota/language/el-GR.h
@@ -1,703 +1,701 @@
-/*
- el-GR.h - localization for Greek - Greece for Tasmota
-
- Copyright (C) 2019 Theo Arends, translated by Nick Galfas
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_EL_GR_H_
-#define _LANGUAGE_EL_GR_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.5.0
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1032
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "el"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "ΚυρΔευΤριΤετΠεμΠαρΣαβ"
-#define D_MONTH3LIST "ΙανΦεβΜαρΑπρΜαϊΙονΙολΑυγΣεπΟκτΝοεΔεκ"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Διαχειριστής"
-#define D_AIR_QUALITY "Ποιότητα αέρα"
-#define D_AP "AP" // Access Point
-#define D_AS "ως"
-#define D_AUTO "ΑΥΤΟΜΑΤΟ"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Καταμέτρηση εκκινήσεων"
-#define D_BRIGHTLIGHT "Φωτεινό"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Πλήκτρο"
-#define D_BY "από" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Κελσίου"
-#define D_CHANNEL "Κανάλι"
-#define D_CO2 "Διοξείδιο του άνθρακα"
-#define D_CODE "κώδικας" // Button code
-#define D_COLDLIGHT "Ψυχρό"
-#define D_COMMAND "Εντολή"
-#define D_CONNECTED "Συνδεδεμένο"
-#define D_COUNT "Μέτρηση"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNTER "Μετρητής"
-#define D_CURRENT "Ένταση" // As in Voltage and Current
-#define D_DATA "Δεδομένα"
-#define D_DARKLIGHT "Σκοτεινό"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Ανενεργό"
-#define D_DISTANCE "Απόσταση"
-#define D_DNS_SERVER "Διακομιστής DNS"
-#define D_DONE "Ολοκληρώθηκε"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Εξομoίωση"
-#define D_ENABLED "Ενεργό"
-#define D_ERASE "Διαγραφή"
-#define D_ERROR "Σφάλμα"
-#define D_FAHRENHEIT "Φαρενάιτ"
-#define D_FAILED "Απέτυχε"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback Topic"
-#define D_FALSE "Ψευδές"
-#define D_FILE "Αρχείο"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Ελεύθερη μνήμη"
-#define D_FREQUENCY "Συχνότητα"
-#define D_GAS "Αέριο"
-#define D_GATEWAY "Πύλη"
-#define D_GROUP "Ομάδα"
-#define D_HOST "Host"
-#define D_HOSTNAME "Hostname"
-#define D_HUMIDITY "Υγρασία"
-#define D_ILLUMINANCE "Φωτεινότητα"
-#define D_IMMEDIATE "άμεσο" // Button immediate
-#define D_INDEX "Κατάλογος"
-#define D_INFO "Πληροφορίες"
-#define D_INFRARED "Υπέρυθρο"
-#define D_INITIALIZED "Αρχικοποιήθηκε"
-#define D_IP_ADDRESS "Διεύθυνση IP"
-#define D_LIGHT "Φως"
-#define D_LWT "LWT"
-#define D_MODULE "Μονάδα"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "ανίχνευση για πολλαπλά πατήματα"
-#define D_NOISE "Θόρυβος"
-#define D_NONE "Κανένα"
-#define D_OFF "Off"
-#define D_OFFLINE "Offline"
-#define D_OK "Ok"
-#define D_ON "On"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Κωδικός"
-#define D_PORT "Θύρα"
-#define D_POWER_FACTOR "Συντελεστής Ισχύος"
-#define D_POWERUSAGE "Ισχύς"
-#define D_POWERUSAGE_ACTIVE "Ενεργός ισχύς"
-#define D_POWERUSAGE_APPARENT "Φαινόμενη ισχύς"
-#define D_POWERUSAGE_REACTIVE "Άεργη ισχύς"
-#define D_PRESSURE "Πίεση"
-#define D_PRESSUREATSEALEVEL "Πίεση στo επίπεδο θάλασσας"
-#define D_PROGRAM_FLASH_SIZE "Μέγεθος προγράμματος στη Flash"
-#define D_PROGRAM_SIZE "Μέγεθος προγράμματος"
-#define D_PROJECT "Έργο"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Ελήφθη"
-#define D_RESTART "Επανεκκίνηση"
-#define D_RESTARTING "Επανεκκινεί"
-#define D_RESTART_REASON "Αιτία επανεκκίνησης"
-#define D_RESTORE "επαναφορά"
-#define D_RETAINED "διακράτηση"
-#define D_RULE "Κανόνας"
-#define D_SAVE "Αποθήκευση"
-#define D_SENSOR "Αισθητήρας"
-#define D_SSID "SSId"
-#define D_START "Εκκίνηση"
-#define D_STD_TIME "STD"
-#define D_STOP "Τερματισμός"
-#define D_SUBNET_MASK "Μάσκα υποδικτύου"
-#define D_SUBSCRIBE_TO "Εγγραφή στο"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Επιτυχές"
-#define D_SUNRISE "Σούρουπο"
-#define D_SUNSET "Ηλιοβασίλεμα"
-#define D_TEMPERATURE "Θερμοκρασία"
-#define D_TO "έως"
-#define D_TOGGLE "Εναλλαγή"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Μετάδοση"
-#define D_TRUE "Αληθές"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "αναβάθμιση"
-#define D_UPLOAD "Ανέβασμα"
-#define D_UPTIME "Χρόνος λειτουργίας"
-#define D_USER "Χρήστης"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Δείκτης UV"
-#define D_UV_INDEX_1 "Χαμηλό"
-#define D_UV_INDEX_2 "Μέτριο"
-#define D_UV_INDEX_3 "Υψηλό"
-#define D_UV_INDEX_4 "Κίνδυνος"
-#define D_UV_INDEX_5 "Έγκαυμα L1/2"
-#define D_UV_INDEX_6 "Έγκαυμα L3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "Επίπεδο UV"
-#define D_UV_POWER "Ένταση UV"
-#define D_VERSION "Έκδοση"
-#define D_VOLTAGE "Τάση"
-#define D_WEIGHT "Βάρος"
-#define D_WARMLIGHT "Θερμό"
-#define D_WEB_SERVER "Διακομιστής Web"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ΠΡΟΕΙΔΟΠΟΙΗΣΗ Αυτή η έκδοση δεν αποθηκεύει τις ρυθμίσεις"
-#define D_LEVEL_10 "επίπεδο 1-0"
-#define D_LEVEL_01 "επίπεδο 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Η καταγραφή σειριακής θύρας είναι απενεργοποιημένη"
-#define D_SYSLOG_LOGGING_REENABLED "Η καταγραφή Syslog επαναενεργοποιήθηκε"
-
-#define D_SET_BAUDRATE_TO "Ορισμός Baudrate σε"
-#define D_RECEIVED_TOPIC "Received Topic"
-#define D_DATA_SIZE "Μέγεθος δεδομένων"
-#define D_ANALOG_INPUT "Αναλογικό"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "Το WPSconfig ΑΠΕΤΥΧΕ με status"
-#define D_ACTIVE_FOR_3_MINUTES "ενεργό για 3 λεπτά"
-#define D_FAILED_TO_START "απέτυχε να εκκινήσει"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "Συνδέεται στο AP"
-#define D_IN_MODE "σε mode"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Αποτυχία σύνδεσης, δεν απονεμήθηκε διεύθυνση IP"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Αποτυχία σύνδεσης, δεν ανταποκρίνεται το AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Αποτυχία σύνδεσης, λάθος κωδικός για το AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Αποτυχία σύνδεσης, λήξη ορίου απόκρισης από το AP"
-#define D_ATTEMPTING_CONNECTION "Προσπάθεια για σύνδεση..."
-#define D_CHECKING_CONNECTION "Έλεγχος σύνδεσης..."
-#define D_QUERY_DONE "Ολοκλήρωση ερωτήματος. Βρέθηκε υπηρεσία MQTT"
-#define D_MQTT_SERVICE_FOUND "Βρέθηκε υπηρεσία MQTT στο"
-#define D_FOUND_AT "βρέθηκε στο"
-#define D_SYSLOG_HOST_NOT_FOUND "Δε βρέθηκε Syslog Host"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Αποθηκεύτηκε από τη Flash στο"
-#define D_LOADED_FROM_FLASH_AT "Φορτώθηκε από τη Flash στο"
-#define D_USE_DEFAULTS "Χρήση προεπιλογών"
-#define D_ERASED_SECTOR "Διαγραφή τομέα"
-
-// webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
παρακαλώ αναβαθμίστε"
-#define D_WEBSERVER_ACTIVE_ON "Ενεργός διακομιστής Web στο"
-#define D_WITH_IP_ADDRESS "με διεύθυνση IP"
-#define D_WEBSERVER_STOPPED "Ο διακομιστής Web σταμάτησε"
-#define D_FILE_NOT_FOUND "Δε βρέθηκε το αρχείο"
-#define D_REDIRECTED "Ανακατεύθυνση στο captive portal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
-#define D_TRYING_TO_CONNECT "Προσπάθεια σύνδεσης της συσκευής σε ασύρματο δίκτυο"
-
-#define D_RESTART_IN "Επανεκκίνηση σε"
-#define D_SECONDS "δευτερόλεπτα"
-#define D_DEVICE_WILL_RESTART "Η συσκευή θα επανεκκινήσει σε λίγα δευτερόλεπτα"
-#define D_BUTTON_TOGGLE "Εναλλαγή"
-#define D_CONFIGURATION "Ρυθμίσεις"
-#define D_INFORMATION "Πληροφορίες"
-#define D_FIRMWARE_UPGRADE "Αναβάθμιση"
-#define D_CONSOLE "Κονσόλα"
-#define D_CONFIRM_RESTART "Επιβεβαίωση επανεκκίνησης"
-
-#define D_CONFIGURE_MODULE "Μονάδα"
-#define D_CONFIGURE_WIFI "WiFi"
-#define D_CONFIGURE_MQTT "MQTT"
-#define D_CONFIGURE_DOMOTICZ "Domoticz"
-#define D_CONFIGURE_LOGGING "Καταγραφή"
-#define D_CONFIGURE_OTHER "Άλλες ρυθμίσεις"
-#define D_CONFIRM_RESET_CONFIGURATION "Επιβεβαίωση αρχικοποίησης στις προεπιλεγμένες ρυθμίσεις"
-#define D_RESET_CONFIGURATION "Reset"
-#define D_BACKUP_CONFIGURATION "Εξαγωγή"
-#define D_RESTORE_CONFIGURATION "Επαναφορά"
-#define D_MAIN_MENU "Κεντρικό μενού"
-
-#define D_MODULE_PARAMETERS "Παράμετροι μονάδας"
-#define D_MODULE_TYPE "Τύπος μονάδας"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Παράμετροι Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Σάρωση για δίκτυα Wifi"
-#define D_SCAN_DONE "Η σάρωση ολοκληρώθηκε"
-#define D_NO_NETWORKS_FOUND "Δε βρέθηκαν δίκτυα"
-#define D_REFRESH_TO_SCAN_AGAIN "Πατήστε ανανέωση για μια νέα σάρωση"
-#define D_DUPLICATE_ACCESSPOINT "Διπλότυπο AccessPoint"
-#define D_SKIPPING_LOW_QUALITY "Παράκαμψη λόγω χαμηλής ποιότητας"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Κωδικός"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Κωδικός"
-
-#define D_MQTT_PARAMETERS "Παράμετροι MQTT"
-#define D_CLIENT "Πελάτης"
-#define D_FULL_TOPIC "Full Topic"
-
-#define D_LOGGING_PARAMETERS "Παράμετροι καταγραφής"
-#define D_SERIAL_LOG_LEVEL "Επίπεδο Σειριακής"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Επίπεδο Web"
-#define D_SYS_LOG_LEVEL "Επίπεδο Syslog"
-#define D_MORE_DEBUG "More debug"
-#define D_SYSLOG_HOST "Εξυπηρετητής Syslog"
-#define D_SYSLOG_PORT "Θύρα Syslog"
-#define D_TELEMETRY_PERIOD "Περίοδος τηλεμετρίας"
-
-#define D_OTHER_PARAMETERS "Άλλες παράμετροι"
-#define D_TEMPLATE "Πρότυπο"
-#define D_ACTIVATE "Ενεργοποίηση"
-#define D_WEB_ADMIN_PASSWORD "Κωδικός διαχειριστή"
-#define D_MQTT_ENABLE "Ενεργοποίηση MQTT"
-#define D_FRIENDLY_NAME "Φιλική ονομασία"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "μονή συσκευή"
-#define D_MULTI_DEVICE "πολλαπλές συσκευές"
-
-#define D_CONFIGURE_TEMPLATE "Πρότυπα"
-#define D_TEMPLATE_PARAMETERS "Παράμετροι Πρότυπου"
-#define D_TEMPLATE_NAME "Όνομα"
-#define D_BASE_TYPE "Βασίζεται στο"
-#define D_TEMPLATE_FLAGS "Επιλογές"
-
-#define D_SAVE_CONFIGURATION "Αποθήκευση ρυθμίσεων"
-#define D_CONFIGURATION_SAVED "Οι ρυθμίσεις αποθηκεύτηκαν"
-#define D_CONFIGURATION_RESET "Επαναφορά ρυθμίσεων"
-
-#define D_PROGRAM_VERSION "Έκδοση προγράμματος"
-#define D_BUILD_DATE_AND_TIME "Ημερομηνία έκδοσης"
-#define D_CORE_AND_SDK_VERSION "Έκδοση Core/SDK"
-#define D_FLASH_WRITE_COUNT "Καταμέτρηση εγγραφών στη Flash"
-#define D_MAC_ADDRESS "MAC Address"
-#define D_MQTT_HOST "MQTT Διακομιστής"
-#define D_MQTT_PORT "MQTT Θύρα"
-#define D_MQTT_CLIENT "MQTT Πελάτης"
-#define D_MQTT_USER "MQTT Χρήστης"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Μέγεθος Flash"
-#define D_FREE_PROGRAM_SPACE "Ελεύθερος χώρος προγράμματος"
-
-#define D_UPGRADE_BY_WEBSERVER "Αναβάθμιση μέσω web server"
-#define D_OTA_URL "OTA URL"
-#define D_START_UPGRADE "Εκκίνηση αναβάθμισης"
-#define D_UPGRADE_BY_FILE_UPLOAD "Αναβάθμιση με μεταφόρτωση αρχείου"
-#define D_UPLOAD_STARTED "Η μεταφόρτωση ξεκίνησε"
-#define D_UPGRADE_STARTED "Η αναβάθμιση ξεκίνησε"
-#define D_UPLOAD_DONE "Η μεταφόρτωση ολοκληρώθηκε"
-#define D_UPLOAD_ERR_1 "Δεν έχει επιλεγεί αρχείο"
-#define D_UPLOAD_ERR_2 "Δεν υπάρχει επαρκής χώρος"
-#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
-#define D_UPLOAD_ERR_4 "Το μέγεθος προγράμματος είναι μεγαλύτερο από την πραγματική μνήμη Flash"
-#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
-#define D_UPLOAD_ERR_6 "Η μεταφόρτωση απέτυχε. Επιλέξτε επίπεδο καταγραφής 3"
-#define D_UPLOAD_ERR_7 "Η μεταφόρτωση ματαιώθηκε"
-#define D_UPLOAD_ERR_8 "Μη έγκυρο αρχείο"
-#define D_UPLOAD_ERR_9 "Πολύ μεγάλο αρχείο"
-#define D_UPLOAD_ERR_10 "Αποτυχία αρχικοποίησης RF chip"
-#define D_UPLOAD_ERR_11 "Αποτυχία σβησίματος στο RF chip"
-#define D_UPLOAD_ERR_12 "Αποτυχία εγγραφής στο RF chip"
-#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
-#define D_UPLOAD_ERROR_CODE "Κωδικός λάθους στη μεταφόρτωση"
-
-#define D_ENTER_COMMAND "Εισαγωγή εντολής"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Ενεργοποιήστε το weblog 2 εαν περιμένετε απόκριση"
-#define D_NEED_USER_AND_PASSWORD "Χρειάζεται user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Επιβεβαίωση αποτυπώματος TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Αποτυχία σύνδεσης TLS στο"
-#define D_RETRY_IN "Νέα προσπάθεια σε"
-#define D_VERIFIED "Επιβεβαιώθηκε με χρήση αποτυπώματος TLS"
-#define D_INSECURE "Επισφαλής σύνδεση λόγω άκυρου αποτυπώματος TLS"
-#define D_CONNECT_FAILED_TO "Αποτυχία σύνδεσης στο"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Απενεργοποιημένο Multicast"
-#define D_MULTICAST_REJOINED "Επανασύνδεση Multicast"
-#define D_MULTICAST_JOIN_FAILED "Αποτυχία σύνδεσης Multicast"
-#define D_FAILED_TO_SEND_RESPONSE "Αποτυχία αποστολής απόκρισης"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo βασικό event"
-#define D_WEMO_EVENT_SERVICE "WeMo υπηρεσία event"
-#define D_WEMO_META_SERVICE "WeMo υπηρεσία meta"
-#define D_WEMO_SETUP "WeMo ρυθμίσεις"
-#define D_RESPONSE_SENT "Αποστολή απάντησης"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue ρυθμίσεις"
-#define D_HUE_API_NOT_IMPLEMENTED "Δε βρέθηκε εφαρμογή Hue API"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "Στάλθηκαν 3 πακέτα απόκρισης"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Παράμετροι Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Χρονικά"
-#define D_TIMER_PARAMETERS "Παράμετροι χρονικών"
-#define D_TIMER_ENABLE "Ενεργοποίηση χρονικών"
-#define D_TIMER_ARM "Οπλισμένο"
-#define D_TIMER_TIME "Ώρα"
-#define D_TIMER_DAYS "Μέρες"
-#define D_TIMER_REPEAT "Επανάληψη"
-#define D_TIMER_OUTPUT "Έξοδος"
-#define D_TIMER_ACTION "Λειτουργία"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Ρυθμίσεις KNX"
-#define D_KNX_PARAMETERS "Παράμετροι KNX"
-#define D_KNX_GENERAL_CONFIG "Γενικά"
-#define D_KNX_PHYSICAL_ADDRESS "Διεύθυνση Μνήμης"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Πρέπει να είναι μοναδική στο KNX δίκτυο )"
-#define D_KNX_ENABLE "Ενεργοποίηση KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Αποστολή δεδομένων σε Ομάδα Διευθύνσεων"
-#define D_ADD "Προσθήκη"
-#define D_DELETE "Διαγραφή"
-#define D_REPLY "Επανάληψη"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Ομάδα Διευθύνσεων που θα λάβει τα Δεδομένα"
-#define D_RECEIVED_FROM "Στάλθηκε από"
-#define D_KNX_COMMAND_WRITE "Εγγραφή"
-#define D_KNX_COMMAND_READ "Ανάγνωση"
-#define D_KNX_COMMAND_OTHER "Άλλο"
-#define D_SENT_TO "αποστολή σε"
-#define D_KNX_WARNING "Η Ομάδα Διευθύνσεων ( 0 / 0 / 0 ) είναι δεσμευμένη και δεν μπορεί να χρησιμοποιηθεί."
-#define D_KNX_ENHANCEMENT "Βελτίωση επικοινωνίας"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Ενέργεια σήμερα"
-#define D_ENERGY_YESTERDAY "Ενέργεια χθες"
-#define D_ENERGY_TOTAL "Ενέργεια συνολικά"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Ο αισθητήρας είναι απασχολημένος"
-#define D_SENSOR_CRC_ERROR "Σφάλμα CRC αισθητήρα"
-#define D_SENSORS_FOUND "Βρέθηκαν αισθητήρες"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Αναμονή Timeout για"
-#define D_START_SIGNAL_LOW "χαμηλό αρχικό σήμα"
-#define D_START_SIGNAL_HIGH "υψηλό αρχικό σήμα"
-#define D_PULSE "παλμός"
-#define D_CHECKSUM_FAILURE "Αποτυχία Checksum"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Ο αισθητήρας δεν έστειλε εντολή ACK"
-#define D_SHT1X_FOUND "Βρέθηκε SHT1X"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particals"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Απομακρύνετε το βαρίδιο"
-#define D_HX_CAL_REFERENCE "Τοποθετήστε το βαρίδιο αναφοράς"
-#define D_HX_CAL_DONE "Βαθμονομήθηκε"
-#define D_HX_CAL_FAIL "Αποτυχία βαθμονόμησης"
-#define D_RESET_HX711 "Αρχικοποίηση ζυγαριάς"
-#define D_CONFIGURE_HX711 "Ρύθμιση ζυγαριάς"
-#define D_HX711_PARAMETERS "Παράμετροι ζυγαριάς"
-#define D_ITEM_WEIGHT "Βάρος αντικειμένου"
-#define D_REFERENCE_WEIGHT "Βάρος αναφοράς"
-#define D_CALIBRATE "Βαθμονόμησε"
-#define D_CALIBRATION "Βαθμονόμηση"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Κατεύθυνση ανέμου"
-#define D_TX20_WIND_SPEED "Ταχύτητα ανέμου"
-#define D_TX20_WIND_SPEED_AVG "Μέση ταχύτητα ανέμου"
-#define D_TX20_WIND_SPEED_MAX "Μέγιστη ταχύτητα ανέμου"
-#define D_TX20_NORTH "Β"
-#define D_TX20_EAST "Α"
-#define D_TX20_SOUTH "Ν"
-#define D_TX20_WEST "Δ"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sectors"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_EL_GR_H_
+/*
+ el-GR.h - localization for Greek - Greece for Tasmota
+
+ Copyright (C) 2019 Theo Arends, translated by Nick Galfas
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_EL_GR_H_
+#define _LANGUAGE_EL_GR_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.5.0
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1032
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "el"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "ΚυρΔευΤριΤετΠεμΠαρΣαβ"
+#define D_MONTH3LIST "ΙανΦεβΜαρΑπρΜαϊΙονΙολΑυγΣεπΟκτΝοεΔεκ"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Διαχειριστής"
+#define D_AIR_QUALITY "Ποιότητα αέρα"
+#define D_AP "AP" // Access Point
+#define D_AS "ως"
+#define D_AUTO "ΑΥΤΟΜΑΤΟ"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Καταμέτρηση εκκινήσεων"
+#define D_BRIGHTLIGHT "Φωτεινό"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Πλήκτρο"
+#define D_BY "από" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Κελσίου"
+#define D_CHANNEL "Κανάλι"
+#define D_CO2 "Διοξείδιο του άνθρακα"
+#define D_CODE "κώδικας" // Button code
+#define D_COLDLIGHT "Ψυχρό"
+#define D_COMMAND "Εντολή"
+#define D_CONNECTED "Συνδεδεμένο"
+#define D_COUNT "Μέτρηση"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNTER "Μετρητής"
+#define D_CURRENT "Ένταση" // As in Voltage and Current
+#define D_DATA "Δεδομένα"
+#define D_DARKLIGHT "Σκοτεινό"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Ανενεργό"
+#define D_DISTANCE "Απόσταση"
+#define D_DNS_SERVER "Διακομιστής DNS"
+#define D_DONE "Ολοκληρώθηκε"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Εξομoίωση"
+#define D_ENABLED "Ενεργό"
+#define D_ERASE "Διαγραφή"
+#define D_ERROR "Σφάλμα"
+#define D_FAHRENHEIT "Φαρενάιτ"
+#define D_FAILED "Απέτυχε"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback Topic"
+#define D_FALSE "Ψευδές"
+#define D_FILE "Αρχείο"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Ελεύθερη μνήμη"
+#define D_FREQUENCY "Συχνότητα"
+#define D_GAS "Αέριο"
+#define D_GATEWAY "Πύλη"
+#define D_GROUP "Ομάδα"
+#define D_HOST "Host"
+#define D_HOSTNAME "Hostname"
+#define D_HUMIDITY "Υγρασία"
+#define D_ILLUMINANCE "Φωτεινότητα"
+#define D_IMMEDIATE "άμεσο" // Button immediate
+#define D_INDEX "Κατάλογος"
+#define D_INFO "Πληροφορίες"
+#define D_INFRARED "Υπέρυθρο"
+#define D_INITIALIZED "Αρχικοποιήθηκε"
+#define D_IP_ADDRESS "Διεύθυνση IP"
+#define D_LIGHT "Φως"
+#define D_LWT "LWT"
+#define D_MODULE "Μονάδα"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "ανίχνευση για πολλαπλά πατήματα"
+#define D_NOISE "Θόρυβος"
+#define D_NONE "Κανένα"
+#define D_OFF "Off"
+#define D_OFFLINE "Offline"
+#define D_OK "Ok"
+#define D_ON "On"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Κωδικός"
+#define D_PORT "Θύρα"
+#define D_POWER_FACTOR "Συντελεστής Ισχύος"
+#define D_POWERUSAGE "Ισχύς"
+#define D_POWERUSAGE_ACTIVE "Ενεργός ισχύς"
+#define D_POWERUSAGE_APPARENT "Φαινόμενη ισχύς"
+#define D_POWERUSAGE_REACTIVE "Άεργη ισχύς"
+#define D_PRESSURE "Πίεση"
+#define D_PRESSUREATSEALEVEL "Πίεση στo επίπεδο θάλασσας"
+#define D_PROGRAM_FLASH_SIZE "Μέγεθος προγράμματος στη Flash"
+#define D_PROGRAM_SIZE "Μέγεθος προγράμματος"
+#define D_PROJECT "Έργο"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Ελήφθη"
+#define D_RESTART "Επανεκκίνηση"
+#define D_RESTARTING "Επανεκκινεί"
+#define D_RESTART_REASON "Αιτία επανεκκίνησης"
+#define D_RESTORE "επαναφορά"
+#define D_RETAINED "διακράτηση"
+#define D_RULE "Κανόνας"
+#define D_SAVE "Αποθήκευση"
+#define D_SENSOR "Αισθητήρας"
+#define D_SSID "SSId"
+#define D_START "Εκκίνηση"
+#define D_STD_TIME "STD"
+#define D_STOP "Τερματισμός"
+#define D_SUBNET_MASK "Μάσκα υποδικτύου"
+#define D_SUBSCRIBE_TO "Εγγραφή στο"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Επιτυχές"
+#define D_SUNRISE "Σούρουπο"
+#define D_SUNSET "Ηλιοβασίλεμα"
+#define D_TEMPERATURE "Θερμοκρασία"
+#define D_TO "έως"
+#define D_TOGGLE "Εναλλαγή"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Μετάδοση"
+#define D_TRUE "Αληθές"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "αναβάθμιση"
+#define D_UPLOAD "Ανέβασμα"
+#define D_UPTIME "Χρόνος λειτουργίας"
+#define D_USER "Χρήστης"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Δείκτης UV"
+#define D_UV_INDEX_1 "Χαμηλό"
+#define D_UV_INDEX_2 "Μέτριο"
+#define D_UV_INDEX_3 "Υψηλό"
+#define D_UV_INDEX_4 "Κίνδυνος"
+#define D_UV_INDEX_5 "Έγκαυμα L1/2"
+#define D_UV_INDEX_6 "Έγκαυμα L3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "Επίπεδο UV"
+#define D_UV_POWER "Ένταση UV"
+#define D_VERSION "Έκδοση"
+#define D_VOLTAGE "Τάση"
+#define D_WEIGHT "Βάρος"
+#define D_WARMLIGHT "Θερμό"
+#define D_WEB_SERVER "Διακομιστής Web"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ΠΡΟΕΙΔΟΠΟΙΗΣΗ Αυτή η έκδοση δεν αποθηκεύει τις ρυθμίσεις"
+#define D_LEVEL_10 "επίπεδο 1-0"
+#define D_LEVEL_01 "επίπεδο 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Η καταγραφή σειριακής θύρας είναι απενεργοποιημένη"
+#define D_SYSLOG_LOGGING_REENABLED "Η καταγραφή Syslog επαναενεργοποιήθηκε"
+
+#define D_SET_BAUDRATE_TO "Ορισμός Baudrate σε"
+#define D_RECEIVED_TOPIC "Received Topic"
+#define D_DATA_SIZE "Μέγεθος δεδομένων"
+#define D_ANALOG_INPUT "Αναλογικό"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "Το WPSconfig ΑΠΕΤΥΧΕ με status"
+#define D_ACTIVE_FOR_3_MINUTES "ενεργό για 3 λεπτά"
+#define D_FAILED_TO_START "απέτυχε να εκκινήσει"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "Συνδέεται στο AP"
+#define D_IN_MODE "σε mode"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Αποτυχία σύνδεσης, δεν απονεμήθηκε διεύθυνση IP"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Αποτυχία σύνδεσης, δεν ανταποκρίνεται το AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Αποτυχία σύνδεσης, λάθος κωδικός για το AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Αποτυχία σύνδεσης, λήξη ορίου απόκρισης από το AP"
+#define D_ATTEMPTING_CONNECTION "Προσπάθεια για σύνδεση..."
+#define D_CHECKING_CONNECTION "Έλεγχος σύνδεσης..."
+#define D_QUERY_DONE "Ολοκλήρωση ερωτήματος. Βρέθηκε υπηρεσία MQTT"
+#define D_MQTT_SERVICE_FOUND "Βρέθηκε υπηρεσία MQTT στο"
+#define D_FOUND_AT "βρέθηκε στο"
+#define D_SYSLOG_HOST_NOT_FOUND "Δε βρέθηκε Syslog Host"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Αποθηκεύτηκε από τη Flash στο"
+#define D_LOADED_FROM_FLASH_AT "Φορτώθηκε από τη Flash στο"
+#define D_USE_DEFAULTS "Χρήση προεπιλογών"
+#define D_ERASED_SECTOR "Διαγραφή τομέα"
+
+// webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
παρακαλώ αναβαθμίστε"
+#define D_WEBSERVER_ACTIVE_ON "Ενεργός διακομιστής Web στο"
+#define D_WITH_IP_ADDRESS "με διεύθυνση IP"
+#define D_WEBSERVER_STOPPED "Ο διακομιστής Web σταμάτησε"
+#define D_FILE_NOT_FOUND "Δε βρέθηκε το αρχείο"
+#define D_REDIRECTED "Ανακατεύθυνση στο captive portal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
+#define D_TRYING_TO_CONNECT "Προσπάθεια σύνδεσης της συσκευής σε ασύρματο δίκτυο"
+
+#define D_RESTART_IN "Επανεκκίνηση σε"
+#define D_SECONDS "δευτερόλεπτα"
+#define D_DEVICE_WILL_RESTART "Η συσκευή θα επανεκκινήσει σε λίγα δευτερόλεπτα"
+#define D_BUTTON_TOGGLE "Εναλλαγή"
+#define D_CONFIGURATION "Ρυθμίσεις"
+#define D_INFORMATION "Πληροφορίες"
+#define D_FIRMWARE_UPGRADE "Αναβάθμιση"
+#define D_CONSOLE "Κονσόλα"
+#define D_CONFIRM_RESTART "Επιβεβαίωση επανεκκίνησης"
+
+#define D_CONFIGURE_MODULE "Μονάδα"
+#define D_CONFIGURE_WIFI "WiFi"
+#define D_CONFIGURE_MQTT "MQTT"
+#define D_CONFIGURE_DOMOTICZ "Domoticz"
+#define D_CONFIGURE_LOGGING "Καταγραφή"
+#define D_CONFIGURE_OTHER "Άλλες ρυθμίσεις"
+#define D_CONFIRM_RESET_CONFIGURATION "Επιβεβαίωση αρχικοποίησης στις προεπιλεγμένες ρυθμίσεις"
+#define D_RESET_CONFIGURATION "Reset"
+#define D_BACKUP_CONFIGURATION "Εξαγωγή"
+#define D_RESTORE_CONFIGURATION "Επαναφορά"
+#define D_MAIN_MENU "Κεντρικό μενού"
+
+#define D_MODULE_PARAMETERS "Παράμετροι μονάδας"
+#define D_MODULE_TYPE "Τύπος μονάδας"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Παράμετροι Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Σάρωση για δίκτυα Wifi"
+#define D_SCAN_DONE "Η σάρωση ολοκληρώθηκε"
+#define D_NO_NETWORKS_FOUND "Δε βρέθηκαν δίκτυα"
+#define D_REFRESH_TO_SCAN_AGAIN "Πατήστε ανανέωση για μια νέα σάρωση"
+#define D_DUPLICATE_ACCESSPOINT "Διπλότυπο AccessPoint"
+#define D_SKIPPING_LOW_QUALITY "Παράκαμψη λόγω χαμηλής ποιότητας"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Κωδικός"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Κωδικός"
+
+#define D_MQTT_PARAMETERS "Παράμετροι MQTT"
+#define D_CLIENT "Πελάτης"
+#define D_FULL_TOPIC "Full Topic"
+
+#define D_LOGGING_PARAMETERS "Παράμετροι καταγραφής"
+#define D_SERIAL_LOG_LEVEL "Επίπεδο Σειριακής"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Επίπεδο Web"
+#define D_SYS_LOG_LEVEL "Επίπεδο Syslog"
+#define D_MORE_DEBUG "More debug"
+#define D_SYSLOG_HOST "Εξυπηρετητής Syslog"
+#define D_SYSLOG_PORT "Θύρα Syslog"
+#define D_TELEMETRY_PERIOD "Περίοδος τηλεμετρίας"
+
+#define D_OTHER_PARAMETERS "Άλλες παράμετροι"
+#define D_TEMPLATE "Πρότυπο"
+#define D_ACTIVATE "Ενεργοποίηση"
+#define D_WEB_ADMIN_PASSWORD "Κωδικός διαχειριστή"
+#define D_MQTT_ENABLE "Ενεργοποίηση MQTT"
+#define D_FRIENDLY_NAME "Φιλική ονομασία"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "μονή συσκευή"
+#define D_MULTI_DEVICE "πολλαπλές συσκευές"
+
+#define D_CONFIGURE_TEMPLATE "Πρότυπα"
+#define D_TEMPLATE_PARAMETERS "Παράμετροι Πρότυπου"
+#define D_TEMPLATE_NAME "Όνομα"
+#define D_BASE_TYPE "Βασίζεται στο"
+#define D_TEMPLATE_FLAGS "Επιλογές"
+
+#define D_SAVE_CONFIGURATION "Αποθήκευση ρυθμίσεων"
+#define D_CONFIGURATION_SAVED "Οι ρυθμίσεις αποθηκεύτηκαν"
+#define D_CONFIGURATION_RESET "Επαναφορά ρυθμίσεων"
+
+#define D_PROGRAM_VERSION "Έκδοση προγράμματος"
+#define D_BUILD_DATE_AND_TIME "Ημερομηνία έκδοσης"
+#define D_CORE_AND_SDK_VERSION "Έκδοση Core/SDK"
+#define D_FLASH_WRITE_COUNT "Καταμέτρηση εγγραφών στη Flash"
+#define D_MAC_ADDRESS "MAC Address"
+#define D_MQTT_HOST "MQTT Διακομιστής"
+#define D_MQTT_PORT "MQTT Θύρα"
+#define D_MQTT_CLIENT "MQTT Πελάτης"
+#define D_MQTT_USER "MQTT Χρήστης"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Μέγεθος Flash"
+#define D_FREE_PROGRAM_SPACE "Ελεύθερος χώρος προγράμματος"
+
+#define D_UPGRADE_BY_WEBSERVER "Αναβάθμιση μέσω web server"
+#define D_OTA_URL "OTA URL"
+#define D_START_UPGRADE "Εκκίνηση αναβάθμισης"
+#define D_UPGRADE_BY_FILE_UPLOAD "Αναβάθμιση με μεταφόρτωση αρχείου"
+#define D_UPLOAD_STARTED "Η μεταφόρτωση ξεκίνησε"
+#define D_UPGRADE_STARTED "Η αναβάθμιση ξεκίνησε"
+#define D_UPLOAD_DONE "Η μεταφόρτωση ολοκληρώθηκε"
+#define D_UPLOAD_ERR_1 "Δεν έχει επιλεγεί αρχείο"
+#define D_UPLOAD_ERR_2 "Δεν υπάρχει επαρκής χώρος"
+#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
+#define D_UPLOAD_ERR_4 "Το μέγεθος προγράμματος είναι μεγαλύτερο από την πραγματική μνήμη Flash"
+#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
+#define D_UPLOAD_ERR_6 "Η μεταφόρτωση απέτυχε. Επιλέξτε επίπεδο καταγραφής 3"
+#define D_UPLOAD_ERR_7 "Η μεταφόρτωση ματαιώθηκε"
+#define D_UPLOAD_ERR_8 "Μη έγκυρο αρχείο"
+#define D_UPLOAD_ERR_9 "Πολύ μεγάλο αρχείο"
+#define D_UPLOAD_ERR_10 "Αποτυχία αρχικοποίησης RF chip"
+#define D_UPLOAD_ERR_11 "Αποτυχία σβησίματος στο RF chip"
+#define D_UPLOAD_ERR_12 "Αποτυχία εγγραφής στο RF chip"
+#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERROR_CODE "Κωδικός λάθους στη μεταφόρτωση"
+
+#define D_ENTER_COMMAND "Εισαγωγή εντολής"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Ενεργοποιήστε το weblog 2 εαν περιμένετε απόκριση"
+#define D_NEED_USER_AND_PASSWORD "Χρειάζεται user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Επιβεβαίωση αποτυπώματος TLS..."
+#define D_TLS_CONNECT_FAILED_TO "Αποτυχία σύνδεσης TLS στο"
+#define D_RETRY_IN "Νέα προσπάθεια σε"
+#define D_VERIFIED "Επιβεβαιώθηκε με χρήση αποτυπώματος TLS"
+#define D_INSECURE "Επισφαλής σύνδεση λόγω άκυρου αποτυπώματος TLS"
+#define D_CONNECT_FAILED_TO "Αποτυχία σύνδεσης στο"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Απενεργοποιημένο Multicast"
+#define D_MULTICAST_REJOINED "Επανασύνδεση Multicast"
+#define D_MULTICAST_JOIN_FAILED "Αποτυχία σύνδεσης Multicast"
+#define D_FAILED_TO_SEND_RESPONSE "Αποτυχία αποστολής απόκρισης"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo βασικό event"
+#define D_WEMO_EVENT_SERVICE "WeMo υπηρεσία event"
+#define D_WEMO_META_SERVICE "WeMo υπηρεσία meta"
+#define D_WEMO_SETUP "WeMo ρυθμίσεις"
+#define D_RESPONSE_SENT "Αποστολή απάντησης"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue ρυθμίσεις"
+#define D_HUE_API_NOT_IMPLEMENTED "Δε βρέθηκε εφαρμογή Hue API"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "Στάλθηκαν 3 πακέτα απόκρισης"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Παράμετροι Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Χρονικά"
+#define D_TIMER_PARAMETERS "Παράμετροι χρονικών"
+#define D_TIMER_ENABLE "Ενεργοποίηση χρονικών"
+#define D_TIMER_ARM "Οπλισμένο"
+#define D_TIMER_TIME "Ώρα"
+#define D_TIMER_DAYS "Μέρες"
+#define D_TIMER_REPEAT "Επανάληψη"
+#define D_TIMER_OUTPUT "Έξοδος"
+#define D_TIMER_ACTION "Λειτουργία"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Ρυθμίσεις KNX"
+#define D_KNX_PARAMETERS "Παράμετροι KNX"
+#define D_KNX_GENERAL_CONFIG "Γενικά"
+#define D_KNX_PHYSICAL_ADDRESS "Διεύθυνση Μνήμης"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Πρέπει να είναι μοναδική στο KNX δίκτυο )"
+#define D_KNX_ENABLE "Ενεργοποίηση KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Αποστολή δεδομένων σε Ομάδα Διευθύνσεων"
+#define D_ADD "Προσθήκη"
+#define D_DELETE "Διαγραφή"
+#define D_REPLY "Επανάληψη"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Ομάδα Διευθύνσεων που θα λάβει τα Δεδομένα"
+#define D_RECEIVED_FROM "Στάλθηκε από"
+#define D_KNX_COMMAND_WRITE "Εγγραφή"
+#define D_KNX_COMMAND_READ "Ανάγνωση"
+#define D_KNX_COMMAND_OTHER "Άλλο"
+#define D_SENT_TO "αποστολή σε"
+#define D_KNX_WARNING "Η Ομάδα Διευθύνσεων ( 0 / 0 / 0 ) είναι δεσμευμένη και δεν μπορεί να χρησιμοποιηθεί."
+#define D_KNX_ENHANCEMENT "Βελτίωση επικοινωνίας"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Ενέργεια σήμερα"
+#define D_ENERGY_YESTERDAY "Ενέργεια χθες"
+#define D_ENERGY_TOTAL "Ενέργεια συνολικά"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Ο αισθητήρας είναι απασχολημένος"
+#define D_SENSOR_CRC_ERROR "Σφάλμα CRC αισθητήρα"
+#define D_SENSORS_FOUND "Βρέθηκαν αισθητήρες"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Αναμονή Timeout για"
+#define D_START_SIGNAL_LOW "χαμηλό αρχικό σήμα"
+#define D_START_SIGNAL_HIGH "υψηλό αρχικό σήμα"
+#define D_PULSE "παλμός"
+#define D_CHECKSUM_FAILURE "Αποτυχία Checksum"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Ο αισθητήρας δεν έστειλε εντολή ACK"
+#define D_SHT1X_FOUND "Βρέθηκε SHT1X"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particals"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Απομακρύνετε το βαρίδιο"
+#define D_HX_CAL_REFERENCE "Τοποθετήστε το βαρίδιο αναφοράς"
+#define D_HX_CAL_DONE "Βαθμονομήθηκε"
+#define D_HX_CAL_FAIL "Αποτυχία βαθμονόμησης"
+#define D_RESET_HX711 "Αρχικοποίηση ζυγαριάς"
+#define D_CONFIGURE_HX711 "Ρύθμιση ζυγαριάς"
+#define D_HX711_PARAMETERS "Παράμετροι ζυγαριάς"
+#define D_ITEM_WEIGHT "Βάρος αντικειμένου"
+#define D_REFERENCE_WEIGHT "Βάρος αναφοράς"
+#define D_CALIBRATE "Βαθμονόμησε"
+#define D_CALIBRATION "Βαθμονόμηση"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Κατεύθυνση ανέμου"
+#define D_TX20_WIND_SPEED "Ταχύτητα ανέμου"
+#define D_TX20_WIND_SPEED_AVG "Μέση ταχύτητα ανέμου"
+#define D_TX20_WIND_SPEED_MAX "Μέγιστη ταχύτητα ανέμου"
+#define D_TX20_NORTH "Β"
+#define D_TX20_EAST "Α"
+#define D_TX20_SOUTH "Ν"
+#define D_TX20_WEST "Δ"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sectors"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_EL_GR_H_
diff --git a/tasmota/language/en-GB.h b/tasmota/language/en-GB.h
index 42d9d6100..257a34c86 100644
--- a/tasmota/language/en-GB.h
+++ b/tasmota/language/en-GB.h
@@ -1,703 +1,701 @@
-/*
- en-GB.h - localization for English - United Kingdom for Tasmota
-
- Copyright (C) 2019 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 .
-*/
-
-#ifndef _LANGUAGE_EN_GB_H_
-#define _LANGUAGE_EN_GB_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.2.1.11
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-// https://www.science.co.il/language/Locale-codes.php
-#define LANGUAGE_LCID 2057
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "en"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "SunMonTueWedThuFriSat"
-#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Air quality"
-#define D_AP "AP" // Access Point
-#define D_AS "as"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Boot Count"
-#define D_BRIGHTLIGHT "Bright"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Button"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Channel"
-#define D_CO2 "Carbon dioxide"
-#define D_CODE "code" // Button code
-#define D_COLDLIGHT "Cold"
-#define D_COMMAND "Command"
-#define D_CONNECTED "Connected"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Count"
-#define D_COUNTER "Counter"
-#define D_CURRENT "Current" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Dark"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Disabled"
-#define D_DISTANCE "Distance"
-#define D_DNS_SERVER "DNS Server"
-#define D_DONE "Done"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulation"
-#define D_ENABLED "Enabled"
-#define D_ERASE "Erase"
-#define D_ERROR "Error"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Failed"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback Topic"
-#define D_FALSE "False"
-#define D_FILE "File"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Free Memory"
-#define D_FREQUENCY "Frequency"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Group"
-#define D_HOST "Host"
-#define D_HOSTNAME "Hostname"
-#define D_HUMIDITY "Humidity"
-#define D_ILLUMINANCE "Illuminance"
-#define D_IMMEDIATE "immediate" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infrared"
-#define D_INITIALIZED "Initialized"
-#define D_IP_ADDRESS "IP Address"
-#define D_LIGHT "Light"
-#define D_LWT "LWT"
-#define D_MODULE "Module"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-press"
-#define D_NOISE "Noise"
-#define D_NONE "None"
-#define D_OFF "Off"
-#define D_OFFLINE "Offline"
-#define D_OK "Ok"
-#define D_ON "On"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Password"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Power Factor"
-#define D_POWERUSAGE "Power"
-#define D_POWERUSAGE_ACTIVE "Active Power"
-#define D_POWERUSAGE_APPARENT "Apparent Power"
-#define D_POWERUSAGE_REACTIVE "Reactive Power"
-#define D_PRESSURE "Pressure"
-#define D_PRESSUREATSEALEVEL "SeaPressure"
-#define D_PROGRAM_FLASH_SIZE "Program Flash Size"
-#define D_PROGRAM_SIZE "Program Size"
-#define D_PROJECT "Project"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Received"
-#define D_RESTART "Restart"
-#define D_RESTARTING "Restarting"
-#define D_RESTART_REASON "Restart Reason"
-#define D_RESTORE "restore"
-#define D_RETAINED "retained"
-#define D_RULE "Rule"
-#define D_SAVE "Save"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Start"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Subnet Mask"
-#define D_SUBSCRIBE_TO "Subscribe to"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Successful"
-#define D_SUNRISE "Sunrise"
-#define D_SUNSET "Sunset"
-#define D_TEMPERATURE "Temperature"
-#define D_TO "to"
-#define D_TOGGLE "Toggle"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Transmit"
-#define D_TRUE "True"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "upgrade"
-#define D_UPLOAD "Upload"
-#define D_UPTIME "Uptime"
-#define D_USER "User"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Low"
-#define D_UV_INDEX_2 "Mid"
-#define D_UV_INDEX_3 "High"
-#define D_UV_INDEX_4 "Danger"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR" // Out of Range
-#define D_UV_LEVEL "UV Level"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Version"
-#define D_VOLTAGE "Voltage"
-#define D_WEIGHT "Weight"
-#define D_WARMLIGHT "Warm"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "WARNING This version does not support persistent settings"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serial logging disabled"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog logging re-enabled"
-
-#define D_SET_BAUDRATE_TO "Set Baudrate to"
-#define D_RECEIVED_TOPIC "Received Topic"
-#define D_DATA_SIZE "Data Size"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
-#define D_ACTIVE_FOR_3_MINUTES "active for 3 minutes"
-#define D_FAILED_TO_START "failed to start"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "Connecting to AP"
-#define D_IN_MODE "in mode"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connect failed as no IP address received"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Connect failed as AP cannot be reached"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Connect failed with AP incorrect password"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Connect failed with AP timeout"
-#define D_ATTEMPTING_CONNECTION "Attempting connection..."
-#define D_CHECKING_CONNECTION "Checking connection..."
-#define D_QUERY_DONE "Query done. MQTT services found"
-#define D_MQTT_SERVICE_FOUND "MQTT service found on"
-#define D_FOUND_AT "found at"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host not found"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Saved to flash at"
-#define D_LOADED_FROM_FLASH_AT "Loaded from flash at"
-#define D_USE_DEFAULTS "Use defaults"
-#define D_ERASED_SECTOR "Erased sector"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
please upgrade"
-#define D_WEBSERVER_ACTIVE_ON "Web server active on"
-#define D_WITH_IP_ADDRESS "with IP address"
-#define D_WEBSERVER_STOPPED "Web server stopped"
-#define D_FILE_NOT_FOUND "File Not Found"
-#define D_REDIRECTED "Redirected to captive portal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
-#define D_TRYING_TO_CONNECT "Trying to connect device to network"
-
-#define D_RESTART_IN "Restart in"
-#define D_SECONDS "seconds"
-#define D_DEVICE_WILL_RESTART "Device will restart in a few seconds"
-#define D_BUTTON_TOGGLE "Toggle"
-#define D_CONFIGURATION "Configuration"
-#define D_INFORMATION "Information"
-#define D_FIRMWARE_UPGRADE "Firmware Upgrade"
-#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Confirm Restart"
-
-#define D_CONFIGURE_MODULE "Configure Module"
-#define D_CONFIGURE_WIFI "Configure WiFi"
-#define D_CONFIGURE_MQTT "Configure MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configure Domoticz"
-#define D_CONFIGURE_LOGGING "Configure Logging"
-#define D_CONFIGURE_OTHER "Configure Other"
-#define D_CONFIRM_RESET_CONFIGURATION "Confirm Reset Configuration"
-#define D_RESET_CONFIGURATION "Reset Configuration"
-#define D_BACKUP_CONFIGURATION "Backup Configuration"
-#define D_RESTORE_CONFIGURATION "Restore Configuration"
-#define D_MAIN_MENU "Main Menu"
-
-#define D_MODULE_PARAMETERS "Module parameters"
-#define D_MODULE_TYPE "Module type"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Wifi parameters"
-#define D_SCAN_FOR_WIFI_NETWORKS "Scan for wifi networks"
-#define D_SCAN_DONE "Scan done"
-#define D_NO_NETWORKS_FOUND "No networks found"
-#define D_REFRESH_TO_SCAN_AGAIN "Refresh to scan again"
-#define D_DUPLICATE_ACCESSPOINT "Duplicate AccessPoint"
-#define D_SKIPPING_LOW_QUALITY "Skipping due to low quality"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Password"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Password"
-
-#define D_MQTT_PARAMETERS "MQTT parameters"
-#define D_CLIENT "Client"
-#define D_FULL_TOPIC "Full Topic"
-
-#define D_LOGGING_PARAMETERS "Logging parameters"
-#define D_SERIAL_LOG_LEVEL "Serial log level"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web log level"
-#define D_SYS_LOG_LEVEL "Syslog level"
-#define D_MORE_DEBUG "More debug"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Telemetry period"
-
-#define D_OTHER_PARAMETERS "Other parameters"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Web Admin Password"
-#define D_MQTT_ENABLE "MQTT enable"
-#define D_FRIENDLY_NAME "Friendly Name"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "single device"
-#define D_MULTI_DEVICE "multi device"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Save configuration"
-#define D_CONFIGURATION_SAVED "Configuration saved"
-#define D_CONFIGURATION_RESET "Configuration reset"
-
-#define D_PROGRAM_VERSION "Program Version"
-#define D_BUILD_DATE_AND_TIME "Build Date & Time"
-#define D_CORE_AND_SDK_VERSION "Core/SDK Version"
-#define D_FLASH_WRITE_COUNT "Flash write Count"
-#define D_MAC_ADDRESS "MAC Address"
-#define D_MQTT_HOST "MQTT Host"
-#define D_MQTT_PORT "MQTT Port"
-#define D_MQTT_CLIENT "MQTT Client"
-#define D_MQTT_USER "MQTT User"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Flash Size"
-#define D_FREE_PROGRAM_SPACE "Free Program Space"
-
-#define D_UPGRADE_BY_WEBSERVER "Upgrade by web server"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Start upgrade"
-#define D_UPGRADE_BY_FILE_UPLOAD "Upgrade by file upload"
-#define D_UPLOAD_STARTED "Upload started"
-#define D_UPGRADE_STARTED "Upgrade started"
-#define D_UPLOAD_DONE "Upload done"
-#define D_UPLOAD_ERR_1 "No file selected"
-#define D_UPLOAD_ERR_2 "Not enough space"
-#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
-#define D_UPLOAD_ERR_4 "Program flash size is larger than real flash size"
-#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
-#define D_UPLOAD_ERR_6 "Upload failed. Enable logging 3"
-#define D_UPLOAD_ERR_7 "Upload aborted"
-#define D_UPLOAD_ERR_8 "File invalid"
-#define D_UPLOAD_ERR_9 "File too large"
-#define D_UPLOAD_ERR_10 "Failed to init RF chip"
-#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
-#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
-#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
-#define D_UPLOAD_ERROR_CODE "Upload error code"
-
-#define D_ENTER_COMMAND "Enter command"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
-#define D_NEED_USER_AND_PASSWORD "Need user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verify TLS fingerprint..."
-#define D_TLS_CONNECT_FAILED_TO "TLS Connect failed to"
-#define D_RETRY_IN "Retry in"
-#define D_VERIFIED "Verified using Fingerprint"
-#define D_INSECURE "Insecure connection due to invalid Fingerprint"
-#define D_CONNECT_FAILED_TO "Connect failed to"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast disabled"
-#define D_MULTICAST_REJOINED "Multicast (re)joined"
-#define D_MULTICAST_JOIN_FAILED "Multicast join failed"
-#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo setup"
-#define D_RESPONSE_SENT "Response sent"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue setup"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API not implemented"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configure Timer"
-#define D_TIMER_PARAMETERS "Timer parameters"
-#define D_TIMER_ENABLE "Enable Timers"
-#define D_TIMER_ARM "Arm"
-#define D_TIMER_TIME "Time"
-#define D_TIMER_DAYS "Days"
-#define D_TIMER_REPEAT "Repeat"
-#define D_TIMER_OUTPUT "Output"
-#define D_TIMER_ACTION "Action"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configure KNX"
-#define D_KNX_PARAMETERS "KNX Parameters"
-#define D_KNX_GENERAL_CONFIG "General"
-#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
-#define D_KNX_ENABLE "Enable KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
-#define D_ADD "Add"
-#define D_DELETE "Delete"
-#define D_REPLY "Reply"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
-#define D_RECEIVED_FROM "Received from"
-#define D_KNX_COMMAND_WRITE "Write"
-#define D_KNX_COMMAND_READ "Read"
-#define D_KNX_COMMAND_OTHER "Other"
-#define D_SENT_TO "sent to"
-#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energy Today"
-#define D_ENERGY_YESTERDAY "Energy Yesterday"
-#define D_ENERGY_TOTAL "Energy Total"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor busy"
-#define D_SENSOR_CRC_ERROR "Sensor CRC error"
-#define D_SENSORS_FOUND "Sensors found"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Timeout waiting for"
-#define D_START_SIGNAL_LOW "start signal low"
-#define D_START_SIGNAL_HIGH "start signal high"
-#define D_PULSE "pulse"
-#define D_CHECKSUM_FAILURE "Checksum failure"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
-#define D_SHT1X_FOUND "SHT1X found"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particals"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remove weigth"
-#define D_HX_CAL_REFERENCE "Load reference weigth"
-#define D_HX_CAL_DONE "Calibrated"
-#define D_HX_CAL_FAIL "Calibration failed"
-#define D_RESET_HX711 "Reset Scale"
-#define D_CONFIGURE_HX711 "Configure Scale"
-#define D_HX711_PARAMETERS "Scale parameters"
-#define D_ITEM_WEIGHT "Item weight"
-#define D_REFERENCE_WEIGHT "Reference weigth"
-#define D_CALIBRATE "Calibrate"
-#define D_CALIBRATION "Calibration"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Wind Direction"
-#define D_TX20_WIND_SPEED "Wind Speed"
-#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
-#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sectors"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_EN_GB_H_
+/*
+ en-GB.h - localization for English - United Kingdom for Tasmota
+
+ Copyright (C) 2019 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 .
+*/
+
+#ifndef _LANGUAGE_EN_GB_H_
+#define _LANGUAGE_EN_GB_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.2.1.11
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+// https://www.science.co.il/language/Locale-codes.php
+#define LANGUAGE_LCID 2057
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "en"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "SunMonTueWedThuFriSat"
+#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Air quality"
+#define D_AP "AP" // Access Point
+#define D_AS "as"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Boot Count"
+#define D_BRIGHTLIGHT "Bright"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Button"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Channel"
+#define D_CO2 "Carbon dioxide"
+#define D_CODE "code" // Button code
+#define D_COLDLIGHT "Cold"
+#define D_COMMAND "Command"
+#define D_CONNECTED "Connected"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Count"
+#define D_COUNTER "Counter"
+#define D_CURRENT "Current" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Dark"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Disabled"
+#define D_DISTANCE "Distance"
+#define D_DNS_SERVER "DNS Server"
+#define D_DONE "Done"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulation"
+#define D_ENABLED "Enabled"
+#define D_ERASE "Erase"
+#define D_ERROR "Error"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Failed"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback Topic"
+#define D_FALSE "False"
+#define D_FILE "File"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Free Memory"
+#define D_FREQUENCY "Frequency"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Group"
+#define D_HOST "Host"
+#define D_HOSTNAME "Hostname"
+#define D_HUMIDITY "Humidity"
+#define D_ILLUMINANCE "Illuminance"
+#define D_IMMEDIATE "immediate" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infrared"
+#define D_INITIALIZED "Initialized"
+#define D_IP_ADDRESS "IP Address"
+#define D_LIGHT "Light"
+#define D_LWT "LWT"
+#define D_MODULE "Module"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-press"
+#define D_NOISE "Noise"
+#define D_NONE "None"
+#define D_OFF "Off"
+#define D_OFFLINE "Offline"
+#define D_OK "Ok"
+#define D_ON "On"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Password"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Power Factor"
+#define D_POWERUSAGE "Power"
+#define D_POWERUSAGE_ACTIVE "Active Power"
+#define D_POWERUSAGE_APPARENT "Apparent Power"
+#define D_POWERUSAGE_REACTIVE "Reactive Power"
+#define D_PRESSURE "Pressure"
+#define D_PRESSUREATSEALEVEL "SeaPressure"
+#define D_PROGRAM_FLASH_SIZE "Program Flash Size"
+#define D_PROGRAM_SIZE "Program Size"
+#define D_PROJECT "Project"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Received"
+#define D_RESTART "Restart"
+#define D_RESTARTING "Restarting"
+#define D_RESTART_REASON "Restart Reason"
+#define D_RESTORE "restore"
+#define D_RETAINED "retained"
+#define D_RULE "Rule"
+#define D_SAVE "Save"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Start"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Subnet Mask"
+#define D_SUBSCRIBE_TO "Subscribe to"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Successful"
+#define D_SUNRISE "Sunrise"
+#define D_SUNSET "Sunset"
+#define D_TEMPERATURE "Temperature"
+#define D_TO "to"
+#define D_TOGGLE "Toggle"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Transmit"
+#define D_TRUE "True"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "upgrade"
+#define D_UPLOAD "Upload"
+#define D_UPTIME "Uptime"
+#define D_USER "User"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Low"
+#define D_UV_INDEX_2 "Mid"
+#define D_UV_INDEX_3 "High"
+#define D_UV_INDEX_4 "Danger"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR" // Out of Range
+#define D_UV_LEVEL "UV Level"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Version"
+#define D_VOLTAGE "Voltage"
+#define D_WEIGHT "Weight"
+#define D_WARMLIGHT "Warm"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "WARNING This version does not support persistent settings"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serial logging disabled"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog logging re-enabled"
+
+#define D_SET_BAUDRATE_TO "Set Baudrate to"
+#define D_RECEIVED_TOPIC "Received Topic"
+#define D_DATA_SIZE "Data Size"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
+#define D_ACTIVE_FOR_3_MINUTES "active for 3 minutes"
+#define D_FAILED_TO_START "failed to start"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "Connecting to AP"
+#define D_IN_MODE "in mode"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connect failed as no IP address received"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Connect failed as AP cannot be reached"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Connect failed with AP incorrect password"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Connect failed with AP timeout"
+#define D_ATTEMPTING_CONNECTION "Attempting connection..."
+#define D_CHECKING_CONNECTION "Checking connection..."
+#define D_QUERY_DONE "Query done. MQTT services found"
+#define D_MQTT_SERVICE_FOUND "MQTT service found on"
+#define D_FOUND_AT "found at"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host not found"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Saved to flash at"
+#define D_LOADED_FROM_FLASH_AT "Loaded from flash at"
+#define D_USE_DEFAULTS "Use defaults"
+#define D_ERASED_SECTOR "Erased sector"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
please upgrade"
+#define D_WEBSERVER_ACTIVE_ON "Web server active on"
+#define D_WITH_IP_ADDRESS "with IP address"
+#define D_WEBSERVER_STOPPED "Web server stopped"
+#define D_FILE_NOT_FOUND "File Not Found"
+#define D_REDIRECTED "Redirected to captive portal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
+#define D_TRYING_TO_CONNECT "Trying to connect device to network"
+
+#define D_RESTART_IN "Restart in"
+#define D_SECONDS "seconds"
+#define D_DEVICE_WILL_RESTART "Device will restart in a few seconds"
+#define D_BUTTON_TOGGLE "Toggle"
+#define D_CONFIGURATION "Configuration"
+#define D_INFORMATION "Information"
+#define D_FIRMWARE_UPGRADE "Firmware Upgrade"
+#define D_CONSOLE "Console"
+#define D_CONFIRM_RESTART "Confirm Restart"
+
+#define D_CONFIGURE_MODULE "Configure Module"
+#define D_CONFIGURE_WIFI "Configure WiFi"
+#define D_CONFIGURE_MQTT "Configure MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configure Domoticz"
+#define D_CONFIGURE_LOGGING "Configure Logging"
+#define D_CONFIGURE_OTHER "Configure Other"
+#define D_CONFIRM_RESET_CONFIGURATION "Confirm Reset Configuration"
+#define D_RESET_CONFIGURATION "Reset Configuration"
+#define D_BACKUP_CONFIGURATION "Backup Configuration"
+#define D_RESTORE_CONFIGURATION "Restore Configuration"
+#define D_MAIN_MENU "Main Menu"
+
+#define D_MODULE_PARAMETERS "Module parameters"
+#define D_MODULE_TYPE "Module type"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Wifi parameters"
+#define D_SCAN_FOR_WIFI_NETWORKS "Scan for wifi networks"
+#define D_SCAN_DONE "Scan done"
+#define D_NO_NETWORKS_FOUND "No networks found"
+#define D_REFRESH_TO_SCAN_AGAIN "Refresh to scan again"
+#define D_DUPLICATE_ACCESSPOINT "Duplicate AccessPoint"
+#define D_SKIPPING_LOW_QUALITY "Skipping due to low quality"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Password"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Password"
+
+#define D_MQTT_PARAMETERS "MQTT parameters"
+#define D_CLIENT "Client"
+#define D_FULL_TOPIC "Full Topic"
+
+#define D_LOGGING_PARAMETERS "Logging parameters"
+#define D_SERIAL_LOG_LEVEL "Serial log level"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web log level"
+#define D_SYS_LOG_LEVEL "Syslog level"
+#define D_MORE_DEBUG "More debug"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Telemetry period"
+
+#define D_OTHER_PARAMETERS "Other parameters"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Web Admin Password"
+#define D_MQTT_ENABLE "MQTT enable"
+#define D_FRIENDLY_NAME "Friendly Name"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "single device"
+#define D_MULTI_DEVICE "multi device"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Save configuration"
+#define D_CONFIGURATION_SAVED "Configuration saved"
+#define D_CONFIGURATION_RESET "Configuration reset"
+
+#define D_PROGRAM_VERSION "Program Version"
+#define D_BUILD_DATE_AND_TIME "Build Date & Time"
+#define D_CORE_AND_SDK_VERSION "Core/SDK Version"
+#define D_FLASH_WRITE_COUNT "Flash write Count"
+#define D_MAC_ADDRESS "MAC Address"
+#define D_MQTT_HOST "MQTT Host"
+#define D_MQTT_PORT "MQTT Port"
+#define D_MQTT_CLIENT "MQTT Client"
+#define D_MQTT_USER "MQTT User"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Flash Size"
+#define D_FREE_PROGRAM_SPACE "Free Program Space"
+
+#define D_UPGRADE_BY_WEBSERVER "Upgrade by web server"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Start upgrade"
+#define D_UPGRADE_BY_FILE_UPLOAD "Upgrade by file upload"
+#define D_UPLOAD_STARTED "Upload started"
+#define D_UPGRADE_STARTED "Upgrade started"
+#define D_UPLOAD_DONE "Upload done"
+#define D_UPLOAD_ERR_1 "No file selected"
+#define D_UPLOAD_ERR_2 "Not enough space"
+#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
+#define D_UPLOAD_ERR_4 "Program flash size is larger than real flash size"
+#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
+#define D_UPLOAD_ERR_6 "Upload failed. Enable logging 3"
+#define D_UPLOAD_ERR_7 "Upload aborted"
+#define D_UPLOAD_ERR_8 "File invalid"
+#define D_UPLOAD_ERR_9 "File too large"
+#define D_UPLOAD_ERR_10 "Failed to init RF chip"
+#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
+#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
+#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERROR_CODE "Upload error code"
+
+#define D_ENTER_COMMAND "Enter command"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
+#define D_NEED_USER_AND_PASSWORD "Need user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verify TLS fingerprint..."
+#define D_TLS_CONNECT_FAILED_TO "TLS Connect failed to"
+#define D_RETRY_IN "Retry in"
+#define D_VERIFIED "Verified using Fingerprint"
+#define D_INSECURE "Insecure connection due to invalid Fingerprint"
+#define D_CONNECT_FAILED_TO "Connect failed to"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast disabled"
+#define D_MULTICAST_REJOINED "Multicast (re)joined"
+#define D_MULTICAST_JOIN_FAILED "Multicast join failed"
+#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo setup"
+#define D_RESPONSE_SENT "Response sent"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue setup"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API not implemented"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configure Timer"
+#define D_TIMER_PARAMETERS "Timer parameters"
+#define D_TIMER_ENABLE "Enable Timers"
+#define D_TIMER_ARM "Arm"
+#define D_TIMER_TIME "Time"
+#define D_TIMER_DAYS "Days"
+#define D_TIMER_REPEAT "Repeat"
+#define D_TIMER_OUTPUT "Output"
+#define D_TIMER_ACTION "Action"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configure KNX"
+#define D_KNX_PARAMETERS "KNX Parameters"
+#define D_KNX_GENERAL_CONFIG "General"
+#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
+#define D_KNX_ENABLE "Enable KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
+#define D_ADD "Add"
+#define D_DELETE "Delete"
+#define D_REPLY "Reply"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
+#define D_RECEIVED_FROM "Received from"
+#define D_KNX_COMMAND_WRITE "Write"
+#define D_KNX_COMMAND_READ "Read"
+#define D_KNX_COMMAND_OTHER "Other"
+#define D_SENT_TO "sent to"
+#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energy Today"
+#define D_ENERGY_YESTERDAY "Energy Yesterday"
+#define D_ENERGY_TOTAL "Energy Total"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor busy"
+#define D_SENSOR_CRC_ERROR "Sensor CRC error"
+#define D_SENSORS_FOUND "Sensors found"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Timeout waiting for"
+#define D_START_SIGNAL_LOW "start signal low"
+#define D_START_SIGNAL_HIGH "start signal high"
+#define D_PULSE "pulse"
+#define D_CHECKSUM_FAILURE "Checksum failure"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
+#define D_SHT1X_FOUND "SHT1X found"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particals"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remove weigth"
+#define D_HX_CAL_REFERENCE "Load reference weigth"
+#define D_HX_CAL_DONE "Calibrated"
+#define D_HX_CAL_FAIL "Calibration failed"
+#define D_RESET_HX711 "Reset Scale"
+#define D_CONFIGURE_HX711 "Configure Scale"
+#define D_HX711_PARAMETERS "Scale parameters"
+#define D_ITEM_WEIGHT "Item weight"
+#define D_REFERENCE_WEIGHT "Reference weigth"
+#define D_CALIBRATE "Calibrate"
+#define D_CALIBRATION "Calibration"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Wind Direction"
+#define D_TX20_WIND_SPEED "Wind Speed"
+#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
+#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sectors"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_EN_GB_H_
diff --git a/tasmota/language/es-ES.h b/tasmota/language/es-ES.h
index 4c98d8ebe..7527bb77a 100644
--- a/tasmota/language/es-ES.h
+++ b/tasmota/language/es-ES.h
@@ -1,703 +1,701 @@
-/*
- es-ES.h - localization for Spanish - Spain for Tasmota
-
- Copyright (C) 2019 Adrian Scillato
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_ES_ES_H_
-#define _LANGUAGE_ES_ES_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v7.0.0.5
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1034
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "es"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "DomLunMarMieJueVieSab"
-#define D_MONTH3LIST "EneFebMarAbrMayJunJulAgoSepOctNovDic"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Calidad del Aire"
-#define D_AP "AP" // Access Point
-#define D_AS "como"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Conteo Reinicios"
-#define D_BRIGHTLIGHT "Brillante"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Botón"
-#define D_BY "por" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Canal"
-#define D_CO2 "CO2"
-#define D_CODE "código" // Button code
-#define D_COLDLIGHT "Fría"
-#define D_COMMAND "Comando"
-#define D_CONNECTED "Conectado"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Conteo"
-#define D_COUNTER "Contador"
-#define D_CURRENT "Corriente" // As in Voltage and Current
-#define D_DATA "Datos"
-#define D_DARKLIGHT "Oscuro"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Deshabilitado"
-#define D_DISTANCE "Distancia"
-#define D_DNS_SERVER "DNS Server"
-#define D_DONE "Listo"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulación"
-#define D_ENABLED "Habilitado"
-#define D_ERASE "Borrar"
-#define D_ERROR "Error"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Falló"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "FallbackTopic"
-#define D_FALSE "Falso"
-#define D_FILE "Archivo"
-#define D_FLOW_RATE "Caudal"
-#define D_FREE_MEMORY "Memoria Libre"
-#define D_FREQUENCY "Frecuencia"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Grupo"
-#define D_HOST "Host"
-#define D_HOSTNAME "Hostname"
-#define D_HUMIDITY "Humedad"
-#define D_ILLUMINANCE "Luminancia"
-#define D_IMMEDIATE "inmediato" // Button immediate
-#define D_INDEX "Índice"
-#define D_INFO "Información"
-#define D_INFRARED "Infrarrojo"
-#define D_INITIALIZED "Inicializado"
-#define D_IP_ADDRESS "Dirección IP"
-#define D_LIGHT "Luz"
-#define D_LWT "LWT"
-#define D_MODULE "Módulo"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-press"
-#define D_NOISE "Ruido"
-#define D_NONE "Ninguno"
-#define D_OFF "Apagado"
-#define D_OFFLINE "Offline"
-#define D_OK "Ok"
-#define D_ON "Encendido"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Clave"
-#define D_PORT "Puerto"
-#define D_POWER_FACTOR "Factor de Potencia"
-#define D_POWERUSAGE "Potencia"
-#define D_POWERUSAGE_ACTIVE "Potencia Activa"
-#define D_POWERUSAGE_APPARENT "Potencia Aparente"
-#define D_POWERUSAGE_REACTIVE "Potencia Reactiva"
-#define D_PRESSURE "Presión"
-#define D_PRESSUREATSEALEVEL "Presión al nivel del mar"
-#define D_PROGRAM_FLASH_SIZE "Tamaño de Flash de Programa"
-#define D_PROGRAM_SIZE "Tamaño Programa"
-#define D_PROJECT "Proyecto"
-#define D_RAIN "Lluvia"
-#define D_RECEIVED "Recibido"
-#define D_RESTART "Reiniciar"
-#define D_RESTARTING "Reiniciando"
-#define D_RESTART_REASON "Causa Reinicio"
-#define D_RESTORE "Restauración"
-#define D_RETAINED "Grabado"
-#define D_RULE "Regla"
-#define D_SAVE "Grabar"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Iniciar"
-#define D_STD_TIME "STD"
-#define D_STOP "Detener"
-#define D_SUBNET_MASK "Máscara Subred"
-#define D_SUBSCRIBE_TO "Suscribir a"
-#define D_UNSUBSCRIBE_FROM "Desuscribirse de"
-#define D_SUCCESSFUL "Exitosa"
-#define D_SUNRISE "Salida del Sol"
-#define D_SUNSET "Puesta del Sol"
-#define D_TEMPERATURE "Temperatura"
-#define D_TO "a"
-#define D_TOGGLE "Conmutar"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usado"
-#define D_TRANSMIT "Transmitir"
-#define D_TRUE "Verdadero"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "Actualización"
-#define D_UPLOAD "Carga"
-#define D_UPTIME "Tiempo Encendido"
-#define D_USER "Usuario"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Índice UV"
-#define D_UV_INDEX_1 "Bajo"
-#define D_UV_INDEX_2 "Medio"
-#define D_UV_INDEX_3 "Alto"
-#define D_UV_INDEX_4 "Peligroso"
-#define D_UV_INDEX_5 "Quemaduras 1 a 2 grad"
-#define D_UV_INDEX_6 "Quemaduras 3 grad"
-#define D_UV_INDEX_7 "Fuera de Rango"
-#define D_UV_LEVEL "Nivel UV"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Versión"
-#define D_VOLTAGE "Tensión"
-#define D_WEIGHT "Peso"
-#define D_WARMLIGHT "Cálida"
-#define D_WEB_SERVER "Servidor Web"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "Cuidado, esta versión no guarda los cambios"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Log serial deshabilitado"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog re-habilitado"
-
-#define D_SET_BAUDRATE_TO "Baudrate a"
-#define D_RECEIVED_TOPIC "Topic Recibido"
-#define D_DATA_SIZE "Tamaño de Datos"
-#define D_ANALOG_INPUT "Entrada Analógica"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Ciclo Bloqueado"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig FALLÓ con estado"
-#define D_ACTIVE_FOR_3_MINUTES "activo por 3 minutos"
-#define D_FAILED_TO_START "falló inicio"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "Connectando a AP"
-#define D_IN_MODE "en modo"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Falló Conexión, Dirección IP no recibida"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Falló Conexión, AP no pudo ser contactado"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Falló Conexión, clave de AP incorrecta"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Falló Conexión, timeout de AP"
-#define D_ATTEMPTING_CONNECTION "Intentando conectar..."
-#define D_CHECKING_CONNECTION "Probando conexión..."
-#define D_QUERY_DONE "Consulta lista. Servicio MQTT encontrado"
-#define D_MQTT_SERVICE_FOUND "Servicio MQTT encontrado en"
-#define D_FOUND_AT "encontrado en"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host no encontrado"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Grabado a la flash en"
-#define D_LOADED_FROM_FLASH_AT "Cargado desde flash en"
-#define D_USE_DEFAULTS "Usar valores por defecto"
-#define D_ERASED_SECTOR "Sector borrado"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Habilitar JavaScript para usar Tasmota"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MÍNIMO
actualice por favor"
-#define D_WEBSERVER_ACTIVE_ON "Servidor web activo en"
-#define D_WITH_IP_ADDRESS "con dirección IP"
-#define D_WEBSERVER_STOPPED "Servidor web detenido"
-#define D_FILE_NOT_FOUND "Archivo No Encontrado"
-#define D_REDIRECTED "Redireccionado al portal captivo"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager como AccessPoint y Estación"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager como AccessPoint"
-#define D_TRYING_TO_CONNECT "Intentado conectar dispositivo a la red"
-
-#define D_RESTART_IN "Reinicio en"
-#define D_SECONDS "segundos"
-#define D_DEVICE_WILL_RESTART "El dispositivo se reiniciará en unos segundos"
-#define D_BUTTON_TOGGLE "Alternar ON/OFF"
-#define D_CONFIGURATION "Configuración"
-#define D_INFORMATION "Información"
-#define D_FIRMWARE_UPGRADE "Actualizar Firmware"
-#define D_CONSOLE "Consola"
-#define D_CONFIRM_RESTART "Confirmar Reinicio"
-
-#define D_CONFIGURE_MODULE "Configuración del Módulo"
-#define D_CONFIGURE_WIFI "Configuración WiFi"
-#define D_CONFIGURE_MQTT "Configuración MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configuración Domoticz"
-#define D_CONFIGURE_LOGGING "Configuración Logging"
-#define D_CONFIGURE_OTHER "Configuración Extra"
-#define D_CONFIRM_RESET_CONFIGURATION "Confirmar Reset Configuración"
-#define D_RESET_CONFIGURATION "Reset de Configuración"
-#define D_BACKUP_CONFIGURATION "Backup de Configuración"
-#define D_RESTORE_CONFIGURATION "Restaurar Configuración"
-#define D_MAIN_MENU "Menú Principal"
-
-#define D_MODULE_PARAMETERS "Parámetros del módulo"
-#define D_MODULE_TYPE "Tipo de módulo"
-#define D_PULLUP_ENABLE "Botón/Llave sin pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Parámetros Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Buscar redes wifi"
-#define D_SCAN_DONE "Busqueda finalizada"
-#define D_NO_NETWORKS_FOUND "Ninguna red encontrada"
-#define D_REFRESH_TO_SCAN_AGAIN "Recargar página para buscar nuevamente"
-#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplicado"
-#define D_SKIPPING_LOW_QUALITY "Ignorado por baja calidad"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "SSId AP1"
-#define D_AP1_PASSWORD "Clave AP1"
-#define D_AP2_SSID "SSId AP2"
-#define D_AP2_PASSWORD "Clave AP2"
-
-#define D_MQTT_PARAMETERS "Parámetros MQTT"
-#define D_CLIENT "Cliente"
-#define D_FULL_TOPIC "Full Topic"
-
-#define D_LOGGING_PARAMETERS "Parámetros Logging"
-#define D_SERIAL_LOG_LEVEL "Nivel de log por Serial"
-#define D_MQTT_LOG_LEVEL "Nivel de log por Mqtt"
-#define D_WEB_LOG_LEVEL "Nivel de log por Web"
-#define D_SYS_LOG_LEVEL "Nivel de log por Syslog"
-#define D_MORE_DEBUG "Más Debug"
-#define D_SYSLOG_HOST "Host del Syslog"
-#define D_SYSLOG_PORT "Puerto del Syslog"
-#define D_TELEMETRY_PERIOD "Período de Telemetría"
-
-#define D_OTHER_PARAMETERS "Otros parámetros"
-#define D_TEMPLATE "Plantilla"
-#define D_ACTIVATE "Activar"
-#define D_WEB_ADMIN_PASSWORD "Clave Administrador Web"
-#define D_MQTT_ENABLE "Habilitar MQTT"
-#define D_FRIENDLY_NAME "Nombre Amigable"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "dispositivo simple"
-#define D_MULTI_DEVICE "dispositivo múltiple"
-
-#define D_CONFIGURE_TEMPLATE "Configurar Plantilla"
-#define D_TEMPLATE_PARAMETERS "Parámetros de Plantilla"
-#define D_TEMPLATE_NAME "Nombre"
-#define D_BASE_TYPE "Basada en"
-#define D_TEMPLATE_FLAGS "Opciones"
-
-#define D_SAVE_CONFIGURATION "Grabar configuración"
-#define D_CONFIGURATION_SAVED "Configuración grabada"
-#define D_CONFIGURATION_RESET "Configuración restablecida"
-
-#define D_PROGRAM_VERSION "Versión del Programa"
-#define D_BUILD_DATE_AND_TIME "Fecha y Hora de Compilación"
-#define D_CORE_AND_SDK_VERSION "Versión Core/SDK"
-#define D_FLASH_WRITE_COUNT "Contador de escritura en Flash"
-#define D_MAC_ADDRESS "Dirección MAC"
-#define D_MQTT_HOST "Host MQTT"
-#define D_MQTT_PORT "Puerto MQTT"
-#define D_MQTT_CLIENT "Cliente MQTT"
-#define D_MQTT_USER "Usuario MQTT"
-#define D_MQTT_TOPIC "Topic MQTT"
-#define D_MQTT_GROUP_TOPIC "Group Topic MQTT"
-#define D_MQTT_FULL_TOPIC "Full Topic MQTT"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Tamaño Flash"
-#define D_FREE_PROGRAM_SPACE "Memoria de Programa Libre"
-
-#define D_UPGRADE_BY_WEBSERVER "Actualizar por servidor web"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Comenzar actualización"
-#define D_UPGRADE_BY_FILE_UPLOAD "Actualizar cargando archivo bin"
-#define D_UPLOAD_STARTED "Cargando archivo"
-#define D_UPGRADE_STARTED "Actualización iniciada"
-#define D_UPLOAD_DONE "Carga finalizada"
-#define D_UPLOAD_ERR_1 "Ningún archivo seleccionado"
-#define D_UPLOAD_ERR_2 "Espacio insuficiente"
-#define D_UPLOAD_ERR_3 "Magic byte no corresponde a 0xE9"
-#define D_UPLOAD_ERR_4 "El tamaño de la memoria de programa es mayor que la de la flash"
-#define D_UPLOAD_ERR_5 "Error de comparación del buffer de carga"
-#define D_UPLOAD_ERR_6 "Carga fallida. Habilitar logging 3"
-#define D_UPLOAD_ERR_7 "Carga cancelada"
-#define D_UPLOAD_ERR_8 "Archivo no válido"
-#define D_UPLOAD_ERR_9 "Archivo muy grande"
-#define D_UPLOAD_ERR_10 "No inició chip RF"
-#define D_UPLOAD_ERR_11 "No se pudo borrar en el chip RF"
-#define D_UPLOAD_ERR_12 "No se puedo escribir en el chip RF"
-#define D_UPLOAD_ERR_13 "No se pudo decodificar firmware RF"
-#define D_UPLOAD_ERROR_CODE "Código de error de carga"
-
-#define D_ENTER_COMMAND "Ingresar comando"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 si desea respuesta"
-#define D_NEED_USER_AND_PASSWORD "Se necesita user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verificar TLS fingerprint..."
-#define D_TLS_CONNECT_FAILED_TO "Falló Conexión TLS a"
-#define D_RETRY_IN "Reintentando"
-#define D_VERIFIED "Verificado Fingerprint"
-#define D_INSECURE "Conexión insegura por Fingerprint inválido"
-#define D_CONNECT_FAILED_TO "Falló Conexión a"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast deshabilitado"
-#define D_MULTICAST_REJOINED "Multicast (re)conectado"
-#define D_MULTICAST_JOIN_FAILED "Conexión Multicast fallida"
-#define D_FAILED_TO_SEND_RESPONSE "Falla al enviar respuesta"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "Evento base de WeMo"
-#define D_WEMO_EVENT_SERVICE "Evento de servicio de WeMo"
-#define D_WEMO_META_SERVICE "Meta Servicio de WeMo"
-#define D_WEMO_SETUP "Configuración de WeMo"
-#define D_RESPONSE_SENT "Respuesta enviada"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Configuración Hue"
-#define D_HUE_API_NOT_IMPLEMENTED "API de Hue no implementada"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 paquetes de respuesta enviados"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Parámetros Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Potencia,Energía"
- #define D_DOMOTICZ_ILLUMINANCE "Luminancia"
- #define D_DOMOTICZ_COUNT "Contador/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltaje/PM2,5"
- #define D_DOMOTICZ_CURRENT "Corriente/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Calidad del Aire"
- #define D_DOMOTICZ_P1_SMART_METER "Medidor Inteligente P1"
-#define D_DOMOTICZ_UPDATE_TIMER "Intervalo de refresco"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configuración Temporizadores"
-#define D_TIMER_PARAMETERS "Parámetros de Temporizadores"
-#define D_TIMER_ENABLE "Habilitar Temporizadores"
-#define D_TIMER_ARM "Activo"
-#define D_TIMER_TIME "Hora"
-#define D_TIMER_DAYS "Días"
-#define D_TIMER_REPEAT "Repetir"
-#define D_TIMER_OUTPUT "Salida"
-#define D_TIMER_ACTION "Estado"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configuración de KNX"
-#define D_KNX_PARAMETERS "Parámetros de KNX"
-#define D_KNX_GENERAL_CONFIG "General"
-#define D_KNX_PHYSICAL_ADDRESS "Dirección Física"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Debe ser única en la red KNX )"
-#define D_KNX_ENABLE "Habilitar KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Datos a Enviar a las Direcciones de Grupo"
-#define D_ADD "Agregar"
-#define D_DELETE "Eliminar"
-#define D_REPLY "Responder"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Direcciones de Grupo para Recibir Datos"
-#define D_RECEIVED_FROM "Recibido desde"
-#define D_KNX_COMMAND_WRITE "Escribir"
-#define D_KNX_COMMAND_READ "Leer"
-#define D_KNX_COMMAND_OTHER "Otro"
-#define D_SENT_TO "enviada a"
-#define D_KNX_WARNING "La dirección de grupo ( 0 / 0 / 0 ) está reservada y no puede ser utilizada."
-#define D_KNX_ENHANCEMENT "Mejora de Comunicación"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energía Hoy"
-#define D_ENERGY_YESTERDAY "Energía Ayer"
-#define D_ENERGY_TOTAL "Energía Total"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Abrir"
-#define D_CLOSE "Cerrar"
-#define D_DOMOTICZ_SHUTTER "Cortina"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configurar PCF8574"
-#define D_PCF8574_PARAMETERS "Parámetros de PCF8574"
-#define D_INVERT_PORTS "Invertir Puertos"
-#define D_DEVICE "Dispositivo"
-#define D_DEVICE_INPUT "Entrada"
-#define D_DEVICE_OUTPUT "Salida"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor ocupado"
-#define D_SENSOR_CRC_ERROR "Error CRC del Sensor"
-#define D_SENSORS_FOUND "Sensores encontrados"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Espera de timeout por"
-#define D_START_SIGNAL_LOW "iniciar señal baja"
-#define D_START_SIGNAL_HIGH "iniciar señal alta"
-#define D_PULSE "pulso"
-#define D_CHECKSUM_FAILURE "Falló Checksum"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor no ha enviado el comando ACK"
-#define D_SHT1X_FOUND "SHT1X encontrado"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Partículas"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remover Peso"
-#define D_HX_CAL_REFERENCE "Poner Peso de Referencia"
-#define D_HX_CAL_DONE "Calibrado"
-#define D_HX_CAL_FAIL "Falló Calibración"
-#define D_RESET_HX711 "Restablecer Escala"
-#define D_CONFIGURE_HX711 "Configurar Escala"
-#define D_HX711_PARAMETERS "Parámetros de Escala"
-#define D_ITEM_WEIGHT "Peso"
-#define D_REFERENCE_WEIGHT "Peso de Referencia"
-#define D_CALIBRATE "Calibrar"
-#define D_CALIBRATION "Calibración"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Dirección del Viento"
-#define D_TX20_WIND_SPEED "Vel. del Viento"
-#define D_TX20_WIND_SPEED_AVG "Vel. Prom. del Viento"
-#define D_TX20_WIND_SPEED_MAX "Vel. Max. del Viento"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "O"
-
-// 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 "User"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IR Tx"
-#define D_SENSOR_SWITCH "Llave" // Suffix "1"
-#define D_SENSOR_BUTTON "Botón" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Contador" // Suffix "1"
-#define D_SENSOR_IRRECV "IR Rx"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "seg"
-#define D_UNIT_SECTORS "sectores"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Ángulo de Fase"
-#define D_IMPORT_ACTIVE "P. Activa Entrante"
-#define D_EXPORT_ACTIVE "P. Activa Saliente"
-#define D_IMPORT_REACTIVE "P. Reactiva Entrante"
-#define D_EXPORT_REACTIVE "P. Reactiva Saliente"
-#define D_TOTAL_REACTIVE "P. Reactiva Total"
-#define D_UNIT_KWARH "kVArH"
-#define D_UNIT_ANGLE "Grados"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltaje"
-#define D_PV1_CURRENT "PV1 Corriente"
-#define D_PV1_POWER "PV1 Potencia"
-#define D_PV2_VOLTAGE "PV2 Voltaee"
-#define D_PV2_CURRENT "PV2 Corriente"
-#define D_PV2_POWER "PV2 Potencia"
-#define D_SOLAR_POWER "Potencia Solar"
-#define D_INVERTER_POWER "Potencia del Inversor"
-#define D_STATUS "Estado"
-#define D_WAITING "En Espera"
-#define D_CHECKING "Revisando"
-#define D_WORKING "Funcionando"
-#define D_FAILURE "Falla"
-#define D_SOLAX_ERROR_0 "Sin código de Error"
-#define D_SOLAX_ERROR_1 "Falla por Pérdida de Red"
-#define D_SOLAX_ERROR_2 "Falla por Voltaje de Red"
-#define D_SOLAX_ERROR_3 "Falla por Frecuencia de Red"
-#define D_SOLAX_ERROR_4 "Falla por Voltaje en PV"
-#define D_SOLAX_ERROR_5 "Falla de Aislación"
-#define D_SOLAX_ERROR_6 "Falla por sobretemperatura"
-#define D_SOLAX_ERROR_7 "Falla de Ventilador"
-#define D_SOLAX_ERROR_8 "Falla del Dispositivo"
-
-#endif // _LANGUAGE_ES_ES_H_
+/*
+ es-ES.h - localization for Spanish - Spain for Tasmota
+
+ Copyright (C) 2019 Adrian Scillato
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_ES_ES_H_
+#define _LANGUAGE_ES_ES_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v7.0.0.5
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1034
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "es"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "DomLunMarMieJueVieSab"
+#define D_MONTH3LIST "EneFebMarAbrMayJunJulAgoSepOctNovDic"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Calidad del Aire"
+#define D_AP "AP" // Access Point
+#define D_AS "como"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Conteo Reinicios"
+#define D_BRIGHTLIGHT "Brillante"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Botón"
+#define D_BY "por" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Canal"
+#define D_CO2 "CO2"
+#define D_CODE "código" // Button code
+#define D_COLDLIGHT "Fría"
+#define D_COMMAND "Comando"
+#define D_CONNECTED "Conectado"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Conteo"
+#define D_COUNTER "Contador"
+#define D_CURRENT "Corriente" // As in Voltage and Current
+#define D_DATA "Datos"
+#define D_DARKLIGHT "Oscuro"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Deshabilitado"
+#define D_DISTANCE "Distancia"
+#define D_DNS_SERVER "DNS Server"
+#define D_DONE "Listo"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulación"
+#define D_ENABLED "Habilitado"
+#define D_ERASE "Borrar"
+#define D_ERROR "Error"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Falló"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "FallbackTopic"
+#define D_FALSE "Falso"
+#define D_FILE "Archivo"
+#define D_FLOW_RATE "Caudal"
+#define D_FREE_MEMORY "Memoria Libre"
+#define D_FREQUENCY "Frecuencia"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Grupo"
+#define D_HOST "Host"
+#define D_HOSTNAME "Hostname"
+#define D_HUMIDITY "Humedad"
+#define D_ILLUMINANCE "Luminancia"
+#define D_IMMEDIATE "inmediato" // Button immediate
+#define D_INDEX "Índice"
+#define D_INFO "Información"
+#define D_INFRARED "Infrarrojo"
+#define D_INITIALIZED "Inicializado"
+#define D_IP_ADDRESS "Dirección IP"
+#define D_LIGHT "Luz"
+#define D_LWT "LWT"
+#define D_MODULE "Módulo"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-press"
+#define D_NOISE "Ruido"
+#define D_NONE "Ninguno"
+#define D_OFF "Apagado"
+#define D_OFFLINE "Offline"
+#define D_OK "Ok"
+#define D_ON "Encendido"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Clave"
+#define D_PORT "Puerto"
+#define D_POWER_FACTOR "Factor de Potencia"
+#define D_POWERUSAGE "Potencia"
+#define D_POWERUSAGE_ACTIVE "Potencia Activa"
+#define D_POWERUSAGE_APPARENT "Potencia Aparente"
+#define D_POWERUSAGE_REACTIVE "Potencia Reactiva"
+#define D_PRESSURE "Presión"
+#define D_PRESSUREATSEALEVEL "Presión al nivel del mar"
+#define D_PROGRAM_FLASH_SIZE "Tamaño de Flash de Programa"
+#define D_PROGRAM_SIZE "Tamaño Programa"
+#define D_PROJECT "Proyecto"
+#define D_RAIN "Lluvia"
+#define D_RECEIVED "Recibido"
+#define D_RESTART "Reiniciar"
+#define D_RESTARTING "Reiniciando"
+#define D_RESTART_REASON "Causa Reinicio"
+#define D_RESTORE "Restauración"
+#define D_RETAINED "Grabado"
+#define D_RULE "Regla"
+#define D_SAVE "Grabar"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Iniciar"
+#define D_STD_TIME "STD"
+#define D_STOP "Detener"
+#define D_SUBNET_MASK "Máscara Subred"
+#define D_SUBSCRIBE_TO "Suscribir a"
+#define D_UNSUBSCRIBE_FROM "Desuscribirse de"
+#define D_SUCCESSFUL "Exitosa"
+#define D_SUNRISE "Salida del Sol"
+#define D_SUNSET "Puesta del Sol"
+#define D_TEMPERATURE "Temperatura"
+#define D_TO "a"
+#define D_TOGGLE "Conmutar"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usado"
+#define D_TRANSMIT "Transmitir"
+#define D_TRUE "Verdadero"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "Actualización"
+#define D_UPLOAD "Carga"
+#define D_UPTIME "Tiempo Encendido"
+#define D_USER "Usuario"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Índice UV"
+#define D_UV_INDEX_1 "Bajo"
+#define D_UV_INDEX_2 "Medio"
+#define D_UV_INDEX_3 "Alto"
+#define D_UV_INDEX_4 "Peligroso"
+#define D_UV_INDEX_5 "Quemaduras 1 a 2 grad"
+#define D_UV_INDEX_6 "Quemaduras 3 grad"
+#define D_UV_INDEX_7 "Fuera de Rango"
+#define D_UV_LEVEL "Nivel UV"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Versión"
+#define D_VOLTAGE "Tensión"
+#define D_WEIGHT "Peso"
+#define D_WARMLIGHT "Cálida"
+#define D_WEB_SERVER "Servidor Web"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "Cuidado, esta versión no guarda los cambios"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Log serial deshabilitado"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog re-habilitado"
+
+#define D_SET_BAUDRATE_TO "Baudrate a"
+#define D_RECEIVED_TOPIC "Topic Recibido"
+#define D_DATA_SIZE "Tamaño de Datos"
+#define D_ANALOG_INPUT "Entrada Analógica"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Ciclo Bloqueado"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig FALLÓ con estado"
+#define D_ACTIVE_FOR_3_MINUTES "activo por 3 minutos"
+#define D_FAILED_TO_START "falló inicio"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "Connectando a AP"
+#define D_IN_MODE "en modo"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Falló Conexión, Dirección IP no recibida"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Falló Conexión, AP no pudo ser contactado"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Falló Conexión, clave de AP incorrecta"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Falló Conexión, timeout de AP"
+#define D_ATTEMPTING_CONNECTION "Intentando conectar..."
+#define D_CHECKING_CONNECTION "Probando conexión..."
+#define D_QUERY_DONE "Consulta lista. Servicio MQTT encontrado"
+#define D_MQTT_SERVICE_FOUND "Servicio MQTT encontrado en"
+#define D_FOUND_AT "encontrado en"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host no encontrado"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Grabado a la flash en"
+#define D_LOADED_FROM_FLASH_AT "Cargado desde flash en"
+#define D_USE_DEFAULTS "Usar valores por defecto"
+#define D_ERASED_SECTOR "Sector borrado"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Habilitar JavaScript para usar Tasmota"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MÍNIMO
actualice por favor"
+#define D_WEBSERVER_ACTIVE_ON "Servidor web activo en"
+#define D_WITH_IP_ADDRESS "con dirección IP"
+#define D_WEBSERVER_STOPPED "Servidor web detenido"
+#define D_FILE_NOT_FOUND "Archivo No Encontrado"
+#define D_REDIRECTED "Redireccionado al portal captivo"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager como AccessPoint y Estación"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager como AccessPoint"
+#define D_TRYING_TO_CONNECT "Intentado conectar dispositivo a la red"
+
+#define D_RESTART_IN "Reinicio en"
+#define D_SECONDS "segundos"
+#define D_DEVICE_WILL_RESTART "El dispositivo se reiniciará en unos segundos"
+#define D_BUTTON_TOGGLE "Alternar ON/OFF"
+#define D_CONFIGURATION "Configuración"
+#define D_INFORMATION "Información"
+#define D_FIRMWARE_UPGRADE "Actualizar Firmware"
+#define D_CONSOLE "Consola"
+#define D_CONFIRM_RESTART "Confirmar Reinicio"
+
+#define D_CONFIGURE_MODULE "Configuración del Módulo"
+#define D_CONFIGURE_WIFI "Configuración WiFi"
+#define D_CONFIGURE_MQTT "Configuración MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configuración Domoticz"
+#define D_CONFIGURE_LOGGING "Configuración Logging"
+#define D_CONFIGURE_OTHER "Configuración Extra"
+#define D_CONFIRM_RESET_CONFIGURATION "Confirmar Reset Configuración"
+#define D_RESET_CONFIGURATION "Reset de Configuración"
+#define D_BACKUP_CONFIGURATION "Backup de Configuración"
+#define D_RESTORE_CONFIGURATION "Restaurar Configuración"
+#define D_MAIN_MENU "Menú Principal"
+
+#define D_MODULE_PARAMETERS "Parámetros del módulo"
+#define D_MODULE_TYPE "Tipo de módulo"
+#define D_PULLUP_ENABLE "Botón/Llave sin pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Parámetros Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Buscar redes wifi"
+#define D_SCAN_DONE "Busqueda finalizada"
+#define D_NO_NETWORKS_FOUND "Ninguna red encontrada"
+#define D_REFRESH_TO_SCAN_AGAIN "Recargar página para buscar nuevamente"
+#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplicado"
+#define D_SKIPPING_LOW_QUALITY "Ignorado por baja calidad"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "SSId AP1"
+#define D_AP1_PASSWORD "Clave AP1"
+#define D_AP2_SSID "SSId AP2"
+#define D_AP2_PASSWORD "Clave AP2"
+
+#define D_MQTT_PARAMETERS "Parámetros MQTT"
+#define D_CLIENT "Cliente"
+#define D_FULL_TOPIC "Full Topic"
+
+#define D_LOGGING_PARAMETERS "Parámetros Logging"
+#define D_SERIAL_LOG_LEVEL "Nivel de log por Serial"
+#define D_MQTT_LOG_LEVEL "Nivel de log por Mqtt"
+#define D_WEB_LOG_LEVEL "Nivel de log por Web"
+#define D_SYS_LOG_LEVEL "Nivel de log por Syslog"
+#define D_MORE_DEBUG "Más Debug"
+#define D_SYSLOG_HOST "Host del Syslog"
+#define D_SYSLOG_PORT "Puerto del Syslog"
+#define D_TELEMETRY_PERIOD "Período de Telemetría"
+
+#define D_OTHER_PARAMETERS "Otros parámetros"
+#define D_TEMPLATE "Plantilla"
+#define D_ACTIVATE "Activar"
+#define D_WEB_ADMIN_PASSWORD "Clave Administrador Web"
+#define D_MQTT_ENABLE "Habilitar MQTT"
+#define D_FRIENDLY_NAME "Nombre Amigable"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "dispositivo simple"
+#define D_MULTI_DEVICE "dispositivo múltiple"
+
+#define D_CONFIGURE_TEMPLATE "Configurar Plantilla"
+#define D_TEMPLATE_PARAMETERS "Parámetros de Plantilla"
+#define D_TEMPLATE_NAME "Nombre"
+#define D_BASE_TYPE "Basada en"
+#define D_TEMPLATE_FLAGS "Opciones"
+
+#define D_SAVE_CONFIGURATION "Grabar configuración"
+#define D_CONFIGURATION_SAVED "Configuración grabada"
+#define D_CONFIGURATION_RESET "Configuración restablecida"
+
+#define D_PROGRAM_VERSION "Versión del Programa"
+#define D_BUILD_DATE_AND_TIME "Fecha y Hora de Compilación"
+#define D_CORE_AND_SDK_VERSION "Versión Core/SDK"
+#define D_FLASH_WRITE_COUNT "Contador de escritura en Flash"
+#define D_MAC_ADDRESS "Dirección MAC"
+#define D_MQTT_HOST "Host MQTT"
+#define D_MQTT_PORT "Puerto MQTT"
+#define D_MQTT_CLIENT "Cliente MQTT"
+#define D_MQTT_USER "Usuario MQTT"
+#define D_MQTT_TOPIC "Topic MQTT"
+#define D_MQTT_GROUP_TOPIC "Group Topic MQTT"
+#define D_MQTT_FULL_TOPIC "Full Topic MQTT"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Tamaño Flash"
+#define D_FREE_PROGRAM_SPACE "Memoria de Programa Libre"
+
+#define D_UPGRADE_BY_WEBSERVER "Actualizar por servidor web"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Comenzar actualización"
+#define D_UPGRADE_BY_FILE_UPLOAD "Actualizar cargando archivo bin"
+#define D_UPLOAD_STARTED "Cargando archivo"
+#define D_UPGRADE_STARTED "Actualización iniciada"
+#define D_UPLOAD_DONE "Carga finalizada"
+#define D_UPLOAD_ERR_1 "Ningún archivo seleccionado"
+#define D_UPLOAD_ERR_2 "Espacio insuficiente"
+#define D_UPLOAD_ERR_3 "Magic byte no corresponde a 0xE9"
+#define D_UPLOAD_ERR_4 "El tamaño de la memoria de programa es mayor que la de la flash"
+#define D_UPLOAD_ERR_5 "Error de comparación del buffer de carga"
+#define D_UPLOAD_ERR_6 "Carga fallida. Habilitar logging 3"
+#define D_UPLOAD_ERR_7 "Carga cancelada"
+#define D_UPLOAD_ERR_8 "Archivo no válido"
+#define D_UPLOAD_ERR_9 "Archivo muy grande"
+#define D_UPLOAD_ERR_10 "No inició chip RF"
+#define D_UPLOAD_ERR_11 "No se pudo borrar en el chip RF"
+#define D_UPLOAD_ERR_12 "No se puedo escribir en el chip RF"
+#define D_UPLOAD_ERR_13 "No se pudo decodificar firmware RF"
+#define D_UPLOAD_ERROR_CODE "Código de error de carga"
+
+#define D_ENTER_COMMAND "Ingresar comando"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 si desea respuesta"
+#define D_NEED_USER_AND_PASSWORD "Se necesita user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verificar TLS fingerprint..."
+#define D_TLS_CONNECT_FAILED_TO "Falló Conexión TLS a"
+#define D_RETRY_IN "Reintentando"
+#define D_VERIFIED "Verificado Fingerprint"
+#define D_INSECURE "Conexión insegura por Fingerprint inválido"
+#define D_CONNECT_FAILED_TO "Falló Conexión a"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast deshabilitado"
+#define D_MULTICAST_REJOINED "Multicast (re)conectado"
+#define D_MULTICAST_JOIN_FAILED "Conexión Multicast fallida"
+#define D_FAILED_TO_SEND_RESPONSE "Falla al enviar respuesta"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "Evento base de WeMo"
+#define D_WEMO_EVENT_SERVICE "Evento de servicio de WeMo"
+#define D_WEMO_META_SERVICE "Meta Servicio de WeMo"
+#define D_WEMO_SETUP "Configuración de WeMo"
+#define D_RESPONSE_SENT "Respuesta enviada"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Configuración Hue"
+#define D_HUE_API_NOT_IMPLEMENTED "API de Hue no implementada"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 paquetes de respuesta enviados"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Parámetros Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Potencia,Energía"
+ #define D_DOMOTICZ_ILLUMINANCE "Luminancia"
+ #define D_DOMOTICZ_COUNT "Contador/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltaje/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Corriente/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Calidad del Aire"
+ #define D_DOMOTICZ_P1_SMART_METER "Medidor Inteligente P1"
+#define D_DOMOTICZ_UPDATE_TIMER "Intervalo de refresco"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configuración Temporizadores"
+#define D_TIMER_PARAMETERS "Parámetros de Temporizadores"
+#define D_TIMER_ENABLE "Habilitar Temporizadores"
+#define D_TIMER_ARM "Activo"
+#define D_TIMER_TIME "Hora"
+#define D_TIMER_DAYS "Días"
+#define D_TIMER_REPEAT "Repetir"
+#define D_TIMER_OUTPUT "Salida"
+#define D_TIMER_ACTION "Estado"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configuración de KNX"
+#define D_KNX_PARAMETERS "Parámetros de KNX"
+#define D_KNX_GENERAL_CONFIG "General"
+#define D_KNX_PHYSICAL_ADDRESS "Dirección Física"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Debe ser única en la red KNX )"
+#define D_KNX_ENABLE "Habilitar KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Datos a Enviar a las Direcciones de Grupo"
+#define D_ADD "Agregar"
+#define D_DELETE "Eliminar"
+#define D_REPLY "Responder"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Direcciones de Grupo para Recibir Datos"
+#define D_RECEIVED_FROM "Recibido desde"
+#define D_KNX_COMMAND_WRITE "Escribir"
+#define D_KNX_COMMAND_READ "Leer"
+#define D_KNX_COMMAND_OTHER "Otro"
+#define D_SENT_TO "enviada a"
+#define D_KNX_WARNING "La dirección de grupo ( 0 / 0 / 0 ) está reservada y no puede ser utilizada."
+#define D_KNX_ENHANCEMENT "Mejora de Comunicación"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energía Hoy"
+#define D_ENERGY_YESTERDAY "Energía Ayer"
+#define D_ENERGY_TOTAL "Energía Total"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Abrir"
+#define D_CLOSE "Cerrar"
+#define D_DOMOTICZ_SHUTTER "Cortina"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configurar PCF8574"
+#define D_PCF8574_PARAMETERS "Parámetros de PCF8574"
+#define D_INVERT_PORTS "Invertir Puertos"
+#define D_DEVICE "Dispositivo"
+#define D_DEVICE_INPUT "Entrada"
+#define D_DEVICE_OUTPUT "Salida"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor ocupado"
+#define D_SENSOR_CRC_ERROR "Error CRC del Sensor"
+#define D_SENSORS_FOUND "Sensores encontrados"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Espera de timeout por"
+#define D_START_SIGNAL_LOW "iniciar señal baja"
+#define D_START_SIGNAL_HIGH "iniciar señal alta"
+#define D_PULSE "pulso"
+#define D_CHECKSUM_FAILURE "Falló Checksum"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor no ha enviado el comando ACK"
+#define D_SHT1X_FOUND "SHT1X encontrado"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Partículas"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remover Peso"
+#define D_HX_CAL_REFERENCE "Poner Peso de Referencia"
+#define D_HX_CAL_DONE "Calibrado"
+#define D_HX_CAL_FAIL "Falló Calibración"
+#define D_RESET_HX711 "Restablecer Escala"
+#define D_CONFIGURE_HX711 "Configurar Escala"
+#define D_HX711_PARAMETERS "Parámetros de Escala"
+#define D_ITEM_WEIGHT "Peso"
+#define D_REFERENCE_WEIGHT "Peso de Referencia"
+#define D_CALIBRATE "Calibrar"
+#define D_CALIBRATION "Calibración"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Dirección del Viento"
+#define D_TX20_WIND_SPEED "Vel. del Viento"
+#define D_TX20_WIND_SPEED_AVG "Vel. Prom. del Viento"
+#define D_TX20_WIND_SPEED_MAX "Vel. Max. del Viento"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "O"
+
+// 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 "User"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IR Tx"
+#define D_SENSOR_SWITCH "Llave" // Suffix "1"
+#define D_SENSOR_BUTTON "Botón" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Contador" // Suffix "1"
+#define D_SENSOR_IRRECV "IR Rx"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "seg"
+#define D_UNIT_SECTORS "sectores"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Ángulo de Fase"
+#define D_IMPORT_ACTIVE "P. Activa Entrante"
+#define D_EXPORT_ACTIVE "P. Activa Saliente"
+#define D_IMPORT_REACTIVE "P. Reactiva Entrante"
+#define D_EXPORT_REACTIVE "P. Reactiva Saliente"
+#define D_TOTAL_REACTIVE "P. Reactiva Total"
+#define D_UNIT_KWARH "kVArH"
+#define D_UNIT_ANGLE "Grados"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltaje"
+#define D_PV1_CURRENT "PV1 Corriente"
+#define D_PV1_POWER "PV1 Potencia"
+#define D_PV2_VOLTAGE "PV2 Voltaee"
+#define D_PV2_CURRENT "PV2 Corriente"
+#define D_PV2_POWER "PV2 Potencia"
+#define D_SOLAR_POWER "Potencia Solar"
+#define D_INVERTER_POWER "Potencia del Inversor"
+#define D_STATUS "Estado"
+#define D_WAITING "En Espera"
+#define D_CHECKING "Revisando"
+#define D_WORKING "Funcionando"
+#define D_FAILURE "Falla"
+#define D_SOLAX_ERROR_0 "Sin código de Error"
+#define D_SOLAX_ERROR_1 "Falla por Pérdida de Red"
+#define D_SOLAX_ERROR_2 "Falla por Voltaje de Red"
+#define D_SOLAX_ERROR_3 "Falla por Frecuencia de Red"
+#define D_SOLAX_ERROR_4 "Falla por Voltaje en PV"
+#define D_SOLAX_ERROR_5 "Falla de Aislación"
+#define D_SOLAX_ERROR_6 "Falla por sobretemperatura"
+#define D_SOLAX_ERROR_7 "Falla de Ventilador"
+#define D_SOLAX_ERROR_8 "Falla del Dispositivo"
+
+#endif // _LANGUAGE_ES_ES_H_
diff --git a/tasmota/language/fr-FR.h b/tasmota/language/fr-FR.h
index 7b8d291b8..e107409e3 100644
--- a/tasmota/language/fr-FR.h
+++ b/tasmota/language/fr-FR.h
@@ -1,703 +1,701 @@
-/*
- fr-FR.h - localization for French - France for Tasmota
-
- Copyright (C) 2019 Olivier Francais
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_FR_FR_H_
-#define _LANGUAGE_FR_FR_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v7.1.2.4
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1036
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "fr"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "DimLunMarMerJeuVenSam"
-#define D_MONTH3LIST "JanFevMarAvrMaiJunJulAutSepOctNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Qualité de l'Air"
-#define D_AP "AP" // Access Point
-#define D_AS "comme"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Nombre de boot"
-#define D_BRIGHTLIGHT "Luminosité"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Bouton"
-#define D_BY "par" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Canal"
-#define D_CO2 "Dioxyde de carbone"
-#define D_CODE "code" // Button code
-#define D_COLDLIGHT "Froid"
-#define D_COMMAND "Commande"
-#define D_CONNECTED "Connecté"
-#define D_CORS_DOMAIN "Domaine CORS"
-#define D_COUNT "Compte"
-#define D_COUNTER "Compteur"
-#define D_CURRENT "Courant" // As in Voltage and Current
-#define D_DATA "Donnée"
-#define D_DARKLIGHT "Sombre"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Désactivé"
-#define D_DISTANCE "Distance"
-#define D_DNS_SERVER "Serveur DNS"
-#define D_DONE "Fait"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Émulation"
-#define D_ENABLED "Activé"
-#define D_ERASE "Effacer"
-#define D_ERROR "Erreur"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Échoué"
-#define D_FALLBACK "Secours"
-#define D_FALLBACK_TOPIC "Topic de secours"
-#define D_FALSE "Faux"
-#define D_FILE "Fichier"
-#define D_FLOW_RATE "Débit"
-#define D_FREE_MEMORY "Mémoire libre"
-#define D_FREQUENCY "Fréquence"
-#define D_GAS "Gaz"
-#define D_GATEWAY "Passerelle"
-#define D_GROUP "Groupe"
-#define D_HOST "Hôte"
-#define D_HOSTNAME "Nom d'Hôte"
-#define D_HUMIDITY "Humidité"
-#define D_ILLUMINANCE "Éclairement"
-#define D_IMMEDIATE "immédiat" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infra-rouge"
-#define D_INITIALIZED "Initialisé"
-#define D_IP_ADDRESS "Adresse IP"
-#define D_LIGHT "Lumière"
-#define D_LWT "LWT"
-#define D_MODULE "Module"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-pression"
-#define D_NOISE "Bruit"
-#define D_NONE "Aucun"
-#define D_OFF "Arrêt"
-#define D_OFFLINE "Déconnecté"
-#define D_OK "Ok"
-#define D_ON "Marche"
-#define D_ONLINE "Connecté"
-#define D_PASSWORD "Mot de passe"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Fact de puiss"
-#define D_POWERUSAGE "Puissance"
-#define D_POWERUSAGE_ACTIVE "Puiss active"
-#define D_POWERUSAGE_APPARENT "Puiss apparente"
-#define D_POWERUSAGE_REACTIVE "Puiss réactive"
-#define D_PRESSURE "Pression"
-#define D_PRESSUREATSEALEVEL "PressionMer"
-#define D_PROGRAM_FLASH_SIZE "Taille Flash Programme"
-#define D_PROGRAM_SIZE "Taille programme"
-#define D_PROJECT "Projet"
-#define D_RAIN "Pluie"
-#define D_RECEIVED "Reçu"
-#define D_RESTART "Redémarrage"
-#define D_RESTARTING "Redémarre"
-#define D_RESTART_REASON "Raison du redémarrage"
-#define D_RESTORE "restaurer"
-#define D_RETAINED "persistant" // MQTT
-#define D_RULE "Règle"
-#define D_SAVE "Enregistrer"
-#define D_SENSOR "Capteur"
-#define D_SSID "SSID"
-#define D_START "Lancer" // "Lancer la mise à jour"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Masque sous-réseau"
-#define D_SUBSCRIBE_TO "S'abonner à"
-#define D_UNSUBSCRIBE_FROM "Se désabonner de"
-#define D_SUCCESSFUL "Réussi"
-#define D_SUNRISE "Lever du jour"
-#define D_SUNSET "Tombée de la nuit"
-#define D_TEMPERATURE "Température"
-#define D_TO "à"
-#define D_TOGGLE "Inverser"
-#define D_TOPIC "Topic" // Keep MQTT keyword
-#define D_TOTAL_USAGE "Eau totale"
-#define D_TRANSMIT "Transmettre"
-#define D_TRUE "Vrai"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "la mise à jour" // "Lancer la mise à jour"
-#define D_UPLOAD "Upload" // Not better in french
-#define D_UPTIME "Durée d'activité"
-#define D_USER "Utilisateur"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Indice UV"
-#define D_UV_INDEX_1 "Faible"
-#define D_UV_INDEX_2 "Modéré"
-#define D_UV_INDEX_3 "Élevé"
-#define D_UV_INDEX_4 "Très élevé"
-#define D_UV_INDEX_5 "Brûlure niv.1/2"
-#define D_UV_INDEX_6 "Brûlure niv.3"
-#define D_UV_INDEX_7 "Hors échelle"
-#define D_UV_LEVEL "Niveau UV"
-#define D_UV_POWER "Puissance UV"
-#define D_VERSION "Version"
-#define D_VOLTAGE "Tension"
-#define D_WEIGHT "Poids"
-#define D_WARMLIGHT "Chaud"
-#define D_WEB_SERVER "Serveur web"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ATTENTION Cette version ne supporte pas les réglages persistants"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Journalisation série désactivée"
-#define D_SYSLOG_LOGGING_REENABLED "Jounalisation SysLog réactivée"
-
-#define D_SET_BAUDRATE_TO "Définir le débit à"
-#define D_RECEIVED_TOPIC "Topic reçu" // Terme MQTT
-#define D_DATA_SIZE "Taille données"
-#define D_ANALOG_INPUT "Analogique"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Boucle bloquée"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig ÉCHOUÉ avec status"
-#define D_ACTIVE_FOR_3_MINUTES "actif pour 3 minutes"
-#define D_FAILED_TO_START "Échec de démarrage"
-#define D_PATCH_ISSUE_2186 "Correction 2186"
-#define D_CONNECTING_TO_AP "Connexion à l'AP"
-#define D_IN_MODE "en mode"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Échec de connexion car aucune adresse IP n'a été reçue"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Échec de connexion car l'AP ne peut-être contacté"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Échec de connexion car le mot de passe de l'AP est incorrect"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Échec de connexion avec l'AP, expiré"
-#define D_ATTEMPTING_CONNECTION "Tentative de connexion..."
-#define D_CHECKING_CONNECTION "Vérification connexion..."
-#define D_QUERY_DONE "Requête terminée. Services MQTT trouvés"
-#define D_MQTT_SERVICE_FOUND "Service MQTT trouvé sur"
-#define D_FOUND_AT "trouvé à"
-#define D_SYSLOG_HOST_NOT_FOUND "Hôte SysLog introuvable"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Enregistré en flash à"
-#define D_LOADED_FROM_FLASH_AT "Chargé de la flash à"
-#define D_USE_DEFAULTS "Utiliser par défaut"
-#define D_ERASED_SECTOR "Secteur effacé"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Pour utiliser Tasmota, veuillez activer JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMAL
merci de mettre à jour"
-#define D_WEBSERVER_ACTIVE_ON "Serveur web actif sur"
-#define D_WITH_IP_ADDRESS "avec l'adresse IP"
-#define D_WEBSERVER_STOPPED "Serveur web éteint"
-#define D_FILE_NOT_FOUND "Fichier introuvable"
-#define D_REDIRECTED "Redirection sur le portail captif"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager en mode Point d'Accès et Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager en mode Point d'Accès"
-#define D_TRYING_TO_CONNECT "Tentative de connexion du module au réseau"
-
-#define D_RESTART_IN "Redémarrage dans"
-#define D_SECONDS "secondes"
-#define D_DEVICE_WILL_RESTART "Le module va redémarrer dans quelques secondes"
-#define D_BUTTON_TOGGLE "on/off"
-#define D_CONFIGURATION "Configuration"
-#define D_INFORMATION "Informations"
-#define D_FIRMWARE_UPGRADE "Mise à jour du Firmware"
-#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Confirmer redémarrage"
-
-#define D_CONFIGURE_MODULE "Configuration du Module"
-#define D_CONFIGURE_WIFI "Configuration WiFi"
-#define D_CONFIGURE_MQTT "Configuration MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configuration Domoticz"
-#define D_CONFIGURE_LOGGING "Configuration du journal"
-#define D_CONFIGURE_OTHER "Autre configuration"
-#define D_CONFIRM_RESET_CONFIGURATION "Confirmer la réinit. de la config."
-#define D_RESET_CONFIGURATION "Configuration par défaut"
-#define D_BACKUP_CONFIGURATION "Sauvegarde de la config."
-#define D_RESTORE_CONFIGURATION "Restauration de la config."
-#define D_MAIN_MENU "Menu principal"
-
-#define D_MODULE_PARAMETERS "Paramètres module"
-#define D_MODULE_TYPE "Type de module"
-#define D_PULLUP_ENABLE "Inter. sans pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Entrée série"
-#define D_SERIAL_OUT "Sortie série"
-
-#define D_WIFI_PARAMETERS "Paramètres Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Scan des réseaux wifi"
-#define D_SCAN_DONE "Scan terminé"
-#define D_NO_NETWORKS_FOUND "Aucun réseau trouvé"
-#define D_REFRESH_TO_SCAN_AGAIN "Rafraîchir pour scanner à nouveau"
-#define D_DUPLICATE_ACCESSPOINT "Point d'Accès dupliqué"
-#define D_SKIPPING_LOW_QUALITY "Évité car de mauvaise qualité"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSID"
-#define D_AP1_PASSWORD "Mot de passe AP1"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "Mot de passe AP2"
-
-#define D_MQTT_PARAMETERS "Paramètres MQTT"
-#define D_CLIENT "Client"
-#define D_FULL_TOPIC "Topic complet"
-
-#define D_LOGGING_PARAMETERS "Paramètres du journal"
-#define D_SERIAL_LOG_LEVEL "Niveau de journalisation série"
-#define D_MQTT_LOG_LEVEL "Niveau de journalisation MQTT"
-#define D_WEB_LOG_LEVEL "Niveau de journalisation web"
-#define D_SYS_LOG_LEVEL "Niveau SysLog"
-#define D_MORE_DEBUG "Plus de debug"
-#define D_SYSLOG_HOST "Hôte SysLog"
-#define D_SYSLOG_PORT "Port SysLog"
-#define D_TELEMETRY_PERIOD "Période télémétrie"
-
-#define D_OTHER_PARAMETERS "Autres paramètres"
-#define D_TEMPLATE "Modèle"
-#define D_ACTIVATE "Activer"
-#define D_WEB_ADMIN_PASSWORD "Mot de passe Web Admin"
-#define D_MQTT_ENABLE "MQTT activé"
-#define D_FRIENDLY_NAME "Surnom"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "module unique"
-#define D_MULTI_DEVICE "multi module"
-
-#define D_CONFIGURE_TEMPLATE "Configuration du modèle"
-#define D_TEMPLATE_PARAMETERS "Paramètres du modèle"
-#define D_TEMPLATE_NAME "Nom"
-#define D_BASE_TYPE "Basé sur"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Enregistrer la configuration"
-#define D_CONFIGURATION_SAVED "Configuration enregistrée"
-#define D_CONFIGURATION_RESET "Configuration réinitialisée"
-
-#define D_PROGRAM_VERSION "Version du programme"
-#define D_BUILD_DATE_AND_TIME "Date & Heure de build"
-#define D_CORE_AND_SDK_VERSION "Version Core/SDK"
-#define D_FLASH_WRITE_COUNT "Compteur écriture flash"
-#define D_MAC_ADDRESS "Adresse MAC"
-#define D_MQTT_HOST "Hôte MQTT"
-#define D_MQTT_PORT "Port MQTT"
-#define D_MQTT_CLIENT "Client MQTT"
-#define D_MQTT_USER "Utilisateur MQTT"
-#define D_MQTT_TOPIC "Topic MQTT"
-#define D_MQTT_GROUP_TOPIC "Groupe topic MQTT"
-#define D_MQTT_FULL_TOPIC "Topic complet MQTT"
-#define D_MDNS_DISCOVERY "Découverte mDNS"
-#define D_MDNS_ADVERTISE "Annonce mDNS"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Taille flash"
-#define D_FREE_PROGRAM_SPACE "Espace programme libre"
-
-#define D_UPGRADE_BY_WEBSERVER "Mise à jour par serveur web"
-#define D_OTA_URL "URL OTA"
-#define D_START_UPGRADE "Lancer la mise à jour"
-#define D_UPGRADE_BY_FILE_UPLOAD "Mise à jour par téléchargement fichier"
-#define D_UPLOAD_STARTED "Téléchargement lancé"
-#define D_UPGRADE_STARTED "Mise à jour lancée"
-#define D_UPLOAD_DONE "Téléchargement terminé"
-#define D_UPLOAD_ERR_1 "Aucun fichier sélectionné"
-#define D_UPLOAD_ERR_2 "Espace insuffisant"
-#define D_UPLOAD_ERR_3 "L'octet magique n'est pas 0xE9"
-#define D_UPLOAD_ERR_4 "La taille du programme à flasher est plus grande que la taille réelle de la mémoire flash"
-#define D_UPLOAD_ERR_5 "Erreur de comparaison du buffer de téléchargement"
-#define D_UPLOAD_ERR_6 "Téléchargement échoué. Activer WebLog 3"
-#define D_UPLOAD_ERR_7 "Téléchargement annulé"
-#define D_UPLOAD_ERR_8 "Fichier invalide"
-#define D_UPLOAD_ERR_9 "Fichier trop grand"
-#define D_UPLOAD_ERR_10 "Erreur d'initialisation du chip RF"
-#define D_UPLOAD_ERR_11 "Erreur d'effacement du chip RF"
-#define D_UPLOAD_ERR_12 "Erreur d'accès en écriture au chip RF"
-#define D_UPLOAD_ERR_13 "Erreur de décodage du firmware RF"
-#define D_UPLOAD_ERROR_CODE "Code d'erreur téléchargement"
-
-#define D_ENTER_COMMAND "Saisir une commande"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Activer WebLog 2 si une réponse est attendue"
-#define D_NEED_USER_AND_PASSWORD "Nécessite utilisateur=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Vérification d'empreinte TLS ..."
-#define D_TLS_CONNECT_FAILED_TO "Échec de connexion TLS à"
-#define D_RETRY_IN "Nouvelle tentative dans"
-#define D_VERIFIED "Vérifié par empreinte "
-#define D_INSECURE "Connexion non sécurisée car empreinte non vérifiée"
-#define D_CONNECT_FAILED_TO "Échec de connexion à"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast désactivé"
-#define D_MULTICAST_REJOINED "Multicast (re)joint"
-#define D_MULTICAST_JOIN_FAILED "Multicast échec abonnement"
-#define D_FAILED_TO_SEND_RESPONSE "Échec d'envoi réponse"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "Réglage WeMo"
-#define D_RESPONSE_SENT "Réponse envoyée"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Réglage Hue"
-#define D_HUE_API_NOT_IMPLEMENTED "API Hue non implémentée"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 paquets de réponse envoyés"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Paramètres Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Puissance,Énergie"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Compteur/PM1"
- #define D_DOMOTICZ_VOLTAGE "Tension/PM2,5"
- #define D_DOMOTICZ_CURRENT "Courant/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Qualité de l'air"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Durée de rafraichissement"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configuration des Timers"
-#define D_TIMER_PARAMETERS "Paramètres Timer"
-#define D_TIMER_ENABLE "Activer les Timers"
-#define D_TIMER_ARM "Armer"
-#define D_TIMER_TIME "Temps"
-#define D_TIMER_DAYS "Jours"
-#define D_TIMER_REPEAT "Répéter"
-#define D_TIMER_OUTPUT "Sortie"
-#define D_TIMER_ACTION "Action"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configuration de KNX"
-#define D_KNX_PARAMETERS "Paramètres KNX"
-#define D_KNX_GENERAL_CONFIG "Général"
-#define D_KNX_PHYSICAL_ADDRESS "Adresse individuelle" // Backbone/Line/Device -> Zone/Ligne/Participant
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Doit être unique sur le réseau KNX)"
-#define D_KNX_ENABLE "Activer KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Données à envoyer aux Adresses de Groupe"
-#define D_ADD "Ajoûter"
-#define D_DELETE "Supprimer"
-#define D_REPLY "Répondre"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Données à recevoir des Adresses de Groupe"
-#define D_RECEIVED_FROM "Reçu de"
-#define D_KNX_COMMAND_WRITE "Écrire"
-#define D_KNX_COMMAND_READ "Lire"
-#define D_KNX_COMMAND_OTHER "Autre"
-#define D_SENT_TO "envoyé à"
-#define D_KNX_WARNING "L'Adresse de Groupe (0/0/0) est réservée et ne peut être utilisée."
-#define D_KNX_ENHANCEMENT "Amélioration de la communication"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xsns_03_energy.ino
-#define D_ENERGY_TODAY "Énergie aujourd'hui"
-#define D_ENERGY_YESTERDAY "Énergie hier"
-#define D_ENERGY_TOTAL "Énergie totale"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Ouvert"
-#define D_CLOSE "Fermé"
-#define D_DOMOTICZ_SHUTTER "Volet"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configurer PCF8574"
-#define D_PCF8574_PARAMETERS "Paramètres PCF8574"
-#define D_INVERT_PORTS "Inverser les Ports"
-#define D_DEVICE "Module"
-#define D_DEVICE_INPUT "Entrée"
-#define D_DEVICE_OUTPUT "Sortie"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Capteur occupé"
-#define D_SENSOR_CRC_ERROR "Erreur CRC capteur"
-#define D_SENSORS_FOUND "Capteur trouvé"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Expiration du délai"
-#define D_START_SIGNAL_LOW "Signal Start bas"
-#define D_START_SIGNAL_HIGH "Signal Start haut"
-#define D_PULSE "Impulsion"
-#define D_CHECKSUM_FAILURE "Erreur checksum"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Le capteur n'a pas acquitté la commande"
-#define D_SHT1X_FOUND "SHT1X found"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particules"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accél. Axe-X"
-#define D_AY_AXIS "Accél. Axe-Y"
-#define D_AZ_AXIS "Accél. Axe-Z"
-#define D_GX_AXIS "Gyro Axe-X"
-#define D_GY_AXIS "Gyro Axe-Y"
-#define D_GZ_AXIS "Gyro Axe-Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Retirer la charge"
-#define D_HX_CAL_REFERENCE "Charger l'étalon de poids"
-#define D_HX_CAL_DONE "Étalonné"
-#define D_HX_CAL_FAIL "L'étalonnage a échoué"
-#define D_RESET_HX711 "Réinitialiser le capteur"
-#define D_CONFIGURE_HX711 "Configurer le capteur"
-#define D_HX711_PARAMETERS "Paramètres capteur"
-#define D_ITEM_WEIGHT "Poids de l'objet"
-#define D_REFERENCE_WEIGHT "Poids de référence"
-#define D_CALIBRATE "Étalonner"
-#define D_CALIBRATION "Étalonnage"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Direction du vent"
-#define D_TX20_WIND_SPEED "Vitesse du vent"
-#define D_TX20_WIND_SPEED_AVG "Vitesse Moy."
-#define D_TX20_WIND_SPEED_MAX "Vitesse Max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "O"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "ÉmetIR"
-#define D_SENSOR_SWITCH "Inter." // Suffix "1"
-#define D_SENSOR_BUTTON "Bouton" // Suffix "1"
-#define D_SENSOR_RELAY "Relais" // Suffix "1i"
-#define D_SENSOR_LED "LED" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Compteur" // Suffix "1"
-#define D_SENSOR_IRRECV "RécptIR"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "RétroÉcl"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "h"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "gal/mn"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h"
-#define D_UNIT_KILOOHM "kΩ"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
-#define D_UNIT_MICROMETER "µm"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "mn"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "s"
-#define D_UNIT_SECTORS "secteurs"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Angle de phase"
-#define D_IMPORT_ACTIVE "Énergie act conso"
-#define D_EXPORT_ACTIVE "Énergie act fournie"
-#define D_IMPORT_REACTIVE "Énergie réa conso"
-#define D_EXPORT_REACTIVE "Énergie réa fournie"
-#define D_TOTAL_REACTIVE "Énergie réa totale"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "°"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "Tension PV1"
-#define D_PV1_CURRENT "Courant PV1"
-#define D_PV1_POWER "Puissance PV1"
-#define D_PV2_VOLTAGE "Tension PV2"
-#define D_PV2_CURRENT "Courant PV2"
-#define D_PV2_POWER "Puissance PV2"
-#define D_SOLAR_POWER "Puissance solaire"
-#define D_INVERTER_POWER "Puissance onduleur"
-#define D_STATUS "Statut"
-#define D_WAITING "En attente"
-#define D_CHECKING "En test"
-#define D_WORKING "En marche"
-#define D_FAILURE "Défault"
-#define D_SOLAX_ERROR_0 "Aucun code d'erreur"
-#define D_SOLAX_ERROR_1 "Défaut Perte de réseau"
-#define D_SOLAX_ERROR_2 "Défaut Tension réseau"
-#define D_SOLAX_ERROR_3 "Défaut Fréquence réseau"
-#define D_SOLAX_ERROR_4 "Défaut Tension PV"
-#define D_SOLAX_ERROR_5 "Défaut Isolation"
-#define D_SOLAX_ERROR_6 "Défaut Surchauffe"
-#define D_SOLAX_ERROR_7 "Défaut Ventilateur"
-#define D_SOLAX_ERROR_8 "Défaut Autre équipement"
-
-#endif // _LANGUAGE_FR_FR_H_
+/*
+ fr-FR.h - localization for French - France for Tasmota
+
+ Copyright (C) 2019 Olivier Francais
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_FR_FR_H_
+#define _LANGUAGE_FR_FR_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v7.1.2.4
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1036
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "fr"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "DimLunMarMerJeuVenSam"
+#define D_MONTH3LIST "JanFevMarAvrMaiJunJulAutSepOctNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Qualité de l'Air"
+#define D_AP "AP" // Access Point
+#define D_AS "comme"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Nombre de boot"
+#define D_BRIGHTLIGHT "Luminosité"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Bouton"
+#define D_BY "par" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Canal"
+#define D_CO2 "Dioxyde de carbone"
+#define D_CODE "code" // Button code
+#define D_COLDLIGHT "Froid"
+#define D_COMMAND "Commande"
+#define D_CONNECTED "Connecté"
+#define D_CORS_DOMAIN "Domaine CORS"
+#define D_COUNT "Compte"
+#define D_COUNTER "Compteur"
+#define D_CURRENT "Courant" // As in Voltage and Current
+#define D_DATA "Donnée"
+#define D_DARKLIGHT "Sombre"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Désactivé"
+#define D_DISTANCE "Distance"
+#define D_DNS_SERVER "Serveur DNS"
+#define D_DONE "Fait"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Émulation"
+#define D_ENABLED "Activé"
+#define D_ERASE "Effacer"
+#define D_ERROR "Erreur"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Échoué"
+#define D_FALLBACK "Secours"
+#define D_FALLBACK_TOPIC "Topic de secours"
+#define D_FALSE "Faux"
+#define D_FILE "Fichier"
+#define D_FLOW_RATE "Débit"
+#define D_FREE_MEMORY "Mémoire libre"
+#define D_FREQUENCY "Fréquence"
+#define D_GAS "Gaz"
+#define D_GATEWAY "Passerelle"
+#define D_GROUP "Groupe"
+#define D_HOST "Hôte"
+#define D_HOSTNAME "Nom d'Hôte"
+#define D_HUMIDITY "Humidité"
+#define D_ILLUMINANCE "Éclairement"
+#define D_IMMEDIATE "immédiat" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infra-rouge"
+#define D_INITIALIZED "Initialisé"
+#define D_IP_ADDRESS "Adresse IP"
+#define D_LIGHT "Lumière"
+#define D_LWT "LWT"
+#define D_MODULE "Module"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-pression"
+#define D_NOISE "Bruit"
+#define D_NONE "Aucun"
+#define D_OFF "Arrêt"
+#define D_OFFLINE "Déconnecté"
+#define D_OK "Ok"
+#define D_ON "Marche"
+#define D_ONLINE "Connecté"
+#define D_PASSWORD "Mot de passe"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Fact de puiss"
+#define D_POWERUSAGE "Puissance"
+#define D_POWERUSAGE_ACTIVE "Puiss active"
+#define D_POWERUSAGE_APPARENT "Puiss apparente"
+#define D_POWERUSAGE_REACTIVE "Puiss réactive"
+#define D_PRESSURE "Pression"
+#define D_PRESSUREATSEALEVEL "PressionMer"
+#define D_PROGRAM_FLASH_SIZE "Taille Flash Programme"
+#define D_PROGRAM_SIZE "Taille programme"
+#define D_PROJECT "Projet"
+#define D_RAIN "Pluie"
+#define D_RECEIVED "Reçu"
+#define D_RESTART "Redémarrage"
+#define D_RESTARTING "Redémarre"
+#define D_RESTART_REASON "Raison du redémarrage"
+#define D_RESTORE "restaurer"
+#define D_RETAINED "persistant" // MQTT
+#define D_RULE "Règle"
+#define D_SAVE "Enregistrer"
+#define D_SENSOR "Capteur"
+#define D_SSID "SSID"
+#define D_START "Lancer" // "Lancer la mise à jour"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Masque sous-réseau"
+#define D_SUBSCRIBE_TO "S'abonner à"
+#define D_UNSUBSCRIBE_FROM "Se désabonner de"
+#define D_SUCCESSFUL "Réussi"
+#define D_SUNRISE "Lever du jour"
+#define D_SUNSET "Tombée de la nuit"
+#define D_TEMPERATURE "Température"
+#define D_TO "à"
+#define D_TOGGLE "Inverser"
+#define D_TOPIC "Topic" // Keep MQTT keyword
+#define D_TOTAL_USAGE "Eau totale"
+#define D_TRANSMIT "Transmettre"
+#define D_TRUE "Vrai"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "la mise à jour" // "Lancer la mise à jour"
+#define D_UPLOAD "Upload" // Not better in french
+#define D_UPTIME "Durée d'activité"
+#define D_USER "Utilisateur"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Indice UV"
+#define D_UV_INDEX_1 "Faible"
+#define D_UV_INDEX_2 "Modéré"
+#define D_UV_INDEX_3 "Élevé"
+#define D_UV_INDEX_4 "Très élevé"
+#define D_UV_INDEX_5 "Brûlure niv.1/2"
+#define D_UV_INDEX_6 "Brûlure niv.3"
+#define D_UV_INDEX_7 "Hors échelle"
+#define D_UV_LEVEL "Niveau UV"
+#define D_UV_POWER "Puissance UV"
+#define D_VERSION "Version"
+#define D_VOLTAGE "Tension"
+#define D_WEIGHT "Poids"
+#define D_WARMLIGHT "Chaud"
+#define D_WEB_SERVER "Serveur web"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ATTENTION Cette version ne supporte pas les réglages persistants"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Journalisation série désactivée"
+#define D_SYSLOG_LOGGING_REENABLED "Jounalisation SysLog réactivée"
+
+#define D_SET_BAUDRATE_TO "Définir le débit à"
+#define D_RECEIVED_TOPIC "Topic reçu" // Terme MQTT
+#define D_DATA_SIZE "Taille données"
+#define D_ANALOG_INPUT "Analogique"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Boucle bloquée"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig ÉCHOUÉ avec status"
+#define D_ACTIVE_FOR_3_MINUTES "actif pour 3 minutes"
+#define D_FAILED_TO_START "Échec de démarrage"
+#define D_PATCH_ISSUE_2186 "Correction 2186"
+#define D_CONNECTING_TO_AP "Connexion à l'AP"
+#define D_IN_MODE "en mode"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Échec de connexion car aucune adresse IP n'a été reçue"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Échec de connexion car l'AP ne peut-être contacté"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Échec de connexion car le mot de passe de l'AP est incorrect"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Échec de connexion avec l'AP, expiré"
+#define D_ATTEMPTING_CONNECTION "Tentative de connexion..."
+#define D_CHECKING_CONNECTION "Vérification connexion..."
+#define D_QUERY_DONE "Requête terminée. Services MQTT trouvés"
+#define D_MQTT_SERVICE_FOUND "Service MQTT trouvé sur"
+#define D_FOUND_AT "trouvé à"
+#define D_SYSLOG_HOST_NOT_FOUND "Hôte SysLog introuvable"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Enregistré en flash à"
+#define D_LOADED_FROM_FLASH_AT "Chargé de la flash à"
+#define D_USE_DEFAULTS "Utiliser par défaut"
+#define D_ERASED_SECTOR "Secteur effacé"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Pour utiliser Tasmota, veuillez activer JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMAL
merci de mettre à jour"
+#define D_WEBSERVER_ACTIVE_ON "Serveur web actif sur"
+#define D_WITH_IP_ADDRESS "avec l'adresse IP"
+#define D_WEBSERVER_STOPPED "Serveur web éteint"
+#define D_FILE_NOT_FOUND "Fichier introuvable"
+#define D_REDIRECTED "Redirection sur le portail captif"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager en mode Point d'Accès et Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager en mode Point d'Accès"
+#define D_TRYING_TO_CONNECT "Tentative de connexion du module au réseau"
+
+#define D_RESTART_IN "Redémarrage dans"
+#define D_SECONDS "secondes"
+#define D_DEVICE_WILL_RESTART "Le module va redémarrer dans quelques secondes"
+#define D_BUTTON_TOGGLE "on/off"
+#define D_CONFIGURATION "Configuration"
+#define D_INFORMATION "Informations"
+#define D_FIRMWARE_UPGRADE "Mise à jour du Firmware"
+#define D_CONSOLE "Console"
+#define D_CONFIRM_RESTART "Confirmer redémarrage"
+
+#define D_CONFIGURE_MODULE "Configuration du Module"
+#define D_CONFIGURE_WIFI "Configuration WiFi"
+#define D_CONFIGURE_MQTT "Configuration MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configuration Domoticz"
+#define D_CONFIGURE_LOGGING "Configuration du journal"
+#define D_CONFIGURE_OTHER "Autre configuration"
+#define D_CONFIRM_RESET_CONFIGURATION "Confirmer la réinit. de la config."
+#define D_RESET_CONFIGURATION "Configuration par défaut"
+#define D_BACKUP_CONFIGURATION "Sauvegarde de la config."
+#define D_RESTORE_CONFIGURATION "Restauration de la config."
+#define D_MAIN_MENU "Menu principal"
+
+#define D_MODULE_PARAMETERS "Paramètres module"
+#define D_MODULE_TYPE "Type de module"
+#define D_PULLUP_ENABLE "Inter. sans pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Entrée série"
+#define D_SERIAL_OUT "Sortie série"
+
+#define D_WIFI_PARAMETERS "Paramètres Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Scan des réseaux wifi"
+#define D_SCAN_DONE "Scan terminé"
+#define D_NO_NETWORKS_FOUND "Aucun réseau trouvé"
+#define D_REFRESH_TO_SCAN_AGAIN "Rafraîchir pour scanner à nouveau"
+#define D_DUPLICATE_ACCESSPOINT "Point d'Accès dupliqué"
+#define D_SKIPPING_LOW_QUALITY "Évité car de mauvaise qualité"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSID"
+#define D_AP1_PASSWORD "Mot de passe AP1"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "Mot de passe AP2"
+
+#define D_MQTT_PARAMETERS "Paramètres MQTT"
+#define D_CLIENT "Client"
+#define D_FULL_TOPIC "Topic complet"
+
+#define D_LOGGING_PARAMETERS "Paramètres du journal"
+#define D_SERIAL_LOG_LEVEL "Niveau de journalisation série"
+#define D_MQTT_LOG_LEVEL "Niveau de journalisation MQTT"
+#define D_WEB_LOG_LEVEL "Niveau de journalisation web"
+#define D_SYS_LOG_LEVEL "Niveau SysLog"
+#define D_MORE_DEBUG "Plus de debug"
+#define D_SYSLOG_HOST "Hôte SysLog"
+#define D_SYSLOG_PORT "Port SysLog"
+#define D_TELEMETRY_PERIOD "Période télémétrie"
+
+#define D_OTHER_PARAMETERS "Autres paramètres"
+#define D_TEMPLATE "Modèle"
+#define D_ACTIVATE "Activer"
+#define D_WEB_ADMIN_PASSWORD "Mot de passe Web Admin"
+#define D_MQTT_ENABLE "MQTT activé"
+#define D_FRIENDLY_NAME "Surnom"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "module unique"
+#define D_MULTI_DEVICE "multi module"
+
+#define D_CONFIGURE_TEMPLATE "Configuration du modèle"
+#define D_TEMPLATE_PARAMETERS "Paramètres du modèle"
+#define D_TEMPLATE_NAME "Nom"
+#define D_BASE_TYPE "Basé sur"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Enregistrer la configuration"
+#define D_CONFIGURATION_SAVED "Configuration enregistrée"
+#define D_CONFIGURATION_RESET "Configuration réinitialisée"
+
+#define D_PROGRAM_VERSION "Version du programme"
+#define D_BUILD_DATE_AND_TIME "Date & Heure de build"
+#define D_CORE_AND_SDK_VERSION "Version Core/SDK"
+#define D_FLASH_WRITE_COUNT "Compteur écriture flash"
+#define D_MAC_ADDRESS "Adresse MAC"
+#define D_MQTT_HOST "Hôte MQTT"
+#define D_MQTT_PORT "Port MQTT"
+#define D_MQTT_CLIENT "Client MQTT"
+#define D_MQTT_USER "Utilisateur MQTT"
+#define D_MQTT_TOPIC "Topic MQTT"
+#define D_MQTT_GROUP_TOPIC "Groupe topic MQTT"
+#define D_MQTT_FULL_TOPIC "Topic complet MQTT"
+#define D_MDNS_DISCOVERY "Découverte mDNS"
+#define D_MDNS_ADVERTISE "Annonce mDNS"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Taille flash"
+#define D_FREE_PROGRAM_SPACE "Espace programme libre"
+
+#define D_UPGRADE_BY_WEBSERVER "Mise à jour par serveur web"
+#define D_OTA_URL "URL OTA"
+#define D_START_UPGRADE "Lancer la mise à jour"
+#define D_UPGRADE_BY_FILE_UPLOAD "Mise à jour par téléchargement fichier"
+#define D_UPLOAD_STARTED "Téléchargement lancé"
+#define D_UPGRADE_STARTED "Mise à jour lancée"
+#define D_UPLOAD_DONE "Téléchargement terminé"
+#define D_UPLOAD_ERR_1 "Aucun fichier sélectionné"
+#define D_UPLOAD_ERR_2 "Espace insuffisant"
+#define D_UPLOAD_ERR_3 "L'octet magique n'est pas 0xE9"
+#define D_UPLOAD_ERR_4 "La taille du programme à flasher est plus grande que la taille réelle de la mémoire flash"
+#define D_UPLOAD_ERR_5 "Erreur de comparaison du buffer de téléchargement"
+#define D_UPLOAD_ERR_6 "Téléchargement échoué. Activer WebLog 3"
+#define D_UPLOAD_ERR_7 "Téléchargement annulé"
+#define D_UPLOAD_ERR_8 "Fichier invalide"
+#define D_UPLOAD_ERR_9 "Fichier trop grand"
+#define D_UPLOAD_ERR_10 "Erreur d'initialisation du chip RF"
+#define D_UPLOAD_ERR_11 "Erreur d'effacement du chip RF"
+#define D_UPLOAD_ERR_12 "Erreur d'accès en écriture au chip RF"
+#define D_UPLOAD_ERR_13 "Erreur de décodage du firmware RF"
+#define D_UPLOAD_ERROR_CODE "Code d'erreur téléchargement"
+
+#define D_ENTER_COMMAND "Saisir une commande"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Activer WebLog 2 si une réponse est attendue"
+#define D_NEED_USER_AND_PASSWORD "Nécessite utilisateur=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Vérification d'empreinte TLS ..."
+#define D_TLS_CONNECT_FAILED_TO "Échec de connexion TLS à"
+#define D_RETRY_IN "Nouvelle tentative dans"
+#define D_VERIFIED "Vérifié par empreinte "
+#define D_INSECURE "Connexion non sécurisée car empreinte non vérifiée"
+#define D_CONNECT_FAILED_TO "Échec de connexion à"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast désactivé"
+#define D_MULTICAST_REJOINED "Multicast (re)joint"
+#define D_MULTICAST_JOIN_FAILED "Multicast échec abonnement"
+#define D_FAILED_TO_SEND_RESPONSE "Échec d'envoi réponse"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "Réglage WeMo"
+#define D_RESPONSE_SENT "Réponse envoyée"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Réglage Hue"
+#define D_HUE_API_NOT_IMPLEMENTED "API Hue non implémentée"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 paquets de réponse envoyés"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Paramètres Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Puissance,Énergie"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Compteur/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Tension/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Courant/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Qualité de l'air"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Durée de rafraichissement"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configuration des Timers"
+#define D_TIMER_PARAMETERS "Paramètres Timer"
+#define D_TIMER_ENABLE "Activer les Timers"
+#define D_TIMER_ARM "Armer"
+#define D_TIMER_TIME "Temps"
+#define D_TIMER_DAYS "Jours"
+#define D_TIMER_REPEAT "Répéter"
+#define D_TIMER_OUTPUT "Sortie"
+#define D_TIMER_ACTION "Action"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configuration de KNX"
+#define D_KNX_PARAMETERS "Paramètres KNX"
+#define D_KNX_GENERAL_CONFIG "Général"
+#define D_KNX_PHYSICAL_ADDRESS "Adresse individuelle" // Backbone/Line/Device -> Zone/Ligne/Participant
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Doit être unique sur le réseau KNX)"
+#define D_KNX_ENABLE "Activer KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Données à envoyer aux Adresses de Groupe"
+#define D_ADD "Ajoûter"
+#define D_DELETE "Supprimer"
+#define D_REPLY "Répondre"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Données à recevoir des Adresses de Groupe"
+#define D_RECEIVED_FROM "Reçu de"
+#define D_KNX_COMMAND_WRITE "Écrire"
+#define D_KNX_COMMAND_READ "Lire"
+#define D_KNX_COMMAND_OTHER "Autre"
+#define D_SENT_TO "envoyé à"
+#define D_KNX_WARNING "L'Adresse de Groupe (0/0/0) est réservée et ne peut être utilisée."
+#define D_KNX_ENHANCEMENT "Amélioration de la communication"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xsns_03_energy.ino
+#define D_ENERGY_TODAY "Énergie aujourd'hui"
+#define D_ENERGY_YESTERDAY "Énergie hier"
+#define D_ENERGY_TOTAL "Énergie totale"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Ouvert"
+#define D_CLOSE "Fermé"
+#define D_DOMOTICZ_SHUTTER "Volet"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configurer PCF8574"
+#define D_PCF8574_PARAMETERS "Paramètres PCF8574"
+#define D_INVERT_PORTS "Inverser les Ports"
+#define D_DEVICE "Module"
+#define D_DEVICE_INPUT "Entrée"
+#define D_DEVICE_OUTPUT "Sortie"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Capteur occupé"
+#define D_SENSOR_CRC_ERROR "Erreur CRC capteur"
+#define D_SENSORS_FOUND "Capteur trouvé"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Expiration du délai"
+#define D_START_SIGNAL_LOW "Signal Start bas"
+#define D_START_SIGNAL_HIGH "Signal Start haut"
+#define D_PULSE "Impulsion"
+#define D_CHECKSUM_FAILURE "Erreur checksum"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Le capteur n'a pas acquitté la commande"
+#define D_SHT1X_FOUND "SHT1X found"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particules"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accél. Axe-X"
+#define D_AY_AXIS "Accél. Axe-Y"
+#define D_AZ_AXIS "Accél. Axe-Z"
+#define D_GX_AXIS "Gyro Axe-X"
+#define D_GY_AXIS "Gyro Axe-Y"
+#define D_GZ_AXIS "Gyro Axe-Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Retirer la charge"
+#define D_HX_CAL_REFERENCE "Charger l'étalon de poids"
+#define D_HX_CAL_DONE "Étalonné"
+#define D_HX_CAL_FAIL "L'étalonnage a échoué"
+#define D_RESET_HX711 "Réinitialiser le capteur"
+#define D_CONFIGURE_HX711 "Configurer le capteur"
+#define D_HX711_PARAMETERS "Paramètres capteur"
+#define D_ITEM_WEIGHT "Poids de l'objet"
+#define D_REFERENCE_WEIGHT "Poids de référence"
+#define D_CALIBRATE "Étalonner"
+#define D_CALIBRATION "Étalonnage"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Direction du vent"
+#define D_TX20_WIND_SPEED "Vitesse du vent"
+#define D_TX20_WIND_SPEED_AVG "Vitesse Moy."
+#define D_TX20_WIND_SPEED_MAX "Vitesse Max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "O"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "ÉmetIR"
+#define D_SENSOR_SWITCH "Inter." // Suffix "1"
+#define D_SENSOR_BUTTON "Bouton" // Suffix "1"
+#define D_SENSOR_RELAY "Relais" // Suffix "1i"
+#define D_SENSOR_LED "LED" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Compteur" // Suffix "1"
+#define D_SENSOR_IRRECV "RécptIR"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "RétroÉcl"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "h"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "gal/mn"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h"
+#define D_UNIT_KILOOHM "kΩ"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
+#define D_UNIT_MICROMETER "µm"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "mn"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "s"
+#define D_UNIT_SECTORS "secteurs"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Angle de phase"
+#define D_IMPORT_ACTIVE "Énergie act conso"
+#define D_EXPORT_ACTIVE "Énergie act fournie"
+#define D_IMPORT_REACTIVE "Énergie réa conso"
+#define D_EXPORT_REACTIVE "Énergie réa fournie"
+#define D_TOTAL_REACTIVE "Énergie réa totale"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "°"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "Tension PV1"
+#define D_PV1_CURRENT "Courant PV1"
+#define D_PV1_POWER "Puissance PV1"
+#define D_PV2_VOLTAGE "Tension PV2"
+#define D_PV2_CURRENT "Courant PV2"
+#define D_PV2_POWER "Puissance PV2"
+#define D_SOLAR_POWER "Puissance solaire"
+#define D_INVERTER_POWER "Puissance onduleur"
+#define D_STATUS "Statut"
+#define D_WAITING "En attente"
+#define D_CHECKING "En test"
+#define D_WORKING "En marche"
+#define D_FAILURE "Défault"
+#define D_SOLAX_ERROR_0 "Aucun code d'erreur"
+#define D_SOLAX_ERROR_1 "Défaut Perte de réseau"
+#define D_SOLAX_ERROR_2 "Défaut Tension réseau"
+#define D_SOLAX_ERROR_3 "Défaut Fréquence réseau"
+#define D_SOLAX_ERROR_4 "Défaut Tension PV"
+#define D_SOLAX_ERROR_5 "Défaut Isolation"
+#define D_SOLAX_ERROR_6 "Défaut Surchauffe"
+#define D_SOLAX_ERROR_7 "Défaut Ventilateur"
+#define D_SOLAX_ERROR_8 "Défaut Autre équipement"
+
+#endif // _LANGUAGE_FR_FR_H_
diff --git a/tasmota/language/he-HE.h b/tasmota/language/he-HE.h
index 869c31fb7..ac4dadb8e 100644
--- a/tasmota/language/he-HE.h
+++ b/tasmota/language/he-HE.h
@@ -1,703 +1,701 @@
-/*
- he-HE.h - localization for Hebrew - Israel for Tasmota
-
- Copyright (C) 2019 Yuval Mejahez
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_HE_HE_H_
-#define _LANGUAGE_HE_HE_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.14.0b
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1037
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "he"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "SunMonTueWedThuFriSat"
-#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "מנהל"
-#define D_AIR_QUALITY "איכות אוויר"
-#define D_AP "AP" // Access Point
-#define D_AS "-כ"
-#define D_AUTO "אוטומטי"
-#define D_BLINK "מהבהב"
-#define D_BLINKOFF "כיבוי היבהוב"
-#define D_BOOT_COUNT "מונה הפעלה מחדש"
-#define D_BRIGHTLIGHT "בהירות"
-#define D_BSSID "BSSId"
-#define D_BUTTON "לחצן"
-#define D_BY "על ידי" // Written by me
-#define D_BYTES "בייט"
-#define D_CELSIUS "צלזיוס"
-#define D_CHANNEL "ערוץ"
-#define D_CO2 "פחמן דו חמצני"
-#define D_CODE "קוד" // Button code
-#define D_COLDLIGHT "אור קר"
-#define D_COMMAND "פקודה"
-#define D_CONNECTED "מחובר"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "סופר"
-#define D_COUNTER "מונה"
-#define D_CURRENT "נוכחי" // As in Voltage and Current
-#define D_DATA "נתונים"
-#define D_DARKLIGHT "חושך"
-#define D_DEBUG "באגים"
-#define D_DISABLED "מבוטל"
-#define D_DISTANCE "מרחק"
-#define D_DNS_SERVER "DNS שרת"
-#define D_DONE "סיים"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "הדמיה"
-#define D_ENABLED "מאופשר"
-#define D_ERASE "מחיקה"
-#define D_ERROR "שגיאה"
-#define D_FAHRENHEIT "פרנהייט"
-#define D_FAILED "נכשל"
-#define D_FALLBACK "חזרה"
-#define D_FALLBACK_TOPIC "נושא לחזרה"
-#define D_FALSE "שגוי"
-#define D_FILE "קובץ"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "זכרון פנוי"
-#define D_FREQUENCY "תדר"
-#define D_GAS "גז"
-#define D_GATEWAY "שער"
-#define D_GROUP "קבוצה"
-#define D_HOST "מארח"
-#define D_HOSTNAME "שם מארח"
-#define D_HUMIDITY "לחות"
-#define D_ILLUMINANCE "רמת חשיפה"
-#define D_IMMEDIATE "מידי" // Button immediate
-#define D_INDEX "אינדקס"
-#define D_INFO "מידע"
-#define D_INFRARED "אינפרא"
-#define D_INITIALIZED "מאותחל"
-#define D_IP_ADDRESS "IP כתובת"
-#define D_LIGHT "אור"
-#define D_LWT "LWT"
-#define D_MODULE "מודול"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "לחיצה מרובה"
-#define D_NOISE "רעש"
-#define D_NONE "כלום"
-#define D_OFF "כבוי"
-#define D_OFFLINE "מנותק"
-#define D_OK "אוקיי"
-#define D_ON "פועל"
-#define D_ONLINE "מחובר"
-#define D_PASSWORD "סיסמא"
-#define D_PORT "פורט"
-#define D_POWER_FACTOR "גורם כוח"
-#define D_POWERUSAGE "כוח"
-#define D_POWERUSAGE_ACTIVE "כוח פעיל"
-#define D_POWERUSAGE_APPARENT "כוח לכאורה"
-#define D_POWERUSAGE_REACTIVE "כוח תגובתי"
-#define D_PRESSURE "לחץ"
-#define D_PRESSUREATSEALEVEL "לחץ ימי"
-#define D_PROGRAM_FLASH_SIZE "גודל תוכנית פלאש"
-#define D_PROGRAM_SIZE "גודל תוכנית"
-#define D_PROJECT "פרויקט"
-#define D_RAIN "גשם"
-#define D_RECEIVED "התקבל"
-#define D_RESTART "איתחול"
-#define D_RESTARTING "הפעלה מחדש"
-#define D_RESTART_REASON "סיבת הפעלה מחדש"
-#define D_RESTORE "שחזור"
-#define D_RETAINED "שמור"
-#define D_RULE "חוק"
-#define D_SAVE "שמירה"
-#define D_SENSOR "חיישן"
-#define D_SSID "SSId"
-#define D_START "התחלה"
-#define D_STD_TIME "STD"
-#define D_STOP "עצירה"
-#define D_SUBNET_MASK "רשת מסכת משנה"
-#define D_SUBSCRIBE_TO "הרשם ל"
-#define D_UNSUBSCRIBE_FROM "בטל רישום"
-#define D_SUCCESSFUL "הצליח"
-#define D_SUNRISE "זריחה"
-#define D_SUNSET "שקיעה"
-#define D_TEMPERATURE "טמפרטורה"
-#define D_TO "ל"
-#define D_TOGGLE "מתג"
-#define D_TOPIC "נושא"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "עבר"
-#define D_TRUE "נכון"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "שדרוג"
-#define D_UPLOAD "העלאה"
-#define D_UPTIME "זמן עליה"
-#define D_USER "משתמש"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV אינדקס"
-#define D_UV_INDEX_1 "Low"
-#define D_UV_INDEX_2 "Mid"
-#define D_UV_INDEX_3 "High"
-#define D_UV_INDEX_4 "Danger"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR" // Out of Range
-#define D_UV_LEVEL "UV רמת"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "גרסה"
-#define D_VOLTAGE "מתח"
-#define D_WEIGHT "משקל"
-#define D_WARMLIGHT "חום"
-#define D_WEB_SERVER "Web שרת"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "אזהרה גרסה זו אינה תומכת בהגדרות קבועות"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "רישום טורי מושבת"
-#define D_SYSLOG_LOGGING_REENABLED "הופעל מחדש Syslog רישום"
-
-#define D_SET_BAUDRATE_TO "הגדר קצב שידור ל"
-#define D_RECEIVED_TOPIC "Topic התקבל"
-#define D_DATA_SIZE "גודל נתונים"
-#define D_ANALOG_INPUT "אנלוגי"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "לולאות חסומות"
-#define D_WPS_FAILED_WITH_STATUS "נכשל עם הסטטוס WPSconfig"
-#define D_ACTIVE_FOR_3_MINUTES "פעיל במשך 3 דקות"
-#define D_FAILED_TO_START "נכשל בנסיון להתחיל"
-#define D_PATCH_ISSUE_2186 "בעית תיקון 2186"
-#define D_CONNECTING_TO_AP "AP -מתחבר ל"
-#define D_IN_MODE "במצב"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP החיבור נכשל מכיוון שלא התקבלה כתובת"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "זמין AP החיבור נכשל כיוון שאין"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "סיסמא שגויה , AP חיבור נכשל ל"
-#define D_CONNECT_FAILED_AP_TIMEOUT "פג זמן המתנה , AP חיבור נכשל ל"
-#define D_ATTEMPTING_CONNECTION "...מנסה להתחבר"
-#define D_CHECKING_CONNECTION "...בודק חיבור"
-#define D_QUERY_DONE "MQTT השאילתה נעשתה. נמצאו שירותי"
-#define D_MQTT_SERVICE_FOUND "MQTT נמצאו שירותי"
-#define D_FOUND_AT "נמצא ב"
-#define D_SYSLOG_HOST_NOT_FOUND "לא נמצא Syslog מארח"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "נשמר לפלאש ב"
-#define D_LOADED_FROM_FLASH_AT "נטען מהפלאש מ"
-#define D_USE_DEFAULTS "השתמש בהגדרות ברירת המחדל"
-#define D_ERASED_SECTOR "סקטור מחוק"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "JavaScript - כדי להשתמש בקושחת אסמוטה אנא הפעל"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "קושחה מינימלית
בבקשה אנא שדרג"
-#define D_WEBSERVER_ACTIVE_ON "שרת ווב פעיל"
-#define D_WITH_IP_ADDRESS "IP עם כתובת"
-#define D_WEBSERVER_STOPPED "שרת ווב הופסק"
-#define D_FILE_NOT_FOUND "קובץ לא נמצא"
-#define D_REDIRECTED "הופנה מחדש לפורטל"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
-#define D_TRYING_TO_CONNECT "מנסה לחבר את ההתקן לרשת"
-
-#define D_RESTART_IN "הפעלה מחדש תוך"
-#define D_SECONDS "שניות"
-#define D_DEVICE_WILL_RESTART "ההתקן יופעל מחדש בעוד מס' שניות"
-#define D_BUTTON_TOGGLE "מצב"
-#define D_CONFIGURATION "הגדרות"
-#define D_INFORMATION "מידע"
-#define D_FIRMWARE_UPGRADE "שדרוג קושחה"
-#define D_CONSOLE "קונסול"
-#define D_CONFIRM_RESTART "אישור הפעלה מחדש"
-
-#define D_CONFIGURE_MODULE "הגדרות מודול"
-#define D_CONFIGURE_WIFI "WIFI הגדרות"
-#define D_CONFIGURE_MQTT "MQTT הגדרות"
-#define D_CONFIGURE_DOMOTICZ "Domoticz הגדרות"
-#define D_CONFIGURE_LOGGING "הגדרת לוגים"
-#define D_CONFIGURE_OTHER "הגדרות שונות"
-#define D_CONFIRM_RESET_CONFIGURATION "אישור שינוי הגדרות"
-#define D_RESET_CONFIGURATION "אתחול הגדרות"
-#define D_BACKUP_CONFIGURATION "גיבוי הגדרות"
-#define D_RESTORE_CONFIGURATION "שחזור הגדרות"
-#define D_MAIN_MENU "תפריט ראשי"
-
-#define D_MODULE_PARAMETERS "מודול פרמטרים"
-#define D_MODULE_TYPE "סוג מודול"
-#define D_PULLUP_ENABLE "pull-up אין לחצן/מתג"
-#define D_ADC "ADC"
-#define D_GPIO " רגל "
-#define D_SERIAL_IN "כניסת סריאל"
-#define D_SERIAL_OUT "יציאת סריאל"
-
-#define D_WIFI_PARAMETERS "Wifi פרמטרים"
-#define D_SCAN_FOR_WIFI_NETWORKS "סורק עבור רשתות אלחוטיות"
-#define D_SCAN_DONE "סריקה הושלמה"
-#define D_NO_NETWORKS_FOUND "לא נמצאו רשתות אלחוטיות"
-#define D_REFRESH_TO_SCAN_AGAIN "רענן כדי לסרוק שוב"
-#define D_DUPLICATE_ACCESSPOINT "נקודות גישה משוכפלות"
-#define D_SKIPPING_LOW_QUALITY "מדלג עקב איכות רשת נמוכה"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Password"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Password"
-
-#define D_MQTT_PARAMETERS "MQTT פרמטרים"
-#define D_CLIENT "לקוח"
-#define D_FULL_TOPIC "זיהוי מלא"
-
-#define D_LOGGING_PARAMETERS "פרמטרי לוגים"
-#define D_SERIAL_LOG_LEVEL "רמת לוג עבור סריאל"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "רמת לוג עבור אתר"
-#define D_SYS_LOG_LEVEL "Syslog רמת לוג עבור שרת"
-#define D_MORE_DEBUG "מיפוי נוסף"
-#define D_SYSLOG_HOST "Syslog מארח"
-#define D_SYSLOG_PORT "Syslog פורט"
-#define D_TELEMETRY_PERIOD "זמן שידור"
-
-#define D_OTHER_PARAMETERS "פרמטרים שונים"
-#define D_TEMPLATE "תבנית"
-#define D_ACTIVATE "הפעל"
-#define D_WEB_ADMIN_PASSWORD "סיסמת מנהל"
-#define D_MQTT_ENABLE "MQTT אפשר"
-#define D_FRIENDLY_NAME "שם ידידותי"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "התקן בודד"
-#define D_MULTI_DEVICE "התקנים"
-
-#define D_CONFIGURE_TEMPLATE "הגדר תבנית"
-#define D_TEMPLATE_PARAMETERS "פרמטרים של תבנית"
-#define D_TEMPLATE_NAME "שם"
-#define D_BASE_TYPE "מבוסס על"
-#define D_TEMPLATE_FLAGS "אפשריות"
-
-#define D_SAVE_CONFIGURATION "שמירת הגדרות"
-#define D_CONFIGURATION_SAVED "הגדרות נשמרו"
-#define D_CONFIGURATION_RESET "איפוס הגדרות"
-
-#define D_PROGRAM_VERSION "גירסת תוכנה"
-#define D_BUILD_DATE_AND_TIME "Build Date & Time"
-#define D_CORE_AND_SDK_VERSION "Core/SDK Version"
-#define D_FLASH_WRITE_COUNT "מונה צריבות"
-#define D_MAC_ADDRESS "MAC כתובת"
-#define D_MQTT_HOST "MQTT מארח"
-#define D_MQTT_PORT "MQTT פורט"
-#define D_MQTT_CLIENT "MQTT לקוח"
-#define D_MQTT_USER "MQTT שם משתמש"
-#define D_MQTT_TOPIC "MQTT נושא"
-#define D_MQTT_GROUP_TOPIC "MQTT נושא קבוצת"
-#define D_MQTT_FULL_TOPIC "MQTT נושא מלא"
-#define D_MDNS_DISCOVERY "mDNS זיהוי"
-#define D_MDNS_ADVERTISE "mDNS פרסום"
-#define D_ESP_CHIP_ID "ESP מס' רכיב"
-#define D_FLASH_CHIP_ID "מס' רכיב פלאש"
-#define D_FLASH_CHIP_SIZE "גודל זיכרון פלאש"
-#define D_FREE_PROGRAM_SPACE "מקום פנוי - תוכנה"
-
-#define D_UPGRADE_BY_WEBSERVER "שדרוג קושחה"
-#define D_OTA_URL "OTA כתובת"
-#define D_START_UPGRADE "התחל בשדרוג"
-#define D_UPGRADE_BY_FILE_UPLOAD "שדרוג דרך קובץ נכשל"
-#define D_UPLOAD_STARTED "העלאה מתחילה"
-#define D_UPGRADE_STARTED "שדרוג מתחיל"
-#define D_UPLOAD_DONE "העלאה הסתיימה"
-#define D_UPLOAD_ERR_1 "לא נבחר קובץ"
-#define D_UPLOAD_ERR_2 "אין מספיק מקום"
-#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
-#define D_UPLOAD_ERR_4 "גודל קובץ השדרוג גדול מנפח האחסון של הפלאש"
-#define D_UPLOAD_ERR_5 "מאגר העלאה לא תקין"
-#define D_UPLOAD_ERR_6 "העלאה נכשלה. אפשר רישום 3"
-#define D_UPLOAD_ERR_7 "ההעלאה בוטלה"
-#define D_UPLOAD_ERR_8 "קובץ שגוי"
-#define D_UPLOAD_ERR_9 "קובץ גדול מדי"
-#define D_UPLOAD_ERR_10 "נכשלה RF הפעלת שבב"
-#define D_UPLOAD_ERR_11 "נכשלה RF מחיקת שבב"
-#define D_UPLOAD_ERR_12 "נכשלה RF כתיבת שבב"
-#define D_UPLOAD_ERR_13 "נכשלה RF קידוד קושחת שבב"
-#define D_UPLOAD_ERROR_CODE "שגיאת קוד העלאה"
-
-#define D_ENTER_COMMAND "הקש פקודה"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
-#define D_NEED_USER_AND_PASSWORD "Need user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "...TLS אמת טביעת אצבע של"
-#define D_TLS_CONNECT_FAILED_TO "נכשל TLS חיבור"
-#define D_RETRY_IN "נסה שוב תוך"
-#define D_VERIFIED "מאומת באמצעות טביעת אצבע"
-#define D_INSECURE "חיבור לא מאובטח עקב טביעת אצבע לא חוקית"
-#define D_CONNECT_FAILED_TO "חיבור נכשל ל"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast disabled"
-#define D_MULTICAST_REJOINED "Multicast (re)joined"
-#define D_MULTICAST_JOIN_FAILED "Multicast join failed"
-#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo הגדרת"
-#define D_RESPONSE_SENT "תגובה נשלחה"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue הגדרת"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API not implemented"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz פרמטרי"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "טמפרטורה"
- #define D_DOMOTICZ_TEMP_HUM "טמפרטורה,לחות"
- #define D_DOMOTICZ_TEMP_HUM_BARO "טמפרטורה,לחות,ברומטר"
- #define D_DOMOTICZ_POWER_ENERGY "הספק,צריכה"
- #define D_DOMOTICZ_ILLUMINANCE "עוצמת אור"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "איכות אוויר"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "עדכן טיימר"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "הגדרות תזמון"
-#define D_TIMER_PARAMETERS "פרמטרים עבור תזמון"
-#define D_TIMER_ENABLE "אפשר תזמון"
-#define D_TIMER_ARM "טען"
-#define D_TIMER_TIME "זמן"
-#define D_TIMER_DAYS "ימים"
-#define D_TIMER_REPEAT "חזרות"
-#define D_TIMER_OUTPUT "פלט"
-#define D_TIMER_ACTION "פעולה"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX הגדר"
-#define D_KNX_PARAMETERS "KNX פרמטרי"
-#define D_KNX_GENERAL_CONFIG "כללי"
-#define D_KNX_PHYSICAL_ADDRESS "כתובת פיזית"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
-#define D_KNX_ENABLE "KNX אפשר"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "נתונים לשליחה אל כתובות קבוצתיות"
-#define D_ADD "הוסף"
-#define D_DELETE "מחק"
-#define D_REPLY "השב"
-#define D_KNX_GROUP_ADDRESS_TO_READ "כתובות קבוצתיות לקבלת נתונים מ"
-#define D_RECEIVED_FROM "התקבל מאת"
-#define D_KNX_COMMAND_WRITE "כתיבה"
-#define D_KNX_COMMAND_READ "קריאה"
-#define D_KNX_COMMAND_OTHER "אחר"
-#define D_SENT_TO "נשלח ל"
-#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
-#define D_KNX_ENHANCEMENT "שיפור התקשורת"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "צריכה יומית"
-#define D_ENERGY_YESTERDAY "צריכה בעבר"
-#define D_ENERGY_TOTAL "צריכה כללית"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "שרת עסוק"
-#define D_SENSOR_CRC_ERROR "בחיישן CRC שגיאת"
-#define D_SENSORS_FOUND "חיישנים לא נמצאו"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "הזמן הקצוב להמתנה"
-#define D_START_SIGNAL_LOW "להתחיל אות נמוך"
-#define D_START_SIGNAL_HIGH "להתחיל אות גבוה"
-#define D_PULSE "פעימה"
-#define D_CHECKSUM_FAILURE "בדיקת כשל נכשלה"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
-#define D_SHT1X_FOUND "SHT1X found"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "חלקיקים"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "הסר משקל"
-#define D_HX_CAL_REFERENCE "טען משקל התייחסות"
-#define D_HX_CAL_DONE "מכויל"
-#define D_HX_CAL_FAIL "כיול נכשל"
-#define D_RESET_HX711 "אפס את קנה המידה"
-#define D_CONFIGURE_HX711 "הגדר קנה מידה"
-#define D_HX711_PARAMETERS "פרמטרים של קנה מידה"
-#define D_ITEM_WEIGHT "משקל פריט"
-#define D_REFERENCE_WEIGHT "משקל הפניה"
-#define D_CALIBRATE "כייל"
-#define D_CALIBRATION "כיול"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "כיוון הרוח"
-#define D_TX20_WIND_SPEED "מהירות הרוח"
-#define D_TX20_WIND_SPEED_AVG "מהירות הרוח ממוצעת"
-#define D_TX20_WIND_SPEED_MAX "מהירות הרוח מקסימלית"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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 "משתמש"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "נגן מוזיקה"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "מתג" // Suffix "1"
-#define D_SENSOR_BUTTON "לחצן" // Suffix "1"
-#define D_SENSOR_RELAY "ממסר" // Suffix "1i"
-#define D_SENSOR_LED "לד" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "מונה" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sectors"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_HE_HE_H_
+/*
+ he-HE.h - localization for Hebrew - Israel for Tasmota
+
+ Copyright (C) 2019 Yuval Mejahez
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_HE_HE_H_
+#define _LANGUAGE_HE_HE_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.14.0b
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1037
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "he"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "SunMonTueWedThuFriSat"
+#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "מנהל"
+#define D_AIR_QUALITY "איכות אוויר"
+#define D_AP "AP" // Access Point
+#define D_AS "-כ"
+#define D_AUTO "אוטומטי"
+#define D_BLINK "מהבהב"
+#define D_BLINKOFF "כיבוי היבהוב"
+#define D_BOOT_COUNT "מונה הפעלה מחדש"
+#define D_BRIGHTLIGHT "בהירות"
+#define D_BSSID "BSSId"
+#define D_BUTTON "לחצן"
+#define D_BY "על ידי" // Written by me
+#define D_BYTES "בייט"
+#define D_CELSIUS "צלזיוס"
+#define D_CHANNEL "ערוץ"
+#define D_CO2 "פחמן דו חמצני"
+#define D_CODE "קוד" // Button code
+#define D_COLDLIGHT "אור קר"
+#define D_COMMAND "פקודה"
+#define D_CONNECTED "מחובר"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "סופר"
+#define D_COUNTER "מונה"
+#define D_CURRENT "נוכחי" // As in Voltage and Current
+#define D_DATA "נתונים"
+#define D_DARKLIGHT "חושך"
+#define D_DEBUG "באגים"
+#define D_DISABLED "מבוטל"
+#define D_DISTANCE "מרחק"
+#define D_DNS_SERVER "DNS שרת"
+#define D_DONE "סיים"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "הדמיה"
+#define D_ENABLED "מאופשר"
+#define D_ERASE "מחיקה"
+#define D_ERROR "שגיאה"
+#define D_FAHRENHEIT "פרנהייט"
+#define D_FAILED "נכשל"
+#define D_FALLBACK "חזרה"
+#define D_FALLBACK_TOPIC "נושא לחזרה"
+#define D_FALSE "שגוי"
+#define D_FILE "קובץ"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "זכרון פנוי"
+#define D_FREQUENCY "תדר"
+#define D_GAS "גז"
+#define D_GATEWAY "שער"
+#define D_GROUP "קבוצה"
+#define D_HOST "מארח"
+#define D_HOSTNAME "שם מארח"
+#define D_HUMIDITY "לחות"
+#define D_ILLUMINANCE "רמת חשיפה"
+#define D_IMMEDIATE "מידי" // Button immediate
+#define D_INDEX "אינדקס"
+#define D_INFO "מידע"
+#define D_INFRARED "אינפרא"
+#define D_INITIALIZED "מאותחל"
+#define D_IP_ADDRESS "IP כתובת"
+#define D_LIGHT "אור"
+#define D_LWT "LWT"
+#define D_MODULE "מודול"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "לחיצה מרובה"
+#define D_NOISE "רעש"
+#define D_NONE "כלום"
+#define D_OFF "כבוי"
+#define D_OFFLINE "מנותק"
+#define D_OK "אוקיי"
+#define D_ON "פועל"
+#define D_ONLINE "מחובר"
+#define D_PASSWORD "סיסמא"
+#define D_PORT "פורט"
+#define D_POWER_FACTOR "גורם כוח"
+#define D_POWERUSAGE "כוח"
+#define D_POWERUSAGE_ACTIVE "כוח פעיל"
+#define D_POWERUSAGE_APPARENT "כוח לכאורה"
+#define D_POWERUSAGE_REACTIVE "כוח תגובתי"
+#define D_PRESSURE "לחץ"
+#define D_PRESSUREATSEALEVEL "לחץ ימי"
+#define D_PROGRAM_FLASH_SIZE "גודל תוכנית פלאש"
+#define D_PROGRAM_SIZE "גודל תוכנית"
+#define D_PROJECT "פרויקט"
+#define D_RAIN "גשם"
+#define D_RECEIVED "התקבל"
+#define D_RESTART "איתחול"
+#define D_RESTARTING "הפעלה מחדש"
+#define D_RESTART_REASON "סיבת הפעלה מחדש"
+#define D_RESTORE "שחזור"
+#define D_RETAINED "שמור"
+#define D_RULE "חוק"
+#define D_SAVE "שמירה"
+#define D_SENSOR "חיישן"
+#define D_SSID "SSId"
+#define D_START "התחלה"
+#define D_STD_TIME "STD"
+#define D_STOP "עצירה"
+#define D_SUBNET_MASK "רשת מסכת משנה"
+#define D_SUBSCRIBE_TO "הרשם ל"
+#define D_UNSUBSCRIBE_FROM "בטל רישום"
+#define D_SUCCESSFUL "הצליח"
+#define D_SUNRISE "זריחה"
+#define D_SUNSET "שקיעה"
+#define D_TEMPERATURE "טמפרטורה"
+#define D_TO "ל"
+#define D_TOGGLE "מתג"
+#define D_TOPIC "נושא"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "עבר"
+#define D_TRUE "נכון"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "שדרוג"
+#define D_UPLOAD "העלאה"
+#define D_UPTIME "זמן עליה"
+#define D_USER "משתמש"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV אינדקס"
+#define D_UV_INDEX_1 "Low"
+#define D_UV_INDEX_2 "Mid"
+#define D_UV_INDEX_3 "High"
+#define D_UV_INDEX_4 "Danger"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR" // Out of Range
+#define D_UV_LEVEL "UV רמת"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "גרסה"
+#define D_VOLTAGE "מתח"
+#define D_WEIGHT "משקל"
+#define D_WARMLIGHT "חום"
+#define D_WEB_SERVER "Web שרת"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "אזהרה גרסה זו אינה תומכת בהגדרות קבועות"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "רישום טורי מושבת"
+#define D_SYSLOG_LOGGING_REENABLED "הופעל מחדש Syslog רישום"
+
+#define D_SET_BAUDRATE_TO "הגדר קצב שידור ל"
+#define D_RECEIVED_TOPIC "Topic התקבל"
+#define D_DATA_SIZE "גודל נתונים"
+#define D_ANALOG_INPUT "אנלוגי"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "לולאות חסומות"
+#define D_WPS_FAILED_WITH_STATUS "נכשל עם הסטטוס WPSconfig"
+#define D_ACTIVE_FOR_3_MINUTES "פעיל במשך 3 דקות"
+#define D_FAILED_TO_START "נכשל בנסיון להתחיל"
+#define D_PATCH_ISSUE_2186 "בעית תיקון 2186"
+#define D_CONNECTING_TO_AP "AP -מתחבר ל"
+#define D_IN_MODE "במצב"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP החיבור נכשל מכיוון שלא התקבלה כתובת"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "זמין AP החיבור נכשל כיוון שאין"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "סיסמא שגויה , AP חיבור נכשל ל"
+#define D_CONNECT_FAILED_AP_TIMEOUT "פג זמן המתנה , AP חיבור נכשל ל"
+#define D_ATTEMPTING_CONNECTION "...מנסה להתחבר"
+#define D_CHECKING_CONNECTION "...בודק חיבור"
+#define D_QUERY_DONE "MQTT השאילתה נעשתה. נמצאו שירותי"
+#define D_MQTT_SERVICE_FOUND "MQTT נמצאו שירותי"
+#define D_FOUND_AT "נמצא ב"
+#define D_SYSLOG_HOST_NOT_FOUND "לא נמצא Syslog מארח"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "נשמר לפלאש ב"
+#define D_LOADED_FROM_FLASH_AT "נטען מהפלאש מ"
+#define D_USE_DEFAULTS "השתמש בהגדרות ברירת המחדל"
+#define D_ERASED_SECTOR "סקטור מחוק"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "JavaScript - כדי להשתמש בקושחת אסמוטה אנא הפעל"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "קושחה מינימלית
בבקשה אנא שדרג"
+#define D_WEBSERVER_ACTIVE_ON "שרת ווב פעיל"
+#define D_WITH_IP_ADDRESS "IP עם כתובת"
+#define D_WEBSERVER_STOPPED "שרת ווב הופסק"
+#define D_FILE_NOT_FOUND "קובץ לא נמצא"
+#define D_REDIRECTED "הופנה מחדש לפורטל"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager set AccessPoint"
+#define D_TRYING_TO_CONNECT "מנסה לחבר את ההתקן לרשת"
+
+#define D_RESTART_IN "הפעלה מחדש תוך"
+#define D_SECONDS "שניות"
+#define D_DEVICE_WILL_RESTART "ההתקן יופעל מחדש בעוד מס' שניות"
+#define D_BUTTON_TOGGLE "מצב"
+#define D_CONFIGURATION "הגדרות"
+#define D_INFORMATION "מידע"
+#define D_FIRMWARE_UPGRADE "שדרוג קושחה"
+#define D_CONSOLE "קונסול"
+#define D_CONFIRM_RESTART "אישור הפעלה מחדש"
+
+#define D_CONFIGURE_MODULE "הגדרות מודול"
+#define D_CONFIGURE_WIFI "WIFI הגדרות"
+#define D_CONFIGURE_MQTT "MQTT הגדרות"
+#define D_CONFIGURE_DOMOTICZ "Domoticz הגדרות"
+#define D_CONFIGURE_LOGGING "הגדרת לוגים"
+#define D_CONFIGURE_OTHER "הגדרות שונות"
+#define D_CONFIRM_RESET_CONFIGURATION "אישור שינוי הגדרות"
+#define D_RESET_CONFIGURATION "אתחול הגדרות"
+#define D_BACKUP_CONFIGURATION "גיבוי הגדרות"
+#define D_RESTORE_CONFIGURATION "שחזור הגדרות"
+#define D_MAIN_MENU "תפריט ראשי"
+
+#define D_MODULE_PARAMETERS "מודול פרמטרים"
+#define D_MODULE_TYPE "סוג מודול"
+#define D_PULLUP_ENABLE "pull-up אין לחצן/מתג"
+#define D_ADC "ADC"
+#define D_GPIO " רגל "
+#define D_SERIAL_IN "כניסת סריאל"
+#define D_SERIAL_OUT "יציאת סריאל"
+
+#define D_WIFI_PARAMETERS "Wifi פרמטרים"
+#define D_SCAN_FOR_WIFI_NETWORKS "סורק עבור רשתות אלחוטיות"
+#define D_SCAN_DONE "סריקה הושלמה"
+#define D_NO_NETWORKS_FOUND "לא נמצאו רשתות אלחוטיות"
+#define D_REFRESH_TO_SCAN_AGAIN "רענן כדי לסרוק שוב"
+#define D_DUPLICATE_ACCESSPOINT "נקודות גישה משוכפלות"
+#define D_SKIPPING_LOW_QUALITY "מדלג עקב איכות רשת נמוכה"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Password"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Password"
+
+#define D_MQTT_PARAMETERS "MQTT פרמטרים"
+#define D_CLIENT "לקוח"
+#define D_FULL_TOPIC "זיהוי מלא"
+
+#define D_LOGGING_PARAMETERS "פרמטרי לוגים"
+#define D_SERIAL_LOG_LEVEL "רמת לוג עבור סריאל"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "רמת לוג עבור אתר"
+#define D_SYS_LOG_LEVEL "Syslog רמת לוג עבור שרת"
+#define D_MORE_DEBUG "מיפוי נוסף"
+#define D_SYSLOG_HOST "Syslog מארח"
+#define D_SYSLOG_PORT "Syslog פורט"
+#define D_TELEMETRY_PERIOD "זמן שידור"
+
+#define D_OTHER_PARAMETERS "פרמטרים שונים"
+#define D_TEMPLATE "תבנית"
+#define D_ACTIVATE "הפעל"
+#define D_WEB_ADMIN_PASSWORD "סיסמת מנהל"
+#define D_MQTT_ENABLE "MQTT אפשר"
+#define D_FRIENDLY_NAME "שם ידידותי"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "התקן בודד"
+#define D_MULTI_DEVICE "התקנים"
+
+#define D_CONFIGURE_TEMPLATE "הגדר תבנית"
+#define D_TEMPLATE_PARAMETERS "פרמטרים של תבנית"
+#define D_TEMPLATE_NAME "שם"
+#define D_BASE_TYPE "מבוסס על"
+#define D_TEMPLATE_FLAGS "אפשריות"
+
+#define D_SAVE_CONFIGURATION "שמירת הגדרות"
+#define D_CONFIGURATION_SAVED "הגדרות נשמרו"
+#define D_CONFIGURATION_RESET "איפוס הגדרות"
+
+#define D_PROGRAM_VERSION "גירסת תוכנה"
+#define D_BUILD_DATE_AND_TIME "Build Date & Time"
+#define D_CORE_AND_SDK_VERSION "Core/SDK Version"
+#define D_FLASH_WRITE_COUNT "מונה צריבות"
+#define D_MAC_ADDRESS "MAC כתובת"
+#define D_MQTT_HOST "MQTT מארח"
+#define D_MQTT_PORT "MQTT פורט"
+#define D_MQTT_CLIENT "MQTT לקוח"
+#define D_MQTT_USER "MQTT שם משתמש"
+#define D_MQTT_TOPIC "MQTT נושא"
+#define D_MQTT_GROUP_TOPIC "MQTT נושא קבוצת"
+#define D_MQTT_FULL_TOPIC "MQTT נושא מלא"
+#define D_MDNS_DISCOVERY "mDNS זיהוי"
+#define D_MDNS_ADVERTISE "mDNS פרסום"
+#define D_ESP_CHIP_ID "ESP מס' רכיב"
+#define D_FLASH_CHIP_ID "מס' רכיב פלאש"
+#define D_FLASH_CHIP_SIZE "גודל זיכרון פלאש"
+#define D_FREE_PROGRAM_SPACE "מקום פנוי - תוכנה"
+
+#define D_UPGRADE_BY_WEBSERVER "שדרוג קושחה"
+#define D_OTA_URL "OTA כתובת"
+#define D_START_UPGRADE "התחל בשדרוג"
+#define D_UPGRADE_BY_FILE_UPLOAD "שדרוג דרך קובץ נכשל"
+#define D_UPLOAD_STARTED "העלאה מתחילה"
+#define D_UPGRADE_STARTED "שדרוג מתחיל"
+#define D_UPLOAD_DONE "העלאה הסתיימה"
+#define D_UPLOAD_ERR_1 "לא נבחר קובץ"
+#define D_UPLOAD_ERR_2 "אין מספיק מקום"
+#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
+#define D_UPLOAD_ERR_4 "גודל קובץ השדרוג גדול מנפח האחסון של הפלאש"
+#define D_UPLOAD_ERR_5 "מאגר העלאה לא תקין"
+#define D_UPLOAD_ERR_6 "העלאה נכשלה. אפשר רישום 3"
+#define D_UPLOAD_ERR_7 "ההעלאה בוטלה"
+#define D_UPLOAD_ERR_8 "קובץ שגוי"
+#define D_UPLOAD_ERR_9 "קובץ גדול מדי"
+#define D_UPLOAD_ERR_10 "נכשלה RF הפעלת שבב"
+#define D_UPLOAD_ERR_11 "נכשלה RF מחיקת שבב"
+#define D_UPLOAD_ERR_12 "נכשלה RF כתיבת שבב"
+#define D_UPLOAD_ERR_13 "נכשלה RF קידוד קושחת שבב"
+#define D_UPLOAD_ERROR_CODE "שגיאת קוד העלאה"
+
+#define D_ENTER_COMMAND "הקש פקודה"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
+#define D_NEED_USER_AND_PASSWORD "Need user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "...TLS אמת טביעת אצבע של"
+#define D_TLS_CONNECT_FAILED_TO "נכשל TLS חיבור"
+#define D_RETRY_IN "נסה שוב תוך"
+#define D_VERIFIED "מאומת באמצעות טביעת אצבע"
+#define D_INSECURE "חיבור לא מאובטח עקב טביעת אצבע לא חוקית"
+#define D_CONNECT_FAILED_TO "חיבור נכשל ל"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast disabled"
+#define D_MULTICAST_REJOINED "Multicast (re)joined"
+#define D_MULTICAST_JOIN_FAILED "Multicast join failed"
+#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo הגדרת"
+#define D_RESPONSE_SENT "תגובה נשלחה"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue הגדרת"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API not implemented"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz פרמטרי"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "טמפרטורה"
+ #define D_DOMOTICZ_TEMP_HUM "טמפרטורה,לחות"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "טמפרטורה,לחות,ברומטר"
+ #define D_DOMOTICZ_POWER_ENERGY "הספק,צריכה"
+ #define D_DOMOTICZ_ILLUMINANCE "עוצמת אור"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "איכות אוויר"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "עדכן טיימר"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "הגדרות תזמון"
+#define D_TIMER_PARAMETERS "פרמטרים עבור תזמון"
+#define D_TIMER_ENABLE "אפשר תזמון"
+#define D_TIMER_ARM "טען"
+#define D_TIMER_TIME "זמן"
+#define D_TIMER_DAYS "ימים"
+#define D_TIMER_REPEAT "חזרות"
+#define D_TIMER_OUTPUT "פלט"
+#define D_TIMER_ACTION "פעולה"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX הגדר"
+#define D_KNX_PARAMETERS "KNX פרמטרי"
+#define D_KNX_GENERAL_CONFIG "כללי"
+#define D_KNX_PHYSICAL_ADDRESS "כתובת פיזית"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
+#define D_KNX_ENABLE "KNX אפשר"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "נתונים לשליחה אל כתובות קבוצתיות"
+#define D_ADD "הוסף"
+#define D_DELETE "מחק"
+#define D_REPLY "השב"
+#define D_KNX_GROUP_ADDRESS_TO_READ "כתובות קבוצתיות לקבלת נתונים מ"
+#define D_RECEIVED_FROM "התקבל מאת"
+#define D_KNX_COMMAND_WRITE "כתיבה"
+#define D_KNX_COMMAND_READ "קריאה"
+#define D_KNX_COMMAND_OTHER "אחר"
+#define D_SENT_TO "נשלח ל"
+#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
+#define D_KNX_ENHANCEMENT "שיפור התקשורת"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "צריכה יומית"
+#define D_ENERGY_YESTERDAY "צריכה בעבר"
+#define D_ENERGY_TOTAL "צריכה כללית"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "שרת עסוק"
+#define D_SENSOR_CRC_ERROR "בחיישן CRC שגיאת"
+#define D_SENSORS_FOUND "חיישנים לא נמצאו"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "הזמן הקצוב להמתנה"
+#define D_START_SIGNAL_LOW "להתחיל אות נמוך"
+#define D_START_SIGNAL_HIGH "להתחיל אות גבוה"
+#define D_PULSE "פעימה"
+#define D_CHECKSUM_FAILURE "בדיקת כשל נכשלה"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
+#define D_SHT1X_FOUND "SHT1X found"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "חלקיקים"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "הסר משקל"
+#define D_HX_CAL_REFERENCE "טען משקל התייחסות"
+#define D_HX_CAL_DONE "מכויל"
+#define D_HX_CAL_FAIL "כיול נכשל"
+#define D_RESET_HX711 "אפס את קנה המידה"
+#define D_CONFIGURE_HX711 "הגדר קנה מידה"
+#define D_HX711_PARAMETERS "פרמטרים של קנה מידה"
+#define D_ITEM_WEIGHT "משקל פריט"
+#define D_REFERENCE_WEIGHT "משקל הפניה"
+#define D_CALIBRATE "כייל"
+#define D_CALIBRATION "כיול"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "כיוון הרוח"
+#define D_TX20_WIND_SPEED "מהירות הרוח"
+#define D_TX20_WIND_SPEED_AVG "מהירות הרוח ממוצעת"
+#define D_TX20_WIND_SPEED_MAX "מהירות הרוח מקסימלית"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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 "משתמש"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "נגן מוזיקה"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "מתג" // Suffix "1"
+#define D_SENSOR_BUTTON "לחצן" // Suffix "1"
+#define D_SENSOR_RELAY "ממסר" // Suffix "1i"
+#define D_SENSOR_LED "לד" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "מונה" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sectors"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_HE_HE_H_
diff --git a/tasmota/language/hu-HU.h b/tasmota/language/hu-HU.h
index 9533b355b..62806fa46 100644
--- a/tasmota/language/hu-HU.h
+++ b/tasmota/language/hu-HU.h
@@ -1,703 +1,701 @@
-/*
- hu-HU.h - localization for Hungarian in Hungary for Tasmota
-
- Copyright (C) 2019 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 .
-*/
-
-#ifndef _LANGUAGE_HU_HU_H_
-#define _LANGUAGE_HU_HU_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.12.0e
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1038
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "hu"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "."
-#define D_MONTH_DAY_SEPARATOR "."
-#define D_DATE_TIME_SEPARATOR " "
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "VasHétKedSzeCsüPénSzo"
-#define D_MONTH3LIST "JanFebMárÁprMájJúnJúlAugSzeOktNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Levegőminőség"
-#define D_AP "AP" // Access Point
-#define D_AS "mint"
-#define D_AUTO "AUTO"
-#define D_BLINK "Villogás"
-#define D_BLINKOFF "Villogás ki"
-#define D_BOOT_COUNT "Újraindulások száma"
-#define D_BRIGHTLIGHT "Max. fényerő"
-#define D_BSSID "BSSID"
-#define D_BUTTON "Gomb"
-#define D_BY "by" // Written by me
-#define D_BYTES "Byte-ok"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Csatorna"
-#define D_CO2 "Szén-dioxid"
-#define D_CODE "kód" // Button code
-#define D_COLDLIGHT "Hideg fény"
-#define D_COMMAND "Parancs"
-#define D_CONNECTED "Csatlakoztatva"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Szám"
-#define D_COUNTER "Számláló"
-#define D_CURRENT "Áramerősség" // As in Voltage and Current
-#define D_DATA "Adat"
-#define D_DARKLIGHT "Min. fényerő"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Letiltva"
-#define D_DISTANCE "Távolság"
-#define D_DNS_SERVER "DNS szerver"
-#define D_DONE "Kész"
-#define D_DST_TIME "nyári idő"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emuláció"
-#define D_ENABLED "Engedélyezve"
-#define D_ERASE "Törlés"
-#define D_ERROR "Hiba"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Sikertelen"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "fallback topik"
-#define D_FALSE "Hamis"
-#define D_FILE "Fájl"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Szabad memória"
-#define D_FREQUENCY "Frekvencia"
-#define D_GAS "Gáz"
-#define D_GATEWAY "Átjáró"
-#define D_GROUP "Csoport"
-#define D_HOST "Hoszt"
-#define D_HOSTNAME "Hosztnév"
-#define D_HUMIDITY "Páratartalom"
-#define D_ILLUMINANCE "Megvilágítás"
-#define D_IMMEDIATE "azonnali" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infravörös"
-#define D_INITIALIZED "Inicializálva"
-#define D_IP_ADDRESS "IP cím"
-#define D_LIGHT "Fény"
-#define D_LWT "LWT"
-#define D_MODULE "Modul"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "több lenyomás"
-#define D_NOISE "Zaj"
-#define D_NONE "nincs"
-#define D_OFF "Ki"
-#define D_OFFLINE "Offline"
-#define D_OK "OK"
-#define D_ON "Be"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Jelszó"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Teljesítménytényező"
-#define D_POWERUSAGE "Energiafelhasználás"
-#define D_POWERUSAGE_ACTIVE "Aktív teljesítmény"
-#define D_POWERUSAGE_APPARENT "Látszólagos teljesítmény"
-#define D_POWERUSAGE_REACTIVE "Reaktív teljesítmény"
-#define D_PRESSURE "Nyomás"
-#define D_PRESSUREATSEALEVEL "Tengerszinti nyomás"
-#define D_PROGRAM_FLASH_SIZE "Program flash méret"
-#define D_PROGRAM_SIZE "Program méret"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Eső"
-#define D_RECEIVED "Érkezett"
-#define D_RESTART "Újraindítás"
-#define D_RESTARTING "Újraindítás"
-#define D_RESTART_REASON "Utolsó újraindulás oka"
-#define D_RESTORE "Visszaállítás"
-#define D_RETAINED "retained"
-#define D_RULE "Szabály"
-#define D_SAVE "Mentés"
-#define D_SENSOR "Szenzor"
-#define D_SSID "SSID"
-#define D_START ""
-#define D_STD_TIME "STD"
-#define D_STOP "Leállítás"
-#define D_SUBNET_MASK "Alhálózati maszk"
-#define D_SUBSCRIBE_TO "Feliratkozás a(z)"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Sikeres"
-#define D_SUNRISE "Napkelte"
-#define D_SUNSET "Napnyugta"
-#define D_TEMPERATURE "Hőmérséklet"
-#define D_TO "-nak"
-#define D_TOGGLE "Megfordítás"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Továbbít"
-#define D_TRUE "Igaz"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "Frissítés"
-#define D_UPLOAD "Feltöltés"
-#define D_UPTIME "Üzemidő"
-#define D_USER "Felhasználó"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV index"
-#define D_UV_INDEX_1 "alacsony"
-#define D_UV_INDEX_2 "közepes"
-#define D_UV_INDEX_3 "magas"
-#define D_UV_INDEX_4 "veszélyes"
-#define D_UV_INDEX_5 "égés L1/2"
-#define D_UV_INDEX_6 "égés L3"
-#define D_UV_INDEX_7 "tartományon kívül"
-#define D_UV_LEVEL "UV szint"
-#define D_UV_POWER "UV teljesítmény"
-#define D_VERSION "Verzió"
-#define D_VOLTAGE "Feszültség"
-#define D_WEIGHT "Tömeg"
-#define D_WARMLIGHT "Meleg fény"
-#define D_WEB_SERVER "Webszerver"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "VIGYÁZZ! Ez a verzió nem támogat tartós beállításokat"
-#define D_LEVEL_10 "szint 1-0"
-#define D_LEVEL_01 "szint 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Soros naplózás kikapcsolva"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog logolás újraengedélyezve"
-
-#define D_SET_BAUDRATE_TO "Baudrate beállítása"
-#define D_RECEIVED_TOPIC "Érkezett topic"
-#define D_DATA_SIZE "Adatméret"
-#define D_ANALOG_INPUT "Analóg"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Tiltott hurok"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig SIKERTELEN státusz:"
-#define D_ACTIVE_FOR_3_MINUTES "aktválás 3 percre"
-#define D_FAILED_TO_START "sikertelen indítás"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "AP-hoz csatlakozás:"
-#define D_IN_MODE "mód:"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Sikertelen csatlakozás, nincs kiosztott IP cím"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Sikertelen csatlakozás, AP nem elérhető"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Sikertelen csatlakozás, hibás AP jelszó"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Sikertelen csatlakozás AP időtúllépés miatt"
-#define D_ATTEMPTING_CONNECTION "Csatlakozás..."
-#define D_CHECKING_CONNECTION "Kapcsolat ellenőrzése..."
-#define D_QUERY_DONE "Lekérés kész. MQTT szolgáltatás aktív"
-#define D_MQTT_SERVICE_FOUND "élő MQTT szolgáltatás a(z)"
-#define D_FOUND_AT "a(z)"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog hoszt nem található"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Flash-re mentve a(z)"
-#define D_LOADED_FROM_FLASH_AT "Flash-ről betöltve a(z)"
-#define D_USE_DEFAULTS "Alapértelmezett beáll. használata"
-#define D_ERASED_SECTOR "Szektor törlése"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "A Tasmota használatához engedélyezd a Javascriptet!"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMÁLIS firmware
frissítsd!"
-#define D_WEBSERVER_ACTIVE_ON "Webszerver aktív:"
-#define D_WITH_IP_ADDRESS "IP cím:"
-#define D_WEBSERVER_STOPPED "Webszerver leállítva"
-#define D_FILE_NOT_FOUND "Fájl nem található"
-#define D_REDIRECTED "Átírányítás captive portálra"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "WifiManager AccessPoint(AP) és Station(ST) beállítása"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager AccessPoint(AP) beállítása"
-#define D_TRYING_TO_CONNECT "Csatlakozás a hálózatra..."
-
-#define D_RESTART_IN "Újraindítás..."
-#define D_SECONDS "másodperc"
-#define D_DEVICE_WILL_RESTART "Az eszköz hamarosan újraindul..."
-#define D_BUTTON_TOGGLE "Megfordítás"
-#define D_CONFIGURATION "Beállítások"
-#define D_INFORMATION "Információ"
-#define D_FIRMWARE_UPGRADE "Firmware frissítés"
-#define D_CONSOLE "Konzol"
-#define D_CONFIRM_RESTART "Biztosan újraindítsam a modult?"
-
-#define D_CONFIGURE_MODULE "Eszközbeállítások"
-#define D_CONFIGURE_WIFI "WiFi konfiguráció"
-#define D_CONFIGURE_MQTT "MQTT konfiguráció"
-#define D_CONFIGURE_DOMOTICZ "Domoticz konfiguráció"
-#define D_CONFIGURE_LOGGING "Naplózás beállításai"
-#define D_CONFIGURE_OTHER "Egyéb beállítások"
-#define D_CONFIRM_RESET_CONFIGURATION "Biztosan töröljem a beállításokat?"
-#define D_RESET_CONFIGURATION "Beállítások törlése"
-#define D_BACKUP_CONFIGURATION "Beállítások mentése"
-#define D_RESTORE_CONFIGURATION "Beállítások visszatöltése"
-#define D_MAIN_MENU "Menü"
-
-#define D_MODULE_PARAMETERS "Modul paraméterek"
-#define D_MODULE_TYPE "Alkalmazott modul"
-#define D_PULLUP_ENABLE "Nincs felhúzó ellenállás"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Soros BE"
-#define D_SERIAL_OUT "Soros KI"
-
-#define D_WIFI_PARAMETERS "WiFi paraméterek"
-#define D_SCAN_FOR_WIFI_NETWORKS "WiFi hálózat keresése"
-#define D_SCAN_DONE "Keresés kész"
-#define D_NO_NETWORKS_FOUND "Nincs elérhető hálózat"
-#define D_REFRESH_TO_SCAN_AGAIN "Frissíts az újrakereséshez"
-#define D_DUPLICATE_ACCESSPOINT "Duplikált access point"
-#define D_SKIPPING_LOW_QUALITY "Rossz, alacsony jelminőség"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSID"
-#define D_AP1_PASSWORD "AP1 megosztott kulcs"
-#define D_AP2_SSID "AP2 SSID"
-#define D_AP2_PASSWORD "AP2 megosztott kulcs"
-
-#define D_MQTT_PARAMETERS "MQTT paraméterek"
-#define D_CLIENT "Kliens"
-#define D_FULL_TOPIC "Teljes topic"
-
-#define D_LOGGING_PARAMETERS "Naplózási paraméterek"
-#define D_SERIAL_LOG_LEVEL "Soros naplózási szint"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web naplózási szint"
-#define D_SYS_LOG_LEVEL "Syslog szint"
-#define D_MORE_DEBUG "Részletes hibakeresés"
-#define D_SYSLOG_HOST "Syslog hoszt"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Telemetria (mp.)"
-
-#define D_OTHER_PARAMETERS "Egyéb beállítások"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Web admin jelszó"
-#define D_MQTT_ENABLE "MQTT engedélyezése"
-#define D_FRIENDLY_NAME "Név"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "single device"
-#define D_MULTI_DEVICE "multi device"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Beállítások mentése"
-#define D_CONFIGURATION_SAVED "Beállítások elmentve"
-#define D_CONFIGURATION_RESET "Beállítások visszaállítása"
-
-#define D_PROGRAM_VERSION "Program verzió"
-#define D_BUILD_DATE_AND_TIME "Build ideje"
-#define D_CORE_AND_SDK_VERSION "Core/SDK verzió"
-#define D_FLASH_WRITE_COUNT "Flash írások száma"
-#define D_MAC_ADDRESS "MAC cím"
-#define D_MQTT_HOST "MQTT hoszt"
-#define D_MQTT_PORT "MQTT port"
-#define D_MQTT_CLIENT "MQTT kliens"
-#define D_MQTT_USER "MQTT felhasználó"
-#define D_MQTT_TOPIC "MQTT topic"
-#define D_MQTT_GROUP_TOPIC "MQTT csoport topic"
-#define D_MQTT_FULL_TOPIC "MQTT teljes topic"
-#define D_MDNS_DISCOVERY "mDNS láthatóság"
-#define D_MDNS_ADVERTISE "mDNS hirdetés"
-#define D_ESP_CHIP_ID "ESP chip ID"
-#define D_FLASH_CHIP_ID "Flash chip ID"
-#define D_FLASH_CHIP_SIZE "Flash mérete"
-#define D_FREE_PROGRAM_SPACE "Szabad programhely"
-
-#define D_UPGRADE_BY_WEBSERVER "Frissítés távoli szerverről"
-#define D_OTA_URL "OTA URL"
-#define D_START_UPGRADE "Frissítés"
-#define D_UPGRADE_BY_FILE_UPLOAD "Frissítés helyi fájllal"
-#define D_UPLOAD_STARTED "Feltöltés elindítva"
-#define D_UPGRADE_STARTED "Frissítés elindítva"
-#define D_UPLOAD_DONE "Feltöltés kész"
-#define D_UPLOAD_ERR_1 "Nincs fájl kijelölve"
-#define D_UPLOAD_ERR_2 "Nincs elég memória"
-#define D_UPLOAD_ERR_3 "A \"magic byte\" nem 0xE9"
-#define D_UPLOAD_ERR_4 "A program flashméret nagyobb a valós flashméretnél"
-#define D_UPLOAD_ERR_5 "Feltöltési buffer hiba"
-#define D_UPLOAD_ERR_6 "Feltöltés sikertelen. Endegélyezd a 3. szintű naplózást"
-#define D_UPLOAD_ERR_7 "Feltöltés megszakítva"
-#define D_UPLOAD_ERR_8 "Érvénytelen fájl"
-#define D_UPLOAD_ERR_9 "A fájl túl nagy"
-#define D_UPLOAD_ERR_10 "Az RF chip inicializálása sikertelen"
-#define D_UPLOAD_ERR_11 "Az RF chip törlése sikertelen"
-#define D_UPLOAD_ERR_12 "Az RF chip írása sikertelen"
-#define D_UPLOAD_ERR_13 "Az RF firmware dekódolása sikertelen"
-#define D_UPLOAD_ERROR_CODE "Feltöltési hibakód"
-
-#define D_ENTER_COMMAND "Kérem a parancsot..."
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Engedélyezz 2-es szintű webnaplózást több információért"
-#define D_NEED_USER_AND_PASSWORD "Szükséges a user=&password= paraméter"
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "TLS fingerprint hitelesítése..."
-#define D_TLS_CONNECT_FAILED_TO "TLS csatlakozás sikertelen a(z)"
-#define D_RETRY_IN "Újrapróbálás"
-#define D_VERIFIED "Fingerprint hitelesítve"
-#define D_INSECURE "Nem biztonságos kapcsolat érvénytelen fingerprint miatt"
-#define D_CONNECT_FAILED_TO "Sikertelen csatlakozás a(z)"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast kikapcsolva"
-#define D_MULTICAST_REJOINED "Multicast (újra)csatlakozás"
-#define D_MULTICAST_JOIN_FAILED "Multicast csatlakozás sikertelen"
-#define D_FAILED_TO_SEND_RESPONSE "Nem sikerült választ küldeni"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo beállítás"
-#define D_RESPONSE_SENT "Válasz elküldve"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue beállítás"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API nincs implementálva"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST argumentumok"
-#define D_3_RESPONSE_PACKETS_SENT "3 válaszcsomag elküldve"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz paraméterek"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Kapcsoló idx"
-#define D_DOMOTICZ_SENSOR_IDX "Szenzor idx"
- #define D_DOMOTICZ_TEMP "Hőmérséklet"
- #define D_DOMOTICZ_TEMP_HUM "Hőmérséklet, páratartalom"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Hőmérséklet, páratartalom, légnyomás"
- #define D_DOMOTICZ_POWER_ENERGY "Teljesítmény, energia"
- #define D_DOMOTICZ_ILLUMINANCE "Fényerő"
- #define D_DOMOTICZ_COUNT "Szám/PM1"
- #define D_DOMOTICZ_VOLTAGE "Feszültség/PM2.5"
- #define D_DOMOTICZ_CURRENT "Áram/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Légminőség"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Frissítési időzítő"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Időzítő beállításai"
-#define D_TIMER_PARAMETERS "Időzítő paraméterei"
-#define D_TIMER_ENABLE "Időzítők engedélyezve"
-#define D_TIMER_ARM "Be"
-#define D_TIMER_TIME "Idő"
-#define D_TIMER_DAYS "Napok"
-#define D_TIMER_REPEAT "Ismétlés"
-#define D_TIMER_OUTPUT "Kimenet"
-#define D_TIMER_ACTION "Művelet"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX beállításai"
-#define D_KNX_PARAMETERS "KNX paraméterei"
-#define D_KNX_GENERAL_CONFIG "Általános"
-#define D_KNX_PHYSICAL_ADDRESS "Fizikai cím"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(egyedinek kell lennie a KNX hálózaton)"
-#define D_KNX_ENABLE "KNX engedélyezése"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Íráshoz használt csoportcímek"
-#define D_ADD "Hozzáadás"
-#define D_DELETE "Törlés"
-#define D_REPLY "Válasz"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Fogadáshoz használt csoportcímek"
-#define D_RECEIVED_FROM "Fogadva tőle:"
-#define D_KNX_COMMAND_WRITE "Írás"
-#define D_KNX_COMMAND_READ "Olvasás"
-#define D_KNX_COMMAND_OTHER "Egyáb"
-#define D_SENT_TO "küldve neki:"
-#define D_KNX_WARNING "A csoportcím ( 0 / 0 / 0 ) fenntartott és nem használható."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Mai energia"
-#define D_ENERGY_YESTERDAY "Tegnapi energia"
-#define D_ENERGY_TOTAL "Összes energia"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Szenzor foglalt"
-#define D_SENSOR_CRC_ERROR "Szenzor CRC hiba"
-#define D_SENSORS_FOUND "Szenzorok megtalálva"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Időtúllépés, várakozás"
-#define D_START_SIGNAL_LOW "startjel alacsony"
-#define D_START_SIGNAL_HIGH "startjel magas"
-#define D_PULSE "impulzus"
-#define D_CHECKSUM_FAILURE "Checksum hiba"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "A szenzor nem nyugtázta a parancsot"
-#define D_SHT1X_FOUND "SHT1X megtalálva"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Részecskék"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Gyorsulásm. X-tengely"
-#define D_AY_AXIS "Gyorsulásm. Y-tengely"
-#define D_AZ_AXIS "Gyorsulásm. Z-tengely"
-#define D_GX_AXIS "Giroszkóp X-tengely"
-#define D_GY_AXIS "Giroszkóp Y-tengely"
-#define D_GZ_AXIS "Giroszkóp Z-tengely"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Távolítsa el a súlyt"
-#define D_HX_CAL_REFERENCE "Helyezze fel a referenciasúlyt"
-#define D_HX_CAL_DONE "Kalibrálva"
-#define D_HX_CAL_FAIL "Kalibrálási hiba"
-#define D_RESET_HX711 "Skála újrabeállítása"
-#define D_CONFIGURE_HX711 "Skála konfigurálása"
-#define D_HX711_PARAMETERS "Skálaparaméterek"
-#define D_ITEM_WEIGHT "Tárgy tömege"
-#define D_REFERENCE_WEIGHT "Referenciatömeg"
-#define D_CALIBRATE "Kalibrálás"
-#define D_CALIBRATION "Kalibrálás"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Szélirány"
-#define D_TX20_WIND_SPEED "Szélsebesség"
-#define D_TX20_WIND_SPEED_AVG "Átlag szélsebesség"
-#define D_TX20_WIND_SPEED_MAX "Max. szélsebesség"
-#define D_TX20_NORTH "É"
-#define D_TX20_EAST "K"
-#define D_TX20_SOUTH "D"
-#define D_TX20_WEST "NY"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 lejátszó"
-#define D_SENSOR_IRSEND "IR adó"
-#define D_SENSOR_SWITCH "Kapcsoló" // Suffix "1"
-#define D_SENSOR_BUTTON "Gomb" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "LED" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Számláló" // Suffix "1"
-#define D_SENSOR_IRRECV "IR vevő"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Háttérfény"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "h"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "s"
-#define D_UNIT_SECTORS "szektorok"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Fázisszög"
-#define D_IMPORT_ACTIVE "Bejövő aktív"
-#define D_EXPORT_ACTIVE "Kimenő aktív"
-#define D_IMPORT_REACTIVE "Bejövő reaktív"
-#define D_EXPORT_REACTIVE "Kimenő reaktív"
-#define D_TOTAL_REACTIVE "Összes reaktív"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "fok"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_HU_HU_H_
+/*
+ hu-HU.h - localization for Hungarian in Hungary for Tasmota
+
+ Copyright (C) 2019 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 .
+*/
+
+#ifndef _LANGUAGE_HU_HU_H_
+#define _LANGUAGE_HU_HU_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.12.0e
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1038
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "hu"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "."
+#define D_MONTH_DAY_SEPARATOR "."
+#define D_DATE_TIME_SEPARATOR " "
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "VasHétKedSzeCsüPénSzo"
+#define D_MONTH3LIST "JanFebMárÁprMájJúnJúlAugSzeOktNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Levegőminőség"
+#define D_AP "AP" // Access Point
+#define D_AS "mint"
+#define D_AUTO "AUTO"
+#define D_BLINK "Villogás"
+#define D_BLINKOFF "Villogás ki"
+#define D_BOOT_COUNT "Újraindulások száma"
+#define D_BRIGHTLIGHT "Max. fényerő"
+#define D_BSSID "BSSID"
+#define D_BUTTON "Gomb"
+#define D_BY "by" // Written by me
+#define D_BYTES "Byte-ok"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Csatorna"
+#define D_CO2 "Szén-dioxid"
+#define D_CODE "kód" // Button code
+#define D_COLDLIGHT "Hideg fény"
+#define D_COMMAND "Parancs"
+#define D_CONNECTED "Csatlakoztatva"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Szám"
+#define D_COUNTER "Számláló"
+#define D_CURRENT "Áramerősség" // As in Voltage and Current
+#define D_DATA "Adat"
+#define D_DARKLIGHT "Min. fényerő"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Letiltva"
+#define D_DISTANCE "Távolság"
+#define D_DNS_SERVER "DNS szerver"
+#define D_DONE "Kész"
+#define D_DST_TIME "nyári idő"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emuláció"
+#define D_ENABLED "Engedélyezve"
+#define D_ERASE "Törlés"
+#define D_ERROR "Hiba"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Sikertelen"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "fallback topik"
+#define D_FALSE "Hamis"
+#define D_FILE "Fájl"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Szabad memória"
+#define D_FREQUENCY "Frekvencia"
+#define D_GAS "Gáz"
+#define D_GATEWAY "Átjáró"
+#define D_GROUP "Csoport"
+#define D_HOST "Hoszt"
+#define D_HOSTNAME "Hosztnév"
+#define D_HUMIDITY "Páratartalom"
+#define D_ILLUMINANCE "Megvilágítás"
+#define D_IMMEDIATE "azonnali" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infravörös"
+#define D_INITIALIZED "Inicializálva"
+#define D_IP_ADDRESS "IP cím"
+#define D_LIGHT "Fény"
+#define D_LWT "LWT"
+#define D_MODULE "Modul"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "több lenyomás"
+#define D_NOISE "Zaj"
+#define D_NONE "nincs"
+#define D_OFF "Ki"
+#define D_OFFLINE "Offline"
+#define D_OK "OK"
+#define D_ON "Be"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Jelszó"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Teljesítménytényező"
+#define D_POWERUSAGE "Energiafelhasználás"
+#define D_POWERUSAGE_ACTIVE "Aktív teljesítmény"
+#define D_POWERUSAGE_APPARENT "Látszólagos teljesítmény"
+#define D_POWERUSAGE_REACTIVE "Reaktív teljesítmény"
+#define D_PRESSURE "Nyomás"
+#define D_PRESSUREATSEALEVEL "Tengerszinti nyomás"
+#define D_PROGRAM_FLASH_SIZE "Program flash méret"
+#define D_PROGRAM_SIZE "Program méret"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Eső"
+#define D_RECEIVED "Érkezett"
+#define D_RESTART "Újraindítás"
+#define D_RESTARTING "Újraindítás"
+#define D_RESTART_REASON "Utolsó újraindulás oka"
+#define D_RESTORE "Visszaállítás"
+#define D_RETAINED "retained"
+#define D_RULE "Szabály"
+#define D_SAVE "Mentés"
+#define D_SENSOR "Szenzor"
+#define D_SSID "SSID"
+#define D_START ""
+#define D_STD_TIME "STD"
+#define D_STOP "Leállítás"
+#define D_SUBNET_MASK "Alhálózati maszk"
+#define D_SUBSCRIBE_TO "Feliratkozás a(z)"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Sikeres"
+#define D_SUNRISE "Napkelte"
+#define D_SUNSET "Napnyugta"
+#define D_TEMPERATURE "Hőmérséklet"
+#define D_TO "-nak"
+#define D_TOGGLE "Megfordítás"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Továbbít"
+#define D_TRUE "Igaz"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "Frissítés"
+#define D_UPLOAD "Feltöltés"
+#define D_UPTIME "Üzemidő"
+#define D_USER "Felhasználó"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV index"
+#define D_UV_INDEX_1 "alacsony"
+#define D_UV_INDEX_2 "közepes"
+#define D_UV_INDEX_3 "magas"
+#define D_UV_INDEX_4 "veszélyes"
+#define D_UV_INDEX_5 "égés L1/2"
+#define D_UV_INDEX_6 "égés L3"
+#define D_UV_INDEX_7 "tartományon kívül"
+#define D_UV_LEVEL "UV szint"
+#define D_UV_POWER "UV teljesítmény"
+#define D_VERSION "Verzió"
+#define D_VOLTAGE "Feszültség"
+#define D_WEIGHT "Tömeg"
+#define D_WARMLIGHT "Meleg fény"
+#define D_WEB_SERVER "Webszerver"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "VIGYÁZZ! Ez a verzió nem támogat tartós beállításokat"
+#define D_LEVEL_10 "szint 1-0"
+#define D_LEVEL_01 "szint 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Soros naplózás kikapcsolva"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog logolás újraengedélyezve"
+
+#define D_SET_BAUDRATE_TO "Baudrate beállítása"
+#define D_RECEIVED_TOPIC "Érkezett topic"
+#define D_DATA_SIZE "Adatméret"
+#define D_ANALOG_INPUT "Analóg"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Tiltott hurok"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig SIKERTELEN státusz:"
+#define D_ACTIVE_FOR_3_MINUTES "aktválás 3 percre"
+#define D_FAILED_TO_START "sikertelen indítás"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "AP-hoz csatlakozás:"
+#define D_IN_MODE "mód:"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Sikertelen csatlakozás, nincs kiosztott IP cím"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Sikertelen csatlakozás, AP nem elérhető"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Sikertelen csatlakozás, hibás AP jelszó"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Sikertelen csatlakozás AP időtúllépés miatt"
+#define D_ATTEMPTING_CONNECTION "Csatlakozás..."
+#define D_CHECKING_CONNECTION "Kapcsolat ellenőrzése..."
+#define D_QUERY_DONE "Lekérés kész. MQTT szolgáltatás aktív"
+#define D_MQTT_SERVICE_FOUND "élő MQTT szolgáltatás a(z)"
+#define D_FOUND_AT "a(z)"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog hoszt nem található"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Flash-re mentve a(z)"
+#define D_LOADED_FROM_FLASH_AT "Flash-ről betöltve a(z)"
+#define D_USE_DEFAULTS "Alapértelmezett beáll. használata"
+#define D_ERASED_SECTOR "Szektor törlése"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "A Tasmota használatához engedélyezd a Javascriptet!"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMÁLIS firmware
frissítsd!"
+#define D_WEBSERVER_ACTIVE_ON "Webszerver aktív:"
+#define D_WITH_IP_ADDRESS "IP cím:"
+#define D_WEBSERVER_STOPPED "Webszerver leállítva"
+#define D_FILE_NOT_FOUND "Fájl nem található"
+#define D_REDIRECTED "Átírányítás captive portálra"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "WifiManager AccessPoint(AP) és Station(ST) beállítása"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager AccessPoint(AP) beállítása"
+#define D_TRYING_TO_CONNECT "Csatlakozás a hálózatra..."
+
+#define D_RESTART_IN "Újraindítás..."
+#define D_SECONDS "másodperc"
+#define D_DEVICE_WILL_RESTART "Az eszköz hamarosan újraindul..."
+#define D_BUTTON_TOGGLE "Megfordítás"
+#define D_CONFIGURATION "Beállítások"
+#define D_INFORMATION "Információ"
+#define D_FIRMWARE_UPGRADE "Firmware frissítés"
+#define D_CONSOLE "Konzol"
+#define D_CONFIRM_RESTART "Biztosan újraindítsam a modult?"
+
+#define D_CONFIGURE_MODULE "Eszközbeállítások"
+#define D_CONFIGURE_WIFI "WiFi konfiguráció"
+#define D_CONFIGURE_MQTT "MQTT konfiguráció"
+#define D_CONFIGURE_DOMOTICZ "Domoticz konfiguráció"
+#define D_CONFIGURE_LOGGING "Naplózás beállításai"
+#define D_CONFIGURE_OTHER "Egyéb beállítások"
+#define D_CONFIRM_RESET_CONFIGURATION "Biztosan töröljem a beállításokat?"
+#define D_RESET_CONFIGURATION "Beállítások törlése"
+#define D_BACKUP_CONFIGURATION "Beállítások mentése"
+#define D_RESTORE_CONFIGURATION "Beállítások visszatöltése"
+#define D_MAIN_MENU "Menü"
+
+#define D_MODULE_PARAMETERS "Modul paraméterek"
+#define D_MODULE_TYPE "Alkalmazott modul"
+#define D_PULLUP_ENABLE "Nincs felhúzó ellenállás"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Soros BE"
+#define D_SERIAL_OUT "Soros KI"
+
+#define D_WIFI_PARAMETERS "WiFi paraméterek"
+#define D_SCAN_FOR_WIFI_NETWORKS "WiFi hálózat keresése"
+#define D_SCAN_DONE "Keresés kész"
+#define D_NO_NETWORKS_FOUND "Nincs elérhető hálózat"
+#define D_REFRESH_TO_SCAN_AGAIN "Frissíts az újrakereséshez"
+#define D_DUPLICATE_ACCESSPOINT "Duplikált access point"
+#define D_SKIPPING_LOW_QUALITY "Rossz, alacsony jelminőség"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSID"
+#define D_AP1_PASSWORD "AP1 megosztott kulcs"
+#define D_AP2_SSID "AP2 SSID"
+#define D_AP2_PASSWORD "AP2 megosztott kulcs"
+
+#define D_MQTT_PARAMETERS "MQTT paraméterek"
+#define D_CLIENT "Kliens"
+#define D_FULL_TOPIC "Teljes topic"
+
+#define D_LOGGING_PARAMETERS "Naplózási paraméterek"
+#define D_SERIAL_LOG_LEVEL "Soros naplózási szint"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web naplózási szint"
+#define D_SYS_LOG_LEVEL "Syslog szint"
+#define D_MORE_DEBUG "Részletes hibakeresés"
+#define D_SYSLOG_HOST "Syslog hoszt"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Telemetria (mp.)"
+
+#define D_OTHER_PARAMETERS "Egyéb beállítások"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Web admin jelszó"
+#define D_MQTT_ENABLE "MQTT engedélyezése"
+#define D_FRIENDLY_NAME "Név"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "single device"
+#define D_MULTI_DEVICE "multi device"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Beállítások mentése"
+#define D_CONFIGURATION_SAVED "Beállítások elmentve"
+#define D_CONFIGURATION_RESET "Beállítások visszaállítása"
+
+#define D_PROGRAM_VERSION "Program verzió"
+#define D_BUILD_DATE_AND_TIME "Build ideje"
+#define D_CORE_AND_SDK_VERSION "Core/SDK verzió"
+#define D_FLASH_WRITE_COUNT "Flash írások száma"
+#define D_MAC_ADDRESS "MAC cím"
+#define D_MQTT_HOST "MQTT hoszt"
+#define D_MQTT_PORT "MQTT port"
+#define D_MQTT_CLIENT "MQTT kliens"
+#define D_MQTT_USER "MQTT felhasználó"
+#define D_MQTT_TOPIC "MQTT topic"
+#define D_MQTT_GROUP_TOPIC "MQTT csoport topic"
+#define D_MQTT_FULL_TOPIC "MQTT teljes topic"
+#define D_MDNS_DISCOVERY "mDNS láthatóság"
+#define D_MDNS_ADVERTISE "mDNS hirdetés"
+#define D_ESP_CHIP_ID "ESP chip ID"
+#define D_FLASH_CHIP_ID "Flash chip ID"
+#define D_FLASH_CHIP_SIZE "Flash mérete"
+#define D_FREE_PROGRAM_SPACE "Szabad programhely"
+
+#define D_UPGRADE_BY_WEBSERVER "Frissítés távoli szerverről"
+#define D_OTA_URL "OTA URL"
+#define D_START_UPGRADE "Frissítés"
+#define D_UPGRADE_BY_FILE_UPLOAD "Frissítés helyi fájllal"
+#define D_UPLOAD_STARTED "Feltöltés elindítva"
+#define D_UPGRADE_STARTED "Frissítés elindítva"
+#define D_UPLOAD_DONE "Feltöltés kész"
+#define D_UPLOAD_ERR_1 "Nincs fájl kijelölve"
+#define D_UPLOAD_ERR_2 "Nincs elég memória"
+#define D_UPLOAD_ERR_3 "A \"magic byte\" nem 0xE9"
+#define D_UPLOAD_ERR_4 "A program flashméret nagyobb a valós flashméretnél"
+#define D_UPLOAD_ERR_5 "Feltöltési buffer hiba"
+#define D_UPLOAD_ERR_6 "Feltöltés sikertelen. Endegélyezd a 3. szintű naplózást"
+#define D_UPLOAD_ERR_7 "Feltöltés megszakítva"
+#define D_UPLOAD_ERR_8 "Érvénytelen fájl"
+#define D_UPLOAD_ERR_9 "A fájl túl nagy"
+#define D_UPLOAD_ERR_10 "Az RF chip inicializálása sikertelen"
+#define D_UPLOAD_ERR_11 "Az RF chip törlése sikertelen"
+#define D_UPLOAD_ERR_12 "Az RF chip írása sikertelen"
+#define D_UPLOAD_ERR_13 "Az RF firmware dekódolása sikertelen"
+#define D_UPLOAD_ERROR_CODE "Feltöltési hibakód"
+
+#define D_ENTER_COMMAND "Kérem a parancsot..."
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Engedélyezz 2-es szintű webnaplózást több információért"
+#define D_NEED_USER_AND_PASSWORD "Szükséges a user=&password= paraméter"
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "TLS fingerprint hitelesítése..."
+#define D_TLS_CONNECT_FAILED_TO "TLS csatlakozás sikertelen a(z)"
+#define D_RETRY_IN "Újrapróbálás"
+#define D_VERIFIED "Fingerprint hitelesítve"
+#define D_INSECURE "Nem biztonságos kapcsolat érvénytelen fingerprint miatt"
+#define D_CONNECT_FAILED_TO "Sikertelen csatlakozás a(z)"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast kikapcsolva"
+#define D_MULTICAST_REJOINED "Multicast (újra)csatlakozás"
+#define D_MULTICAST_JOIN_FAILED "Multicast csatlakozás sikertelen"
+#define D_FAILED_TO_SEND_RESPONSE "Nem sikerült választ küldeni"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo beállítás"
+#define D_RESPONSE_SENT "Válasz elküldve"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue beállítás"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API nincs implementálva"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST argumentumok"
+#define D_3_RESPONSE_PACKETS_SENT "3 válaszcsomag elküldve"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz paraméterek"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Kapcsoló idx"
+#define D_DOMOTICZ_SENSOR_IDX "Szenzor idx"
+ #define D_DOMOTICZ_TEMP "Hőmérséklet"
+ #define D_DOMOTICZ_TEMP_HUM "Hőmérséklet, páratartalom"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Hőmérséklet, páratartalom, légnyomás"
+ #define D_DOMOTICZ_POWER_ENERGY "Teljesítmény, energia"
+ #define D_DOMOTICZ_ILLUMINANCE "Fényerő"
+ #define D_DOMOTICZ_COUNT "Szám/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Feszültség/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Áram/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Légminőség"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Frissítési időzítő"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Időzítő beállításai"
+#define D_TIMER_PARAMETERS "Időzítő paraméterei"
+#define D_TIMER_ENABLE "Időzítők engedélyezve"
+#define D_TIMER_ARM "Be"
+#define D_TIMER_TIME "Idő"
+#define D_TIMER_DAYS "Napok"
+#define D_TIMER_REPEAT "Ismétlés"
+#define D_TIMER_OUTPUT "Kimenet"
+#define D_TIMER_ACTION "Művelet"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX beállításai"
+#define D_KNX_PARAMETERS "KNX paraméterei"
+#define D_KNX_GENERAL_CONFIG "Általános"
+#define D_KNX_PHYSICAL_ADDRESS "Fizikai cím"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(egyedinek kell lennie a KNX hálózaton)"
+#define D_KNX_ENABLE "KNX engedélyezése"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Íráshoz használt csoportcímek"
+#define D_ADD "Hozzáadás"
+#define D_DELETE "Törlés"
+#define D_REPLY "Válasz"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Fogadáshoz használt csoportcímek"
+#define D_RECEIVED_FROM "Fogadva tőle:"
+#define D_KNX_COMMAND_WRITE "Írás"
+#define D_KNX_COMMAND_READ "Olvasás"
+#define D_KNX_COMMAND_OTHER "Egyáb"
+#define D_SENT_TO "küldve neki:"
+#define D_KNX_WARNING "A csoportcím ( 0 / 0 / 0 ) fenntartott és nem használható."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Mai energia"
+#define D_ENERGY_YESTERDAY "Tegnapi energia"
+#define D_ENERGY_TOTAL "Összes energia"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Szenzor foglalt"
+#define D_SENSOR_CRC_ERROR "Szenzor CRC hiba"
+#define D_SENSORS_FOUND "Szenzorok megtalálva"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Időtúllépés, várakozás"
+#define D_START_SIGNAL_LOW "startjel alacsony"
+#define D_START_SIGNAL_HIGH "startjel magas"
+#define D_PULSE "impulzus"
+#define D_CHECKSUM_FAILURE "Checksum hiba"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "A szenzor nem nyugtázta a parancsot"
+#define D_SHT1X_FOUND "SHT1X megtalálva"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Részecskék"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Gyorsulásm. X-tengely"
+#define D_AY_AXIS "Gyorsulásm. Y-tengely"
+#define D_AZ_AXIS "Gyorsulásm. Z-tengely"
+#define D_GX_AXIS "Giroszkóp X-tengely"
+#define D_GY_AXIS "Giroszkóp Y-tengely"
+#define D_GZ_AXIS "Giroszkóp Z-tengely"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Távolítsa el a súlyt"
+#define D_HX_CAL_REFERENCE "Helyezze fel a referenciasúlyt"
+#define D_HX_CAL_DONE "Kalibrálva"
+#define D_HX_CAL_FAIL "Kalibrálási hiba"
+#define D_RESET_HX711 "Skála újrabeállítása"
+#define D_CONFIGURE_HX711 "Skála konfigurálása"
+#define D_HX711_PARAMETERS "Skálaparaméterek"
+#define D_ITEM_WEIGHT "Tárgy tömege"
+#define D_REFERENCE_WEIGHT "Referenciatömeg"
+#define D_CALIBRATE "Kalibrálás"
+#define D_CALIBRATION "Kalibrálás"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Szélirány"
+#define D_TX20_WIND_SPEED "Szélsebesség"
+#define D_TX20_WIND_SPEED_AVG "Átlag szélsebesség"
+#define D_TX20_WIND_SPEED_MAX "Max. szélsebesség"
+#define D_TX20_NORTH "É"
+#define D_TX20_EAST "K"
+#define D_TX20_SOUTH "D"
+#define D_TX20_WEST "NY"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 lejátszó"
+#define D_SENSOR_IRSEND "IR adó"
+#define D_SENSOR_SWITCH "Kapcsoló" // Suffix "1"
+#define D_SENSOR_BUTTON "Gomb" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "LED" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Számláló" // Suffix "1"
+#define D_SENSOR_IRRECV "IR vevő"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Háttérfény"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "h"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "s"
+#define D_UNIT_SECTORS "szektorok"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Fázisszög"
+#define D_IMPORT_ACTIVE "Bejövő aktív"
+#define D_EXPORT_ACTIVE "Kimenő aktív"
+#define D_IMPORT_REACTIVE "Bejövő reaktív"
+#define D_EXPORT_REACTIVE "Kimenő reaktív"
+#define D_TOTAL_REACTIVE "Összes reaktív"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "fok"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_HU_HU_H_
diff --git a/tasmota/language/it-IT.h b/tasmota/language/it-IT.h
index a716988de..0585c12d8 100644
--- a/tasmota/language/it-IT.h
+++ b/tasmota/language/it-IT.h
@@ -1,703 +1,701 @@
-/*
- it-IT.h - localization for Italian - Italy for Tasmota
-
- Copyright (C) 2019 Gennaro Tortone - some mods by Antonio Fragola
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_IT_IT_H_
-#define _LANGUAGE_IT_IT_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.0.0a
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1040
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "it"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "DomLunMarMerGioVenSab"
-#define D_MONTH3LIST "GenFebMarAprMagGiuLugAgoSetOttNovDic"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Qualità dell'aria"
-#define D_AP "AP" // Access Point
-#define D_AS "come"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Numero di boot"
-#define D_BRIGHTLIGHT "Luminoso"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Pulsante"
-#define D_BY "da" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Canale"
-#define D_CO2 "CO2"
-#define D_CODE "codice" // Button code
-#define D_COLDLIGHT "Fredda"
-#define D_COMMAND "Comando"
-#define D_CONNECTED "Connesso"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Conteggio"
-#define D_COUNTER "Contatore"
-#define D_CURRENT "Corrente" // As in Voltage and Current
-#define D_DATA "Dati"
-#define D_DARKLIGHT "Scuro"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Disabilitato"
-#define D_DISTANCE "Distanza"
-#define D_DNS_SERVER "DNS Server"
-#define D_DONE "Fatto"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulazione"
-#define D_ENABLED "Abilitato"
-#define D_ERASE "Cancellare"
-#define D_ERROR "Errore"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Fallito"
-#define D_FALLBACK "Riserva"
-#define D_FALLBACK_TOPIC "Topic Riserva"
-#define D_FALSE "Falso"
-#define D_FILE "File"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Memoria Libera"
-#define D_FREQUENCY "Frequenza"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Gruppo"
-#define D_HOST "Host"
-#define D_HOSTNAME "Nome Host"
-#define D_HUMIDITY "Umidità"
-#define D_ILLUMINANCE "Illuminazione"
-#define D_IMMEDIATE "immediato" // Button immediate
-#define D_INDEX "Indice"
-#define D_INFO "Info"
-#define D_INFRARED "Infrarosso"
-#define D_INITIALIZED "Inizializzato"
-#define D_IP_ADDRESS "Indirizzo IP"
-#define D_LIGHT "Luce"
-#define D_LWT "LWT"
-#define D_MODULE "Modulo"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-pressione"
-#define D_NOISE "Rumore"
-#define D_NONE "Nessuno"
-#define D_OFF "Off"
-#define D_OFFLINE "Offline"
-#define D_OK "Ok"
-#define D_ON "On"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Password"
-#define D_PORT "Porta"
-#define D_POWER_FACTOR "Fattore di potenza"
-#define D_POWERUSAGE "Potenza"
-#define D_POWERUSAGE_ACTIVE "Potenza Attiva"
-#define D_POWERUSAGE_APPARENT "Potenza Apparente"
-#define D_POWERUSAGE_REACTIVE "Potenza Reattiva"
-#define D_PRESSURE "Pressione"
-#define D_PRESSUREATSEALEVEL "Pressione al livello del mare"
-#define D_PROGRAM_FLASH_SIZE "Dimensione Flash Programma"
-#define D_PROGRAM_SIZE "Dimensione Programma"
-#define D_PROJECT "Progetto"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Ricevuto"
-#define D_RESTART "Riavvio"
-#define D_RESTARTING "Riavviando"
-#define D_RESTART_REASON "Causa Riavvio"
-#define D_RESTORE "ripristino"
-#define D_RETAINED "salvato"
-#define D_RULE "Rule"
-#define D_SAVE "Salva"
-#define D_SENSOR "Sensore"
-#define D_SSID "SSId"
-#define D_START "Start"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Maschera Subnet"
-#define D_SUBSCRIBE_TO "Sottoscrivi a"
-#define D_UNSUBSCRIBE_FROM "Cancella da"
-#define D_SUCCESSFUL "Riuscito"
-#define D_SUNRISE "Alba"
-#define D_SUNSET "Tramonto"
-#define D_TEMPERATURE "Temperatura"
-#define D_TO "a"
-#define D_TOGGLE "Toggle"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Trasmesso"
-#define D_TRUE "Vero"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "Aggiornamento"
-#define D_UPLOAD "Invio"
-#define D_UPTIME "Uptime"
-#define D_USER "Utente"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Indice UV"
-#define D_UV_INDEX_1 "Basso"
-#define D_UV_INDEX_2 "Medio"
-#define D_UV_INDEX_3 "Alto"
-#define D_UV_INDEX_4 "Pericolo"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "Livello UV"
-#define D_UV_POWER "Intensità UV"
-#define D_VERSION "Versione"
-#define D_VOLTAGE "Tensione"
-#define D_WEIGHT "Peso"
-#define D_WARMLIGHT "Calda"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ATTENZIONE Questa versione non supporta il salvataggio delle impostazioni"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Log Seriale disabilitato"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog ri-abilitato"
-
-#define D_SET_BAUDRATE_TO "Baudrate impostato a"
-#define D_RECEIVED_TOPIC "Topic Ricevuto"
-#define D_DATA_SIZE "Dimensione Dati"
-#define D_ANALOG_INPUT "Ingresso Analogico"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Ciclo Bloccato"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig Fallito con stato"
-#define D_ACTIVE_FOR_3_MINUTES "Attivo per 3 minuti"
-#define D_FAILED_TO_START "Partenza fallita"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "Connessione ad AP"
-#define D_IN_MODE "In modalità"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connessione fallita, indirizzo IP non ricevuto"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Connessione fallita, AP non raggiungibile"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Connessione fallita, password AP non corretta"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Connessione fallita, timeout AP"
-#define D_ATTEMPTING_CONNECTION "Tentativo di connessione..."
-#define D_CHECKING_CONNECTION "Controllo connessione..."
-#define D_QUERY_DONE "Query eseguita. Servizio MQTT trovato"
-#define D_MQTT_SERVICE_FOUND "Servizio MQTT trovato su"
-#define D_FOUND_AT "trovato a"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host non trovato"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Salvato nella flash in"
-#define D_LOADED_FROM_FLASH_AT "Caricato dalla flash da"
-#define D_USE_DEFAULTS "Utilizzo valori default"
-#define D_ERASED_SECTOR "Settore cancellato"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Abilitare JavaScript per utilizzare Tasmota"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
effettuare aggiornamento"
-#define D_WEBSERVER_ACTIVE_ON "Web server attivo su"
-#define D_WITH_IP_ADDRESS "con indirizzo IP"
-#define D_WEBSERVER_STOPPED "Web server arrestato"
-#define D_FILE_NOT_FOUND "File Non Trovato"
-#define D_REDIRECTED "Redirezione al captive portal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Impostazione Wifimanager come AccessPoint e Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Impostazione Wifimanager come AccessPoint"
-#define D_TRYING_TO_CONNECT "Tentativo di connessione del dispositivo alla rete"
-
-#define D_RESTART_IN "Riavvio in"
-#define D_SECONDS "secondi"
-#define D_DEVICE_WILL_RESTART "Il dispositivo verrà riavviato tra pochi secondi"
-#define D_BUTTON_TOGGLE "On/Off"
-#define D_CONFIGURATION "Configurazione"
-#define D_INFORMATION "Informazioni"
-#define D_FIRMWARE_UPGRADE "Aggiornamento Firmware"
-#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Conferma Riavvio"
-
-#define D_CONFIGURE_MODULE "Configurazione Modulo"
-#define D_CONFIGURE_WIFI "Configurazione WiFi"
-#define D_CONFIGURE_MQTT "Configurazione MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configurazione Domoticz"
-#define D_CONFIGURE_LOGGING "Configurazione Logging"
-#define D_CONFIGURE_OTHER "Configurazione Extra"
-#define D_CONFIRM_RESET_CONFIGURATION "Conferma Reset Configurazione"
-#define D_RESET_CONFIGURATION "Reset Configurazione"
-#define D_BACKUP_CONFIGURATION "Backup Configurazione"
-#define D_RESTORE_CONFIGURATION "Ripristino Configurazione"
-#define D_MAIN_MENU "Menu Principale"
-
-#define D_MODULE_PARAMETERS "Parametri del modulo"
-#define D_MODULE_TYPE "Tipo modulo"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Seriale In"
-#define D_SERIAL_OUT "Seriale Out"
-
-#define D_WIFI_PARAMETERS "Parametri Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Scansione delle reti wifi"
-#define D_SCAN_DONE "Scansione effettuata"
-#define D_NO_NETWORKS_FOUND "Nessuna rete trovata"
-#define D_REFRESH_TO_SCAN_AGAIN "Ricarica per nuova scansione"
-#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplicato"
-#define D_SKIPPING_LOW_QUALITY "Ignorato a causa di bassa qualità"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Password"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Password"
-
-#define D_MQTT_PARAMETERS "Parametri MQTT"
-#define D_CLIENT "Client"
-#define D_FULL_TOPIC "Full Topic"
-
-#define D_LOGGING_PARAMETERS "Parametri Logging"
-#define D_SERIAL_LOG_LEVEL "Livello di log Seriale"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "livello di log Web"
-#define D_SYS_LOG_LEVEL "livello di log Sys"
-#define D_MORE_DEBUG "Debug aggiuntivo"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog porta"
-#define D_TELEMETRY_PERIOD "Periodo Telemetria"
-
-#define D_OTHER_PARAMETERS "Altri parametri"
-#define D_TEMPLATE "Modello"
-#define D_ACTIVATE "Attivare"
-#define D_WEB_ADMIN_PASSWORD "Password Amministratore Web"
-#define D_MQTT_ENABLE "Abilita MQTT"
-#define D_FRIENDLY_NAME "Nome amichevole"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "dispositivo singolo"
-#define D_MULTI_DEVICE "dispositivo multiplo"
-
-#define D_CONFIGURE_TEMPLATE "Configurare Modello"
-#define D_TEMPLATE_PARAMETERS "Parametri Modello"
-#define D_TEMPLATE_NAME "Nome"
-#define D_BASE_TYPE "Basato nel"
-#define D_TEMPLATE_FLAGS "Opzioni"
-
-#define D_SAVE_CONFIGURATION "Salva configurazione"
-#define D_CONFIGURATION_SAVED "Configurazione salvata"
-#define D_CONFIGURATION_RESET "Configurazione azzerata"
-
-#define D_PROGRAM_VERSION "Versione del programma"
-#define D_BUILD_DATE_AND_TIME "Data e ora compilazione"
-#define D_CORE_AND_SDK_VERSION "Versione Core/SDK"
-#define D_FLASH_WRITE_COUNT "Contatore scrittura Flash"
-#define D_MAC_ADDRESS "Indirizzo MAC"
-#define D_MQTT_HOST "MQTT Host"
-#define D_MQTT_PORT "MQTT Porta"
-#define D_MQTT_CLIENT "MQTT Client"
-#define D_MQTT_USER "MQTT Utente"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Dimensione Flash"
-#define D_FREE_PROGRAM_SPACE "Spazio Libero Memoria Programma"
-
-#define D_UPGRADE_BY_WEBSERVER "Aggiornamento da web server"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Avvio aggiornamento"
-#define D_UPGRADE_BY_FILE_UPLOAD "Aggiornamento tramite invio file"
-#define D_UPLOAD_STARTED "Invio iniziato"
-#define D_UPGRADE_STARTED "Aggiornamento avviato"
-#define D_UPLOAD_DONE "Invio effettuato"
-#define D_UPLOAD_ERR_1 "Nessun file selezionato"
-#define D_UPLOAD_ERR_2 "Spazio insufficiente"
-#define D_UPLOAD_ERR_3 "Magic byte non corrispondente a 0xE9"
-#define D_UPLOAD_ERR_4 "Dimensione della memoria programma maggiore della dimensione reale della flash"
-#define D_UPLOAD_ERR_5 "Errore di comparazione del buffer di invio"
-#define D_UPLOAD_ERR_6 "Invio fallito. Abilitare logging 3"
-#define D_UPLOAD_ERR_7 "Invio annullato"
-#define D_UPLOAD_ERR_8 "File non valido"
-#define D_UPLOAD_ERR_9 "File troppo grande"
-#define D_UPLOAD_ERR_10 "Inizializzazione fallita del chip RF"
-#define D_UPLOAD_ERR_11 "Cancellazione fallita del chip RF"
-#define D_UPLOAD_ERR_12 "Scrittura fallita del chip RF"
-#define D_UPLOAD_ERR_13 "Decodifica fallita del firmware RF"
-#define D_UPLOAD_ERROR_CODE "Codice errore invio"
-
-#define D_ENTER_COMMAND "Inserire comando"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Abilitare weblog 2 se è attesa una risposta"
-#define D_NEED_USER_AND_PASSWORD "Richiesto user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifica TLS fingerprint..."
-#define D_TLS_CONNECT_FAILED_TO "Connessione TLS fallita a"
-#define D_RETRY_IN "Nuovo tentativo in"
-#define D_VERIFIED "Verificato Fingerprint"
-#define D_INSECURE "Connessione insicura a causa di Fingerprint non valido"
-#define D_CONNECT_FAILED_TO "Connessione Fallita a"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast disabilitato"
-#define D_MULTICAST_REJOINED "Multicast (ri)associato"
-#define D_MULTICAST_JOIN_FAILED "Associazione Multicast fallita"
-#define D_FAILED_TO_SEND_RESPONSE "Invio risposta fallito"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo evento base"
-#define D_WEMO_EVENT_SERVICE "WeMo servizio eventi"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "Impostazione WeMo"
-#define D_RESPONSE_SENT "Risposta inviata"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Impostazione Hue"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API non implementata"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST argomenti"
-#define D_3_RESPONSE_PACKETS_SENT "3 pacchetti di risposta inviati"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Parametri Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Intervallo di aggiornamento"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configura Timer"
-#define D_TIMER_PARAMETERS "Parametri Timer"
-#define D_TIMER_ENABLE "Abilita Timer"
-#define D_TIMER_ARM "Attiva"
-#define D_TIMER_TIME "Ora"
-#define D_TIMER_DAYS "Giorni"
-#define D_TIMER_REPEAT "Ripeti"
-#define D_TIMER_OUTPUT "Output"
-#define D_TIMER_ACTION "Azione"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configura KNX"
-#define D_KNX_PARAMETERS "Parametri KNX"
-#define D_KNX_GENERAL_CONFIG "Generale"
-#define D_KNX_PHYSICAL_ADDRESS "Indirizzo Fisico"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Deve essere univoco nella rete KNX )"
-#define D_KNX_ENABLE "Abilita KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dati da Inviare al Gruppo di Indirizzi"
-#define D_ADD "Aggiungi"
-#define D_DELETE "Elimina"
-#define D_REPLY "Rispondi"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppo di Indirizzi da cui Ricevere Dati"
-#define D_RECEIVED_FROM "Ricevuto Da"
-#define D_KNX_COMMAND_WRITE "Scrivi"
-#define D_KNX_COMMAND_READ "Leggi"
-#define D_KNX_COMMAND_OTHER "Altro"
-#define D_SENT_TO "invia a"
-#define D_KNX_WARNING "L'indirizzo del gruppo ( 0 / 0 / 0 ) è riservato e non può essere usato."
-#define D_KNX_ENHANCEMENT "Miglioramento Comunicazione"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energia Oggi"
-#define D_ENERGY_YESTERDAY "Energia Ieri"
-#define D_ENERGY_TOTAL "Energia Totale"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Aperta"
-#define D_CLOSE "Chiusa"
-#define D_DOMOTICZ_SHUTTER "Serranda"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configura PCF8574"
-#define D_PCF8574_PARAMETERS "Parametri PCF8574"
-#define D_INVERT_PORTS "Porte Invertite"
-#define D_DEVICE "Dispositivo"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensore occupato"
-#define D_SENSOR_CRC_ERROR "Sensore errore CRC"
-#define D_SENSORS_FOUND "Sensori trovati"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Attesa timeout per"
-#define D_START_SIGNAL_LOW "inizio segnale basso"
-#define D_START_SIGNAL_HIGH "inizio segnale alto"
-#define D_PULSE "impulso"
-#define D_CHECKSUM_FAILURE "Checksum fallito"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensore non ha eseguito il comando ACK"
-#define D_SHT1X_FOUND "SHT1X trovato"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particelle"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. Asse-X"
-#define D_AY_AXIS "Accel. Asse-Y"
-#define D_AZ_AXIS "Accel. Asse-Z"
-#define D_GX_AXIS "Gyro Asse-X"
-#define D_GY_AXIS "Gyro Asse-Y"
-#define D_GZ_AXIS "Gyro Asse-Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Rimuovere peso"
-#define D_HX_CAL_REFERENCE "Caricare peso di riferimento"
-#define D_HX_CAL_DONE "Calibrato"
-#define D_HX_CAL_FAIL "Calibrazione fallita"
-#define D_RESET_HX711 "Reset Scala"
-#define D_CONFIGURE_HX711 "Configura Scala"
-#define D_HX711_PARAMETERS "Parametri Scala"
-#define D_ITEM_WEIGHT "Peso oggetto"
-#define D_REFERENCE_WEIGHT "Peso di riferimento"
-#define D_CALIBRATE "Calibrato"
-#define D_CALIBRATION "Calibrazione"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Direzione Vento"
-#define D_TX20_WIND_SPEED "Velocità Vento"
-#define D_TX20_WIND_SPEED_AVG "Velocità Media Vento"
-#define D_TX20_WIND_SPEED_MAX "Velocità Massima Vento"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "O"
-
-// 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 "User"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "settori"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Angolo Fase"
-#define D_IMPORT_ACTIVE "Potenza Attiva Importata"
-#define D_EXPORT_ACTIVE "Potenza Attiva Esportata"
-#define D_IMPORT_REACTIVE "Potenza Reattiva Importata"
-#define D_EXPORT_REACTIVE "Potenza Reattiva Esportata"
-#define D_TOTAL_REACTIVE "Potenza Reattiva Totale"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "°"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltaggio"
-#define D_PV1_CURRENT "PV1 Corrente"
-#define D_PV1_POWER "PV1 Eergia"
-#define D_PV2_VOLTAGE "PV2 Voltaggio"
-#define D_PV2_CURRENT "PV2 Corrente"
-#define D_PV2_POWER "PV2 Energia"
-#define D_SOLAR_POWER "Energia Solar"
-#define D_INVERTER_POWER "Energia Inverter"
-#define D_STATUS "Stato"
-#define D_WAITING "In attesa"
-#define D_CHECKING "Controllando"
-#define D_WORKING "Lavorando"
-#define D_FAILURE "Errore"
-#define D_SOLAX_ERROR_0 "No Codice Errore"
-#define D_SOLAX_ERROR_1 "Errore Grid Persa"
-#define D_SOLAX_ERROR_2 "Errore Voltaggio Grid"
-#define D_SOLAX_ERROR_3 "Errore Frequenza Grid"
-#define D_SOLAX_ERROR_4 "Errore Voltaggio Pv"
-#define D_SOLAX_ERROR_5 "Errore Isolamento"
-#define D_SOLAX_ERROR_6 "Errore Temperatura Eccessiva"
-#define D_SOLAX_ERROR_7 "Errore Ventilatore"
-#define D_SOLAX_ERROR_8 "Altro Errore del Dispositivo"
-
-#endif // _LANGUAGE_IT_IT_H_
+/*
+ it-IT.h - localization for Italian - Italy for Tasmota
+
+ Copyright (C) 2019 Gennaro Tortone - some mods by Antonio Fragola
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_IT_IT_H_
+#define _LANGUAGE_IT_IT_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.0.0a
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1040
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "it"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "DomLunMarMerGioVenSab"
+#define D_MONTH3LIST "GenFebMarAprMagGiuLugAgoSetOttNovDic"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Qualità dell'aria"
+#define D_AP "AP" // Access Point
+#define D_AS "come"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Numero di boot"
+#define D_BRIGHTLIGHT "Luminoso"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Pulsante"
+#define D_BY "da" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Canale"
+#define D_CO2 "CO2"
+#define D_CODE "codice" // Button code
+#define D_COLDLIGHT "Fredda"
+#define D_COMMAND "Comando"
+#define D_CONNECTED "Connesso"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Conteggio"
+#define D_COUNTER "Contatore"
+#define D_CURRENT "Corrente" // As in Voltage and Current
+#define D_DATA "Dati"
+#define D_DARKLIGHT "Scuro"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Disabilitato"
+#define D_DISTANCE "Distanza"
+#define D_DNS_SERVER "DNS Server"
+#define D_DONE "Fatto"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulazione"
+#define D_ENABLED "Abilitato"
+#define D_ERASE "Cancellare"
+#define D_ERROR "Errore"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Fallito"
+#define D_FALLBACK "Riserva"
+#define D_FALLBACK_TOPIC "Topic Riserva"
+#define D_FALSE "Falso"
+#define D_FILE "File"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Memoria Libera"
+#define D_FREQUENCY "Frequenza"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Gruppo"
+#define D_HOST "Host"
+#define D_HOSTNAME "Nome Host"
+#define D_HUMIDITY "Umidità"
+#define D_ILLUMINANCE "Illuminazione"
+#define D_IMMEDIATE "immediato" // Button immediate
+#define D_INDEX "Indice"
+#define D_INFO "Info"
+#define D_INFRARED "Infrarosso"
+#define D_INITIALIZED "Inizializzato"
+#define D_IP_ADDRESS "Indirizzo IP"
+#define D_LIGHT "Luce"
+#define D_LWT "LWT"
+#define D_MODULE "Modulo"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-pressione"
+#define D_NOISE "Rumore"
+#define D_NONE "Nessuno"
+#define D_OFF "Off"
+#define D_OFFLINE "Offline"
+#define D_OK "Ok"
+#define D_ON "On"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Password"
+#define D_PORT "Porta"
+#define D_POWER_FACTOR "Fattore di potenza"
+#define D_POWERUSAGE "Potenza"
+#define D_POWERUSAGE_ACTIVE "Potenza Attiva"
+#define D_POWERUSAGE_APPARENT "Potenza Apparente"
+#define D_POWERUSAGE_REACTIVE "Potenza Reattiva"
+#define D_PRESSURE "Pressione"
+#define D_PRESSUREATSEALEVEL "Pressione al livello del mare"
+#define D_PROGRAM_FLASH_SIZE "Dimensione Flash Programma"
+#define D_PROGRAM_SIZE "Dimensione Programma"
+#define D_PROJECT "Progetto"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Ricevuto"
+#define D_RESTART "Riavvio"
+#define D_RESTARTING "Riavviando"
+#define D_RESTART_REASON "Causa Riavvio"
+#define D_RESTORE "ripristino"
+#define D_RETAINED "salvato"
+#define D_RULE "Rule"
+#define D_SAVE "Salva"
+#define D_SENSOR "Sensore"
+#define D_SSID "SSId"
+#define D_START "Start"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Maschera Subnet"
+#define D_SUBSCRIBE_TO "Sottoscrivi a"
+#define D_UNSUBSCRIBE_FROM "Cancella da"
+#define D_SUCCESSFUL "Riuscito"
+#define D_SUNRISE "Alba"
+#define D_SUNSET "Tramonto"
+#define D_TEMPERATURE "Temperatura"
+#define D_TO "a"
+#define D_TOGGLE "Toggle"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Trasmesso"
+#define D_TRUE "Vero"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "Aggiornamento"
+#define D_UPLOAD "Invio"
+#define D_UPTIME "Uptime"
+#define D_USER "Utente"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Indice UV"
+#define D_UV_INDEX_1 "Basso"
+#define D_UV_INDEX_2 "Medio"
+#define D_UV_INDEX_3 "Alto"
+#define D_UV_INDEX_4 "Pericolo"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "Livello UV"
+#define D_UV_POWER "Intensità UV"
+#define D_VERSION "Versione"
+#define D_VOLTAGE "Tensione"
+#define D_WEIGHT "Peso"
+#define D_WARMLIGHT "Calda"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ATTENZIONE Questa versione non supporta il salvataggio delle impostazioni"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Log Seriale disabilitato"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog ri-abilitato"
+
+#define D_SET_BAUDRATE_TO "Baudrate impostato a"
+#define D_RECEIVED_TOPIC "Topic Ricevuto"
+#define D_DATA_SIZE "Dimensione Dati"
+#define D_ANALOG_INPUT "Ingresso Analogico"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Ciclo Bloccato"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig Fallito con stato"
+#define D_ACTIVE_FOR_3_MINUTES "Attivo per 3 minuti"
+#define D_FAILED_TO_START "Partenza fallita"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "Connessione ad AP"
+#define D_IN_MODE "In modalità"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connessione fallita, indirizzo IP non ricevuto"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Connessione fallita, AP non raggiungibile"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Connessione fallita, password AP non corretta"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Connessione fallita, timeout AP"
+#define D_ATTEMPTING_CONNECTION "Tentativo di connessione..."
+#define D_CHECKING_CONNECTION "Controllo connessione..."
+#define D_QUERY_DONE "Query eseguita. Servizio MQTT trovato"
+#define D_MQTT_SERVICE_FOUND "Servizio MQTT trovato su"
+#define D_FOUND_AT "trovato a"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host non trovato"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Salvato nella flash in"
+#define D_LOADED_FROM_FLASH_AT "Caricato dalla flash da"
+#define D_USE_DEFAULTS "Utilizzo valori default"
+#define D_ERASED_SECTOR "Settore cancellato"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Abilitare JavaScript per utilizzare Tasmota"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
effettuare aggiornamento"
+#define D_WEBSERVER_ACTIVE_ON "Web server attivo su"
+#define D_WITH_IP_ADDRESS "con indirizzo IP"
+#define D_WEBSERVER_STOPPED "Web server arrestato"
+#define D_FILE_NOT_FOUND "File Non Trovato"
+#define D_REDIRECTED "Redirezione al captive portal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Impostazione Wifimanager come AccessPoint e Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Impostazione Wifimanager come AccessPoint"
+#define D_TRYING_TO_CONNECT "Tentativo di connessione del dispositivo alla rete"
+
+#define D_RESTART_IN "Riavvio in"
+#define D_SECONDS "secondi"
+#define D_DEVICE_WILL_RESTART "Il dispositivo verrà riavviato tra pochi secondi"
+#define D_BUTTON_TOGGLE "On/Off"
+#define D_CONFIGURATION "Configurazione"
+#define D_INFORMATION "Informazioni"
+#define D_FIRMWARE_UPGRADE "Aggiornamento Firmware"
+#define D_CONSOLE "Console"
+#define D_CONFIRM_RESTART "Conferma Riavvio"
+
+#define D_CONFIGURE_MODULE "Configurazione Modulo"
+#define D_CONFIGURE_WIFI "Configurazione WiFi"
+#define D_CONFIGURE_MQTT "Configurazione MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configurazione Domoticz"
+#define D_CONFIGURE_LOGGING "Configurazione Logging"
+#define D_CONFIGURE_OTHER "Configurazione Extra"
+#define D_CONFIRM_RESET_CONFIGURATION "Conferma Reset Configurazione"
+#define D_RESET_CONFIGURATION "Reset Configurazione"
+#define D_BACKUP_CONFIGURATION "Backup Configurazione"
+#define D_RESTORE_CONFIGURATION "Ripristino Configurazione"
+#define D_MAIN_MENU "Menu Principale"
+
+#define D_MODULE_PARAMETERS "Parametri del modulo"
+#define D_MODULE_TYPE "Tipo modulo"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Seriale In"
+#define D_SERIAL_OUT "Seriale Out"
+
+#define D_WIFI_PARAMETERS "Parametri Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Scansione delle reti wifi"
+#define D_SCAN_DONE "Scansione effettuata"
+#define D_NO_NETWORKS_FOUND "Nessuna rete trovata"
+#define D_REFRESH_TO_SCAN_AGAIN "Ricarica per nuova scansione"
+#define D_DUPLICATE_ACCESSPOINT "AccessPoint duplicato"
+#define D_SKIPPING_LOW_QUALITY "Ignorato a causa di bassa qualità"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Password"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Password"
+
+#define D_MQTT_PARAMETERS "Parametri MQTT"
+#define D_CLIENT "Client"
+#define D_FULL_TOPIC "Full Topic"
+
+#define D_LOGGING_PARAMETERS "Parametri Logging"
+#define D_SERIAL_LOG_LEVEL "Livello di log Seriale"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "livello di log Web"
+#define D_SYS_LOG_LEVEL "livello di log Sys"
+#define D_MORE_DEBUG "Debug aggiuntivo"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog porta"
+#define D_TELEMETRY_PERIOD "Periodo Telemetria"
+
+#define D_OTHER_PARAMETERS "Altri parametri"
+#define D_TEMPLATE "Modello"
+#define D_ACTIVATE "Attivare"
+#define D_WEB_ADMIN_PASSWORD "Password Amministratore Web"
+#define D_MQTT_ENABLE "Abilita MQTT"
+#define D_FRIENDLY_NAME "Nome amichevole"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "dispositivo singolo"
+#define D_MULTI_DEVICE "dispositivo multiplo"
+
+#define D_CONFIGURE_TEMPLATE "Configurare Modello"
+#define D_TEMPLATE_PARAMETERS "Parametri Modello"
+#define D_TEMPLATE_NAME "Nome"
+#define D_BASE_TYPE "Basato nel"
+#define D_TEMPLATE_FLAGS "Opzioni"
+
+#define D_SAVE_CONFIGURATION "Salva configurazione"
+#define D_CONFIGURATION_SAVED "Configurazione salvata"
+#define D_CONFIGURATION_RESET "Configurazione azzerata"
+
+#define D_PROGRAM_VERSION "Versione del programma"
+#define D_BUILD_DATE_AND_TIME "Data e ora compilazione"
+#define D_CORE_AND_SDK_VERSION "Versione Core/SDK"
+#define D_FLASH_WRITE_COUNT "Contatore scrittura Flash"
+#define D_MAC_ADDRESS "Indirizzo MAC"
+#define D_MQTT_HOST "MQTT Host"
+#define D_MQTT_PORT "MQTT Porta"
+#define D_MQTT_CLIENT "MQTT Client"
+#define D_MQTT_USER "MQTT Utente"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Dimensione Flash"
+#define D_FREE_PROGRAM_SPACE "Spazio Libero Memoria Programma"
+
+#define D_UPGRADE_BY_WEBSERVER "Aggiornamento da web server"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Avvio aggiornamento"
+#define D_UPGRADE_BY_FILE_UPLOAD "Aggiornamento tramite invio file"
+#define D_UPLOAD_STARTED "Invio iniziato"
+#define D_UPGRADE_STARTED "Aggiornamento avviato"
+#define D_UPLOAD_DONE "Invio effettuato"
+#define D_UPLOAD_ERR_1 "Nessun file selezionato"
+#define D_UPLOAD_ERR_2 "Spazio insufficiente"
+#define D_UPLOAD_ERR_3 "Magic byte non corrispondente a 0xE9"
+#define D_UPLOAD_ERR_4 "Dimensione della memoria programma maggiore della dimensione reale della flash"
+#define D_UPLOAD_ERR_5 "Errore di comparazione del buffer di invio"
+#define D_UPLOAD_ERR_6 "Invio fallito. Abilitare logging 3"
+#define D_UPLOAD_ERR_7 "Invio annullato"
+#define D_UPLOAD_ERR_8 "File non valido"
+#define D_UPLOAD_ERR_9 "File troppo grande"
+#define D_UPLOAD_ERR_10 "Inizializzazione fallita del chip RF"
+#define D_UPLOAD_ERR_11 "Cancellazione fallita del chip RF"
+#define D_UPLOAD_ERR_12 "Scrittura fallita del chip RF"
+#define D_UPLOAD_ERR_13 "Decodifica fallita del firmware RF"
+#define D_UPLOAD_ERROR_CODE "Codice errore invio"
+
+#define D_ENTER_COMMAND "Inserire comando"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Abilitare weblog 2 se è attesa una risposta"
+#define D_NEED_USER_AND_PASSWORD "Richiesto user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifica TLS fingerprint..."
+#define D_TLS_CONNECT_FAILED_TO "Connessione TLS fallita a"
+#define D_RETRY_IN "Nuovo tentativo in"
+#define D_VERIFIED "Verificato Fingerprint"
+#define D_INSECURE "Connessione insicura a causa di Fingerprint non valido"
+#define D_CONNECT_FAILED_TO "Connessione Fallita a"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast disabilitato"
+#define D_MULTICAST_REJOINED "Multicast (ri)associato"
+#define D_MULTICAST_JOIN_FAILED "Associazione Multicast fallita"
+#define D_FAILED_TO_SEND_RESPONSE "Invio risposta fallito"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo evento base"
+#define D_WEMO_EVENT_SERVICE "WeMo servizio eventi"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "Impostazione WeMo"
+#define D_RESPONSE_SENT "Risposta inviata"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Impostazione Hue"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API non implementata"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST argomenti"
+#define D_3_RESPONSE_PACKETS_SENT "3 pacchetti di risposta inviati"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Parametri Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Intervallo di aggiornamento"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configura Timer"
+#define D_TIMER_PARAMETERS "Parametri Timer"
+#define D_TIMER_ENABLE "Abilita Timer"
+#define D_TIMER_ARM "Attiva"
+#define D_TIMER_TIME "Ora"
+#define D_TIMER_DAYS "Giorni"
+#define D_TIMER_REPEAT "Ripeti"
+#define D_TIMER_OUTPUT "Output"
+#define D_TIMER_ACTION "Azione"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configura KNX"
+#define D_KNX_PARAMETERS "Parametri KNX"
+#define D_KNX_GENERAL_CONFIG "Generale"
+#define D_KNX_PHYSICAL_ADDRESS "Indirizzo Fisico"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Deve essere univoco nella rete KNX )"
+#define D_KNX_ENABLE "Abilita KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dati da Inviare al Gruppo di Indirizzi"
+#define D_ADD "Aggiungi"
+#define D_DELETE "Elimina"
+#define D_REPLY "Rispondi"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppo di Indirizzi da cui Ricevere Dati"
+#define D_RECEIVED_FROM "Ricevuto Da"
+#define D_KNX_COMMAND_WRITE "Scrivi"
+#define D_KNX_COMMAND_READ "Leggi"
+#define D_KNX_COMMAND_OTHER "Altro"
+#define D_SENT_TO "invia a"
+#define D_KNX_WARNING "L'indirizzo del gruppo ( 0 / 0 / 0 ) è riservato e non può essere usato."
+#define D_KNX_ENHANCEMENT "Miglioramento Comunicazione"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energia Oggi"
+#define D_ENERGY_YESTERDAY "Energia Ieri"
+#define D_ENERGY_TOTAL "Energia Totale"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Aperta"
+#define D_CLOSE "Chiusa"
+#define D_DOMOTICZ_SHUTTER "Serranda"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configura PCF8574"
+#define D_PCF8574_PARAMETERS "Parametri PCF8574"
+#define D_INVERT_PORTS "Porte Invertite"
+#define D_DEVICE "Dispositivo"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensore occupato"
+#define D_SENSOR_CRC_ERROR "Sensore errore CRC"
+#define D_SENSORS_FOUND "Sensori trovati"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Attesa timeout per"
+#define D_START_SIGNAL_LOW "inizio segnale basso"
+#define D_START_SIGNAL_HIGH "inizio segnale alto"
+#define D_PULSE "impulso"
+#define D_CHECKSUM_FAILURE "Checksum fallito"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensore non ha eseguito il comando ACK"
+#define D_SHT1X_FOUND "SHT1X trovato"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particelle"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. Asse-X"
+#define D_AY_AXIS "Accel. Asse-Y"
+#define D_AZ_AXIS "Accel. Asse-Z"
+#define D_GX_AXIS "Gyro Asse-X"
+#define D_GY_AXIS "Gyro Asse-Y"
+#define D_GZ_AXIS "Gyro Asse-Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Rimuovere peso"
+#define D_HX_CAL_REFERENCE "Caricare peso di riferimento"
+#define D_HX_CAL_DONE "Calibrato"
+#define D_HX_CAL_FAIL "Calibrazione fallita"
+#define D_RESET_HX711 "Reset Scala"
+#define D_CONFIGURE_HX711 "Configura Scala"
+#define D_HX711_PARAMETERS "Parametri Scala"
+#define D_ITEM_WEIGHT "Peso oggetto"
+#define D_REFERENCE_WEIGHT "Peso di riferimento"
+#define D_CALIBRATE "Calibrato"
+#define D_CALIBRATION "Calibrazione"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Direzione Vento"
+#define D_TX20_WIND_SPEED "Velocità Vento"
+#define D_TX20_WIND_SPEED_AVG "Velocità Media Vento"
+#define D_TX20_WIND_SPEED_MAX "Velocità Massima Vento"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "O"
+
+// 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 "User"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "settori"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Angolo Fase"
+#define D_IMPORT_ACTIVE "Potenza Attiva Importata"
+#define D_EXPORT_ACTIVE "Potenza Attiva Esportata"
+#define D_IMPORT_REACTIVE "Potenza Reattiva Importata"
+#define D_EXPORT_REACTIVE "Potenza Reattiva Esportata"
+#define D_TOTAL_REACTIVE "Potenza Reattiva Totale"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "°"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltaggio"
+#define D_PV1_CURRENT "PV1 Corrente"
+#define D_PV1_POWER "PV1 Eergia"
+#define D_PV2_VOLTAGE "PV2 Voltaggio"
+#define D_PV2_CURRENT "PV2 Corrente"
+#define D_PV2_POWER "PV2 Energia"
+#define D_SOLAR_POWER "Energia Solar"
+#define D_INVERTER_POWER "Energia Inverter"
+#define D_STATUS "Stato"
+#define D_WAITING "In attesa"
+#define D_CHECKING "Controllando"
+#define D_WORKING "Lavorando"
+#define D_FAILURE "Errore"
+#define D_SOLAX_ERROR_0 "No Codice Errore"
+#define D_SOLAX_ERROR_1 "Errore Grid Persa"
+#define D_SOLAX_ERROR_2 "Errore Voltaggio Grid"
+#define D_SOLAX_ERROR_3 "Errore Frequenza Grid"
+#define D_SOLAX_ERROR_4 "Errore Voltaggio Pv"
+#define D_SOLAX_ERROR_5 "Errore Isolamento"
+#define D_SOLAX_ERROR_6 "Errore Temperatura Eccessiva"
+#define D_SOLAX_ERROR_7 "Errore Ventilatore"
+#define D_SOLAX_ERROR_8 "Altro Errore del Dispositivo"
+
+#endif // _LANGUAGE_IT_IT_H_
diff --git a/tasmota/language/ko-KO.h b/tasmota/language/ko-KO.h
index 4da467267..bff508474 100644
--- a/tasmota/language/ko-KO.h
+++ b/tasmota/language/ko-KO.h
@@ -1,703 +1,701 @@
-/*
- ko-KO.h - localization for Korean - Korean for Tasmota
-
- Copyright (C) 2019 Theo Arends (translated by NyaamZ)
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_KO_KO_H_
-#define _LANGUAGE_KO_KO_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.2.1.11
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-// https://www.science.co.il/language/Locale-codes.php
-#define LANGUAGE_LCID 1042
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "ko"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "일 월 화 수 목 금 토 "
-#define D_MONTH3LIST "1월 2월 3월 4월 5월 6월 7월 8월 9월 10월11월12월"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "공기질"
-#define D_AP "AP" // Access Point
-#define D_AS "as"
-#define D_AUTO "자동"
-#define D_BLINK "깜박임"
-#define D_BLINKOFF "깜박임 끄기"
-#define D_BOOT_COUNT "부팅 횟수"
-#define D_BRIGHTLIGHT "밝게"
-#define D_BSSID "BSSId"
-#define D_BUTTON "버튼"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "섭씨"
-#define D_CHANNEL "채널"
-#define D_CO2 "이산화탄소"
-#define D_CODE "code" // Button code
-#define D_COLDLIGHT "차갑게"
-#define D_COMMAND "커맨드"
-#define D_CONNECTED "연결됨"
-#define D_COUNT "횟수"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNTER "Counter"
-#define D_CURRENT "전류" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "어둡게"
-#define D_DEBUG "디버그"
-#define D_DISABLED "사용안함"
-#define D_DISTANCE "거리"
-#define D_DNS_SERVER "DNS 서버"
-#define D_DONE "완료"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "에뮬레이션"
-#define D_ENABLED "사용"
-#define D_ERASE "삭제"
-#define D_ERROR "에러"
-#define D_FAHRENHEIT "화씨"
-#define D_FAILED "실패"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback Topic"
-#define D_FALSE "거짓"
-#define D_FILE "파일"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "남은 메모리"
-#define D_FREQUENCY "Frequency"
-#define D_GAS "가스"
-#define D_GATEWAY "게이트웨이"
-#define D_GROUP "그룹"
-#define D_HOST "호스트"
-#define D_HOSTNAME "호스트이름"
-#define D_HUMIDITY "습도"
-#define D_ILLUMINANCE "조도"
-#define D_IMMEDIATE "immediate" // Button immediate
-#define D_INDEX "인덱스"
-#define D_INFO "정보"
-#define D_INFRARED "적외선"
-#define D_INITIALIZED "초기화됨"
-#define D_IP_ADDRESS "IP 주소"
-#define D_LIGHT "밝게"
-#define D_LWT "LWT"
-#define D_MODULE "모듈"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-press"
-#define D_NOISE "소음"
-#define D_NONE "없음"
-#define D_OFF "꺼짐"
-#define D_OFFLINE "오프라인"
-#define D_OK "Ok"
-#define D_ON "켜짐"
-#define D_ONLINE "온라인"
-#define D_PASSWORD "비밀번호"
-#define D_PORT "포트"
-#define D_POWER_FACTOR "Power Factor"
-#define D_POWERUSAGE "전원"
-#define D_POWERUSAGE_ACTIVE "Active Power"
-#define D_POWERUSAGE_APPARENT "Apparent Power"
-#define D_POWERUSAGE_REACTIVE "Reactive Power"
-#define D_PRESSURE "기압"
-#define D_PRESSUREATSEALEVEL "해수면기압"
-#define D_PROGRAM_FLASH_SIZE "플래시 용량"
-#define D_PROGRAM_SIZE "프로그램 용량"
-#define D_PROJECT "프로젝트"
-#define D_RAIN "비"
-#define D_RECEIVED "받음"
-#define D_RESTART "재시작"
-#define D_RESTARTING "재시작 중.."
-#define D_RESTART_REASON "재시작 사유"
-#define D_RESTORE "복구"
-#define D_RETAINED "보류"
-#define D_RULE "규칙"
-#define D_SAVE "저장"
-#define D_SENSOR "센서"
-#define D_SSID "SSId"
-#define D_START "시작"
-#define D_STD_TIME "STD"
-#define D_STOP "정지"
-#define D_SUBNET_MASK "서브넷 마스크"
-#define D_SUBSCRIBE_TO "구독"
-#define D_UNSUBSCRIBE_FROM "구독 해제"
-#define D_SUCCESSFUL "성공"
-#define D_SUNRISE "일출"
-#define D_SUNSET "일몰"
-#define D_TEMPERATURE "온도"
-#define D_TO "to"
-#define D_TOGGLE "켜기/끄기"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "전체 사용량"
-#define D_TRANSMIT "전송"
-#define D_TRUE "참"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "업그레이드"
-#define D_UPLOAD "업로드"
-#define D_UPTIME "가동시간"
-#define D_USER "User"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV 색인"
-#define D_UV_INDEX_1 "낮음"
-#define D_UV_INDEX_2 "보통"
-#define D_UV_INDEX_3 "높음"
-#define D_UV_INDEX_4 "위험"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR" // Out of Range
-#define D_UV_LEVEL "UV 레벨"
-#define D_UV_POWER "UV 파워"
-#define D_VERSION "버전"
-#define D_VOLTAGE "전압"
-#define D_WEIGHT "무게"
-#define D_WARMLIGHT "따뜻하게"
-#define D_WEB_SERVER "웹 서버"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "경고: 이 버전은 영구 설정을 지원하지 않습니다"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serial log 사용 안함"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog log 다시 사용"
-
-#define D_SET_BAUDRATE_TO "Set Baudrate to"
-#define D_RECEIVED_TOPIC "Received Topic"
-#define D_DATA_SIZE "데이터 용량"
-#define D_ANALOG_INPUT "아날로그"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "WPS설정 실패"
-#define D_ACTIVE_FOR_3_MINUTES "3분동안 활성화"
-#define D_FAILED_TO_START "시작 실패"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "AP에 연결 중"
-#define D_IN_MODE "in mode"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP 주소가 수신되지 않아 연결이 실패했습니다"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "연결이 닿지 않아 AP에 연결할 수 없습니다"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "비밀번호가 틀려 AP에 연결할 수 없습니다"
-#define D_CONNECT_FAILED_AP_TIMEOUT "시간초과로 AP에 연결할 수 없습니다"
-#define D_ATTEMPTING_CONNECTION "연결 시도 중..."
-#define D_CHECKING_CONNECTION "연결 체크 중..."
-#define D_QUERY_DONE "쿼리 완료. MQTT 서비스 발견"
-#define D_MQTT_SERVICE_FOUND "MQTT 서비스 발견"
-#define D_FOUND_AT "다음을 발견"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog 호스트가 발견되지 않았습니다"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "플래시에 저장"
-#define D_LOADED_FROM_FLASH_AT "플래시에서 로드"
-#define D_USE_DEFAULTS "디폴트 사용"
-#define D_ERASED_SECTOR "삭제된 섹터"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Tasmota를 사용하려면 JavaScript를 활성화 하십시오."
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
업그레이드가 필요합니다"
-#define D_WEBSERVER_ACTIVE_ON "Web 서버 작동 중"
-#define D_WITH_IP_ADDRESS "IP 주소"
-#define D_WEBSERVER_STOPPED "Web 서버 멈춤"
-#define D_FILE_NOT_FOUND "파일을 찾을 수 없습니다"
-#define D_REDIRECTED "인증 페이지로 리디렉션"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "와이파이 매니저가 AccessPoint와 keep Station을 설정"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "와이파이 매니저가 AccessPoint를 설정"
-#define D_TRYING_TO_CONNECT "장치를 네트워크에 연결하려고 시도 중"
-
-#define D_RESTART_IN "재시작"
-#define D_SECONDS "초"
-#define D_DEVICE_WILL_RESTART "이 장치는 몇 초 후 재시작됩니다"
-#define D_BUTTON_TOGGLE "켜기/끄기"
-#define D_CONFIGURATION "설정 메뉴"
-#define D_INFORMATION "정보"
-#define D_FIRMWARE_UPGRADE "펌웨어 업그레이드"
-#define D_CONSOLE "콘솔"
-#define D_CONFIRM_RESTART "재시작"
-
-#define D_CONFIGURE_MODULE "모듈 설정"
-#define D_CONFIGURE_WIFI "WiFi 설정"
-#define D_CONFIGURE_MQTT "MQTT 설정"
-#define D_CONFIGURE_DOMOTICZ "Domoticz 설정"
-#define D_CONFIGURE_LOGGING "로그 설정"
-#define D_CONFIGURE_OTHER "기타 설정"
-#define D_CONFIRM_RESET_CONFIGURATION "설정 초기화 확인"
-#define D_RESET_CONFIGURATION "설정 초기화"
-#define D_BACKUP_CONFIGURATION "설정 백업"
-#define D_RESTORE_CONFIGURATION "설정 복구"
-#define D_MAIN_MENU "메인 메뉴"
-
-#define D_MODULE_PARAMETERS "모듈 설정"
-#define D_MODULE_TYPE "모듈 타입"
-#define D_PULLUP_ENABLE "버튼 없음/스위치 당김"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Wifi 설정"
-#define D_SCAN_FOR_WIFI_NETWORKS "Wifi 네트워크를 검색.."
-#define D_SCAN_DONE "검색 완료"
-#define D_NO_NETWORKS_FOUND "발견된 네트워크가 없습니다"
-#define D_REFRESH_TO_SCAN_AGAIN "검색 재시도"
-#define D_DUPLICATE_ACCESSPOINT "중복된 AccessPoint"
-#define D_SKIPPING_LOW_QUALITY "약한 네트워크 신호 무시"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 비밀번호"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 비밀번호"
-
-#define D_MQTT_PARAMETERS "MQTT 설정"
-#define D_CLIENT "클라이언트"
-#define D_FULL_TOPIC "Full Topic"
-
-#define D_LOGGING_PARAMETERS "로그 설정"
-#define D_SERIAL_LOG_LEVEL "Serial 로그 레벨"
-#define D_MQTT_LOG_LEVEL "Mqtt 로그 레벨"
-#define D_WEB_LOG_LEVEL "Web 로그 레벨"
-#define D_SYS_LOG_LEVEL "시스템로그 레벨"
-#define D_MORE_DEBUG "More debug"
-#define D_SYSLOG_HOST "시스템로그 호스트"
-#define D_SYSLOG_PORT "시스템로그 포트"
-#define D_TELEMETRY_PERIOD "보고 주기"
-
-#define D_OTHER_PARAMETERS "기타 설정"
-#define D_TEMPLATE "템플릿"
-#define D_ACTIVATE "활성화"
-#define D_WEB_ADMIN_PASSWORD "Web Admin 비밀번호"
-#define D_MQTT_ENABLE "MQTT 사용"
-#define D_FRIENDLY_NAME "Friendly Name"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "단일 장치"
-#define D_MULTI_DEVICE "다수 장치"
-
-#define D_CONFIGURE_TEMPLATE "템플릿 설정"
-#define D_TEMPLATE_PARAMETERS "템플릿 설정"
-#define D_TEMPLATE_NAME "이름"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "옵션"
-
-#define D_SAVE_CONFIGURATION "설정 저장"
-#define D_CONFIGURATION_SAVED "설정 저장 완료"
-#define D_CONFIGURATION_RESET "설정 초기화"
-
-#define D_PROGRAM_VERSION "프로그램 버전"
-#define D_BUILD_DATE_AND_TIME "빌드 날짜"
-#define D_CORE_AND_SDK_VERSION "Core/SDK 버전"
-#define D_FLASH_WRITE_COUNT "플래시 쓰기 횟수"
-#define D_MAC_ADDRESS "MAC 주소"
-#define D_MQTT_HOST "MQTT 호스트"
-#define D_MQTT_PORT "MQTT 포트"
-#define D_MQTT_CLIENT "MQTT 클라이언트"
-#define D_MQTT_USER "MQTT 아이디"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP 칩 Id"
-#define D_FLASH_CHIP_ID "플래시 칩 Id"
-#define D_FLASH_CHIP_SIZE "플래시 용량"
-#define D_FREE_PROGRAM_SPACE "여유 프로그램 공간"
-
-#define D_UPGRADE_BY_WEBSERVER "웹 서버에서 업그레이드"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "업그레이드 시작"
-#define D_UPGRADE_BY_FILE_UPLOAD "파일에서 업로드해 업그레이드"
-#define D_UPLOAD_STARTED "업로드 시작됨"
-#define D_UPGRADE_STARTED "업그레이드 시작됨"
-#define D_UPLOAD_DONE "업그레이드 완료"
-#define D_UPLOAD_ERR_1 "파일이 선택되지 않았습니다"
-#define D_UPLOAD_ERR_2 "용량이 충분하지 않습니다"
-#define D_UPLOAD_ERR_3 "Magic 바이트가 0xE9가 아닙니다"
-#define D_UPLOAD_ERR_4 "플래시 프로그램이 실제 플래시 용량보다 큽니다"
-#define D_UPLOAD_ERR_5 "업로드 버퍼가 일치하지 않습니다"
-#define D_UPLOAD_ERR_6 "업로드 실패. 로그 3 사용"
-#define D_UPLOAD_ERR_7 "업로드 중단"
-#define D_UPLOAD_ERR_8 "파일이 유효하지 않습니다"
-#define D_UPLOAD_ERR_9 "용량이 초과되었습니다"
-#define D_UPLOAD_ERR_10 "RF 칩 초기화 실패"
-#define D_UPLOAD_ERR_11 "RF 칩 삭제 실패"
-#define D_UPLOAD_ERR_12 "RF 칩 쓰기 실패"
-#define D_UPLOAD_ERR_13 "RF 펌웨어 decode 실패"
-#define D_UPLOAD_ERROR_CODE "업로드 에러 코드"
-
-#define D_ENTER_COMMAND "커맨드 입력"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "응답이 있다면 Weblog 2를 사용"
-#define D_NEED_USER_AND_PASSWORD "user=<아이디>&password=<비밀번호> 필요"
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "TLS 지문 확인..."
-#define D_TLS_CONNECT_FAILED_TO "TLS 연결 실패"
-#define D_RETRY_IN "재시도 중"
-#define D_VERIFIED "지문 확인 완료"
-#define D_INSECURE "유효하지 않은 지문으로 연결이 되지 않았습니다"
-#define D_CONNECT_FAILED_TO "연결 실패"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast 사용 불가"
-#define D_MULTICAST_REJOINED "Multicast (다시)가입됨"
-#define D_MULTICAST_JOIN_FAILED "Multicast 가입 실패"
-#define D_FAILED_TO_SEND_RESPONSE "요청 전송 실패"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo 기본 이벤트"
-#define D_WEMO_EVENT_SERVICE "WeMo 이벤트 서비스"
-#define D_WEMO_META_SERVICE "WeMo meta 서비스"
-#define D_WEMO_SETUP "WeMo 설정"
-#define D_RESPONSE_SENT "요청 전송됨"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue 설정"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API가 포함되지 않음"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 요청 패킷이 전송됨"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz 설정"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "스위치 idx"
-#define D_DOMOTICZ_SENSOR_IDX "센서 idx"
- #define D_DOMOTICZ_TEMP "온도"
- #define D_DOMOTICZ_TEMP_HUM "온도,습도"
- #define D_DOMOTICZ_TEMP_HUM_BARO "온도,습도,기압"
- #define D_DOMOTICZ_POWER_ENERGY "전력,전력량"
- #define D_DOMOTICZ_ILLUMINANCE "조도"
- #define D_DOMOTICZ_COUNT "횟수/PM1"
- #define D_DOMOTICZ_VOLTAGE "전압/PM2.5"
- #define D_DOMOTICZ_CURRENT "전류/PM10"
- #define D_DOMOTICZ_AIRQUALITY "공기질"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "타이머 갱신"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "타이머 설정"
-#define D_TIMER_PARAMETERS "타이머 설정"
-#define D_TIMER_ENABLE "타이머 사용"
-#define D_TIMER_ARM "Arm"
-#define D_TIMER_TIME "시간"
-#define D_TIMER_DAYS "일"
-#define D_TIMER_REPEAT "반복"
-#define D_TIMER_OUTPUT "출력"
-#define D_TIMER_ACTION "행동"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX 설정"
-#define D_KNX_PARAMETERS "KNX 설정"
-#define D_KNX_GENERAL_CONFIG "일반"
-#define D_KNX_PHYSICAL_ADDRESS "물리적 주소"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( KNX 네트워크 상에서 반드시 고유한 이름이어야 합니다 )"
-#define D_KNX_ENABLE "KNX 사용"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "그룹 주소로 데이타를 보냅니다"
-#define D_ADD "추가"
-#define D_DELETE "삭제"
-#define D_REPLY "응답"
-#define D_KNX_GROUP_ADDRESS_TO_READ "받은 데이터의 그룹 주소"
-#define D_RECEIVED_FROM "다음에서 받음"
-#define D_KNX_COMMAND_WRITE "쓰기"
-#define D_KNX_COMMAND_READ "읽기"
-#define D_KNX_COMMAND_OTHER "기타"
-#define D_SENT_TO "다음으로 보내기"
-#define D_KNX_WARNING "그룹 주소 ( 0 / 0 / 0 )은 예약되어 사용할 수 없습니다"
-#define D_KNX_ENHANCEMENT "커뮤니케이션 강화"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "금일 전력 사용량"
-#define D_ENERGY_YESTERDAY "어제 전력 사용량"
-#define D_ENERGY_TOTAL "총 전력 사용량"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "열기"
-#define D_CLOSE "닫기"
-#define D_DOMOTICZ_SHUTTER "셔터"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "PCF8574 설정"
-#define D_PCF8574_PARAMETERS "PCF8574 파라미터"
-#define D_INVERT_PORTS "포트 반전"
-#define D_DEVICE "장치"
-#define D_DEVICE_INPUT "입력"
-#define D_DEVICE_OUTPUT "출력"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "센서가 사용 중"
-#define D_SENSOR_CRC_ERROR "센서 CRC 에러"
-#define D_SENSORS_FOUND "센서 발견"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "대기 시간 초과"
-#define D_START_SIGNAL_LOW "시작 신호 낮음"
-#define D_START_SIGNAL_HIGH "시작 신호 높음"
-#define D_PULSE "pulse"
-#define D_CHECKSUM_FAILURE "체크섬 실패"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "센서가 ACK 명령을 수행하지 않음"
-#define D_SHT1X_FOUND "SHT1X 발견"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "입자"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "중량 제거"
-#define D_HX_CAL_REFERENCE "참조 중량 로드"
-#define D_HX_CAL_DONE "교정됨"
-#define D_HX_CAL_FAIL "교정 실패"
-#define D_RESET_HX711 "스케일 초기화"
-#define D_CONFIGURE_HX711 "스케일 설정"
-#define D_HX711_PARAMETERS "스케일 상세"
-#define D_ITEM_WEIGHT "아이템 중량"
-#define D_REFERENCE_WEIGHT "참조 중량"
-#define D_CALIBRATE "교정"
-#define D_CALIBRATION "교정"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "풍향"
-#define D_TX20_WIND_SPEED "풍속"
-#define D_TX20_WIND_SPEED_AVG "평균 풍속"
-#define D_TX20_WIND_SPEED_MAX "최대 풍속"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "시"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "마이크로미터"
-#define D_UNIT_MICROSECOND "마이크로초"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "밀리초"
-#define D_UNIT_MINUTE "분"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "초"
-#define D_UNIT_SECTORS "섹터"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_KO_KO_H_
+/*
+ ko-KO.h - localization for Korean - Korean for Tasmota
+
+ Copyright (C) 2019 Theo Arends (translated by NyaamZ)
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_KO_KO_H_
+#define _LANGUAGE_KO_KO_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.2.1.11
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+// https://www.science.co.il/language/Locale-codes.php
+#define LANGUAGE_LCID 1042
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "ko"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "일 월 화 수 목 금 토 "
+#define D_MONTH3LIST "1월 2월 3월 4월 5월 6월 7월 8월 9월 10월11월12월"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "공기질"
+#define D_AP "AP" // Access Point
+#define D_AS "as"
+#define D_AUTO "자동"
+#define D_BLINK "깜박임"
+#define D_BLINKOFF "깜박임 끄기"
+#define D_BOOT_COUNT "부팅 횟수"
+#define D_BRIGHTLIGHT "밝게"
+#define D_BSSID "BSSId"
+#define D_BUTTON "버튼"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "섭씨"
+#define D_CHANNEL "채널"
+#define D_CO2 "이산화탄소"
+#define D_CODE "code" // Button code
+#define D_COLDLIGHT "차갑게"
+#define D_COMMAND "커맨드"
+#define D_CONNECTED "연결됨"
+#define D_COUNT "횟수"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNTER "Counter"
+#define D_CURRENT "전류" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "어둡게"
+#define D_DEBUG "디버그"
+#define D_DISABLED "사용안함"
+#define D_DISTANCE "거리"
+#define D_DNS_SERVER "DNS 서버"
+#define D_DONE "완료"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "에뮬레이션"
+#define D_ENABLED "사용"
+#define D_ERASE "삭제"
+#define D_ERROR "에러"
+#define D_FAHRENHEIT "화씨"
+#define D_FAILED "실패"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback Topic"
+#define D_FALSE "거짓"
+#define D_FILE "파일"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "남은 메모리"
+#define D_FREQUENCY "Frequency"
+#define D_GAS "가스"
+#define D_GATEWAY "게이트웨이"
+#define D_GROUP "그룹"
+#define D_HOST "호스트"
+#define D_HOSTNAME "호스트이름"
+#define D_HUMIDITY "습도"
+#define D_ILLUMINANCE "조도"
+#define D_IMMEDIATE "immediate" // Button immediate
+#define D_INDEX "인덱스"
+#define D_INFO "정보"
+#define D_INFRARED "적외선"
+#define D_INITIALIZED "초기화됨"
+#define D_IP_ADDRESS "IP 주소"
+#define D_LIGHT "밝게"
+#define D_LWT "LWT"
+#define D_MODULE "모듈"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-press"
+#define D_NOISE "소음"
+#define D_NONE "없음"
+#define D_OFF "꺼짐"
+#define D_OFFLINE "오프라인"
+#define D_OK "Ok"
+#define D_ON "켜짐"
+#define D_ONLINE "온라인"
+#define D_PASSWORD "비밀번호"
+#define D_PORT "포트"
+#define D_POWER_FACTOR "Power Factor"
+#define D_POWERUSAGE "전원"
+#define D_POWERUSAGE_ACTIVE "Active Power"
+#define D_POWERUSAGE_APPARENT "Apparent Power"
+#define D_POWERUSAGE_REACTIVE "Reactive Power"
+#define D_PRESSURE "기압"
+#define D_PRESSUREATSEALEVEL "해수면기압"
+#define D_PROGRAM_FLASH_SIZE "플래시 용량"
+#define D_PROGRAM_SIZE "프로그램 용량"
+#define D_PROJECT "프로젝트"
+#define D_RAIN "비"
+#define D_RECEIVED "받음"
+#define D_RESTART "재시작"
+#define D_RESTARTING "재시작 중.."
+#define D_RESTART_REASON "재시작 사유"
+#define D_RESTORE "복구"
+#define D_RETAINED "보류"
+#define D_RULE "규칙"
+#define D_SAVE "저장"
+#define D_SENSOR "센서"
+#define D_SSID "SSId"
+#define D_START "시작"
+#define D_STD_TIME "STD"
+#define D_STOP "정지"
+#define D_SUBNET_MASK "서브넷 마스크"
+#define D_SUBSCRIBE_TO "구독"
+#define D_UNSUBSCRIBE_FROM "구독 해제"
+#define D_SUCCESSFUL "성공"
+#define D_SUNRISE "일출"
+#define D_SUNSET "일몰"
+#define D_TEMPERATURE "온도"
+#define D_TO "to"
+#define D_TOGGLE "켜기/끄기"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "전체 사용량"
+#define D_TRANSMIT "전송"
+#define D_TRUE "참"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "업그레이드"
+#define D_UPLOAD "업로드"
+#define D_UPTIME "가동시간"
+#define D_USER "User"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV 색인"
+#define D_UV_INDEX_1 "낮음"
+#define D_UV_INDEX_2 "보통"
+#define D_UV_INDEX_3 "높음"
+#define D_UV_INDEX_4 "위험"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR" // Out of Range
+#define D_UV_LEVEL "UV 레벨"
+#define D_UV_POWER "UV 파워"
+#define D_VERSION "버전"
+#define D_VOLTAGE "전압"
+#define D_WEIGHT "무게"
+#define D_WARMLIGHT "따뜻하게"
+#define D_WEB_SERVER "웹 서버"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "경고: 이 버전은 영구 설정을 지원하지 않습니다"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serial log 사용 안함"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog log 다시 사용"
+
+#define D_SET_BAUDRATE_TO "Set Baudrate to"
+#define D_RECEIVED_TOPIC "Received Topic"
+#define D_DATA_SIZE "데이터 용량"
+#define D_ANALOG_INPUT "아날로그"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "WPS설정 실패"
+#define D_ACTIVE_FOR_3_MINUTES "3분동안 활성화"
+#define D_FAILED_TO_START "시작 실패"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "AP에 연결 중"
+#define D_IN_MODE "in mode"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP 주소가 수신되지 않아 연결이 실패했습니다"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "연결이 닿지 않아 AP에 연결할 수 없습니다"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "비밀번호가 틀려 AP에 연결할 수 없습니다"
+#define D_CONNECT_FAILED_AP_TIMEOUT "시간초과로 AP에 연결할 수 없습니다"
+#define D_ATTEMPTING_CONNECTION "연결 시도 중..."
+#define D_CHECKING_CONNECTION "연결 체크 중..."
+#define D_QUERY_DONE "쿼리 완료. MQTT 서비스 발견"
+#define D_MQTT_SERVICE_FOUND "MQTT 서비스 발견"
+#define D_FOUND_AT "다음을 발견"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog 호스트가 발견되지 않았습니다"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "플래시에 저장"
+#define D_LOADED_FROM_FLASH_AT "플래시에서 로드"
+#define D_USE_DEFAULTS "디폴트 사용"
+#define D_ERASED_SECTOR "삭제된 섹터"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Tasmota를 사용하려면 JavaScript를 활성화 하십시오."
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
업그레이드가 필요합니다"
+#define D_WEBSERVER_ACTIVE_ON "Web 서버 작동 중"
+#define D_WITH_IP_ADDRESS "IP 주소"
+#define D_WEBSERVER_STOPPED "Web 서버 멈춤"
+#define D_FILE_NOT_FOUND "파일을 찾을 수 없습니다"
+#define D_REDIRECTED "인증 페이지로 리디렉션"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "와이파이 매니저가 AccessPoint와 keep Station을 설정"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "와이파이 매니저가 AccessPoint를 설정"
+#define D_TRYING_TO_CONNECT "장치를 네트워크에 연결하려고 시도 중"
+
+#define D_RESTART_IN "재시작"
+#define D_SECONDS "초"
+#define D_DEVICE_WILL_RESTART "이 장치는 몇 초 후 재시작됩니다"
+#define D_BUTTON_TOGGLE "켜기/끄기"
+#define D_CONFIGURATION "설정 메뉴"
+#define D_INFORMATION "정보"
+#define D_FIRMWARE_UPGRADE "펌웨어 업그레이드"
+#define D_CONSOLE "콘솔"
+#define D_CONFIRM_RESTART "재시작"
+
+#define D_CONFIGURE_MODULE "모듈 설정"
+#define D_CONFIGURE_WIFI "WiFi 설정"
+#define D_CONFIGURE_MQTT "MQTT 설정"
+#define D_CONFIGURE_DOMOTICZ "Domoticz 설정"
+#define D_CONFIGURE_LOGGING "로그 설정"
+#define D_CONFIGURE_OTHER "기타 설정"
+#define D_CONFIRM_RESET_CONFIGURATION "설정 초기화 확인"
+#define D_RESET_CONFIGURATION "설정 초기화"
+#define D_BACKUP_CONFIGURATION "설정 백업"
+#define D_RESTORE_CONFIGURATION "설정 복구"
+#define D_MAIN_MENU "메인 메뉴"
+
+#define D_MODULE_PARAMETERS "모듈 설정"
+#define D_MODULE_TYPE "모듈 타입"
+#define D_PULLUP_ENABLE "버튼 없음/스위치 당김"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Wifi 설정"
+#define D_SCAN_FOR_WIFI_NETWORKS "Wifi 네트워크를 검색.."
+#define D_SCAN_DONE "검색 완료"
+#define D_NO_NETWORKS_FOUND "발견된 네트워크가 없습니다"
+#define D_REFRESH_TO_SCAN_AGAIN "검색 재시도"
+#define D_DUPLICATE_ACCESSPOINT "중복된 AccessPoint"
+#define D_SKIPPING_LOW_QUALITY "약한 네트워크 신호 무시"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 비밀번호"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 비밀번호"
+
+#define D_MQTT_PARAMETERS "MQTT 설정"
+#define D_CLIENT "클라이언트"
+#define D_FULL_TOPIC "Full Topic"
+
+#define D_LOGGING_PARAMETERS "로그 설정"
+#define D_SERIAL_LOG_LEVEL "Serial 로그 레벨"
+#define D_MQTT_LOG_LEVEL "Mqtt 로그 레벨"
+#define D_WEB_LOG_LEVEL "Web 로그 레벨"
+#define D_SYS_LOG_LEVEL "시스템로그 레벨"
+#define D_MORE_DEBUG "More debug"
+#define D_SYSLOG_HOST "시스템로그 호스트"
+#define D_SYSLOG_PORT "시스템로그 포트"
+#define D_TELEMETRY_PERIOD "보고 주기"
+
+#define D_OTHER_PARAMETERS "기타 설정"
+#define D_TEMPLATE "템플릿"
+#define D_ACTIVATE "활성화"
+#define D_WEB_ADMIN_PASSWORD "Web Admin 비밀번호"
+#define D_MQTT_ENABLE "MQTT 사용"
+#define D_FRIENDLY_NAME "Friendly Name"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "단일 장치"
+#define D_MULTI_DEVICE "다수 장치"
+
+#define D_CONFIGURE_TEMPLATE "템플릿 설정"
+#define D_TEMPLATE_PARAMETERS "템플릿 설정"
+#define D_TEMPLATE_NAME "이름"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "옵션"
+
+#define D_SAVE_CONFIGURATION "설정 저장"
+#define D_CONFIGURATION_SAVED "설정 저장 완료"
+#define D_CONFIGURATION_RESET "설정 초기화"
+
+#define D_PROGRAM_VERSION "프로그램 버전"
+#define D_BUILD_DATE_AND_TIME "빌드 날짜"
+#define D_CORE_AND_SDK_VERSION "Core/SDK 버전"
+#define D_FLASH_WRITE_COUNT "플래시 쓰기 횟수"
+#define D_MAC_ADDRESS "MAC 주소"
+#define D_MQTT_HOST "MQTT 호스트"
+#define D_MQTT_PORT "MQTT 포트"
+#define D_MQTT_CLIENT "MQTT 클라이언트"
+#define D_MQTT_USER "MQTT 아이디"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Group Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topic"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP 칩 Id"
+#define D_FLASH_CHIP_ID "플래시 칩 Id"
+#define D_FLASH_CHIP_SIZE "플래시 용량"
+#define D_FREE_PROGRAM_SPACE "여유 프로그램 공간"
+
+#define D_UPGRADE_BY_WEBSERVER "웹 서버에서 업그레이드"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "업그레이드 시작"
+#define D_UPGRADE_BY_FILE_UPLOAD "파일에서 업로드해 업그레이드"
+#define D_UPLOAD_STARTED "업로드 시작됨"
+#define D_UPGRADE_STARTED "업그레이드 시작됨"
+#define D_UPLOAD_DONE "업그레이드 완료"
+#define D_UPLOAD_ERR_1 "파일이 선택되지 않았습니다"
+#define D_UPLOAD_ERR_2 "용량이 충분하지 않습니다"
+#define D_UPLOAD_ERR_3 "Magic 바이트가 0xE9가 아닙니다"
+#define D_UPLOAD_ERR_4 "플래시 프로그램이 실제 플래시 용량보다 큽니다"
+#define D_UPLOAD_ERR_5 "업로드 버퍼가 일치하지 않습니다"
+#define D_UPLOAD_ERR_6 "업로드 실패. 로그 3 사용"
+#define D_UPLOAD_ERR_7 "업로드 중단"
+#define D_UPLOAD_ERR_8 "파일이 유효하지 않습니다"
+#define D_UPLOAD_ERR_9 "용량이 초과되었습니다"
+#define D_UPLOAD_ERR_10 "RF 칩 초기화 실패"
+#define D_UPLOAD_ERR_11 "RF 칩 삭제 실패"
+#define D_UPLOAD_ERR_12 "RF 칩 쓰기 실패"
+#define D_UPLOAD_ERR_13 "RF 펌웨어 decode 실패"
+#define D_UPLOAD_ERROR_CODE "업로드 에러 코드"
+
+#define D_ENTER_COMMAND "커맨드 입력"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "응답이 있다면 Weblog 2를 사용"
+#define D_NEED_USER_AND_PASSWORD "user=<아이디>&password=<비밀번호> 필요"
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "TLS 지문 확인..."
+#define D_TLS_CONNECT_FAILED_TO "TLS 연결 실패"
+#define D_RETRY_IN "재시도 중"
+#define D_VERIFIED "지문 확인 완료"
+#define D_INSECURE "유효하지 않은 지문으로 연결이 되지 않았습니다"
+#define D_CONNECT_FAILED_TO "연결 실패"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast 사용 불가"
+#define D_MULTICAST_REJOINED "Multicast (다시)가입됨"
+#define D_MULTICAST_JOIN_FAILED "Multicast 가입 실패"
+#define D_FAILED_TO_SEND_RESPONSE "요청 전송 실패"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo 기본 이벤트"
+#define D_WEMO_EVENT_SERVICE "WeMo 이벤트 서비스"
+#define D_WEMO_META_SERVICE "WeMo meta 서비스"
+#define D_WEMO_SETUP "WeMo 설정"
+#define D_RESPONSE_SENT "요청 전송됨"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue 설정"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API가 포함되지 않음"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 요청 패킷이 전송됨"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz 설정"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "스위치 idx"
+#define D_DOMOTICZ_SENSOR_IDX "센서 idx"
+ #define D_DOMOTICZ_TEMP "온도"
+ #define D_DOMOTICZ_TEMP_HUM "온도,습도"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "온도,습도,기압"
+ #define D_DOMOTICZ_POWER_ENERGY "전력,전력량"
+ #define D_DOMOTICZ_ILLUMINANCE "조도"
+ #define D_DOMOTICZ_COUNT "횟수/PM1"
+ #define D_DOMOTICZ_VOLTAGE "전압/PM2.5"
+ #define D_DOMOTICZ_CURRENT "전류/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "공기질"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "타이머 갱신"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "타이머 설정"
+#define D_TIMER_PARAMETERS "타이머 설정"
+#define D_TIMER_ENABLE "타이머 사용"
+#define D_TIMER_ARM "Arm"
+#define D_TIMER_TIME "시간"
+#define D_TIMER_DAYS "일"
+#define D_TIMER_REPEAT "반복"
+#define D_TIMER_OUTPUT "출력"
+#define D_TIMER_ACTION "행동"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX 설정"
+#define D_KNX_PARAMETERS "KNX 설정"
+#define D_KNX_GENERAL_CONFIG "일반"
+#define D_KNX_PHYSICAL_ADDRESS "물리적 주소"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( KNX 네트워크 상에서 반드시 고유한 이름이어야 합니다 )"
+#define D_KNX_ENABLE "KNX 사용"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "그룹 주소로 데이타를 보냅니다"
+#define D_ADD "추가"
+#define D_DELETE "삭제"
+#define D_REPLY "응답"
+#define D_KNX_GROUP_ADDRESS_TO_READ "받은 데이터의 그룹 주소"
+#define D_RECEIVED_FROM "다음에서 받음"
+#define D_KNX_COMMAND_WRITE "쓰기"
+#define D_KNX_COMMAND_READ "읽기"
+#define D_KNX_COMMAND_OTHER "기타"
+#define D_SENT_TO "다음으로 보내기"
+#define D_KNX_WARNING "그룹 주소 ( 0 / 0 / 0 )은 예약되어 사용할 수 없습니다"
+#define D_KNX_ENHANCEMENT "커뮤니케이션 강화"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "금일 전력 사용량"
+#define D_ENERGY_YESTERDAY "어제 전력 사용량"
+#define D_ENERGY_TOTAL "총 전력 사용량"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "열기"
+#define D_CLOSE "닫기"
+#define D_DOMOTICZ_SHUTTER "셔터"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "PCF8574 설정"
+#define D_PCF8574_PARAMETERS "PCF8574 파라미터"
+#define D_INVERT_PORTS "포트 반전"
+#define D_DEVICE "장치"
+#define D_DEVICE_INPUT "입력"
+#define D_DEVICE_OUTPUT "출력"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "센서가 사용 중"
+#define D_SENSOR_CRC_ERROR "센서 CRC 에러"
+#define D_SENSORS_FOUND "센서 발견"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "대기 시간 초과"
+#define D_START_SIGNAL_LOW "시작 신호 낮음"
+#define D_START_SIGNAL_HIGH "시작 신호 높음"
+#define D_PULSE "pulse"
+#define D_CHECKSUM_FAILURE "체크섬 실패"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "센서가 ACK 명령을 수행하지 않음"
+#define D_SHT1X_FOUND "SHT1X 발견"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "입자"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "중량 제거"
+#define D_HX_CAL_REFERENCE "참조 중량 로드"
+#define D_HX_CAL_DONE "교정됨"
+#define D_HX_CAL_FAIL "교정 실패"
+#define D_RESET_HX711 "스케일 초기화"
+#define D_CONFIGURE_HX711 "스케일 설정"
+#define D_HX711_PARAMETERS "스케일 상세"
+#define D_ITEM_WEIGHT "아이템 중량"
+#define D_REFERENCE_WEIGHT "참조 중량"
+#define D_CALIBRATE "교정"
+#define D_CALIBRATION "교정"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "풍향"
+#define D_TX20_WIND_SPEED "풍속"
+#define D_TX20_WIND_SPEED_AVG "평균 풍속"
+#define D_TX20_WIND_SPEED_MAX "최대 풍속"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "시"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "마이크로미터"
+#define D_UNIT_MICROSECOND "마이크로초"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "밀리초"
+#define D_UNIT_MINUTE "분"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "초"
+#define D_UNIT_SECTORS "섹터"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_KO_KO_H_
diff --git a/tasmota/language/nl-NL.h b/tasmota/language/nl-NL.h
index cd1414f8f..75d841ddc 100644
--- a/tasmota/language/nl-NL.h
+++ b/tasmota/language/nl-NL.h
@@ -1,703 +1,701 @@
-/*
- nl-NL.h - localization for Dutch - Nederland for Tasmota
-
- Copyright (C) 2019 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 .
-*/
-
-#ifndef _LANGUAGE_NL_NL_H_
-#define _LANGUAGE_NL_NL_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.7.0
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1043
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "nl"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "Zo Ma Di Wo Do Vr Za "
-#define D_MONTH3LIST "JanFebMarAprMeiJunJulAugSepOktNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Lucht kwaliteit"
-#define D_AP "AP" // Access Point
-#define D_AS "als"
-#define D_AUTO "AUTO"
-#define D_BLINK "Knipper"
-#define D_BLINKOFF "KnipperUit"
-#define D_BOOT_COUNT "Herstarts"
-#define D_BRIGHTLIGHT "Fel"
-#define D_BSSID "BSSId"
-#define D_BUTTON "DrukKnop"
-#define D_BY "door" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Kanaal"
-#define D_CO2 "Koolstofdioxide"
-#define D_CODE "code" // Button code
-#define D_COLDLIGHT "Koud"
-#define D_COMMAND "Opdracht"
-#define D_CONNECTED "Verbonden"
-#define D_COUNT "Aantal"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNTER "Teller"
-#define D_CURRENT "Stroom" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Donker"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Uitgeschakeld"
-#define D_DISTANCE "Afstand"
-#define D_DNS_SERVER "DNS Server"
-#define D_DONE "Klaar"
-#define D_DST_TIME "ZT"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulatie"
-#define D_ENABLED "Geactiveerd"
-#define D_ERASE "Wissen"
-#define D_ERROR "Fout"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Mislukt"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback Topic"
-#define D_FALSE "Onwaar"
-#define D_FILE "Bestand"
-#define D_FLOW_RATE "Debiet"
-#define D_FREE_MEMORY "Vrij geheugen"
-#define D_FREQUENCY "Frequentie"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Groep"
-#define D_HOST "Host"
-#define D_HOSTNAME "Hostnaam"
-#define D_HUMIDITY "Luchtvochtigheid"
-#define D_ILLUMINANCE "Verlichtingssterkte"
-#define D_IMMEDIATE "onmiddelijk" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infrarood"
-#define D_INITIALIZED "Geinitialiseerd"
-#define D_IP_ADDRESS "IP Adres"
-#define D_LIGHT "Licht"
-#define D_LWT "LWT"
-#define D_MODULE "Module"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "meervoudig"
-#define D_NOISE "Lawaai"
-#define D_NONE "Geen"
-#define D_OFF "Uit"
-#define D_OFFLINE "Offline"
-#define D_OK "Ok"
-#define D_ON "Aan"
-#define D_ONLINE "Online"
-#define D_PASSWORD "Wachtwoord"
-#define D_PORT "Poort"
-#define D_POWER_FACTOR "Arbeidsfactor"
-#define D_POWERUSAGE "Vermogen"
-#define D_POWERUSAGE_ACTIVE "Werkelijk vermogen"
-#define D_POWERUSAGE_APPARENT "Schijnbaar vermogen"
-#define D_POWERUSAGE_REACTIVE "Blindvermogen"
-#define D_PRESSURE "Luchtdruk"
-#define D_PRESSUREATSEALEVEL "ZeeLuchtdruk"
-#define D_PROGRAM_FLASH_SIZE "Programma Flash Grootte"
-#define D_PROGRAM_SIZE "Programma Grootte"
-#define D_PROJECT "Project"
-#define D_RAIN "Regen"
-#define D_RECEIVED "Ontvangen"
-#define D_RESTART "Herstart"
-#define D_RESTARTING "Herstarten"
-#define D_RESTART_REASON "Reden herstart"
-#define D_RESTORE "herstellen"
-#define D_RETAINED "retained"
-#define D_RULE "Regel"
-#define D_SAVE "Opslaan"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Start"
-#define D_STD_TIME "WT"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Subnet Masker"
-#define D_SUBSCRIBE_TO "Abonneer op"
-#define D_UNSUBSCRIBE_FROM "Uitschrijven van"
-#define D_SUCCESSFUL "Gelukt"
-#define D_SUNRISE "Zonsopgang"
-#define D_SUNSET "Zonsondergang"
-#define D_TEMPERATURE "Temperatuur"
-#define D_TO "naar"
-#define D_TOGGLE "Toggle" // Wissel, Tuimel
-#define D_TOPIC "Topic" // Onderwerp
-#define D_TOTAL_USAGE "Totaal verbruik"
-#define D_TRANSMIT "Verzend"
-#define D_TRUE "Waar"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "opwaarderen"
-#define D_UPLOAD "Verzenden"
-#define D_UPTIME "Bedrijfstijd"
-#define D_USER "Gebruiker"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV-index"
-#define D_UV_INDEX_1 "Laag"
-#define D_UV_INDEX_2 "Gemiddeld"
-#define D_UV_INDEX_3 "Hoog"
-#define D_UV_INDEX_4 "Intens"
-#define D_UV_INDEX_5 "Gevaarlijk"
-#define D_UV_INDEX_6 "Schadelijk"
-#define D_UV_INDEX_7 "Uitzonderlijk"
-#define D_UV_LEVEL "UV niveau"
-#define D_UV_POWER "UV intensiteit"
-#define D_VERSION "Versie"
-#define D_VOLTAGE "Spanning"
-#define D_WEIGHT "Gewicht"
-#define D_WARMLIGHT "Warm"
-#define D_WEB_SERVER "Webserver"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "WAARSCHUWING Deze versie bewaart geen instellingen"
-#define D_LEVEL_10 "niveau 1-0"
-#define D_LEVEL_01 "niveau 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serieel logging uitgeschakeld"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog logging weer ingeschakeld"
-
-#define D_SET_BAUDRATE_TO "Zet baudrate op"
-#define D_RECEIVED_TOPIC "Ontvangen topic"
-#define D_DATA_SIZE "Data lengte"
-#define D_ANALOG_INPUT "Analoog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig mislukt met status"
-#define D_ACTIVE_FOR_3_MINUTES "3 minuten actief"
-#define D_FAILED_TO_START "mislukt"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "Verbinden met AP"
-#define D_IN_MODE "in stand"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Verbinding mislukt omdat geen IP adres werd ontvangen"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Verbinding mislukt omdat AP onbereikbaar is"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbinding mislukt door fout wachtwoord"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Verbinding mislukt door AP time-out"
-#define D_ATTEMPTING_CONNECTION "Verbinden..."
-#define D_CHECKING_CONNECTION "Controleer verbinding..."
-#define D_QUERY_DONE "Aanvraag klaar. Aantal MQTT diensten gevonden"
-#define D_MQTT_SERVICE_FOUND "MQTT dienst gevonden op"
-#define D_FOUND_AT "gevonden op"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host niet gevonden"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Opgeslagen in flash op"
-#define D_LOADED_FROM_FLASH_AT "Geladen vanuit flash op"
-#define D_USE_DEFAULTS "Gebruik standaardwaarden"
-#define D_ERASED_SECTOR "Wis sector"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Zet JavaScript aan voor Tasmota"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
opwaarderen"
-#define D_WEBSERVER_ACTIVE_ON "Webserver actief op"
-#define D_WITH_IP_ADDRESS "met IP adres"
-#define D_WEBSERVER_STOPPED "Webserver gestopt"
-#define D_FILE_NOT_FOUND "Bestand niet gevonden"
-#define D_REDIRECTED "Omleiding naar captive portal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager start AccessPoint en hou Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager start AccessPoint"
-#define D_TRYING_TO_CONNECT "Apparaat probeert te verbinden met netwerk"
-
-#define D_RESTART_IN "Herstart over"
-#define D_SECONDS "seconden"
-#define D_DEVICE_WILL_RESTART "Herstart over enkele seconden"
-#define D_BUTTON_TOGGLE "Toggle" // Wissel, Tuimel
-#define D_CONFIGURATION "Configuratie"
-#define D_INFORMATION "Informatie"
-#define D_FIRMWARE_UPGRADE "Opwaarderen"
-#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Bevestig herstart"
-
-#define D_CONFIGURE_MODULE "Configureer Module"
-#define D_CONFIGURE_WIFI "Configureer WiFi"
-#define D_CONFIGURE_MQTT "Configureer MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configureer Domoticz"
-#define D_CONFIGURE_LOGGING "Configureer Logging"
-#define D_CONFIGURE_OTHER "Configureer Overige"
-#define D_CONFIRM_RESET_CONFIGURATION "Bevestig reset configuratie"
-#define D_RESET_CONFIGURATION "Reset Configuratie"
-#define D_BACKUP_CONFIGURATION "Bewaar Configuratie"
-#define D_RESTORE_CONFIGURATION "Herstel Configuration"
-#define D_MAIN_MENU "Hoofdmenu"
-
-#define D_MODULE_PARAMETERS "Module parameters"
-#define D_MODULE_TYPE "Module soort"
-#define D_PULLUP_ENABLE "Geen schakelaar pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serieel In"
-#define D_SERIAL_OUT "Serieel Uit"
-
-#define D_WIFI_PARAMETERS "Wifi parameters"
-#define D_SCAN_FOR_WIFI_NETWORKS "Zoek wifi netwerken"
-#define D_SCAN_DONE "Scan klaar"
-#define D_NO_NETWORKS_FOUND "Geen netwerken gevonden"
-#define D_REFRESH_TO_SCAN_AGAIN "Vernieuw om opnieuw te zoeken"
-#define D_DUPLICATE_ACCESSPOINT "Dubbel AccessPoint"
-#define D_SKIPPING_LOW_QUALITY "Overslaan agv lage ontvangskwaliteit"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Wachtwoord"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Wachtwoord"
-
-#define D_MQTT_PARAMETERS "MQTT parameters"
-#define D_CLIENT "Client"
-#define D_FULL_TOPIC "Volledig Topic"
-
-#define D_LOGGING_PARAMETERS "Logging parameters"
-#define D_SERIAL_LOG_LEVEL "Serieel log niveau"
-#define D_MQTT_LOG_LEVEL "Mqtt log niveau"
-#define D_WEB_LOG_LEVEL "Web log niveau"
-#define D_SYS_LOG_LEVEL "Syslog niveau"
-#define D_MORE_DEBUG "Meer debug"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog poort"
-#define D_TELEMETRY_PERIOD "Telemetry periode"
-
-#define D_OTHER_PARAMETERS "Overige parameters"
-#define D_TEMPLATE "Sjabloon"
-#define D_ACTIVATE "Activeer"
-#define D_WEB_ADMIN_PASSWORD "Web Admin Wachtwoord"
-#define D_MQTT_ENABLE "MQTT ingeschakeld"
-#define D_FRIENDLY_NAME "Beschrijvende naam"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "een apparaat"
-#define D_MULTI_DEVICE "meer apparaten"
-
-#define D_CONFIGURE_TEMPLATE "Configureer Sjabloon"
-#define D_TEMPLATE_PARAMETERS "Sjabloon parameters"
-#define D_TEMPLATE_NAME "Naam"
-#define D_BASE_TYPE "Op basis van"
-#define D_TEMPLATE_FLAGS "Opties"
-
-#define D_SAVE_CONFIGURATION "Bewaar configuratie"
-#define D_CONFIGURATION_SAVED "Configuratie opgeslagen"
-#define D_CONFIGURATION_RESET "Configuratie ge-reset"
-
-#define D_PROGRAM_VERSION "Programma Versie"
-#define D_BUILD_DATE_AND_TIME "Compileer Datum & Tijd"
-#define D_CORE_AND_SDK_VERSION "Core/SDK Versie"
-#define D_FLASH_WRITE_COUNT "Aantal Flash opslagen"
-#define D_MAC_ADDRESS "MAC Adres"
-#define D_MQTT_HOST "MQTT Host"
-#define D_MQTT_PORT "MQTT Poort"
-#define D_MQTT_CLIENT "MQTT Client"
-#define D_MQTT_USER "MQTT Gebruiker"
-#define D_MQTT_TOPIC "MQTT Topic"
-#define D_MQTT_GROUP_TOPIC "MQTT Groep Topic"
-#define D_MQTT_FULL_TOPIC "MQTT Volledig Topic"
-#define D_MDNS_DISCOVERY "mDNS Discovery"
-#define D_MDNS_ADVERTISE "mDNS Advertise"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Flash Grootte"
-#define D_FREE_PROGRAM_SPACE "Programma ruimte over"
-
-#define D_UPGRADE_BY_WEBSERVER "Opwaarderen dmv webserver"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Start opwaarderen"
-#define D_UPGRADE_BY_FILE_UPLOAD "Opwaarderen dmv verzenden bestand"
-#define D_UPLOAD_STARTED "Verzending gestart"
-#define D_UPGRADE_STARTED "Opwaarderen gestart"
-#define D_UPLOAD_DONE "Opwaarderen klaar"
-#define D_UPLOAD_ERR_1 "Geen bestand gekozen"
-#define D_UPLOAD_ERR_2 "Onvoldoende geheugen ruimte"
-#define D_UPLOAD_ERR_3 "Magische byte is niet 0xE9"
-#define D_UPLOAD_ERR_4 "Programma flash grootte is groter dan werkelijke flash grootte"
-#define D_UPLOAD_ERR_5 "Opwaardeer buffer verschil"
-#define D_UPLOAD_ERR_6 "Opwaarderen mislukt. Schakel logging 3 in"
-#define D_UPLOAD_ERR_7 "Opwaarderen afgebroken"
-#define D_UPLOAD_ERR_8 "Ongeldig bestand"
-#define D_UPLOAD_ERR_9 "Bestand is te groot"
-#define D_UPLOAD_ERR_10 "Init RF chip mislukt"
-#define D_UPLOAD_ERR_11 "Wissen RF chip mislukt"
-#define D_UPLOAD_ERR_12 "Opwaarderen RF chip mislukt"
-#define D_UPLOAD_ERR_13 "Decoderen RF bestand mislukt"
-#define D_UPLOAD_ERROR_CODE "Opwaardeer foutcode"
-
-#define D_ENTER_COMMAND "Geef opdracht"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Schakel weblog 2 in indien antwoord verwacht"
-#define D_NEED_USER_AND_PASSWORD "Benodig user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Controleer TLS vingerafdruk..."
-#define D_TLS_CONNECT_FAILED_TO "TLS Verbinding mislukt naar"
-#define D_RETRY_IN "Opnieuw proberen over"
-#define D_VERIFIED "Gecontroleerd met vingerafdruk"
-#define D_INSECURE "Door ongeldige vingerafdruk een onveilige verbinding"
-#define D_CONNECT_FAILED_TO "Verbinding mislukt naar"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast uitgeschakeld"
-#define D_MULTICAST_REJOINED "Multicast verbonden"
-#define D_MULTICAST_JOIN_FAILED "Multicast verbinding mislukt"
-#define D_FAILED_TO_SEND_RESPONSE "Antwoord versturen mislukt"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basis gebeurtenis"
-#define D_WEMO_EVENT_SERVICE "WeMo gebeurtenis dienst"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo installatie"
-#define D_RESPONSE_SENT "Antwoord verstuurd"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue installatie"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API niet beschikbaar"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST argumenten"
-#define D_3_RESPONSE_PACKETS_SENT "3 antwoord paketten verstuurd"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Toets idx"
-#define D_DOMOTICZ_SWITCH_IDX "Schakelaar idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Spanning/PM2,5"
- #define D_DOMOTICZ_CURRENT "Stroom/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Bijwerk timer"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configureer Tijdschakelaar"
-#define D_TIMER_PARAMETERS "Tijdschakelaar parameters"
-#define D_TIMER_ENABLE "Tijdschakelaars inschakelen"
-#define D_TIMER_ARM "Actief"
-#define D_TIMER_TIME "Tijd"
-#define D_TIMER_DAYS "Dagen"
-#define D_TIMER_REPEAT "Herhaal"
-#define D_TIMER_OUTPUT "Uitgang"
-#define D_TIMER_ACTION "Actie"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configureer KNX"
-#define D_KNX_PARAMETERS "KNX Parameters"
-#define D_KNX_GENERAL_CONFIG "Algemeen"
-#define D_KNX_PHYSICAL_ADDRESS "Eigen adres"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Moet uniek zijn op het KNX netwerk)"
-#define D_KNX_ENABLE "KNX inschakelen"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Stuur gegevens naar groep adressen"
-#define D_ADD "Toevoegen"
-#define D_DELETE "Verwijder"
-#define D_REPLY "Antwoord"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Ontvang gegevens van groep adressen"
-#define D_RECEIVED_FROM "Ontvangen van"
-#define D_KNX_COMMAND_WRITE "Schrijven"
-#define D_KNX_COMMAND_READ "Lezen"
-#define D_KNX_COMMAND_OTHER "Overige"
-#define D_SENT_TO "verzend naar"
-#define D_KNX_WARNING "Groep adres (0/0/0) is gereserveerd en mag niet worden gebruikt."
-#define D_KNX_ENHANCEMENT "Verbeter verbinding"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Verbruik vandaag"
-#define D_ENERGY_YESTERDAY "Verbruik gisteren"
-#define D_ENERGY_TOTAL "Verbruik totaal"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Openen"
-#define D_CLOSE "Sluiten"
-#define D_DOMOTICZ_SHUTTER "Rolluik"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configureer PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 Parameters"
-#define D_INVERT_PORTS "Inverteer Poorten"
-#define D_DEVICE "Apparaat"
-#define D_DEVICE_INPUT "Ingang"
-#define D_DEVICE_OUTPUT "Uitgang"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor bezet"
-#define D_SENSOR_CRC_ERROR "Sensor CRC fout"
-#define D_SENSORS_FOUND "Aantal sensoren"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Te lang wachten op"
-#define D_START_SIGNAL_LOW "laag start signaal"
-#define D_START_SIGNAL_HIGH "hoog start signaal"
-#define D_PULSE "signaal"
-#define D_CHECKSUM_FAILURE "Controle mislukt"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Geen opdracht ACK van sensor"
-#define D_SHT1X_FOUND "SHT1X gevonden"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Stofdeeltjes"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Verwijder gewicht"
-#define D_HX_CAL_REFERENCE "Plaats ijkgewicht"
-#define D_HX_CAL_DONE "Ge-ijkt"
-#define D_HX_CAL_FAIL "Ijken is mislukt"
-#define D_RESET_HX711 "Nulstelling weegschaal"
-#define D_CONFIGURE_HX711 "Configureer Weegschaal"
-#define D_HX711_PARAMETERS "Weegschaal parameters"
-#define D_ITEM_WEIGHT "Gewicht van onderdeel"
-#define D_REFERENCE_WEIGHT "Ijkgewicht"
-#define D_CALIBRATE "Ijken"
-#define D_CALIBRATION "Ijken"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Windrichting"
-#define D_TX20_WIND_SPEED "Windsnelheid"
-#define D_TX20_WIND_SPEED_AVG "Windsnelheid gemiddeld"
-#define D_TX20_WIND_SPEED_MAX "Windsnelhied maximaal"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Speler"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relais" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Teller" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Zoemer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "h"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kΩ"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
-#define D_UNIT_MICROMETER "µm"
-#define D_UNIT_MICROSECOND "µs"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sectoren"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Fase hoek"
-#define D_IMPORT_ACTIVE "Import werkelijk"
-#define D_EXPORT_ACTIVE "Export werkelijk"
-#define D_IMPORT_REACTIVE "Import blind"
-#define D_EXPORT_REACTIVE "Export blind"
-#define D_TOTAL_REACTIVE "Totaal blind"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 spanning"
-#define D_PV1_CURRENT "PV1 stroom"
-#define D_PV1_POWER "PV1 vermogen"
-#define D_PV2_VOLTAGE "PV2 spanning"
-#define D_PV2_CURRENT "PV2 stroom"
-#define D_PV2_POWER "PV2 vermogen"
-#define D_SOLAR_POWER "Zon vermogen"
-#define D_INVERTER_POWER "Omvormer vermogen"
-#define D_STATUS "Status"
-#define D_WAITING "Wacht"
-#define D_CHECKING "Controle"
-#define D_WORKING "Actief"
-#define D_FAILURE "Fout"
-#define D_SOLAX_ERROR_0 "Geen"
-#define D_SOLAX_ERROR_1 "Netverbinding"
-#define D_SOLAX_ERROR_2 "Netspanning"
-#define D_SOLAX_ERROR_3 "Netfrequentie"
-#define D_SOLAX_ERROR_4 "Pv spanning"
-#define D_SOLAX_ERROR_5 "Isolatie"
-#define D_SOLAX_ERROR_6 "Overtemperatuur"
-#define D_SOLAX_ERROR_7 "Ventilator"
-#define D_SOLAX_ERROR_8 "Overige"
-
-#endif // _LANGUAGE_NL_NL_H_
+/*
+ nl-NL.h - localization for Dutch - Nederland for Tasmota
+
+ Copyright (C) 2019 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 .
+*/
+
+#ifndef _LANGUAGE_NL_NL_H_
+#define _LANGUAGE_NL_NL_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.7.0
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1043
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "nl"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "Zo Ma Di Wo Do Vr Za "
+#define D_MONTH3LIST "JanFebMarAprMeiJunJulAugSepOktNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Lucht kwaliteit"
+#define D_AP "AP" // Access Point
+#define D_AS "als"
+#define D_AUTO "AUTO"
+#define D_BLINK "Knipper"
+#define D_BLINKOFF "KnipperUit"
+#define D_BOOT_COUNT "Herstarts"
+#define D_BRIGHTLIGHT "Fel"
+#define D_BSSID "BSSId"
+#define D_BUTTON "DrukKnop"
+#define D_BY "door" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Kanaal"
+#define D_CO2 "Koolstofdioxide"
+#define D_CODE "code" // Button code
+#define D_COLDLIGHT "Koud"
+#define D_COMMAND "Opdracht"
+#define D_CONNECTED "Verbonden"
+#define D_COUNT "Aantal"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNTER "Teller"
+#define D_CURRENT "Stroom" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Donker"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Uitgeschakeld"
+#define D_DISTANCE "Afstand"
+#define D_DNS_SERVER "DNS Server"
+#define D_DONE "Klaar"
+#define D_DST_TIME "ZT"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulatie"
+#define D_ENABLED "Geactiveerd"
+#define D_ERASE "Wissen"
+#define D_ERROR "Fout"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Mislukt"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback Topic"
+#define D_FALSE "Onwaar"
+#define D_FILE "Bestand"
+#define D_FLOW_RATE "Debiet"
+#define D_FREE_MEMORY "Vrij geheugen"
+#define D_FREQUENCY "Frequentie"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Groep"
+#define D_HOST "Host"
+#define D_HOSTNAME "Hostnaam"
+#define D_HUMIDITY "Luchtvochtigheid"
+#define D_ILLUMINANCE "Verlichtingssterkte"
+#define D_IMMEDIATE "onmiddelijk" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infrarood"
+#define D_INITIALIZED "Geinitialiseerd"
+#define D_IP_ADDRESS "IP Adres"
+#define D_LIGHT "Licht"
+#define D_LWT "LWT"
+#define D_MODULE "Module"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "meervoudig"
+#define D_NOISE "Lawaai"
+#define D_NONE "Geen"
+#define D_OFF "Uit"
+#define D_OFFLINE "Offline"
+#define D_OK "Ok"
+#define D_ON "Aan"
+#define D_ONLINE "Online"
+#define D_PASSWORD "Wachtwoord"
+#define D_PORT "Poort"
+#define D_POWER_FACTOR "Arbeidsfactor"
+#define D_POWERUSAGE "Vermogen"
+#define D_POWERUSAGE_ACTIVE "Werkelijk vermogen"
+#define D_POWERUSAGE_APPARENT "Schijnbaar vermogen"
+#define D_POWERUSAGE_REACTIVE "Blindvermogen"
+#define D_PRESSURE "Luchtdruk"
+#define D_PRESSUREATSEALEVEL "ZeeLuchtdruk"
+#define D_PROGRAM_FLASH_SIZE "Programma Flash Grootte"
+#define D_PROGRAM_SIZE "Programma Grootte"
+#define D_PROJECT "Project"
+#define D_RAIN "Regen"
+#define D_RECEIVED "Ontvangen"
+#define D_RESTART "Herstart"
+#define D_RESTARTING "Herstarten"
+#define D_RESTART_REASON "Reden herstart"
+#define D_RESTORE "herstellen"
+#define D_RETAINED "retained"
+#define D_RULE "Regel"
+#define D_SAVE "Opslaan"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Start"
+#define D_STD_TIME "WT"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Subnet Masker"
+#define D_SUBSCRIBE_TO "Abonneer op"
+#define D_UNSUBSCRIBE_FROM "Uitschrijven van"
+#define D_SUCCESSFUL "Gelukt"
+#define D_SUNRISE "Zonsopgang"
+#define D_SUNSET "Zonsondergang"
+#define D_TEMPERATURE "Temperatuur"
+#define D_TO "naar"
+#define D_TOGGLE "Toggle" // Wissel, Tuimel
+#define D_TOPIC "Topic" // Onderwerp
+#define D_TOTAL_USAGE "Totaal verbruik"
+#define D_TRANSMIT "Verzend"
+#define D_TRUE "Waar"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "opwaarderen"
+#define D_UPLOAD "Verzenden"
+#define D_UPTIME "Bedrijfstijd"
+#define D_USER "Gebruiker"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV-index"
+#define D_UV_INDEX_1 "Laag"
+#define D_UV_INDEX_2 "Gemiddeld"
+#define D_UV_INDEX_3 "Hoog"
+#define D_UV_INDEX_4 "Intens"
+#define D_UV_INDEX_5 "Gevaarlijk"
+#define D_UV_INDEX_6 "Schadelijk"
+#define D_UV_INDEX_7 "Uitzonderlijk"
+#define D_UV_LEVEL "UV niveau"
+#define D_UV_POWER "UV intensiteit"
+#define D_VERSION "Versie"
+#define D_VOLTAGE "Spanning"
+#define D_WEIGHT "Gewicht"
+#define D_WARMLIGHT "Warm"
+#define D_WEB_SERVER "Webserver"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "WAARSCHUWING Deze versie bewaart geen instellingen"
+#define D_LEVEL_10 "niveau 1-0"
+#define D_LEVEL_01 "niveau 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serieel logging uitgeschakeld"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog logging weer ingeschakeld"
+
+#define D_SET_BAUDRATE_TO "Zet baudrate op"
+#define D_RECEIVED_TOPIC "Ontvangen topic"
+#define D_DATA_SIZE "Data lengte"
+#define D_ANALOG_INPUT "Analoog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig mislukt met status"
+#define D_ACTIVE_FOR_3_MINUTES "3 minuten actief"
+#define D_FAILED_TO_START "mislukt"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "Verbinden met AP"
+#define D_IN_MODE "in stand"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Verbinding mislukt omdat geen IP adres werd ontvangen"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Verbinding mislukt omdat AP onbereikbaar is"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbinding mislukt door fout wachtwoord"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Verbinding mislukt door AP time-out"
+#define D_ATTEMPTING_CONNECTION "Verbinden..."
+#define D_CHECKING_CONNECTION "Controleer verbinding..."
+#define D_QUERY_DONE "Aanvraag klaar. Aantal MQTT diensten gevonden"
+#define D_MQTT_SERVICE_FOUND "MQTT dienst gevonden op"
+#define D_FOUND_AT "gevonden op"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host niet gevonden"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Opgeslagen in flash op"
+#define D_LOADED_FROM_FLASH_AT "Geladen vanuit flash op"
+#define D_USE_DEFAULTS "Gebruik standaardwaarden"
+#define D_ERASED_SECTOR "Wis sector"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Zet JavaScript aan voor Tasmota"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
opwaarderen"
+#define D_WEBSERVER_ACTIVE_ON "Webserver actief op"
+#define D_WITH_IP_ADDRESS "met IP adres"
+#define D_WEBSERVER_STOPPED "Webserver gestopt"
+#define D_FILE_NOT_FOUND "Bestand niet gevonden"
+#define D_REDIRECTED "Omleiding naar captive portal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager start AccessPoint en hou Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager start AccessPoint"
+#define D_TRYING_TO_CONNECT "Apparaat probeert te verbinden met netwerk"
+
+#define D_RESTART_IN "Herstart over"
+#define D_SECONDS "seconden"
+#define D_DEVICE_WILL_RESTART "Herstart over enkele seconden"
+#define D_BUTTON_TOGGLE "Toggle" // Wissel, Tuimel
+#define D_CONFIGURATION "Configuratie"
+#define D_INFORMATION "Informatie"
+#define D_FIRMWARE_UPGRADE "Opwaarderen"
+#define D_CONSOLE "Console"
+#define D_CONFIRM_RESTART "Bevestig herstart"
+
+#define D_CONFIGURE_MODULE "Configureer Module"
+#define D_CONFIGURE_WIFI "Configureer WiFi"
+#define D_CONFIGURE_MQTT "Configureer MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configureer Domoticz"
+#define D_CONFIGURE_LOGGING "Configureer Logging"
+#define D_CONFIGURE_OTHER "Configureer Overige"
+#define D_CONFIRM_RESET_CONFIGURATION "Bevestig reset configuratie"
+#define D_RESET_CONFIGURATION "Reset Configuratie"
+#define D_BACKUP_CONFIGURATION "Bewaar Configuratie"
+#define D_RESTORE_CONFIGURATION "Herstel Configuration"
+#define D_MAIN_MENU "Hoofdmenu"
+
+#define D_MODULE_PARAMETERS "Module parameters"
+#define D_MODULE_TYPE "Module soort"
+#define D_PULLUP_ENABLE "Geen schakelaar pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serieel In"
+#define D_SERIAL_OUT "Serieel Uit"
+
+#define D_WIFI_PARAMETERS "Wifi parameters"
+#define D_SCAN_FOR_WIFI_NETWORKS "Zoek wifi netwerken"
+#define D_SCAN_DONE "Scan klaar"
+#define D_NO_NETWORKS_FOUND "Geen netwerken gevonden"
+#define D_REFRESH_TO_SCAN_AGAIN "Vernieuw om opnieuw te zoeken"
+#define D_DUPLICATE_ACCESSPOINT "Dubbel AccessPoint"
+#define D_SKIPPING_LOW_QUALITY "Overslaan agv lage ontvangskwaliteit"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Wachtwoord"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Wachtwoord"
+
+#define D_MQTT_PARAMETERS "MQTT parameters"
+#define D_CLIENT "Client"
+#define D_FULL_TOPIC "Volledig Topic"
+
+#define D_LOGGING_PARAMETERS "Logging parameters"
+#define D_SERIAL_LOG_LEVEL "Serieel log niveau"
+#define D_MQTT_LOG_LEVEL "Mqtt log niveau"
+#define D_WEB_LOG_LEVEL "Web log niveau"
+#define D_SYS_LOG_LEVEL "Syslog niveau"
+#define D_MORE_DEBUG "Meer debug"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog poort"
+#define D_TELEMETRY_PERIOD "Telemetry periode"
+
+#define D_OTHER_PARAMETERS "Overige parameters"
+#define D_TEMPLATE "Sjabloon"
+#define D_ACTIVATE "Activeer"
+#define D_WEB_ADMIN_PASSWORD "Web Admin Wachtwoord"
+#define D_MQTT_ENABLE "MQTT ingeschakeld"
+#define D_FRIENDLY_NAME "Beschrijvende naam"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "een apparaat"
+#define D_MULTI_DEVICE "meer apparaten"
+
+#define D_CONFIGURE_TEMPLATE "Configureer Sjabloon"
+#define D_TEMPLATE_PARAMETERS "Sjabloon parameters"
+#define D_TEMPLATE_NAME "Naam"
+#define D_BASE_TYPE "Op basis van"
+#define D_TEMPLATE_FLAGS "Opties"
+
+#define D_SAVE_CONFIGURATION "Bewaar configuratie"
+#define D_CONFIGURATION_SAVED "Configuratie opgeslagen"
+#define D_CONFIGURATION_RESET "Configuratie ge-reset"
+
+#define D_PROGRAM_VERSION "Programma Versie"
+#define D_BUILD_DATE_AND_TIME "Compileer Datum & Tijd"
+#define D_CORE_AND_SDK_VERSION "Core/SDK Versie"
+#define D_FLASH_WRITE_COUNT "Aantal Flash opslagen"
+#define D_MAC_ADDRESS "MAC Adres"
+#define D_MQTT_HOST "MQTT Host"
+#define D_MQTT_PORT "MQTT Poort"
+#define D_MQTT_CLIENT "MQTT Client"
+#define D_MQTT_USER "MQTT Gebruiker"
+#define D_MQTT_TOPIC "MQTT Topic"
+#define D_MQTT_GROUP_TOPIC "MQTT Groep Topic"
+#define D_MQTT_FULL_TOPIC "MQTT Volledig Topic"
+#define D_MDNS_DISCOVERY "mDNS Discovery"
+#define D_MDNS_ADVERTISE "mDNS Advertise"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Flash Grootte"
+#define D_FREE_PROGRAM_SPACE "Programma ruimte over"
+
+#define D_UPGRADE_BY_WEBSERVER "Opwaarderen dmv webserver"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Start opwaarderen"
+#define D_UPGRADE_BY_FILE_UPLOAD "Opwaarderen dmv verzenden bestand"
+#define D_UPLOAD_STARTED "Verzending gestart"
+#define D_UPGRADE_STARTED "Opwaarderen gestart"
+#define D_UPLOAD_DONE "Opwaarderen klaar"
+#define D_UPLOAD_ERR_1 "Geen bestand gekozen"
+#define D_UPLOAD_ERR_2 "Onvoldoende geheugen ruimte"
+#define D_UPLOAD_ERR_3 "Magische byte is niet 0xE9"
+#define D_UPLOAD_ERR_4 "Programma flash grootte is groter dan werkelijke flash grootte"
+#define D_UPLOAD_ERR_5 "Opwaardeer buffer verschil"
+#define D_UPLOAD_ERR_6 "Opwaarderen mislukt. Schakel logging 3 in"
+#define D_UPLOAD_ERR_7 "Opwaarderen afgebroken"
+#define D_UPLOAD_ERR_8 "Ongeldig bestand"
+#define D_UPLOAD_ERR_9 "Bestand is te groot"
+#define D_UPLOAD_ERR_10 "Init RF chip mislukt"
+#define D_UPLOAD_ERR_11 "Wissen RF chip mislukt"
+#define D_UPLOAD_ERR_12 "Opwaarderen RF chip mislukt"
+#define D_UPLOAD_ERR_13 "Decoderen RF bestand mislukt"
+#define D_UPLOAD_ERROR_CODE "Opwaardeer foutcode"
+
+#define D_ENTER_COMMAND "Geef opdracht"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Schakel weblog 2 in indien antwoord verwacht"
+#define D_NEED_USER_AND_PASSWORD "Benodig user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Controleer TLS vingerafdruk..."
+#define D_TLS_CONNECT_FAILED_TO "TLS Verbinding mislukt naar"
+#define D_RETRY_IN "Opnieuw proberen over"
+#define D_VERIFIED "Gecontroleerd met vingerafdruk"
+#define D_INSECURE "Door ongeldige vingerafdruk een onveilige verbinding"
+#define D_CONNECT_FAILED_TO "Verbinding mislukt naar"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast uitgeschakeld"
+#define D_MULTICAST_REJOINED "Multicast verbonden"
+#define D_MULTICAST_JOIN_FAILED "Multicast verbinding mislukt"
+#define D_FAILED_TO_SEND_RESPONSE "Antwoord versturen mislukt"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basis gebeurtenis"
+#define D_WEMO_EVENT_SERVICE "WeMo gebeurtenis dienst"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo installatie"
+#define D_RESPONSE_SENT "Antwoord verstuurd"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue installatie"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API niet beschikbaar"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST argumenten"
+#define D_3_RESPONSE_PACKETS_SENT "3 antwoord paketten verstuurd"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Toets idx"
+#define D_DOMOTICZ_SWITCH_IDX "Schakelaar idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Spanning/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Stroom/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Bijwerk timer"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configureer Tijdschakelaar"
+#define D_TIMER_PARAMETERS "Tijdschakelaar parameters"
+#define D_TIMER_ENABLE "Tijdschakelaars inschakelen"
+#define D_TIMER_ARM "Actief"
+#define D_TIMER_TIME "Tijd"
+#define D_TIMER_DAYS "Dagen"
+#define D_TIMER_REPEAT "Herhaal"
+#define D_TIMER_OUTPUT "Uitgang"
+#define D_TIMER_ACTION "Actie"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configureer KNX"
+#define D_KNX_PARAMETERS "KNX Parameters"
+#define D_KNX_GENERAL_CONFIG "Algemeen"
+#define D_KNX_PHYSICAL_ADDRESS "Eigen adres"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Moet uniek zijn op het KNX netwerk)"
+#define D_KNX_ENABLE "KNX inschakelen"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Stuur gegevens naar groep adressen"
+#define D_ADD "Toevoegen"
+#define D_DELETE "Verwijder"
+#define D_REPLY "Antwoord"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Ontvang gegevens van groep adressen"
+#define D_RECEIVED_FROM "Ontvangen van"
+#define D_KNX_COMMAND_WRITE "Schrijven"
+#define D_KNX_COMMAND_READ "Lezen"
+#define D_KNX_COMMAND_OTHER "Overige"
+#define D_SENT_TO "verzend naar"
+#define D_KNX_WARNING "Groep adres (0/0/0) is gereserveerd en mag niet worden gebruikt."
+#define D_KNX_ENHANCEMENT "Verbeter verbinding"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Verbruik vandaag"
+#define D_ENERGY_YESTERDAY "Verbruik gisteren"
+#define D_ENERGY_TOTAL "Verbruik totaal"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Openen"
+#define D_CLOSE "Sluiten"
+#define D_DOMOTICZ_SHUTTER "Rolluik"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configureer PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 Parameters"
+#define D_INVERT_PORTS "Inverteer Poorten"
+#define D_DEVICE "Apparaat"
+#define D_DEVICE_INPUT "Ingang"
+#define D_DEVICE_OUTPUT "Uitgang"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor bezet"
+#define D_SENSOR_CRC_ERROR "Sensor CRC fout"
+#define D_SENSORS_FOUND "Aantal sensoren"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Te lang wachten op"
+#define D_START_SIGNAL_LOW "laag start signaal"
+#define D_START_SIGNAL_HIGH "hoog start signaal"
+#define D_PULSE "signaal"
+#define D_CHECKSUM_FAILURE "Controle mislukt"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Geen opdracht ACK van sensor"
+#define D_SHT1X_FOUND "SHT1X gevonden"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Stofdeeltjes"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Verwijder gewicht"
+#define D_HX_CAL_REFERENCE "Plaats ijkgewicht"
+#define D_HX_CAL_DONE "Ge-ijkt"
+#define D_HX_CAL_FAIL "Ijken is mislukt"
+#define D_RESET_HX711 "Nulstelling weegschaal"
+#define D_CONFIGURE_HX711 "Configureer Weegschaal"
+#define D_HX711_PARAMETERS "Weegschaal parameters"
+#define D_ITEM_WEIGHT "Gewicht van onderdeel"
+#define D_REFERENCE_WEIGHT "Ijkgewicht"
+#define D_CALIBRATE "Ijken"
+#define D_CALIBRATION "Ijken"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Windrichting"
+#define D_TX20_WIND_SPEED "Windsnelheid"
+#define D_TX20_WIND_SPEED_AVG "Windsnelheid gemiddeld"
+#define D_TX20_WIND_SPEED_MAX "Windsnelhied maximaal"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Speler"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relais" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Teller" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Zoemer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "h"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kΩ"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
+#define D_UNIT_MICROMETER "µm"
+#define D_UNIT_MICROSECOND "µs"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sectoren"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Fase hoek"
+#define D_IMPORT_ACTIVE "Import werkelijk"
+#define D_EXPORT_ACTIVE "Export werkelijk"
+#define D_IMPORT_REACTIVE "Import blind"
+#define D_EXPORT_REACTIVE "Export blind"
+#define D_TOTAL_REACTIVE "Totaal blind"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 spanning"
+#define D_PV1_CURRENT "PV1 stroom"
+#define D_PV1_POWER "PV1 vermogen"
+#define D_PV2_VOLTAGE "PV2 spanning"
+#define D_PV2_CURRENT "PV2 stroom"
+#define D_PV2_POWER "PV2 vermogen"
+#define D_SOLAR_POWER "Zon vermogen"
+#define D_INVERTER_POWER "Omvormer vermogen"
+#define D_STATUS "Status"
+#define D_WAITING "Wacht"
+#define D_CHECKING "Controle"
+#define D_WORKING "Actief"
+#define D_FAILURE "Fout"
+#define D_SOLAX_ERROR_0 "Geen"
+#define D_SOLAX_ERROR_1 "Netverbinding"
+#define D_SOLAX_ERROR_2 "Netspanning"
+#define D_SOLAX_ERROR_3 "Netfrequentie"
+#define D_SOLAX_ERROR_4 "Pv spanning"
+#define D_SOLAX_ERROR_5 "Isolatie"
+#define D_SOLAX_ERROR_6 "Overtemperatuur"
+#define D_SOLAX_ERROR_7 "Ventilator"
+#define D_SOLAX_ERROR_8 "Overige"
+
+#endif // _LANGUAGE_NL_NL_H_
diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h
index 1b83f8697..8f5af6813 100644
--- a/tasmota/language/pl-PL.h
+++ b/tasmota/language/pl-PL.h
@@ -1,703 +1,701 @@
-/*
- pl-PL-d.h - localization for Polish with diacritics - Poland for Tasmota
-
- Copyright (C) 2019 Theo Arends (translated by roblad - Robert L., upgraded by R. Turala)
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_PL_PL_D_H_
-#define _LANGUAGE_PL_PL_D_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.12.0d
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1045
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "pl"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "NiePonWtoŚroCzwPiąSob"
-#define D_MONTH3LIST "StyLutMarKwiMajCzeLipSieWrzPaźLisGru"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Jakość powietrza"
-#define D_AP "AP" // Access Point
-#define D_AS "jak"
-#define D_AUTO "AUTO"
-#define D_BLINK "Miganie"
-#define D_BLINKOFF "Miganie - Wył."
-#define D_BOOT_COUNT "Licznik restartów"
-#define D_BRIGHTLIGHT "Jasny"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Przycisk"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bajtów"
-#define D_CELSIUS "Celsiusz"
-#define D_CHANNEL "Kanał"
-#define D_CO2 "Dwutlenek węgla"
-#define D_CODE "Kod" // Button code
-#define D_COLDLIGHT "Zimny"
-#define D_COMMAND "Komenda"
-#define D_CONNECTED "Połączony"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Licz"
-#define D_COUNTER "Licznik"
-#define D_CURRENT "Prąd" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Ciemny"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Wyłączony"
-#define D_DISTANCE "Odległość"
-#define D_DNS_SERVER "Serwer DNS"
-#define D_DONE "Wykonane"
-#define D_DST_TIME "Czas DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulacja"
-#define D_ENABLED "Załączony"
-#define D_ERASE "Wyczyść"
-#define D_ERROR "Błąd"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Błędny"
-#define D_FALLBACK "Awaryjny"
-#define D_FALLBACK_TOPIC "Temat zastępczy"
-#define D_FALSE "Fałsz"
-#define D_FILE "Plik"
-#define D_FLOW_RATE "Przepływ"
-#define D_FREE_MEMORY "Wolna pamięć"
-#define D_FREQUENCY "Częstotliwość"
-#define D_GAS "Gas"
-#define D_GATEWAY "Brama"
-#define D_GROUP "Grupa"
-#define D_HOST "Serwer"
-#define D_HOSTNAME "Nazwa serwera"
-#define D_HUMIDITY "Wilgotność"
-#define D_ILLUMINANCE "Podświetlanie"
-#define D_IMMEDIATE "Natychmiastowy" // Button immediate
-#define D_INDEX "Indeks"
-#define D_INFO "Informacja"
-#define D_INFRARED "Podczerwień"
-#define D_INITIALIZED "Zainicjowany"
-#define D_IP_ADDRESS "Adres IP"
-#define D_LIGHT "Światło"
-#define D_LWT "LWT"
-#define D_MODULE "Moduł"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "Wielokrotne naciśnięcie"
-#define D_NOISE "Szum"
-#define D_NONE "Brak"
-#define D_OFF "Wyłączony"
-#define D_OFFLINE "Nieaktywny"
-#define D_OK "Ok"
-#define D_ON "Załączony"
-#define D_ONLINE "Aktywny"
-#define D_PASSWORD "Hasło"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Cosinus fi"
-#define D_POWERUSAGE "Moc"
-#define D_POWERUSAGE_ACTIVE "Moc czynna"
-#define D_POWERUSAGE_APPARENT "Moc pozorna"
-#define D_POWERUSAGE_REACTIVE "Moc bierna"
-#define D_PRESSURE "Ciśnienie"
-#define D_PRESSUREATSEALEVEL "Ciśnienie na poziomie morza"
-#define D_PROGRAM_FLASH_SIZE "Rozmiar programu flash"
-#define D_PROGRAM_SIZE "Rozmiar programu"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Deszcz"
-#define D_RECEIVED "Otrzymany"
-#define D_RESTART "Restart"
-#define D_RESTARTING "Restartowanie"
-#define D_RESTART_REASON "Przyczyna restartu"
-#define D_RESTORE "Przywracanie"
-#define D_RETAINED "Zachowane"
-#define D_RULE "Reguła"
-#define D_SAVE "Zapisz"
-#define D_SENSOR "Czujnik"
-#define D_SSID "SSID"
-#define D_START "Start"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Maska podsieci"
-#define D_SUBSCRIBE_TO "Subskrybuj"
-#define D_UNSUBSCRIBE_FROM "Nie subskrybuj"
-#define D_SUCCESSFUL "Powodzenie"
-#define D_SUNRISE "Wschód słońca"
-#define D_SUNSET "Zachód słońca"
-#define D_TEMPERATURE "Temperatura"
-#define D_TO "do"
-#define D_TOGGLE "Przełącz"
-#define D_TOPIC "Temat"
-#define D_TOTAL_USAGE "Całkowite użycie"
-#define D_TRANSMIT "Wyślij"
-#define D_TRUE "Prawda"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "aktualizacji"
-#define D_UPLOAD "Wgraj"
-#define D_UPTIME "Czas pracy"
-#define D_USER "Użytkownik"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Index UV"
-#define D_UV_INDEX_1 "Niski"
-#define D_UV_INDEX_2 "Średni"
-#define D_UV_INDEX_3 "Wysoki"
-#define D_UV_INDEX_4 "Niebezpieczny"
-#define D_UV_INDEX_5 "Burn L1/2"
-#define D_UV_INDEX_6 "Burn L3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "Poziom UV"
-#define D_UV_POWER "Moc UV"
-#define D_VERSION "Wersja"
-#define D_VOLTAGE "Napięcie"
-#define D_WEIGHT "Waga"
-#define D_WARMLIGHT "Temperatura światła"
-#define D_WEB_SERVER "Serwer Web"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "UWAGA Ta wersja nie obsługuje zapisu ustawień"
-#define D_LEVEL_10 "poziom 1-0"
-#define D_LEVEL_01 "poziom 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Wyłączony dziennik na porcie szeregowym"
-#define D_SYSLOG_LOGGING_REENABLED "Wznowiono zapis do Syslog"
-
-#define D_SET_BAUDRATE_TO "Ustaw szybkość transmisji na"
-#define D_RECEIVED_TOPIC "Otrzymany temat"
-#define D_DATA_SIZE "Wielkość danych"
-#define D_ANALOG_INPUT "Wejście analogowe"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Pętla zablokowana"
-#define D_WPS_FAILED_WITH_STATUS "Błąd konfiguracji WPS ze statusem"
-#define D_ACTIVE_FOR_3_MINUTES "aktywny 3 minuty"
-#define D_FAILED_TO_START "nie udało się uruchomić"
-#define D_PATCH_ISSUE_2186 "Błąd poprawki 2186"
-#define D_CONNECTING_TO_AP "Łączenie z AP"
-#define D_IN_MODE "w trybie"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Połączenie nie powiodło się, ponieważ nie otrzymano adresu IP"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Połączenie nie powiodło się, AP nie osiągalny"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Połączenie nie powiodło się, nieprawidlowe hasło"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Nie udało się nawiązac połączenia, limit czasu przekroczony"
-#define D_ATTEMPTING_CONNECTION "Próba połączenia..."
-#define D_CHECKING_CONNECTION "Sprawdzanie połączenia..."
-#define D_QUERY_DONE "Zapytanie wykonane"
-#define D_MQTT_SERVICE_FOUND "Usługa MQTT została znaleziona"
-#define D_FOUND_AT "znaleziono w"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nie znaleziony"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Zapisano do pamięci flash w"
-#define D_LOADED_FROM_FLASH_AT "Wczytano z pamięci flash w"
-#define D_USE_DEFAULTS "Użyj domyślnych"
-#define D_ERASED_SECTOR "Sektor wymazany"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Aby korzystać z Tasmota, włącz obsługę JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Oprogramowanie MINIMAL
proszę uaktualnić"
-#define D_WEBSERVER_ACTIVE_ON "Aktywny serwer Web"
-#define D_WITH_IP_ADDRESS "z adresem IP"
-#define D_WEBSERVER_STOPPED "Serwer Web zatrzymany"
-#define D_FILE_NOT_FOUND "Plik nie odnaleziony"
-#define D_REDIRECTED "Przekierowano do własnego portalu"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Menedżer Wifi ustawia punkt dostępowy i zachowuje stacje"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Menedżer sieci Wi-Fi Access Point"
-#define D_TRYING_TO_CONNECT "Próbuję połączyć urzadzenie z siecią"
-
-#define D_RESTART_IN "Zrestartuj"
-#define D_SECONDS "Sekund"
-#define D_DEVICE_WILL_RESTART "Urządzenie zrestartuje sie za kilka sekund"
-#define D_BUTTON_TOGGLE "Załącz/Wyłącz"
-#define D_CONFIGURATION "Konfiguracja"
-#define D_INFORMATION "Informacje"
-#define D_FIRMWARE_UPGRADE "Aktualizacja oprogramowania"
-#define D_CONSOLE "Konsola"
-#define D_CONFIRM_RESTART "Potwierdź restart"
-
-#define D_CONFIGURE_MODULE "Konfiguracja modułu"
-#define D_CONFIGURE_WIFI "Konfiguracja WiFi"
-#define D_CONFIGURE_MQTT "Konfiguracja MQTT"
-#define D_CONFIGURE_DOMOTICZ "Konfiguracja Domoticza"
-#define D_CONFIGURE_LOGGING "Konfiguracja dziennika"
-#define D_CONFIGURE_OTHER "Inne konfiguracje"
-#define D_CONFIRM_RESET_CONFIGURATION "Potwierdź reset ustawień"
-#define D_RESET_CONFIGURATION "Reset ustawień"
-#define D_BACKUP_CONFIGURATION "Kopia ustawień"
-#define D_RESTORE_CONFIGURATION "Przywracanie ustawień"
-#define D_MAIN_MENU "Menu główne"
-
-#define D_MODULE_PARAMETERS "Parametry modułu"
-#define D_MODULE_TYPE "Typ"
-#define D_PULLUP_ENABLE "Przełącznik pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Wejście rs"
-#define D_SERIAL_OUT "Wyjście rs"
-
-#define D_WIFI_PARAMETERS "Parametry sieci WiFi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Skanuj sieci"
-#define D_SCAN_DONE "Skanowanie wykonane"
-#define D_NO_NETWORKS_FOUND "Nie znaleziono sieci"
-#define D_REFRESH_TO_SCAN_AGAIN "Odśwież aby ponownie wyszukać sieci"
-#define D_DUPLICATE_ACCESSPOINT "Duplikuj"
-#define D_SKIPPING_LOW_QUALITY "Pominięto z powodu niskiej jakości sygnału"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "Nazwa 1"
-#define D_AP1_PASSWORD "Hasło 1"
-#define D_AP2_SSID "Nazwa 2"
-#define D_AP2_PASSWORD "Hasło 2"
-
-#define D_MQTT_PARAMETERS "Parametry MQTT"
-#define D_CLIENT "Klient"
-#define D_FULL_TOPIC "Pełny temat"
-
-#define D_LOGGING_PARAMETERS "Opcje dziennika"
-#define D_SERIAL_LOG_LEVEL "Serial - poziom"
-#define D_MQTT_LOG_LEVEL "Mqtt - poziom"
-#define D_WEB_LOG_LEVEL "Web - poziom"
-#define D_SYS_LOG_LEVEL "System - poziom"
-#define D_MORE_DEBUG "Więcej informacji dziennika"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Okres telemetrii"
-
-#define D_OTHER_PARAMETERS "Inne parametry"
-#define D_TEMPLATE "Szablon"
-#define D_ACTIVATE "Aktywuj"
-#define D_WEB_ADMIN_PASSWORD "Hasło administratora"
-#define D_MQTT_ENABLE "Załącz MQTT"
-#define D_FRIENDLY_NAME "Nazwa"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Mostek Hue"
-#define D_SINGLE_DEVICE "pojedyńcze urządzenie"
-#define D_MULTI_DEVICE "multi urządzenie"
-
-#define D_CONFIGURE_TEMPLATE "Konfiguracja szablonu"
-#define D_TEMPLATE_PARAMETERS "Parametry szablonu"
-#define D_TEMPLATE_NAME "Nazwa"
-#define D_BASE_TYPE "Na bazie"
-#define D_TEMPLATE_FLAGS "Opcje"
-
-#define D_SAVE_CONFIGURATION "Zapisz ustawienia"
-#define D_CONFIGURATION_SAVED "Ustawienia zapisane"
-#define D_CONFIGURATION_RESET "Ustawienia zresetowane"
-
-#define D_PROGRAM_VERSION "Wersja oprogramowania"
-#define D_BUILD_DATE_AND_TIME "Data kompilacji"
-#define D_CORE_AND_SDK_VERSION "Wersja Core/SDK"
-#define D_FLASH_WRITE_COUNT "Liczba zapisów do pamięci"
-#define D_MAC_ADDRESS "Adres MAC"
-#define D_MQTT_HOST "Host"
-#define D_MQTT_PORT "Port"
-#define D_MQTT_CLIENT "Klient"
-#define D_MQTT_USER "Użytkownik"
-#define D_MQTT_TOPIC "Temat"
-#define D_MQTT_GROUP_TOPIC "Temat grupy"
-#define D_MQTT_FULL_TOPIC "Pełny temat"
-#define D_MDNS_DISCOVERY "Wykrywanie mDNS"
-#define D_MDNS_ADVERTISE "Rozgłaszanie mDNS"
-#define D_ESP_CHIP_ID "ID ukladu ESP"
-#define D_FLASH_CHIP_ID "ID pamięci flash"
-#define D_FLASH_CHIP_SIZE "Rozmiar pamięci flash"
-#define D_FREE_PROGRAM_SPACE "Wolna pamięć programu"
-
-#define D_UPGRADE_BY_WEBSERVER "Aktualizacja z serwera Web"
-#define D_OTA_URL "Adres serwera"
-#define D_START_UPGRADE "Aktualizuj"
-#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizacja z pliku"
-#define D_UPLOAD_STARTED "Wgrywanie rozpoczęte"
-#define D_UPGRADE_STARTED "Aktualizacja rozpoczęta"
-#define D_UPLOAD_DONE "Wgrywanie zakończone"
-#define D_UPLOAD_ERR_1 "Nie wybrano pliku"
-#define D_UPLOAD_ERR_2 "Niewystarczająca ilość miejsca"
-#define D_UPLOAD_ERR_3 "Magiczny bajt jest inny niz 0xE9"
-#define D_UPLOAD_ERR_4 "Rozmiar programu jest większy niż rzeczywisty rozmiar pamięci flash"
-#define D_UPLOAD_ERR_5 "Wgrywanie, bufor niezgodności stanu porównywanych bitow"
-#define D_UPLOAD_ERR_6 "Błąd wgrywania. Uruchomiono zapis do dziennika na poziomie 3"
-#define D_UPLOAD_ERR_7 "Wgrywanie przerwane"
-#define D_UPLOAD_ERR_8 "Błędny plik"
-#define D_UPLOAD_ERR_9 "Plik jest za duży"
-#define D_UPLOAD_ERR_10 "Błąd inicjacji układu RF"
-#define D_UPLOAD_ERR_11 "Błąd kasowania układu RF"
-#define D_UPLOAD_ERR_12 "Błąd zapisu układu RF"
-#define D_UPLOAD_ERR_13 "Błąd dekodowania oprrogramowania układu RF"
-#define D_UPLOAD_ERROR_CODE "Błąd wgrywania"
-
-#define D_ENTER_COMMAND "Wprowadź polecenie"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Włącz poziom 2 zapisu dziennika, jeśli oczekiwana jest odpowiedź"
-#define D_NEED_USER_AND_PASSWORD "Wymagany użytkownik=&hasło="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Weryfikuj odcisk TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Nieudane połączenie TLS do"
-#define D_RETRY_IN "Spróbuj ponownie"
-#define D_VERIFIED "Zweryfikowano odcisk"
-#define D_INSECURE "Nieprawidłowe połączenie z powodu błędnego odcisku TLS"
-#define D_CONNECT_FAILED_TO "Nie udało się nawiązać połączenia"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast wyłączony"
-#define D_MULTICAST_REJOINED "Multicast dołączony"
-#define D_MULTICAST_JOIN_FAILED "Podłączenie Multicast nie powiodło się"
-#define D_FAILED_TO_SEND_RESPONSE "Nie udało się wysłać odpowiedzi"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "Zdarzenie podstawowe"
-#define D_WEMO_EVENT_SERVICE "Zdarzenie serwisowe"
-#define D_WEMO_META_SERVICE "Meta dane serwisowe"
-#define D_WEMO_SETUP "Ustawienia WeMo"
-#define D_RESPONSE_SENT "Wyślij odpowiedź"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Ustawienia Hue"
-#define D_HUE_API_NOT_IMPLEMENTED "Api nie zaimplementowane"
-#define D_HUE_API "API"
-#define D_HUE_POST_ARGS "POST argument"
-#define D_3_RESPONSE_PACKETS_SENT "3 pakiety odpowiedzi wysyłane"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Parametry Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Klucz Idx"
-#define D_DOMOTICZ_SWITCH_IDX "Przełącznik Idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor Idx"
- #define D_DOMOTICZ_TEMP "Temperatura"
- #define D_DOMOTICZ_TEMP_HUM "Temperatura, Wilgotność"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temperatura, Wilgotność, Ciśnienie"
- #define D_DOMOTICZ_POWER_ENERGY "Moc, Energia"
- #define D_DOMOTICZ_ILLUMINANCE "Oświetlenie"
- #define D_DOMOTICZ_COUNT "Licznik"
- #define D_DOMOTICZ_VOLTAGE "Napięcie"
- #define D_DOMOTICZ_CURRENT "Prąd"
- #define D_DOMOTICZ_AIRQUALITY "Jakość powietrza"
- #define D_DOMOTICZ_P1_SMART_METER "Miernik P1"
-#define D_DOMOTICZ_UPDATE_TIMER "Aktualizacja zegara"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Konfiguracja harmonogramu"
-#define D_TIMER_PARAMETERS "Parametry harmonogramu"
-#define D_TIMER_ENABLE "Załącz harmonogram"
-#define D_TIMER_ARM "Załącz"
-#define D_TIMER_TIME "Czas"
-#define D_TIMER_DAYS "Dni"
-#define D_TIMER_REPEAT "Powtarzaj"
-#define D_TIMER_OUTPUT "Wyjście"
-#define D_TIMER_ACTION "Akcja"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Konfiguracja KNX"
-#define D_KNX_PARAMETERS "Parametry KNX"
-#define D_KNX_GENERAL_CONFIG "Konfiguracja ogólna"
-#define D_KNX_PHYSICAL_ADDRESS "Adres fizyczny"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Musi być unikalny w sieci KNX)"
-#define D_KNX_ENABLE "Załącz"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Adresy grupowe do zapisu"
-#define D_ADD "Dodaj"
-#define D_DELETE "Usuń"
-#define D_REPLY "Odpowiedz"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Adresy grupowe do odbioru"
-#define D_RECEIVED_FROM "Odebrane od"
-#define D_KNX_COMMAND_WRITE "Zapisz"
-#define D_KNX_COMMAND_READ "Czytaj"
-#define D_KNX_COMMAND_OTHER "Inna komenda"
-#define D_SENT_TO "Wyślij do"
-#define D_KNX_WARNING "Adres grupy (0/0/0) jest zarezerwowany i nie można go użyć."
-#define D_KNX_ENHANCEMENT "Rozszerzenia"
-#define D_KNX_TX_SLOT "Gniazdo TX"
-#define D_KNX_RX_SLOT "Gniazdo RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energia dzisiaj"
-#define D_ENERGY_YESTERDAY "Energia wczoraj"
-#define D_ENERGY_TOTAL "Energia całkowita"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Otwórz"
-#define D_CLOSE "Zamknij"
-#define D_DOMOTICZ_SHUTTER "Roleta"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Konfiguracja PCF8574"
-#define D_PCF8574_PARAMETERS "Parametry PCF8574"
-#define D_INVERT_PORTS "Porty odwrócone"
-#define D_DEVICE "Urządzenie"
-#define D_DEVICE_INPUT "Wejście"
-#define D_DEVICE_OUTPUT "Wyjście"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Czujnik zajęty"
-#define D_SENSOR_CRC_ERROR "Błąd CRC czujnika"
-#define D_SENSORS_FOUND "Znaleziono czujnik"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Trwa oczekiwanie"
-#define D_START_SIGNAL_LOW "Sygnał startowy niski"
-#define D_START_SIGNAL_HIGH "Sygnał startowy wysoki"
-#define D_PULSE "Impuls"
-#define D_CHECKSUM_FAILURE "Błędna suma kontrolna"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Czujnik nie otrzymał komendy ACK"
-#define D_SHT1X_FOUND "SHT1X znaleziony"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Cząstki"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Usuń wagę"
-#define D_HX_CAL_REFERENCE "Załaduj wagę referencyjną"
-#define D_HX_CAL_DONE "Skalibrowany"
-#define D_HX_CAL_FAIL "Błąd kalibracji"
-#define D_RESET_HX711 "Zresetuj skalę"
-#define D_CONFIGURE_HX711 "Skonfiguruj skalę"
-#define D_HX711_PARAMETERS "Parametry skali"
-#define D_ITEM_WEIGHT "Waga przedmiotu"
-#define D_REFERENCE_WEIGHT "Waga referencyjna"
-#define D_CALIBRATE "Skalibruj"
-#define D_CALIBRATION "Kalibrowanie"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Kierunek"
-#define D_TX20_WIND_SPEED "Prędkość"
-#define D_TX20_WIND_SPEED_AVG "Średnia prędkość"
-#define D_TX20_WIND_SPEED_MAX "Maksymalna prędkość"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "Odtearzacz MP3"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Przełącznik" // Suffix "1"
-#define D_SENSOR_BUTTON "Przycisk" // Suffix "1"
-#define D_SENSOR_RELAY "Przekaźnik" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "Led link" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Licznik" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Podświetlanie"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "Głęboko uśpiony"
-#define D_SENSOR_EXS_ENABLE "Załącz EXS"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Godz"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sektory"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Przesunięcie faz"
-#define D_IMPORT_ACTIVE "Czynna pobrana"
-#define D_EXPORT_ACTIVE "Czynna oddana"
-#define D_IMPORT_REACTIVE "Bierna pobrana"
-#define D_EXPORT_REACTIVE "Bierna oddana"
-#define D_TOTAL_REACTIVE "Bierna całkowita"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "Napięcie PV1"
-#define D_PV1_CURRENT "Prąd PV1"
-#define D_PV1_POWER "Moc PV1 "
-#define D_PV2_VOLTAGE "Napięcie PV2"
-#define D_PV2_CURRENT "Prąd PV2"
-#define D_PV2_POWER "Moc PV2"
-#define D_SOLAR_POWER "Moc PV"
-#define D_INVERTER_POWER "Moc invertera"
-#define D_STATUS "Status"
-#define D_WAITING "Oczekiwanie"
-#define D_CHECKING "Sprawdzanie"
-#define D_WORKING "Praca"
-#define D_FAILURE "Błąd"
-#define D_SOLAX_ERROR_0 "Błąd - brak kodu"
-#define D_SOLAX_ERROR_1 "Błąd - utrata sieci"
-#define D_SOLAX_ERROR_2 "Błąd - napięcie sieci"
-#define D_SOLAX_ERROR_3 "Błąd - częstotliwość sieci"
-#define D_SOLAX_ERROR_4 "Błąd - napięcie PV"
-#define D_SOLAX_ERROR_5 "Błąd - usterka izolacji"
-#define D_SOLAX_ERROR_6 "Błąd - przegrzanie"
-#define D_SOLAX_ERROR_7 "Błąd - wentylator"
-#define D_SOLAX_ERROR_8 "Błąd - inne urządzenie"
-
-#endif // _LANGUAGE_PL_PL_D_H_
+/*
+ pl-PL-d.h - localization for Polish with diacritics - Poland for Tasmota
+
+ Copyright (C) 2019 Theo Arends (translated by roblad - Robert L., upgraded by R. Turala)
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_PL_PL_D_H_
+#define _LANGUAGE_PL_PL_D_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.12.0d
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1045
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "pl"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "NiePonWtoŚroCzwPiąSob"
+#define D_MONTH3LIST "StyLutMarKwiMajCzeLipSieWrzPaźLisGru"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Jakość powietrza"
+#define D_AP "AP" // Access Point
+#define D_AS "jak"
+#define D_AUTO "AUTO"
+#define D_BLINK "Miganie"
+#define D_BLINKOFF "Miganie - Wył."
+#define D_BOOT_COUNT "Licznik restartów"
+#define D_BRIGHTLIGHT "Jasny"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Przycisk"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bajtów"
+#define D_CELSIUS "Celsiusz"
+#define D_CHANNEL "Kanał"
+#define D_CO2 "Dwutlenek węgla"
+#define D_CODE "Kod" // Button code
+#define D_COLDLIGHT "Zimny"
+#define D_COMMAND "Komenda"
+#define D_CONNECTED "Połączony"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Licz"
+#define D_COUNTER "Licznik"
+#define D_CURRENT "Prąd" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Ciemny"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Wyłączony"
+#define D_DISTANCE "Odległość"
+#define D_DNS_SERVER "Serwer DNS"
+#define D_DONE "Wykonane"
+#define D_DST_TIME "Czas DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulacja"
+#define D_ENABLED "Załączony"
+#define D_ERASE "Wyczyść"
+#define D_ERROR "Błąd"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Błędny"
+#define D_FALLBACK "Awaryjny"
+#define D_FALLBACK_TOPIC "Temat zastępczy"
+#define D_FALSE "Fałsz"
+#define D_FILE "Plik"
+#define D_FLOW_RATE "Przepływ"
+#define D_FREE_MEMORY "Wolna pamięć"
+#define D_FREQUENCY "Częstotliwość"
+#define D_GAS "Gas"
+#define D_GATEWAY "Brama"
+#define D_GROUP "Grupa"
+#define D_HOST "Serwer"
+#define D_HOSTNAME "Nazwa serwera"
+#define D_HUMIDITY "Wilgotność"
+#define D_ILLUMINANCE "Podświetlanie"
+#define D_IMMEDIATE "Natychmiastowy" // Button immediate
+#define D_INDEX "Indeks"
+#define D_INFO "Informacja"
+#define D_INFRARED "Podczerwień"
+#define D_INITIALIZED "Zainicjowany"
+#define D_IP_ADDRESS "Adres IP"
+#define D_LIGHT "Światło"
+#define D_LWT "LWT"
+#define D_MODULE "Moduł"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "Wielokrotne naciśnięcie"
+#define D_NOISE "Szum"
+#define D_NONE "Brak"
+#define D_OFF "Wyłączony"
+#define D_OFFLINE "Nieaktywny"
+#define D_OK "Ok"
+#define D_ON "Załączony"
+#define D_ONLINE "Aktywny"
+#define D_PASSWORD "Hasło"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Cosinus fi"
+#define D_POWERUSAGE "Moc"
+#define D_POWERUSAGE_ACTIVE "Moc czynna"
+#define D_POWERUSAGE_APPARENT "Moc pozorna"
+#define D_POWERUSAGE_REACTIVE "Moc bierna"
+#define D_PRESSURE "Ciśnienie"
+#define D_PRESSUREATSEALEVEL "Ciśnienie na poziomie morza"
+#define D_PROGRAM_FLASH_SIZE "Rozmiar programu flash"
+#define D_PROGRAM_SIZE "Rozmiar programu"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Deszcz"
+#define D_RECEIVED "Otrzymany"
+#define D_RESTART "Restart"
+#define D_RESTARTING "Restartowanie"
+#define D_RESTART_REASON "Przyczyna restartu"
+#define D_RESTORE "Przywracanie"
+#define D_RETAINED "Zachowane"
+#define D_RULE "Reguła"
+#define D_SAVE "Zapisz"
+#define D_SENSOR "Czujnik"
+#define D_SSID "SSID"
+#define D_START "Start"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Maska podsieci"
+#define D_SUBSCRIBE_TO "Subskrybuj"
+#define D_UNSUBSCRIBE_FROM "Nie subskrybuj"
+#define D_SUCCESSFUL "Powodzenie"
+#define D_SUNRISE "Wschód słońca"
+#define D_SUNSET "Zachód słońca"
+#define D_TEMPERATURE "Temperatura"
+#define D_TO "do"
+#define D_TOGGLE "Przełącz"
+#define D_TOPIC "Temat"
+#define D_TOTAL_USAGE "Całkowite użycie"
+#define D_TRANSMIT "Wyślij"
+#define D_TRUE "Prawda"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "aktualizacji"
+#define D_UPLOAD "Wgraj"
+#define D_UPTIME "Czas pracy"
+#define D_USER "Użytkownik"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Index UV"
+#define D_UV_INDEX_1 "Niski"
+#define D_UV_INDEX_2 "Średni"
+#define D_UV_INDEX_3 "Wysoki"
+#define D_UV_INDEX_4 "Niebezpieczny"
+#define D_UV_INDEX_5 "Burn L1/2"
+#define D_UV_INDEX_6 "Burn L3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "Poziom UV"
+#define D_UV_POWER "Moc UV"
+#define D_VERSION "Wersja"
+#define D_VOLTAGE "Napięcie"
+#define D_WEIGHT "Waga"
+#define D_WARMLIGHT "Temperatura światła"
+#define D_WEB_SERVER "Serwer Web"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "UWAGA Ta wersja nie obsługuje zapisu ustawień"
+#define D_LEVEL_10 "poziom 1-0"
+#define D_LEVEL_01 "poziom 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Wyłączony dziennik na porcie szeregowym"
+#define D_SYSLOG_LOGGING_REENABLED "Wznowiono zapis do Syslog"
+
+#define D_SET_BAUDRATE_TO "Ustaw szybkość transmisji na"
+#define D_RECEIVED_TOPIC "Otrzymany temat"
+#define D_DATA_SIZE "Wielkość danych"
+#define D_ANALOG_INPUT "Wejście analogowe"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Pętla zablokowana"
+#define D_WPS_FAILED_WITH_STATUS "Błąd konfiguracji WPS ze statusem"
+#define D_ACTIVE_FOR_3_MINUTES "aktywny 3 minuty"
+#define D_FAILED_TO_START "nie udało się uruchomić"
+#define D_PATCH_ISSUE_2186 "Błąd poprawki 2186"
+#define D_CONNECTING_TO_AP "Łączenie z AP"
+#define D_IN_MODE "w trybie"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Połączenie nie powiodło się, ponieważ nie otrzymano adresu IP"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Połączenie nie powiodło się, AP nie osiągalny"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Połączenie nie powiodło się, nieprawidlowe hasło"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Nie udało się nawiązac połączenia, limit czasu przekroczony"
+#define D_ATTEMPTING_CONNECTION "Próba połączenia..."
+#define D_CHECKING_CONNECTION "Sprawdzanie połączenia..."
+#define D_QUERY_DONE "Zapytanie wykonane"
+#define D_MQTT_SERVICE_FOUND "Usługa MQTT została znaleziona"
+#define D_FOUND_AT "znaleziono w"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nie znaleziony"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Zapisano do pamięci flash w"
+#define D_LOADED_FROM_FLASH_AT "Wczytano z pamięci flash w"
+#define D_USE_DEFAULTS "Użyj domyślnych"
+#define D_ERASED_SECTOR "Sektor wymazany"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Aby korzystać z Tasmota, włącz obsługę JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Oprogramowanie MINIMAL
proszę uaktualnić"
+#define D_WEBSERVER_ACTIVE_ON "Aktywny serwer Web"
+#define D_WITH_IP_ADDRESS "z adresem IP"
+#define D_WEBSERVER_STOPPED "Serwer Web zatrzymany"
+#define D_FILE_NOT_FOUND "Plik nie odnaleziony"
+#define D_REDIRECTED "Przekierowano do własnego portalu"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Menedżer Wifi ustawia punkt dostępowy i zachowuje stacje"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Menedżer sieci Wi-Fi Access Point"
+#define D_TRYING_TO_CONNECT "Próbuję połączyć urzadzenie z siecią"
+
+#define D_RESTART_IN "Zrestartuj"
+#define D_SECONDS "Sekund"
+#define D_DEVICE_WILL_RESTART "Urządzenie zrestartuje sie za kilka sekund"
+#define D_BUTTON_TOGGLE "Załącz/Wyłącz"
+#define D_CONFIGURATION "Konfiguracja"
+#define D_INFORMATION "Informacje"
+#define D_FIRMWARE_UPGRADE "Aktualizacja oprogramowania"
+#define D_CONSOLE "Konsola"
+#define D_CONFIRM_RESTART "Potwierdź restart"
+
+#define D_CONFIGURE_MODULE "Konfiguracja modułu"
+#define D_CONFIGURE_WIFI "Konfiguracja WiFi"
+#define D_CONFIGURE_MQTT "Konfiguracja MQTT"
+#define D_CONFIGURE_DOMOTICZ "Konfiguracja Domoticza"
+#define D_CONFIGURE_LOGGING "Konfiguracja dziennika"
+#define D_CONFIGURE_OTHER "Inne konfiguracje"
+#define D_CONFIRM_RESET_CONFIGURATION "Potwierdź reset ustawień"
+#define D_RESET_CONFIGURATION "Reset ustawień"
+#define D_BACKUP_CONFIGURATION "Kopia ustawień"
+#define D_RESTORE_CONFIGURATION "Przywracanie ustawień"
+#define D_MAIN_MENU "Menu główne"
+
+#define D_MODULE_PARAMETERS "Parametry modułu"
+#define D_MODULE_TYPE "Typ"
+#define D_PULLUP_ENABLE "Przełącznik pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Wejście rs"
+#define D_SERIAL_OUT "Wyjście rs"
+
+#define D_WIFI_PARAMETERS "Parametry sieci WiFi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Skanuj sieci"
+#define D_SCAN_DONE "Skanowanie wykonane"
+#define D_NO_NETWORKS_FOUND "Nie znaleziono sieci"
+#define D_REFRESH_TO_SCAN_AGAIN "Odśwież aby ponownie wyszukać sieci"
+#define D_DUPLICATE_ACCESSPOINT "Duplikuj"
+#define D_SKIPPING_LOW_QUALITY "Pominięto z powodu niskiej jakości sygnału"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "Nazwa 1"
+#define D_AP1_PASSWORD "Hasło 1"
+#define D_AP2_SSID "Nazwa 2"
+#define D_AP2_PASSWORD "Hasło 2"
+
+#define D_MQTT_PARAMETERS "Parametry MQTT"
+#define D_CLIENT "Klient"
+#define D_FULL_TOPIC "Pełny temat"
+
+#define D_LOGGING_PARAMETERS "Opcje dziennika"
+#define D_SERIAL_LOG_LEVEL "Serial - poziom"
+#define D_MQTT_LOG_LEVEL "Mqtt - poziom"
+#define D_WEB_LOG_LEVEL "Web - poziom"
+#define D_SYS_LOG_LEVEL "System - poziom"
+#define D_MORE_DEBUG "Więcej informacji dziennika"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Okres telemetrii"
+
+#define D_OTHER_PARAMETERS "Inne parametry"
+#define D_TEMPLATE "Szablon"
+#define D_ACTIVATE "Aktywuj"
+#define D_WEB_ADMIN_PASSWORD "Hasło administratora"
+#define D_MQTT_ENABLE "Załącz MQTT"
+#define D_FRIENDLY_NAME "Nazwa"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Mostek Hue"
+#define D_SINGLE_DEVICE "pojedyńcze urządzenie"
+#define D_MULTI_DEVICE "multi urządzenie"
+
+#define D_CONFIGURE_TEMPLATE "Konfiguracja szablonu"
+#define D_TEMPLATE_PARAMETERS "Parametry szablonu"
+#define D_TEMPLATE_NAME "Nazwa"
+#define D_BASE_TYPE "Na bazie"
+#define D_TEMPLATE_FLAGS "Opcje"
+
+#define D_SAVE_CONFIGURATION "Zapisz ustawienia"
+#define D_CONFIGURATION_SAVED "Ustawienia zapisane"
+#define D_CONFIGURATION_RESET "Ustawienia zresetowane"
+
+#define D_PROGRAM_VERSION "Wersja oprogramowania"
+#define D_BUILD_DATE_AND_TIME "Data kompilacji"
+#define D_CORE_AND_SDK_VERSION "Wersja Core/SDK"
+#define D_FLASH_WRITE_COUNT "Liczba zapisów do pamięci"
+#define D_MAC_ADDRESS "Adres MAC"
+#define D_MQTT_HOST "Host"
+#define D_MQTT_PORT "Port"
+#define D_MQTT_CLIENT "Klient"
+#define D_MQTT_USER "Użytkownik"
+#define D_MQTT_TOPIC "Temat"
+#define D_MQTT_GROUP_TOPIC "Temat grupy"
+#define D_MQTT_FULL_TOPIC "Pełny temat"
+#define D_MDNS_DISCOVERY "Wykrywanie mDNS"
+#define D_MDNS_ADVERTISE "Rozgłaszanie mDNS"
+#define D_ESP_CHIP_ID "ID ukladu ESP"
+#define D_FLASH_CHIP_ID "ID pamięci flash"
+#define D_FLASH_CHIP_SIZE "Rozmiar pamięci flash"
+#define D_FREE_PROGRAM_SPACE "Wolna pamięć programu"
+
+#define D_UPGRADE_BY_WEBSERVER "Aktualizacja z serwera Web"
+#define D_OTA_URL "Adres serwera"
+#define D_START_UPGRADE "Aktualizuj"
+#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizacja z pliku"
+#define D_UPLOAD_STARTED "Wgrywanie rozpoczęte"
+#define D_UPGRADE_STARTED "Aktualizacja rozpoczęta"
+#define D_UPLOAD_DONE "Wgrywanie zakończone"
+#define D_UPLOAD_ERR_1 "Nie wybrano pliku"
+#define D_UPLOAD_ERR_2 "Niewystarczająca ilość miejsca"
+#define D_UPLOAD_ERR_3 "Magiczny bajt jest inny niz 0xE9"
+#define D_UPLOAD_ERR_4 "Rozmiar programu jest większy niż rzeczywisty rozmiar pamięci flash"
+#define D_UPLOAD_ERR_5 "Wgrywanie, bufor niezgodności stanu porównywanych bitow"
+#define D_UPLOAD_ERR_6 "Błąd wgrywania. Uruchomiono zapis do dziennika na poziomie 3"
+#define D_UPLOAD_ERR_7 "Wgrywanie przerwane"
+#define D_UPLOAD_ERR_8 "Błędny plik"
+#define D_UPLOAD_ERR_9 "Plik jest za duży"
+#define D_UPLOAD_ERR_10 "Błąd inicjacji układu RF"
+#define D_UPLOAD_ERR_11 "Błąd kasowania układu RF"
+#define D_UPLOAD_ERR_12 "Błąd zapisu układu RF"
+#define D_UPLOAD_ERR_13 "Błąd dekodowania oprrogramowania układu RF"
+#define D_UPLOAD_ERROR_CODE "Błąd wgrywania"
+
+#define D_ENTER_COMMAND "Wprowadź polecenie"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Włącz poziom 2 zapisu dziennika, jeśli oczekiwana jest odpowiedź"
+#define D_NEED_USER_AND_PASSWORD "Wymagany użytkownik=&hasło="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Weryfikuj odcisk TLS..."
+#define D_TLS_CONNECT_FAILED_TO "Nieudane połączenie TLS do"
+#define D_RETRY_IN "Spróbuj ponownie"
+#define D_VERIFIED "Zweryfikowano odcisk"
+#define D_INSECURE "Nieprawidłowe połączenie z powodu błędnego odcisku TLS"
+#define D_CONNECT_FAILED_TO "Nie udało się nawiązać połączenia"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast wyłączony"
+#define D_MULTICAST_REJOINED "Multicast dołączony"
+#define D_MULTICAST_JOIN_FAILED "Podłączenie Multicast nie powiodło się"
+#define D_FAILED_TO_SEND_RESPONSE "Nie udało się wysłać odpowiedzi"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "Zdarzenie podstawowe"
+#define D_WEMO_EVENT_SERVICE "Zdarzenie serwisowe"
+#define D_WEMO_META_SERVICE "Meta dane serwisowe"
+#define D_WEMO_SETUP "Ustawienia WeMo"
+#define D_RESPONSE_SENT "Wyślij odpowiedź"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Ustawienia Hue"
+#define D_HUE_API_NOT_IMPLEMENTED "Api nie zaimplementowane"
+#define D_HUE_API "API"
+#define D_HUE_POST_ARGS "POST argument"
+#define D_3_RESPONSE_PACKETS_SENT "3 pakiety odpowiedzi wysyłane"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Parametry Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Klucz Idx"
+#define D_DOMOTICZ_SWITCH_IDX "Przełącznik Idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor Idx"
+ #define D_DOMOTICZ_TEMP "Temperatura"
+ #define D_DOMOTICZ_TEMP_HUM "Temperatura, Wilgotność"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temperatura, Wilgotność, Ciśnienie"
+ #define D_DOMOTICZ_POWER_ENERGY "Moc, Energia"
+ #define D_DOMOTICZ_ILLUMINANCE "Oświetlenie"
+ #define D_DOMOTICZ_COUNT "Licznik"
+ #define D_DOMOTICZ_VOLTAGE "Napięcie"
+ #define D_DOMOTICZ_CURRENT "Prąd"
+ #define D_DOMOTICZ_AIRQUALITY "Jakość powietrza"
+ #define D_DOMOTICZ_P1_SMART_METER "Miernik P1"
+#define D_DOMOTICZ_UPDATE_TIMER "Aktualizacja zegara"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Konfiguracja harmonogramu"
+#define D_TIMER_PARAMETERS "Parametry harmonogramu"
+#define D_TIMER_ENABLE "Załącz harmonogram"
+#define D_TIMER_ARM "Załącz"
+#define D_TIMER_TIME "Czas"
+#define D_TIMER_DAYS "Dni"
+#define D_TIMER_REPEAT "Powtarzaj"
+#define D_TIMER_OUTPUT "Wyjście"
+#define D_TIMER_ACTION "Akcja"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Konfiguracja KNX"
+#define D_KNX_PARAMETERS "Parametry KNX"
+#define D_KNX_GENERAL_CONFIG "Konfiguracja ogólna"
+#define D_KNX_PHYSICAL_ADDRESS "Adres fizyczny"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Musi być unikalny w sieci KNX)"
+#define D_KNX_ENABLE "Załącz"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Adresy grupowe do zapisu"
+#define D_ADD "Dodaj"
+#define D_DELETE "Usuń"
+#define D_REPLY "Odpowiedz"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Adresy grupowe do odbioru"
+#define D_RECEIVED_FROM "Odebrane od"
+#define D_KNX_COMMAND_WRITE "Zapisz"
+#define D_KNX_COMMAND_READ "Czytaj"
+#define D_KNX_COMMAND_OTHER "Inna komenda"
+#define D_SENT_TO "Wyślij do"
+#define D_KNX_WARNING "Adres grupy (0/0/0) jest zarezerwowany i nie można go użyć."
+#define D_KNX_ENHANCEMENT "Rozszerzenia"
+#define D_KNX_TX_SLOT "Gniazdo TX"
+#define D_KNX_RX_SLOT "Gniazdo RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energia dzisiaj"
+#define D_ENERGY_YESTERDAY "Energia wczoraj"
+#define D_ENERGY_TOTAL "Energia całkowita"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Otwórz"
+#define D_CLOSE "Zamknij"
+#define D_DOMOTICZ_SHUTTER "Roleta"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Konfiguracja PCF8574"
+#define D_PCF8574_PARAMETERS "Parametry PCF8574"
+#define D_INVERT_PORTS "Porty odwrócone"
+#define D_DEVICE "Urządzenie"
+#define D_DEVICE_INPUT "Wejście"
+#define D_DEVICE_OUTPUT "Wyjście"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Czujnik zajęty"
+#define D_SENSOR_CRC_ERROR "Błąd CRC czujnika"
+#define D_SENSORS_FOUND "Znaleziono czujnik"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Trwa oczekiwanie"
+#define D_START_SIGNAL_LOW "Sygnał startowy niski"
+#define D_START_SIGNAL_HIGH "Sygnał startowy wysoki"
+#define D_PULSE "Impuls"
+#define D_CHECKSUM_FAILURE "Błędna suma kontrolna"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Czujnik nie otrzymał komendy ACK"
+#define D_SHT1X_FOUND "SHT1X znaleziony"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Cząstki"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Usuń wagę"
+#define D_HX_CAL_REFERENCE "Załaduj wagę referencyjną"
+#define D_HX_CAL_DONE "Skalibrowany"
+#define D_HX_CAL_FAIL "Błąd kalibracji"
+#define D_RESET_HX711 "Zresetuj skalę"
+#define D_CONFIGURE_HX711 "Skonfiguruj skalę"
+#define D_HX711_PARAMETERS "Parametry skali"
+#define D_ITEM_WEIGHT "Waga przedmiotu"
+#define D_REFERENCE_WEIGHT "Waga referencyjna"
+#define D_CALIBRATE "Skalibruj"
+#define D_CALIBRATION "Kalibrowanie"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Kierunek"
+#define D_TX20_WIND_SPEED "Prędkość"
+#define D_TX20_WIND_SPEED_AVG "Średnia prędkość"
+#define D_TX20_WIND_SPEED_MAX "Maksymalna prędkość"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "Odtearzacz MP3"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Przełącznik" // Suffix "1"
+#define D_SENSOR_BUTTON "Przycisk" // Suffix "1"
+#define D_SENSOR_RELAY "Przekaźnik" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "Led link" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Licznik" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Podświetlanie"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "Głęboko uśpiony"
+#define D_SENSOR_EXS_ENABLE "Załącz EXS"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Godz"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sektory"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Przesunięcie faz"
+#define D_IMPORT_ACTIVE "Czynna pobrana"
+#define D_EXPORT_ACTIVE "Czynna oddana"
+#define D_IMPORT_REACTIVE "Bierna pobrana"
+#define D_EXPORT_REACTIVE "Bierna oddana"
+#define D_TOTAL_REACTIVE "Bierna całkowita"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "Napięcie PV1"
+#define D_PV1_CURRENT "Prąd PV1"
+#define D_PV1_POWER "Moc PV1 "
+#define D_PV2_VOLTAGE "Napięcie PV2"
+#define D_PV2_CURRENT "Prąd PV2"
+#define D_PV2_POWER "Moc PV2"
+#define D_SOLAR_POWER "Moc PV"
+#define D_INVERTER_POWER "Moc invertera"
+#define D_STATUS "Status"
+#define D_WAITING "Oczekiwanie"
+#define D_CHECKING "Sprawdzanie"
+#define D_WORKING "Praca"
+#define D_FAILURE "Błąd"
+#define D_SOLAX_ERROR_0 "Błąd - brak kodu"
+#define D_SOLAX_ERROR_1 "Błąd - utrata sieci"
+#define D_SOLAX_ERROR_2 "Błąd - napięcie sieci"
+#define D_SOLAX_ERROR_3 "Błąd - częstotliwość sieci"
+#define D_SOLAX_ERROR_4 "Błąd - napięcie PV"
+#define D_SOLAX_ERROR_5 "Błąd - usterka izolacji"
+#define D_SOLAX_ERROR_6 "Błąd - przegrzanie"
+#define D_SOLAX_ERROR_7 "Błąd - wentylator"
+#define D_SOLAX_ERROR_8 "Błąd - inne urządzenie"
+
+#endif // _LANGUAGE_PL_PL_D_H_
diff --git a/tasmota/language/pt-BR.h b/tasmota/language/pt-BR.h
index 43dc9581b..0efa57789 100644
--- a/tasmota/language/pt-BR.h
+++ b/tasmota/language/pt-BR.h
@@ -1,703 +1,701 @@
-/*
- pt-BR.h - localization for Portuguese - Brazil for Tasmota
-
- Copyright (C) 2019 Fabiano Bovo
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_PT_BR_H_
-#define _LANGUAGE_PT_BR_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v7.0.0.1
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1046
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "pt"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "DomSegTerQuaQuiSexSab"
-#define D_MONTH3LIST "JanFevMarAbrMaiJunJulAgoSepOutNovDez"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Qualidade do ar"
-#define D_AP "Ponto de acesso" // Ponto de Acesso
-#define D_AS "como"
-#define D_AUTO "Auto"
-#define D_BLINK "Pulsar"
-#define D_BLINKOFF "Pulsar desligado"
-#define D_BOOT_COUNT "Contagem de inicialização"
-#define D_BRIGHTLIGHT "Brilho"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Botão"
-#define D_BY "por" // Write by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Canal"
-#define D_CO2 "CO2"
-#define D_CODE "Código" // Button code
-#define D_COLDLIGHT "Luz fria"
-#define D_COMMAND "Comando"
-#define D_CONNECTED "Ligado"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Contagem"
-#define D_COUNTER "Contador"
-#define D_CURRENT "Corrente" // As in Voltage and Current
-#define D_DATA "Dados"
-#define D_DARKLIGHT "Luz escura"
-#define D_DEBUG "Depurar"
-#define D_DISABLED "Desabilitado"
-#define D_DISTANCE "Distância"
-#define D_DNS_SERVER "Servidor DNS"
-#define D_DONE "Concluído"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulação"
-#define D_ENABLED "Habilitado"
-#define D_ERASE "Apagar"
-#define D_ERROR "Erro"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Falha"
-#define D_FALLBACK "Retornar"
-#define D_FALLBACK_TOPIC "Tópico para retornar"
-#define D_FALSE "Falso"
-#define D_FILE "Arquivo"
-#define D_FLOW_RATE "Quociente de vazão"
-#define D_FREE_MEMORY "Memória livre"
-#define D_FREQUENCY "Frequência"
-#define D_GAS "Gás"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Grupo"
-#define D_HOST "Host"
-#define D_HOSTNAME "Nome do Host"
-#define D_HUMIDITY "Umidade"
-#define D_ILLUMINANCE "Luminância"
-#define D_IMMEDIATE "Imediato" // Button immediate
-#define D_INDEX "Índice"
-#define D_INFO "Informação"
-#define D_INFRARED "Infravermelho"
-#define D_INITIALIZED "Inicializado"
-#define D_IP_ADDRESS "Endereço IP"
-#define D_LIGHT "Luz"
-#define D_LWT "LWT"
-#define D_MODULE "Módulo"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-pressão"
-#define D_NOISE "Ruído"
-#define D_NONE "Nenhum"
-#define D_OFF "Desligado"
-#define D_OFFLINE "Desconectado"
-#define D_OK "Ok"
-#define D_ON "Ligado"
-#define D_ONLINE "Conectado"
-#define D_PASSWORD "Senha"
-#define D_PORT "Porta"
-#define D_POWER_FACTOR "Fator de potência"
-#define D_POWERUSAGE "Potência"
-#define D_POWERUSAGE_ACTIVE "Potência ativa"
-#define D_POWERUSAGE_APPARENT "Potência aparente"
-#define D_POWERUSAGE_REACTIVE "Potência reativa"
-#define D_PRESSURE "Pressão"
-#define D_PRESSUREATSEALEVEL "Pressão ao nível do mar"
-#define D_PROGRAM_FLASH_SIZE "Tamanho do programa na memória"
-#define D_PROGRAM_SIZE "Tamanho do programa"
-#define D_PROJECT "Projeto"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Recebido"
-#define D_RESTART "Reiniciar"
-#define D_RESTARTING "Reiniciando"
-#define D_RESTART_REASON "Motivo do reinício"
-#define D_RESTORE "Restauração"
-#define D_RETAINED "Manter"
-#define D_RULE "Regra"
-#define D_SAVE "Salvar"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Iniciar"
-#define D_STD_TIME "STD"
-#define D_STOP "Parar"
-#define D_SUBNET_MASK "Máscara sub rede"
-#define D_SUBSCRIBE_TO "Subescrever para"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Successo"
-#define D_SUNRISE "Nascer do sol"
-#define D_SUNSET "Por do sol"
-#define D_TEMPERATURE "Temperatura"
-#define D_TO "Para"
-#define D_TOGGLE "Inverter"
-#define D_TOPIC "Tópico"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Transmitir"
-#define D_TRUE "Verdadeiro"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "atualização"
-#define D_UPLOAD "Enviar"
-#define D_UPTIME "Tempo de atividade"
-#define D_USER "Usuário"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Índice UV"
-#define D_UV_INDEX_1 "Baixo"
-#define D_UV_INDEX_2 "Médio"
-#define D_UV_INDEX_3 "Alto"
-#define D_UV_INDEX_4 "Perigro"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "Nível UV"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Versão"
-#define D_VOLTAGE "Voltagem"
-#define D_WEIGHT "Peso"
-#define D_WARMLIGHT "Luz quente"
-#define D_WEB_SERVER "Servidor WEB"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "AVISO: esta versão não supporta configurações persistentes"
-#define D_LEVEL_10 "nível 1-0"
-#define D_LEVEL_01 "nível 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Registro Serial desabilitado"
-#define D_SYSLOG_LOGGING_REENABLED "Registro do Syslog reativado"
-
-#define D_SET_BAUDRATE_TO "Ajuste da velocidade para"
-#define D_RECEIVED_TOPIC "Tópico recebido"
-#define D_DATA_SIZE "Tamanho de dados"
-#define D_ANALOG_INPUT "Entrada analógica"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Loop bloqueado"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig falha de estado"
-#define D_ACTIVE_FOR_3_MINUTES "Ativo por 3 minutos"
-#define D_FAILED_TO_START "Falha ao iníciar"
-#define D_PATCH_ISSUE_2186 "Questão 2186"
-#define D_CONNECTING_TO_AP "Ligando ao PA"
-#define D_IN_MODE "em modo"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "A ligação falhou porque nenhum endereço IP foi recebido"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "A ligação falhou porque o PA não pôde ser alcançado"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou porque a senha está incorreta"
-#define D_CONNECT_FAILED_AP_TIMEOUT "A ligação falhou porque o tempo foi excedido"
-#define D_ATTEMPTING_CONNECTION "Ligando..."
-#define D_CHECKING_CONNECTION "Verificando ligação..."
-#define D_QUERY_DONE "Consulta finalizada. Serviço MQTT não encontrado"
-#define D_MQTT_SERVICE_FOUND "Serviço MQTT encontrado em"
-#define D_FOUND_AT "encontrado em"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog anfitrião não encontrado"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Guardado na flash em"
-#define D_LOADED_FROM_FLASH_AT "Lido da flash em"
-#define D_USE_DEFAULTS "Usar predefinições"
-#define D_ERASED_SECTOR "Apagar setores"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware mínimo
Atualizar por favor"
-#define D_WEBSERVER_ACTIVE_ON "Servidor WEB ativo em"
-#define D_WITH_IP_ADDRESS "com o endereço IP"
-#define D_WEBSERVER_STOPPED "Servidor WEB parou"
-#define D_FILE_NOT_FOUND "Arquivo não encontrado"
-#define D_REDIRECTED "Redirecionado para o portal ativo"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager: configura o Ponto de Acesso e a Estação"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager: configura o Ponto de Acesso"
-#define D_TRYING_TO_CONNECT "Conectar o dispositivo à rede"
-
-#define D_RESTART_IN "Reinicia em"
-#define D_SECONDS "segundos"
-#define D_DEVICE_WILL_RESTART "O dispositivo irá reiniciar dentro de alguns segundos"
-#define D_BUTTON_TOGGLE "Comandar"
-#define D_CONFIGURATION "Configuração"
-#define D_INFORMATION "Informação"
-#define D_FIRMWARE_UPGRADE "Atualização de Firmware"
-#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Confirmar o reinicio"
-
-#define D_CONFIGURE_MODULE "Configurar Módulo"
-#define D_CONFIGURE_WIFI "Configurar WiFi"
-#define D_CONFIGURE_MQTT "Configurar MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configurar Domoticz"
-#define D_CONFIGURE_LOGGING "Configurar Logging"
-#define D_CONFIGURE_OTHER "Configurar outras opções"
-#define D_CONFIRM_RESET_CONFIGURATION "Confirmar limpeza de configuração"
-#define D_RESET_CONFIGURATION "Apagar configuração"
-#define D_BACKUP_CONFIGURATION "Salvar configuração"
-#define D_RESTORE_CONFIGURATION "Repor configuração"
-#define D_MAIN_MENU "Menu principal"
-
-#define D_MODULE_PARAMETERS "Parâmetros do módulo"
-#define D_MODULE_TYPE "Tipo de módulo"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Entrada serial"
-#define D_SERIAL_OUT "Saída serial"
-
-#define D_WIFI_PARAMETERS "Parâmetros do wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Encontrar redes wifi"
-#define D_SCAN_DONE "Busca finalizada"
-#define D_NO_NETWORKS_FOUND "Sem redes"
-#define D_REFRESH_TO_SCAN_AGAIN "Nova busca"
-#define D_DUPLICATE_ACCESSPOINT "Ponto de Acesso duplicado"
-#define D_SKIPPING_LOW_QUALITY "Ignorado devido à baixa qualidade do sinal"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "Senha AP1"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "Senha AP2"
-
-#define D_MQTT_PARAMETERS "Parâmetros MQTT"
-#define D_CLIENT "Cliente"
-#define D_FULL_TOPIC "Tópico completo"
-
-#define D_LOGGING_PARAMETERS "Parâmetros Logging"
-#define D_SERIAL_LOG_LEVEL "Nível de registro serial"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Nível de registro WEB"
-#define D_SYS_LOG_LEVEL "Nível de registro Syslog"
-#define D_MORE_DEBUG "Depurar mais"
-#define D_SYSLOG_HOST "Syslog anfitrião"
-#define D_SYSLOG_PORT "Porta Syslog"
-#define D_TELEMETRY_PERIOD "Período de telemetria"
-
-#define D_OTHER_PARAMETERS "Outros parâmetros"
-#define D_TEMPLATE "Modelo"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Senha de WEB Admin"
-#define D_MQTT_ENABLE "MQTT habilitado"
-#define D_FRIENDLY_NAME "Nome amigável"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "Dispositivo único"
-#define D_MULTI_DEVICE "Múltiplos dispositivos"
-
-#define D_CONFIGURE_TEMPLATE "Configurar Modelo"
-#define D_TEMPLATE_PARAMETERS "Parâmetros Modelo"
-#define D_TEMPLATE_NAME "Nome"
-#define D_BASE_TYPE "Baseado em"
-#define D_TEMPLATE_FLAGS "Opções"
-
-#define D_SAVE_CONFIGURATION "Gravar configuração"
-#define D_CONFIGURATION_SAVED "Configuração gravada"
-#define D_CONFIGURATION_RESET "Reinicialização da configuração"
-
-#define D_PROGRAM_VERSION "Versão do programa"
-#define D_BUILD_DATE_AND_TIME "Data e Hora da compilação"
-#define D_CORE_AND_SDK_VERSION "Versão Core/SDK"
-#define D_FLASH_WRITE_COUNT "Contagem de gravação flash"
-#define D_MAC_ADDRESS "Endereço MAC"
-#define D_MQTT_HOST "MQTT Servidor"
-#define D_MQTT_PORT "MQTT Porta"
-#define D_MQTT_CLIENT "MQTT Cliente"
-#define D_MQTT_USER "MQTT Usuário"
-#define D_MQTT_TOPIC "MQTT Tópico"
-#define D_MQTT_GROUP_TOPIC "MQTT Tópico Grupo"
-#define D_MQTT_FULL_TOPIC "MQTT Tópico Completo"
-#define D_MDNS_DISCOVERY "Descobrir mDNS"
-#define D_MDNS_ADVERTISE "Anunciar mDNS"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Flash Size"
-#define D_FREE_PROGRAM_SPACE "Espaço Livre Programa"
-
-#define D_UPGRADE_BY_WEBSERVER "Atualizar pelo servidor WEB"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Iniciar atualização"
-#define D_UPGRADE_BY_FILE_UPLOAD "Atualização por arquivo local"
-#define D_UPLOAD_STARTED "Início do envio"
-#define D_UPGRADE_STARTED "Atualização iniciada"
-#define D_UPLOAD_DONE "Atualização finalizada"
-#define D_UPLOAD_ERR_1 "Nenhum arquivo selecionado"
-#define D_UPLOAD_ERR_2 "Não existe memória disponível"
-#define D_UPLOAD_ERR_3 "Byte mágico não é 0xE9"
-#define D_UPLOAD_ERR_4 "O tamanho do programa é maior do que o tamanho da memória"
-#define D_UPLOAD_ERR_5 "Envio buffer miscompare"
-#define D_UPLOAD_ERR_6 "Falha no envio. Habilitar logging 3"
-#define D_UPLOAD_ERR_7 "Envio cancelado"
-#define D_UPLOAD_ERR_8 "Arquivo inválido"
-#define D_UPLOAD_ERR_9 "Arquivo muito grande"
-#define D_UPLOAD_ERR_10 "Falha ao iniciar chip RF"
-#define D_UPLOAD_ERR_11 "Falha ao apagar o chip RF"
-#define D_UPLOAD_ERR_12 "Falha ao escrever o chip RF"
-#define D_UPLOAD_ERR_13 "Falha ao decodificar o firmware de RF"
-#define D_UPLOAD_ERROR_CODE "Código de erro do envio"
-
-#define D_ENTER_COMMAND "Inserir comando"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 se resposta esperada"
-#define D_NEED_USER_AND_PASSWORD "Necessário user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifique a impressão digital TLS..."
-#define D_TLS_CONNECT_FAILED_TO "TLS não conseguiu ligar"
-#define D_RETRY_IN "Tentativa em"
-#define D_VERIFIED "Verificado impressão digital "
-#define D_INSECURE "Ligação insegura devido à impressão digital inválida"
-#define D_CONNECT_FAILED_TO "A ligação falhou ao"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast desabilitado"
-#define D_MULTICAST_REJOINED "Multicast (re)ingressou"
-#define D_MULTICAST_JOIN_FAILED "Multicast falha no reingresso"
-#define D_FAILED_TO_SEND_RESPONSE "Falha no envio de reposta"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo evento básico"
-#define D_WEMO_EVENT_SERVICE "WeMo evento de serviço"
-#define D_WEMO_META_SERVICE "WeMo serviço meta"
-#define D_WEMO_SETUP "WeMo configuração"
-#define D_RESPONSE_SENT "Resposta enviada"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue setup"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API nao implementada"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 pacotes de resposta enviados"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Parâmetros Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Chave idx"
-#define D_DOMOTICZ_SWITCH_IDX "Interruptor idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Umi"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Umi,Pres"
- #define D_DOMOTICZ_POWER_ENERGY "Potência,Energia"
- #define D_DOMOTICZ_ILLUMINANCE "Luminância"
- #define D_DOMOTICZ_COUNT "Contagem/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltagem/PM2.5"
- #define D_DOMOTICZ_CURRENT "Corrente/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Qualidade do ar"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Tempo de atualização"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configurar temporizador"
-#define D_TIMER_PARAMETERS "Parâmetros"
-#define D_TIMER_ENABLE "Habilitar temporizadores"
-#define D_TIMER_ARM "Habilitar"
-#define D_TIMER_TIME "Horário"
-#define D_TIMER_DAYS "Dias"
-#define D_TIMER_REPEAT "Repetir"
-#define D_TIMER_OUTPUT "Saída"
-#define D_TIMER_ACTION "Ação"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configurar KNX"
-#define D_KNX_PARAMETERS "Parâmetros KNX"
-#define D_KNX_GENERAL_CONFIG "Geral"
-#define D_KNX_PHYSICAL_ADDRESS "Endereço físico"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Deve ser único na rede KNX)"
-#define D_KNX_ENABLE "Habilitar KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Endereço do grupo para enviar"
-#define D_ADD "Adicionar"
-#define D_DELETE "Remover"
-#define D_REPLY "Responder"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Endereço do grupo para receber"
-#define D_RECEIVED_FROM "Recebido de"
-#define D_KNX_COMMAND_WRITE "Escrever"
-#define D_KNX_COMMAND_READ "Ler"
-#define D_KNX_COMMAND_OTHER "Outros"
-#define D_SENT_TO "Enviar para"
-#define D_KNX_WARNING "O endereço ( 0 / 0 / 0 ) é reservado e não pode ser usado."
-#define D_KNX_ENHANCEMENT "Melhoria da comunicação"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Consumo energético de hoje"
-#define D_ENERGY_YESTERDAY "Consumo energético de ontem"
-#define D_ENERGY_TOTAL "Consumo total de energia"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Aberta"
-#define D_CLOSE "Fechada"
-#define D_DOMOTICZ_SHUTTER "Persiana"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configura PCF8574"
-#define D_PCF8574_PARAMETERS "Parâmetros PCF8574"
-#define D_INVERT_PORTS "Portas Invertidas"
-#define D_DEVICE "Dispositivo"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor ocupado"
-#define D_SENSOR_CRC_ERROR "Erro sensor CRC"
-#define D_SENSORS_FOUND "Sensores encontrados"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Fim do tempo de espera"
-#define D_START_SIGNAL_LOW "Sinal de início baixo"
-#define D_START_SIGNAL_HIGH "Sinal de início elevado"
-#define D_PULSE "pulso"
-#define D_CHECKSUM_FAILURE "Falha checksum"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor não aceitou o comando ACK"
-#define D_SHT1X_FOUND "SHT1X encontrado"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Partículas"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remover peso"
-#define D_HX_CAL_REFERENCE "Peso de referência de carga"
-#define D_HX_CAL_DONE "Calibrado"
-#define D_HX_CAL_FAIL "Falha na calibração"
-#define D_RESET_HX711 "Redefinir escala"
-#define D_CONFIGURE_HX711 "Configurar escala"
-#define D_HX711_PARAMETERS "Parâmetros de escala"
-#define D_ITEM_WEIGHT "Peso do Item"
-#define D_REFERENCE_WEIGHT "Peso de referência"
-#define D_CALIBRATE "Calibrar"
-#define D_CALIBRATION "Calibração"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Direção do vento"
-#define D_TX20_WIND_SPEED "Velocidade do vento"
-#define D_TX20_WIND_SPEED_AVG "Velocidade média do vento"
-#define D_TX20_WIND_SPEED_MAX "Velocidade do vento Máxima"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "L"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "O"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Interruptor" // Suffix "1"
-#define D_SENSOR_BUTTON "Botão" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Contador" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Luz de fundo"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "H"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "M"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "s"
-#define D_UNIT_SECTORS "setores"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "W/h"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Ângulo de Fase"
-#define D_IMPORT_ACTIVE "Importar Ativo"
-#define D_EXPORT_ACTIVE "Exportar Ativo"
-#define D_IMPORT_REACTIVE "Importar Reativo"
-#define D_EXPORT_REACTIVE "Exportar Reativo"
-#define D_TOTAL_REACTIVE "Reativo total"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltagem"
-#define D_PV1_CURRENT "PV1 Corrente"
-#define D_PV1_POWER "PV1 Energia"
-#define D_PV2_VOLTAGE "PV2 Voltagem"
-#define D_PV2_CURRENT "PV2 Corrente"
-#define D_PV2_POWER "PV2 Energia"
-#define D_SOLAR_POWER "Energia Solar"
-#define D_INVERTER_POWER "Potência do Inversor"
-#define D_STATUS "Status"
-#define D_WAITING "Esperando"
-#define D_CHECKING "Verificando"
-#define D_WORKING "Trabalhando"
-#define D_FAILURE "Falha"
-#define D_SOLAX_ERROR_0 "Nenhum código de erro"
-#define D_SOLAX_ERROR_1 "Erro Grid Perdida"
-#define D_SOLAX_ERROR_2 "Falha na Tensão da rede"
-#define D_SOLAX_ERROR_3 "Falha na Frequência do Grid"
-#define D_SOLAX_ERROR_4 "Pv Falha de Tensão"
-#define D_SOLAX_ERROR_5 "Falha de Isolamento"
-#define D_SOLAX_ERROR_6 "Falha de Temperatura excessiva"
-#define D_SOLAX_ERROR_7 "Falha no Ventilador"
-#define D_SOLAX_ERROR_8 "Outra falha do dispositivo"
-
-#endif // _LANGUAGE_PT_BR_H_
+/*
+ pt-BR.h - localization for Portuguese - Brazil for Tasmota
+
+ Copyright (C) 2019 Fabiano Bovo
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_PT_BR_H_
+#define _LANGUAGE_PT_BR_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v7.0.0.1
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1046
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "pt"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "DomSegTerQuaQuiSexSab"
+#define D_MONTH3LIST "JanFevMarAbrMaiJunJulAgoSepOutNovDez"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Qualidade do ar"
+#define D_AP "Ponto de acesso" // Ponto de Acesso
+#define D_AS "como"
+#define D_AUTO "Auto"
+#define D_BLINK "Pulsar"
+#define D_BLINKOFF "Pulsar desligado"
+#define D_BOOT_COUNT "Contagem de inicialização"
+#define D_BRIGHTLIGHT "Brilho"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Botão"
+#define D_BY "por" // Write by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Canal"
+#define D_CO2 "CO2"
+#define D_CODE "Código" // Button code
+#define D_COLDLIGHT "Luz fria"
+#define D_COMMAND "Comando"
+#define D_CONNECTED "Ligado"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Contagem"
+#define D_COUNTER "Contador"
+#define D_CURRENT "Corrente" // As in Voltage and Current
+#define D_DATA "Dados"
+#define D_DARKLIGHT "Luz escura"
+#define D_DEBUG "Depurar"
+#define D_DISABLED "Desabilitado"
+#define D_DISTANCE "Distância"
+#define D_DNS_SERVER "Servidor DNS"
+#define D_DONE "Concluído"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulação"
+#define D_ENABLED "Habilitado"
+#define D_ERASE "Apagar"
+#define D_ERROR "Erro"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Falha"
+#define D_FALLBACK "Retornar"
+#define D_FALLBACK_TOPIC "Tópico para retornar"
+#define D_FALSE "Falso"
+#define D_FILE "Arquivo"
+#define D_FLOW_RATE "Quociente de vazão"
+#define D_FREE_MEMORY "Memória livre"
+#define D_FREQUENCY "Frequência"
+#define D_GAS "Gás"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Grupo"
+#define D_HOST "Host"
+#define D_HOSTNAME "Nome do Host"
+#define D_HUMIDITY "Umidade"
+#define D_ILLUMINANCE "Luminância"
+#define D_IMMEDIATE "Imediato" // Button immediate
+#define D_INDEX "Índice"
+#define D_INFO "Informação"
+#define D_INFRARED "Infravermelho"
+#define D_INITIALIZED "Inicializado"
+#define D_IP_ADDRESS "Endereço IP"
+#define D_LIGHT "Luz"
+#define D_LWT "LWT"
+#define D_MODULE "Módulo"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-pressão"
+#define D_NOISE "Ruído"
+#define D_NONE "Nenhum"
+#define D_OFF "Desligado"
+#define D_OFFLINE "Desconectado"
+#define D_OK "Ok"
+#define D_ON "Ligado"
+#define D_ONLINE "Conectado"
+#define D_PASSWORD "Senha"
+#define D_PORT "Porta"
+#define D_POWER_FACTOR "Fator de potência"
+#define D_POWERUSAGE "Potência"
+#define D_POWERUSAGE_ACTIVE "Potência ativa"
+#define D_POWERUSAGE_APPARENT "Potência aparente"
+#define D_POWERUSAGE_REACTIVE "Potência reativa"
+#define D_PRESSURE "Pressão"
+#define D_PRESSUREATSEALEVEL "Pressão ao nível do mar"
+#define D_PROGRAM_FLASH_SIZE "Tamanho do programa na memória"
+#define D_PROGRAM_SIZE "Tamanho do programa"
+#define D_PROJECT "Projeto"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Recebido"
+#define D_RESTART "Reiniciar"
+#define D_RESTARTING "Reiniciando"
+#define D_RESTART_REASON "Motivo do reinício"
+#define D_RESTORE "Restauração"
+#define D_RETAINED "Manter"
+#define D_RULE "Regra"
+#define D_SAVE "Salvar"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Iniciar"
+#define D_STD_TIME "STD"
+#define D_STOP "Parar"
+#define D_SUBNET_MASK "Máscara sub rede"
+#define D_SUBSCRIBE_TO "Subescrever para"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Successo"
+#define D_SUNRISE "Nascer do sol"
+#define D_SUNSET "Por do sol"
+#define D_TEMPERATURE "Temperatura"
+#define D_TO "Para"
+#define D_TOGGLE "Inverter"
+#define D_TOPIC "Tópico"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Transmitir"
+#define D_TRUE "Verdadeiro"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "atualização"
+#define D_UPLOAD "Enviar"
+#define D_UPTIME "Tempo de atividade"
+#define D_USER "Usuário"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Índice UV"
+#define D_UV_INDEX_1 "Baixo"
+#define D_UV_INDEX_2 "Médio"
+#define D_UV_INDEX_3 "Alto"
+#define D_UV_INDEX_4 "Perigro"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "Nível UV"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Versão"
+#define D_VOLTAGE "Voltagem"
+#define D_WEIGHT "Peso"
+#define D_WARMLIGHT "Luz quente"
+#define D_WEB_SERVER "Servidor WEB"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "AVISO: esta versão não supporta configurações persistentes"
+#define D_LEVEL_10 "nível 1-0"
+#define D_LEVEL_01 "nível 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Registro Serial desabilitado"
+#define D_SYSLOG_LOGGING_REENABLED "Registro do Syslog reativado"
+
+#define D_SET_BAUDRATE_TO "Ajuste da velocidade para"
+#define D_RECEIVED_TOPIC "Tópico recebido"
+#define D_DATA_SIZE "Tamanho de dados"
+#define D_ANALOG_INPUT "Entrada analógica"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Loop bloqueado"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig falha de estado"
+#define D_ACTIVE_FOR_3_MINUTES "Ativo por 3 minutos"
+#define D_FAILED_TO_START "Falha ao iníciar"
+#define D_PATCH_ISSUE_2186 "Questão 2186"
+#define D_CONNECTING_TO_AP "Ligando ao PA"
+#define D_IN_MODE "em modo"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "A ligação falhou porque nenhum endereço IP foi recebido"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "A ligação falhou porque o PA não pôde ser alcançado"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou porque a senha está incorreta"
+#define D_CONNECT_FAILED_AP_TIMEOUT "A ligação falhou porque o tempo foi excedido"
+#define D_ATTEMPTING_CONNECTION "Ligando..."
+#define D_CHECKING_CONNECTION "Verificando ligação..."
+#define D_QUERY_DONE "Consulta finalizada. Serviço MQTT não encontrado"
+#define D_MQTT_SERVICE_FOUND "Serviço MQTT encontrado em"
+#define D_FOUND_AT "encontrado em"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog anfitrião não encontrado"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Guardado na flash em"
+#define D_LOADED_FROM_FLASH_AT "Lido da flash em"
+#define D_USE_DEFAULTS "Usar predefinições"
+#define D_ERASED_SECTOR "Apagar setores"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware mínimo
Atualizar por favor"
+#define D_WEBSERVER_ACTIVE_ON "Servidor WEB ativo em"
+#define D_WITH_IP_ADDRESS "com o endereço IP"
+#define D_WEBSERVER_STOPPED "Servidor WEB parou"
+#define D_FILE_NOT_FOUND "Arquivo não encontrado"
+#define D_REDIRECTED "Redirecionado para o portal ativo"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager: configura o Ponto de Acesso e a Estação"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager: configura o Ponto de Acesso"
+#define D_TRYING_TO_CONNECT "Conectar o dispositivo à rede"
+
+#define D_RESTART_IN "Reinicia em"
+#define D_SECONDS "segundos"
+#define D_DEVICE_WILL_RESTART "O dispositivo irá reiniciar dentro de alguns segundos"
+#define D_BUTTON_TOGGLE "Comandar"
+#define D_CONFIGURATION "Configuração"
+#define D_INFORMATION "Informação"
+#define D_FIRMWARE_UPGRADE "Atualização de Firmware"
+#define D_CONSOLE "Console"
+#define D_CONFIRM_RESTART "Confirmar o reinicio"
+
+#define D_CONFIGURE_MODULE "Configurar Módulo"
+#define D_CONFIGURE_WIFI "Configurar WiFi"
+#define D_CONFIGURE_MQTT "Configurar MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configurar Domoticz"
+#define D_CONFIGURE_LOGGING "Configurar Logging"
+#define D_CONFIGURE_OTHER "Configurar outras opções"
+#define D_CONFIRM_RESET_CONFIGURATION "Confirmar limpeza de configuração"
+#define D_RESET_CONFIGURATION "Apagar configuração"
+#define D_BACKUP_CONFIGURATION "Salvar configuração"
+#define D_RESTORE_CONFIGURATION "Repor configuração"
+#define D_MAIN_MENU "Menu principal"
+
+#define D_MODULE_PARAMETERS "Parâmetros do módulo"
+#define D_MODULE_TYPE "Tipo de módulo"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Entrada serial"
+#define D_SERIAL_OUT "Saída serial"
+
+#define D_WIFI_PARAMETERS "Parâmetros do wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Encontrar redes wifi"
+#define D_SCAN_DONE "Busca finalizada"
+#define D_NO_NETWORKS_FOUND "Sem redes"
+#define D_REFRESH_TO_SCAN_AGAIN "Nova busca"
+#define D_DUPLICATE_ACCESSPOINT "Ponto de Acesso duplicado"
+#define D_SKIPPING_LOW_QUALITY "Ignorado devido à baixa qualidade do sinal"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "Senha AP1"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "Senha AP2"
+
+#define D_MQTT_PARAMETERS "Parâmetros MQTT"
+#define D_CLIENT "Cliente"
+#define D_FULL_TOPIC "Tópico completo"
+
+#define D_LOGGING_PARAMETERS "Parâmetros Logging"
+#define D_SERIAL_LOG_LEVEL "Nível de registro serial"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Nível de registro WEB"
+#define D_SYS_LOG_LEVEL "Nível de registro Syslog"
+#define D_MORE_DEBUG "Depurar mais"
+#define D_SYSLOG_HOST "Syslog anfitrião"
+#define D_SYSLOG_PORT "Porta Syslog"
+#define D_TELEMETRY_PERIOD "Período de telemetria"
+
+#define D_OTHER_PARAMETERS "Outros parâmetros"
+#define D_TEMPLATE "Modelo"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Senha de WEB Admin"
+#define D_MQTT_ENABLE "MQTT habilitado"
+#define D_FRIENDLY_NAME "Nome amigável"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "Dispositivo único"
+#define D_MULTI_DEVICE "Múltiplos dispositivos"
+
+#define D_CONFIGURE_TEMPLATE "Configurar Modelo"
+#define D_TEMPLATE_PARAMETERS "Parâmetros Modelo"
+#define D_TEMPLATE_NAME "Nome"
+#define D_BASE_TYPE "Baseado em"
+#define D_TEMPLATE_FLAGS "Opções"
+
+#define D_SAVE_CONFIGURATION "Gravar configuração"
+#define D_CONFIGURATION_SAVED "Configuração gravada"
+#define D_CONFIGURATION_RESET "Reinicialização da configuração"
+
+#define D_PROGRAM_VERSION "Versão do programa"
+#define D_BUILD_DATE_AND_TIME "Data e Hora da compilação"
+#define D_CORE_AND_SDK_VERSION "Versão Core/SDK"
+#define D_FLASH_WRITE_COUNT "Contagem de gravação flash"
+#define D_MAC_ADDRESS "Endereço MAC"
+#define D_MQTT_HOST "MQTT Servidor"
+#define D_MQTT_PORT "MQTT Porta"
+#define D_MQTT_CLIENT "MQTT Cliente"
+#define D_MQTT_USER "MQTT Usuário"
+#define D_MQTT_TOPIC "MQTT Tópico"
+#define D_MQTT_GROUP_TOPIC "MQTT Tópico Grupo"
+#define D_MQTT_FULL_TOPIC "MQTT Tópico Completo"
+#define D_MDNS_DISCOVERY "Descobrir mDNS"
+#define D_MDNS_ADVERTISE "Anunciar mDNS"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Flash Size"
+#define D_FREE_PROGRAM_SPACE "Espaço Livre Programa"
+
+#define D_UPGRADE_BY_WEBSERVER "Atualizar pelo servidor WEB"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Iniciar atualização"
+#define D_UPGRADE_BY_FILE_UPLOAD "Atualização por arquivo local"
+#define D_UPLOAD_STARTED "Início do envio"
+#define D_UPGRADE_STARTED "Atualização iniciada"
+#define D_UPLOAD_DONE "Atualização finalizada"
+#define D_UPLOAD_ERR_1 "Nenhum arquivo selecionado"
+#define D_UPLOAD_ERR_2 "Não existe memória disponível"
+#define D_UPLOAD_ERR_3 "Byte mágico não é 0xE9"
+#define D_UPLOAD_ERR_4 "O tamanho do programa é maior do que o tamanho da memória"
+#define D_UPLOAD_ERR_5 "Envio buffer miscompare"
+#define D_UPLOAD_ERR_6 "Falha no envio. Habilitar logging 3"
+#define D_UPLOAD_ERR_7 "Envio cancelado"
+#define D_UPLOAD_ERR_8 "Arquivo inválido"
+#define D_UPLOAD_ERR_9 "Arquivo muito grande"
+#define D_UPLOAD_ERR_10 "Falha ao iniciar chip RF"
+#define D_UPLOAD_ERR_11 "Falha ao apagar o chip RF"
+#define D_UPLOAD_ERR_12 "Falha ao escrever o chip RF"
+#define D_UPLOAD_ERR_13 "Falha ao decodificar o firmware de RF"
+#define D_UPLOAD_ERROR_CODE "Código de erro do envio"
+
+#define D_ENTER_COMMAND "Inserir comando"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 se resposta esperada"
+#define D_NEED_USER_AND_PASSWORD "Necessário user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifique a impressão digital TLS..."
+#define D_TLS_CONNECT_FAILED_TO "TLS não conseguiu ligar"
+#define D_RETRY_IN "Tentativa em"
+#define D_VERIFIED "Verificado impressão digital "
+#define D_INSECURE "Ligação insegura devido à impressão digital inválida"
+#define D_CONNECT_FAILED_TO "A ligação falhou ao"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast desabilitado"
+#define D_MULTICAST_REJOINED "Multicast (re)ingressou"
+#define D_MULTICAST_JOIN_FAILED "Multicast falha no reingresso"
+#define D_FAILED_TO_SEND_RESPONSE "Falha no envio de reposta"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo evento básico"
+#define D_WEMO_EVENT_SERVICE "WeMo evento de serviço"
+#define D_WEMO_META_SERVICE "WeMo serviço meta"
+#define D_WEMO_SETUP "WeMo configuração"
+#define D_RESPONSE_SENT "Resposta enviada"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue setup"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API nao implementada"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 pacotes de resposta enviados"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Parâmetros Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Chave idx"
+#define D_DOMOTICZ_SWITCH_IDX "Interruptor idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Umi"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Umi,Pres"
+ #define D_DOMOTICZ_POWER_ENERGY "Potência,Energia"
+ #define D_DOMOTICZ_ILLUMINANCE "Luminância"
+ #define D_DOMOTICZ_COUNT "Contagem/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltagem/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Corrente/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Qualidade do ar"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Tempo de atualização"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configurar temporizador"
+#define D_TIMER_PARAMETERS "Parâmetros"
+#define D_TIMER_ENABLE "Habilitar temporizadores"
+#define D_TIMER_ARM "Habilitar"
+#define D_TIMER_TIME "Horário"
+#define D_TIMER_DAYS "Dias"
+#define D_TIMER_REPEAT "Repetir"
+#define D_TIMER_OUTPUT "Saída"
+#define D_TIMER_ACTION "Ação"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configurar KNX"
+#define D_KNX_PARAMETERS "Parâmetros KNX"
+#define D_KNX_GENERAL_CONFIG "Geral"
+#define D_KNX_PHYSICAL_ADDRESS "Endereço físico"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Deve ser único na rede KNX)"
+#define D_KNX_ENABLE "Habilitar KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Endereço do grupo para enviar"
+#define D_ADD "Adicionar"
+#define D_DELETE "Remover"
+#define D_REPLY "Responder"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Endereço do grupo para receber"
+#define D_RECEIVED_FROM "Recebido de"
+#define D_KNX_COMMAND_WRITE "Escrever"
+#define D_KNX_COMMAND_READ "Ler"
+#define D_KNX_COMMAND_OTHER "Outros"
+#define D_SENT_TO "Enviar para"
+#define D_KNX_WARNING "O endereço ( 0 / 0 / 0 ) é reservado e não pode ser usado."
+#define D_KNX_ENHANCEMENT "Melhoria da comunicação"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Consumo energético de hoje"
+#define D_ENERGY_YESTERDAY "Consumo energético de ontem"
+#define D_ENERGY_TOTAL "Consumo total de energia"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Aberta"
+#define D_CLOSE "Fechada"
+#define D_DOMOTICZ_SHUTTER "Persiana"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configura PCF8574"
+#define D_PCF8574_PARAMETERS "Parâmetros PCF8574"
+#define D_INVERT_PORTS "Portas Invertidas"
+#define D_DEVICE "Dispositivo"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor ocupado"
+#define D_SENSOR_CRC_ERROR "Erro sensor CRC"
+#define D_SENSORS_FOUND "Sensores encontrados"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Fim do tempo de espera"
+#define D_START_SIGNAL_LOW "Sinal de início baixo"
+#define D_START_SIGNAL_HIGH "Sinal de início elevado"
+#define D_PULSE "pulso"
+#define D_CHECKSUM_FAILURE "Falha checksum"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor não aceitou o comando ACK"
+#define D_SHT1X_FOUND "SHT1X encontrado"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Partículas"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remover peso"
+#define D_HX_CAL_REFERENCE "Peso de referência de carga"
+#define D_HX_CAL_DONE "Calibrado"
+#define D_HX_CAL_FAIL "Falha na calibração"
+#define D_RESET_HX711 "Redefinir escala"
+#define D_CONFIGURE_HX711 "Configurar escala"
+#define D_HX711_PARAMETERS "Parâmetros de escala"
+#define D_ITEM_WEIGHT "Peso do Item"
+#define D_REFERENCE_WEIGHT "Peso de referência"
+#define D_CALIBRATE "Calibrar"
+#define D_CALIBRATION "Calibração"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Direção do vento"
+#define D_TX20_WIND_SPEED "Velocidade do vento"
+#define D_TX20_WIND_SPEED_AVG "Velocidade média do vento"
+#define D_TX20_WIND_SPEED_MAX "Velocidade do vento Máxima"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "L"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "O"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Interruptor" // Suffix "1"
+#define D_SENSOR_BUTTON "Botão" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Contador" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Luz de fundo"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "H"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "M"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "s"
+#define D_UNIT_SECTORS "setores"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "W/h"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Ângulo de Fase"
+#define D_IMPORT_ACTIVE "Importar Ativo"
+#define D_EXPORT_ACTIVE "Exportar Ativo"
+#define D_IMPORT_REACTIVE "Importar Reativo"
+#define D_EXPORT_REACTIVE "Exportar Reativo"
+#define D_TOTAL_REACTIVE "Reativo total"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltagem"
+#define D_PV1_CURRENT "PV1 Corrente"
+#define D_PV1_POWER "PV1 Energia"
+#define D_PV2_VOLTAGE "PV2 Voltagem"
+#define D_PV2_CURRENT "PV2 Corrente"
+#define D_PV2_POWER "PV2 Energia"
+#define D_SOLAR_POWER "Energia Solar"
+#define D_INVERTER_POWER "Potência do Inversor"
+#define D_STATUS "Status"
+#define D_WAITING "Esperando"
+#define D_CHECKING "Verificando"
+#define D_WORKING "Trabalhando"
+#define D_FAILURE "Falha"
+#define D_SOLAX_ERROR_0 "Nenhum código de erro"
+#define D_SOLAX_ERROR_1 "Erro Grid Perdida"
+#define D_SOLAX_ERROR_2 "Falha na Tensão da rede"
+#define D_SOLAX_ERROR_3 "Falha na Frequência do Grid"
+#define D_SOLAX_ERROR_4 "Pv Falha de Tensão"
+#define D_SOLAX_ERROR_5 "Falha de Isolamento"
+#define D_SOLAX_ERROR_6 "Falha de Temperatura excessiva"
+#define D_SOLAX_ERROR_7 "Falha no Ventilador"
+#define D_SOLAX_ERROR_8 "Outra falha do dispositivo"
+
+#endif // _LANGUAGE_PT_BR_H_
diff --git a/tasmota/language/pt-PT.h b/tasmota/language/pt-PT.h
index e9a08c753..a6299c0c8 100644
--- a/tasmota/language/pt-PT.h
+++ b/tasmota/language/pt-PT.h
@@ -1,703 +1,701 @@
-/*
- pt-PT.h - localization for Portuguese - Portugal for Tasmota
-
- Copyright (C) 2019 Paulo Paiva
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_PT_PT_H_
-#define _LANGUAGE_PT_PT_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v7.0.0.1
-\*********************************************************************/
-
-#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 2070
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "pt"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "DomSegTerQuaQuiSexSab"
-#define D_MONTH3LIST "JanFevMarAbrMaiJunJulAgoSepOutNovDez"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Qualidade do Ar"
-#define D_AP "AP" // Ponto de Acesso
-#define D_AS "como"
-#define D_AUTO "AUTO"
-#define D_BLINK "Piscar"
-#define D_BLINKOFF "Piscar Desligado"
-#define D_BOOT_COUNT "Contagem de Inicialização"
-#define D_BRIGHTLIGHT "Brilho"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Botão"
-#define D_BY "por" // Write by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Canal"
-#define D_CO2 "Dioxido de Carbono"
-#define D_CODE "Código" // Button code
-#define D_COLDLIGHT "Luz Fria"
-#define D_COMMAND "Comando"
-#define D_CONNECTED "Ligado"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Contagem"
-#define D_COUNTER "Contador"
-#define D_CURRENT "Corrente" // As in Voltage and Current
-#define D_DATA "Dados"
-#define D_DARKLIGHT "Luz Escura"
-#define D_DEBUG "Depurar"
-#define D_DISABLED "Disabilitado"
-#define D_DISTANCE "Distância"
-#define D_DNS_SERVER "Servidor DNS"
-#define D_DONE "Concluído"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulação"
-#define D_ENABLED "Habilitado"
-#define D_ERASE "Apagar"
-#define D_ERROR "Erro"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Falha"
-#define D_FALLBACK "Retornar"
-#define D_FALLBACK_TOPIC "Tópico para retornar"
-#define D_FALSE "Falso"
-#define D_FILE "Ficheiro"
-#define D_FLOW_RATE "Taxa de Fluxo"
-#define D_FREE_MEMORY "Memoria Livre"
-#define D_FREQUENCY "Frequência"
-#define D_GAS "Gás"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Grupo"
-#define D_HOST "Anfitrião"
-#define D_HOSTNAME "Nome Anfitrião"
-#define D_HUMIDITY "Humidade"
-#define D_ILLUMINANCE "Luminâcia"
-#define D_IMMEDIATE "Immediato" // Button immediate
-#define D_INDEX "Indíce"
-#define D_INFO "Info"
-#define D_INFRARED "Infravermelho"
-#define D_INITIALIZED "Inicializado"
-#define D_IP_ADDRESS "Endereço IP"
-#define D_LIGHT "Luz"
-#define D_LWT "LWT"
-#define D_MODULE "Módulo"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-pressão"
-#define D_NOISE "Ruído"
-#define D_NONE "Nenhum"
-#define D_OFF "Off"
-#define D_OFFLINE "Desconetado"
-#define D_OK "Ok"
-#define D_ON "On"
-#define D_ONLINE "Conetado"
-#define D_PASSWORD "Palavra Chave"
-#define D_PORT "Porta"
-#define D_POWER_FACTOR "Factor de Potência"
-#define D_POWERUSAGE "Potência"
-#define D_POWERUSAGE_ACTIVE "Potência Ativa"
-#define D_POWERUSAGE_APPARENT "Potência Aparente"
-#define D_POWERUSAGE_REACTIVE "Potência Reativa"
-#define D_PRESSURE "Pressão"
-#define D_PRESSUREATSEALEVEL "Pressão ao nível do Mar"
-#define D_PROGRAM_FLASH_SIZE "Tamanho do Programa na Flash"
-#define D_PROGRAM_SIZE "Tamanho do Programa"
-#define D_PROJECT "Projeto"
-#define D_RAIN "Chuva"
-#define D_RECEIVED "Recebido"
-#define D_RESTART "Reiniciar"
-#define D_RESTARTING "A reiniciar"
-#define D_RESTART_REASON "Razão do reinicio"
-#define D_RESTORE "Restauro"
-#define D_RETAINED "Manter"
-#define D_RULE "Regra"
-#define D_SAVE "Guardar"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Início"
-#define D_STD_TIME "STD"
-#define D_STOP "Parar"
-#define D_SUBNET_MASK "Mascara sub rede"
-#define D_SUBSCRIBE_TO "Subscrever"
-#define D_UNSUBSCRIBE_FROM "Cancelar subscrição de"
-#define D_SUCCESSFUL "Successo"
-#define D_SUNRISE "Nascer do Sol"
-#define D_SUNSET "Pôr do Sol"
-#define D_TEMPERATURE "Temperatura"
-#define D_TO "para"
-#define D_TOGGLE "Pressionar"
-#define D_TOPIC "Tópico"
-#define D_TOTAL_USAGE "Uso total"
-#define D_TRANSMIT "Transmitir"
-#define D_TRUE "Verdadeiro"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "Atualizar"
-#define D_UPLOAD "Enviar"
-#define D_UPTIME "Tempo de Atividade"
-#define D_USER "Utilizador"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Indíce UV"
-#define D_UV_INDEX_1 "Baixo"
-#define D_UV_INDEX_2 "Médio"
-#define D_UV_INDEX_3 "Elevado"
-#define D_UV_INDEX_4 "Perigoso"
-#define D_UV_INDEX_5 "QueimaduraL1/2"
-#define D_UV_INDEX_6 "QueimaduraL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "Nível UV"
-#define D_UV_POWER "Poder UV"
-#define D_VERSION "Versão"
-#define D_VOLTAGE "Voltagem"
-#define D_WEIGHT "Peso"
-#define D_WARMLIGHT "Luz Quente"
-#define D_WEB_SERVER "Servidor WEB"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "AVISO esta versão não supporta configurações persistentes"
-#define D_LEVEL_10 "nível 1-0"
-#define D_LEVEL_01 "nível 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Registro de porta série desabilitado"
-#define D_SYSLOG_LOGGING_REENABLED "Registro do Syslog reativado"
-
-#define D_SET_BAUDRATE_TO "Ajuste da velocidade para"
-#define D_RECEIVED_TOPIC "Topico Recebido"
-#define D_DATA_SIZE "Tamanho de Dados"
-#define D_ANALOG_INPUT "Entrada Analógica"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Loop Bloqueado"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig FALHOU com estado"
-#define D_ACTIVE_FOR_3_MINUTES "ativo por 3 minutos"
-#define D_FAILED_TO_START "Falha ao iníciar"
-#define D_PATCH_ISSUE_2186 "Questão 2186"
-#define D_CONNECTING_TO_AP "Ligando ao AP"
-#define D_IN_MODE "em modo"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "A ligação falhou porque nenhum endereço IP foi recebido"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "A ligação falhou porque o AP não pode ser alcançado"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou porque a palavra chave está incorreta"
-#define D_CONNECT_FAILED_AP_TIMEOUT "A ligação falhou porque o tempo excedeu"
-#define D_ATTEMPTING_CONNECTION "A ligar..."
-#define D_CHECKING_CONNECTION "A verificar ligação..."
-#define D_QUERY_DONE "Consulta finalizada. Serviço MQTT não encontrado"
-#define D_MQTT_SERVICE_FOUND "Serviço MQTT encontrado em"
-#define D_FOUND_AT "encontrado em"
-#define D_SYSLOG_HOST_NOT_FOUND "Anfitrião Syslog não encontrado"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Guardado na flash em"
-#define D_LOADED_FROM_FLASH_AT "Lido da flash em"
-#define D_USE_DEFAULTS "Usar predefinições"
-#define D_ERASED_SECTOR "Apagado setor"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Para utilizar o Tasmota, por favor ative o JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MÍNIMO
Por favor atualize"
-#define D_WEBSERVER_ACTIVE_ON "Servidor WEB ativo em"
-#define D_WITH_IP_ADDRESS "com o endereço IP"
-#define D_WEBSERVER_STOPPED "Servitor WEB parou"
-#define D_FILE_NOT_FOUND "Ficheiro não encontrado"
-#define D_REDIRECTED "Redirecionado para o portal ativo"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager configura o Ponto de Acesso e mantem a Estação"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager configura o Ponto de Acesso"
-#define D_TRYING_TO_CONNECT "A tentar ligar o dispositivo à rede"
-
-#define D_RESTART_IN "Reinicia em"
-#define D_SECONDS "segundos"
-#define D_DEVICE_WILL_RESTART "O dispositivo irá reiniciar dentro de alguns segundos"
-#define D_BUTTON_TOGGLE "Alternar"
-#define D_CONFIGURATION "Configuração"
-#define D_INFORMATION "Informação"
-#define D_FIRMWARE_UPGRADE "Atualização de Firmware"
-#define D_CONSOLE "Consola"
-#define D_CONFIRM_RESTART "Confirmar o reinício"
-
-#define D_CONFIGURE_MODULE "Configurar Módulo"
-#define D_CONFIGURE_WIFI "Configurar WiFi"
-#define D_CONFIGURE_MQTT "Configurar MQTT"
-#define D_CONFIGURE_DOMOTICZ "Configurar Domoticz"
-#define D_CONFIGURE_LOGGING "Configurar registro"
-#define D_CONFIGURE_OTHER "Configurar outras opções"
-#define D_CONFIRM_RESET_CONFIGURATION "Confirme o reinício da configuração"
-#define D_RESET_CONFIGURATION "Apagar configuração"
-#define D_BACKUP_CONFIGURATION "Guardar configuração"
-#define D_RESTORE_CONFIGURATION "Repor configuração"
-#define D_MAIN_MENU "Menu Principal"
-
-#define D_MODULE_PARAMETERS "Parametros do Módulo"
-#define D_MODULE_TYPE "Tipo de Módulo"
-#define D_PULLUP_ENABLE "Sem pull-up de Botão/Interruptor"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Entrada de porta série"
-#define D_SERIAL_OUT "Saída de porta série"
-
-#define D_WIFI_PARAMETERS "Parametros Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Procurar redes Wifi"
-#define D_SCAN_DONE "Pesquisa terminada"
-#define D_NO_NETWORKS_FOUND "Sem redes encontradas"
-#define D_REFRESH_TO_SCAN_AGAIN "Atualize para realizar nova pesquisa"
-#define D_DUPLICATE_ACCESSPOINT "Duplicar ponto de Acesso"
-#define D_SKIPPING_LOW_QUALITY "Ignorado devido a baixa qualidade do sinal"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "SSId do AP1"
-#define D_AP1_PASSWORD "Palavra Chave do AP1"
-#define D_AP2_SSID "SSId do AP2"
-#define D_AP2_PASSWORD "Palavra Chave do AP2"
-
-#define D_MQTT_PARAMETERS "Parametros MQTT"
-#define D_CLIENT "Cliente"
-#define D_FULL_TOPIC "Tópico completo"
-
-#define D_LOGGING_PARAMETERS "Parametros para registro"
-#define D_SERIAL_LOG_LEVEL "Nível de registro na porta série"
-#define D_MQTT_LOG_LEVEL "Nível de registro MQTT"
-#define D_WEB_LOG_LEVEL "Nível de registro WEB"
-#define D_SYS_LOG_LEVEL "Nível de registro do Syslog"
-#define D_MORE_DEBUG "Depurar mais"
-#define D_SYSLOG_HOST "Anfitrião Syslog"
-#define D_SYSLOG_PORT "Porta Syslog"
-#define D_TELEMETRY_PERIOD "Período de Telemetria"
-
-#define D_OTHER_PARAMETERS "Outros parametros"
-#define D_TEMPLATE "Modelo"
-#define D_ACTIVATE "Ativar"
-#define D_WEB_ADMIN_PASSWORD "Palavra Chave do Admin WEB"
-#define D_MQTT_ENABLE "MQTT habilitado"
-#define D_FRIENDLY_NAME "Nome amigável"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "dispositivo único"
-#define D_MULTI_DEVICE "dispositivo múltiplo"
-
-#define D_CONFIGURE_TEMPLATE "Configurar Modelo"
-#define D_TEMPLATE_PARAMETERS "Parametros do Modelo"
-#define D_TEMPLATE_NAME "Nome do Modelo"
-#define D_BASE_TYPE "Baseado em"
-#define D_TEMPLATE_FLAGS "Opções"
-
-#define D_SAVE_CONFIGURATION "Guardar configuração"
-#define D_CONFIGURATION_SAVED "Configuração guardada"
-#define D_CONFIGURATION_RESET "Reinicializar a configuração"
-
-#define D_PROGRAM_VERSION "Versão do Programa"
-#define D_BUILD_DATE_AND_TIME "Data e Hora de criação"
-#define D_CORE_AND_SDK_VERSION "Versão Core/SDK"
-#define D_FLASH_WRITE_COUNT "Contagem de gravação da flash"
-#define D_MAC_ADDRESS "Endereço MAC"
-#define D_MQTT_HOST "Servidor MQTT"
-#define D_MQTT_PORT "Porta MQTT"
-#define D_MQTT_CLIENT "Cliente MQTT"
-#define D_MQTT_USER "Utilizador MQTT"
-#define D_MQTT_TOPIC "Tópico MQTT"
-#define D_MQTT_GROUP_TOPIC "Tópico MQTT de Grupo"
-#define D_MQTT_FULL_TOPIC "Tópico MQTT Completo"
-#define D_MDNS_DISCOVERY "Descobrir mDNS"
-#define D_MDNS_ADVERTISE "Anunciar mDNS"
-#define D_ESP_CHIP_ID "ID do chip ESP"
-#define D_FLASH_CHIP_ID "ID do chip da Flash"
-#define D_FLASH_CHIP_SIZE "Tamanho da Flash"
-#define D_FREE_PROGRAM_SPACE "Espaço de Programa Livre"
-
-#define D_UPGRADE_BY_WEBSERVER "Atualizar pelo servidor WEB"
-#define D_OTA_URL "Url OTA"
-#define D_START_UPGRADE "Iniciar atualização"
-#define D_UPGRADE_BY_FILE_UPLOAD "Atualizar por envio de ficheiro"
-#define D_UPLOAD_STARTED "Envio Iniciado"
-#define D_UPGRADE_STARTED "Atualização Iniciada"
-#define D_UPLOAD_DONE "Atualização Finalizada"
-#define D_UPLOAD_ERR_1 "Nenhum ficheiro selecionado"
-#define D_UPLOAD_ERR_2 "Não existe espaço disponível"
-#define D_UPLOAD_ERR_3 "O Byte mágico não é 0xE9"
-#define D_UPLOAD_ERR_4 "O tamanho do programa e maior do que o tamanho real da flash"
-#define D_UPLOAD_ERR_5 "Comparação incorreta do buffer de upload"
-#define D_UPLOAD_ERR_6 "Falha no envio. Habilitar registro 3"
-#define D_UPLOAD_ERR_7 "Envio cancelado"
-#define D_UPLOAD_ERR_8 "Ficheiro inválido"
-#define D_UPLOAD_ERR_9 "Ficheiro demasiado grande"
-#define D_UPLOAD_ERR_10 "Falha ao iniciar o chip de RF"
-#define D_UPLOAD_ERR_11 "Falha ao apagar o chip de RF"
-#define D_UPLOAD_ERR_12 "Falha ao escrever no chip de RF"
-#define D_UPLOAD_ERR_13 "Falha ao descodificar o firmware RF"
-#define D_UPLOAD_ERROR_CODE "Código de erro do envio"
-
-#define D_ENTER_COMMAND "Inserir comando"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 se resposta esperada"
-#define D_NEED_USER_AND_PASSWORD "Necessário user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifique a impressão digital TLS..."
-#define D_TLS_CONNECT_FAILED_TO "TLS não conseguiu ligar"
-#define D_RETRY_IN "Nova tentativa em"
-#define D_VERIFIED "Verificado usando impressão digital"
-#define D_INSECURE "Ligação insegura devido à impressão digital inválida"
-#define D_CONNECT_FAILED_TO "A ligação falhou ao"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast desabilitado"
-#define D_MULTICAST_REJOINED "Multicast (re)ingressado"
-#define D_MULTICAST_JOIN_FAILED "Multicast falha no reingresso"
-#define D_FAILED_TO_SEND_RESPONSE "Falha no envio de reposta"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo evento básico"
-#define D_WEMO_EVENT_SERVICE "WeMo evento de serviço"
-#define D_WEMO_META_SERVICE "WeMo serviço meta"
-#define D_WEMO_SETUP "WeMo configuração"
-#define D_RESPONSE_SENT "Resposta enviada"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Configuração do Hue"
-#define D_HUE_API_NOT_IMPLEMENTED "API Hue nao implementada"
-#define D_HUE_API "API Hue"
-#define D_HUE_POST_ARGS "Argumentos de POST HUE"
-#define D_3_RESPONSE_PACKETS_SENT "3 pacotes de resposta enviados"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Parametros Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Chave idx"
-#define D_DOMOTICZ_SWITCH_IDX "Interruptor idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Potência,Energia"
- #define D_DOMOTICZ_ILLUMINANCE "Luminâcia"
- #define D_DOMOTICZ_COUNT "Contagem/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltagem/PM2.5"
- #define D_DOMOTICZ_CURRENT "Corrente/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Qualidade do Ar"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Temporizador de atualização"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configurar temporizador"
-#define D_TIMER_PARAMETERS "Parâmetros do temporizador"
-#define D_TIMER_ENABLE "Habilitar Temporizadores"
-#define D_TIMER_ARM "Armar"
-#define D_TIMER_TIME "Tempo"
-#define D_TIMER_DAYS "Dias"
-#define D_TIMER_REPEAT "Repetir"
-#define D_TIMER_OUTPUT "Aaída"
-#define D_TIMER_ACTION "Açao"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configurar KNX"
-#define D_KNX_PARAMETERS "Parâmetros KNX"
-#define D_KNX_GENERAL_CONFIG "Geral"
-#define D_KNX_PHYSICAL_ADDRESS "Endereço físico"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Deve ser exclusivo na rede KNX )"
-#define D_KNX_ENABLE "Habilitar KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dados para enviar para Endereços de Grupo"
-#define D_ADD "Adicionar"
-#define D_DELETE "Remover"
-#define D_REPLY "Responder"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Endereços de Grupo de onde receber dados"
-#define D_RECEIVED_FROM "Recebido de"
-#define D_KNX_COMMAND_WRITE "Escrever"
-#define D_KNX_COMMAND_READ "Ler"
-#define D_KNX_COMMAND_OTHER "Outro"
-#define D_SENT_TO "enviar para"
-#define D_KNX_WARNING "O Endereço de Grupo ( 0 / 0 / 0 ) está reservado e não pode ser usado."
-#define D_KNX_ENHANCEMENT "Melhoria de Comunicação"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Consumo energético de hoje"
-#define D_ENERGY_YESTERDAY "Consumo energético de ontem"
-#define D_ENERGY_TOTAL "Consumo energético total"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Abrir"
-#define D_CLOSE "Fechar"
-#define D_DOMOTICZ_SHUTTER "Estore"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configurar PCF8574"
-#define D_PCF8574_PARAMETERS "Parâmetros PCF8574"
-#define D_INVERT_PORTS "Inverter Portas"
-#define D_DEVICE "Dispositivo"
-#define D_DEVICE_INPUT "Entrada"
-#define D_DEVICE_OUTPUT "Saída"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor ocupado"
-#define D_SENSOR_CRC_ERROR "Erro no CRC do sensor"
-#define D_SENSORS_FOUND "Sensores encontrados"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Fim do tempo de espera"
-#define D_START_SIGNAL_LOW "Sinal de início baixo"
-#define D_START_SIGNAL_HIGH "Sinal de início elevado"
-#define D_PULSE "pulso"
-#define D_CHECKSUM_FAILURE "Falha na soma de verificação"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor não aceitou o comando ACK"
-#define D_SHT1X_FOUND "SHT1X encontrado"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Partículas"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remover peso"
-#define D_HX_CAL_REFERENCE "Carregar peso de referência"
-#define D_HX_CAL_DONE "Calibrado"
-#define D_HX_CAL_FAIL "Falha na calibração"
-#define D_RESET_HX711 "Reiniciar balança"
-#define D_CONFIGURE_HX711 "Configurar balança"
-#define D_HX711_PARAMETERS "Parâmetros da balança"
-#define D_ITEM_WEIGHT "Peso do item"
-#define D_REFERENCE_WEIGHT "Peso de referência"
-#define D_CALIBRATE "Calibrar"
-#define D_CALIBRATION "Calibração"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Direção do vento"
-#define D_TX20_WIND_SPEED "Velocidade do vento"
-#define D_TX20_WIND_SPEED_AVG "Velocidade média do vento"
-#define D_TX20_WIND_SPEED_MAX "Velocidade máxima do vento"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "O"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Interruptor" // Suffix "1"
-#define D_SENSOR_BUTTON "Botão" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Contador" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Luz fundo"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "Sensor RF"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotativo" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "setores"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Ângulo de fase"
-#define D_IMPORT_ACTIVE "Ativo importado"
-#define D_EXPORT_ACTIVE "Ativo exportado"
-#define D_IMPORT_REACTIVE "Reativo importado"
-#define D_EXPORT_REACTIVE "Reativo exportado"
-#define D_TOTAL_REACTIVE "Reactivo total"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "Voltagem PV1"
-#define D_PV1_CURRENT "Corrente PV1"
-#define D_PV1_POWER "Potência PV1"
-#define D_PV2_VOLTAGE "Voltagem PV2"
-#define D_PV2_CURRENT "Corrente PV2"
-#define D_PV2_POWER "Potência PV2"
-#define D_SOLAR_POWER "Potência Solar"
-#define D_INVERTER_POWER "Potência do Inversor"
-#define D_STATUS "Estado"
-#define D_WAITING "Esperando"
-#define D_CHECKING "Verificando"
-#define D_WORKING "Trabalhando"
-#define D_FAILURE "Falha"
-#define D_SOLAX_ERROR_0 "Nenhum código de erro"
-#define D_SOLAX_ERROR_1 "Falha devido a perda de rede"
-#define D_SOLAX_ERROR_2 "Falha devido a perda de tensão"
-#define D_SOLAX_ERROR_3 "Falha devido a perda de frequência"
-#define D_SOLAX_ERROR_4 "Falha de tensão de Pv"
-#define D_SOLAX_ERROR_5 "Falha de isolamento"
-#define D_SOLAX_ERROR_6 "Falha de temperatura excessiva"
-#define D_SOLAX_ERROR_7 "Falha no ventilador"
-#define D_SOLAX_ERROR_8 "Outra falha no dispositivo"
-
-#endif // _LANGUAGE_PT_PT_H_
+/*
+ pt-PT.h - localization for Portuguese - Portugal for Tasmota
+
+ Copyright (C) 2019 Paulo Paiva
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_PT_PT_H_
+#define _LANGUAGE_PT_PT_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v7.0.0.1
+\*********************************************************************/
+
+#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 2070
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "pt"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "DomSegTerQuaQuiSexSab"
+#define D_MONTH3LIST "JanFevMarAbrMaiJunJulAgoSepOutNovDez"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Qualidade do Ar"
+#define D_AP "AP" // Ponto de Acesso
+#define D_AS "como"
+#define D_AUTO "AUTO"
+#define D_BLINK "Piscar"
+#define D_BLINKOFF "Piscar Desligado"
+#define D_BOOT_COUNT "Contagem de Inicialização"
+#define D_BRIGHTLIGHT "Brilho"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Botão"
+#define D_BY "por" // Write by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Canal"
+#define D_CO2 "Dioxido de Carbono"
+#define D_CODE "Código" // Button code
+#define D_COLDLIGHT "Luz Fria"
+#define D_COMMAND "Comando"
+#define D_CONNECTED "Ligado"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Contagem"
+#define D_COUNTER "Contador"
+#define D_CURRENT "Corrente" // As in Voltage and Current
+#define D_DATA "Dados"
+#define D_DARKLIGHT "Luz Escura"
+#define D_DEBUG "Depurar"
+#define D_DISABLED "Disabilitado"
+#define D_DISTANCE "Distância"
+#define D_DNS_SERVER "Servidor DNS"
+#define D_DONE "Concluído"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulação"
+#define D_ENABLED "Habilitado"
+#define D_ERASE "Apagar"
+#define D_ERROR "Erro"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Falha"
+#define D_FALLBACK "Retornar"
+#define D_FALLBACK_TOPIC "Tópico para retornar"
+#define D_FALSE "Falso"
+#define D_FILE "Ficheiro"
+#define D_FLOW_RATE "Taxa de Fluxo"
+#define D_FREE_MEMORY "Memoria Livre"
+#define D_FREQUENCY "Frequência"
+#define D_GAS "Gás"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Grupo"
+#define D_HOST "Anfitrião"
+#define D_HOSTNAME "Nome Anfitrião"
+#define D_HUMIDITY "Humidade"
+#define D_ILLUMINANCE "Luminâcia"
+#define D_IMMEDIATE "Immediato" // Button immediate
+#define D_INDEX "Indíce"
+#define D_INFO "Info"
+#define D_INFRARED "Infravermelho"
+#define D_INITIALIZED "Inicializado"
+#define D_IP_ADDRESS "Endereço IP"
+#define D_LIGHT "Luz"
+#define D_LWT "LWT"
+#define D_MODULE "Módulo"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-pressão"
+#define D_NOISE "Ruído"
+#define D_NONE "Nenhum"
+#define D_OFF "Off"
+#define D_OFFLINE "Desconetado"
+#define D_OK "Ok"
+#define D_ON "On"
+#define D_ONLINE "Conetado"
+#define D_PASSWORD "Palavra Chave"
+#define D_PORT "Porta"
+#define D_POWER_FACTOR "Factor de Potência"
+#define D_POWERUSAGE "Potência"
+#define D_POWERUSAGE_ACTIVE "Potência Ativa"
+#define D_POWERUSAGE_APPARENT "Potência Aparente"
+#define D_POWERUSAGE_REACTIVE "Potência Reativa"
+#define D_PRESSURE "Pressão"
+#define D_PRESSUREATSEALEVEL "Pressão ao nível do Mar"
+#define D_PROGRAM_FLASH_SIZE "Tamanho do Programa na Flash"
+#define D_PROGRAM_SIZE "Tamanho do Programa"
+#define D_PROJECT "Projeto"
+#define D_RAIN "Chuva"
+#define D_RECEIVED "Recebido"
+#define D_RESTART "Reiniciar"
+#define D_RESTARTING "A reiniciar"
+#define D_RESTART_REASON "Razão do reinicio"
+#define D_RESTORE "Restauro"
+#define D_RETAINED "Manter"
+#define D_RULE "Regra"
+#define D_SAVE "Guardar"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Início"
+#define D_STD_TIME "STD"
+#define D_STOP "Parar"
+#define D_SUBNET_MASK "Mascara sub rede"
+#define D_SUBSCRIBE_TO "Subscrever"
+#define D_UNSUBSCRIBE_FROM "Cancelar subscrição de"
+#define D_SUCCESSFUL "Successo"
+#define D_SUNRISE "Nascer do Sol"
+#define D_SUNSET "Pôr do Sol"
+#define D_TEMPERATURE "Temperatura"
+#define D_TO "para"
+#define D_TOGGLE "Pressionar"
+#define D_TOPIC "Tópico"
+#define D_TOTAL_USAGE "Uso total"
+#define D_TRANSMIT "Transmitir"
+#define D_TRUE "Verdadeiro"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "Atualizar"
+#define D_UPLOAD "Enviar"
+#define D_UPTIME "Tempo de Atividade"
+#define D_USER "Utilizador"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Indíce UV"
+#define D_UV_INDEX_1 "Baixo"
+#define D_UV_INDEX_2 "Médio"
+#define D_UV_INDEX_3 "Elevado"
+#define D_UV_INDEX_4 "Perigoso"
+#define D_UV_INDEX_5 "QueimaduraL1/2"
+#define D_UV_INDEX_6 "QueimaduraL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "Nível UV"
+#define D_UV_POWER "Poder UV"
+#define D_VERSION "Versão"
+#define D_VOLTAGE "Voltagem"
+#define D_WEIGHT "Peso"
+#define D_WARMLIGHT "Luz Quente"
+#define D_WEB_SERVER "Servidor WEB"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "AVISO esta versão não supporta configurações persistentes"
+#define D_LEVEL_10 "nível 1-0"
+#define D_LEVEL_01 "nível 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Registro de porta série desabilitado"
+#define D_SYSLOG_LOGGING_REENABLED "Registro do Syslog reativado"
+
+#define D_SET_BAUDRATE_TO "Ajuste da velocidade para"
+#define D_RECEIVED_TOPIC "Topico Recebido"
+#define D_DATA_SIZE "Tamanho de Dados"
+#define D_ANALOG_INPUT "Entrada Analógica"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Loop Bloqueado"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig FALHOU com estado"
+#define D_ACTIVE_FOR_3_MINUTES "ativo por 3 minutos"
+#define D_FAILED_TO_START "Falha ao iníciar"
+#define D_PATCH_ISSUE_2186 "Questão 2186"
+#define D_CONNECTING_TO_AP "Ligando ao AP"
+#define D_IN_MODE "em modo"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "A ligação falhou porque nenhum endereço IP foi recebido"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "A ligação falhou porque o AP não pode ser alcançado"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou porque a palavra chave está incorreta"
+#define D_CONNECT_FAILED_AP_TIMEOUT "A ligação falhou porque o tempo excedeu"
+#define D_ATTEMPTING_CONNECTION "A ligar..."
+#define D_CHECKING_CONNECTION "A verificar ligação..."
+#define D_QUERY_DONE "Consulta finalizada. Serviço MQTT não encontrado"
+#define D_MQTT_SERVICE_FOUND "Serviço MQTT encontrado em"
+#define D_FOUND_AT "encontrado em"
+#define D_SYSLOG_HOST_NOT_FOUND "Anfitrião Syslog não encontrado"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Guardado na flash em"
+#define D_LOADED_FROM_FLASH_AT "Lido da flash em"
+#define D_USE_DEFAULTS "Usar predefinições"
+#define D_ERASED_SECTOR "Apagado setor"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Para utilizar o Tasmota, por favor ative o JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MÍNIMO
Por favor atualize"
+#define D_WEBSERVER_ACTIVE_ON "Servidor WEB ativo em"
+#define D_WITH_IP_ADDRESS "com o endereço IP"
+#define D_WEBSERVER_STOPPED "Servitor WEB parou"
+#define D_FILE_NOT_FOUND "Ficheiro não encontrado"
+#define D_REDIRECTED "Redirecionado para o portal ativo"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager configura o Ponto de Acesso e mantem a Estação"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager configura o Ponto de Acesso"
+#define D_TRYING_TO_CONNECT "A tentar ligar o dispositivo à rede"
+
+#define D_RESTART_IN "Reinicia em"
+#define D_SECONDS "segundos"
+#define D_DEVICE_WILL_RESTART "O dispositivo irá reiniciar dentro de alguns segundos"
+#define D_BUTTON_TOGGLE "Alternar"
+#define D_CONFIGURATION "Configuração"
+#define D_INFORMATION "Informação"
+#define D_FIRMWARE_UPGRADE "Atualização de Firmware"
+#define D_CONSOLE "Consola"
+#define D_CONFIRM_RESTART "Confirmar o reinício"
+
+#define D_CONFIGURE_MODULE "Configurar Módulo"
+#define D_CONFIGURE_WIFI "Configurar WiFi"
+#define D_CONFIGURE_MQTT "Configurar MQTT"
+#define D_CONFIGURE_DOMOTICZ "Configurar Domoticz"
+#define D_CONFIGURE_LOGGING "Configurar registro"
+#define D_CONFIGURE_OTHER "Configurar outras opções"
+#define D_CONFIRM_RESET_CONFIGURATION "Confirme o reinício da configuração"
+#define D_RESET_CONFIGURATION "Apagar configuração"
+#define D_BACKUP_CONFIGURATION "Guardar configuração"
+#define D_RESTORE_CONFIGURATION "Repor configuração"
+#define D_MAIN_MENU "Menu Principal"
+
+#define D_MODULE_PARAMETERS "Parametros do Módulo"
+#define D_MODULE_TYPE "Tipo de Módulo"
+#define D_PULLUP_ENABLE "Sem pull-up de Botão/Interruptor"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Entrada de porta série"
+#define D_SERIAL_OUT "Saída de porta série"
+
+#define D_WIFI_PARAMETERS "Parametros Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Procurar redes Wifi"
+#define D_SCAN_DONE "Pesquisa terminada"
+#define D_NO_NETWORKS_FOUND "Sem redes encontradas"
+#define D_REFRESH_TO_SCAN_AGAIN "Atualize para realizar nova pesquisa"
+#define D_DUPLICATE_ACCESSPOINT "Duplicar ponto de Acesso"
+#define D_SKIPPING_LOW_QUALITY "Ignorado devido a baixa qualidade do sinal"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "SSId do AP1"
+#define D_AP1_PASSWORD "Palavra Chave do AP1"
+#define D_AP2_SSID "SSId do AP2"
+#define D_AP2_PASSWORD "Palavra Chave do AP2"
+
+#define D_MQTT_PARAMETERS "Parametros MQTT"
+#define D_CLIENT "Cliente"
+#define D_FULL_TOPIC "Tópico completo"
+
+#define D_LOGGING_PARAMETERS "Parametros para registro"
+#define D_SERIAL_LOG_LEVEL "Nível de registro na porta série"
+#define D_MQTT_LOG_LEVEL "Nível de registro MQTT"
+#define D_WEB_LOG_LEVEL "Nível de registro WEB"
+#define D_SYS_LOG_LEVEL "Nível de registro do Syslog"
+#define D_MORE_DEBUG "Depurar mais"
+#define D_SYSLOG_HOST "Anfitrião Syslog"
+#define D_SYSLOG_PORT "Porta Syslog"
+#define D_TELEMETRY_PERIOD "Período de Telemetria"
+
+#define D_OTHER_PARAMETERS "Outros parametros"
+#define D_TEMPLATE "Modelo"
+#define D_ACTIVATE "Ativar"
+#define D_WEB_ADMIN_PASSWORD "Palavra Chave do Admin WEB"
+#define D_MQTT_ENABLE "MQTT habilitado"
+#define D_FRIENDLY_NAME "Nome amigável"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "dispositivo único"
+#define D_MULTI_DEVICE "dispositivo múltiplo"
+
+#define D_CONFIGURE_TEMPLATE "Configurar Modelo"
+#define D_TEMPLATE_PARAMETERS "Parametros do Modelo"
+#define D_TEMPLATE_NAME "Nome do Modelo"
+#define D_BASE_TYPE "Baseado em"
+#define D_TEMPLATE_FLAGS "Opções"
+
+#define D_SAVE_CONFIGURATION "Guardar configuração"
+#define D_CONFIGURATION_SAVED "Configuração guardada"
+#define D_CONFIGURATION_RESET "Reinicializar a configuração"
+
+#define D_PROGRAM_VERSION "Versão do Programa"
+#define D_BUILD_DATE_AND_TIME "Data e Hora de criação"
+#define D_CORE_AND_SDK_VERSION "Versão Core/SDK"
+#define D_FLASH_WRITE_COUNT "Contagem de gravação da flash"
+#define D_MAC_ADDRESS "Endereço MAC"
+#define D_MQTT_HOST "Servidor MQTT"
+#define D_MQTT_PORT "Porta MQTT"
+#define D_MQTT_CLIENT "Cliente MQTT"
+#define D_MQTT_USER "Utilizador MQTT"
+#define D_MQTT_TOPIC "Tópico MQTT"
+#define D_MQTT_GROUP_TOPIC "Tópico MQTT de Grupo"
+#define D_MQTT_FULL_TOPIC "Tópico MQTT Completo"
+#define D_MDNS_DISCOVERY "Descobrir mDNS"
+#define D_MDNS_ADVERTISE "Anunciar mDNS"
+#define D_ESP_CHIP_ID "ID do chip ESP"
+#define D_FLASH_CHIP_ID "ID do chip da Flash"
+#define D_FLASH_CHIP_SIZE "Tamanho da Flash"
+#define D_FREE_PROGRAM_SPACE "Espaço de Programa Livre"
+
+#define D_UPGRADE_BY_WEBSERVER "Atualizar pelo servidor WEB"
+#define D_OTA_URL "Url OTA"
+#define D_START_UPGRADE "Iniciar atualização"
+#define D_UPGRADE_BY_FILE_UPLOAD "Atualizar por envio de ficheiro"
+#define D_UPLOAD_STARTED "Envio Iniciado"
+#define D_UPGRADE_STARTED "Atualização Iniciada"
+#define D_UPLOAD_DONE "Atualização Finalizada"
+#define D_UPLOAD_ERR_1 "Nenhum ficheiro selecionado"
+#define D_UPLOAD_ERR_2 "Não existe espaço disponível"
+#define D_UPLOAD_ERR_3 "O Byte mágico não é 0xE9"
+#define D_UPLOAD_ERR_4 "O tamanho do programa e maior do que o tamanho real da flash"
+#define D_UPLOAD_ERR_5 "Comparação incorreta do buffer de upload"
+#define D_UPLOAD_ERR_6 "Falha no envio. Habilitar registro 3"
+#define D_UPLOAD_ERR_7 "Envio cancelado"
+#define D_UPLOAD_ERR_8 "Ficheiro inválido"
+#define D_UPLOAD_ERR_9 "Ficheiro demasiado grande"
+#define D_UPLOAD_ERR_10 "Falha ao iniciar o chip de RF"
+#define D_UPLOAD_ERR_11 "Falha ao apagar o chip de RF"
+#define D_UPLOAD_ERR_12 "Falha ao escrever no chip de RF"
+#define D_UPLOAD_ERR_13 "Falha ao descodificar o firmware RF"
+#define D_UPLOAD_ERROR_CODE "Código de erro do envio"
+
+#define D_ENTER_COMMAND "Inserir comando"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Habilitar weblog 2 se resposta esperada"
+#define D_NEED_USER_AND_PASSWORD "Necessário user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifique a impressão digital TLS..."
+#define D_TLS_CONNECT_FAILED_TO "TLS não conseguiu ligar"
+#define D_RETRY_IN "Nova tentativa em"
+#define D_VERIFIED "Verificado usando impressão digital"
+#define D_INSECURE "Ligação insegura devido à impressão digital inválida"
+#define D_CONNECT_FAILED_TO "A ligação falhou ao"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast desabilitado"
+#define D_MULTICAST_REJOINED "Multicast (re)ingressado"
+#define D_MULTICAST_JOIN_FAILED "Multicast falha no reingresso"
+#define D_FAILED_TO_SEND_RESPONSE "Falha no envio de reposta"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo evento básico"
+#define D_WEMO_EVENT_SERVICE "WeMo evento de serviço"
+#define D_WEMO_META_SERVICE "WeMo serviço meta"
+#define D_WEMO_SETUP "WeMo configuração"
+#define D_RESPONSE_SENT "Resposta enviada"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Configuração do Hue"
+#define D_HUE_API_NOT_IMPLEMENTED "API Hue nao implementada"
+#define D_HUE_API "API Hue"
+#define D_HUE_POST_ARGS "Argumentos de POST HUE"
+#define D_3_RESPONSE_PACKETS_SENT "3 pacotes de resposta enviados"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Parametros Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Chave idx"
+#define D_DOMOTICZ_SWITCH_IDX "Interruptor idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Potência,Energia"
+ #define D_DOMOTICZ_ILLUMINANCE "Luminâcia"
+ #define D_DOMOTICZ_COUNT "Contagem/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltagem/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Corrente/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Qualidade do Ar"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Temporizador de atualização"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configurar temporizador"
+#define D_TIMER_PARAMETERS "Parâmetros do temporizador"
+#define D_TIMER_ENABLE "Habilitar Temporizadores"
+#define D_TIMER_ARM "Armar"
+#define D_TIMER_TIME "Tempo"
+#define D_TIMER_DAYS "Dias"
+#define D_TIMER_REPEAT "Repetir"
+#define D_TIMER_OUTPUT "Aaída"
+#define D_TIMER_ACTION "Açao"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configurar KNX"
+#define D_KNX_PARAMETERS "Parâmetros KNX"
+#define D_KNX_GENERAL_CONFIG "Geral"
+#define D_KNX_PHYSICAL_ADDRESS "Endereço físico"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Deve ser exclusivo na rede KNX )"
+#define D_KNX_ENABLE "Habilitar KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dados para enviar para Endereços de Grupo"
+#define D_ADD "Adicionar"
+#define D_DELETE "Remover"
+#define D_REPLY "Responder"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Endereços de Grupo de onde receber dados"
+#define D_RECEIVED_FROM "Recebido de"
+#define D_KNX_COMMAND_WRITE "Escrever"
+#define D_KNX_COMMAND_READ "Ler"
+#define D_KNX_COMMAND_OTHER "Outro"
+#define D_SENT_TO "enviar para"
+#define D_KNX_WARNING "O Endereço de Grupo ( 0 / 0 / 0 ) está reservado e não pode ser usado."
+#define D_KNX_ENHANCEMENT "Melhoria de Comunicação"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Consumo energético de hoje"
+#define D_ENERGY_YESTERDAY "Consumo energético de ontem"
+#define D_ENERGY_TOTAL "Consumo energético total"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Abrir"
+#define D_CLOSE "Fechar"
+#define D_DOMOTICZ_SHUTTER "Estore"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configurar PCF8574"
+#define D_PCF8574_PARAMETERS "Parâmetros PCF8574"
+#define D_INVERT_PORTS "Inverter Portas"
+#define D_DEVICE "Dispositivo"
+#define D_DEVICE_INPUT "Entrada"
+#define D_DEVICE_OUTPUT "Saída"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor ocupado"
+#define D_SENSOR_CRC_ERROR "Erro no CRC do sensor"
+#define D_SENSORS_FOUND "Sensores encontrados"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Fim do tempo de espera"
+#define D_START_SIGNAL_LOW "Sinal de início baixo"
+#define D_START_SIGNAL_HIGH "Sinal de início elevado"
+#define D_PULSE "pulso"
+#define D_CHECKSUM_FAILURE "Falha na soma de verificação"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor não aceitou o comando ACK"
+#define D_SHT1X_FOUND "SHT1X encontrado"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Partículas"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remover peso"
+#define D_HX_CAL_REFERENCE "Carregar peso de referência"
+#define D_HX_CAL_DONE "Calibrado"
+#define D_HX_CAL_FAIL "Falha na calibração"
+#define D_RESET_HX711 "Reiniciar balança"
+#define D_CONFIGURE_HX711 "Configurar balança"
+#define D_HX711_PARAMETERS "Parâmetros da balança"
+#define D_ITEM_WEIGHT "Peso do item"
+#define D_REFERENCE_WEIGHT "Peso de referência"
+#define D_CALIBRATE "Calibrar"
+#define D_CALIBRATION "Calibração"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Direção do vento"
+#define D_TX20_WIND_SPEED "Velocidade do vento"
+#define D_TX20_WIND_SPEED_AVG "Velocidade média do vento"
+#define D_TX20_WIND_SPEED_MAX "Velocidade máxima do vento"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "O"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Interruptor" // Suffix "1"
+#define D_SENSOR_BUTTON "Botão" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Contador" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Luz fundo"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "Sensor RF"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotativo" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "setores"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Ângulo de fase"
+#define D_IMPORT_ACTIVE "Ativo importado"
+#define D_EXPORT_ACTIVE "Ativo exportado"
+#define D_IMPORT_REACTIVE "Reativo importado"
+#define D_EXPORT_REACTIVE "Reativo exportado"
+#define D_TOTAL_REACTIVE "Reactivo total"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "Voltagem PV1"
+#define D_PV1_CURRENT "Corrente PV1"
+#define D_PV1_POWER "Potência PV1"
+#define D_PV2_VOLTAGE "Voltagem PV2"
+#define D_PV2_CURRENT "Corrente PV2"
+#define D_PV2_POWER "Potência PV2"
+#define D_SOLAR_POWER "Potência Solar"
+#define D_INVERTER_POWER "Potência do Inversor"
+#define D_STATUS "Estado"
+#define D_WAITING "Esperando"
+#define D_CHECKING "Verificando"
+#define D_WORKING "Trabalhando"
+#define D_FAILURE "Falha"
+#define D_SOLAX_ERROR_0 "Nenhum código de erro"
+#define D_SOLAX_ERROR_1 "Falha devido a perda de rede"
+#define D_SOLAX_ERROR_2 "Falha devido a perda de tensão"
+#define D_SOLAX_ERROR_3 "Falha devido a perda de frequência"
+#define D_SOLAX_ERROR_4 "Falha de tensão de Pv"
+#define D_SOLAX_ERROR_5 "Falha de isolamento"
+#define D_SOLAX_ERROR_6 "Falha de temperatura excessiva"
+#define D_SOLAX_ERROR_7 "Falha no ventilador"
+#define D_SOLAX_ERROR_8 "Outra falha no dispositivo"
+
+#endif // _LANGUAGE_PT_PT_H_
diff --git a/tasmota/language/ru-RU.h b/tasmota/language/ru-RU.h
index a603216a9..3bd788ede 100644
--- a/tasmota/language/ru-RU.h
+++ b/tasmota/language/ru-RU.h
@@ -1,703 +1,701 @@
-/*
- ru-RU.h - localization for Russian - Rissia for Tasmota
-
- Copyright (C) 2019 Theo Arends / roman-vn
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_RU_RU_H_
-#define _LANGUAGE_RU_RU_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.12.0b
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1049
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "ru"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "ВскПонВтрСрдЧетПятСуб"
-#define D_MONTH3LIST "ЯнвФевМарАпрМайИюнИюлАвгСенОктНояДек"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Качество воздуха"
-#define D_AP "AP" // Access Point
-#define D_AS "как"
-#define D_AUTO "АВТО"
-#define D_BLINK "Мигать"
-#define D_BLINKOFF "Не Мигать"
-#define D_BOOT_COUNT "Количество загрузок"
-#define D_BRIGHTLIGHT "Яркость"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Кнопка"
-#define D_BY "by" // Written by me
-#define D_BYTES "Байт"
-#define D_CELSIUS "Цельсия"
-#define D_CHANNEL "Channel"
-#define D_CO2 "Углекислый газ"
-#define D_CODE "код" // Button code
-#define D_COLDLIGHT "Холодный"
-#define D_COMMAND "Команда"
-#define D_CONNECTED "Соединен"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Подсчет"
-#define D_COUNTER "Счетчик"
-#define D_CURRENT "Ток" // As in Voltage and Current
-#define D_DATA "Данные"
-#define D_DARKLIGHT "Темный"
-#define D_DEBUG "Отладка"
-#define D_DISABLED "Блокирован"
-#define D_DISTANCE "Distance"
-#define D_DNS_SERVER "DNS Сервер"
-#define D_DONE "Выполнено"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Эмуляция"
-#define D_ENABLED "Активно"
-#define D_ERASE "Стирать"
-#define D_ERROR "Ошибка"
-#define D_FAHRENHEIT "Фаренгейт"
-#define D_FAILED "Неудачно"
-#define D_FALLBACK "Обратная связь"
-#define D_FALLBACK_TOPIC "Топик обратной связи"
-#define D_FALSE "Ложно"
-#define D_FILE "Файл"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Свободная память"
-#define D_FREQUENCY "Frequency"
-#define D_GAS "Газ"
-#define D_GATEWAY "Шлюз"
-#define D_GROUP "Группа"
-#define D_HOST "Хост"
-#define D_HOSTNAME "Имя Хоста"
-#define D_HUMIDITY "Влажность"
-#define D_ILLUMINANCE "Освещенность"
-#define D_IMMEDIATE "немедленно" // Button immediate
-#define D_INDEX "Индекс"
-#define D_INFO "Инфо"
-#define D_INFRARED "Infrared"
-#define D_INITIALIZED "Инициализировано"
-#define D_IP_ADDRESS "IP Адрес"
-#define D_LIGHT "Свет"
-#define D_LWT "LWT"
-#define D_MODULE "Модуль"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "многократное нажатие"
-#define D_NOISE "Шум"
-#define D_NONE "Нет"
-#define D_OFF "Выкл"
-#define D_OFFLINE "Офф-лайн"
-#define D_OK "Ок"
-#define D_ON "Вкл"
-#define D_ONLINE "Он-лайн"
-#define D_PASSWORD "Пароль"
-#define D_PORT "Порт"
-#define D_POWER_FACTOR "Коэффициент Мощности"
-#define D_POWERUSAGE "Мощность"
-#define D_POWERUSAGE_ACTIVE "Active Power"
-#define D_POWERUSAGE_APPARENT "Apparent Power"
-#define D_POWERUSAGE_REACTIVE "Reactive Power"
-#define D_PRESSURE "Давление"
-#define D_PRESSUREATSEALEVEL "Давление на уровне моря"
-#define D_PROGRAM_FLASH_SIZE "Размер Flash для программ"
-#define D_PROGRAM_SIZE "Размер программы "
-#define D_PROJECT "Проект"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Получено"
-#define D_RESTART "Перезапуск"
-#define D_RESTARTING "Перезапуск"
-#define D_RESTART_REASON "Причина перезагрузки"
-#define D_RESTORE "восстановление"
-#define D_RETAINED "нераспред."
-#define D_RULE "Rule"
-#define D_SAVE "Сохранить"
-#define D_SENSOR "Датчик"
-#define D_SSID "SSId"
-#define D_START "Старт"
-#define D_STD_TIME "STD"
-#define D_STOP "Стоп"
-#define D_SUBNET_MASK "Маска Подсети"
-#define D_SUBSCRIBE_TO "Подписаться на"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Успешно"
-#define D_SUNRISE "Sunrise"
-#define D_SUNSET "Sunset"
-#define D_TEMPERATURE "Температура"
-#define D_TO "до"
-#define D_TOGGLE "Переключить"
-#define D_TOPIC "Топик"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Передать"
-#define D_TRUE "Истина"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "обновление"
-#define D_UPLOAD "Загрузить"
-#define D_UPTIME "Uptime"
-#define D_USER "Пользователь"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Low"
-#define D_UV_INDEX_2 "Mid"
-#define D_UV_INDEX_3 "High"
-#define D_UV_INDEX_4 "Danger"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "УФ уровень"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Версия"
-#define D_VOLTAGE "Напряжение"
-#define D_WEIGHT "Weight"
-#define D_WARMLIGHT "Тепло"
-#define D_WEB_SERVER "Web сервер"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ПРЕДУПРЕЖДЕНИЕ Эта версия не поддерживает персистентные настройки"
-#define D_LEVEL_10 "уровень 1-0"
-#define D_LEVEL_01 "уровень 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serial logging отключен"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog logging включен"
-
-#define D_SET_BAUDRATE_TO "Установить скорость передачи (Baudrate)"
-#define D_RECEIVED_TOPIC "Полученный Топик"
-#define D_DATA_SIZE "Размер данных"
-#define D_ANALOG_INPUT "Аналоговый вход"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Блокирующий цикл"
-#define D_WPS_FAILED_WITH_STATUS "WPS конфигурация НЕУДАЧНА со статусом"
-#define D_ACTIVE_FOR_3_MINUTES "активен в течение 3 минут"
-#define D_FAILED_TO_START "не удалось запустить"
-#define D_PATCH_ISSUE_2186 "Проблема с исправлением 2186"
-#define D_CONNECTING_TO_AP "Подключение к AP"
-#define D_IN_MODE "в режиме"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Ошибка подключения, IP-адрес не получен"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Ошибка соединения, AP не может быть достигнута"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Ошибка соединения, неверный пароль к AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Ошибка соединения с AP по тайм-ауту"
-#define D_ATTEMPTING_CONNECTION "Попытка подключения..."
-#define D_CHECKING_CONNECTION "Проверка соединения..."
-#define D_QUERY_DONE "Запрос выполнен. Обнаружены службы MQTT"
-#define D_MQTT_SERVICE_FOUND "MQTT сервис service найдено"
-#define D_FOUND_AT "найдено в"
-#define D_SYSLOG_HOST_NOT_FOUND "System лог хост не найден"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Сохранено во флэш-память"
-#define D_LOADED_FROM_FLASH_AT "Загружено из флэш-памяти"
-#define D_USE_DEFAULTS "Использовать значение по умолчанию"
-#define D_ERASED_SECTOR "Стереть сектор"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Прошивка MINIMAL
пожалуйста обновите"
-#define D_WEBSERVER_ACTIVE_ON "Веб-сервер активен"
-#define D_WITH_IP_ADDRESS "с IP-адресом"
-#define D_WEBSERVER_STOPPED "Веб-сервер остановлен"
-#define D_FILE_NOT_FOUND "Файл не найден"
-#define D_REDIRECTED "Перенаправлено на адаптивный портал"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi менеджер устанавливает Точку Доступа и сохраняет станцию"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi менеджер установил Точку Доступа"
-#define D_TRYING_TO_CONNECT "Попытка подключения устройства к сети"
-
-#define D_RESTART_IN "Перезапуск"
-#define D_SECONDS "секунд"
-#define D_DEVICE_WILL_RESTART "Устройство будет перезапущено через несколько секунд"
-#define D_BUTTON_TOGGLE "Переключить"
-#define D_CONFIGURATION "Конфигурация"
-#define D_INFORMATION "Информация"
-#define D_FIRMWARE_UPGRADE "Обновление прошивки"
-#define D_CONSOLE "Консоль"
-#define D_CONFIRM_RESTART "Подтвердить перезагрузку"
-
-#define D_CONFIGURE_MODULE "Конфигурация Модуля"
-#define D_CONFIGURE_WIFI "Конфигурация WiFi"
-#define D_CONFIGURE_MQTT "Конфигурация MQTT"
-#define D_CONFIGURE_DOMOTICZ "Конфигурация Domoticz"
-#define D_CONFIGURE_LOGGING "Конфигурация Logging"
-#define D_CONFIGURE_OTHER "Конфигурация прочее"
-#define D_CONFIRM_RESET_CONFIGURATION "Подтвердить Сброс Конфигурации"
-#define D_RESET_CONFIGURATION "Сброс Конфигурации"
-#define D_BACKUP_CONFIGURATION "Резервное копирование Конфигурации"
-#define D_RESTORE_CONFIGURATION "Восстановление Конфигурации"
-#define D_MAIN_MENU "Главное Меню"
-
-#define D_MODULE_PARAMETERS "Параметры модуля"
-#define D_MODULE_TYPE "Тип модуля"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial вход"
-#define D_SERIAL_OUT "Serial выход"
-
-#define D_WIFI_PARAMETERS "Параметры Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Сканирование беспроводных сетей Wifi"
-#define D_SCAN_DONE "Сканирование завершено"
-#define D_NO_NETWORKS_FOUND "Не найдено сетей"
-#define D_REFRESH_TO_SCAN_AGAIN "Обновить для повторного сканирования"
-#define D_DUPLICATE_ACCESSPOINT "Дублировать Точку Доступа (AP)"
-#define D_SKIPPING_LOW_QUALITY "Пропущено из-за низкого качества"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 Пароль"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Пароль"
-
-#define D_MQTT_PARAMETERS "Параметры MQTT"
-#define D_CLIENT "Клиент"
-#define D_FULL_TOPIC "Полный Топик"
-
-#define D_LOGGING_PARAMETERS "Параметры Logging"
-#define D_SERIAL_LOG_LEVEL "Serial лог уровень"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web лог уровень"
-#define D_SYS_LOG_LEVEL "System лог уровень"
-#define D_MORE_DEBUG "Дополнительная информация для отладки"
-#define D_SYSLOG_HOST "System лог хост"
-#define D_SYSLOG_PORT "System лог порт"
-#define D_TELEMETRY_PERIOD "Период телеметрии"
-
-#define D_OTHER_PARAMETERS "Параметры Прочие"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Пароль Web администратора"
-#define D_MQTT_ENABLE "MQTT активен"
-#define D_FRIENDLY_NAME "Дружественное Имя"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "одиночное"
-#define D_MULTI_DEVICE "мульти"
-
-#define D_CONFIGURE_TEMPLATE "Конфигурация Template"
-#define D_TEMPLATE_PARAMETERS "Параметры Template"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Сохранить конфигурацию"
-#define D_CONFIGURATION_SAVED "Конфигурация сохранена "
-#define D_CONFIGURATION_RESET "Конфигурация сброшена"
-
-#define D_PROGRAM_VERSION "Версия программы"
-#define D_BUILD_DATE_AND_TIME "Дата & Время сборки"
-#define D_CORE_AND_SDK_VERSION "Версия Core/SDK"
-#define D_FLASH_WRITE_COUNT "Кол-во записей Flash"
-#define D_MAC_ADDRESS "MAC Адрес"
-#define D_MQTT_HOST "MQTT Хост"
-#define D_MQTT_PORT "MQTT Порт"
-#define D_MQTT_CLIENT "MQTT Клиент ID"
-#define D_MQTT_USER "MQTT Пользователь"
-#define D_MQTT_TOPIC "MQTT Топик"
-#define D_MQTT_GROUP_TOPIC "MQTT Топик группы"
-#define D_MQTT_FULL_TOPIC "MQTT Топик полный"
-#define D_MDNS_DISCOVERY "mDNS Обнаружение"
-#define D_MDNS_ADVERTISE "mDNS Транcляция"
-#define D_ESP_CHIP_ID "ID чипа ESP"
-#define D_FLASH_CHIP_ID "ID чипа Flash памяти"
-#define D_FLASH_CHIP_SIZE "Размер Flash памяти"
-#define D_FREE_PROGRAM_SPACE "Свободное пространство программ"
-
-#define D_UPGRADE_BY_WEBSERVER "Обновление через Веб-сервер"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Начать обновление"
-#define D_UPGRADE_BY_FILE_UPLOAD "Обновление путем загрузки файлов"
-#define D_UPLOAD_STARTED "Загрузка началась"
-#define D_UPGRADE_STARTED "Обновление началось"
-#define D_UPLOAD_DONE "Загрузка завершена"
-#define D_UPLOAD_ERR_1 "Файл не выбран"
-#define D_UPLOAD_ERR_2 "Недостаточно места"
-#define D_UPLOAD_ERR_3 "Magic байт не 0xE9"
-#define D_UPLOAD_ERR_4 "Размер прошивки больше, чем реальный размер флеш памяти"
-#define D_UPLOAD_ERR_5 "Ошибка загрузки буфера"
-#define D_UPLOAD_ERR_6 "Ошибка загрузки. Включено лог уровня 3"
-#define D_UPLOAD_ERR_7 "Загрузка прервана"
-#define D_UPLOAD_ERR_8 "Файл неверный"
-#define D_UPLOAD_ERR_9 "Слишком большой файл"
-#define D_UPLOAD_ERR_10 "Failed to init RF chip"
-#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
-#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
-#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
-#define D_UPLOAD_ERROR_CODE "Код ошибки загрузки"
-
-#define D_ENTER_COMMAND "Введите команду"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Включить Веб лог уровня 2 если ожидается ответ"
-#define D_NEED_USER_AND_PASSWORD "Ожидается user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Проверка TLS Fingerprint..."
-#define D_TLS_CONNECT_FAILED_TO "Сбой подключения TLS к"
-#define D_RETRY_IN "Повторить"
-#define D_VERIFIED "Проверено Fingerprint"
-#define D_INSECURE "Небезопасное соединение, недействительный Fingerprint"
-#define D_CONNECT_FAILED_TO "Ошибка подключения к"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast отключен"
-#define D_MULTICAST_REJOINED "Multicast (ре)соединился"
-#define D_MULTICAST_JOIN_FAILED "Multicast ошибка соединения"
-#define D_FAILED_TO_SEND_RESPONSE "Не удалось отправить ответ"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo основное событие"
-#define D_WEMO_EVENT_SERVICE "WeMo служба событий"
-#define D_WEMO_META_SERVICE "WeMo мета-сервис"
-#define D_WEMO_SETUP "WeMo настройка"
-#define D_RESPONSE_SENT "Ответ отправлен"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue настройка"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API не реализовано"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 ответных пакета получено"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Параметры Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2,5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Конфигурация Timer"
-#define D_TIMER_PARAMETERS "Параметры Timer"
-#define D_TIMER_ENABLE "Enable Timers"
-#define D_TIMER_ARM "Arm"
-#define D_TIMER_TIME "Time"
-#define D_TIMER_DAYS "Days"
-#define D_TIMER_REPEAT "Repeat"
-#define D_TIMER_OUTPUT "Output"
-#define D_TIMER_ACTION "Action"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Конфигурация KNX"
-#define D_KNX_PARAMETERS "Параметры KNX"
-#define D_KNX_GENERAL_CONFIG "General"
-#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
-#define D_KNX_ENABLE "Enable KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
-#define D_ADD "Add"
-#define D_DELETE "Delete"
-#define D_REPLY "Reply"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
-#define D_RECEIVED_FROM "Received from"
-#define D_KNX_COMMAND_WRITE "Write"
-#define D_KNX_COMMAND_READ "Read"
-#define D_KNX_COMMAND_OTHER "Other"
-#define D_SENT_TO "sent to"
-#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Энергия Сегодня"
-#define D_ENERGY_YESTERDAY "Энергия Вчера"
-#define D_ENERGY_TOTAL "Энергия Всего"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Датчик DS18x20 занят"
-#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - ошибка CRC"
-#define D_SENSORS_FOUND "Датчик DS18x20 найден"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Тайм-аут, в ожидании"
-#define D_START_SIGNAL_LOW "сигнал старт низкий"
-#define D_START_SIGNAL_HIGH "сигнал старт высокий"
-#define D_PULSE "пульс"
-#define D_CHECKSUM_FAILURE "Ошибка контрольной суммы"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчик не получил команду ACK"
-#define D_SHT1X_FOUND "SHT1X найден"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particals"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remove weigth"
-#define D_HX_CAL_REFERENCE "Load reference weigth"
-#define D_HX_CAL_DONE "Calibrated"
-#define D_HX_CAL_FAIL "Calibration failed"
-#define D_RESET_HX711 "Reset Scale"
-#define D_CONFIGURE_HX711 "Configure Scale"
-#define D_HX711_PARAMETERS "Scale parameters"
-#define D_ITEM_WEIGHT "Item weight"
-#define D_REFERENCE_WEIGHT "Reference weigth"
-#define D_CALIBRATE "Calibrate"
-#define D_CALIBRATION "Calibration"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Wind Direction"
-#define D_TX20_WIND_SPEED "Wind Speed"
-#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
-#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Свич" // Suffix "1"
-#define D_SENSOR_BUTTON "Кнопка" // Suffix "1"
-#define D_SENSOR_RELAY "Реле" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Счетчик" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "А"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Ч"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "кОм"
-#define D_UNIT_KILOWATTHOUR "кВт"
-#define D_UNIT_LUX "лк"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "мкг/м3"
-#define D_UNIT_MICROMETER "мкм"
-#define D_UNIT_MICROSECOND "мкс"
-#define D_UNIT_MILLIAMPERE "мА"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "мм рт.ст."
-#define D_UNIT_MILLISECOND "мс"
-#define D_UNIT_MINUTE "мин"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "гПа"
-#define D_UNIT_SECOND "сек"
-#define D_UNIT_SECTORS "секторов"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "В"
-#define D_UNIT_WATT "Вт"
-#define D_UNIT_WATTHOUR "ВтЧ"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Угол фазы"
-#define D_IMPORT_ACTIVE "Импорт активной мощности"
-#define D_EXPORT_ACTIVE "Экспорт активной мощности"
-#define D_IMPORT_REACTIVE "Импорт реактивной мощности"
-#define D_EXPORT_REACTIVE "Экспорт реактивной мощности"
-#define D_TOTAL_REACTIVE "Итого реактивная мощность"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Град"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_RU_RU_H_
+/*
+ ru-RU.h - localization for Russian - Rissia for Tasmota
+
+ Copyright (C) 2019 Theo Arends / roman-vn
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_RU_RU_H_
+#define _LANGUAGE_RU_RU_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.12.0b
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1049
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "ru"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "ВскПонВтрСрдЧетПятСуб"
+#define D_MONTH3LIST "ЯнвФевМарАпрМайИюнИюлАвгСенОктНояДек"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Качество воздуха"
+#define D_AP "AP" // Access Point
+#define D_AS "как"
+#define D_AUTO "АВТО"
+#define D_BLINK "Мигать"
+#define D_BLINKOFF "Не Мигать"
+#define D_BOOT_COUNT "Количество загрузок"
+#define D_BRIGHTLIGHT "Яркость"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Кнопка"
+#define D_BY "by" // Written by me
+#define D_BYTES "Байт"
+#define D_CELSIUS "Цельсия"
+#define D_CHANNEL "Channel"
+#define D_CO2 "Углекислый газ"
+#define D_CODE "код" // Button code
+#define D_COLDLIGHT "Холодный"
+#define D_COMMAND "Команда"
+#define D_CONNECTED "Соединен"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Подсчет"
+#define D_COUNTER "Счетчик"
+#define D_CURRENT "Ток" // As in Voltage and Current
+#define D_DATA "Данные"
+#define D_DARKLIGHT "Темный"
+#define D_DEBUG "Отладка"
+#define D_DISABLED "Блокирован"
+#define D_DISTANCE "Distance"
+#define D_DNS_SERVER "DNS Сервер"
+#define D_DONE "Выполнено"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Эмуляция"
+#define D_ENABLED "Активно"
+#define D_ERASE "Стирать"
+#define D_ERROR "Ошибка"
+#define D_FAHRENHEIT "Фаренгейт"
+#define D_FAILED "Неудачно"
+#define D_FALLBACK "Обратная связь"
+#define D_FALLBACK_TOPIC "Топик обратной связи"
+#define D_FALSE "Ложно"
+#define D_FILE "Файл"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Свободная память"
+#define D_FREQUENCY "Frequency"
+#define D_GAS "Газ"
+#define D_GATEWAY "Шлюз"
+#define D_GROUP "Группа"
+#define D_HOST "Хост"
+#define D_HOSTNAME "Имя Хоста"
+#define D_HUMIDITY "Влажность"
+#define D_ILLUMINANCE "Освещенность"
+#define D_IMMEDIATE "немедленно" // Button immediate
+#define D_INDEX "Индекс"
+#define D_INFO "Инфо"
+#define D_INFRARED "Infrared"
+#define D_INITIALIZED "Инициализировано"
+#define D_IP_ADDRESS "IP Адрес"
+#define D_LIGHT "Свет"
+#define D_LWT "LWT"
+#define D_MODULE "Модуль"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "многократное нажатие"
+#define D_NOISE "Шум"
+#define D_NONE "Нет"
+#define D_OFF "Выкл"
+#define D_OFFLINE "Офф-лайн"
+#define D_OK "Ок"
+#define D_ON "Вкл"
+#define D_ONLINE "Он-лайн"
+#define D_PASSWORD "Пароль"
+#define D_PORT "Порт"
+#define D_POWER_FACTOR "Коэффициент Мощности"
+#define D_POWERUSAGE "Мощность"
+#define D_POWERUSAGE_ACTIVE "Active Power"
+#define D_POWERUSAGE_APPARENT "Apparent Power"
+#define D_POWERUSAGE_REACTIVE "Reactive Power"
+#define D_PRESSURE "Давление"
+#define D_PRESSUREATSEALEVEL "Давление на уровне моря"
+#define D_PROGRAM_FLASH_SIZE "Размер Flash для программ"
+#define D_PROGRAM_SIZE "Размер программы "
+#define D_PROJECT "Проект"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Получено"
+#define D_RESTART "Перезапуск"
+#define D_RESTARTING "Перезапуск"
+#define D_RESTART_REASON "Причина перезагрузки"
+#define D_RESTORE "восстановление"
+#define D_RETAINED "нераспред."
+#define D_RULE "Rule"
+#define D_SAVE "Сохранить"
+#define D_SENSOR "Датчик"
+#define D_SSID "SSId"
+#define D_START "Старт"
+#define D_STD_TIME "STD"
+#define D_STOP "Стоп"
+#define D_SUBNET_MASK "Маска Подсети"
+#define D_SUBSCRIBE_TO "Подписаться на"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Успешно"
+#define D_SUNRISE "Sunrise"
+#define D_SUNSET "Sunset"
+#define D_TEMPERATURE "Температура"
+#define D_TO "до"
+#define D_TOGGLE "Переключить"
+#define D_TOPIC "Топик"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Передать"
+#define D_TRUE "Истина"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "обновление"
+#define D_UPLOAD "Загрузить"
+#define D_UPTIME "Uptime"
+#define D_USER "Пользователь"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Low"
+#define D_UV_INDEX_2 "Mid"
+#define D_UV_INDEX_3 "High"
+#define D_UV_INDEX_4 "Danger"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "УФ уровень"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Версия"
+#define D_VOLTAGE "Напряжение"
+#define D_WEIGHT "Weight"
+#define D_WARMLIGHT "Тепло"
+#define D_WEB_SERVER "Web сервер"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ПРЕДУПРЕЖДЕНИЕ Эта версия не поддерживает персистентные настройки"
+#define D_LEVEL_10 "уровень 1-0"
+#define D_LEVEL_01 "уровень 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serial logging отключен"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog logging включен"
+
+#define D_SET_BAUDRATE_TO "Установить скорость передачи (Baudrate)"
+#define D_RECEIVED_TOPIC "Полученный Топик"
+#define D_DATA_SIZE "Размер данных"
+#define D_ANALOG_INPUT "Аналоговый вход"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Блокирующий цикл"
+#define D_WPS_FAILED_WITH_STATUS "WPS конфигурация НЕУДАЧНА со статусом"
+#define D_ACTIVE_FOR_3_MINUTES "активен в течение 3 минут"
+#define D_FAILED_TO_START "не удалось запустить"
+#define D_PATCH_ISSUE_2186 "Проблема с исправлением 2186"
+#define D_CONNECTING_TO_AP "Подключение к AP"
+#define D_IN_MODE "в режиме"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Ошибка подключения, IP-адрес не получен"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Ошибка соединения, AP не может быть достигнута"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Ошибка соединения, неверный пароль к AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Ошибка соединения с AP по тайм-ауту"
+#define D_ATTEMPTING_CONNECTION "Попытка подключения..."
+#define D_CHECKING_CONNECTION "Проверка соединения..."
+#define D_QUERY_DONE "Запрос выполнен. Обнаружены службы MQTT"
+#define D_MQTT_SERVICE_FOUND "MQTT сервис service найдено"
+#define D_FOUND_AT "найдено в"
+#define D_SYSLOG_HOST_NOT_FOUND "System лог хост не найден"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Сохранено во флэш-память"
+#define D_LOADED_FROM_FLASH_AT "Загружено из флэш-памяти"
+#define D_USE_DEFAULTS "Использовать значение по умолчанию"
+#define D_ERASED_SECTOR "Стереть сектор"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Прошивка MINIMAL
пожалуйста обновите"
+#define D_WEBSERVER_ACTIVE_ON "Веб-сервер активен"
+#define D_WITH_IP_ADDRESS "с IP-адресом"
+#define D_WEBSERVER_STOPPED "Веб-сервер остановлен"
+#define D_FILE_NOT_FOUND "Файл не найден"
+#define D_REDIRECTED "Перенаправлено на адаптивный портал"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi менеджер устанавливает Точку Доступа и сохраняет станцию"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi менеджер установил Точку Доступа"
+#define D_TRYING_TO_CONNECT "Попытка подключения устройства к сети"
+
+#define D_RESTART_IN "Перезапуск"
+#define D_SECONDS "секунд"
+#define D_DEVICE_WILL_RESTART "Устройство будет перезапущено через несколько секунд"
+#define D_BUTTON_TOGGLE "Переключить"
+#define D_CONFIGURATION "Конфигурация"
+#define D_INFORMATION "Информация"
+#define D_FIRMWARE_UPGRADE "Обновление прошивки"
+#define D_CONSOLE "Консоль"
+#define D_CONFIRM_RESTART "Подтвердить перезагрузку"
+
+#define D_CONFIGURE_MODULE "Конфигурация Модуля"
+#define D_CONFIGURE_WIFI "Конфигурация WiFi"
+#define D_CONFIGURE_MQTT "Конфигурация MQTT"
+#define D_CONFIGURE_DOMOTICZ "Конфигурация Domoticz"
+#define D_CONFIGURE_LOGGING "Конфигурация Logging"
+#define D_CONFIGURE_OTHER "Конфигурация прочее"
+#define D_CONFIRM_RESET_CONFIGURATION "Подтвердить Сброс Конфигурации"
+#define D_RESET_CONFIGURATION "Сброс Конфигурации"
+#define D_BACKUP_CONFIGURATION "Резервное копирование Конфигурации"
+#define D_RESTORE_CONFIGURATION "Восстановление Конфигурации"
+#define D_MAIN_MENU "Главное Меню"
+
+#define D_MODULE_PARAMETERS "Параметры модуля"
+#define D_MODULE_TYPE "Тип модуля"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial вход"
+#define D_SERIAL_OUT "Serial выход"
+
+#define D_WIFI_PARAMETERS "Параметры Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Сканирование беспроводных сетей Wifi"
+#define D_SCAN_DONE "Сканирование завершено"
+#define D_NO_NETWORKS_FOUND "Не найдено сетей"
+#define D_REFRESH_TO_SCAN_AGAIN "Обновить для повторного сканирования"
+#define D_DUPLICATE_ACCESSPOINT "Дублировать Точку Доступа (AP)"
+#define D_SKIPPING_LOW_QUALITY "Пропущено из-за низкого качества"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 Пароль"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Пароль"
+
+#define D_MQTT_PARAMETERS "Параметры MQTT"
+#define D_CLIENT "Клиент"
+#define D_FULL_TOPIC "Полный Топик"
+
+#define D_LOGGING_PARAMETERS "Параметры Logging"
+#define D_SERIAL_LOG_LEVEL "Serial лог уровень"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web лог уровень"
+#define D_SYS_LOG_LEVEL "System лог уровень"
+#define D_MORE_DEBUG "Дополнительная информация для отладки"
+#define D_SYSLOG_HOST "System лог хост"
+#define D_SYSLOG_PORT "System лог порт"
+#define D_TELEMETRY_PERIOD "Период телеметрии"
+
+#define D_OTHER_PARAMETERS "Параметры Прочие"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Пароль Web администратора"
+#define D_MQTT_ENABLE "MQTT активен"
+#define D_FRIENDLY_NAME "Дружественное Имя"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "одиночное"
+#define D_MULTI_DEVICE "мульти"
+
+#define D_CONFIGURE_TEMPLATE "Конфигурация Template"
+#define D_TEMPLATE_PARAMETERS "Параметры Template"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Сохранить конфигурацию"
+#define D_CONFIGURATION_SAVED "Конфигурация сохранена "
+#define D_CONFIGURATION_RESET "Конфигурация сброшена"
+
+#define D_PROGRAM_VERSION "Версия программы"
+#define D_BUILD_DATE_AND_TIME "Дата & Время сборки"
+#define D_CORE_AND_SDK_VERSION "Версия Core/SDK"
+#define D_FLASH_WRITE_COUNT "Кол-во записей Flash"
+#define D_MAC_ADDRESS "MAC Адрес"
+#define D_MQTT_HOST "MQTT Хост"
+#define D_MQTT_PORT "MQTT Порт"
+#define D_MQTT_CLIENT "MQTT Клиент ID"
+#define D_MQTT_USER "MQTT Пользователь"
+#define D_MQTT_TOPIC "MQTT Топик"
+#define D_MQTT_GROUP_TOPIC "MQTT Топик группы"
+#define D_MQTT_FULL_TOPIC "MQTT Топик полный"
+#define D_MDNS_DISCOVERY "mDNS Обнаружение"
+#define D_MDNS_ADVERTISE "mDNS Транcляция"
+#define D_ESP_CHIP_ID "ID чипа ESP"
+#define D_FLASH_CHIP_ID "ID чипа Flash памяти"
+#define D_FLASH_CHIP_SIZE "Размер Flash памяти"
+#define D_FREE_PROGRAM_SPACE "Свободное пространство программ"
+
+#define D_UPGRADE_BY_WEBSERVER "Обновление через Веб-сервер"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Начать обновление"
+#define D_UPGRADE_BY_FILE_UPLOAD "Обновление путем загрузки файлов"
+#define D_UPLOAD_STARTED "Загрузка началась"
+#define D_UPGRADE_STARTED "Обновление началось"
+#define D_UPLOAD_DONE "Загрузка завершена"
+#define D_UPLOAD_ERR_1 "Файл не выбран"
+#define D_UPLOAD_ERR_2 "Недостаточно места"
+#define D_UPLOAD_ERR_3 "Magic байт не 0xE9"
+#define D_UPLOAD_ERR_4 "Размер прошивки больше, чем реальный размер флеш памяти"
+#define D_UPLOAD_ERR_5 "Ошибка загрузки буфера"
+#define D_UPLOAD_ERR_6 "Ошибка загрузки. Включено лог уровня 3"
+#define D_UPLOAD_ERR_7 "Загрузка прервана"
+#define D_UPLOAD_ERR_8 "Файл неверный"
+#define D_UPLOAD_ERR_9 "Слишком большой файл"
+#define D_UPLOAD_ERR_10 "Failed to init RF chip"
+#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
+#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
+#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERROR_CODE "Код ошибки загрузки"
+
+#define D_ENTER_COMMAND "Введите команду"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Включить Веб лог уровня 2 если ожидается ответ"
+#define D_NEED_USER_AND_PASSWORD "Ожидается user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Проверка TLS Fingerprint..."
+#define D_TLS_CONNECT_FAILED_TO "Сбой подключения TLS к"
+#define D_RETRY_IN "Повторить"
+#define D_VERIFIED "Проверено Fingerprint"
+#define D_INSECURE "Небезопасное соединение, недействительный Fingerprint"
+#define D_CONNECT_FAILED_TO "Ошибка подключения к"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast отключен"
+#define D_MULTICAST_REJOINED "Multicast (ре)соединился"
+#define D_MULTICAST_JOIN_FAILED "Multicast ошибка соединения"
+#define D_FAILED_TO_SEND_RESPONSE "Не удалось отправить ответ"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo основное событие"
+#define D_WEMO_EVENT_SERVICE "WeMo служба событий"
+#define D_WEMO_META_SERVICE "WeMo мета-сервис"
+#define D_WEMO_SETUP "WeMo настройка"
+#define D_RESPONSE_SENT "Ответ отправлен"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue настройка"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API не реализовано"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 ответных пакета получено"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Параметры Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Update timer"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Конфигурация Timer"
+#define D_TIMER_PARAMETERS "Параметры Timer"
+#define D_TIMER_ENABLE "Enable Timers"
+#define D_TIMER_ARM "Arm"
+#define D_TIMER_TIME "Time"
+#define D_TIMER_DAYS "Days"
+#define D_TIMER_REPEAT "Repeat"
+#define D_TIMER_OUTPUT "Output"
+#define D_TIMER_ACTION "Action"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Конфигурация KNX"
+#define D_KNX_PARAMETERS "Параметры KNX"
+#define D_KNX_GENERAL_CONFIG "General"
+#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
+#define D_KNX_ENABLE "Enable KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
+#define D_ADD "Add"
+#define D_DELETE "Delete"
+#define D_REPLY "Reply"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
+#define D_RECEIVED_FROM "Received from"
+#define D_KNX_COMMAND_WRITE "Write"
+#define D_KNX_COMMAND_READ "Read"
+#define D_KNX_COMMAND_OTHER "Other"
+#define D_SENT_TO "sent to"
+#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Энергия Сегодня"
+#define D_ENERGY_YESTERDAY "Энергия Вчера"
+#define D_ENERGY_TOTAL "Энергия Всего"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Датчик DS18x20 занят"
+#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - ошибка CRC"
+#define D_SENSORS_FOUND "Датчик DS18x20 найден"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Тайм-аут, в ожидании"
+#define D_START_SIGNAL_LOW "сигнал старт низкий"
+#define D_START_SIGNAL_HIGH "сигнал старт высокий"
+#define D_PULSE "пульс"
+#define D_CHECKSUM_FAILURE "Ошибка контрольной суммы"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчик не получил команду ACK"
+#define D_SHT1X_FOUND "SHT1X найден"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particals"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remove weigth"
+#define D_HX_CAL_REFERENCE "Load reference weigth"
+#define D_HX_CAL_DONE "Calibrated"
+#define D_HX_CAL_FAIL "Calibration failed"
+#define D_RESET_HX711 "Reset Scale"
+#define D_CONFIGURE_HX711 "Configure Scale"
+#define D_HX711_PARAMETERS "Scale parameters"
+#define D_ITEM_WEIGHT "Item weight"
+#define D_REFERENCE_WEIGHT "Reference weigth"
+#define D_CALIBRATE "Calibrate"
+#define D_CALIBRATION "Calibration"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Wind Direction"
+#define D_TX20_WIND_SPEED "Wind Speed"
+#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
+#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Свич" // Suffix "1"
+#define D_SENSOR_BUTTON "Кнопка" // Suffix "1"
+#define D_SENSOR_RELAY "Реле" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Счетчик" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "А"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Ч"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "кОм"
+#define D_UNIT_KILOWATTHOUR "кВт"
+#define D_UNIT_LUX "лк"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "мкг/м3"
+#define D_UNIT_MICROMETER "мкм"
+#define D_UNIT_MICROSECOND "мкс"
+#define D_UNIT_MILLIAMPERE "мА"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "мм рт.ст."
+#define D_UNIT_MILLISECOND "мс"
+#define D_UNIT_MINUTE "мин"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "гПа"
+#define D_UNIT_SECOND "сек"
+#define D_UNIT_SECTORS "секторов"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "В"
+#define D_UNIT_WATT "Вт"
+#define D_UNIT_WATTHOUR "ВтЧ"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Угол фазы"
+#define D_IMPORT_ACTIVE "Импорт активной мощности"
+#define D_EXPORT_ACTIVE "Экспорт активной мощности"
+#define D_IMPORT_REACTIVE "Импорт реактивной мощности"
+#define D_EXPORT_REACTIVE "Экспорт реактивной мощности"
+#define D_TOTAL_REACTIVE "Итого реактивная мощность"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Град"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_RU_RU_H_
diff --git a/tasmota/language/sk-SK.h b/tasmota/language/sk-SK.h
index 52540be9c..a64e49e01 100644
--- a/tasmota/language/sk-SK.h
+++ b/tasmota/language/sk-SK.h
@@ -1,703 +1,701 @@
-/*
- sk-SK.h - localization for Slovak with diacritics - Slovak for Tasmota
-
- Copyright (C) 2019 Vladimír Jendroľ
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_SK_SK_H_
-#define _LANGUAGE_SK_SK_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.2.1.14
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1029
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "sk"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "Ne Po Ut St Št Pi So"
-#define D_MONTH3LIST "JanFebMarAprMájJúnJúlAugSepOktNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Kvalita vzduchu"
-#define D_AP "AP" // Access Point
-#define D_AS "ako"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blikanie"
-#define D_BLINKOFF "BlikanieVyp"
-#define D_BOOT_COUNT "Počítadlo spustení"
-#define D_BRIGHTLIGHT "Svetlý"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Tlačídlo"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bytov"
-#define D_CELSIUS "°C"
-#define D_CHANNEL "Kanál"
-#define D_CO2 "CO2"
-#define D_CODE "kód" // Button code
-#define D_COLDLIGHT "Studené svetlo"
-#define D_COMMAND "Príkaz"
-#define D_CONNECTED "...pripojené"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Počítaj"
-#define D_COUNTER "Počítadlo"
-#define D_CURRENT "Prúd" // As in Voltage and Current
-#define D_DATA "Dáta"
-#define D_FLOW_RATE "Flow rate"
-#define D_DARKLIGHT "Tmavý"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Zablokované"
-#define D_DISTANCE "Vzdialenosť"
-#define D_DNS_SERVER "Server DNS"
-#define D_DONE "Hotovo"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulácia"
-#define D_ENABLED "Otvorený"
-#define D_ERASE "Zmaž"
-#define D_ERROR "Chyba"
-#define D_FAHRENHEIT "Fahrenheita"
-#define D_FAILED "chyba"
-#define D_FALLBACK "Záložný"
-#define D_FALLBACK_TOPIC "Záložný topic"
-#define D_FALSE "Nepravda"
-#define D_FILE "Súbor"
-#define D_FREE_MEMORY "Voľná pamäť"
-#define D_FREQUENCY "Frekvencia"
-#define D_GAS "Plyn"
-#define D_GATEWAY "Predvolená brána"
-#define D_GROUP "Skupina"
-#define D_HOST "Server"
-#define D_HOSTNAME "Názov servera"
-#define D_HUMIDITY "Vlhkosť"
-#define D_ILLUMINANCE "Osvetlenie"
-#define D_IMMEDIATE "Okamžité" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Informácie"
-#define D_INFRARED "Infračervené"
-#define D_INITIALIZED "Inicializovaný"
-#define D_IP_ADDRESS "Adresa IP"
-#define D_LIGHT "Svetlo"
-#define D_LWT "LWT"
-#define D_MODULE "Modul"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-stlačenie"
-#define D_NOISE "Hluk"
-#define D_NONE "Žiadny"
-#define D_OFF "Vyp."
-#define D_OFFLINE "Neaktívny"
-#define D_OK "OK"
-#define D_ON "Zap."
-#define D_ONLINE "Aktívny"
-#define D_PASSWORD "Heslo"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Účinník"
-#define D_POWERUSAGE "Príkon"
-#define D_POWERUSAGE_ACTIVE "Činný príkon"
-#define D_POWERUSAGE_APPARENT "Zdanlivý príkon"
-#define D_POWERUSAGE_REACTIVE "Jalový príkon"
-#define D_PRESSURE "Tlak"
-#define D_PRESSUREATSEALEVEL "Tlak na hladine mora"
-#define D_PROGRAM_FLASH_SIZE "Veľkosť flash pamäte"
-#define D_PROGRAM_SIZE "Veľkosť programu"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Dážď"
-#define D_RECEIVED "Prijatý"
-#define D_RESTART "Reštart"
-#define D_RESTARTING "Reštartuje sa"
-#define D_RESTART_REASON "Príčina reštartu"
-#define D_RESTORE "Obnoviť"
-#define D_RETAINED "Zachované"
-#define D_RULE "Pravidlo"
-#define D_SAVE "Ulož"
-#define D_SENSOR "Senzor"
-#define D_SSID "SSID"
-#define D_START "Spustiť"
-#define D_STD_TIME "STD"
-#define D_STOP "Stop"
-#define D_SUBNET_MASK "Maska podsiete"
-#define D_SUBSCRIBE_TO "Prihlásiť do"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "úspešné."
-#define D_SUNRISE "Svitanie"
-#define D_SUNSET "Súmrak"
-#define D_TEMPERATURE "Teplota"
-#define D_TO "do"
-#define D_TOGGLE "Prepni"
-#define D_TOPIC "Topic"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Odošli"
-#define D_TRUE "Pravda"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "aktualizáciu"
-#define D_UPLOAD "Nahrávanie..."
-#define D_UPTIME "Uptime"
-#define D_USER "Používateľ"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Nízky"
-#define D_UV_INDEX_2 "Stredný"
-#define D_UV_INDEX_3 "Vysoký"
-#define D_UV_INDEX_4 "Nebezpečný"
-#define D_UV_INDEX_5 "Popál1/2"
-#define D_UV_INDEX_6 "Popál3"
-#define D_UV_INDEX_7 "MimoRozsah"
-#define D_UV_LEVEL "úroveň UV"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Verzia"
-#define D_VOLTAGE "Napätie"
-#define D_WEIGHT "Hmotnosť"
-#define D_WARMLIGHT "Teplé svetlo"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "UPOZORNENIE Táto verzia nepodporuje trvalé nastavenia"
-#define D_LEVEL_10 "úroveň 1-0"
-#define D_LEVEL_01 "úroveň 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Logovanie na sériovom porte ukončené"
-#define D_SYSLOG_LOGGING_REENABLED "Obnovený zápis do Syslog"
-
-#define D_SET_BAUDRATE_TO "Nastaviť rýchlosti prenosu na"
-#define D_RECEIVED_TOPIC "Prijatý topic"
-#define D_DATA_SIZE "Veľkosť dát"
-#define D_ANALOG_INPUT "Analógový vstup"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Zablokovanie slučky"
-#define D_WPS_FAILED_WITH_STATUS "Chyba WPSconfig so statusom"
-#define D_ACTIVE_FOR_3_MINUTES "aktívny 3 minúty"
-#define D_FAILED_TO_START "nepodarilo sa spustiť"
-#define D_PATCH_ISSUE_2186 "Chyba 2186"
-#define D_CONNECTING_TO_AP "Pripájanie k AP"
-#define D_IN_MODE "v režime"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba pripojenia, nebola obdržaná IP adresa"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba pripojenia, nedostupný AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba pripojenia, nesprávne heslo pre AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba pripojenia, uplynul AP timeout"
-#define D_ATTEMPTING_CONNECTION "Pripájanie..."
-#define D_CHECKING_CONNECTION "Skúška spojenia..."
-#define D_QUERY_DONE "Vyslanie požiadavky. Nájdená služba MQTT"
-#define D_MQTT_SERVICE_FOUND "Služba MQTT bola nájdená"
-#define D_FOUND_AT "nájdené v"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nebol nájdený"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Uložené do flash pamäte v"
-#define D_LOADED_FROM_FLASH_AT "Stiahnuté z flash pamäte z"
-#define D_USE_DEFAULTS "Použi prednastavené hodnoty"
-#define D_ERASED_SECTOR "Zmazaný sektor"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Pre používanie prostredia Tasmota povoľte JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMÁLNY
prosím aktualizujte"
-#define D_WEBSERVER_ACTIVE_ON "Aktívny Web server"
-#define D_WITH_IP_ADDRESS "na IP adrese"
-#define D_WEBSERVER_STOPPED "Web server zastavený"
-#define D_FILE_NOT_FOUND "Súbor nebol nájdený"
-#define D_REDIRECTED "Presmerovanie na vlastný portál"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wi-Fi manažér nastaví AP a zachová STA"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wi-Fi manažér nastaví Access Point"
-#define D_TRYING_TO_CONNECT "Skúšam pripojiť zariadenie k sieti"
-
-#define D_RESTART_IN "Reštart"
-#define D_SECONDS "sekúnd"
-#define D_DEVICE_WILL_RESTART "Zariadenie bude reštartované behom niekoľkých sekúnd"
-#define D_BUTTON_TOGGLE "Prepínač"
-#define D_CONFIGURATION "Nastavenia"
-#define D_INFORMATION "Informácie"
-#define D_FIRMWARE_UPGRADE "Aktualizácia firmware"
-#define D_CONSOLE "Konzola"
-#define D_CONFIRM_RESTART "Potvrdenie reštartu"
-
-#define D_CONFIGURE_MODULE "Nastavenia modulu"
-#define D_CONFIGURE_WIFI "Nastavenia WiFi"
-#define D_CONFIGURE_MQTT "Nastavenia MQTT"
-#define D_CONFIGURE_DOMOTICZ "Nastavenia Domoticz"
-#define D_CONFIGURE_LOGGING "Nastavenia logovania"
-#define D_CONFIGURE_OTHER "Ostatné nastavenia"
-#define D_CONFIRM_RESET_CONFIGURATION "Potvrdenie resetu nastavení"
-#define D_RESET_CONFIGURATION "Reset nastavení"
-#define D_BACKUP_CONFIGURATION "Záloha nastavení"
-#define D_RESTORE_CONFIGURATION "Obnovenie nastavení"
-#define D_MAIN_MENU "Hlavné menu"
-
-#define D_MODULE_PARAMETERS "Nastavenia modulu"
-#define D_MODULE_TYPE "Typ modulu"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Nastavenia WiFi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Sken WiFi sietí"
-#define D_SCAN_DONE "Sken dokončený"
-#define D_NO_NETWORKS_FOUND "Sieť nebola nájdená"
-#define D_REFRESH_TO_SCAN_AGAIN "Zopakovať sken"
-#define D_DUPLICATE_ACCESSPOINT "Kópia AP"
-#define D_SKIPPING_LOW_QUALITY "Preskočenie z dôvodu kvality signálu"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSID"
-#define D_AP1_PASSWORD "Heslo AP1"
-#define D_AP2_SSID "AP2 SSID"
-#define D_AP2_PASSWORD "Heslo AP2"
-
-#define D_MQTT_PARAMETERS "Nastavenia MQTT"
-#define D_CLIENT "Klient"
-#define D_FULL_TOPIC "Celý topic"
-
-#define D_LOGGING_PARAMETERS "Voľba logovania"
-#define D_SERIAL_LOG_LEVEL "Sériová úroveň logu"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Webová úroveň logu"
-#define D_SYS_LOG_LEVEL "Systemová úroveň logu"
-#define D_MORE_DEBUG "Viac debug informácí"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Interval telemetrie"
-
-#define D_OTHER_PARAMETERS "Ostatné nastavenia"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
-#define D_MQTT_ENABLE "MQTT aktívne"
-#define D_FRIENDLY_NAME "Friendly Name"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "single device"
-#define D_MULTI_DEVICE "multi device"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Ulož nastavenia"
-#define D_CONFIGURATION_SAVED "Nastavenia uložené"
-#define D_CONFIGURATION_RESET "Nastavenia resetované"
-
-#define D_PROGRAM_VERSION "Verzia programu"
-#define D_BUILD_DATE_AND_TIME "Datum a čas kompilácie"
-#define D_CORE_AND_SDK_VERSION "Verzia Core/SDK"
-#define D_FLASH_WRITE_COUNT "Počet zápisov do pamäte"
-#define D_MAC_ADDRESS "Adresa MAC"
-#define D_MQTT_HOST "Host MQTT"
-#define D_MQTT_PORT "Port MQTT"
-#define D_MQTT_CLIENT "Klient MQTT"
-#define D_MQTT_USER "Používateľ MQTT"
-#define D_MQTT_TOPIC "Topic MQTT"
-#define D_MQTT_GROUP_TOPIC "Topic skupiny MQTT"
-#define D_MQTT_FULL_TOPIC "Celý topic MQTT"
-#define D_MDNS_DISCOVERY "Získavanie mDNS"
-#define D_MDNS_ADVERTISE "Rozosielanie mDNS"
-#define D_ESP_CHIP_ID "ID systému ESP"
-#define D_FLASH_CHIP_ID "ID systému flash pamäte"
-#define D_FLASH_CHIP_SIZE "Veľkosť flash"
-#define D_FREE_PROGRAM_SPACE "Voľné místo pre program"
-
-#define D_UPGRADE_BY_WEBSERVER "Aktualizácia z Web serveru"
-#define D_OTA_URL "URL OTA"
-#define D_START_UPGRADE "Spustiť aktualizáciu"
-#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizácia nahraním súboru"
-#define D_UPLOAD_STARTED "Nahrávanie spustené"
-#define D_UPGRADE_STARTED "Aktualizácia spustená"
-#define D_UPLOAD_DONE "Nahrávanie ukončené"
-#define D_UPLOAD_ERR_1 "Súbor nebol vybraný"
-#define D_UPLOAD_ERR_2 "Málo miesta"
-#define D_UPLOAD_ERR_3 "Magický byte má hodnotu inú než 0xE9"
-#define D_UPLOAD_ERR_4 "Veľkosť programu je väčšia než skutočná veľkosť flash pamäte"
-#define D_UPLOAD_ERR_5 "Chyba nahrávania, nesúhlasia porovnávané bity"
-#define D_UPLOAD_ERR_6 "Chyba nahrávania. Spustený zápis do logu na úrovni 3"
-#define D_UPLOAD_ERR_7 "Nahrávanie prerušené"
-#define D_UPLOAD_ERR_8 "Nesprávny súbor"
-#define D_UPLOAD_ERR_9 "Súbor je príliš veľký"
-#define D_UPLOAD_ERR_10 "Chyba inicializácie RF chipu"
-#define D_UPLOAD_ERR_11 "Chyba zmazania RF chipu"
-#define D_UPLOAD_ERR_12 "Chyba pri zápise do RF chipu"
-#define D_UPLOAD_ERR_13 "Chyba dekódovania RF firmwaru"
-#define D_UPLOAD_ERROR_CODE "Chyba nahrávania"
-
-#define D_ENTER_COMMAND "Vlož príkaz"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Zapni úroveň 2 zápisu Weblog, ak je očekávaná odpoveď"
-#define D_NEED_USER_AND_PASSWORD "Vyžadovaný používateľ=&heslo="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifikuj odtlačok TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Nepripojené TLS do"
-#define D_RETRY_IN "Zopakujem o"
-#define D_VERIFIED "Overený odtlačok "
-#define D_INSECURE "Nesprávne pripojenie z dôvodu chybného odtlačku TLS"
-#define D_CONNECT_FAILED_TO "Nepodarilo sa nadviazať spojenie"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast je vypnutý"
-#define D_MULTICAST_REJOINED "Multicast opäť pripojený"
-#define D_MULTICAST_JOIN_FAILED "Multicast neúspešný"
-#define D_FAILED_TO_SEND_RESPONSE "Nepodarilo sa odoslať odpoveď"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo základná udalosť"
-#define D_WEMO_EVENT_SERVICE "WeMo servisná udalosť"
-#define D_WEMO_META_SERVICE "WeMo meta udalosť"
-#define D_WEMO_SETUP "WeMo setup"
-#define D_RESPONSE_SENT "Odpoveď odoslaná"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue setup"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API nie je implementované"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 pakety odpovede odoslané"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Nastavenia Domoticz"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Spinac idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Vlhk"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Vlhk,Tlak"
- #define D_DOMOTICZ_POWER_ENERGY "Príkon,Energia"
- #define D_DOMOTICZ_ILLUMINANCE "Osvetlenie"
- #define D_DOMOTICZ_COUNT "Počítadlo/PM1"
- #define D_DOMOTICZ_VOLTAGE "Napätie/PM2,5"
- #define D_DOMOTICZ_CURRENT "Prúd/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Aktualizácia časovača"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Nastavenia časovača"
-#define D_TIMER_PARAMETERS "Časovač"
-#define D_TIMER_ENABLE "Povoľ časovače"
-#define D_TIMER_ARM "Aktívne"
-#define D_TIMER_TIME "Čas"
-#define D_TIMER_DAYS "Dni"
-#define D_TIMER_REPEAT "Opakovať"
-#define D_TIMER_OUTPUT "Výstup"
-#define D_TIMER_ACTION "Napájanie"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Nastavenie KNX"
-#define D_KNX_PARAMETERS "KNX parametre"
-#define D_KNX_GENERAL_CONFIG "Všeobecné"
-#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v sieti KNX )"
-#define D_KNX_ENABLE "Povoľ KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dáta na odoslanie na skupinové adresy"
-#define D_ADD "Pridať"
-#define D_DELETE "Zmazať"
-#define D_REPLY "Odpoveď"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pre príjem dát z"
-#define D_RECEIVED_FROM "Prijaté z"
-#define D_KNX_COMMAND_WRITE "Zapíš"
-#define D_KNX_COMMAND_READ "Čítaj"
-#define D_KNX_COMMAND_OTHER "Iné"
-#define D_SENT_TO "pošli"
-#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervovaná a nemôže byť použitá."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Spotreba dnes"
-#define D_ENERGY_YESTERDAY "Spotreba včera"
-#define D_ENERGY_TOTAL "Celková spotreba"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor DS18x20 obsadený"
-#define D_SENSOR_CRC_ERROR "Sensor DS18x20 chyba CRC"
-#define D_SENSORS_FOUND "Nanájdený senzor DS18x20"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Čakanie na"
-#define D_START_SIGNAL_LOW "nízký štartovací signál"
-#define D_START_SIGNAL_HIGH "vysoký štartovací signál"
-#define D_PULSE "impulz"
-#define D_CHECKSUM_FAILURE "Chybný kontrolný súčet"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Senzor neobdržal príkaz ACK"
-#define D_SHT1X_FOUND "SHT1X nanájdený"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "častíc"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. os-X"
-#define D_AY_AXIS "Accel. os-Y"
-#define D_AZ_AXIS "Accel. os-Z"
-#define D_GX_AXIS "Gyro os-X"
-#define D_GY_AXIS "Gyro os-Y"
-#define D_GZ_AXIS "Gyro os-Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Odstráňte záťaž"
-#define D_HX_CAL_REFERENCE "Vložte referenčnú záťaž"
-#define D_HX_CAL_DONE "Skalibrováné"
-#define D_HX_CAL_FAIL "Chyba kalibráce"
-#define D_RESET_HX711 "Reset váhy"
-#define D_CONFIGURE_HX711 "Konfiguráce váhy"
-#define D_HX711_PARAMETERS "Parametre váhy"
-#define D_ITEM_WEIGHT "Vlastná hmotnosť"
-#define D_REFERENCE_WEIGHT "Referenčná hmotnosť"
-#define D_CALIBRATE "Kalibruj"
-#define D_CALIBRATION "Kalibrácia"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Smer vetra"
-#define D_TX20_WIND_SPEED "Rýchlosť vetra"
-#define D_TX20_WIND_SPEED_AVG "Priemerná rýchlosť vetra"
-#define D_TX20_WIND_SPEED_MAX "Maximálna rýchlosť vetra"
-#define D_TX20_NORTH "S"
-#define D_TX20_EAST "V"
-#define D_TX20_SOUTH "J"
-#define D_TX20_WEST "Z"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Spínač" // Suffix "1"
-#define D_SENSOR_BUTTON "Tlačidlo" // Suffix "1"
-#define D_SENSOR_RELAY "Relé" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1",
-#define D_SENSOR_COUNTER "Počítadlo" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Senzor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "hod"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sek"
-#define D_UNIT_SECTORS "sektory"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_SK_SK_H_
+/*
+ sk-SK.h - localization for Slovak with diacritics - Slovak for Tasmota
+
+ Copyright (C) 2019 Vladimír Jendroľ
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_SK_SK_H_
+#define _LANGUAGE_SK_SK_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.2.1.14
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1029
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "sk"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "Ne Po Ut St Št Pi So"
+#define D_MONTH3LIST "JanFebMarAprMájJúnJúlAugSepOktNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Kvalita vzduchu"
+#define D_AP "AP" // Access Point
+#define D_AS "ako"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blikanie"
+#define D_BLINKOFF "BlikanieVyp"
+#define D_BOOT_COUNT "Počítadlo spustení"
+#define D_BRIGHTLIGHT "Svetlý"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Tlačídlo"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bytov"
+#define D_CELSIUS "°C"
+#define D_CHANNEL "Kanál"
+#define D_CO2 "CO2"
+#define D_CODE "kód" // Button code
+#define D_COLDLIGHT "Studené svetlo"
+#define D_COMMAND "Príkaz"
+#define D_CONNECTED "...pripojené"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Počítaj"
+#define D_COUNTER "Počítadlo"
+#define D_CURRENT "Prúd" // As in Voltage and Current
+#define D_DATA "Dáta"
+#define D_FLOW_RATE "Flow rate"
+#define D_DARKLIGHT "Tmavý"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Zablokované"
+#define D_DISTANCE "Vzdialenosť"
+#define D_DNS_SERVER "Server DNS"
+#define D_DONE "Hotovo"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulácia"
+#define D_ENABLED "Otvorený"
+#define D_ERASE "Zmaž"
+#define D_ERROR "Chyba"
+#define D_FAHRENHEIT "Fahrenheita"
+#define D_FAILED "chyba"
+#define D_FALLBACK "Záložný"
+#define D_FALLBACK_TOPIC "Záložný topic"
+#define D_FALSE "Nepravda"
+#define D_FILE "Súbor"
+#define D_FREE_MEMORY "Voľná pamäť"
+#define D_FREQUENCY "Frekvencia"
+#define D_GAS "Plyn"
+#define D_GATEWAY "Predvolená brána"
+#define D_GROUP "Skupina"
+#define D_HOST "Server"
+#define D_HOSTNAME "Názov servera"
+#define D_HUMIDITY "Vlhkosť"
+#define D_ILLUMINANCE "Osvetlenie"
+#define D_IMMEDIATE "Okamžité" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Informácie"
+#define D_INFRARED "Infračervené"
+#define D_INITIALIZED "Inicializovaný"
+#define D_IP_ADDRESS "Adresa IP"
+#define D_LIGHT "Svetlo"
+#define D_LWT "LWT"
+#define D_MODULE "Modul"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-stlačenie"
+#define D_NOISE "Hluk"
+#define D_NONE "Žiadny"
+#define D_OFF "Vyp."
+#define D_OFFLINE "Neaktívny"
+#define D_OK "OK"
+#define D_ON "Zap."
+#define D_ONLINE "Aktívny"
+#define D_PASSWORD "Heslo"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Účinník"
+#define D_POWERUSAGE "Príkon"
+#define D_POWERUSAGE_ACTIVE "Činný príkon"
+#define D_POWERUSAGE_APPARENT "Zdanlivý príkon"
+#define D_POWERUSAGE_REACTIVE "Jalový príkon"
+#define D_PRESSURE "Tlak"
+#define D_PRESSUREATSEALEVEL "Tlak na hladine mora"
+#define D_PROGRAM_FLASH_SIZE "Veľkosť flash pamäte"
+#define D_PROGRAM_SIZE "Veľkosť programu"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Dážď"
+#define D_RECEIVED "Prijatý"
+#define D_RESTART "Reštart"
+#define D_RESTARTING "Reštartuje sa"
+#define D_RESTART_REASON "Príčina reštartu"
+#define D_RESTORE "Obnoviť"
+#define D_RETAINED "Zachované"
+#define D_RULE "Pravidlo"
+#define D_SAVE "Ulož"
+#define D_SENSOR "Senzor"
+#define D_SSID "SSID"
+#define D_START "Spustiť"
+#define D_STD_TIME "STD"
+#define D_STOP "Stop"
+#define D_SUBNET_MASK "Maska podsiete"
+#define D_SUBSCRIBE_TO "Prihlásiť do"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "úspešné."
+#define D_SUNRISE "Svitanie"
+#define D_SUNSET "Súmrak"
+#define D_TEMPERATURE "Teplota"
+#define D_TO "do"
+#define D_TOGGLE "Prepni"
+#define D_TOPIC "Topic"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Odošli"
+#define D_TRUE "Pravda"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "aktualizáciu"
+#define D_UPLOAD "Nahrávanie..."
+#define D_UPTIME "Uptime"
+#define D_USER "Používateľ"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Nízky"
+#define D_UV_INDEX_2 "Stredný"
+#define D_UV_INDEX_3 "Vysoký"
+#define D_UV_INDEX_4 "Nebezpečný"
+#define D_UV_INDEX_5 "Popál1/2"
+#define D_UV_INDEX_6 "Popál3"
+#define D_UV_INDEX_7 "MimoRozsah"
+#define D_UV_LEVEL "úroveň UV"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Verzia"
+#define D_VOLTAGE "Napätie"
+#define D_WEIGHT "Hmotnosť"
+#define D_WARMLIGHT "Teplé svetlo"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "UPOZORNENIE Táto verzia nepodporuje trvalé nastavenia"
+#define D_LEVEL_10 "úroveň 1-0"
+#define D_LEVEL_01 "úroveň 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Logovanie na sériovom porte ukončené"
+#define D_SYSLOG_LOGGING_REENABLED "Obnovený zápis do Syslog"
+
+#define D_SET_BAUDRATE_TO "Nastaviť rýchlosti prenosu na"
+#define D_RECEIVED_TOPIC "Prijatý topic"
+#define D_DATA_SIZE "Veľkosť dát"
+#define D_ANALOG_INPUT "Analógový vstup"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Zablokovanie slučky"
+#define D_WPS_FAILED_WITH_STATUS "Chyba WPSconfig so statusom"
+#define D_ACTIVE_FOR_3_MINUTES "aktívny 3 minúty"
+#define D_FAILED_TO_START "nepodarilo sa spustiť"
+#define D_PATCH_ISSUE_2186 "Chyba 2186"
+#define D_CONNECTING_TO_AP "Pripájanie k AP"
+#define D_IN_MODE "v režime"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba pripojenia, nebola obdržaná IP adresa"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba pripojenia, nedostupný AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba pripojenia, nesprávne heslo pre AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba pripojenia, uplynul AP timeout"
+#define D_ATTEMPTING_CONNECTION "Pripájanie..."
+#define D_CHECKING_CONNECTION "Skúška spojenia..."
+#define D_QUERY_DONE "Vyslanie požiadavky. Nájdená služba MQTT"
+#define D_MQTT_SERVICE_FOUND "Služba MQTT bola nájdená"
+#define D_FOUND_AT "nájdené v"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nebol nájdený"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Uložené do flash pamäte v"
+#define D_LOADED_FROM_FLASH_AT "Stiahnuté z flash pamäte z"
+#define D_USE_DEFAULTS "Použi prednastavené hodnoty"
+#define D_ERASED_SECTOR "Zmazaný sektor"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Pre používanie prostredia Tasmota povoľte JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Firmware MINIMÁLNY
prosím aktualizujte"
+#define D_WEBSERVER_ACTIVE_ON "Aktívny Web server"
+#define D_WITH_IP_ADDRESS "na IP adrese"
+#define D_WEBSERVER_STOPPED "Web server zastavený"
+#define D_FILE_NOT_FOUND "Súbor nebol nájdený"
+#define D_REDIRECTED "Presmerovanie na vlastný portál"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wi-Fi manažér nastaví AP a zachová STA"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wi-Fi manažér nastaví Access Point"
+#define D_TRYING_TO_CONNECT "Skúšam pripojiť zariadenie k sieti"
+
+#define D_RESTART_IN "Reštart"
+#define D_SECONDS "sekúnd"
+#define D_DEVICE_WILL_RESTART "Zariadenie bude reštartované behom niekoľkých sekúnd"
+#define D_BUTTON_TOGGLE "Prepínač"
+#define D_CONFIGURATION "Nastavenia"
+#define D_INFORMATION "Informácie"
+#define D_FIRMWARE_UPGRADE "Aktualizácia firmware"
+#define D_CONSOLE "Konzola"
+#define D_CONFIRM_RESTART "Potvrdenie reštartu"
+
+#define D_CONFIGURE_MODULE "Nastavenia modulu"
+#define D_CONFIGURE_WIFI "Nastavenia WiFi"
+#define D_CONFIGURE_MQTT "Nastavenia MQTT"
+#define D_CONFIGURE_DOMOTICZ "Nastavenia Domoticz"
+#define D_CONFIGURE_LOGGING "Nastavenia logovania"
+#define D_CONFIGURE_OTHER "Ostatné nastavenia"
+#define D_CONFIRM_RESET_CONFIGURATION "Potvrdenie resetu nastavení"
+#define D_RESET_CONFIGURATION "Reset nastavení"
+#define D_BACKUP_CONFIGURATION "Záloha nastavení"
+#define D_RESTORE_CONFIGURATION "Obnovenie nastavení"
+#define D_MAIN_MENU "Hlavné menu"
+
+#define D_MODULE_PARAMETERS "Nastavenia modulu"
+#define D_MODULE_TYPE "Typ modulu"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Nastavenia WiFi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Sken WiFi sietí"
+#define D_SCAN_DONE "Sken dokončený"
+#define D_NO_NETWORKS_FOUND "Sieť nebola nájdená"
+#define D_REFRESH_TO_SCAN_AGAIN "Zopakovať sken"
+#define D_DUPLICATE_ACCESSPOINT "Kópia AP"
+#define D_SKIPPING_LOW_QUALITY "Preskočenie z dôvodu kvality signálu"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSID"
+#define D_AP1_PASSWORD "Heslo AP1"
+#define D_AP2_SSID "AP2 SSID"
+#define D_AP2_PASSWORD "Heslo AP2"
+
+#define D_MQTT_PARAMETERS "Nastavenia MQTT"
+#define D_CLIENT "Klient"
+#define D_FULL_TOPIC "Celý topic"
+
+#define D_LOGGING_PARAMETERS "Voľba logovania"
+#define D_SERIAL_LOG_LEVEL "Sériová úroveň logu"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Webová úroveň logu"
+#define D_SYS_LOG_LEVEL "Systemová úroveň logu"
+#define D_MORE_DEBUG "Viac debug informácí"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Interval telemetrie"
+
+#define D_OTHER_PARAMETERS "Ostatné nastavenia"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Heslo Web administrátora"
+#define D_MQTT_ENABLE "MQTT aktívne"
+#define D_FRIENDLY_NAME "Friendly Name"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "single device"
+#define D_MULTI_DEVICE "multi device"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Ulož nastavenia"
+#define D_CONFIGURATION_SAVED "Nastavenia uložené"
+#define D_CONFIGURATION_RESET "Nastavenia resetované"
+
+#define D_PROGRAM_VERSION "Verzia programu"
+#define D_BUILD_DATE_AND_TIME "Datum a čas kompilácie"
+#define D_CORE_AND_SDK_VERSION "Verzia Core/SDK"
+#define D_FLASH_WRITE_COUNT "Počet zápisov do pamäte"
+#define D_MAC_ADDRESS "Adresa MAC"
+#define D_MQTT_HOST "Host MQTT"
+#define D_MQTT_PORT "Port MQTT"
+#define D_MQTT_CLIENT "Klient MQTT"
+#define D_MQTT_USER "Používateľ MQTT"
+#define D_MQTT_TOPIC "Topic MQTT"
+#define D_MQTT_GROUP_TOPIC "Topic skupiny MQTT"
+#define D_MQTT_FULL_TOPIC "Celý topic MQTT"
+#define D_MDNS_DISCOVERY "Získavanie mDNS"
+#define D_MDNS_ADVERTISE "Rozosielanie mDNS"
+#define D_ESP_CHIP_ID "ID systému ESP"
+#define D_FLASH_CHIP_ID "ID systému flash pamäte"
+#define D_FLASH_CHIP_SIZE "Veľkosť flash"
+#define D_FREE_PROGRAM_SPACE "Voľné místo pre program"
+
+#define D_UPGRADE_BY_WEBSERVER "Aktualizácia z Web serveru"
+#define D_OTA_URL "URL OTA"
+#define D_START_UPGRADE "Spustiť aktualizáciu"
+#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizácia nahraním súboru"
+#define D_UPLOAD_STARTED "Nahrávanie spustené"
+#define D_UPGRADE_STARTED "Aktualizácia spustená"
+#define D_UPLOAD_DONE "Nahrávanie ukončené"
+#define D_UPLOAD_ERR_1 "Súbor nebol vybraný"
+#define D_UPLOAD_ERR_2 "Málo miesta"
+#define D_UPLOAD_ERR_3 "Magický byte má hodnotu inú než 0xE9"
+#define D_UPLOAD_ERR_4 "Veľkosť programu je väčšia než skutočná veľkosť flash pamäte"
+#define D_UPLOAD_ERR_5 "Chyba nahrávania, nesúhlasia porovnávané bity"
+#define D_UPLOAD_ERR_6 "Chyba nahrávania. Spustený zápis do logu na úrovni 3"
+#define D_UPLOAD_ERR_7 "Nahrávanie prerušené"
+#define D_UPLOAD_ERR_8 "Nesprávny súbor"
+#define D_UPLOAD_ERR_9 "Súbor je príliš veľký"
+#define D_UPLOAD_ERR_10 "Chyba inicializácie RF chipu"
+#define D_UPLOAD_ERR_11 "Chyba zmazania RF chipu"
+#define D_UPLOAD_ERR_12 "Chyba pri zápise do RF chipu"
+#define D_UPLOAD_ERR_13 "Chyba dekódovania RF firmwaru"
+#define D_UPLOAD_ERROR_CODE "Chyba nahrávania"
+
+#define D_ENTER_COMMAND "Vlož príkaz"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Zapni úroveň 2 zápisu Weblog, ak je očekávaná odpoveď"
+#define D_NEED_USER_AND_PASSWORD "Vyžadovaný používateľ=&heslo="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifikuj odtlačok TLS..."
+#define D_TLS_CONNECT_FAILED_TO "Nepripojené TLS do"
+#define D_RETRY_IN "Zopakujem o"
+#define D_VERIFIED "Overený odtlačok "
+#define D_INSECURE "Nesprávne pripojenie z dôvodu chybného odtlačku TLS"
+#define D_CONNECT_FAILED_TO "Nepodarilo sa nadviazať spojenie"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast je vypnutý"
+#define D_MULTICAST_REJOINED "Multicast opäť pripojený"
+#define D_MULTICAST_JOIN_FAILED "Multicast neúspešný"
+#define D_FAILED_TO_SEND_RESPONSE "Nepodarilo sa odoslať odpoveď"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo základná udalosť"
+#define D_WEMO_EVENT_SERVICE "WeMo servisná udalosť"
+#define D_WEMO_META_SERVICE "WeMo meta udalosť"
+#define D_WEMO_SETUP "WeMo setup"
+#define D_RESPONSE_SENT "Odpoveď odoslaná"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue setup"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API nie je implementované"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 pakety odpovede odoslané"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Nastavenia Domoticz"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Spinac idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Vlhk"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Vlhk,Tlak"
+ #define D_DOMOTICZ_POWER_ENERGY "Príkon,Energia"
+ #define D_DOMOTICZ_ILLUMINANCE "Osvetlenie"
+ #define D_DOMOTICZ_COUNT "Počítadlo/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Napätie/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Prúd/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Aktualizácia časovača"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Nastavenia časovača"
+#define D_TIMER_PARAMETERS "Časovač"
+#define D_TIMER_ENABLE "Povoľ časovače"
+#define D_TIMER_ARM "Aktívne"
+#define D_TIMER_TIME "Čas"
+#define D_TIMER_DAYS "Dni"
+#define D_TIMER_REPEAT "Opakovať"
+#define D_TIMER_OUTPUT "Výstup"
+#define D_TIMER_ACTION "Napájanie"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Nastavenie KNX"
+#define D_KNX_PARAMETERS "KNX parametre"
+#define D_KNX_GENERAL_CONFIG "Všeobecné"
+#define D_KNX_PHYSICAL_ADDRESS "Fyzická adresa"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musí být jedinečná v sieti KNX )"
+#define D_KNX_ENABLE "Povoľ KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dáta na odoslanie na skupinové adresy"
+#define D_ADD "Pridať"
+#define D_DELETE "Zmazať"
+#define D_REPLY "Odpoveď"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Skupinové adresy pre príjem dát z"
+#define D_RECEIVED_FROM "Prijaté z"
+#define D_KNX_COMMAND_WRITE "Zapíš"
+#define D_KNX_COMMAND_READ "Čítaj"
+#define D_KNX_COMMAND_OTHER "Iné"
+#define D_SENT_TO "pošli"
+#define D_KNX_WARNING "Skupinová adresa ( 0 / 0 / 0 ) je rezervovaná a nemôže byť použitá."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Spotreba dnes"
+#define D_ENERGY_YESTERDAY "Spotreba včera"
+#define D_ENERGY_TOTAL "Celková spotreba"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor DS18x20 obsadený"
+#define D_SENSOR_CRC_ERROR "Sensor DS18x20 chyba CRC"
+#define D_SENSORS_FOUND "Nanájdený senzor DS18x20"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Čakanie na"
+#define D_START_SIGNAL_LOW "nízký štartovací signál"
+#define D_START_SIGNAL_HIGH "vysoký štartovací signál"
+#define D_PULSE "impulz"
+#define D_CHECKSUM_FAILURE "Chybný kontrolný súčet"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Senzor neobdržal príkaz ACK"
+#define D_SHT1X_FOUND "SHT1X nanájdený"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "častíc"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. os-X"
+#define D_AY_AXIS "Accel. os-Y"
+#define D_AZ_AXIS "Accel. os-Z"
+#define D_GX_AXIS "Gyro os-X"
+#define D_GY_AXIS "Gyro os-Y"
+#define D_GZ_AXIS "Gyro os-Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Odstráňte záťaž"
+#define D_HX_CAL_REFERENCE "Vložte referenčnú záťaž"
+#define D_HX_CAL_DONE "Skalibrováné"
+#define D_HX_CAL_FAIL "Chyba kalibráce"
+#define D_RESET_HX711 "Reset váhy"
+#define D_CONFIGURE_HX711 "Konfiguráce váhy"
+#define D_HX711_PARAMETERS "Parametre váhy"
+#define D_ITEM_WEIGHT "Vlastná hmotnosť"
+#define D_REFERENCE_WEIGHT "Referenčná hmotnosť"
+#define D_CALIBRATE "Kalibruj"
+#define D_CALIBRATION "Kalibrácia"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Smer vetra"
+#define D_TX20_WIND_SPEED "Rýchlosť vetra"
+#define D_TX20_WIND_SPEED_AVG "Priemerná rýchlosť vetra"
+#define D_TX20_WIND_SPEED_MAX "Maximálna rýchlosť vetra"
+#define D_TX20_NORTH "S"
+#define D_TX20_EAST "V"
+#define D_TX20_SOUTH "J"
+#define D_TX20_WEST "Z"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Spínač" // Suffix "1"
+#define D_SENSOR_BUTTON "Tlačidlo" // Suffix "1"
+#define D_SENSOR_RELAY "Relé" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1",
+#define D_SENSOR_COUNTER "Počítadlo" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Senzor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "hod"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sek"
+#define D_UNIT_SECTORS "sektory"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_SK_SK_H_
diff --git a/tasmota/language/sv-SE.h b/tasmota/language/sv-SE.h
index 3edeaf193..51ffc2ae3 100644
--- a/tasmota/language/sv-SE.h
+++ b/tasmota/language/sv-SE.h
@@ -1,703 +1,701 @@
-/*
- sv-SE.h - localization for Swedish - Svenska for Tasmota
-
- Copyright (C) 2019 Gunnar Norin
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_SV_SE_H_
-#define _LANGUAGE_SV_SE_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.2.1.11
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-// https://www.science.co.il/language/Locale-codes.php
-#define LANGUAGE_LCID 1053
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "sv"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "SönMånTisOnsTorFreLör"
-#define D_MONTH3LIST "JanFebMarAprMajJunJulAugSepOktNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Luftkvalitet"
-#define D_AP "AP" // Access Point
-#define D_AS "som"
-#define D_AUTO "AUTO"
-#define D_BLINK "Blinka"
-#define D_BLINKOFF "BlinkaAv"
-#define D_BOOT_COUNT "Uppstartsräknare"
-#define D_BRIGHTLIGHT "Ljust"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Knapp"
-#define D_BY "av" // Written by me
-#define D_BYTES "Bytes"
-#define D_CELSIUS "Celsius"
-#define D_CHANNEL "Kanal"
-#define D_CO2 "Koldioxid"
-#define D_CODE "kod" // Button code
-#define D_COLDLIGHT "Kallt"
-#define D_COMMAND "Kommando"
-#define D_CONNECTED "Ansluten"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Räkna"
-#define D_COUNTER "Räknare"
-#define D_CURRENT "Ström" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Mörkt"
-#define D_DEBUG "Debug"
-#define D_DISABLED "Inaktiverad"
-#define D_DISTANCE "Distans"
-#define D_DNS_SERVER "DNS-server"
-#define D_DONE "Gjort"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emulation"
-#define D_ENABLED "Aktiverad"
-#define D_ERASE "Ta bort"
-#define D_ERROR "Fel"
-#define D_FAHRENHEIT "Fahrenheit"
-#define D_FAILED "Misslyckades"
-#define D_FALLBACK "Reserv"
-#define D_FALLBACK_TOPIC "Reservämne"
-#define D_FALSE "Falskt"
-#define D_FILE "Fil"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Ledigt minne"
-#define D_FREQUENCY "Frekvens"
-#define D_GAS "Gas"
-#define D_GATEWAY "Gateway"
-#define D_GROUP "Grupp"
-#define D_HOST "Värd"
-#define D_HOSTNAME "Värdnamn"
-#define D_HUMIDITY "Fuktighet"
-#define D_ILLUMINANCE "Belysnings"
-#define D_IMMEDIATE "Omedelbar" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Info"
-#define D_INFRARED "Infraröd"
-#define D_INITIALIZED "Initialiserad"
-#define D_IP_ADDRESS "IP-adress"
-#define D_LIGHT "Ljus"
-#define D_LWT "LWT"
-#define D_MODULE "Modul"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "fler tryck"
-#define D_NOISE "Oväsen"
-#define D_NONE "Ingen"
-#define D_OFF "Av"
-#define D_OFFLINE "Off-line"
-#define D_OK "Ok"
-#define D_ON "På"
-#define D_ONLINE "Ansluten"
-#define D_PASSWORD "Lösenord"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Spänningsfaktor"
-#define D_POWERUSAGE "Spänning"
-#define D_POWERUSAGE_ACTIVE "Aktiv spänning"
-#define D_POWERUSAGE_APPARENT "Skenbar spänning"
-#define D_POWERUSAGE_REACTIVE "Responsiv spänning"
-#define D_PRESSURE "Tryck"
-#define D_PRESSUREATSEALEVEL "Havstryck"
-#define D_PROGRAM_FLASH_SIZE "Program-flashstorlek"
-#define D_PROGRAM_SIZE "Programstorlek"
-#define D_PROJECT "Projekt"
-#define D_RAIN "Regn"
-#define D_RECEIVED "Mottagen"
-#define D_RESTART "Omstart"
-#define D_RESTARTING "Startar om"
-#define D_RESTART_REASON "Omstartsorsak"
-#define D_RESTORE "återställ"
-#define D_RETAINED "bevarad"
-#define D_RULE "Regel"
-#define D_SAVE "Spara"
-#define D_SENSOR "Sensor"
-#define D_SSID "SSId"
-#define D_START "Starta"
-#define D_STD_TIME "STD"
-#define D_STOP "Stoppa"
-#define D_SUBNET_MASK "Nätmask"
-#define D_SUBSCRIBE_TO "Prenumera på"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Lyckat"
-#define D_SUNRISE "Soluppgång"
-#define D_SUNSET "Solnedgång"
-#define D_TEMPERATURE "Temperatur"
-#define D_TO "till"
-#define D_TOGGLE "Växla"
-#define D_TOPIC "Ämne"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "Sänd"
-#define D_TRUE "Sant"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "uppgradera"
-#define D_UPLOAD "Ladda upp"
-#define D_UPTIME "Upptid"
-#define D_USER "Användare"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Låg"
-#define D_UV_INDEX_2 "Med"
-#define D_UV_INDEX_3 "Hög"
-#define D_UV_INDEX_4 "Farligt"
-#define D_UV_INDEX_5 "Skadligt"
-#define D_UV_INDEX_6 "Extremt"
-#define D_UV_INDEX_7 "UO" // Out of Range
-#define D_UV_LEVEL "UV nivå"
-#define D_UV_POWER "UV kraft"
-#define D_VERSION "Version"
-#define D_VOLTAGE "Volttal"
-#define D_WEIGHT "Vikt"
-#define D_WARMLIGHT "Varm"
-#define D_WEB_SERVER "Webbserver"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "VARNING Denna version supporterar inte beständiga inställningar"
-#define D_LEVEL_10 "nivå 1-0"
-#define D_LEVEL_01 "nivå 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Seriell loggning inaktiverad"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog återaktiverad"
-
-#define D_SET_BAUDRATE_TO "Ange Baudrate till"
-#define D_RECEIVED_TOPIC "Mottaget ämne"
-#define D_DATA_SIZE "Datastorlek"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blockerad loop"
-#define D_WPS_FAILED_WITH_STATUS "WPS-konfigurering MISSLYCKADES med status"
-#define D_ACTIVE_FOR_3_MINUTES "aktiv för 3 minuter"
-#define D_FAILED_TO_START "misslyckades att starta"
-#define D_PATCH_ISSUE_2186 "Laga problem 2186"
-#define D_CONNECTING_TO_AP "Ansluter till AP"
-#define D_IN_MODE "i läge"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Anslutning misslyckades mottog ingen IP-adress"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Anslutning misslyckades, kunde inte nå AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Anslutning misslyckades, fel lösenord för AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Anslutning misslyckadess med AP, timeout"
-#define D_ATTEMPTING_CONNECTION "Försöker ansluta..."
-#define D_CHECKING_CONNECTION "Kontrollerar anslutning..."
-#define D_QUERY_DONE "Fråga utförd. MQTT-tjänster hittades"
-#define D_MQTT_SERVICE_FOUND "MQTT-tjänst hittades på"
-#define D_FOUND_AT "hittades vid"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog-värd hittades inte"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Sparade till flash vid"
-#define D_LOADED_FROM_FLASH_AT "Laddade från flash vid"
-#define D_USE_DEFAULTS "Använd standard"
-#define D_ERASED_SECTOR "Rensade sektor"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "För att använda Tasmota, aktivera JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
var god uppgradera"
-#define D_WEBSERVER_ACTIVE_ON "Webbserver aktiv på"
-#define D_WITH_IP_ADDRESS "med IP-adress"
-#define D_WEBSERVER_STOPPED "Webbserver stoppad"
-#define D_FILE_NOT_FOUND "Filen hittades inte"
-#define D_REDIRECTED "Omdirigerad till fångstportal"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifihanterare ange accesspunkt och behåll station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifihanterare ange accesspunkt"
-#define D_TRYING_TO_CONNECT "Försöker att ansluta enheten till nätverk"
-
-#define D_RESTART_IN "Omstart om"
-#define D_SECONDS "sekunder"
-#define D_DEVICE_WILL_RESTART "Enheten kommer att starta om inom ett antal sekunder"
-#define D_BUTTON_TOGGLE "Växla"
-#define D_CONFIGURATION "Konfigurering"
-#define D_INFORMATION "Information"
-#define D_FIRMWARE_UPGRADE "Uppgradera firmware"
-#define D_CONSOLE "Konsol"
-#define D_CONFIRM_RESTART "Bekräfta omstart"
-
-#define D_CONFIGURE_MODULE "Konfigurera modul"
-#define D_CONFIGURE_WIFI "Konfigurera WiFi"
-#define D_CONFIGURE_MQTT "Konfigurera MQTT"
-#define D_CONFIGURE_DOMOTICZ "Konfigurera Domoticz"
-#define D_CONFIGURE_LOGGING "Konfigurera loggning"
-#define D_CONFIGURE_OTHER "Konfigurera annat"
-#define D_CONFIRM_RESET_CONFIGURATION "Bekräfta nollställning av konfiguration"
-#define D_RESET_CONFIGURATION "Nollställ konfiguration"
-#define D_BACKUP_CONFIGURATION "Säkerhetskopiera konfiguration"
-#define D_RESTORE_CONFIGURATION "Återställ konfiguration"
-#define D_MAIN_MENU "Huvudmeny"
-
-#define D_MODULE_PARAMETERS "Modulparameterar"
-#define D_MODULE_TYPE "Modultyp"
-#define D_PULLUP_ENABLE "Ingen knapp/brytare pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Seriell in"
-#define D_SERIAL_OUT "Seriell ut"
-
-#define D_WIFI_PARAMETERS "Wifi-parameterar"
-#define D_SCAN_FOR_WIFI_NETWORKS "Skanna efter wifi-nätverk"
-#define D_SCAN_DONE "Skanning slutförd"
-#define D_NO_NETWORKS_FOUND "Inga nätverk hittades"
-#define D_REFRESH_TO_SCAN_AGAIN "Uppdatera för att skanna igen"
-#define D_DUPLICATE_ACCESSPOINT "Dubblett accesspunkt"
-#define D_SKIPPING_LOW_QUALITY "Hoppa över pga dålig kvalitet"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSId"
-#define D_AP1_PASSWORD "AP1 lösenord"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 lösenord"
-
-#define D_MQTT_PARAMETERS "MQTT-parameterar"
-#define D_CLIENT "Klient"
-#define D_FULL_TOPIC "Fullt ämne"
-
-#define D_LOGGING_PARAMETERS "Loggningsparametrar"
-#define D_SERIAL_LOG_LEVEL "Seriell loggnivå"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Webb loggnivå"
-#define D_SYS_LOG_LEVEL "Syslog-nivå"
-#define D_MORE_DEBUG "Mer debugging"
-#define D_SYSLOG_HOST "Syslog-värd"
-#define D_SYSLOG_PORT "Syslog-port"
-#define D_TELEMETRY_PERIOD "Telemetriperiod"
-
-#define D_OTHER_PARAMETERS "Andra parametrar"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Webbadmin-lösenord"
-#define D_MQTT_ENABLE "MQTT aktivera"
-#define D_FRIENDLY_NAME "Läsbart namn"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "soloenhet"
-#define D_MULTI_DEVICE "multienhet"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Spara konfiguration"
-#define D_CONFIGURATION_SAVED "Konfiguration sparad"
-#define D_CONFIGURATION_RESET "Konfiguration nollställd"
-
-#define D_PROGRAM_VERSION "Programversion"
-#define D_BUILD_DATE_AND_TIME "Kompilerings datum & tid"
-#define D_CORE_AND_SDK_VERSION "Core/SDK version"
-#define D_FLASH_WRITE_COUNT "Flash-skrivningsräknare"
-#define D_MAC_ADDRESS "MAC-adress"
-#define D_MQTT_HOST "MQTT-värd"
-#define D_MQTT_PORT "MQTT-port"
-#define D_MQTT_CLIENT "MQTT-klient"
-#define D_MQTT_USER "MQTT-användare"
-#define D_MQTT_TOPIC "MQTT-ämne"
-#define D_MQTT_GROUP_TOPIC "MQTT gruppämne"
-#define D_MQTT_FULL_TOPIC "MQTT fullt ämne"
-#define D_MDNS_DISCOVERY "mDNS upptäckning"
-#define D_MDNS_ADVERTISE "mDNS annonsering"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Flash-storlek"
-#define D_FREE_PROGRAM_SPACE "Ledigt programutrymme"
-
-#define D_UPGRADE_BY_WEBSERVER "Uppgradering via webbserver"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Starta uppdatering"
-#define D_UPGRADE_BY_FILE_UPLOAD "Uppgradering via filuppladdning"
-#define D_UPLOAD_STARTED "Uppladdning startad"
-#define D_UPGRADE_STARTED "Uppgradeing startad"
-#define D_UPLOAD_DONE "Uppladdning klar"
-#define D_UPLOAD_ERR_1 "Ingen fil vald"
-#define D_UPLOAD_ERR_2 "Inte tillräckligt med ledigt utrymme"
-#define D_UPLOAD_ERR_3 "Magisk byte är inte 0xE9"
-#define D_UPLOAD_ERR_4 "Programmets flashstorlek är större än den verkliga flashstorleken"
-#define D_UPLOAD_ERR_5 "Uppladdningbuffert stämmer inte överens"
-#define D_UPLOAD_ERR_6 "Uppladdning misslyckad. Aktivera loggning 3"
-#define D_UPLOAD_ERR_7 "Uppladdning avbruten"
-#define D_UPLOAD_ERR_8 "Ogiltig fil"
-#define D_UPLOAD_ERR_9 "För stor fil"
-#define D_UPLOAD_ERR_10 "Misslyckades initera RF chip"
-#define D_UPLOAD_ERR_11 "Misslyckades rensa RF chip"
-#define D_UPLOAD_ERR_12 "Misslyckades skriva till RF chip"
-#define D_UPLOAD_ERR_13 "Misslyckades avkoda RF firmware"
-#define D_UPLOAD_ERROR_CODE "Uppladdningsfelkod"
-
-#define D_ENTER_COMMAND "Ange kommando"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Aktivera webblogg 2 om svar förväntas"
-#define D_NEED_USER_AND_PASSWORD "Behöver user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verifierar TLS fingeravtryck..."
-#define D_TLS_CONNECT_FAILED_TO "TLS-anslutning misslyckades"
-#define D_RETRY_IN "Försöker igen om"
-#define D_VERIFIED "Verifierad med fingeravtryck"
-#define D_INSECURE "Osäker anslutning pga ogiltigt fingeravtryck"
-#define D_CONNECT_FAILED_TO "Anslutning misslyckades"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast inaktiverad"
-#define D_MULTICAST_REJOINED "Multicast (åter)anslöt"
-#define D_MULTICAST_JOIN_FAILED "Multicast anslutning misslyckades"
-#define D_FAILED_TO_SEND_RESPONSE "Misslyckades skicka svar"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo standardhändelse"
-#define D_WEMO_EVENT_SERVICE "WeMo händelsetjänst"
-#define D_WEMO_META_SERVICE "WeMo metatjänst"
-#define D_WEMO_SETUP "WeMo installation"
-#define D_RESPONSE_SENT "Svar skickat"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue installation"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API inte implementerat"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 svarspaket skickade"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz parametetrar"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Nyckel idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Fuk"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Fuk,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Spänning,Energi"
- #define D_DOMOTICZ_ILLUMINANCE "Belysningsstyrka"
- #define D_DOMOTICZ_COUNT "Antal/PM1"
- #define D_DOMOTICZ_VOLTAGE "Volt/PM2.5"
- #define D_DOMOTICZ_CURRENT "Ström/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Luftkvalitet"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Uppdatera timer"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Konfigurera timer"
-#define D_TIMER_PARAMETERS "Timerparametrar"
-#define D_TIMER_ENABLE "Aktivera timer"
-#define D_TIMER_ARM "Aktivera"
-#define D_TIMER_TIME "Tid"
-#define D_TIMER_DAYS "Dagar"
-#define D_TIMER_REPEAT "Repetera"
-#define D_TIMER_OUTPUT "Utgång"
-#define D_TIMER_ACTION "Åtgärd"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Konfigurera KNX"
-#define D_KNX_PARAMETERS "KNX Parametrar"
-#define D_KNX_GENERAL_CONFIG "Allmänt"
-#define D_KNX_PHYSICAL_ADDRESS "Fysisk adress"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Måste vara unik på KNX-nätverket )"
-#define D_KNX_ENABLE "Aktivera KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data att skicka till gruppadresser"
-#define D_ADD "Lägg till"
-#define D_DELETE "Ta bort"
-#define D_REPLY "Svara"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppadresser att ta emot data från"
-#define D_RECEIVED_FROM "Mottagen från"
-#define D_KNX_COMMAND_WRITE "Skriv"
-#define D_KNX_COMMAND_READ "Läs"
-#define D_KNX_COMMAND_OTHER "Andra"
-#define D_SENT_TO "skickad till"
-#define D_KNX_WARNING "Gruppadressen ( 0 / 0 / 0 ) är reserverad och kan inte användas."
-#define D_KNX_ENHANCEMENT "Kommuniceringsförbättring"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energi idag"
-#define D_ENERGY_YESTERDAY "Energi igår"
-#define D_ENERGY_TOTAL "Energi totalt"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensor upptagen"
-#define D_SENSOR_CRC_ERROR "Sensor CRC-fel"
-#define D_SENSORS_FOUND "Sensorer hittades"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Timeout under väntan"
-#define D_START_SIGNAL_LOW "startsignal låg"
-#define D_START_SIGNAL_HIGH "startsignal hög"
-#define D_PULSE "puls"
-#define D_CHECKSUM_FAILURE "Fel kontrollsumma"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor besvarade inte med ACK kommando"
-#define D_SHT1X_FOUND "SHT1X hittades"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Partiklar"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axel"
-#define D_AY_AXIS "Accel. Y-Axel"
-#define D_AZ_AXIS "Accel. Z-Axel"
-#define D_GX_AXIS "Gyro X-Axel"
-#define D_GY_AXIS "Gyro Y-Axel"
-#define D_GZ_AXIS "Gyro Z-Axel"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Ta bort vikter"
-#define D_HX_CAL_REFERENCE "Ladda referensvikt"
-#define D_HX_CAL_DONE "Kalibrerad"
-#define D_HX_CAL_FAIL "Kalibrering misslyckad"
-#define D_RESET_HX711 "Återställ våg"
-#define D_CONFIGURE_HX711 "Konfigurera våg"
-#define D_HX711_PARAMETERS "Vågparametrar"
-#define D_ITEM_WEIGHT "Objektsvikt"
-#define D_REFERENCE_WEIGHT "Referensvikt"
-#define D_CALIBRATE "Kalibrera"
-#define D_CALIBRATION "Kalibrering"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Vindriktning"
-#define D_TX20_WIND_SPEED "Vindstyrka"
-#define D_TX20_WIND_SPEED_AVG "Vindstyrka medel"
-#define D_TX20_WIND_SPEED_MAX "Vindstyrka max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "Ö"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "V"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3-spelare"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Omkopplare" // Suffix "1"
-#define D_SENSOR_BUTTON "Knapp" // Suffix "1"
-#define D_SENSOR_RELAY "Relä" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Räknare" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Tim"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "ink"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sek"
-#define D_UNIT_SECTORS "sektorer"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Fasvinkel"
-#define D_IMPORT_ACTIVE "Import aktiv"
-#define D_EXPORT_ACTIVE "Export aktiv"
-#define D_IMPORT_REACTIVE "Import reaktiv"
-#define D_EXPORT_REACTIVE "Export reaktiv"
-#define D_TOTAL_REACTIVE "Total reaktiv"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_SV_SE_H_
+/*
+ sv-SE.h - localization for Swedish - Svenska for Tasmota
+
+ Copyright (C) 2019 Gunnar Norin
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_SV_SE_H_
+#define _LANGUAGE_SV_SE_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.2.1.11
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+// https://www.science.co.il/language/Locale-codes.php
+#define LANGUAGE_LCID 1053
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "sv"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "SönMånTisOnsTorFreLör"
+#define D_MONTH3LIST "JanFebMarAprMajJunJulAugSepOktNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Luftkvalitet"
+#define D_AP "AP" // Access Point
+#define D_AS "som"
+#define D_AUTO "AUTO"
+#define D_BLINK "Blinka"
+#define D_BLINKOFF "BlinkaAv"
+#define D_BOOT_COUNT "Uppstartsräknare"
+#define D_BRIGHTLIGHT "Ljust"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Knapp"
+#define D_BY "av" // Written by me
+#define D_BYTES "Bytes"
+#define D_CELSIUS "Celsius"
+#define D_CHANNEL "Kanal"
+#define D_CO2 "Koldioxid"
+#define D_CODE "kod" // Button code
+#define D_COLDLIGHT "Kallt"
+#define D_COMMAND "Kommando"
+#define D_CONNECTED "Ansluten"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Räkna"
+#define D_COUNTER "Räknare"
+#define D_CURRENT "Ström" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Mörkt"
+#define D_DEBUG "Debug"
+#define D_DISABLED "Inaktiverad"
+#define D_DISTANCE "Distans"
+#define D_DNS_SERVER "DNS-server"
+#define D_DONE "Gjort"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emulation"
+#define D_ENABLED "Aktiverad"
+#define D_ERASE "Ta bort"
+#define D_ERROR "Fel"
+#define D_FAHRENHEIT "Fahrenheit"
+#define D_FAILED "Misslyckades"
+#define D_FALLBACK "Reserv"
+#define D_FALLBACK_TOPIC "Reservämne"
+#define D_FALSE "Falskt"
+#define D_FILE "Fil"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Ledigt minne"
+#define D_FREQUENCY "Frekvens"
+#define D_GAS "Gas"
+#define D_GATEWAY "Gateway"
+#define D_GROUP "Grupp"
+#define D_HOST "Värd"
+#define D_HOSTNAME "Värdnamn"
+#define D_HUMIDITY "Fuktighet"
+#define D_ILLUMINANCE "Belysnings"
+#define D_IMMEDIATE "Omedelbar" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Info"
+#define D_INFRARED "Infraröd"
+#define D_INITIALIZED "Initialiserad"
+#define D_IP_ADDRESS "IP-adress"
+#define D_LIGHT "Ljus"
+#define D_LWT "LWT"
+#define D_MODULE "Modul"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "fler tryck"
+#define D_NOISE "Oväsen"
+#define D_NONE "Ingen"
+#define D_OFF "Av"
+#define D_OFFLINE "Off-line"
+#define D_OK "Ok"
+#define D_ON "På"
+#define D_ONLINE "Ansluten"
+#define D_PASSWORD "Lösenord"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Spänningsfaktor"
+#define D_POWERUSAGE "Spänning"
+#define D_POWERUSAGE_ACTIVE "Aktiv spänning"
+#define D_POWERUSAGE_APPARENT "Skenbar spänning"
+#define D_POWERUSAGE_REACTIVE "Responsiv spänning"
+#define D_PRESSURE "Tryck"
+#define D_PRESSUREATSEALEVEL "Havstryck"
+#define D_PROGRAM_FLASH_SIZE "Program-flashstorlek"
+#define D_PROGRAM_SIZE "Programstorlek"
+#define D_PROJECT "Projekt"
+#define D_RAIN "Regn"
+#define D_RECEIVED "Mottagen"
+#define D_RESTART "Omstart"
+#define D_RESTARTING "Startar om"
+#define D_RESTART_REASON "Omstartsorsak"
+#define D_RESTORE "återställ"
+#define D_RETAINED "bevarad"
+#define D_RULE "Regel"
+#define D_SAVE "Spara"
+#define D_SENSOR "Sensor"
+#define D_SSID "SSId"
+#define D_START "Starta"
+#define D_STD_TIME "STD"
+#define D_STOP "Stoppa"
+#define D_SUBNET_MASK "Nätmask"
+#define D_SUBSCRIBE_TO "Prenumera på"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Lyckat"
+#define D_SUNRISE "Soluppgång"
+#define D_SUNSET "Solnedgång"
+#define D_TEMPERATURE "Temperatur"
+#define D_TO "till"
+#define D_TOGGLE "Växla"
+#define D_TOPIC "Ämne"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "Sänd"
+#define D_TRUE "Sant"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "uppgradera"
+#define D_UPLOAD "Ladda upp"
+#define D_UPTIME "Upptid"
+#define D_USER "Användare"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Låg"
+#define D_UV_INDEX_2 "Med"
+#define D_UV_INDEX_3 "Hög"
+#define D_UV_INDEX_4 "Farligt"
+#define D_UV_INDEX_5 "Skadligt"
+#define D_UV_INDEX_6 "Extremt"
+#define D_UV_INDEX_7 "UO" // Out of Range
+#define D_UV_LEVEL "UV nivå"
+#define D_UV_POWER "UV kraft"
+#define D_VERSION "Version"
+#define D_VOLTAGE "Volttal"
+#define D_WEIGHT "Vikt"
+#define D_WARMLIGHT "Varm"
+#define D_WEB_SERVER "Webbserver"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "VARNING Denna version supporterar inte beständiga inställningar"
+#define D_LEVEL_10 "nivå 1-0"
+#define D_LEVEL_01 "nivå 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Seriell loggning inaktiverad"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog återaktiverad"
+
+#define D_SET_BAUDRATE_TO "Ange Baudrate till"
+#define D_RECEIVED_TOPIC "Mottaget ämne"
+#define D_DATA_SIZE "Datastorlek"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blockerad loop"
+#define D_WPS_FAILED_WITH_STATUS "WPS-konfigurering MISSLYCKADES med status"
+#define D_ACTIVE_FOR_3_MINUTES "aktiv för 3 minuter"
+#define D_FAILED_TO_START "misslyckades att starta"
+#define D_PATCH_ISSUE_2186 "Laga problem 2186"
+#define D_CONNECTING_TO_AP "Ansluter till AP"
+#define D_IN_MODE "i läge"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Anslutning misslyckades mottog ingen IP-adress"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Anslutning misslyckades, kunde inte nå AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Anslutning misslyckades, fel lösenord för AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Anslutning misslyckadess med AP, timeout"
+#define D_ATTEMPTING_CONNECTION "Försöker ansluta..."
+#define D_CHECKING_CONNECTION "Kontrollerar anslutning..."
+#define D_QUERY_DONE "Fråga utförd. MQTT-tjänster hittades"
+#define D_MQTT_SERVICE_FOUND "MQTT-tjänst hittades på"
+#define D_FOUND_AT "hittades vid"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog-värd hittades inte"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Sparade till flash vid"
+#define D_LOADED_FROM_FLASH_AT "Laddade från flash vid"
+#define D_USE_DEFAULTS "Använd standard"
+#define D_ERASED_SECTOR "Rensade sektor"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "För att använda Tasmota, aktivera JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "MINIMAL firmware
var god uppgradera"
+#define D_WEBSERVER_ACTIVE_ON "Webbserver aktiv på"
+#define D_WITH_IP_ADDRESS "med IP-adress"
+#define D_WEBSERVER_STOPPED "Webbserver stoppad"
+#define D_FILE_NOT_FOUND "Filen hittades inte"
+#define D_REDIRECTED "Omdirigerad till fångstportal"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifihanterare ange accesspunkt och behåll station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifihanterare ange accesspunkt"
+#define D_TRYING_TO_CONNECT "Försöker att ansluta enheten till nätverk"
+
+#define D_RESTART_IN "Omstart om"
+#define D_SECONDS "sekunder"
+#define D_DEVICE_WILL_RESTART "Enheten kommer att starta om inom ett antal sekunder"
+#define D_BUTTON_TOGGLE "Växla"
+#define D_CONFIGURATION "Konfigurering"
+#define D_INFORMATION "Information"
+#define D_FIRMWARE_UPGRADE "Uppgradera firmware"
+#define D_CONSOLE "Konsol"
+#define D_CONFIRM_RESTART "Bekräfta omstart"
+
+#define D_CONFIGURE_MODULE "Konfigurera modul"
+#define D_CONFIGURE_WIFI "Konfigurera WiFi"
+#define D_CONFIGURE_MQTT "Konfigurera MQTT"
+#define D_CONFIGURE_DOMOTICZ "Konfigurera Domoticz"
+#define D_CONFIGURE_LOGGING "Konfigurera loggning"
+#define D_CONFIGURE_OTHER "Konfigurera annat"
+#define D_CONFIRM_RESET_CONFIGURATION "Bekräfta nollställning av konfiguration"
+#define D_RESET_CONFIGURATION "Nollställ konfiguration"
+#define D_BACKUP_CONFIGURATION "Säkerhetskopiera konfiguration"
+#define D_RESTORE_CONFIGURATION "Återställ konfiguration"
+#define D_MAIN_MENU "Huvudmeny"
+
+#define D_MODULE_PARAMETERS "Modulparameterar"
+#define D_MODULE_TYPE "Modultyp"
+#define D_PULLUP_ENABLE "Ingen knapp/brytare pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Seriell in"
+#define D_SERIAL_OUT "Seriell ut"
+
+#define D_WIFI_PARAMETERS "Wifi-parameterar"
+#define D_SCAN_FOR_WIFI_NETWORKS "Skanna efter wifi-nätverk"
+#define D_SCAN_DONE "Skanning slutförd"
+#define D_NO_NETWORKS_FOUND "Inga nätverk hittades"
+#define D_REFRESH_TO_SCAN_AGAIN "Uppdatera för att skanna igen"
+#define D_DUPLICATE_ACCESSPOINT "Dubblett accesspunkt"
+#define D_SKIPPING_LOW_QUALITY "Hoppa över pga dålig kvalitet"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSId"
+#define D_AP1_PASSWORD "AP1 lösenord"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 lösenord"
+
+#define D_MQTT_PARAMETERS "MQTT-parameterar"
+#define D_CLIENT "Klient"
+#define D_FULL_TOPIC "Fullt ämne"
+
+#define D_LOGGING_PARAMETERS "Loggningsparametrar"
+#define D_SERIAL_LOG_LEVEL "Seriell loggnivå"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Webb loggnivå"
+#define D_SYS_LOG_LEVEL "Syslog-nivå"
+#define D_MORE_DEBUG "Mer debugging"
+#define D_SYSLOG_HOST "Syslog-värd"
+#define D_SYSLOG_PORT "Syslog-port"
+#define D_TELEMETRY_PERIOD "Telemetriperiod"
+
+#define D_OTHER_PARAMETERS "Andra parametrar"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Webbadmin-lösenord"
+#define D_MQTT_ENABLE "MQTT aktivera"
+#define D_FRIENDLY_NAME "Läsbart namn"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "soloenhet"
+#define D_MULTI_DEVICE "multienhet"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Spara konfiguration"
+#define D_CONFIGURATION_SAVED "Konfiguration sparad"
+#define D_CONFIGURATION_RESET "Konfiguration nollställd"
+
+#define D_PROGRAM_VERSION "Programversion"
+#define D_BUILD_DATE_AND_TIME "Kompilerings datum & tid"
+#define D_CORE_AND_SDK_VERSION "Core/SDK version"
+#define D_FLASH_WRITE_COUNT "Flash-skrivningsräknare"
+#define D_MAC_ADDRESS "MAC-adress"
+#define D_MQTT_HOST "MQTT-värd"
+#define D_MQTT_PORT "MQTT-port"
+#define D_MQTT_CLIENT "MQTT-klient"
+#define D_MQTT_USER "MQTT-användare"
+#define D_MQTT_TOPIC "MQTT-ämne"
+#define D_MQTT_GROUP_TOPIC "MQTT gruppämne"
+#define D_MQTT_FULL_TOPIC "MQTT fullt ämne"
+#define D_MDNS_DISCOVERY "mDNS upptäckning"
+#define D_MDNS_ADVERTISE "mDNS annonsering"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Flash-storlek"
+#define D_FREE_PROGRAM_SPACE "Ledigt programutrymme"
+
+#define D_UPGRADE_BY_WEBSERVER "Uppgradering via webbserver"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Starta uppdatering"
+#define D_UPGRADE_BY_FILE_UPLOAD "Uppgradering via filuppladdning"
+#define D_UPLOAD_STARTED "Uppladdning startad"
+#define D_UPGRADE_STARTED "Uppgradeing startad"
+#define D_UPLOAD_DONE "Uppladdning klar"
+#define D_UPLOAD_ERR_1 "Ingen fil vald"
+#define D_UPLOAD_ERR_2 "Inte tillräckligt med ledigt utrymme"
+#define D_UPLOAD_ERR_3 "Magisk byte är inte 0xE9"
+#define D_UPLOAD_ERR_4 "Programmets flashstorlek är större än den verkliga flashstorleken"
+#define D_UPLOAD_ERR_5 "Uppladdningbuffert stämmer inte överens"
+#define D_UPLOAD_ERR_6 "Uppladdning misslyckad. Aktivera loggning 3"
+#define D_UPLOAD_ERR_7 "Uppladdning avbruten"
+#define D_UPLOAD_ERR_8 "Ogiltig fil"
+#define D_UPLOAD_ERR_9 "För stor fil"
+#define D_UPLOAD_ERR_10 "Misslyckades initera RF chip"
+#define D_UPLOAD_ERR_11 "Misslyckades rensa RF chip"
+#define D_UPLOAD_ERR_12 "Misslyckades skriva till RF chip"
+#define D_UPLOAD_ERR_13 "Misslyckades avkoda RF firmware"
+#define D_UPLOAD_ERROR_CODE "Uppladdningsfelkod"
+
+#define D_ENTER_COMMAND "Ange kommando"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Aktivera webblogg 2 om svar förväntas"
+#define D_NEED_USER_AND_PASSWORD "Behöver user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verifierar TLS fingeravtryck..."
+#define D_TLS_CONNECT_FAILED_TO "TLS-anslutning misslyckades"
+#define D_RETRY_IN "Försöker igen om"
+#define D_VERIFIED "Verifierad med fingeravtryck"
+#define D_INSECURE "Osäker anslutning pga ogiltigt fingeravtryck"
+#define D_CONNECT_FAILED_TO "Anslutning misslyckades"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast inaktiverad"
+#define D_MULTICAST_REJOINED "Multicast (åter)anslöt"
+#define D_MULTICAST_JOIN_FAILED "Multicast anslutning misslyckades"
+#define D_FAILED_TO_SEND_RESPONSE "Misslyckades skicka svar"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo standardhändelse"
+#define D_WEMO_EVENT_SERVICE "WeMo händelsetjänst"
+#define D_WEMO_META_SERVICE "WeMo metatjänst"
+#define D_WEMO_SETUP "WeMo installation"
+#define D_RESPONSE_SENT "Svar skickat"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue installation"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API inte implementerat"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 svarspaket skickade"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz parametetrar"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Nyckel idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Fuk"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Fuk,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Spänning,Energi"
+ #define D_DOMOTICZ_ILLUMINANCE "Belysningsstyrka"
+ #define D_DOMOTICZ_COUNT "Antal/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Volt/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Ström/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Luftkvalitet"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Uppdatera timer"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Konfigurera timer"
+#define D_TIMER_PARAMETERS "Timerparametrar"
+#define D_TIMER_ENABLE "Aktivera timer"
+#define D_TIMER_ARM "Aktivera"
+#define D_TIMER_TIME "Tid"
+#define D_TIMER_DAYS "Dagar"
+#define D_TIMER_REPEAT "Repetera"
+#define D_TIMER_OUTPUT "Utgång"
+#define D_TIMER_ACTION "Åtgärd"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Konfigurera KNX"
+#define D_KNX_PARAMETERS "KNX Parametrar"
+#define D_KNX_GENERAL_CONFIG "Allmänt"
+#define D_KNX_PHYSICAL_ADDRESS "Fysisk adress"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Måste vara unik på KNX-nätverket )"
+#define D_KNX_ENABLE "Aktivera KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data att skicka till gruppadresser"
+#define D_ADD "Lägg till"
+#define D_DELETE "Ta bort"
+#define D_REPLY "Svara"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Gruppadresser att ta emot data från"
+#define D_RECEIVED_FROM "Mottagen från"
+#define D_KNX_COMMAND_WRITE "Skriv"
+#define D_KNX_COMMAND_READ "Läs"
+#define D_KNX_COMMAND_OTHER "Andra"
+#define D_SENT_TO "skickad till"
+#define D_KNX_WARNING "Gruppadressen ( 0 / 0 / 0 ) är reserverad och kan inte användas."
+#define D_KNX_ENHANCEMENT "Kommuniceringsförbättring"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energi idag"
+#define D_ENERGY_YESTERDAY "Energi igår"
+#define D_ENERGY_TOTAL "Energi totalt"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensor upptagen"
+#define D_SENSOR_CRC_ERROR "Sensor CRC-fel"
+#define D_SENSORS_FOUND "Sensorer hittades"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Timeout under väntan"
+#define D_START_SIGNAL_LOW "startsignal låg"
+#define D_START_SIGNAL_HIGH "startsignal hög"
+#define D_PULSE "puls"
+#define D_CHECKSUM_FAILURE "Fel kontrollsumma"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor besvarade inte med ACK kommando"
+#define D_SHT1X_FOUND "SHT1X hittades"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Partiklar"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axel"
+#define D_AY_AXIS "Accel. Y-Axel"
+#define D_AZ_AXIS "Accel. Z-Axel"
+#define D_GX_AXIS "Gyro X-Axel"
+#define D_GY_AXIS "Gyro Y-Axel"
+#define D_GZ_AXIS "Gyro Z-Axel"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Ta bort vikter"
+#define D_HX_CAL_REFERENCE "Ladda referensvikt"
+#define D_HX_CAL_DONE "Kalibrerad"
+#define D_HX_CAL_FAIL "Kalibrering misslyckad"
+#define D_RESET_HX711 "Återställ våg"
+#define D_CONFIGURE_HX711 "Konfigurera våg"
+#define D_HX711_PARAMETERS "Vågparametrar"
+#define D_ITEM_WEIGHT "Objektsvikt"
+#define D_REFERENCE_WEIGHT "Referensvikt"
+#define D_CALIBRATE "Kalibrera"
+#define D_CALIBRATION "Kalibrering"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Vindriktning"
+#define D_TX20_WIND_SPEED "Vindstyrka"
+#define D_TX20_WIND_SPEED_AVG "Vindstyrka medel"
+#define D_TX20_WIND_SPEED_MAX "Vindstyrka max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "Ö"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "V"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3-spelare"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Omkopplare" // Suffix "1"
+#define D_SENSOR_BUTTON "Knapp" // Suffix "1"
+#define D_SENSOR_RELAY "Relä" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Räknare" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Tim"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "ink"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sek"
+#define D_UNIT_SECTORS "sektorer"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Fasvinkel"
+#define D_IMPORT_ACTIVE "Import aktiv"
+#define D_EXPORT_ACTIVE "Export aktiv"
+#define D_IMPORT_REACTIVE "Import reaktiv"
+#define D_EXPORT_REACTIVE "Export reaktiv"
+#define D_TOTAL_REACTIVE "Total reaktiv"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_SV_SE_H_
diff --git a/tasmota/language/tr-TR.h b/tasmota/language/tr-TR.h
index 02f89c833..6bc48c40f 100644
--- a/tasmota/language/tr-TR.h
+++ b/tasmota/language/tr-TR.h
@@ -1,703 +1,701 @@
-/*
- tr-TR.h - localization for Turkish - Turkey for Tasmota
-
- Copyright (C) 2019 Ali Sait Teke 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 .
-*/
-
-#ifndef _LANGUAGE_TR_TR_H_
-#define _LANGUAGE_TR_TR_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v6.1.1
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1055
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "tr"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "."
-#define D_MONTH_DAY_SEPARATOR "."
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "PazPztSalCarPerCumCmt"
-#define D_MONTH3LIST "OckSubMarNisMayHazTemAguEylEkmKasAra"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Hava Kalitesi"
-#define D_AP "AP" // Access Point
-#define D_AS "as"
-#define D_AUTO "OTOMATIK"
-#define D_BLINK "Blink"
-#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Yeniden başlama sayısı"
-#define D_BRIGHTLIGHT "Işık"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Buton"
-#define D_BY "by" // Written by me
-#define D_BYTES "Bayt"
-#define D_CELSIUS "Derece"
-#define D_CHANNEL "Channel"
-#define D_CO2 "Karbon dioksit"
-#define D_CODE "kod" // Button code
-#define D_COLDLIGHT "Soğuk"
-#define D_COMMAND "Komut"
-#define D_CONNECTED "Bağlandı"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Sayı"
-#define D_COUNTER "Sayaç"
-#define D_CURRENT "Current" // As in Voltage and Current
-#define D_DATA "Data"
-#define D_DARKLIGHT "Karanlık"
-#define D_DEBUG "Hata Ayıklama"
-#define D_DISABLED "Etkin Değil"
-#define D_DISTANCE "Mesage"
-#define D_DNS_SERVER "DNS Sunucu"
-#define D_DONE "Tamam"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Emülasyon"
-#define D_ENABLED "Etkin"
-#define D_ERASE "Temizle"
-#define D_ERROR "Hata"
-#define D_FAHRENHEIT "Fahrenayt"
-#define D_FAILED "Başlarısız"
-#define D_FALLBACK "Geri iletim"
-#define D_FALLBACK_TOPIC "Geri İletim Topiği"
-#define D_FALSE "False"
-#define D_FILE "Dosya"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "Boş Hafıza"
-#define D_FREQUENCY "Frekans"
-#define D_GAS "Gas"
-#define D_GATEWAY "Geçit"
-#define D_GROUP "Grup"
-#define D_HOST "Host"
-#define D_HOSTNAME "Host Adresi"
-#define D_HUMIDITY "Nem"
-#define D_ILLUMINANCE "Aydınlık"
-#define D_IMMEDIATE "derhal" // Button immediate
-#define D_INDEX "Index"
-#define D_INFO "Bilgi"
-#define D_INFRARED "Kızılötesi"
-#define D_INITIALIZED "Başlatıldı"
-#define D_IP_ADDRESS "IP Adresi"
-#define D_LIGHT "Işık"
-#define D_LWT "LWT"
-#define D_MODULE "Modül"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "multi-press"
-#define D_NOISE "Noise"
-#define D_NONE "None"
-#define D_OFF "Off"
-#define D_OFFLINE "Çevirimdışı"
-#define D_OK "Tamam"
-#define D_ON "On"
-#define D_ONLINE "Çevirimiçi"
-#define D_PASSWORD "Şifre"
-#define D_PORT "Port"
-#define D_POWER_FACTOR "Güç Faktörü"
-#define D_POWERUSAGE "Güç"
-#define D_POWERUSAGE_ACTIVE "Aktif Güç"
-#define D_POWERUSAGE_APPARENT "Görünen Güç"
-#define D_POWERUSAGE_REACTIVE "Reaktif Güç"
-#define D_PRESSURE "Basınç"
-#define D_PRESSUREATSEALEVEL "Deniz Seviyesi Basıncı"
-#define D_PROGRAM_FLASH_SIZE "Yazılım Flash Boyutu"
-#define D_PROGRAM_SIZE "Yazılım Boyutu"
-#define D_PROJECT "Proje"
-#define D_RAIN "Rain"
-#define D_RECEIVED "Alınan"
-#define D_RESTART "Yeniden Başlat"
-#define D_RESTARTING "Yeniden Başlatılıyor"
-#define D_RESTART_REASON "Yeniden Başlatma Sebebi"
-#define D_RESTORE "restore"
-#define D_RETAINED "tutulan"
-#define D_RULE "Kural"
-#define D_SAVE "Kaydet"
-#define D_SENSOR "Sensör"
-#define D_SSID "SSId"
-#define D_START "Başlat"
-#define D_STD_TIME "STD"
-#define D_STOP "Durdur"
-#define D_SUBNET_MASK "Altağ Geçidi Maskesi"
-#define D_SUBSCRIBE_TO "Abone olunan"
-#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
-#define D_SUCCESSFUL "Başarıyla Tamamlandı"
-#define D_SUNRISE "Gün doğumu"
-#define D_SUNSET "Gün batımı"
-#define D_TEMPERATURE "Sıcaklık"
-#define D_TO "den"
-#define D_TOGGLE "Geçiş Tuşu"
-#define D_TOPIC "Başlık"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "İletim"
-#define D_TRUE "True"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "yükseltme"
-#define D_UPLOAD "Yükleme"
-#define D_UPTIME "Açık Kalma Süresi"
-#define D_USER "Kullanıcı"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Indeksi"
-#define D_UV_INDEX_1 "Low"
-#define D_UV_INDEX_2 "Mid"
-#define D_UV_INDEX_3 "High"
-#define D_UV_INDEX_4 "Danger"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "UV Seviyesi"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "Versiyon"
-#define D_VOLTAGE "Voltaj"
-#define D_WEIGHT "Weight"
-#define D_WARMLIGHT "Sıcak"
-#define D_WEB_SERVER "Web Sunucusu"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "UYARI Bu versiyon ayarların kalıcı olarak kaydedilmesine olanak sağlamıyor"
-#define D_LEVEL_10 "seviye 1-0"
-#define D_LEVEL_01 "seviye 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Seri port loglaması kapalı"
-#define D_SYSLOG_LOGGING_REENABLED "Sistem loglaması tekrar aktif"
-
-#define D_SET_BAUDRATE_TO "Baud hızını şu şekilde değiştir"
-#define D_RECEIVED_TOPIC "Alınan Başlık"
-#define D_DATA_SIZE "Veri Büyüklüğü"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Döngü bloke edildi"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
-#define D_ACTIVE_FOR_3_MINUTES "3 dakika aktif"
-#define D_FAILED_TO_START "başlatma başarılı olamadı"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "AP'ye bağlan"
-#define D_IN_MODE "modunda"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP adresi alınamadığı için bağlantı kurulamadı"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Ap'ye ulaşılamadı"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Girilen parolayı AP kabul etmedi"
-#define D_CONNECT_FAILED_AP_TIMEOUT "AP'ye bağlanılırken süre aşımı oluştu"
-#define D_ATTEMPTING_CONNECTION "Yeniden bağlanılıyor..."
-#define D_CHECKING_CONNECTION "Bağlantı kontrol ediliyor..."
-#define D_QUERY_DONE "Soru tamamlandı. MQTT servisleri bulundu"
-#define D_MQTT_SERVICE_FOUND "Üzerinden MQTT serivisi tespit edildi"
-#define D_FOUND_AT "(bulundu)"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog hostu bulunamadı"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Bellekten (Flash) kaydedidi:"
-#define D_LOADED_FROM_FLASH_AT "Bellekten (Flash) okundu"
-#define D_USE_DEFAULTS "Varsayılanları Kullan"
-#define D_ERASED_SECTOR "Sektör temizlendi"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Donanım yazılımı çok düşük
lütfen yükseltin"
-#define D_WEBSERVER_ACTIVE_ON "Web sunucusu aktif"
-#define D_WITH_IP_ADDRESS "IP adres ile"
-#define D_WEBSERVER_STOPPED "Web sunucusu durdu"
-#define D_FILE_NOT_FOUND "Dosya Bulunamadı"
-#define D_REDIRECTED "Portala yönlendirildiniz"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi yöneticisi AP olarak ayarlandı ve istasyon olarak bekletiliyor"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi yöneticisi AP olarak ayarlandı"
-#define D_TRYING_TO_CONNECT "Cihaz ağa bağlanmaya çalışıyor"
-
-#define D_RESTART_IN "Burada tekrar başlat"
-#define D_SECONDS "saniye"
-#define D_DEVICE_WILL_RESTART "Birkaç saniye içerisinde cihaz tekrar başlatılacak"
-#define D_BUTTON_TOGGLE "Toggle"
-#define D_CONFIGURATION "Konfigürasyon"
-#define D_INFORMATION "Bilgi"
-#define D_FIRMWARE_UPGRADE "Cihaz yazılımını Güncelle"
-#define D_CONSOLE "Konsol"
-#define D_CONFIRM_RESTART "Yeniden Başlatmayı Onayla"
-
-#define D_CONFIGURE_MODULE "Modül Ayarlarını Değiştir"
-#define D_CONFIGURE_WIFI "WiFi'i Ayarlarını Değiştir"
-#define D_CONFIGURE_MQTT "MQTT'yi Ayarlarını Değiştir"
-#define D_CONFIGURE_DOMOTICZ "Domoticz Ayarlarını Değiştir"
-#define D_CONFIGURE_LOGGING "Loglama Ayarlarını Değiştir"
-#define D_CONFIGURE_OTHER "Diğer Ayarları Değiştir"
-#define D_CONFIRM_RESET_CONFIGURATION "Resetleme Ayarlarını Onayla"
-#define D_RESET_CONFIGURATION "Tüm Ayarları Resetle"
-#define D_BACKUP_CONFIGURATION "Ayarları Yedekle"
-#define D_RESTORE_CONFIGURATION "Ayarları Geri Yükle"
-#define D_MAIN_MENU "Ana Menü"
-
-#define D_MODULE_PARAMETERS "Modül parametreleri"
-#define D_MODULE_TYPE "Modul türü"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial In"
-#define D_SERIAL_OUT "Serial Out"
-
-#define D_WIFI_PARAMETERS "Wifi parametreleri"
-#define D_SCAN_FOR_WIFI_NETWORKS "Çevredeki Wifi Networklerini Tara"
-#define D_SCAN_DONE "Tarama tamamladı"
-#define D_NO_NETWORKS_FOUND "Herhangi wifi ağı bulunamadı"
-#define D_REFRESH_TO_SCAN_AGAIN "Tekrar tarama - yenile"
-#define D_DUPLICATE_ACCESSPOINT "AP'yi çoğalt"
-#define D_SKIPPING_LOW_QUALITY "Düşük kalitedekileri dikkate alma"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 Adı (SSId)"
-#define D_AP1_PASSWORD "AP1 Parolası"
-#define D_AP2_SSID "AP2 SSId"
-#define D_AP2_PASSWORD "AP2 Parolası"
-
-#define D_MQTT_PARAMETERS "MQTT parametreleri"
-#define D_CLIENT "İstemci"
-#define D_FULL_TOPIC "Tüm Başlık"
-
-#define D_LOGGING_PARAMETERS "Loglama parametreleri"
-#define D_SERIAL_LOG_LEVEL "Serial log seviyesi"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web log seviyesi"
-#define D_SYS_LOG_LEVEL "Syslog seviyesi"
-#define D_MORE_DEBUG "Hata ayıklama devamı"
-#define D_SYSLOG_HOST "Syslog host"
-#define D_SYSLOG_PORT "Syslog port"
-#define D_TELEMETRY_PERIOD "Telemetri peryodu"
-
-#define D_OTHER_PARAMETERS "Diğer parametreler"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Web Yönetici Şifresi"
-#define D_MQTT_ENABLE "MQTT aktif"
-#define D_FRIENDLY_NAME "Kullanıcı Dostu İsim"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "tekli cihaz"
-#define D_MULTI_DEVICE "çoklu cihaz"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "Ayarları Kaydet"
-#define D_CONFIGURATION_SAVED "Ayarlar kaydedildi"
-#define D_CONFIGURATION_RESET "Ayarlar resetlendi"
-
-#define D_PROGRAM_VERSION "Yazılım versiyonu"
-#define D_BUILD_DATE_AND_TIME "Derleme Tarihi ve Saati"
-#define D_CORE_AND_SDK_VERSION "Core/SDK Versiyonu"
-#define D_FLASH_WRITE_COUNT "Belleğe (flash) Yazma Sayısı"
-#define D_MAC_ADDRESS "MAC Adresi"
-#define D_MQTT_HOST "MQTT Host"
-#define D_MQTT_PORT "MQTT Port"
-#define D_MQTT_CLIENT "MQTT İstemcisi"
-#define D_MQTT_USER "MQTT Kullanıcısı"
-#define D_MQTT_TOPIC "MQTT Topiği"
-#define D_MQTT_GROUP_TOPIC "MQTT Grup Topiği"
-#define D_MQTT_FULL_TOPIC "MQTT Full Topik"
-#define D_MDNS_DISCOVERY "mDNS Keşfi"
-#define D_MDNS_ADVERTISE "mDNS Yayını"
-#define D_ESP_CHIP_ID "ESP Chip Id"
-#define D_FLASH_CHIP_ID "Flash Chip Id"
-#define D_FLASH_CHIP_SIZE "Flash Boyutu"
-#define D_FREE_PROGRAM_SPACE "Boşta Yazılım Alanı Boyutu"
-
-#define D_UPGRADE_BY_WEBSERVER "Web server kullanarak yükselt"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Yükseltmeyi başlat"
-#define D_UPGRADE_BY_FILE_UPLOAD "Dosya kullanrak yükset"
-#define D_UPLOAD_STARTED "Yükleme başlatıldı"
-#define D_UPGRADE_STARTED "YÜkestlme başlatıldı"
-#define D_UPLOAD_DONE "Yükleme Tamamlandı"
-#define D_UPLOAD_ERR_1 "Dosya seçilmedi"
-#define D_UPLOAD_ERR_2 "Boş yer yok"
-#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
-#define D_UPLOAD_ERR_4 "Yazılımın boyutu gerçek boyutundan fazla"
-#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
-#define D_UPLOAD_ERR_6 "Yükleme başarısız. Enable logging 3"
-#define D_UPLOAD_ERR_7 "Yükleme iptal edildi"
-#define D_UPLOAD_ERR_8 "Geçersiz dosya"
-#define D_UPLOAD_ERR_9 "File too large"
-#define D_UPLOAD_ERR_10 "Failed to init RF chip"
-#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
-#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
-#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
-#define D_UPLOAD_ERROR_CODE "Upload error code"
-
-#define D_ENTER_COMMAND "Komut girişi"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
-#define D_NEED_USER_AND_PASSWORD "Need user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Verify TLS fingerprint..."
-#define D_TLS_CONNECT_FAILED_TO "TLS Connect failed to"
-#define D_RETRY_IN "Retry in"
-#define D_VERIFIED "Verified using Fingerprint"
-#define D_INSECURE "Insecure connection due to invalid Fingerprint"
-#define D_CONNECT_FAILED_TO "Connect failed to"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast kapalı"
-#define D_MULTICAST_REJOINED "Multicast (tekrar)bağlanıldı"
-#define D_MULTICAST_JOIN_FAILED "Multicast bağlantısı başarısız"
-#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo basic event"
-#define D_WEMO_EVENT_SERVICE "WeMo event service"
-#define D_WEMO_META_SERVICE "WeMo meta service"
-#define D_WEMO_SETUP "WeMo setup"
-#define D_RESPONSE_SENT "Response sent"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue kurulumu"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API'si entegre edilmedi"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST argümanları"
-#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
-#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
- #define D_DOMOTICZ_TEMP "Temp"
- #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
- #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
- #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
- #define D_DOMOTICZ_COUNT "Count/PM1"
- #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
- #define D_DOMOTICZ_CURRENT "Current/PM10"
- #define D_DOMOTICZ_AIRQUALITY "AirQuality"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Zamanlayıcıyı güncelle"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Zamanlayıcı Ayarları"
-#define D_TIMER_PARAMETERS "Zamanlayıcı Parametreleri"
-#define D_TIMER_ENABLE "Zamanlayıcı Aktif"
-#define D_TIMER_ARM "Arm"
-#define D_TIMER_TIME "Zaman"
-#define D_TIMER_DAYS "Gün"
-#define D_TIMER_REPEAT "Tekrar"
-#define D_TIMER_OUTPUT "Output"
-#define D_TIMER_ACTION "Action"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX Ayarları"
-#define D_KNX_PARAMETERS "KNX Parametreleri"
-#define D_KNX_GENERAL_CONFIG "Genel Ayarlar"
-#define D_KNX_PHYSICAL_ADDRESS "Fiziksel Addres"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
-#define D_KNX_ENABLE "KNX Aktif"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
-#define D_ADD "Ekle"
-#define D_DELETE "Sil"
-#define D_REPLY "Cevapla"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
-#define D_RECEIVED_FROM "Received from"
-#define D_KNX_COMMAND_WRITE "Yaz"
-#define D_KNX_COMMAND_READ "Oku"
-#define D_KNX_COMMAND_OTHER "Diğer"
-#define D_SENT_TO "gönder"
-#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Energy Today"
-#define D_ENERGY_YESTERDAY "Energy Yesterday"
-#define D_ENERGY_TOTAL "Energy Total"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Sensör başgül"
-#define D_SENSOR_CRC_ERROR "Sensor CRC hatası"
-#define D_SENSORS_FOUND "Sensörler bulundu"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Timeout waiting for"
-#define D_START_SIGNAL_LOW "düşük sinyal başlat"
-#define D_START_SIGNAL_HIGH "yüksek sinyal başlat"
-#define D_PULSE "pulse"
-#define D_CHECKSUM_FAILURE "Checksum failure"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
-#define D_SHT1X_FOUND "SHT1X found"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Particals"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remove weigth"
-#define D_HX_CAL_REFERENCE "Load reference weigth"
-#define D_HX_CAL_DONE "Calibrated"
-#define D_HX_CAL_FAIL "Calibration failed"
-#define D_RESET_HX711 "Reset Scale"
-#define D_CONFIGURE_HX711 "Configure Scale"
-#define D_HX711_PARAMETERS "Scale parameters"
-#define D_ITEM_WEIGHT "Item weight"
-#define D_REFERENCE_WEIGHT "Reference weigth"
-#define D_CALIBRATE "Calibrate"
-#define D_CALIBRATION "Calibration"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Wind Direction"
-#define D_TX20_WIND_SPEED "Wind Speed"
-#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
-#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "A"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "Hr"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "kOhm"
-#define D_UNIT_KILOWATTHOUR "kWh"
-#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
-#define D_UNIT_MICROMETER "um"
-#define D_UNIT_MICROSECOND "us"
-#define D_UNIT_MILLIAMPERE "mA"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "ms"
-#define D_UNIT_MINUTE "Min"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "hPa"
-#define D_UNIT_SECOND "sec"
-#define D_UNIT_SECTORS "sectors"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "V"
-#define D_UNIT_WATT "W"
-#define D_UNIT_WATTHOUR "Wh"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_TR_TR_H_
+/*
+ tr-TR.h - localization for Turkish - Turkey for Tasmota
+
+ Copyright (C) 2019 Ali Sait Teke 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 .
+*/
+
+#ifndef _LANGUAGE_TR_TR_H_
+#define _LANGUAGE_TR_TR_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v6.1.1
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1055
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "tr"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "."
+#define D_MONTH_DAY_SEPARATOR "."
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "PazPztSalCarPerCumCmt"
+#define D_MONTH3LIST "OckSubMarNisMayHazTemAguEylEkmKasAra"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Hava Kalitesi"
+#define D_AP "AP" // Access Point
+#define D_AS "as"
+#define D_AUTO "OTOMATIK"
+#define D_BLINK "Blink"
+#define D_BLINKOFF "BlinkOff"
+#define D_BOOT_COUNT "Yeniden başlama sayısı"
+#define D_BRIGHTLIGHT "Işık"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Buton"
+#define D_BY "by" // Written by me
+#define D_BYTES "Bayt"
+#define D_CELSIUS "Derece"
+#define D_CHANNEL "Channel"
+#define D_CO2 "Karbon dioksit"
+#define D_CODE "kod" // Button code
+#define D_COLDLIGHT "Soğuk"
+#define D_COMMAND "Komut"
+#define D_CONNECTED "Bağlandı"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Sayı"
+#define D_COUNTER "Sayaç"
+#define D_CURRENT "Current" // As in Voltage and Current
+#define D_DATA "Data"
+#define D_DARKLIGHT "Karanlık"
+#define D_DEBUG "Hata Ayıklama"
+#define D_DISABLED "Etkin Değil"
+#define D_DISTANCE "Mesage"
+#define D_DNS_SERVER "DNS Sunucu"
+#define D_DONE "Tamam"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Emülasyon"
+#define D_ENABLED "Etkin"
+#define D_ERASE "Temizle"
+#define D_ERROR "Hata"
+#define D_FAHRENHEIT "Fahrenayt"
+#define D_FAILED "Başlarısız"
+#define D_FALLBACK "Geri iletim"
+#define D_FALLBACK_TOPIC "Geri İletim Topiği"
+#define D_FALSE "False"
+#define D_FILE "Dosya"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "Boş Hafıza"
+#define D_FREQUENCY "Frekans"
+#define D_GAS "Gas"
+#define D_GATEWAY "Geçit"
+#define D_GROUP "Grup"
+#define D_HOST "Host"
+#define D_HOSTNAME "Host Adresi"
+#define D_HUMIDITY "Nem"
+#define D_ILLUMINANCE "Aydınlık"
+#define D_IMMEDIATE "derhal" // Button immediate
+#define D_INDEX "Index"
+#define D_INFO "Bilgi"
+#define D_INFRARED "Kızılötesi"
+#define D_INITIALIZED "Başlatıldı"
+#define D_IP_ADDRESS "IP Adresi"
+#define D_LIGHT "Işık"
+#define D_LWT "LWT"
+#define D_MODULE "Modül"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "multi-press"
+#define D_NOISE "Noise"
+#define D_NONE "None"
+#define D_OFF "Off"
+#define D_OFFLINE "Çevirimdışı"
+#define D_OK "Tamam"
+#define D_ON "On"
+#define D_ONLINE "Çevirimiçi"
+#define D_PASSWORD "Şifre"
+#define D_PORT "Port"
+#define D_POWER_FACTOR "Güç Faktörü"
+#define D_POWERUSAGE "Güç"
+#define D_POWERUSAGE_ACTIVE "Aktif Güç"
+#define D_POWERUSAGE_APPARENT "Görünen Güç"
+#define D_POWERUSAGE_REACTIVE "Reaktif Güç"
+#define D_PRESSURE "Basınç"
+#define D_PRESSUREATSEALEVEL "Deniz Seviyesi Basıncı"
+#define D_PROGRAM_FLASH_SIZE "Yazılım Flash Boyutu"
+#define D_PROGRAM_SIZE "Yazılım Boyutu"
+#define D_PROJECT "Proje"
+#define D_RAIN "Rain"
+#define D_RECEIVED "Alınan"
+#define D_RESTART "Yeniden Başlat"
+#define D_RESTARTING "Yeniden Başlatılıyor"
+#define D_RESTART_REASON "Yeniden Başlatma Sebebi"
+#define D_RESTORE "restore"
+#define D_RETAINED "tutulan"
+#define D_RULE "Kural"
+#define D_SAVE "Kaydet"
+#define D_SENSOR "Sensör"
+#define D_SSID "SSId"
+#define D_START "Başlat"
+#define D_STD_TIME "STD"
+#define D_STOP "Durdur"
+#define D_SUBNET_MASK "Altağ Geçidi Maskesi"
+#define D_SUBSCRIBE_TO "Abone olunan"
+#define D_UNSUBSCRIBE_FROM "Unsubscribe from"
+#define D_SUCCESSFUL "Başarıyla Tamamlandı"
+#define D_SUNRISE "Gün doğumu"
+#define D_SUNSET "Gün batımı"
+#define D_TEMPERATURE "Sıcaklık"
+#define D_TO "den"
+#define D_TOGGLE "Geçiş Tuşu"
+#define D_TOPIC "Başlık"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "İletim"
+#define D_TRUE "True"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "yükseltme"
+#define D_UPLOAD "Yükleme"
+#define D_UPTIME "Açık Kalma Süresi"
+#define D_USER "Kullanıcı"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Indeksi"
+#define D_UV_INDEX_1 "Low"
+#define D_UV_INDEX_2 "Mid"
+#define D_UV_INDEX_3 "High"
+#define D_UV_INDEX_4 "Danger"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "UV Seviyesi"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "Versiyon"
+#define D_VOLTAGE "Voltaj"
+#define D_WEIGHT "Weight"
+#define D_WARMLIGHT "Sıcak"
+#define D_WEB_SERVER "Web Sunucusu"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "UYARI Bu versiyon ayarların kalıcı olarak kaydedilmesine olanak sağlamıyor"
+#define D_LEVEL_10 "seviye 1-0"
+#define D_LEVEL_01 "seviye 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Seri port loglaması kapalı"
+#define D_SYSLOG_LOGGING_REENABLED "Sistem loglaması tekrar aktif"
+
+#define D_SET_BAUDRATE_TO "Baud hızını şu şekilde değiştir"
+#define D_RECEIVED_TOPIC "Alınan Başlık"
+#define D_DATA_SIZE "Veri Büyüklüğü"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Döngü bloke edildi"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
+#define D_ACTIVE_FOR_3_MINUTES "3 dakika aktif"
+#define D_FAILED_TO_START "başlatma başarılı olamadı"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "AP'ye bağlan"
+#define D_IN_MODE "modunda"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP adresi alınamadığı için bağlantı kurulamadı"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Ap'ye ulaşılamadı"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Girilen parolayı AP kabul etmedi"
+#define D_CONNECT_FAILED_AP_TIMEOUT "AP'ye bağlanılırken süre aşımı oluştu"
+#define D_ATTEMPTING_CONNECTION "Yeniden bağlanılıyor..."
+#define D_CHECKING_CONNECTION "Bağlantı kontrol ediliyor..."
+#define D_QUERY_DONE "Soru tamamlandı. MQTT servisleri bulundu"
+#define D_MQTT_SERVICE_FOUND "Üzerinden MQTT serivisi tespit edildi"
+#define D_FOUND_AT "(bulundu)"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog hostu bulunamadı"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Bellekten (Flash) kaydedidi:"
+#define D_LOADED_FROM_FLASH_AT "Bellekten (Flash) okundu"
+#define D_USE_DEFAULTS "Varsayılanları Kullan"
+#define D_ERASED_SECTOR "Sektör temizlendi"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Donanım yazılımı çok düşük
lütfen yükseltin"
+#define D_WEBSERVER_ACTIVE_ON "Web sunucusu aktif"
+#define D_WITH_IP_ADDRESS "IP adres ile"
+#define D_WEBSERVER_STOPPED "Web sunucusu durdu"
+#define D_FILE_NOT_FOUND "Dosya Bulunamadı"
+#define D_REDIRECTED "Portala yönlendirildiniz"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi yöneticisi AP olarak ayarlandı ve istasyon olarak bekletiliyor"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi yöneticisi AP olarak ayarlandı"
+#define D_TRYING_TO_CONNECT "Cihaz ağa bağlanmaya çalışıyor"
+
+#define D_RESTART_IN "Burada tekrar başlat"
+#define D_SECONDS "saniye"
+#define D_DEVICE_WILL_RESTART "Birkaç saniye içerisinde cihaz tekrar başlatılacak"
+#define D_BUTTON_TOGGLE "Toggle"
+#define D_CONFIGURATION "Konfigürasyon"
+#define D_INFORMATION "Bilgi"
+#define D_FIRMWARE_UPGRADE "Cihaz yazılımını Güncelle"
+#define D_CONSOLE "Konsol"
+#define D_CONFIRM_RESTART "Yeniden Başlatmayı Onayla"
+
+#define D_CONFIGURE_MODULE "Modül Ayarlarını Değiştir"
+#define D_CONFIGURE_WIFI "WiFi'i Ayarlarını Değiştir"
+#define D_CONFIGURE_MQTT "MQTT'yi Ayarlarını Değiştir"
+#define D_CONFIGURE_DOMOTICZ "Domoticz Ayarlarını Değiştir"
+#define D_CONFIGURE_LOGGING "Loglama Ayarlarını Değiştir"
+#define D_CONFIGURE_OTHER "Diğer Ayarları Değiştir"
+#define D_CONFIRM_RESET_CONFIGURATION "Resetleme Ayarlarını Onayla"
+#define D_RESET_CONFIGURATION "Tüm Ayarları Resetle"
+#define D_BACKUP_CONFIGURATION "Ayarları Yedekle"
+#define D_RESTORE_CONFIGURATION "Ayarları Geri Yükle"
+#define D_MAIN_MENU "Ana Menü"
+
+#define D_MODULE_PARAMETERS "Modül parametreleri"
+#define D_MODULE_TYPE "Modul türü"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial In"
+#define D_SERIAL_OUT "Serial Out"
+
+#define D_WIFI_PARAMETERS "Wifi parametreleri"
+#define D_SCAN_FOR_WIFI_NETWORKS "Çevredeki Wifi Networklerini Tara"
+#define D_SCAN_DONE "Tarama tamamladı"
+#define D_NO_NETWORKS_FOUND "Herhangi wifi ağı bulunamadı"
+#define D_REFRESH_TO_SCAN_AGAIN "Tekrar tarama - yenile"
+#define D_DUPLICATE_ACCESSPOINT "AP'yi çoğalt"
+#define D_SKIPPING_LOW_QUALITY "Düşük kalitedekileri dikkate alma"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 Adı (SSId)"
+#define D_AP1_PASSWORD "AP1 Parolası"
+#define D_AP2_SSID "AP2 SSId"
+#define D_AP2_PASSWORD "AP2 Parolası"
+
+#define D_MQTT_PARAMETERS "MQTT parametreleri"
+#define D_CLIENT "İstemci"
+#define D_FULL_TOPIC "Tüm Başlık"
+
+#define D_LOGGING_PARAMETERS "Loglama parametreleri"
+#define D_SERIAL_LOG_LEVEL "Serial log seviyesi"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web log seviyesi"
+#define D_SYS_LOG_LEVEL "Syslog seviyesi"
+#define D_MORE_DEBUG "Hata ayıklama devamı"
+#define D_SYSLOG_HOST "Syslog host"
+#define D_SYSLOG_PORT "Syslog port"
+#define D_TELEMETRY_PERIOD "Telemetri peryodu"
+
+#define D_OTHER_PARAMETERS "Diğer parametreler"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Web Yönetici Şifresi"
+#define D_MQTT_ENABLE "MQTT aktif"
+#define D_FRIENDLY_NAME "Kullanıcı Dostu İsim"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "tekli cihaz"
+#define D_MULTI_DEVICE "çoklu cihaz"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "Ayarları Kaydet"
+#define D_CONFIGURATION_SAVED "Ayarlar kaydedildi"
+#define D_CONFIGURATION_RESET "Ayarlar resetlendi"
+
+#define D_PROGRAM_VERSION "Yazılım versiyonu"
+#define D_BUILD_DATE_AND_TIME "Derleme Tarihi ve Saati"
+#define D_CORE_AND_SDK_VERSION "Core/SDK Versiyonu"
+#define D_FLASH_WRITE_COUNT "Belleğe (flash) Yazma Sayısı"
+#define D_MAC_ADDRESS "MAC Adresi"
+#define D_MQTT_HOST "MQTT Host"
+#define D_MQTT_PORT "MQTT Port"
+#define D_MQTT_CLIENT "MQTT İstemcisi"
+#define D_MQTT_USER "MQTT Kullanıcısı"
+#define D_MQTT_TOPIC "MQTT Topiği"
+#define D_MQTT_GROUP_TOPIC "MQTT Grup Topiği"
+#define D_MQTT_FULL_TOPIC "MQTT Full Topik"
+#define D_MDNS_DISCOVERY "mDNS Keşfi"
+#define D_MDNS_ADVERTISE "mDNS Yayını"
+#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_FLASH_CHIP_ID "Flash Chip Id"
+#define D_FLASH_CHIP_SIZE "Flash Boyutu"
+#define D_FREE_PROGRAM_SPACE "Boşta Yazılım Alanı Boyutu"
+
+#define D_UPGRADE_BY_WEBSERVER "Web server kullanarak yükselt"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Yükseltmeyi başlat"
+#define D_UPGRADE_BY_FILE_UPLOAD "Dosya kullanrak yükset"
+#define D_UPLOAD_STARTED "Yükleme başlatıldı"
+#define D_UPGRADE_STARTED "YÜkestlme başlatıldı"
+#define D_UPLOAD_DONE "Yükleme Tamamlandı"
+#define D_UPLOAD_ERR_1 "Dosya seçilmedi"
+#define D_UPLOAD_ERR_2 "Boş yer yok"
+#define D_UPLOAD_ERR_3 "Magic byte is not 0xE9"
+#define D_UPLOAD_ERR_4 "Yazılımın boyutu gerçek boyutundan fazla"
+#define D_UPLOAD_ERR_5 "Upload buffer miscompare"
+#define D_UPLOAD_ERR_6 "Yükleme başarısız. Enable logging 3"
+#define D_UPLOAD_ERR_7 "Yükleme iptal edildi"
+#define D_UPLOAD_ERR_8 "Geçersiz dosya"
+#define D_UPLOAD_ERR_9 "File too large"
+#define D_UPLOAD_ERR_10 "Failed to init RF chip"
+#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
+#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
+#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERROR_CODE "Upload error code"
+
+#define D_ENTER_COMMAND "Komut girişi"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Enable weblog 2 if response expected"
+#define D_NEED_USER_AND_PASSWORD "Need user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Verify TLS fingerprint..."
+#define D_TLS_CONNECT_FAILED_TO "TLS Connect failed to"
+#define D_RETRY_IN "Retry in"
+#define D_VERIFIED "Verified using Fingerprint"
+#define D_INSECURE "Insecure connection due to invalid Fingerprint"
+#define D_CONNECT_FAILED_TO "Connect failed to"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast kapalı"
+#define D_MULTICAST_REJOINED "Multicast (tekrar)bağlanıldı"
+#define D_MULTICAST_JOIN_FAILED "Multicast bağlantısı başarısız"
+#define D_FAILED_TO_SEND_RESPONSE "Failed to send response"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo basic event"
+#define D_WEMO_EVENT_SERVICE "WeMo event service"
+#define D_WEMO_META_SERVICE "WeMo meta service"
+#define D_WEMO_SETUP "WeMo setup"
+#define D_RESPONSE_SENT "Response sent"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue kurulumu"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API'si entegre edilmedi"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST argümanları"
+#define D_3_RESPONSE_PACKETS_SENT "3 response packets sent"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz parameters"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "Switch idx"
+#define D_DOMOTICZ_SENSOR_IDX "Sensor idx"
+ #define D_DOMOTICZ_TEMP "Temp"
+ #define D_DOMOTICZ_TEMP_HUM "Temp,Hum"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Hum,Baro"
+ #define D_DOMOTICZ_POWER_ENERGY "Power,Energy"
+ #define D_DOMOTICZ_ILLUMINANCE "Illuminance"
+ #define D_DOMOTICZ_COUNT "Count/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Voltage/PM2.5"
+ #define D_DOMOTICZ_CURRENT "Current/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "AirQuality"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Zamanlayıcıyı güncelle"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Zamanlayıcı Ayarları"
+#define D_TIMER_PARAMETERS "Zamanlayıcı Parametreleri"
+#define D_TIMER_ENABLE "Zamanlayıcı Aktif"
+#define D_TIMER_ARM "Arm"
+#define D_TIMER_TIME "Zaman"
+#define D_TIMER_DAYS "Gün"
+#define D_TIMER_REPEAT "Tekrar"
+#define D_TIMER_OUTPUT "Output"
+#define D_TIMER_ACTION "Action"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX Ayarları"
+#define D_KNX_PARAMETERS "KNX Parametreleri"
+#define D_KNX_GENERAL_CONFIG "Genel Ayarlar"
+#define D_KNX_PHYSICAL_ADDRESS "Fiziksel Addres"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
+#define D_KNX_ENABLE "KNX Aktif"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
+#define D_ADD "Ekle"
+#define D_DELETE "Sil"
+#define D_REPLY "Cevapla"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
+#define D_RECEIVED_FROM "Received from"
+#define D_KNX_COMMAND_WRITE "Yaz"
+#define D_KNX_COMMAND_READ "Oku"
+#define D_KNX_COMMAND_OTHER "Diğer"
+#define D_SENT_TO "gönder"
+#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Energy Today"
+#define D_ENERGY_YESTERDAY "Energy Yesterday"
+#define D_ENERGY_TOTAL "Energy Total"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Sensör başgül"
+#define D_SENSOR_CRC_ERROR "Sensor CRC hatası"
+#define D_SENSORS_FOUND "Sensörler bulundu"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Timeout waiting for"
+#define D_START_SIGNAL_LOW "düşük sinyal başlat"
+#define D_START_SIGNAL_HIGH "yüksek sinyal başlat"
+#define D_PULSE "pulse"
+#define D_CHECKSUM_FAILURE "Checksum failure"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Sensor did not ACK command"
+#define D_SHT1X_FOUND "SHT1X found"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Particals"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remove weigth"
+#define D_HX_CAL_REFERENCE "Load reference weigth"
+#define D_HX_CAL_DONE "Calibrated"
+#define D_HX_CAL_FAIL "Calibration failed"
+#define D_RESET_HX711 "Reset Scale"
+#define D_CONFIGURE_HX711 "Configure Scale"
+#define D_HX711_PARAMETERS "Scale parameters"
+#define D_ITEM_WEIGHT "Item weight"
+#define D_REFERENCE_WEIGHT "Reference weigth"
+#define D_CALIBRATE "Calibrate"
+#define D_CALIBRATION "Calibration"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Wind Direction"
+#define D_TX20_WIND_SPEED "Wind Speed"
+#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
+#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "A"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "Hr"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "kOhm"
+#define D_UNIT_KILOWATTHOUR "kWh"
+#define D_UNIT_LUX "lx"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "ug/m3"
+#define D_UNIT_MICROMETER "um"
+#define D_UNIT_MICROSECOND "us"
+#define D_UNIT_MILLIAMPERE "mA"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "ms"
+#define D_UNIT_MINUTE "Min"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "hPa"
+#define D_UNIT_SECOND "sec"
+#define D_UNIT_SECTORS "sectors"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "V"
+#define D_UNIT_WATT "W"
+#define D_UNIT_WATTHOUR "Wh"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_TR_TR_H_
diff --git a/tasmota/language/uk-UK.h b/tasmota/language/uk-UK.h
index 98f87e932..b4a314630 100644
--- a/tasmota/language/uk-UK.h
+++ b/tasmota/language/uk-UK.h
@@ -1,703 +1,701 @@
-/*
- uk-UK.h - localization for Ukrainian - Ukraine for Tasmota
-
- Copyright (C) 2019 Theo Arends / vadym-adik
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_UK_UK_H_
-#define _LANGUAGE_UK_UK_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.14.0a
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1058
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "uk"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "НедПонВівСерЧетПятСуб"
-#define D_MONTH3LIST "СічЛютБерКвіТраЧерЛипСерВерЖовЛисГру"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR ","
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "Якість повітря"
-#define D_AP "Точка доступу" // Access Point
-#define D_AS "як"
-#define D_AUTO "АВТО"
-#define D_BLINK "Блимати"
-#define D_BLINKOFF "Не блимати"
-#define D_BOOT_COUNT "К-сть завант."
-#define D_BRIGHTLIGHT "Яскравість"
-#define D_BSSID "BSSId"
-#define D_BUTTON "Кнопка"
-#define D_BY " " // Written by me
-#define D_BYTES "Байт"
-#define D_CELSIUS "Цельсія"
-#define D_CHANNEL "Канал"
-#define D_CO2 "Вуглек. газ"
-#define D_CODE "код" // Button code
-#define D_COLDLIGHT "Холодний"
-#define D_COMMAND "Команда"
-#define D_CONNECTED "Під'єднано"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Розмір"
-#define D_COUNTER "Лічильник"
-#define D_CURRENT "Струм" // As in Voltage and Current
-#define D_DATA "Дані"
-#define D_DARKLIGHT "Темний"
-#define D_DEBUG "Налагодження"
-#define D_DISABLED "Заблоковано"
-#define D_DISTANCE "Відстань"
-#define D_DNS_SERVER "Сервер DNS"
-#define D_DONE "Виконано"
-#define D_DST_TIME "Літній час"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "Емуляція"
-#define D_ENABLED "Активно"
-#define D_ERASE "Стирати"
-#define D_ERROR "Помилка"
-#define D_FAHRENHEIT "Фаренгейт"
-#define D_FAILED "Невдало"
-#define D_FALLBACK "Зворотній зв'язок"
-#define D_FALLBACK_TOPIC "Топік зворотнього зв'язку"
-#define D_FALSE "Ні"
-#define D_FILE "Файл"
-#define D_FLOW_RATE "Потік"
-#define D_FREE_MEMORY "Вільна память"
-#define D_FREQUENCY "Частота"
-#define D_GAS "Газ"
-#define D_GATEWAY "Шлюз"
-#define D_GROUP "Група"
-#define D_HOST "Хост"
-#define D_HOSTNAME "Назва хосту"
-#define D_HUMIDITY "Вологість"
-#define D_ILLUMINANCE "Освітленність"
-#define D_IMMEDIATE "Негайно" // Button immediate
-#define D_INDEX "Індекс"
-#define D_INFO "Інфо"
-#define D_INFRARED "Інфрачервоний"
-#define D_INITIALIZED "Ініціалізовано"
-#define D_IP_ADDRESS "IP адреса"
-#define D_LIGHT "Світло"
-#define D_LWT "LWT"
-#define D_MODULE "Модуль"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "Багаторазове натискання"
-#define D_NOISE "Шум"
-#define D_NONE "Нічого"
-#define D_OFF "Вимк."
-#define D_OFFLINE "Офф-лайн"
-#define D_OK "Ок"
-#define D_ON "Увімк."
-#define D_ONLINE "Он-лайн"
-#define D_PASSWORD "Гасло"
-#define D_PORT "Порт"
-#define D_POWER_FACTOR "Коефіцієнт потужності"
-#define D_POWERUSAGE "Потужність"
-#define D_POWERUSAGE_ACTIVE "Активна потужність"
-#define D_POWERUSAGE_APPARENT "Дійсна потужність"
-#define D_POWERUSAGE_REACTIVE "Реактивна потужність"
-#define D_PRESSURE "Тиск"
-#define D_PRESSUREATSEALEVEL "Тиск на рівні моря"
-#define D_PROGRAM_FLASH_SIZE "Розмір Flash для програм"
-#define D_PROGRAM_SIZE "Розмір програм"
-#define D_PROJECT "Проект"
-#define D_RAIN "Дощ"
-#define D_RECEIVED "Отримано"
-#define D_RESTART "Перезавантаження"
-#define D_RESTARTING "Перезавантаження"
-#define D_RESTART_REASON "Причина перезавантаження"
-#define D_RESTORE "відновлення"
-#define D_RETAINED "зберігати"
-#define D_RULE "Правило"
-#define D_SAVE "Зберегти"
-#define D_SENSOR "Давач"
-#define D_SSID "SSID"
-#define D_START "Старт"
-#define D_STD_TIME "Стандартний час"
-#define D_STOP "Стоп"
-#define D_SUBNET_MASK "Маска підмережі"
-#define D_SUBSCRIBE_TO "Підписатись на"
-#define D_UNSUBSCRIBE_FROM "Відписатися від"
-#define D_SUCCESSFUL "Успішно"
-#define D_SUNRISE "Схід сонця"
-#define D_SUNSET "Захід сонця"
-#define D_TEMPERATURE "Температура"
-#define D_TO "до"
-#define D_TOGGLE "Перекл."
-#define D_TOPIC "Топік"
-#define D_TOTAL_USAGE "Загальне споживання"
-#define D_TRANSMIT "Передати"
-#define D_TRUE "Так"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "оновлення"
-#define D_UPLOAD "Завантажити"
-#define D_UPTIME "Час роботи"
-#define D_USER "Користувач"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "Індекс УФ"
-#define D_UV_INDEX_1 "Низький"
-#define D_UV_INDEX_2 "Середній"
-#define D_UV_INDEX_3 "Високий"
-#define D_UV_INDEX_4 "Небезпечний"
-#define D_UV_INDEX_5 "Опіки 1/2 ступеня"
-#define D_UV_INDEX_6 "Опіки 3 ступеня"
-#define D_UV_INDEX_7 "Невідомий"
-#define D_UV_LEVEL "Рівень УФ"
-#define D_UV_POWER "Потужність УФ"
-#define D_VERSION "Версія"
-#define D_VOLTAGE "Напруга"
-#define D_WEIGHT "Вага"
-#define D_WARMLIGHT "Тепло"
-#define D_WEB_SERVER "Web сервер"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ПОПЕРЕДЖЕННЯ! Ця версія не підтримує збереження налаштувань"
-#define D_LEVEL_10 "рівень 1-0"
-#define D_LEVEL_01 "рівень 0-1"
-#define D_SERIAL_LOGGING_DISABLED "Serial журнал вимкнений"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog журнал увімкнений"
-
-#define D_SET_BAUDRATE_TO "Встановити швидкість передачі (Baudrate)"
-#define D_RECEIVED_TOPIC "Отриманий Топік"
-#define D_DATA_SIZE "Розмір даних"
-#define D_ANALOG_INPUT "Напруга"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Цикл заблокований"
-#define D_WPS_FAILED_WITH_STATUS "WPS конфігурація з статусом НЕВДАЛА"
-#define D_ACTIVE_FOR_3_MINUTES "активний протягом 3 хвилин"
-#define D_FAILED_TO_START "не вдалось запустити"
-#define D_PATCH_ISSUE_2186 "Проблема з виправленням 2186"
-#define D_CONNECTING_TO_AP "Підключення до AP"
-#define D_IN_MODE "в режимі"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "Помилка підключення, IP-адреса не отримана"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "Помилка з'єднання, AP не знайдено"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "Помилка з'єднання, невірне гасло до AP"
-#define D_CONNECT_FAILED_AP_TIMEOUT "Помилка з'єднання з AP по тайм-ауту"
-#define D_ATTEMPTING_CONNECTION "Спроба підключення..."
-#define D_CHECKING_CONNECTION "Перевірка з'єднання..."
-#define D_QUERY_DONE "Запит виконаний. Виявлено сервер MQTT"
-#define D_MQTT_SERVICE_FOUND "MQTT сервер знайдено"
-#define D_FOUND_AT "знайдено в"
-#define D_SYSLOG_HOST_NOT_FOUND "Сервер журналу не знайдено"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "Збережено в флэш-пам'ять"
-#define D_LOADED_FROM_FLASH_AT "Завантажено з флэш-пам'яті"
-#define D_USE_DEFAULTS "Використовувати значення за замовчуванням"
-#define D_ERASED_SECTOR "Стерто сектор"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "Для використання Tasmota треба увімкнути JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Прошивка MINIMAL
будь-ласка оновіть"
-#define D_WEBSERVER_ACTIVE_ON "Веб-сервер активний"
-#define D_WITH_IP_ADDRESS "з IP-адресою"
-#define D_WEBSERVER_STOPPED "Веб-сервер зупинений"
-#define D_FILE_NOT_FOUND "Файл не знайдений"
-#define D_REDIRECTED "Перенаправлено на адаптивний портал"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi менеджер встановлює Точку Доступу і зберігає параметри"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi менеджер встановив Точку Доступу"
-#define D_TRYING_TO_CONNECT "Спроба підключення пристрою до мережі"
-
-#define D_RESTART_IN "Перезавантаження"
-#define D_SECONDS "секунд"
-#define D_DEVICE_WILL_RESTART "Пристрій буде перезавантажено через декілька секунд"
-#define D_BUTTON_TOGGLE "Переключити"
-#define D_CONFIGURATION "Конфігурація"
-#define D_INFORMATION "Інформація"
-#define D_FIRMWARE_UPGRADE "Оновлення прошивки"
-#define D_CONSOLE "Консоль"
-#define D_CONFIRM_RESTART "Підтвердити перезавантаження"
-
-#define D_CONFIGURE_MODULE "Конфігурація модуля"
-#define D_CONFIGURE_WIFI "Конфігурація WiFi"
-#define D_CONFIGURE_MQTT "Конфігурація MQTT"
-#define D_CONFIGURE_DOMOTICZ "Конфігурація Domoticz"
-#define D_CONFIGURE_LOGGING "Конфігурація журналів"
-#define D_CONFIGURE_OTHER "Конфігурація інше"
-#define D_CONFIRM_RESET_CONFIGURATION "Підтвердити скидання конфігурації"
-#define D_RESET_CONFIGURATION "Скидання конфігурації"
-#define D_BACKUP_CONFIGURATION "Резервне копіювання конфігурації"
-#define D_RESTORE_CONFIGURATION "Відновлення конфігурації"
-#define D_MAIN_MENU "Головне меню"
-
-#define D_MODULE_PARAMETERS "Параметри модуля"
-#define D_MODULE_TYPE "Тип модуля"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "АЦП"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "Serial вхід"
-#define D_SERIAL_OUT "Serial вихід"
-
-#define D_WIFI_PARAMETERS "Параметри Wifi"
-#define D_SCAN_FOR_WIFI_NETWORKS "Сканування бездротовихих мереж Wifi"
-#define D_SCAN_DONE "Сканування завершене"
-#define D_NO_NETWORKS_FOUND "Не знайдено мереж"
-#define D_REFRESH_TO_SCAN_AGAIN "Оновити для повторного сканування"
-#define D_DUPLICATE_ACCESSPOINT "Дублювати Точку Доступу (AP)"
-#define D_SKIPPING_LOW_QUALITY "Пропущено через низьку якість"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 SSID"
-#define D_AP1_PASSWORD "AP1 гасло"
-#define D_AP2_SSID "AP2 SSID"
-#define D_AP2_PASSWORD "AP2 гасло"
-
-#define D_MQTT_PARAMETERS "Параметри MQTT"
-#define D_CLIENT "Клієнт"
-#define D_FULL_TOPIC "Повний Топік"
-
-#define D_LOGGING_PARAMETERS "Параметри журналу"
-#define D_SERIAL_LOG_LEVEL "Serial рівень"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web рівень"
-#define D_SYS_LOG_LEVEL "System рівень"
-#define D_MORE_DEBUG "Додаткова інформація для налагодження"
-#define D_SYSLOG_HOST "System хост"
-#define D_SYSLOG_PORT "System порт"
-#define D_TELEMETRY_PERIOD "Період телеметрії"
-
-#define D_OTHER_PARAMETERS "Параметри Інше"
-#define D_TEMPLATE "Шаблони"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Гасло Web адміністратора"
-#define D_MQTT_ENABLE "MQTT активний"
-#define D_FRIENDLY_NAME "Дружнє Ім'я"
-#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "одиночне"
-#define D_MULTI_DEVICE "мульти"
-
-#define D_CONFIGURE_TEMPLATE "Конфігурація шаблона"
-#define D_TEMPLATE_PARAMETERS "Параметри шаблона"
-#define D_TEMPLATE_NAME "Назва"
-#define D_BASE_TYPE "На основі"
-#define D_TEMPLATE_FLAGS "Опції"
-
-#define D_SAVE_CONFIGURATION "Зберегти конфігурацію"
-#define D_CONFIGURATION_SAVED "Конфігурація збережена "
-#define D_CONFIGURATION_RESET "Конфігурація скинута"
-
-#define D_PROGRAM_VERSION "Версія програми"
-#define D_BUILD_DATE_AND_TIME "Дата і час збірки"
-#define D_CORE_AND_SDK_VERSION "Версія Core/SDK"
-#define D_FLASH_WRITE_COUNT "Кількість записів Flash"
-#define D_MAC_ADDRESS "MAC Адреса"
-#define D_MQTT_HOST "MQTT Хост"
-#define D_MQTT_PORT "MQTT Порт"
-#define D_MQTT_CLIENT "MQTT ID Клієнта"
-#define D_MQTT_USER "MQTT Користувач"
-#define D_MQTT_TOPIC "MQTT Топік"
-#define D_MQTT_GROUP_TOPIC "MQTT Топік групи"
-#define D_MQTT_FULL_TOPIC "MQTT Топік повний"
-#define D_MDNS_DISCOVERY "mDNS Виявлення"
-#define D_MDNS_ADVERTISE "mDNS Транcляція"
-#define D_ESP_CHIP_ID "ID чипу ESP"
-#define D_FLASH_CHIP_ID "ID чипу Flash пам'яті"
-#define D_FLASH_CHIP_SIZE "Розмір Flash пам'яті"
-#define D_FREE_PROGRAM_SPACE "Вільний простір для програм"
-
-#define D_UPGRADE_BY_WEBSERVER "Оновлення через Веб-сервер"
-#define D_OTA_URL "OTA Url"
-#define D_START_UPGRADE "Почати оновлення"
-#define D_UPGRADE_BY_FILE_UPLOAD "Оновлення шляхом завантаження файлів"
-#define D_UPLOAD_STARTED "Завантаження почалось"
-#define D_UPGRADE_STARTED "Оновлення почалось"
-#define D_UPLOAD_DONE "Завантаження завершено"
-#define D_UPLOAD_ERR_1 "Файл не вибраний"
-#define D_UPLOAD_ERR_2 "Недостатньо місця"
-#define D_UPLOAD_ERR_3 "Магічний байт не 0xE9"
-#define D_UPLOAD_ERR_4 "Размір прошивки більший, ніж размір Flash пам'яті"
-#define D_UPLOAD_ERR_5 "Помилка завантаження буферу"
-#define D_UPLOAD_ERR_6 "Помилка завантаження. Увімкнено лог рівень 3"
-#define D_UPLOAD_ERR_7 "Завантаження перервано"
-#define D_UPLOAD_ERR_8 "Файл невірний"
-#define D_UPLOAD_ERR_9 "Занадто великий файл"
-#define D_UPLOAD_ERR_10 "Помилка ініціалізаціції чипу FR"
-#define D_UPLOAD_ERR_11 "Помилка стирання чипу RF"
-#define D_UPLOAD_ERR_12 "Помилка запису чипу RF"
-#define D_UPLOAD_ERR_13 "Помилка розкодування прошивки RF"
-#define D_UPLOAD_ERROR_CODE "Код помилки завантаження"
-
-#define D_ENTER_COMMAND "Уведіть команду"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "Увімкніть Веб лог рівня 2 якщо очікуєте відповідь"
-#define D_NEED_USER_AND_PASSWORD "Очікується user=&password="
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "Перевірка відбитка TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Збій підключення TLS до"
-#define D_RETRY_IN "Повторити"
-#define D_VERIFIED "Перевірено відбиток"
-#define D_INSECURE "Небезпечне з'єднання, недійсний відбиток"
-#define D_CONNECT_FAILED_TO "Помилка підключення до"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "Multicast вимкнений"
-#define D_MULTICAST_REJOINED "Multicast (пере)під'єднався"
-#define D_MULTICAST_JOIN_FAILED "Multicast помилка з'єднання"
-#define D_FAILED_TO_SEND_RESPONSE "Не вдалось надіслати відповідь"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo основна подія"
-#define D_WEMO_EVENT_SERVICE "WeMo служба подій"
-#define D_WEMO_META_SERVICE "WeMo мета-сервіс"
-#define D_WEMO_SETUP "WeMo налаштування"
-#define D_RESPONSE_SENT "Відповідь відіслана"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue налаштування"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API не реалізовано"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST args"
-#define D_3_RESPONSE_PACKETS_SENT "3 пакету відповіді отримано"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz налаштування"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Ключ idx"
-#define D_DOMOTICZ_SWITCH_IDX "Перемикач idx"
-#define D_DOMOTICZ_SENSOR_IDX "Давач idx"
- #define D_DOMOTICZ_TEMP "Температура"
- #define D_DOMOTICZ_TEMP_HUM "Темп,Волог"
- #define D_DOMOTICZ_TEMP_HUM_BARO "Темп,Волог,Тиск"
- #define D_DOMOTICZ_POWER_ENERGY "Потуж,Енергія"
- #define D_DOMOTICZ_ILLUMINANCE "Освітлення"
- #define D_DOMOTICZ_COUNT "Лічильник/PM1"
- #define D_DOMOTICZ_VOLTAGE "Напруга/PM2,5"
- #define D_DOMOTICZ_CURRENT "Струм/PM10"
- #define D_DOMOTICZ_AIRQUALITY "Якість повітря"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "Оновлення таймерів"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Конфігурація таймерів"
-#define D_TIMER_PARAMETERS "Налаштування таймерів"
-#define D_TIMER_ENABLE "Таймери увімкнені"
-#define D_TIMER_ARM "Увімкнений"
-#define D_TIMER_TIME "Час"
-#define D_TIMER_DAYS "Дні"
-#define D_TIMER_REPEAT "Повтор"
-#define D_TIMER_OUTPUT "Вихід"
-#define D_TIMER_ACTION "Дія"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Конфігурація KNX"
-#define D_KNX_PARAMETERS "Налаштування KNX"
-#define D_KNX_GENERAL_CONFIG "Основні"
-#define D_KNX_PHYSICAL_ADDRESS "Фізична адреса"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Має бути унікальною у мережі KNX)"
-#define D_KNX_ENABLE "KNX Увімкнений"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Дані для запису групових адрес"
-#define D_ADD "Додати"
-#define D_DELETE "Видалити"
-#define D_REPLY "Повторити"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Дані для читання групових адрес"
-#define D_RECEIVED_FROM "Отримати з"
-#define D_KNX_COMMAND_WRITE "Записати"
-#define D_KNX_COMMAND_READ "Читати"
-#define D_KNX_COMMAND_OTHER "Інше"
-#define D_SENT_TO "надіслати до"
-#define D_KNX_WARNING "Адреса групи (0/0/0) зарезервована і не може бути використана."
-#define D_KNX_ENHANCEMENT "Підвищення зв'язку"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "Енергія Сьогодні"
-#define D_ENERGY_YESTERDAY "Енергія Вчора"
-#define D_ENERGY_TOTAL "Енергія Всього"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Датчик DS18x20 зайнятий"
-#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - помилка CRC"
-#define D_SENSORS_FOUND "Датчик DS18x20 знайдено"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "Тайм-аут, в очікуванні"
-#define D_START_SIGNAL_LOW "стартовий сигнал низький"
-#define D_START_SIGNAL_HIGH "стартовий сигнал високий"
-#define D_PULSE "імпульс"
-#define D_CHECKSUM_FAILURE "Помилка контрольної суми"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчик не підтвердив отримання команди"
-#define D_SHT1X_FOUND "SHT1X знайдено"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "Частинки понад"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Приск. Вісь-X"
-#define D_AY_AXIS "Приск. Вісь-Y"
-#define D_AZ_AXIS "Приск. Вісь-Z"
-#define D_GX_AXIS "Орієнт Вісь-X"
-#define D_GY_AXIS "Орієнт Вісь-Y"
-#define D_GZ_AXIS "Орієнт Вісь-Z"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remove weigth"
-#define D_HX_CAL_REFERENCE "Load reference weigth"
-#define D_HX_CAL_DONE "Calibrated"
-#define D_HX_CAL_FAIL "Calibration failed"
-#define D_RESET_HX711 "Reset Scale"
-#define D_CONFIGURE_HX711 "Configure Scale"
-#define D_HX711_PARAMETERS "Scale parameters"
-#define D_ITEM_WEIGHT "Item weight"
-#define D_REFERENCE_WEIGHT "Reference weigth"
-#define D_CALIBRATE "Calibrate"
-#define D_CALIBRATION "Calibration"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Напрям вітру"
-#define D_TX20_WIND_SPEED "Швидкість вітру"
-#define D_TX20_WIND_SPEED_AVG "Середня швидкість вітру"
-#define D_TX20_WIND_SPEED_MAX "Максимальна швидкість вітру"
-#define D_TX20_NORTH "Пн"
-#define D_TX20_EAST "Сх"
-#define D_TX20_SOUTH "Пд"
-#define D_TX20_WEST "Зх"
-
-// 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 "Користувач"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Перемикач" // Suffix "1"
-#define D_SENSOR_BUTTON "Кнопка" // Suffix "1"
-#define D_SENSOR_RELAY "Реле" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "ШІМ" // Suffix "1"
-#define D_SENSOR_COUNTER "Лічильник" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Регулятор" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Зуммер"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "А"
-#define D_UNIT_CENTIMETER "cм"
-#define D_UNIT_HERTZ "Гц"
-#define D_UNIT_HOUR "Г"
-#define D_UNIT_GALLONS "гал"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "кг"
-#define D_UNIT_KILOMETER_PER_HOUR "км/г" // or "km/h"
-#define D_UNIT_KILOOHM "кОм"
-#define D_UNIT_KILOWATTHOUR "кВт"
-#define D_UNIT_LUX "лк"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "мкг/м3"
-#define D_UNIT_MICROMETER "мкм"
-#define D_UNIT_MICROSECOND "мкс"
-#define D_UNIT_MILLIAMPERE "мА"
-#define D_UNIT_MILLIMETER "мм"
-#define D_UNIT_MILLIMETER_MERCURY "ммHg"
-#define D_UNIT_MILLISECOND "мс"
-#define D_UNIT_MINUTE "хв"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "ppd"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "гПа"
-#define D_UNIT_SECOND "сек"
-#define D_UNIT_SECTORS "секторів"
-#define D_UNIT_VA "ВА"
-#define D_UNIT_VAR "ВАр"
-#define D_UNIT_VOLT "В"
-#define D_UNIT_WATT "Вт"
-#define D_UNIT_WATTHOUR "Вт/Год"
-#define D_UNIT_WATT_METER_QUADRAT "Вт/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Кут фази"
-#define D_IMPORT_ACTIVE "Активна вхід"
-#define D_EXPORT_ACTIVE "Активна вихід"
-#define D_IMPORT_REACTIVE "Рекативна вхід"
-#define D_EXPORT_REACTIVE "Реактивна вихід"
-#define D_TOTAL_REACTIVE "Всього реактивна"
-#define D_UNIT_KWARH "кВАр/г"
-#define D_UNIT_ANGLE "Град"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_UK_UK_H_
+/*
+ uk-UK.h - localization for Ukrainian - Ukraine for Tasmota
+
+ Copyright (C) 2019 Theo Arends / vadym-adik
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_UK_UK_H_
+#define _LANGUAGE_UK_UK_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.14.0a
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1058
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "uk"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "НедПонВівСерЧетПятСуб"
+#define D_MONTH3LIST "СічЛютБерКвіТраЧерЛипСерВерЖовЛисГру"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR ","
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "Якість повітря"
+#define D_AP "Точка доступу" // Access Point
+#define D_AS "як"
+#define D_AUTO "АВТО"
+#define D_BLINK "Блимати"
+#define D_BLINKOFF "Не блимати"
+#define D_BOOT_COUNT "К-сть завант."
+#define D_BRIGHTLIGHT "Яскравість"
+#define D_BSSID "BSSId"
+#define D_BUTTON "Кнопка"
+#define D_BY " " // Written by me
+#define D_BYTES "Байт"
+#define D_CELSIUS "Цельсія"
+#define D_CHANNEL "Канал"
+#define D_CO2 "Вуглек. газ"
+#define D_CODE "код" // Button code
+#define D_COLDLIGHT "Холодний"
+#define D_COMMAND "Команда"
+#define D_CONNECTED "Під'єднано"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "Розмір"
+#define D_COUNTER "Лічильник"
+#define D_CURRENT "Струм" // As in Voltage and Current
+#define D_DATA "Дані"
+#define D_DARKLIGHT "Темний"
+#define D_DEBUG "Налагодження"
+#define D_DISABLED "Заблоковано"
+#define D_DISTANCE "Відстань"
+#define D_DNS_SERVER "Сервер DNS"
+#define D_DONE "Виконано"
+#define D_DST_TIME "Літній час"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "Емуляція"
+#define D_ENABLED "Активно"
+#define D_ERASE "Стирати"
+#define D_ERROR "Помилка"
+#define D_FAHRENHEIT "Фаренгейт"
+#define D_FAILED "Невдало"
+#define D_FALLBACK "Зворотній зв'язок"
+#define D_FALLBACK_TOPIC "Топік зворотнього зв'язку"
+#define D_FALSE "Ні"
+#define D_FILE "Файл"
+#define D_FLOW_RATE "Потік"
+#define D_FREE_MEMORY "Вільна память"
+#define D_FREQUENCY "Частота"
+#define D_GAS "Газ"
+#define D_GATEWAY "Шлюз"
+#define D_GROUP "Група"
+#define D_HOST "Хост"
+#define D_HOSTNAME "Назва хосту"
+#define D_HUMIDITY "Вологість"
+#define D_ILLUMINANCE "Освітленність"
+#define D_IMMEDIATE "Негайно" // Button immediate
+#define D_INDEX "Індекс"
+#define D_INFO "Інфо"
+#define D_INFRARED "Інфрачервоний"
+#define D_INITIALIZED "Ініціалізовано"
+#define D_IP_ADDRESS "IP адреса"
+#define D_LIGHT "Світло"
+#define D_LWT "LWT"
+#define D_MODULE "Модуль"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "Багаторазове натискання"
+#define D_NOISE "Шум"
+#define D_NONE "Нічого"
+#define D_OFF "Вимк."
+#define D_OFFLINE "Офф-лайн"
+#define D_OK "Ок"
+#define D_ON "Увімк."
+#define D_ONLINE "Он-лайн"
+#define D_PASSWORD "Гасло"
+#define D_PORT "Порт"
+#define D_POWER_FACTOR "Коефіцієнт потужності"
+#define D_POWERUSAGE "Потужність"
+#define D_POWERUSAGE_ACTIVE "Активна потужність"
+#define D_POWERUSAGE_APPARENT "Дійсна потужність"
+#define D_POWERUSAGE_REACTIVE "Реактивна потужність"
+#define D_PRESSURE "Тиск"
+#define D_PRESSUREATSEALEVEL "Тиск на рівні моря"
+#define D_PROGRAM_FLASH_SIZE "Розмір Flash для програм"
+#define D_PROGRAM_SIZE "Розмір програм"
+#define D_PROJECT "Проект"
+#define D_RAIN "Дощ"
+#define D_RECEIVED "Отримано"
+#define D_RESTART "Перезавантаження"
+#define D_RESTARTING "Перезавантаження"
+#define D_RESTART_REASON "Причина перезавантаження"
+#define D_RESTORE "відновлення"
+#define D_RETAINED "зберігати"
+#define D_RULE "Правило"
+#define D_SAVE "Зберегти"
+#define D_SENSOR "Давач"
+#define D_SSID "SSID"
+#define D_START "Старт"
+#define D_STD_TIME "Стандартний час"
+#define D_STOP "Стоп"
+#define D_SUBNET_MASK "Маска підмережі"
+#define D_SUBSCRIBE_TO "Підписатись на"
+#define D_UNSUBSCRIBE_FROM "Відписатися від"
+#define D_SUCCESSFUL "Успішно"
+#define D_SUNRISE "Схід сонця"
+#define D_SUNSET "Захід сонця"
+#define D_TEMPERATURE "Температура"
+#define D_TO "до"
+#define D_TOGGLE "Перекл."
+#define D_TOPIC "Топік"
+#define D_TOTAL_USAGE "Загальне споживання"
+#define D_TRANSMIT "Передати"
+#define D_TRUE "Так"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "оновлення"
+#define D_UPLOAD "Завантажити"
+#define D_UPTIME "Час роботи"
+#define D_USER "Користувач"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "Індекс УФ"
+#define D_UV_INDEX_1 "Низький"
+#define D_UV_INDEX_2 "Середній"
+#define D_UV_INDEX_3 "Високий"
+#define D_UV_INDEX_4 "Небезпечний"
+#define D_UV_INDEX_5 "Опіки 1/2 ступеня"
+#define D_UV_INDEX_6 "Опіки 3 ступеня"
+#define D_UV_INDEX_7 "Невідомий"
+#define D_UV_LEVEL "Рівень УФ"
+#define D_UV_POWER "Потужність УФ"
+#define D_VERSION "Версія"
+#define D_VOLTAGE "Напруга"
+#define D_WEIGHT "Вага"
+#define D_WARMLIGHT "Тепло"
+#define D_WEB_SERVER "Web сервер"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "ПОПЕРЕДЖЕННЯ! Ця версія не підтримує збереження налаштувань"
+#define D_LEVEL_10 "рівень 1-0"
+#define D_LEVEL_01 "рівень 0-1"
+#define D_SERIAL_LOGGING_DISABLED "Serial журнал вимкнений"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog журнал увімкнений"
+
+#define D_SET_BAUDRATE_TO "Встановити швидкість передачі (Baudrate)"
+#define D_RECEIVED_TOPIC "Отриманий Топік"
+#define D_DATA_SIZE "Розмір даних"
+#define D_ANALOG_INPUT "Напруга"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Цикл заблокований"
+#define D_WPS_FAILED_WITH_STATUS "WPS конфігурація з статусом НЕВДАЛА"
+#define D_ACTIVE_FOR_3_MINUTES "активний протягом 3 хвилин"
+#define D_FAILED_TO_START "не вдалось запустити"
+#define D_PATCH_ISSUE_2186 "Проблема з виправленням 2186"
+#define D_CONNECTING_TO_AP "Підключення до AP"
+#define D_IN_MODE "в режимі"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "Помилка підключення, IP-адреса не отримана"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "Помилка з'єднання, AP не знайдено"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "Помилка з'єднання, невірне гасло до AP"
+#define D_CONNECT_FAILED_AP_TIMEOUT "Помилка з'єднання з AP по тайм-ауту"
+#define D_ATTEMPTING_CONNECTION "Спроба підключення..."
+#define D_CHECKING_CONNECTION "Перевірка з'єднання..."
+#define D_QUERY_DONE "Запит виконаний. Виявлено сервер MQTT"
+#define D_MQTT_SERVICE_FOUND "MQTT сервер знайдено"
+#define D_FOUND_AT "знайдено в"
+#define D_SYSLOG_HOST_NOT_FOUND "Сервер журналу не знайдено"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "Збережено в флэш-пам'ять"
+#define D_LOADED_FROM_FLASH_AT "Завантажено з флэш-пам'яті"
+#define D_USE_DEFAULTS "Використовувати значення за замовчуванням"
+#define D_ERASED_SECTOR "Стерто сектор"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "Для використання Tasmota треба увімкнути JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "Прошивка MINIMAL
будь-ласка оновіть"
+#define D_WEBSERVER_ACTIVE_ON "Веб-сервер активний"
+#define D_WITH_IP_ADDRESS "з IP-адресою"
+#define D_WEBSERVER_STOPPED "Веб-сервер зупинений"
+#define D_FILE_NOT_FOUND "Файл не знайдений"
+#define D_REDIRECTED "Перенаправлено на адаптивний портал"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi менеджер встановлює Точку Доступу і зберігає параметри"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi менеджер встановив Точку Доступу"
+#define D_TRYING_TO_CONNECT "Спроба підключення пристрою до мережі"
+
+#define D_RESTART_IN "Перезавантаження"
+#define D_SECONDS "секунд"
+#define D_DEVICE_WILL_RESTART "Пристрій буде перезавантажено через декілька секунд"
+#define D_BUTTON_TOGGLE "Переключити"
+#define D_CONFIGURATION "Конфігурація"
+#define D_INFORMATION "Інформація"
+#define D_FIRMWARE_UPGRADE "Оновлення прошивки"
+#define D_CONSOLE "Консоль"
+#define D_CONFIRM_RESTART "Підтвердити перезавантаження"
+
+#define D_CONFIGURE_MODULE "Конфігурація модуля"
+#define D_CONFIGURE_WIFI "Конфігурація WiFi"
+#define D_CONFIGURE_MQTT "Конфігурація MQTT"
+#define D_CONFIGURE_DOMOTICZ "Конфігурація Domoticz"
+#define D_CONFIGURE_LOGGING "Конфігурація журналів"
+#define D_CONFIGURE_OTHER "Конфігурація інше"
+#define D_CONFIRM_RESET_CONFIGURATION "Підтвердити скидання конфігурації"
+#define D_RESET_CONFIGURATION "Скидання конфігурації"
+#define D_BACKUP_CONFIGURATION "Резервне копіювання конфігурації"
+#define D_RESTORE_CONFIGURATION "Відновлення конфігурації"
+#define D_MAIN_MENU "Головне меню"
+
+#define D_MODULE_PARAMETERS "Параметри модуля"
+#define D_MODULE_TYPE "Тип модуля"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "АЦП"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "Serial вхід"
+#define D_SERIAL_OUT "Serial вихід"
+
+#define D_WIFI_PARAMETERS "Параметри Wifi"
+#define D_SCAN_FOR_WIFI_NETWORKS "Сканування бездротовихих мереж Wifi"
+#define D_SCAN_DONE "Сканування завершене"
+#define D_NO_NETWORKS_FOUND "Не знайдено мереж"
+#define D_REFRESH_TO_SCAN_AGAIN "Оновити для повторного сканування"
+#define D_DUPLICATE_ACCESSPOINT "Дублювати Точку Доступу (AP)"
+#define D_SKIPPING_LOW_QUALITY "Пропущено через низьку якість"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 SSID"
+#define D_AP1_PASSWORD "AP1 гасло"
+#define D_AP2_SSID "AP2 SSID"
+#define D_AP2_PASSWORD "AP2 гасло"
+
+#define D_MQTT_PARAMETERS "Параметри MQTT"
+#define D_CLIENT "Клієнт"
+#define D_FULL_TOPIC "Повний Топік"
+
+#define D_LOGGING_PARAMETERS "Параметри журналу"
+#define D_SERIAL_LOG_LEVEL "Serial рівень"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web рівень"
+#define D_SYS_LOG_LEVEL "System рівень"
+#define D_MORE_DEBUG "Додаткова інформація для налагодження"
+#define D_SYSLOG_HOST "System хост"
+#define D_SYSLOG_PORT "System порт"
+#define D_TELEMETRY_PERIOD "Період телеметрії"
+
+#define D_OTHER_PARAMETERS "Параметри Інше"
+#define D_TEMPLATE "Шаблони"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "Гасло Web адміністратора"
+#define D_MQTT_ENABLE "MQTT активний"
+#define D_FRIENDLY_NAME "Дружнє Ім'я"
+#define D_BELKIN_WEMO "Belkin WeMo"
+#define D_HUE_BRIDGE "Hue Bridge"
+#define D_SINGLE_DEVICE "одиночне"
+#define D_MULTI_DEVICE "мульти"
+
+#define D_CONFIGURE_TEMPLATE "Конфігурація шаблона"
+#define D_TEMPLATE_PARAMETERS "Параметри шаблона"
+#define D_TEMPLATE_NAME "Назва"
+#define D_BASE_TYPE "На основі"
+#define D_TEMPLATE_FLAGS "Опції"
+
+#define D_SAVE_CONFIGURATION "Зберегти конфігурацію"
+#define D_CONFIGURATION_SAVED "Конфігурація збережена "
+#define D_CONFIGURATION_RESET "Конфігурація скинута"
+
+#define D_PROGRAM_VERSION "Версія програми"
+#define D_BUILD_DATE_AND_TIME "Дата і час збірки"
+#define D_CORE_AND_SDK_VERSION "Версія Core/SDK"
+#define D_FLASH_WRITE_COUNT "Кількість записів Flash"
+#define D_MAC_ADDRESS "MAC Адреса"
+#define D_MQTT_HOST "MQTT Хост"
+#define D_MQTT_PORT "MQTT Порт"
+#define D_MQTT_CLIENT "MQTT ID Клієнта"
+#define D_MQTT_USER "MQTT Користувач"
+#define D_MQTT_TOPIC "MQTT Топік"
+#define D_MQTT_GROUP_TOPIC "MQTT Топік групи"
+#define D_MQTT_FULL_TOPIC "MQTT Топік повний"
+#define D_MDNS_DISCOVERY "mDNS Виявлення"
+#define D_MDNS_ADVERTISE "mDNS Транcляція"
+#define D_ESP_CHIP_ID "ID чипу ESP"
+#define D_FLASH_CHIP_ID "ID чипу Flash пам'яті"
+#define D_FLASH_CHIP_SIZE "Розмір Flash пам'яті"
+#define D_FREE_PROGRAM_SPACE "Вільний простір для програм"
+
+#define D_UPGRADE_BY_WEBSERVER "Оновлення через Веб-сервер"
+#define D_OTA_URL "OTA Url"
+#define D_START_UPGRADE "Почати оновлення"
+#define D_UPGRADE_BY_FILE_UPLOAD "Оновлення шляхом завантаження файлів"
+#define D_UPLOAD_STARTED "Завантаження почалось"
+#define D_UPGRADE_STARTED "Оновлення почалось"
+#define D_UPLOAD_DONE "Завантаження завершено"
+#define D_UPLOAD_ERR_1 "Файл не вибраний"
+#define D_UPLOAD_ERR_2 "Недостатньо місця"
+#define D_UPLOAD_ERR_3 "Магічний байт не 0xE9"
+#define D_UPLOAD_ERR_4 "Размір прошивки більший, ніж размір Flash пам'яті"
+#define D_UPLOAD_ERR_5 "Помилка завантаження буферу"
+#define D_UPLOAD_ERR_6 "Помилка завантаження. Увімкнено лог рівень 3"
+#define D_UPLOAD_ERR_7 "Завантаження перервано"
+#define D_UPLOAD_ERR_8 "Файл невірний"
+#define D_UPLOAD_ERR_9 "Занадто великий файл"
+#define D_UPLOAD_ERR_10 "Помилка ініціалізаціції чипу FR"
+#define D_UPLOAD_ERR_11 "Помилка стирання чипу RF"
+#define D_UPLOAD_ERR_12 "Помилка запису чипу RF"
+#define D_UPLOAD_ERR_13 "Помилка розкодування прошивки RF"
+#define D_UPLOAD_ERROR_CODE "Код помилки завантаження"
+
+#define D_ENTER_COMMAND "Уведіть команду"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "Увімкніть Веб лог рівня 2 якщо очікуєте відповідь"
+#define D_NEED_USER_AND_PASSWORD "Очікується user=&password="
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "Перевірка відбитка TLS..."
+#define D_TLS_CONNECT_FAILED_TO "Збій підключення TLS до"
+#define D_RETRY_IN "Повторити"
+#define D_VERIFIED "Перевірено відбиток"
+#define D_INSECURE "Небезпечне з'єднання, недійсний відбиток"
+#define D_CONNECT_FAILED_TO "Помилка підключення до"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "Multicast вимкнений"
+#define D_MULTICAST_REJOINED "Multicast (пере)під'єднався"
+#define D_MULTICAST_JOIN_FAILED "Multicast помилка з'єднання"
+#define D_FAILED_TO_SEND_RESPONSE "Не вдалось надіслати відповідь"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo основна подія"
+#define D_WEMO_EVENT_SERVICE "WeMo служба подій"
+#define D_WEMO_META_SERVICE "WeMo мета-сервіс"
+#define D_WEMO_SETUP "WeMo налаштування"
+#define D_RESPONSE_SENT "Відповідь відіслана"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue налаштування"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API не реалізовано"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST args"
+#define D_3_RESPONSE_PACKETS_SENT "3 пакету відповіді отримано"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz налаштування"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Ключ idx"
+#define D_DOMOTICZ_SWITCH_IDX "Перемикач idx"
+#define D_DOMOTICZ_SENSOR_IDX "Давач idx"
+ #define D_DOMOTICZ_TEMP "Температура"
+ #define D_DOMOTICZ_TEMP_HUM "Темп,Волог"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "Темп,Волог,Тиск"
+ #define D_DOMOTICZ_POWER_ENERGY "Потуж,Енергія"
+ #define D_DOMOTICZ_ILLUMINANCE "Освітлення"
+ #define D_DOMOTICZ_COUNT "Лічильник/PM1"
+ #define D_DOMOTICZ_VOLTAGE "Напруга/PM2,5"
+ #define D_DOMOTICZ_CURRENT "Струм/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "Якість повітря"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "Оновлення таймерів"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Конфігурація таймерів"
+#define D_TIMER_PARAMETERS "Налаштування таймерів"
+#define D_TIMER_ENABLE "Таймери увімкнені"
+#define D_TIMER_ARM "Увімкнений"
+#define D_TIMER_TIME "Час"
+#define D_TIMER_DAYS "Дні"
+#define D_TIMER_REPEAT "Повтор"
+#define D_TIMER_OUTPUT "Вихід"
+#define D_TIMER_ACTION "Дія"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Конфігурація KNX"
+#define D_KNX_PARAMETERS "Налаштування KNX"
+#define D_KNX_GENERAL_CONFIG "Основні"
+#define D_KNX_PHYSICAL_ADDRESS "Фізична адреса"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Має бути унікальною у мережі KNX)"
+#define D_KNX_ENABLE "KNX Увімкнений"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Дані для запису групових адрес"
+#define D_ADD "Додати"
+#define D_DELETE "Видалити"
+#define D_REPLY "Повторити"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Дані для читання групових адрес"
+#define D_RECEIVED_FROM "Отримати з"
+#define D_KNX_COMMAND_WRITE "Записати"
+#define D_KNX_COMMAND_READ "Читати"
+#define D_KNX_COMMAND_OTHER "Інше"
+#define D_SENT_TO "надіслати до"
+#define D_KNX_WARNING "Адреса групи (0/0/0) зарезервована і не може бути використана."
+#define D_KNX_ENHANCEMENT "Підвищення зв'язку"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "Енергія Сьогодні"
+#define D_ENERGY_YESTERDAY "Енергія Вчора"
+#define D_ENERGY_TOTAL "Енергія Всього"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "Датчик DS18x20 зайнятий"
+#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - помилка CRC"
+#define D_SENSORS_FOUND "Датчик DS18x20 знайдено"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "Тайм-аут, в очікуванні"
+#define D_START_SIGNAL_LOW "стартовий сигнал низький"
+#define D_START_SIGNAL_HIGH "стартовий сигнал високий"
+#define D_PULSE "імпульс"
+#define D_CHECKSUM_FAILURE "Помилка контрольної суми"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчик не підтвердив отримання команди"
+#define D_SHT1X_FOUND "SHT1X знайдено"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "Частинки понад"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Приск. Вісь-X"
+#define D_AY_AXIS "Приск. Вісь-Y"
+#define D_AZ_AXIS "Приск. Вісь-Z"
+#define D_GX_AXIS "Орієнт Вісь-X"
+#define D_GY_AXIS "Орієнт Вісь-Y"
+#define D_GZ_AXIS "Орієнт Вісь-Z"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remove weigth"
+#define D_HX_CAL_REFERENCE "Load reference weigth"
+#define D_HX_CAL_DONE "Calibrated"
+#define D_HX_CAL_FAIL "Calibration failed"
+#define D_RESET_HX711 "Reset Scale"
+#define D_CONFIGURE_HX711 "Configure Scale"
+#define D_HX711_PARAMETERS "Scale parameters"
+#define D_ITEM_WEIGHT "Item weight"
+#define D_REFERENCE_WEIGHT "Reference weigth"
+#define D_CALIBRATE "Calibrate"
+#define D_CALIBRATION "Calibration"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Напрям вітру"
+#define D_TX20_WIND_SPEED "Швидкість вітру"
+#define D_TX20_WIND_SPEED_AVG "Середня швидкість вітру"
+#define D_TX20_WIND_SPEED_MAX "Максимальна швидкість вітру"
+#define D_TX20_NORTH "Пн"
+#define D_TX20_EAST "Сх"
+#define D_TX20_SOUTH "Пд"
+#define D_TX20_WEST "Зх"
+
+// 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 "Користувач"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Перемикач" // Suffix "1"
+#define D_SENSOR_BUTTON "Кнопка" // Suffix "1"
+#define D_SENSOR_RELAY "Реле" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "ШІМ" // Suffix "1"
+#define D_SENSOR_COUNTER "Лічильник" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Регулятор" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Зуммер"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "А"
+#define D_UNIT_CENTIMETER "cм"
+#define D_UNIT_HERTZ "Гц"
+#define D_UNIT_HOUR "Г"
+#define D_UNIT_GALLONS "гал"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "кг"
+#define D_UNIT_KILOMETER_PER_HOUR "км/г" // or "km/h"
+#define D_UNIT_KILOOHM "кОм"
+#define D_UNIT_KILOWATTHOUR "кВт"
+#define D_UNIT_LUX "лк"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "мкг/м3"
+#define D_UNIT_MICROMETER "мкм"
+#define D_UNIT_MICROSECOND "мкс"
+#define D_UNIT_MILLIAMPERE "мА"
+#define D_UNIT_MILLIMETER "мм"
+#define D_UNIT_MILLIMETER_MERCURY "ммHg"
+#define D_UNIT_MILLISECOND "мс"
+#define D_UNIT_MINUTE "хв"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "ppd"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "гПа"
+#define D_UNIT_SECOND "сек"
+#define D_UNIT_SECTORS "секторів"
+#define D_UNIT_VA "ВА"
+#define D_UNIT_VAR "ВАр"
+#define D_UNIT_VOLT "В"
+#define D_UNIT_WATT "Вт"
+#define D_UNIT_WATTHOUR "Вт/Год"
+#define D_UNIT_WATT_METER_QUADRAT "Вт/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Кут фази"
+#define D_IMPORT_ACTIVE "Активна вхід"
+#define D_EXPORT_ACTIVE "Активна вихід"
+#define D_IMPORT_REACTIVE "Рекативна вхід"
+#define D_EXPORT_REACTIVE "Реактивна вихід"
+#define D_TOTAL_REACTIVE "Всього реактивна"
+#define D_UNIT_KWARH "кВАр/г"
+#define D_UNIT_ANGLE "Град"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_UK_UK_H_
diff --git a/tasmota/language/zh-CN.h b/tasmota/language/zh-CN.h
index 275216007..21aa63be3 100644
--- a/tasmota/language/zh-CN.h
+++ b/tasmota/language/zh-CN.h
@@ -1,703 +1,701 @@
-/*
- zh-CN.h - localization for Chinese (Simplified) - China for Tasmota
-
- Copyright (C) 2019 Theo Arends (translated by killadm)
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_ZH_CN_H_
-#define _LANGUAGE_ZH_CN_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.14.0b
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 2052
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "zh"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "日 一 二 三 四 五 六 "
-#define D_MONTH3LIST "1月 2月 3月 4月 5月 6月 7月 8月 9月 10月11月12月"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "空气质量"
-#define D_AP "AP" // Access Point
-#define D_AS "名称:"
-#define D_AUTO "自动"
-#define D_BLINK "闪烁"
-#define D_BLINKOFF "闪烁关"
-#define D_BOOT_COUNT "启动次数"
-#define D_BRIGHTLIGHT "亮"
-#define D_BSSID "BSSId"
-#define D_BUTTON "按钮"
-#define D_BY "汉化: killadm 作者:" // Written by me
-#define D_BYTES "大小:"
-#define D_CELSIUS "摄氏"
-#define D_CHANNEL "频道"
-#define D_CO2 "二氧化碳"
-#define D_CODE "代码" // Button code
-#define D_COLDLIGHT "冷"
-#define D_COMMAND "命令:"
-#define D_CONNECTED "已连接"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "数量:"
-#define D_COUNTER "计数器"
-#define D_CURRENT "电流" // As in Voltage and Current
-#define D_DATA "数据:"
-#define D_DARKLIGHT "暗"
-#define D_DEBUG "调试"
-#define D_DISABLED "禁用"
-#define D_DISTANCE "距离"
-#define D_DNS_SERVER "DNS服务器"
-#define D_DONE "完成"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "设备模拟"
-#define D_ENABLED "启用"
-#define D_ERASE "擦除"
-#define D_ERROR "错误"
-#define D_FAHRENHEIT "华氏"
-#define D_FAILED "失败"
-#define D_FALLBACK "回退"
-#define D_FALLBACK_TOPIC "回退主题"
-#define D_FALSE "False"
-#define D_FILE "文件:"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "空闲内存"
-#define D_FREQUENCY "频率"
-#define D_GAS "气体"
-#define D_GATEWAY "网关"
-#define D_GROUP "组:"
-#define D_HOST "主机"
-#define D_HOSTNAME "主机名"
-#define D_HUMIDITY "湿度"
-#define D_ILLUMINANCE "照度"
-#define D_IMMEDIATE "单次按键" // Button immediate
-#define D_INDEX "索引:"
-#define D_INFO "信息"
-#define D_INFRARED "红外线"
-#define D_INITIALIZED "初始化完成"
-#define D_IP_ADDRESS "IP地址"
-#define D_LIGHT "灯"
-#define D_LWT "LWT"
-#define D_MODULE "模块"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "多次按键"
-#define D_NOISE "嘈杂"
-#define D_NONE "无"
-#define D_OFF "关"
-#define D_OFFLINE "离线"
-#define D_OK "好"
-#define D_ON "开"
-#define D_ONLINE "在线"
-#define D_PASSWORD "密码"
-#define D_PORT "端口"
-#define D_POWER_FACTOR "功率因数"
-#define D_POWERUSAGE "功率"
-#define D_POWERUSAGE_ACTIVE "有功功率"
-#define D_POWERUSAGE_APPARENT "视在功率"
-#define D_POWERUSAGE_REACTIVE "无功功率"
-#define D_PRESSURE "气压"
-#define D_PRESSUREATSEALEVEL "海平面气压"
-#define D_PROGRAM_FLASH_SIZE "固件 Flash 大小"
-#define D_PROGRAM_SIZE "固件大小"
-#define D_PROJECT "项目:"
-#define D_RAIN "降水量"
-#define D_RECEIVED "已接收"
-#define D_RESTART "重启"
-#define D_RESTARTING "正在重启"
-#define D_RESTART_REASON "重启原因"
-#define D_RESTORE "恢复"
-#define D_RETAINED "已保留"
-#define D_RULE "规则"
-#define D_SAVE "保存"
-#define D_SENSOR "传感器"
-#define D_SSID "名称"
-#define D_START "开始"
-#define D_STD_TIME "STD"
-#define D_STOP "停止"
-#define D_SUBNET_MASK "子网掩码"
-#define D_SUBSCRIBE_TO "订阅"
-#define D_UNSUBSCRIBE_FROM "退订"
-#define D_SUCCESSFUL "成功"
-#define D_SUNRISE "日出"
-#define D_SUNSET "日落"
-#define D_TEMPERATURE "温度"
-#define D_TO "to"
-#define D_TOGGLE "切换"
-#define D_TOPIC "主题"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "发送"
-#define D_TRUE "True"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "升级"
-#define D_UPLOAD "上传"
-#define D_UPTIME "运行时间"
-#define D_USER "用户名"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "紫外线指数"
-#define D_UV_INDEX_1 "低"
-#define D_UV_INDEX_2 "中"
-#define D_UV_INDEX_3 "高"
-#define D_UV_INDEX_4 "危险"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "紫外线水平"
-#define D_UV_POWER "紫外线功率 "
-#define D_VERSION "版本"
-#define D_VOLTAGE "电压"
-#define D_WEIGHT "重量"
-#define D_WARMLIGHT "暖"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "警告:精简固件不支持配置持久化保存"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "串口日志已禁用"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog 日志已开启"
-
-#define D_SET_BAUDRATE_TO "设置波特率为:"
-#define D_RECEIVED_TOPIC "接收到的主题:"
-#define D_DATA_SIZE "数据大小:"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "WPS 配置失败,状态:"
-#define D_ACTIVE_FOR_3_MINUTES "激活 3 分钟"
-#define D_FAILED_TO_START "未能启动"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "连接到 AP"
-#define D_IN_MODE "模式:"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "连接失败,因为没有获取到 IP 地址"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "连接失败,无法连接 AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "连接失败,AP 密码不正确"
-#define D_CONNECT_FAILED_AP_TIMEOUT "连接失败,AP 超时"
-#define D_ATTEMPTING_CONNECTION "尝试连接..."
-#define D_CHECKING_CONNECTION "检查连接..."
-#define D_QUERY_DONE "查询完成。 发现 MQTT 服务"
-#define D_MQTT_SERVICE_FOUND "发现 MQTT 服务:"
-#define D_FOUND_AT "发现:"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog 主机未找到"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "保存到 flash:"
-#define D_LOADED_FROM_FLASH_AT "从 flash 载入:"
-#define D_USE_DEFAULTS "使用默认设置"
-#define D_ERASED_SECTOR "擦除扇区"
-
-// webserver.ino
-#define D_NOSCRIPT "Tasmota要求浏览器支持 JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "当前是精简版固件
请升级"
-#define D_WEBSERVER_ACTIVE_ON "Web 服务器地址:"
-#define D_WITH_IP_ADDRESS "IP 地址:"
-#define D_WEBSERVER_STOPPED "Web 服务已停止"
-#define D_FILE_NOT_FOUND "文件未找到"
-#define D_REDIRECTED "重定向到认证页面"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager 设置无线操作模式"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager 设置接入点"
-#define D_TRYING_TO_CONNECT "尝试将设备连接到网络"
-
-#define D_RESTART_IN "重启需要"
-#define D_SECONDS "秒"
-#define D_DEVICE_WILL_RESTART "设备将在几秒钟内重启"
-#define D_BUTTON_TOGGLE "状态切换"
-#define D_CONFIGURATION "设置"
-#define D_INFORMATION "信息"
-#define D_FIRMWARE_UPGRADE "固件升级"
-#define D_CONSOLE "控制台"
-#define D_CONFIRM_RESTART "确认重启"
-
-#define D_CONFIGURE_MODULE "模块设置"
-#define D_CONFIGURE_WIFI "WiFi设置"
-#define D_CONFIGURE_MQTT "MQTT设置"
-#define D_CONFIGURE_DOMOTICZ "Domoticz设置"
-#define D_CONFIGURE_LOGGING "日志设置"
-#define D_CONFIGURE_OTHER "其他设置"
-#define D_CONFIRM_RESET_CONFIGURATION "确认重置配置"
-#define D_RESET_CONFIGURATION "重置配置"
-#define D_BACKUP_CONFIGURATION "备份配置"
-#define D_RESTORE_CONFIGURATION "还原配置"
-#define D_MAIN_MENU "主菜单"
-
-#define D_MODULE_PARAMETERS "模块设置"
-#define D_MODULE_TYPE "模块类型"
-#define D_PULLUP_ENABLE "没有按钮/开关上拉"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "串口输入(RX)"
-#define D_SERIAL_OUT "串口输出(TX)"
-
-#define D_WIFI_PARAMETERS "Wifi设置"
-#define D_SCAN_FOR_WIFI_NETWORKS "扫描无线网络"
-#define D_SCAN_DONE "扫描完毕"
-#define D_NO_NETWORKS_FOUND "未找到任何网络"
-#define D_REFRESH_TO_SCAN_AGAIN "刷新并重试"
-#define D_DUPLICATE_ACCESSPOINT "重复AP"
-#define D_SKIPPING_LOW_QUALITY "忽略弱信号网络"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 名称"
-#define D_AP1_PASSWORD "AP1 密码"
-#define D_AP2_SSID "AP2 名称"
-#define D_AP2_PASSWORD "AP2 密码"
-
-#define D_MQTT_PARAMETERS "MQTT 设置"
-#define D_CLIENT "客户端"
-#define D_FULL_TOPIC "完整主题"
-
-#define D_LOGGING_PARAMETERS "日志设置"
-#define D_SERIAL_LOG_LEVEL "串口日志级别"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web 日志级别"
-#define D_SYS_LOG_LEVEL "Syslog 日志级别"
-#define D_MORE_DEBUG "全部调试"
-#define D_SYSLOG_HOST "Syslog 主机地址"
-#define D_SYSLOG_PORT "Syslog 端口"
-#define D_TELEMETRY_PERIOD "上报周期"
-
-#define D_OTHER_PARAMETERS "其他设置"
-#define D_TEMPLATE "模板"
-#define D_ACTIVATE "启用"
-#define D_WEB_ADMIN_PASSWORD "WEB 管理密码"
-#define D_MQTT_ENABLE "启用MQTT"
-#define D_FRIENDLY_NAME "昵称"
-#define D_BELKIN_WEMO "贝尔金 WeMo"
-#define D_HUE_BRIDGE "飞利浦 Hue 网桥"
-#define D_SINGLE_DEVICE "单设备"
-#define D_MULTI_DEVICE "多设备"
-
-#define D_CONFIGURE_TEMPLATE "模板配置"
-#define D_TEMPLATE_PARAMETERS "模板参数"
-#define D_TEMPLATE_NAME "名称"
-#define D_BASE_TYPE "基于"
-#define D_TEMPLATE_FLAGS "选项"
-
-#define D_SAVE_CONFIGURATION "保存设置"
-#define D_CONFIGURATION_SAVED "设置已保存"
-#define D_CONFIGURATION_RESET "设置已重置"
-
-#define D_PROGRAM_VERSION "固件版本"
-#define D_BUILD_DATE_AND_TIME "编译时间"
-#define D_CORE_AND_SDK_VERSION "内核和 SDK 版本"
-#define D_FLASH_WRITE_COUNT "Flash 写入次数"
-#define D_MAC_ADDRESS "MAC 地址"
-#define D_MQTT_HOST "MQTT 主机"
-#define D_MQTT_PORT "MQTT 端口"
-#define D_MQTT_CLIENT "MQTT 客户端"
-#define D_MQTT_USER "MQTT 用户名"
-#define D_MQTT_TOPIC "MQTT 主题"
-#define D_MQTT_GROUP_TOPIC "MQTT 主题组"
-#define D_MQTT_FULL_TOPIC "MQTT 完整主题"
-#define D_MDNS_DISCOVERY "mDNS 发现"
-#define D_MDNS_ADVERTISE "mDNS 广播"
-#define D_ESP_CHIP_ID "ESP 芯片 ID"
-#define D_FLASH_CHIP_ID "Flash 芯片 ID"
-#define D_FLASH_CHIP_SIZE "Flash 大小"
-#define D_FREE_PROGRAM_SPACE "空闲程序空间"
-
-#define D_UPGRADE_BY_WEBSERVER "通过 Web 升级"
-#define D_OTA_URL "OTA 地址"
-#define D_START_UPGRADE "开始升级"
-#define D_UPGRADE_BY_FILE_UPLOAD "通过文件升级"
-#define D_UPLOAD_STARTED "开始上传"
-#define D_UPGRADE_STARTED "开始升级"
-#define D_UPLOAD_DONE "上传完成"
-#define D_UPLOAD_ERR_1 "没有选择任何文件"
-#define D_UPLOAD_ERR_2 "没有足够空间"
-#define D_UPLOAD_ERR_3 "固件头不是 0xE9"
-#define D_UPLOAD_ERR_4 "固件大小超过 flash 容量"
-#define D_UPLOAD_ERR_5 "上传缓冲区不足,请先刷入精简固件再升级"
-#define D_UPLOAD_ERR_6 "上传失败。 启用日志级别 3 调试"
-#define D_UPLOAD_ERR_7 "上传取消"
-#define D_UPLOAD_ERR_8 "错误的固件"
-#define D_UPLOAD_ERR_9 "固件太大"
-#define D_UPLOAD_ERR_10 "初始化 RF 芯片失败"
-#define D_UPLOAD_ERR_11 "擦除 RF 芯片失败"
-#define D_UPLOAD_ERR_12 "写入 RF 芯片失败"
-#define D_UPLOAD_ERR_13 "解码 RF 固件失败"
-#define D_UPLOAD_ERROR_CODE "上传错误代码"
-
-#define D_ENTER_COMMAND "输入命令"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "如果想得到预期响应,请调整日志级别至: 2 信息"
-#define D_NEED_USER_AND_PASSWORD "需要 user=<用户名>&password=<密码>"
-
-// xdrv_00_mqtt.ino
-#define D_FINGERPRINT "验证 TLS 指纹..."
-#define D_TLS_CONNECT_FAILED_TO "TLS 连接失败"
-#define D_RETRY_IN "重试倒计时:"
-#define D_VERIFIED "验证成功"
-#define D_INSECURE "指纹无效导致连接不安全"
-#define D_CONNECT_FAILED_TO "连接失败:"
-
-// xdrv_wemohue.ino
-#define D_MULTICAST_DISABLED "组播已禁用"
-#define D_MULTICAST_REJOINED "组播已(重新)加入"
-#define D_MULTICAST_JOIN_FAILED "组播加入失败"
-#define D_FAILED_TO_SEND_RESPONSE "请求发送失败"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo 基础事件"
-#define D_WEMO_EVENT_SERVICE "WeMo 事件服务"
-#define D_WEMO_META_SERVICE "WeMo meta 服务"
-#define D_WEMO_SETUP "WeMo 设置"
-#define D_RESPONSE_SENT "发送请求"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue 设置"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API 未实现"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST 参数"
-#define D_3_RESPONSE_PACKETS_SENT "3 请求包发送"
-
-// xdrv_05_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz 设置"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "开关 idx"
-#define D_DOMOTICZ_SENSOR_IDX "传感器 idx"
- #define D_DOMOTICZ_TEMP "温度"
- #define D_DOMOTICZ_TEMP_HUM "温度,湿度"
- #define D_DOMOTICZ_TEMP_HUM_BARO "温度,湿度,气压"
- #define D_DOMOTICZ_POWER_ENERGY "功率,电量"
- #define D_DOMOTICZ_ILLUMINANCE "照度"
- #define D_DOMOTICZ_COUNT "数值/PM1"
- #define D_DOMOTICZ_VOLTAGE "电压/PM2.5"
- #define D_DOMOTICZ_CURRENT "电流/PM10"
- #define D_DOMOTICZ_AIRQUALITY "空气质量"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "更新计时器"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "定时器设置"
-#define D_TIMER_PARAMETERS "定时器参数"
-#define D_TIMER_ENABLE "启用定时器"
-#define D_TIMER_ARM "启用"
-#define D_TIMER_TIME "时间"
-#define D_TIMER_DAYS "天"
-#define D_TIMER_REPEAT "重复"
-#define D_TIMER_OUTPUT "输出"
-#define D_TIMER_ACTION "动作"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "KNX 配置"
-#define D_KNX_PARAMETERS "KNX 参数"
-#define D_KNX_GENERAL_CONFIG "同用"
-#define D_KNX_PHYSICAL_ADDRESS "物理地址"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( 在 KNX 网络上必须是唯一的 )"
-#define D_KNX_ENABLE "启用 KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "要发送到组地址的数据"
-#define D_ADD "添加"
-#define D_DELETE "删除"
-#define D_REPLY "回复"
-#define D_KNX_GROUP_ADDRESS_TO_READ "用来接收数据的组地址"
-#define D_RECEIVED_FROM "接收自"
-#define D_KNX_COMMAND_WRITE "写"
-#define D_KNX_COMMAND_READ "读"
-#define D_KNX_COMMAND_OTHER "其他"
-#define D_SENT_TO "发送到"
-#define D_KNX_WARNING "组地址(0/0/0)被保留,不能使用。"
-#define D_KNX_ENHANCEMENT "通讯增强"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "今日用电量"
-#define D_ENERGY_YESTERDAY "昨日用电量"
-#define D_ENERGY_TOTAL "总用电量"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "传感器正忙"
-#define D_SENSOR_CRC_ERROR "传感器 CRC 校验错误"
-#define D_SENSORS_FOUND "发现传感器"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "等待超时"
-#define D_START_SIGNAL_LOW "开始低电平"
-#define D_START_SIGNAL_HIGH "开始高电平"
-#define D_PULSE "pulse"
-#define D_CHECKSUM_FAILURE "校验失败"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "传感器没有确认命令"
-#define D_SHT1X_FOUND "发现 SHT1X 传感器"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "颗粒物直径大于"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "加速度计X轴分量"
-#define D_AY_AXIS "加速度计Y轴分量"
-#define D_AZ_AXIS "加速度计Z轴分量"
-#define D_GX_AXIS "绕X轴旋转的角速度"
-#define D_GY_AXIS "绕Y轴旋转的角速度"
-#define D_GZ_AXIS "绕Z轴旋转的角速度"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "去除重量"
-#define D_HX_CAL_REFERENCE "加载参考重量"
-#define D_HX_CAL_DONE "已校准"
-#define D_HX_CAL_FAIL "校准失败"
-#define D_RESET_HX711 "秤重置"
-#define D_CONFIGURE_HX711 "秤配置"
-#define D_HX711_PARAMETERS "秤参数"
-#define D_ITEM_WEIGHT "物品中粮"
-#define D_REFERENCE_WEIGHT "参考重量"
-#define D_CALIBRATE "校准"
-#define D_CALIBRATION "校准"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "风向"
-#define D_TX20_WIND_SPEED "风速"
-#define D_TX20_WIND_SPEED_AVG "平均风速"
-#define D_TX20_WIND_SPEED_MAX "最高风速"
-#define D_TX20_NORTH "北"
-#define D_TX20_EAST "东"
-#define D_TX20_SOUTH "南"
-#define D_TX20_WEST "西"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "安"
-#define D_UNIT_CENTIMETER "厘米"
-#define D_UNIT_HERTZ "赫兹"
-#define D_UNIT_HOUR "时"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "千克"
-#define D_UNIT_KILOMETER_PER_HOUR "公里/时" // or "km/h"
-#define D_UNIT_KILOOHM "千欧"
-#define D_UNIT_KILOWATTHOUR "千瓦时"
-#define D_UNIT_LUX "勒克斯"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "微克/立方米"
-#define D_UNIT_MICROMETER "微米"
-#define D_UNIT_MICROSECOND "微秒"
-#define D_UNIT_MILLIAMPERE "毫安"
-#define D_UNIT_MILLIMETER "毫米"
-#define D_UNIT_MILLIMETER_MERCURY "毫米汞柱"
-#define D_UNIT_MILLISECOND "毫秒"
-#define D_UNIT_MINUTE "分"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "每分升"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "百帕"
-#define D_UNIT_SECOND "秒"
-#define D_UNIT_SECTORS "扇区"
-#define D_UNIT_VA "伏安"
-#define D_UNIT_VAR "无功伏安"
-#define D_UNIT_VOLT "伏"
-#define D_UNIT_WATT "瓦"
-#define D_UNIT_WATTHOUR "瓦时"
-#define D_UNIT_WATT_METER_QUADRAT "瓦/平米"
-
-//SDM220
-#define D_PHASE_ANGLE "相位角"
-#define D_IMPORT_ACTIVE "有功输入"
-#define D_EXPORT_ACTIVE "有功输出"
-#define D_IMPORT_REACTIVE "无功输入"
-#define D_EXPORT_REACTIVE "无功输出"
-#define D_TOTAL_REACTIVE "总无功功率"
-#define D_UNIT_KWARH "千乏时"
-#define D_UNIT_ANGLE "度"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_ZH_CN_H_
+/*
+ zh-CN.h - localization for Chinese (Simplified) - China for Tasmota
+
+ Copyright (C) 2019 Theo Arends (translated by killadm)
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_ZH_CN_H_
+#define _LANGUAGE_ZH_CN_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.14.0b
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 2052
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "zh"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "日 一 二 三 四 五 六 "
+#define D_MONTH3LIST "1月 2月 3月 4月 5月 6月 7月 8月 9月 10月11月12月"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "空气质量"
+#define D_AP "AP" // Access Point
+#define D_AS "名称:"
+#define D_AUTO "自动"
+#define D_BLINK "闪烁"
+#define D_BLINKOFF "闪烁关"
+#define D_BOOT_COUNT "启动次数"
+#define D_BRIGHTLIGHT "亮"
+#define D_BSSID "BSSId"
+#define D_BUTTON "按钮"
+#define D_BY "汉化: killadm 作者:" // Written by me
+#define D_BYTES "大小:"
+#define D_CELSIUS "摄氏"
+#define D_CHANNEL "频道"
+#define D_CO2 "二氧化碳"
+#define D_CODE "代码" // Button code
+#define D_COLDLIGHT "冷"
+#define D_COMMAND "命令:"
+#define D_CONNECTED "已连接"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "数量:"
+#define D_COUNTER "计数器"
+#define D_CURRENT "电流" // As in Voltage and Current
+#define D_DATA "数据:"
+#define D_DARKLIGHT "暗"
+#define D_DEBUG "调试"
+#define D_DISABLED "禁用"
+#define D_DISTANCE "距离"
+#define D_DNS_SERVER "DNS服务器"
+#define D_DONE "完成"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "设备模拟"
+#define D_ENABLED "启用"
+#define D_ERASE "擦除"
+#define D_ERROR "错误"
+#define D_FAHRENHEIT "华氏"
+#define D_FAILED "失败"
+#define D_FALLBACK "回退"
+#define D_FALLBACK_TOPIC "回退主题"
+#define D_FALSE "False"
+#define D_FILE "文件:"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "空闲内存"
+#define D_FREQUENCY "频率"
+#define D_GAS "气体"
+#define D_GATEWAY "网关"
+#define D_GROUP "组:"
+#define D_HOST "主机"
+#define D_HOSTNAME "主机名"
+#define D_HUMIDITY "湿度"
+#define D_ILLUMINANCE "照度"
+#define D_IMMEDIATE "单次按键" // Button immediate
+#define D_INDEX "索引:"
+#define D_INFO "信息"
+#define D_INFRARED "红外线"
+#define D_INITIALIZED "初始化完成"
+#define D_IP_ADDRESS "IP地址"
+#define D_LIGHT "灯"
+#define D_LWT "LWT"
+#define D_MODULE "模块"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "多次按键"
+#define D_NOISE "嘈杂"
+#define D_NONE "无"
+#define D_OFF "关"
+#define D_OFFLINE "离线"
+#define D_OK "好"
+#define D_ON "开"
+#define D_ONLINE "在线"
+#define D_PASSWORD "密码"
+#define D_PORT "端口"
+#define D_POWER_FACTOR "功率因数"
+#define D_POWERUSAGE "功率"
+#define D_POWERUSAGE_ACTIVE "有功功率"
+#define D_POWERUSAGE_APPARENT "视在功率"
+#define D_POWERUSAGE_REACTIVE "无功功率"
+#define D_PRESSURE "气压"
+#define D_PRESSUREATSEALEVEL "海平面气压"
+#define D_PROGRAM_FLASH_SIZE "固件 Flash 大小"
+#define D_PROGRAM_SIZE "固件大小"
+#define D_PROJECT "项目:"
+#define D_RAIN "降水量"
+#define D_RECEIVED "已接收"
+#define D_RESTART "重启"
+#define D_RESTARTING "正在重启"
+#define D_RESTART_REASON "重启原因"
+#define D_RESTORE "恢复"
+#define D_RETAINED "已保留"
+#define D_RULE "规则"
+#define D_SAVE "保存"
+#define D_SENSOR "传感器"
+#define D_SSID "名称"
+#define D_START "开始"
+#define D_STD_TIME "STD"
+#define D_STOP "停止"
+#define D_SUBNET_MASK "子网掩码"
+#define D_SUBSCRIBE_TO "订阅"
+#define D_UNSUBSCRIBE_FROM "退订"
+#define D_SUCCESSFUL "成功"
+#define D_SUNRISE "日出"
+#define D_SUNSET "日落"
+#define D_TEMPERATURE "温度"
+#define D_TO "to"
+#define D_TOGGLE "切换"
+#define D_TOPIC "主题"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "发送"
+#define D_TRUE "True"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "升级"
+#define D_UPLOAD "上传"
+#define D_UPTIME "运行时间"
+#define D_USER "用户名"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "紫外线指数"
+#define D_UV_INDEX_1 "低"
+#define D_UV_INDEX_2 "中"
+#define D_UV_INDEX_3 "高"
+#define D_UV_INDEX_4 "危险"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "紫外线水平"
+#define D_UV_POWER "紫外线功率 "
+#define D_VERSION "版本"
+#define D_VOLTAGE "电压"
+#define D_WEIGHT "重量"
+#define D_WARMLIGHT "暖"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "警告:精简固件不支持配置持久化保存"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "串口日志已禁用"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog 日志已开启"
+
+#define D_SET_BAUDRATE_TO "设置波特率为:"
+#define D_RECEIVED_TOPIC "接收到的主题:"
+#define D_DATA_SIZE "数据大小:"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "WPS 配置失败,状态:"
+#define D_ACTIVE_FOR_3_MINUTES "激活 3 分钟"
+#define D_FAILED_TO_START "未能启动"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "连接到 AP"
+#define D_IN_MODE "模式:"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "连接失败,因为没有获取到 IP 地址"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "连接失败,无法连接 AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "连接失败,AP 密码不正确"
+#define D_CONNECT_FAILED_AP_TIMEOUT "连接失败,AP 超时"
+#define D_ATTEMPTING_CONNECTION "尝试连接..."
+#define D_CHECKING_CONNECTION "检查连接..."
+#define D_QUERY_DONE "查询完成。 发现 MQTT 服务"
+#define D_MQTT_SERVICE_FOUND "发现 MQTT 服务:"
+#define D_FOUND_AT "发现:"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog 主机未找到"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "保存到 flash:"
+#define D_LOADED_FROM_FLASH_AT "从 flash 载入:"
+#define D_USE_DEFAULTS "使用默认设置"
+#define D_ERASED_SECTOR "擦除扇区"
+
+// webserver.ino
+#define D_NOSCRIPT "Tasmota要求浏览器支持 JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "当前是精简版固件
请升级"
+#define D_WEBSERVER_ACTIVE_ON "Web 服务器地址:"
+#define D_WITH_IP_ADDRESS "IP 地址:"
+#define D_WEBSERVER_STOPPED "Web 服务已停止"
+#define D_FILE_NOT_FOUND "文件未找到"
+#define D_REDIRECTED "重定向到认证页面"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager 设置无线操作模式"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager 设置接入点"
+#define D_TRYING_TO_CONNECT "尝试将设备连接到网络"
+
+#define D_RESTART_IN "重启需要"
+#define D_SECONDS "秒"
+#define D_DEVICE_WILL_RESTART "设备将在几秒钟内重启"
+#define D_BUTTON_TOGGLE "状态切换"
+#define D_CONFIGURATION "设置"
+#define D_INFORMATION "信息"
+#define D_FIRMWARE_UPGRADE "固件升级"
+#define D_CONSOLE "控制台"
+#define D_CONFIRM_RESTART "确认重启"
+
+#define D_CONFIGURE_MODULE "模块设置"
+#define D_CONFIGURE_WIFI "WiFi设置"
+#define D_CONFIGURE_MQTT "MQTT设置"
+#define D_CONFIGURE_DOMOTICZ "Domoticz设置"
+#define D_CONFIGURE_LOGGING "日志设置"
+#define D_CONFIGURE_OTHER "其他设置"
+#define D_CONFIRM_RESET_CONFIGURATION "确认重置配置"
+#define D_RESET_CONFIGURATION "重置配置"
+#define D_BACKUP_CONFIGURATION "备份配置"
+#define D_RESTORE_CONFIGURATION "还原配置"
+#define D_MAIN_MENU "主菜单"
+
+#define D_MODULE_PARAMETERS "模块设置"
+#define D_MODULE_TYPE "模块类型"
+#define D_PULLUP_ENABLE "没有按钮/开关上拉"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "串口输入(RX)"
+#define D_SERIAL_OUT "串口输出(TX)"
+
+#define D_WIFI_PARAMETERS "Wifi设置"
+#define D_SCAN_FOR_WIFI_NETWORKS "扫描无线网络"
+#define D_SCAN_DONE "扫描完毕"
+#define D_NO_NETWORKS_FOUND "未找到任何网络"
+#define D_REFRESH_TO_SCAN_AGAIN "刷新并重试"
+#define D_DUPLICATE_ACCESSPOINT "重复AP"
+#define D_SKIPPING_LOW_QUALITY "忽略弱信号网络"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 名称"
+#define D_AP1_PASSWORD "AP1 密码"
+#define D_AP2_SSID "AP2 名称"
+#define D_AP2_PASSWORD "AP2 密码"
+
+#define D_MQTT_PARAMETERS "MQTT 设置"
+#define D_CLIENT "客户端"
+#define D_FULL_TOPIC "完整主题"
+
+#define D_LOGGING_PARAMETERS "日志设置"
+#define D_SERIAL_LOG_LEVEL "串口日志级别"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web 日志级别"
+#define D_SYS_LOG_LEVEL "Syslog 日志级别"
+#define D_MORE_DEBUG "全部调试"
+#define D_SYSLOG_HOST "Syslog 主机地址"
+#define D_SYSLOG_PORT "Syslog 端口"
+#define D_TELEMETRY_PERIOD "上报周期"
+
+#define D_OTHER_PARAMETERS "其他设置"
+#define D_TEMPLATE "模板"
+#define D_ACTIVATE "启用"
+#define D_WEB_ADMIN_PASSWORD "WEB 管理密码"
+#define D_MQTT_ENABLE "启用MQTT"
+#define D_FRIENDLY_NAME "昵称"
+#define D_BELKIN_WEMO "贝尔金 WeMo"
+#define D_HUE_BRIDGE "飞利浦 Hue 网桥"
+#define D_SINGLE_DEVICE "单设备"
+#define D_MULTI_DEVICE "多设备"
+
+#define D_CONFIGURE_TEMPLATE "模板配置"
+#define D_TEMPLATE_PARAMETERS "模板参数"
+#define D_TEMPLATE_NAME "名称"
+#define D_BASE_TYPE "基于"
+#define D_TEMPLATE_FLAGS "选项"
+
+#define D_SAVE_CONFIGURATION "保存设置"
+#define D_CONFIGURATION_SAVED "设置已保存"
+#define D_CONFIGURATION_RESET "设置已重置"
+
+#define D_PROGRAM_VERSION "固件版本"
+#define D_BUILD_DATE_AND_TIME "编译时间"
+#define D_CORE_AND_SDK_VERSION "内核和 SDK 版本"
+#define D_FLASH_WRITE_COUNT "Flash 写入次数"
+#define D_MAC_ADDRESS "MAC 地址"
+#define D_MQTT_HOST "MQTT 主机"
+#define D_MQTT_PORT "MQTT 端口"
+#define D_MQTT_CLIENT "MQTT 客户端"
+#define D_MQTT_USER "MQTT 用户名"
+#define D_MQTT_TOPIC "MQTT 主题"
+#define D_MQTT_GROUP_TOPIC "MQTT 主题组"
+#define D_MQTT_FULL_TOPIC "MQTT 完整主题"
+#define D_MDNS_DISCOVERY "mDNS 发现"
+#define D_MDNS_ADVERTISE "mDNS 广播"
+#define D_ESP_CHIP_ID "ESP 芯片 ID"
+#define D_FLASH_CHIP_ID "Flash 芯片 ID"
+#define D_FLASH_CHIP_SIZE "Flash 大小"
+#define D_FREE_PROGRAM_SPACE "空闲程序空间"
+
+#define D_UPGRADE_BY_WEBSERVER "通过 Web 升级"
+#define D_OTA_URL "OTA 地址"
+#define D_START_UPGRADE "开始升级"
+#define D_UPGRADE_BY_FILE_UPLOAD "通过文件升级"
+#define D_UPLOAD_STARTED "开始上传"
+#define D_UPGRADE_STARTED "开始升级"
+#define D_UPLOAD_DONE "上传完成"
+#define D_UPLOAD_ERR_1 "没有选择任何文件"
+#define D_UPLOAD_ERR_2 "没有足够空间"
+#define D_UPLOAD_ERR_3 "固件头不是 0xE9"
+#define D_UPLOAD_ERR_4 "固件大小超过 flash 容量"
+#define D_UPLOAD_ERR_5 "上传缓冲区不足,请先刷入精简固件再升级"
+#define D_UPLOAD_ERR_6 "上传失败。 启用日志级别 3 调试"
+#define D_UPLOAD_ERR_7 "上传取消"
+#define D_UPLOAD_ERR_8 "错误的固件"
+#define D_UPLOAD_ERR_9 "固件太大"
+#define D_UPLOAD_ERR_10 "初始化 RF 芯片失败"
+#define D_UPLOAD_ERR_11 "擦除 RF 芯片失败"
+#define D_UPLOAD_ERR_12 "写入 RF 芯片失败"
+#define D_UPLOAD_ERR_13 "解码 RF 固件失败"
+#define D_UPLOAD_ERROR_CODE "上传错误代码"
+
+#define D_ENTER_COMMAND "输入命令"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "如果想得到预期响应,请调整日志级别至: 2 信息"
+#define D_NEED_USER_AND_PASSWORD "需要 user=<用户名>&password=<密码>"
+
+// xdrv_00_mqtt.ino
+#define D_FINGERPRINT "验证 TLS 指纹..."
+#define D_TLS_CONNECT_FAILED_TO "TLS 连接失败"
+#define D_RETRY_IN "重试倒计时:"
+#define D_VERIFIED "验证成功"
+#define D_INSECURE "指纹无效导致连接不安全"
+#define D_CONNECT_FAILED_TO "连接失败:"
+
+// xdrv_wemohue.ino
+#define D_MULTICAST_DISABLED "组播已禁用"
+#define D_MULTICAST_REJOINED "组播已(重新)加入"
+#define D_MULTICAST_JOIN_FAILED "组播加入失败"
+#define D_FAILED_TO_SEND_RESPONSE "请求发送失败"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo 基础事件"
+#define D_WEMO_EVENT_SERVICE "WeMo 事件服务"
+#define D_WEMO_META_SERVICE "WeMo meta 服务"
+#define D_WEMO_SETUP "WeMo 设置"
+#define D_RESPONSE_SENT "发送请求"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue 设置"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API 未实现"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST 参数"
+#define D_3_RESPONSE_PACKETS_SENT "3 请求包发送"
+
+// xdrv_05_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz 设置"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "开关 idx"
+#define D_DOMOTICZ_SENSOR_IDX "传感器 idx"
+ #define D_DOMOTICZ_TEMP "温度"
+ #define D_DOMOTICZ_TEMP_HUM "温度,湿度"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "温度,湿度,气压"
+ #define D_DOMOTICZ_POWER_ENERGY "功率,电量"
+ #define D_DOMOTICZ_ILLUMINANCE "照度"
+ #define D_DOMOTICZ_COUNT "数值/PM1"
+ #define D_DOMOTICZ_VOLTAGE "电压/PM2.5"
+ #define D_DOMOTICZ_CURRENT "电流/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "空气质量"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "更新计时器"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "定时器设置"
+#define D_TIMER_PARAMETERS "定时器参数"
+#define D_TIMER_ENABLE "启用定时器"
+#define D_TIMER_ARM "启用"
+#define D_TIMER_TIME "时间"
+#define D_TIMER_DAYS "天"
+#define D_TIMER_REPEAT "重复"
+#define D_TIMER_OUTPUT "输出"
+#define D_TIMER_ACTION "动作"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "KNX 配置"
+#define D_KNX_PARAMETERS "KNX 参数"
+#define D_KNX_GENERAL_CONFIG "同用"
+#define D_KNX_PHYSICAL_ADDRESS "物理地址"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( 在 KNX 网络上必须是唯一的 )"
+#define D_KNX_ENABLE "启用 KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "要发送到组地址的数据"
+#define D_ADD "添加"
+#define D_DELETE "删除"
+#define D_REPLY "回复"
+#define D_KNX_GROUP_ADDRESS_TO_READ "用来接收数据的组地址"
+#define D_RECEIVED_FROM "接收自"
+#define D_KNX_COMMAND_WRITE "写"
+#define D_KNX_COMMAND_READ "读"
+#define D_KNX_COMMAND_OTHER "其他"
+#define D_SENT_TO "发送到"
+#define D_KNX_WARNING "组地址(0/0/0)被保留,不能使用。"
+#define D_KNX_ENHANCEMENT "通讯增强"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "今日用电量"
+#define D_ENERGY_YESTERDAY "昨日用电量"
+#define D_ENERGY_TOTAL "总用电量"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "传感器正忙"
+#define D_SENSOR_CRC_ERROR "传感器 CRC 校验错误"
+#define D_SENSORS_FOUND "发现传感器"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "等待超时"
+#define D_START_SIGNAL_LOW "开始低电平"
+#define D_START_SIGNAL_HIGH "开始高电平"
+#define D_PULSE "pulse"
+#define D_CHECKSUM_FAILURE "校验失败"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "传感器没有确认命令"
+#define D_SHT1X_FOUND "发现 SHT1X 传感器"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "颗粒物直径大于"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "加速度计X轴分量"
+#define D_AY_AXIS "加速度计Y轴分量"
+#define D_AZ_AXIS "加速度计Z轴分量"
+#define D_GX_AXIS "绕X轴旋转的角速度"
+#define D_GY_AXIS "绕Y轴旋转的角速度"
+#define D_GZ_AXIS "绕Z轴旋转的角速度"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "去除重量"
+#define D_HX_CAL_REFERENCE "加载参考重量"
+#define D_HX_CAL_DONE "已校准"
+#define D_HX_CAL_FAIL "校准失败"
+#define D_RESET_HX711 "秤重置"
+#define D_CONFIGURE_HX711 "秤配置"
+#define D_HX711_PARAMETERS "秤参数"
+#define D_ITEM_WEIGHT "物品中粮"
+#define D_REFERENCE_WEIGHT "参考重量"
+#define D_CALIBRATE "校准"
+#define D_CALIBRATION "校准"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "风向"
+#define D_TX20_WIND_SPEED "风速"
+#define D_TX20_WIND_SPEED_AVG "平均风速"
+#define D_TX20_WIND_SPEED_MAX "最高风速"
+#define D_TX20_NORTH "北"
+#define D_TX20_EAST "东"
+#define D_TX20_SOUTH "南"
+#define D_TX20_WEST "西"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "安"
+#define D_UNIT_CENTIMETER "厘米"
+#define D_UNIT_HERTZ "赫兹"
+#define D_UNIT_HOUR "时"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "千克"
+#define D_UNIT_KILOMETER_PER_HOUR "公里/时" // or "km/h"
+#define D_UNIT_KILOOHM "千欧"
+#define D_UNIT_KILOWATTHOUR "千瓦时"
+#define D_UNIT_LUX "勒克斯"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "微克/立方米"
+#define D_UNIT_MICROMETER "微米"
+#define D_UNIT_MICROSECOND "微秒"
+#define D_UNIT_MILLIAMPERE "毫安"
+#define D_UNIT_MILLIMETER "毫米"
+#define D_UNIT_MILLIMETER_MERCURY "毫米汞柱"
+#define D_UNIT_MILLISECOND "毫秒"
+#define D_UNIT_MINUTE "分"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "每分升"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "百帕"
+#define D_UNIT_SECOND "秒"
+#define D_UNIT_SECTORS "扇区"
+#define D_UNIT_VA "伏安"
+#define D_UNIT_VAR "无功伏安"
+#define D_UNIT_VOLT "伏"
+#define D_UNIT_WATT "瓦"
+#define D_UNIT_WATTHOUR "瓦时"
+#define D_UNIT_WATT_METER_QUADRAT "瓦/平米"
+
+//SDM220
+#define D_PHASE_ANGLE "相位角"
+#define D_IMPORT_ACTIVE "有功输入"
+#define D_EXPORT_ACTIVE "有功输出"
+#define D_IMPORT_REACTIVE "无功输入"
+#define D_EXPORT_REACTIVE "无功输出"
+#define D_TOTAL_REACTIVE "总无功功率"
+#define D_UNIT_KWARH "千乏时"
+#define D_UNIT_ANGLE "度"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_ZH_CN_H_
diff --git a/tasmota/language/zh-TW.h b/tasmota/language/zh-TW.h
index ed67b2931..1d78f181e 100644
--- a/tasmota/language/zh-TW.h
+++ b/tasmota/language/zh-TW.h
@@ -1,703 +1,701 @@
-/*
- zh-TW.h - localization for Chinese (Traditional) - Taiwan for Tasmota
-
- Copyright (C) 2019 Theo Arends (translated by dannydu)
-
- 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 .
-*/
-
-#ifndef _LANGUAGE_ZH_TW_H_
-#define _LANGUAGE_ZH_TW_H_
-
-/*************************** ATTENTION *******************************\
- *
- * Due to memory constraints only UTF-8 is supported.
- * To save code space keep text as short as possible.
- * Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
- * Use online command Prefix to translate cmnd, stat and tele.
- *
- * Updated until v5.12.0d
-\*********************************************************************/
-
-//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
-
-#define LANGUAGE_LCID 1028
-// HTML (ISO 639-1) Language Code
-#define D_HTML_LANGUAGE "zh"
-
-// "2017-03-07T11:08:02" - ISO8601:2004
-#define D_YEAR_MONTH_SEPARATOR "-"
-#define D_MONTH_DAY_SEPARATOR "-"
-#define D_DATE_TIME_SEPARATOR "T"
-#define D_HOUR_MINUTE_SEPARATOR ":"
-#define D_MINUTE_SECOND_SEPARATOR ":"
-
-#define D_DAY3LIST "SunMonTueWedThuFriSat"
-#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
-
-// Non JSON decimal separator
-#define D_DECIMAL_SEPARATOR "."
-
-// Common
-#define D_ADMIN "Admin"
-#define D_AIR_QUALITY "空氣品質"
-#define D_AP "AP" // Access Point
-#define D_AS "名稱:"
-#define D_AUTO "自動"
-#define D_BLINK "閃爍"
-#define D_BLINKOFF "閃爍關"
-#define D_BOOT_COUNT "啟動次數"
-#define D_BRIGHTLIGHT "亮度"
-#define D_BSSID "BSSId"
-#define D_BUTTON "按鈕"
-#define D_BY "by" // Written by me
-#define D_BYTES "大小:"
-#define D_CELSIUS "攝氏"
-#define D_CHANNEL "Channel"
-#define D_CO2 "二氧化碳"
-#define D_CODE "代碼" // Button code
-#define D_COLDLIGHT "冷"
-#define D_COMMAND "命令:"
-#define D_CONNECTED "已連接"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "數量:"
-#define D_COUNTER "Counter"
-#define D_CURRENT "電流" // As in Voltage and Current
-#define D_DATA "數據:"
-#define D_DARKLIGHT "Dark"
-#define D_DEBUG "除錯"
-#define D_DISABLED "停用"
-#define D_DISTANCE "Distance"
-#define D_DNS_SERVER "DNS伺服器"
-#define D_DONE "完成"
-#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
-#define D_EMULATION "設備模擬"
-#define D_ENABLED "啟用"
-#define D_ERASE "刪除"
-#define D_ERROR "錯誤"
-#define D_FAHRENHEIT "華氏"
-#define D_FAILED "失敗"
-#define D_FALLBACK "Fallback"
-#define D_FALLBACK_TOPIC "Fallback Topic"
-#define D_FALSE "False"
-#define D_FILE "文件:"
-#define D_FLOW_RATE "Flow rate"
-#define D_FREE_MEMORY "可用記憶體"
-#define D_FREQUENCY "Frequency"
-#define D_GAS "氣體"
-#define D_GATEWAY "網關"
-#define D_GROUP "組:"
-#define D_HOST "主機"
-#define D_HOSTNAME "主機名"
-#define D_HUMIDITY "濕度"
-#define D_ILLUMINANCE "照度"
-#define D_IMMEDIATE "immediate" // Button immediate
-#define D_INDEX "索引:"
-#define D_INFO "信息"
-#define D_INFRARED "Infrared"
-#define D_INITIALIZED "初始化完成"
-#define D_IP_ADDRESS "IP地址"
-#define D_LIGHT "燈"
-#define D_LWT "LWT"
-#define D_MODULE "模組"
-#define D_MQTT "MQTT"
-#define D_MULTI_PRESS "多次按鍵"
-#define D_NOISE "雜訊"
-#define D_NONE "無"
-#define D_OFF "關"
-#define D_OFFLINE "離線"
-#define D_OK "好"
-#define D_ON "開"
-#define D_ONLINE "在線"
-#define D_PASSWORD "密碼"
-#define D_PORT "端口"
-#define D_POWER_FACTOR "功率因數"
-#define D_POWERUSAGE "功率"
-#define D_POWERUSAGE_ACTIVE "Active Power"
-#define D_POWERUSAGE_APPARENT "Apparent Power"
-#define D_POWERUSAGE_REACTIVE "Reactive Power"
-#define D_PRESSURE "氣壓"
-#define D_PRESSUREATSEALEVEL "海平面氣壓"
-#define D_PROGRAM_FLASH_SIZE "韌體 Flash 大小"
-#define D_PROGRAM_SIZE "韌體大小"
-#define D_PROJECT "項目:"
-#define D_RAIN "Rain"
-#define D_RECEIVED "已接收"
-#define D_RESTART "重啟"
-#define D_RESTARTING "正在重啟"
-#define D_RESTART_REASON "重啟原因"
-#define D_RESTORE "恢覆"
-#define D_RETAINED "已保留"
-#define D_RULE "Rule"
-#define D_SAVE "存檔"
-#define D_SENSOR "感測器"
-#define D_SSID "名稱"
-#define D_START "開始"
-#define D_STD_TIME "STD"
-#define D_STOP "停止"
-#define D_SUBNET_MASK "子網遮罩"
-#define D_SUBSCRIBE_TO "訂閱"
-#define D_UNSUBSCRIBE_FROM "退訂"
-#define D_SUCCESSFUL "成功"
-#define D_SUNRISE "Sunrise"
-#define D_SUNSET "Sunset"
-#define D_TEMPERATURE "溫度"
-#define D_TO "to"
-#define D_TOGGLE "切換"
-#define D_TOPIC "主題"
-#define D_TOTAL_USAGE "Total Usage"
-#define D_TRANSMIT "發送"
-#define D_TRUE "True"
-#define D_TVOC "TVOC"
-#define D_UPGRADE "升級"
-#define D_UPLOAD "上傳"
-#define D_UPTIME "運行時間"
-#define D_USER "用戶名"
-#define D_UTC_TIME "UTC"
-#define D_UV_INDEX "UV Index"
-#define D_UV_INDEX_1 "Low"
-#define D_UV_INDEX_2 "Mid"
-#define D_UV_INDEX_3 "High"
-#define D_UV_INDEX_4 "Danger"
-#define D_UV_INDEX_5 "BurnL1/2"
-#define D_UV_INDEX_6 "BurnL3"
-#define D_UV_INDEX_7 "OoR"
-#define D_UV_LEVEL "紫外線等級"
-#define D_UV_POWER "UV Power"
-#define D_VERSION "版本"
-#define D_VOLTAGE "電壓"
-#define D_WEIGHT "Weight"
-#define D_WARMLIGHT "暖"
-#define D_WEB_SERVER "Web Server"
-
-// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "警告:精簡產品不支持配置寫入保存"
-#define D_LEVEL_10 "level 1-0"
-#define D_LEVEL_01 "level 0-1"
-#define D_SERIAL_LOGGING_DISABLED "串口日誌已禁用"
-#define D_SYSLOG_LOGGING_REENABLED "Syslog 日誌已開啟"
-
-#define D_SET_BAUDRATE_TO "設置波特率為:"
-#define D_RECEIVED_TOPIC "接收到的主題:"
-#define D_DATA_SIZE "數據大小:"
-#define D_ANALOG_INPUT "Analog"
-
-// support.ino
-#define D_OSWATCH "osWatch"
-#define D_BLOCKED_LOOP "Blocked Loop"
-#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
-#define D_ACTIVE_FOR_3_MINUTES "active for 3 minutes"
-#define D_FAILED_TO_START "未能啟動"
-#define D_PATCH_ISSUE_2186 "Patch issue 2186"
-#define D_CONNECTING_TO_AP "連接到 AP"
-#define D_IN_MODE "模式:"
-#define D_CONNECT_FAILED_NO_IP_ADDRESS "連接失敗,因為沒有獲取到IP地址"
-#define D_CONNECT_FAILED_AP_NOT_REACHED "連接失敗,無法連接AP"
-#define D_CONNECT_FAILED_WRONG_PASSWORD "連接失敗,AP密碼不正確"
-#define D_CONNECT_FAILED_AP_TIMEOUT "連接失敗,AP超時"
-#define D_ATTEMPTING_CONNECTION "嘗試連接..."
-#define D_CHECKING_CONNECTION "檢查連接..."
-#define D_QUERY_DONE "查詢完成。 發現MQTT服務"
-#define D_MQTT_SERVICE_FOUND "發現MQTT服務:"
-#define D_FOUND_AT "found at"
-#define D_SYSLOG_HOST_NOT_FOUND "Syslog主機未找到"
-
-// settings.ino
-#define D_SAVED_TO_FLASH_AT "保存到 flash:"
-#define D_LOADED_FROM_FLASH_AT "從 flash 載入"
-#define D_USE_DEFAULTS "使用默認設置"
-#define D_ERASED_SECTOR "擦除刪除"
-
-// xdrv_02_webserver.ino
-#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
-#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "固件版本過低
請升級"
-#define D_WEBSERVER_ACTIVE_ON "Web服務器:"
-#define D_WITH_IP_ADDRESS "IP地址:"
-#define D_WEBSERVER_STOPPED "Web 服務器已停止"
-#define D_FILE_NOT_FOUND "文件未找到"
-#define D_REDIRECTED "重定向到認證頁面"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
-#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager 設置接入點"
-#define D_TRYING_TO_CONNECT "嘗試將設備連接到網絡"
-
-#define D_RESTART_IN "重啟需要"
-#define D_SECONDS "秒"
-#define D_DEVICE_WILL_RESTART "設備將在幾分鐘內重啟"
-#define D_BUTTON_TOGGLE "狀態切換"
-#define D_CONFIGURATION "設置"
-#define D_INFORMATION "信息"
-#define D_FIRMWARE_UPGRADE "固件升級"
-#define D_CONSOLE "控制台"
-#define D_CONFIRM_RESTART "確認重啟"
-
-#define D_CONFIGURE_MODULE "模塊設置"
-#define D_CONFIGURE_WIFI "WiFi設置"
-#define D_CONFIGURE_MQTT "MQTT設置"
-#define D_CONFIGURE_DOMOTICZ "Domoticz設置"
-#define D_CONFIGURE_LOGGING "日志設置"
-#define D_CONFIGURE_OTHER "其他設置"
-#define D_CONFIRM_RESET_CONFIGURATION "確認重置配置"
-#define D_RESET_CONFIGURATION "重置配置"
-#define D_BACKUP_CONFIGURATION "備份配置"
-#define D_RESTORE_CONFIGURATION "還原配置"
-#define D_MAIN_MENU "主菜單"
-
-#define D_MODULE_PARAMETERS "模塊設置"
-#define D_MODULE_TYPE "模塊類型"
-#define D_PULLUP_ENABLE "No Button/Switch pull-up"
-#define D_ADC "ADC"
-#define D_GPIO "GPIO"
-#define D_SERIAL_IN "串口輸入(RX)"
-#define D_SERIAL_OUT "串口輸出(TX)"
-
-#define D_WIFI_PARAMETERS "Wifi設置"
-#define D_SCAN_FOR_WIFI_NETWORKS "掃描無線網絡"
-#define D_SCAN_DONE "掃描完畢"
-#define D_NO_NETWORKS_FOUND "未找到任何網絡"
-#define D_REFRESH_TO_SCAN_AGAIN "刷新並重試"
-#define D_DUPLICATE_ACCESSPOINT "重覆AP"
-#define D_SKIPPING_LOW_QUALITY "忽略弱信號網絡"
-#define D_RSSI "RSSI"
-#define D_WEP "WEP"
-#define D_WPA_PSK "WPA PSK"
-#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "AP1 名稱"
-#define D_AP1_PASSWORD "AP1 密碼"
-#define D_AP2_SSID "AP2 名稱"
-#define D_AP2_PASSWORD "AP2 密碼"
-
-#define D_MQTT_PARAMETERS "MQTT設置"
-#define D_CLIENT "客戶端"
-#define D_FULL_TOPIC "完整主題"
-
-#define D_LOGGING_PARAMETERS "日志設置"
-#define D_SERIAL_LOG_LEVEL "串口日志級別"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
-#define D_WEB_LOG_LEVEL "Web 日志級別"
-#define D_SYS_LOG_LEVEL "Syslog 日志級別"
-#define D_MORE_DEBUG "全部調試"
-#define D_SYSLOG_HOST "Syslog 主機地址"
-#define D_SYSLOG_PORT "Syslog 端口"
-#define D_TELEMETRY_PERIOD "上報周期"
-
-#define D_OTHER_PARAMETERS "其他設置"
-#define D_TEMPLATE "Template"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "WEB管理密碼"
-#define D_MQTT_ENABLE "啟用MQTT"
-#define D_FRIENDLY_NAME "昵稱"
-#define D_BELKIN_WEMO "貝爾金 WeMo"
-#define D_HUE_BRIDGE "飛利浦 Hue 網橋"
-#define D_SINGLE_DEVICE "單設備"
-#define D_MULTI_DEVICE "多設備"
-
-#define D_CONFIGURE_TEMPLATE "Configure Template"
-#define D_TEMPLATE_PARAMETERS "Template parameters"
-#define D_TEMPLATE_NAME "Name"
-#define D_BASE_TYPE "Based on"
-#define D_TEMPLATE_FLAGS "Options"
-
-#define D_SAVE_CONFIGURATION "保存設置"
-#define D_CONFIGURATION_SAVED "設置已保存"
-#define D_CONFIGURATION_RESET "設置已重置"
-
-#define D_PROGRAM_VERSION "固件版本"
-#define D_BUILD_DATE_AND_TIME "編譯時間"
-#define D_CORE_AND_SDK_VERSION "內核版本"
-#define D_FLASH_WRITE_COUNT "刷機次數"
-#define D_MAC_ADDRESS "MAC地址"
-#define D_MQTT_HOST "MQTT主機"
-#define D_MQTT_PORT "MQTT端口"
-#define D_MQTT_CLIENT "MQTT客戶端"
-#define D_MQTT_USER "MQTT用戶名"
-#define D_MQTT_TOPIC "MQTT 主題(Topic)"
-#define D_MQTT_GROUP_TOPIC "MQTT 主題組(Group Topic)"
-#define D_MQTT_FULL_TOPIC "MQTT 完整主題(Full Topic)"
-#define D_MDNS_DISCOVERY "mDNS 發現"
-#define D_MDNS_ADVERTISE "mDNS 廣播"
-#define D_ESP_CHIP_ID "ESP芯片ID"
-#define D_FLASH_CHIP_ID "Flash芯片ID"
-#define D_FLASH_CHIP_SIZE "Flash大小"
-#define D_FREE_PROGRAM_SPACE "空閑程序空間"
-
-#define D_UPGRADE_BY_WEBSERVER "通過Web升級"
-#define D_OTA_URL "OTA地址"
-#define D_START_UPGRADE "開始升級"
-#define D_UPGRADE_BY_FILE_UPLOAD "通過文件升級"
-#define D_UPLOAD_STARTED "開始上傳"
-#define D_UPGRADE_STARTED "開始升級"
-#define D_UPLOAD_DONE "上傳完成"
-#define D_UPLOAD_ERR_1 "沒有選擇文件"
-#define D_UPLOAD_ERR_2 "沒有足夠空間"
-#define D_UPLOAD_ERR_3 "固件頭不是 0xE9"
-#define D_UPLOAD_ERR_4 "固件太大"
-#define D_UPLOAD_ERR_5 "上傳緩沖區不匹配"
-#define D_UPLOAD_ERR_6 "上傳失敗。 啟用日志記錄 3"
-#define D_UPLOAD_ERR_7 "上傳取消"
-#define D_UPLOAD_ERR_8 "錯誤的固件"
-#define D_UPLOAD_ERR_9 "固件太大"
-#define D_UPLOAD_ERR_10 "Failed to init RF chip"
-#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
-#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
-#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
-#define D_UPLOAD_ERROR_CODE "上傳錯誤代碼"
-
-#define D_ENTER_COMMAND "輸入命令"
-#define D_ENABLE_WEBLOG_FOR_RESPONSE "如果預期響應,則啟用Weblog 2"
-#define D_NEED_USER_AND_PASSWORD "需要 user=<用戶名>&password=<密碼>"
-
-// xdrv_01_mqtt.ino
-#define D_FINGERPRINT "驗證 TLS 指紋..."
-#define D_TLS_CONNECT_FAILED_TO "TLS 連接失敗"
-#define D_RETRY_IN "重試倒計時:"
-#define D_VERIFIED "驗證成功"
-#define D_INSECURE "指紋無效導致連接不安全"
-#define D_CONNECT_FAILED_TO "連接失敗:"
-
-// xplg_wemohue.ino
-#define D_MULTICAST_DISABLED "組播已禁用"
-#define D_MULTICAST_REJOINED "組播已(重新)加入"
-#define D_MULTICAST_JOIN_FAILED "組播加入失敗"
-#define D_FAILED_TO_SEND_RESPONSE "請求發送失敗"
-
-#define D_WEMO "WeMo"
-#define D_WEMO_BASIC_EVENT "WeMo 基礎事件"
-#define D_WEMO_EVENT_SERVICE "WeMo 事件服務"
-#define D_WEMO_META_SERVICE "WeMo meta 服務"
-#define D_WEMO_SETUP "WeMo 設置"
-#define D_RESPONSE_SENT "發送請求"
-
-#define D_HUE "Hue"
-#define D_HUE_BRIDGE_SETUP "Hue 設置"
-#define D_HUE_API_NOT_IMPLEMENTED "Hue API 未實現"
-#define D_HUE_API "Hue API"
-#define D_HUE_POST_ARGS "Hue POST 參數"
-#define D_3_RESPONSE_PACKETS_SENT "3 請求包發送"
-
-// xdrv_07_domoticz.ino
-#define D_DOMOTICZ_PARAMETERS "Domoticz 設置"
-#define D_DOMOTICZ_IDX "Idx"
-#define D_DOMOTICZ_KEY_IDX "Key idx"
-#define D_DOMOTICZ_SWITCH_IDX "開關 idx"
-#define D_DOMOTICZ_SENSOR_IDX "傳感器 idx"
- #define D_DOMOTICZ_TEMP "溫度"
- #define D_DOMOTICZ_TEMP_HUM "溫度,濕度"
- #define D_DOMOTICZ_TEMP_HUM_BARO "溫度,濕度,氣壓"
- #define D_DOMOTICZ_POWER_ENERGY "功率,電量"
- #define D_DOMOTICZ_ILLUMINANCE "照度"
- #define D_DOMOTICZ_COUNT "數值/PM1"
- #define D_DOMOTICZ_VOLTAGE "電壓/PM2.5"
- #define D_DOMOTICZ_CURRENT "電流/PM10"
- #define D_DOMOTICZ_AIRQUALITY "空氣品質"
- #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
-#define D_DOMOTICZ_UPDATE_TIMER "更新計時器"
-
-// xdrv_09_timers.ino
-#define D_CONFIGURE_TIMER "Configure Timer"
-#define D_TIMER_PARAMETERS "Timer parameters"
-#define D_TIMER_ENABLE "Enable Timers"
-#define D_TIMER_ARM "Arm"
-#define D_TIMER_TIME "Time"
-#define D_TIMER_DAYS "Days"
-#define D_TIMER_REPEAT "Repeat"
-#define D_TIMER_OUTPUT "Output"
-#define D_TIMER_ACTION "Action"
-
-// xdrv_10_knx.ino
-#define D_CONFIGURE_KNX "Configure KNX"
-#define D_KNX_PARAMETERS "KNX Parameters"
-#define D_KNX_GENERAL_CONFIG "General"
-#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
-#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
-#define D_KNX_ENABLE "Enable KNX"
-#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
-#define D_ADD "Add"
-#define D_DELETE "Delete"
-#define D_REPLY "Reply"
-#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
-#define D_RECEIVED_FROM "Received from"
-#define D_KNX_COMMAND_WRITE "Write"
-#define D_KNX_COMMAND_READ "Read"
-#define D_KNX_COMMAND_OTHER "Other"
-#define D_SENT_TO "sent to"
-#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
-#define D_KNX_ENHANCEMENT "Communication Enhancement"
-#define D_KNX_TX_SLOT "KNX TX"
-#define D_KNX_RX_SLOT "KNX RX"
-
-// xdrv_03_energy.ino
-#define D_ENERGY_TODAY "今日用電量"
-#define D_ENERGY_YESTERDAY "昨日用電量"
-#define D_ENERGY_TOTAL "總用電量"
-
-// xdrv_27_shutter.ino
-#define D_OPEN "Open"
-#define D_CLOSE "Close"
-#define D_DOMOTICZ_SHUTTER "Shutter"
-
-// xdrv_28_pcf8574.ino
-#define D_CONFIGURE_PCF8574 "Configure PCF8574"
-#define D_PCF8574_PARAMETERS "PCF8574 parameters"
-#define D_INVERT_PORTS "Invert Ports"
-#define D_DEVICE "Device"
-#define D_DEVICE_INPUT "Input"
-#define D_DEVICE_OUTPUT "Output"
-
-// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "傳感器正忙"
-#define D_SENSOR_CRC_ERROR "傳感器 CRC 校驗錯誤"
-#define D_SENSORS_FOUND "發現傳感器"
-
-// xsns_06_dht.ino
-#define D_TIMEOUT_WAITING_FOR "等待超時"
-#define D_START_SIGNAL_LOW "開始低電平"
-#define D_START_SIGNAL_HIGH "開始高電平"
-#define D_PULSE "pulse"
-#define D_CHECKSUM_FAILURE "校驗失敗"
-
-// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "傳感器沒有確認命令"
-#define D_SHT1X_FOUND "發現 SHT1X 傳感器"
-
-// xsns_18_pms5003.ino
-#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
-#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
-#define D_PARTICALS_BEYOND "顆粒物直徑大於"
-
-// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
-
-// xsns_34_hx711.ino
-#define D_HX_CAL_REMOVE "Remove weigth"
-#define D_HX_CAL_REFERENCE "Load reference weigth"
-#define D_HX_CAL_DONE "Calibrated"
-#define D_HX_CAL_FAIL "Calibration failed"
-#define D_RESET_HX711 "Reset Scale"
-#define D_CONFIGURE_HX711 "Configure Scale"
-#define D_HX711_PARAMETERS "Scale parameters"
-#define D_ITEM_WEIGHT "Item weight"
-#define D_REFERENCE_WEIGHT "Reference weigth"
-#define D_CALIBRATE "Calibrate"
-#define D_CALIBRATION "Calibration"
-
-//xsns_35_tx20.ino
-#define D_TX20_WIND_DIRECTION "Wind Direction"
-#define D_TX20_WIND_SPEED "Wind Speed"
-#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
-#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
-#define D_TX20_NORTH "N"
-#define D_TX20_EAST "E"
-#define D_TX20_SOUTH "S"
-#define D_TX20_WEST "W"
-
-// 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"
-#define D_SENSOR_DHT11 "DHT11"
-#define D_SENSOR_AM2301 "AM2301"
-#define D_SENSOR_SI7021 "SI7021"
-#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_WS2812 "WS2812"
-#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "IRsend"
-#define D_SENSOR_SWITCH "Switch" // Suffix "1"
-#define D_SENSOR_BUTTON "Button" // Suffix "1"
-#define D_SENSOR_RELAY "Relay" // Suffix "1i"
-#define D_SENSOR_LED "Led" // Suffix "1i"
-#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
-#define D_SENSOR_PWM "PWM" // Suffix "1"
-#define D_SENSOR_COUNTER "Counter" // Suffix "1"
-#define D_SENSOR_IRRECV "IRrecv"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
-#define D_SENSOR_SPI_CS "SPI CS"
-#define D_SENSOR_SPI_DC "SPI DC"
-#define D_SENSOR_SPI_MISO "SPI MISO"
-#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
-#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
-#define D_SENSOR_TM1638_CLK "TM16 CLK"
-#define D_SENSOR_TM1638_DIO "TM16 DIO"
-#define D_SENSOR_TM1638_STB "TM16 STB"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
-#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
-#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
-#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
-#define D_SENSOR_SSPI_MISO "SSPI MISO"
-#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
-#define D_SENSOR_SSPI_CS "SSPI CS"
-#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
-#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
-#define D_SENSOR_MAX31855_DO "MX31855 DO"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
-#define D_SENSOR_NRG_CF1 "HLWBL CF1"
-#define D_SENSOR_HLW_CF "HLW8012 CF"
-#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
-#define D_SENSOR_ARIRFRCV "ALux IrRcv"
-#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
-#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE Clock"
-#define D_SENSOR_HRE_DATA "HRE Data"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_BUZZER "Buzzer"
-#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
-#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
-#define D_SENSOR_A4988_MS1 "A4988 MS1"
-#define D_SENSOR_A4988_MS2 "A4988 MS2"
-#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
-#define D_SENSOR_SM2135_CLK "SM2135 Clk"
-#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
-#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-
-// Units
-#define D_UNIT_AMPERE "安"
-#define D_UNIT_CENTIMETER "cm"
-#define D_UNIT_HERTZ "Hz"
-#define D_UNIT_HOUR "時"
-#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
-#define D_UNIT_INCREMENTS "inc"
-#define D_UNIT_KILOGRAM "kg"
-#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
-#define D_UNIT_KILOOHM "千歐"
-#define D_UNIT_KILOWATTHOUR "千瓦時"
-#define D_UNIT_LUX "勒克斯"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "微克/立方米"
-#define D_UNIT_MICROMETER "微米"
-#define D_UNIT_MICROSECOND "微秒"
-#define D_UNIT_MILLIAMPERE "毫安"
-#define D_UNIT_MILLIMETER "mm"
-#define D_UNIT_MILLIMETER_MERCURY "mmHg"
-#define D_UNIT_MILLISECOND "毫秒"
-#define D_UNIT_MINUTE "分"
-#define D_UNIT_PARTS_PER_BILLION "ppb"
-#define D_UNIT_PARTS_PER_DECILITER "每分升"
-#define D_UNIT_PARTS_PER_MILLION "ppm"
-#define D_UNIT_PRESSURE "百帕"
-#define D_UNIT_SECOND "秒"
-#define D_UNIT_SECTORS "扇區"
-#define D_UNIT_VA "VA"
-#define D_UNIT_VAR "VAr"
-#define D_UNIT_VOLT "伏"
-#define D_UNIT_WATT "瓦"
-#define D_UNIT_WATTHOUR "瓦時"
-#define D_UNIT_WATT_METER_QUADRAT "W/m²"
-
-//SDM220
-#define D_PHASE_ANGLE "Phase Angle"
-#define D_IMPORT_ACTIVE "Import Active"
-#define D_EXPORT_ACTIVE "Export Active"
-#define D_IMPORT_REACTIVE "Import Reactive"
-#define D_EXPORT_REACTIVE "Export Reactive"
-#define D_TOTAL_REACTIVE "Total Reactive"
-#define D_UNIT_KWARH "kVArh"
-#define D_UNIT_ANGLE "Deg"
-
-//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
-
-#endif // _LANGUAGE_ZH_TW_H_
+/*
+ zh-TW.h - localization for Chinese (Traditional) - Taiwan for Tasmota
+
+ Copyright (C) 2019 Theo Arends (translated by dannydu)
+
+ 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 .
+*/
+
+#ifndef _LANGUAGE_ZH_TW_H_
+#define _LANGUAGE_ZH_TW_H_
+
+/*************************** ATTENTION *******************************\
+ *
+ * Due to memory constraints only UTF-8 is supported.
+ * To save code space keep text as short as possible.
+ * Time and Date provided by SDK can not be localized (yet).
+ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command Prefix to translate cmnd, stat and tele.
+ *
+ * Updated until v5.12.0d
+\*********************************************************************/
+
+//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
+
+#define LANGUAGE_LCID 1028
+// HTML (ISO 639-1) Language Code
+#define D_HTML_LANGUAGE "zh"
+
+// "2017-03-07T11:08:02" - ISO8601:2004
+#define D_YEAR_MONTH_SEPARATOR "-"
+#define D_MONTH_DAY_SEPARATOR "-"
+#define D_DATE_TIME_SEPARATOR "T"
+#define D_HOUR_MINUTE_SEPARATOR ":"
+#define D_MINUTE_SECOND_SEPARATOR ":"
+
+#define D_DAY3LIST "SunMonTueWedThuFriSat"
+#define D_MONTH3LIST "JanFebMarAprMayJunJulAugSepOctNovDec"
+
+// Non JSON decimal separator
+#define D_DECIMAL_SEPARATOR "."
+
+// Common
+#define D_ADMIN "Admin"
+#define D_AIR_QUALITY "空氣品質"
+#define D_AP "AP" // Access Point
+#define D_AS "名稱:"
+#define D_AUTO "自動"
+#define D_BLINK "閃爍"
+#define D_BLINKOFF "閃爍關"
+#define D_BOOT_COUNT "啟動次數"
+#define D_BRIGHTLIGHT "亮度"
+#define D_BSSID "BSSId"
+#define D_BUTTON "按鈕"
+#define D_BY "by" // Written by me
+#define D_BYTES "大小:"
+#define D_CELSIUS "攝氏"
+#define D_CHANNEL "Channel"
+#define D_CO2 "二氧化碳"
+#define D_CODE "代碼" // Button code
+#define D_COLDLIGHT "冷"
+#define D_COMMAND "命令:"
+#define D_CONNECTED "已連接"
+#define D_CORS_DOMAIN "CORS Domain"
+#define D_COUNT "數量:"
+#define D_COUNTER "Counter"
+#define D_CURRENT "電流" // As in Voltage and Current
+#define D_DATA "數據:"
+#define D_DARKLIGHT "Dark"
+#define D_DEBUG "除錯"
+#define D_DISABLED "停用"
+#define D_DISTANCE "Distance"
+#define D_DNS_SERVER "DNS伺服器"
+#define D_DONE "完成"
+#define D_DST_TIME "DST"
+#define D_ECO2 "eCO2"
+#define D_EMULATION "設備模擬"
+#define D_ENABLED "啟用"
+#define D_ERASE "刪除"
+#define D_ERROR "錯誤"
+#define D_FAHRENHEIT "華氏"
+#define D_FAILED "失敗"
+#define D_FALLBACK "Fallback"
+#define D_FALLBACK_TOPIC "Fallback Topic"
+#define D_FALSE "False"
+#define D_FILE "文件:"
+#define D_FLOW_RATE "Flow rate"
+#define D_FREE_MEMORY "可用記憶體"
+#define D_FREQUENCY "Frequency"
+#define D_GAS "氣體"
+#define D_GATEWAY "網關"
+#define D_GROUP "組:"
+#define D_HOST "主機"
+#define D_HOSTNAME "主機名"
+#define D_HUMIDITY "濕度"
+#define D_ILLUMINANCE "照度"
+#define D_IMMEDIATE "immediate" // Button immediate
+#define D_INDEX "索引:"
+#define D_INFO "信息"
+#define D_INFRARED "Infrared"
+#define D_INITIALIZED "初始化完成"
+#define D_IP_ADDRESS "IP地址"
+#define D_LIGHT "燈"
+#define D_LWT "LWT"
+#define D_MODULE "模組"
+#define D_MQTT "MQTT"
+#define D_MULTI_PRESS "多次按鍵"
+#define D_NOISE "雜訊"
+#define D_NONE "無"
+#define D_OFF "關"
+#define D_OFFLINE "離線"
+#define D_OK "好"
+#define D_ON "開"
+#define D_ONLINE "在線"
+#define D_PASSWORD "密碼"
+#define D_PORT "端口"
+#define D_POWER_FACTOR "功率因數"
+#define D_POWERUSAGE "功率"
+#define D_POWERUSAGE_ACTIVE "Active Power"
+#define D_POWERUSAGE_APPARENT "Apparent Power"
+#define D_POWERUSAGE_REACTIVE "Reactive Power"
+#define D_PRESSURE "氣壓"
+#define D_PRESSUREATSEALEVEL "海平面氣壓"
+#define D_PROGRAM_FLASH_SIZE "韌體 Flash 大小"
+#define D_PROGRAM_SIZE "韌體大小"
+#define D_PROJECT "項目:"
+#define D_RAIN "Rain"
+#define D_RECEIVED "已接收"
+#define D_RESTART "重啟"
+#define D_RESTARTING "正在重啟"
+#define D_RESTART_REASON "重啟原因"
+#define D_RESTORE "恢覆"
+#define D_RETAINED "已保留"
+#define D_RULE "Rule"
+#define D_SAVE "存檔"
+#define D_SENSOR "感測器"
+#define D_SSID "名稱"
+#define D_START "開始"
+#define D_STD_TIME "STD"
+#define D_STOP "停止"
+#define D_SUBNET_MASK "子網遮罩"
+#define D_SUBSCRIBE_TO "訂閱"
+#define D_UNSUBSCRIBE_FROM "退訂"
+#define D_SUCCESSFUL "成功"
+#define D_SUNRISE "Sunrise"
+#define D_SUNSET "Sunset"
+#define D_TEMPERATURE "溫度"
+#define D_TO "to"
+#define D_TOGGLE "切換"
+#define D_TOPIC "主題"
+#define D_TOTAL_USAGE "Total Usage"
+#define D_TRANSMIT "發送"
+#define D_TRUE "True"
+#define D_TVOC "TVOC"
+#define D_UPGRADE "升級"
+#define D_UPLOAD "上傳"
+#define D_UPTIME "運行時間"
+#define D_USER "用戶名"
+#define D_UTC_TIME "UTC"
+#define D_UV_INDEX "UV Index"
+#define D_UV_INDEX_1 "Low"
+#define D_UV_INDEX_2 "Mid"
+#define D_UV_INDEX_3 "High"
+#define D_UV_INDEX_4 "Danger"
+#define D_UV_INDEX_5 "BurnL1/2"
+#define D_UV_INDEX_6 "BurnL3"
+#define D_UV_INDEX_7 "OoR"
+#define D_UV_LEVEL "紫外線等級"
+#define D_UV_POWER "UV Power"
+#define D_VERSION "版本"
+#define D_VOLTAGE "電壓"
+#define D_WEIGHT "Weight"
+#define D_WARMLIGHT "暖"
+#define D_WEB_SERVER "Web Server"
+
+// tasmota.ino
+#define D_WARNING_MINIMAL_VERSION "警告:精簡產品不支持配置寫入保存"
+#define D_LEVEL_10 "level 1-0"
+#define D_LEVEL_01 "level 0-1"
+#define D_SERIAL_LOGGING_DISABLED "串口日誌已禁用"
+#define D_SYSLOG_LOGGING_REENABLED "Syslog 日誌已開啟"
+
+#define D_SET_BAUDRATE_TO "設置波特率為:"
+#define D_RECEIVED_TOPIC "接收到的主題:"
+#define D_DATA_SIZE "數據大小:"
+#define D_ANALOG_INPUT "Analog"
+
+// support.ino
+#define D_OSWATCH "osWatch"
+#define D_BLOCKED_LOOP "Blocked Loop"
+#define D_WPS_FAILED_WITH_STATUS "WPSconfig FAILED with status"
+#define D_ACTIVE_FOR_3_MINUTES "active for 3 minutes"
+#define D_FAILED_TO_START "未能啟動"
+#define D_PATCH_ISSUE_2186 "Patch issue 2186"
+#define D_CONNECTING_TO_AP "連接到 AP"
+#define D_IN_MODE "模式:"
+#define D_CONNECT_FAILED_NO_IP_ADDRESS "連接失敗,因為沒有獲取到IP地址"
+#define D_CONNECT_FAILED_AP_NOT_REACHED "連接失敗,無法連接AP"
+#define D_CONNECT_FAILED_WRONG_PASSWORD "連接失敗,AP密碼不正確"
+#define D_CONNECT_FAILED_AP_TIMEOUT "連接失敗,AP超時"
+#define D_ATTEMPTING_CONNECTION "嘗試連接..."
+#define D_CHECKING_CONNECTION "檢查連接..."
+#define D_QUERY_DONE "查詢完成。 發現MQTT服務"
+#define D_MQTT_SERVICE_FOUND "發現MQTT服務:"
+#define D_FOUND_AT "found at"
+#define D_SYSLOG_HOST_NOT_FOUND "Syslog主機未找到"
+
+// settings.ino
+#define D_SAVED_TO_FLASH_AT "保存到 flash:"
+#define D_LOADED_FROM_FLASH_AT "從 flash 載入"
+#define D_USE_DEFAULTS "使用默認設置"
+#define D_ERASED_SECTOR "擦除刪除"
+
+// xdrv_02_webserver.ino
+#define D_NOSCRIPT "To use Tasmota, please enable JavaScript"
+#define D_MINIMAL_FIRMWARE_PLEASE_UPGRADE "固件版本過低
請升級"
+#define D_WEBSERVER_ACTIVE_ON "Web服務器:"
+#define D_WITH_IP_ADDRESS "IP地址:"
+#define D_WEBSERVER_STOPPED "Web 服務器已停止"
+#define D_FILE_NOT_FOUND "文件未找到"
+#define D_REDIRECTED "重定向到認證頁面"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifimanager set AccessPoint and keep Station"
+#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifimanager 設置接入點"
+#define D_TRYING_TO_CONNECT "嘗試將設備連接到網絡"
+
+#define D_RESTART_IN "重啟需要"
+#define D_SECONDS "秒"
+#define D_DEVICE_WILL_RESTART "設備將在幾分鐘內重啟"
+#define D_BUTTON_TOGGLE "狀態切換"
+#define D_CONFIGURATION "設置"
+#define D_INFORMATION "信息"
+#define D_FIRMWARE_UPGRADE "固件升級"
+#define D_CONSOLE "控制台"
+#define D_CONFIRM_RESTART "確認重啟"
+
+#define D_CONFIGURE_MODULE "模塊設置"
+#define D_CONFIGURE_WIFI "WiFi設置"
+#define D_CONFIGURE_MQTT "MQTT設置"
+#define D_CONFIGURE_DOMOTICZ "Domoticz設置"
+#define D_CONFIGURE_LOGGING "日志設置"
+#define D_CONFIGURE_OTHER "其他設置"
+#define D_CONFIRM_RESET_CONFIGURATION "確認重置配置"
+#define D_RESET_CONFIGURATION "重置配置"
+#define D_BACKUP_CONFIGURATION "備份配置"
+#define D_RESTORE_CONFIGURATION "還原配置"
+#define D_MAIN_MENU "主菜單"
+
+#define D_MODULE_PARAMETERS "模塊設置"
+#define D_MODULE_TYPE "模塊類型"
+#define D_PULLUP_ENABLE "No Button/Switch pull-up"
+#define D_ADC "ADC"
+#define D_GPIO "GPIO"
+#define D_SERIAL_IN "串口輸入(RX)"
+#define D_SERIAL_OUT "串口輸出(TX)"
+
+#define D_WIFI_PARAMETERS "Wifi設置"
+#define D_SCAN_FOR_WIFI_NETWORKS "掃描無線網絡"
+#define D_SCAN_DONE "掃描完畢"
+#define D_NO_NETWORKS_FOUND "未找到任何網絡"
+#define D_REFRESH_TO_SCAN_AGAIN "刷新並重試"
+#define D_DUPLICATE_ACCESSPOINT "重覆AP"
+#define D_SKIPPING_LOW_QUALITY "忽略弱信號網絡"
+#define D_RSSI "RSSI"
+#define D_WEP "WEP"
+#define D_WPA_PSK "WPA PSK"
+#define D_WPA2_PSK "WPA2 PSK"
+#define D_AP1_SSID "AP1 名稱"
+#define D_AP1_PASSWORD "AP1 密碼"
+#define D_AP2_SSID "AP2 名稱"
+#define D_AP2_PASSWORD "AP2 密碼"
+
+#define D_MQTT_PARAMETERS "MQTT設置"
+#define D_CLIENT "客戶端"
+#define D_FULL_TOPIC "完整主題"
+
+#define D_LOGGING_PARAMETERS "日志設置"
+#define D_SERIAL_LOG_LEVEL "串口日志級別"
+#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_WEB_LOG_LEVEL "Web 日志級別"
+#define D_SYS_LOG_LEVEL "Syslog 日志級別"
+#define D_MORE_DEBUG "全部調試"
+#define D_SYSLOG_HOST "Syslog 主機地址"
+#define D_SYSLOG_PORT "Syslog 端口"
+#define D_TELEMETRY_PERIOD "上報周期"
+
+#define D_OTHER_PARAMETERS "其他設置"
+#define D_TEMPLATE "Template"
+#define D_ACTIVATE "Activate"
+#define D_WEB_ADMIN_PASSWORD "WEB管理密碼"
+#define D_MQTT_ENABLE "啟用MQTT"
+#define D_FRIENDLY_NAME "昵稱"
+#define D_BELKIN_WEMO "貝爾金 WeMo"
+#define D_HUE_BRIDGE "飛利浦 Hue 網橋"
+#define D_SINGLE_DEVICE "單設備"
+#define D_MULTI_DEVICE "多設備"
+
+#define D_CONFIGURE_TEMPLATE "Configure Template"
+#define D_TEMPLATE_PARAMETERS "Template parameters"
+#define D_TEMPLATE_NAME "Name"
+#define D_BASE_TYPE "Based on"
+#define D_TEMPLATE_FLAGS "Options"
+
+#define D_SAVE_CONFIGURATION "保存設置"
+#define D_CONFIGURATION_SAVED "設置已保存"
+#define D_CONFIGURATION_RESET "設置已重置"
+
+#define D_PROGRAM_VERSION "固件版本"
+#define D_BUILD_DATE_AND_TIME "編譯時間"
+#define D_CORE_AND_SDK_VERSION "內核版本"
+#define D_FLASH_WRITE_COUNT "刷機次數"
+#define D_MAC_ADDRESS "MAC地址"
+#define D_MQTT_HOST "MQTT主機"
+#define D_MQTT_PORT "MQTT端口"
+#define D_MQTT_CLIENT "MQTT客戶端"
+#define D_MQTT_USER "MQTT用戶名"
+#define D_MQTT_TOPIC "MQTT 主題(Topic)"
+#define D_MQTT_GROUP_TOPIC "MQTT 主題組(Group Topic)"
+#define D_MQTT_FULL_TOPIC "MQTT 完整主題(Full Topic)"
+#define D_MDNS_DISCOVERY "mDNS 發現"
+#define D_MDNS_ADVERTISE "mDNS 廣播"
+#define D_ESP_CHIP_ID "ESP芯片ID"
+#define D_FLASH_CHIP_ID "Flash芯片ID"
+#define D_FLASH_CHIP_SIZE "Flash大小"
+#define D_FREE_PROGRAM_SPACE "空閑程序空間"
+
+#define D_UPGRADE_BY_WEBSERVER "通過Web升級"
+#define D_OTA_URL "OTA地址"
+#define D_START_UPGRADE "開始升級"
+#define D_UPGRADE_BY_FILE_UPLOAD "通過文件升級"
+#define D_UPLOAD_STARTED "開始上傳"
+#define D_UPGRADE_STARTED "開始升級"
+#define D_UPLOAD_DONE "上傳完成"
+#define D_UPLOAD_ERR_1 "沒有選擇文件"
+#define D_UPLOAD_ERR_2 "沒有足夠空間"
+#define D_UPLOAD_ERR_3 "固件頭不是 0xE9"
+#define D_UPLOAD_ERR_4 "固件太大"
+#define D_UPLOAD_ERR_5 "上傳緩沖區不匹配"
+#define D_UPLOAD_ERR_6 "上傳失敗。 啟用日志記錄 3"
+#define D_UPLOAD_ERR_7 "上傳取消"
+#define D_UPLOAD_ERR_8 "錯誤的固件"
+#define D_UPLOAD_ERR_9 "固件太大"
+#define D_UPLOAD_ERR_10 "Failed to init RF chip"
+#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
+#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
+#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERROR_CODE "上傳錯誤代碼"
+
+#define D_ENTER_COMMAND "輸入命令"
+#define D_ENABLE_WEBLOG_FOR_RESPONSE "如果預期響應,則啟用Weblog 2"
+#define D_NEED_USER_AND_PASSWORD "需要 user=<用戶名>&password=<密碼>"
+
+// xdrv_01_mqtt.ino
+#define D_FINGERPRINT "驗證 TLS 指紋..."
+#define D_TLS_CONNECT_FAILED_TO "TLS 連接失敗"
+#define D_RETRY_IN "重試倒計時:"
+#define D_VERIFIED "驗證成功"
+#define D_INSECURE "指紋無效導致連接不安全"
+#define D_CONNECT_FAILED_TO "連接失敗:"
+
+// xplg_wemohue.ino
+#define D_MULTICAST_DISABLED "組播已禁用"
+#define D_MULTICAST_REJOINED "組播已(重新)加入"
+#define D_MULTICAST_JOIN_FAILED "組播加入失敗"
+#define D_FAILED_TO_SEND_RESPONSE "請求發送失敗"
+
+#define D_WEMO "WeMo"
+#define D_WEMO_BASIC_EVENT "WeMo 基礎事件"
+#define D_WEMO_EVENT_SERVICE "WeMo 事件服務"
+#define D_WEMO_META_SERVICE "WeMo meta 服務"
+#define D_WEMO_SETUP "WeMo 設置"
+#define D_RESPONSE_SENT "發送請求"
+
+#define D_HUE "Hue"
+#define D_HUE_BRIDGE_SETUP "Hue 設置"
+#define D_HUE_API_NOT_IMPLEMENTED "Hue API 未實現"
+#define D_HUE_API "Hue API"
+#define D_HUE_POST_ARGS "Hue POST 參數"
+#define D_3_RESPONSE_PACKETS_SENT "3 請求包發送"
+
+// xdrv_07_domoticz.ino
+#define D_DOMOTICZ_PARAMETERS "Domoticz 設置"
+#define D_DOMOTICZ_IDX "Idx"
+#define D_DOMOTICZ_KEY_IDX "Key idx"
+#define D_DOMOTICZ_SWITCH_IDX "開關 idx"
+#define D_DOMOTICZ_SENSOR_IDX "傳感器 idx"
+ #define D_DOMOTICZ_TEMP "溫度"
+ #define D_DOMOTICZ_TEMP_HUM "溫度,濕度"
+ #define D_DOMOTICZ_TEMP_HUM_BARO "溫度,濕度,氣壓"
+ #define D_DOMOTICZ_POWER_ENERGY "功率,電量"
+ #define D_DOMOTICZ_ILLUMINANCE "照度"
+ #define D_DOMOTICZ_COUNT "數值/PM1"
+ #define D_DOMOTICZ_VOLTAGE "電壓/PM2.5"
+ #define D_DOMOTICZ_CURRENT "電流/PM10"
+ #define D_DOMOTICZ_AIRQUALITY "空氣品質"
+ #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter"
+#define D_DOMOTICZ_UPDATE_TIMER "更新計時器"
+
+// xdrv_09_timers.ino
+#define D_CONFIGURE_TIMER "Configure Timer"
+#define D_TIMER_PARAMETERS "Timer parameters"
+#define D_TIMER_ENABLE "Enable Timers"
+#define D_TIMER_ARM "Arm"
+#define D_TIMER_TIME "Time"
+#define D_TIMER_DAYS "Days"
+#define D_TIMER_REPEAT "Repeat"
+#define D_TIMER_OUTPUT "Output"
+#define D_TIMER_ACTION "Action"
+
+// xdrv_10_knx.ino
+#define D_CONFIGURE_KNX "Configure KNX"
+#define D_KNX_PARAMETERS "KNX Parameters"
+#define D_KNX_GENERAL_CONFIG "General"
+#define D_KNX_PHYSICAL_ADDRESS "Physical Address"
+#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Must be unique on the KNX network )"
+#define D_KNX_ENABLE "Enable KNX"
+#define D_KNX_GROUP_ADDRESS_TO_WRITE "Data to Send to Group Addresses"
+#define D_ADD "Add"
+#define D_DELETE "Delete"
+#define D_REPLY "Reply"
+#define D_KNX_GROUP_ADDRESS_TO_READ "Group Addresses to Receive Data from"
+#define D_RECEIVED_FROM "Received from"
+#define D_KNX_COMMAND_WRITE "Write"
+#define D_KNX_COMMAND_READ "Read"
+#define D_KNX_COMMAND_OTHER "Other"
+#define D_SENT_TO "sent to"
+#define D_KNX_WARNING "The group address ( 0 / 0 / 0 ) is reserved and can not be used."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
+#define D_KNX_TX_SLOT "KNX TX"
+#define D_KNX_RX_SLOT "KNX RX"
+
+// xdrv_03_energy.ino
+#define D_ENERGY_TODAY "今日用電量"
+#define D_ENERGY_YESTERDAY "昨日用電量"
+#define D_ENERGY_TOTAL "總用電量"
+
+// xdrv_27_shutter.ino
+#define D_OPEN "Open"
+#define D_CLOSE "Close"
+#define D_DOMOTICZ_SHUTTER "Shutter"
+
+// xdrv_28_pcf8574.ino
+#define D_CONFIGURE_PCF8574 "Configure PCF8574"
+#define D_PCF8574_PARAMETERS "PCF8574 parameters"
+#define D_INVERT_PORTS "Invert Ports"
+#define D_DEVICE "Device"
+#define D_DEVICE_INPUT "Input"
+#define D_DEVICE_OUTPUT "Output"
+
+// xsns_05_ds18b20.ino
+#define D_SENSOR_BUSY "傳感器正忙"
+#define D_SENSOR_CRC_ERROR "傳感器 CRC 校驗錯誤"
+#define D_SENSORS_FOUND "發現傳感器"
+
+// xsns_06_dht.ino
+#define D_TIMEOUT_WAITING_FOR "等待超時"
+#define D_START_SIGNAL_LOW "開始低電平"
+#define D_START_SIGNAL_HIGH "開始高電平"
+#define D_PULSE "pulse"
+#define D_CHECKSUM_FAILURE "校驗失敗"
+
+// xsns_07_sht1x.ino
+#define D_SENSOR_DID_NOT_ACK_COMMAND "傳感器沒有確認命令"
+#define D_SHT1X_FOUND "發現 SHT1X 傳感器"
+
+// xsns_18_pms5003.ino
+#define D_STANDARD_CONCENTRATION "CF-1 PM" // Standard Particle CF-1 Particle Matter
+#define D_ENVIRONMENTAL_CONCENTRATION "PM" // Environmetal Particle Matter
+#define D_PARTICALS_BEYOND "顆粒物直徑大於"
+
+// xsns_32_mpu6050.ino
+#define D_AX_AXIS "Accel. X-Axis"
+#define D_AY_AXIS "Accel. Y-Axis"
+#define D_AZ_AXIS "Accel. Z-Axis"
+#define D_GX_AXIS "Gyro X-Axis"
+#define D_GY_AXIS "Gyro Y-Axis"
+#define D_GZ_AXIS "Gyro Z-Axis"
+
+// xsns_34_hx711.ino
+#define D_HX_CAL_REMOVE "Remove weigth"
+#define D_HX_CAL_REFERENCE "Load reference weigth"
+#define D_HX_CAL_DONE "Calibrated"
+#define D_HX_CAL_FAIL "Calibration failed"
+#define D_RESET_HX711 "Reset Scale"
+#define D_CONFIGURE_HX711 "Configure Scale"
+#define D_HX711_PARAMETERS "Scale parameters"
+#define D_ITEM_WEIGHT "Item weight"
+#define D_REFERENCE_WEIGHT "Reference weigth"
+#define D_CALIBRATE "Calibrate"
+#define D_CALIBRATION "Calibration"
+
+//xsns_35_tx20.ino
+#define D_TX20_WIND_DIRECTION "Wind Direction"
+#define D_TX20_WIND_SPEED "Wind Speed"
+#define D_TX20_WIND_SPEED_AVG "Wind Speed Avg"
+#define D_TX20_WIND_SPEED_MAX "Wind Speed Max"
+#define D_TX20_NORTH "N"
+#define D_TX20_EAST "E"
+#define D_TX20_SOUTH "S"
+#define D_TX20_WEST "W"
+
+// 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"
+#define D_SENSOR_DHT11 "DHT11"
+#define D_SENSOR_AM2301 "AM2301"
+#define D_SENSOR_SI7021 "SI7021"
+#define D_SENSOR_DS18X20 "DS18x20"
+#define D_SENSOR_I2C_SCL "I2C SCL"
+#define D_SENSOR_I2C_SDA "I2C SDA"
+#define D_SENSOR_WS2812 "WS2812"
+#define D_SENSOR_DFR562 "MP3 Player"
+#define D_SENSOR_IRSEND "IRsend"
+#define D_SENSOR_SWITCH "Switch" // Suffix "1"
+#define D_SENSOR_BUTTON "Button" // Suffix "1"
+#define D_SENSOR_RELAY "Relay" // Suffix "1i"
+#define D_SENSOR_LED "Led" // Suffix "1i"
+#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
+#define D_SENSOR_PWM "PWM" // Suffix "1"
+#define D_SENSOR_COUNTER "Counter" // Suffix "1"
+#define D_SENSOR_IRRECV "IRrecv"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_SPI_CS "SPI CS"
+#define D_SENSOR_SPI_DC "SPI DC"
+#define D_SENSOR_SPI_MISO "SPI MISO"
+#define D_SENSOR_SPI_MOSI "SPI MOSI"
+#define D_SENSOR_SPI_CLK "SPI CLK"
+#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_PMS5003 "PMS5003"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_TM1638_CLK "TM16 CLK"
+#define D_SENSOR_TM1638_DIO "TM16 DIO"
+#define D_SENSOR_TM1638_STB "TM16 STB"
+#define D_SENSOR_HX711_SCK "HX711 SCK"
+#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_TX20_TX "TX20"
+#define D_SENSOR_RFSEND "RFSend"
+#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
+#define D_SENSOR_SSPI_MISO "SSPI MISO"
+#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
+#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_CS "SSPI CS"
+#define D_SENSOR_SSPI_DC "SSPI DC"
+#define D_SENSOR_RF_SENSOR "RF Sensor"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_MAX31855_CS "MX31855 CS"
+#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_DO "MX31855 DO"
+#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_CF1 "HLWBL CF1"
+#define D_SENSOR_HLW_CF "HLW8012 CF"
+#define D_SENSOR_HJL_CF "BL0937 CF"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
+#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 CLK"
+#define D_SENSOR_SM16716_DAT "SM16716 DAT"
+#define D_SENSOR_SM16716_POWER "SM16716 PWR"
+#define D_SENSOR_MY92X1_DI "MY92x1 DI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_ARIRFRCV "ALux IrRcv"
+#define D_SENSOR_ARIRFSEL "ALux IrSel"
+#define D_SENSOR_TXD "Serial Tx"
+#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
+#define D_SENSOR_HRE_CLOCK "HRE Clock"
+#define D_SENSOR_HRE_DATA "HRE Data"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
+#define D_SENSOR_BUZZER "Buzzer"
+#define D_SENSOR_OLED_RESET "OLED Reset"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_IBEACON_TX "iBeacon TX"
+#define D_SENSOR_IBEACON_RX "iBeacon RX"
+#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_CC1101_CS "CC1101 CS"
+#define D_SENSOR_A4988_DIR "A4988 DIR"
+#define D_SENSOR_A4988_STP "A4988 STP"
+#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_MS1 "A4988 MS1"
+#define D_SENSOR_A4988_MS2 "A4988 MS2"
+#define D_SENSOR_A4988_MS3 "A4988 MS3"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_EXS_ENABLE "EXS Enable"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+
+// Units
+#define D_UNIT_AMPERE "安"
+#define D_UNIT_CENTIMETER "cm"
+#define D_UNIT_HERTZ "Hz"
+#define D_UNIT_HOUR "時"
+#define D_UNIT_GALLONS "gal"
+#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_INCREMENTS "inc"
+#define D_UNIT_KILOGRAM "kg"
+#define D_UNIT_KILOMETER_PER_HOUR "km/h" // or "km/h"
+#define D_UNIT_KILOOHM "千歐"
+#define D_UNIT_KILOWATTHOUR "千瓦時"
+#define D_UNIT_LUX "勒克斯"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "微克/立方米"
+#define D_UNIT_MICROMETER "微米"
+#define D_UNIT_MICROSECOND "微秒"
+#define D_UNIT_MILLIAMPERE "毫安"
+#define D_UNIT_MILLIMETER "mm"
+#define D_UNIT_MILLIMETER_MERCURY "mmHg"
+#define D_UNIT_MILLISECOND "毫秒"
+#define D_UNIT_MINUTE "分"
+#define D_UNIT_PARTS_PER_BILLION "ppb"
+#define D_UNIT_PARTS_PER_DECILITER "每分升"
+#define D_UNIT_PARTS_PER_MILLION "ppm"
+#define D_UNIT_PRESSURE "百帕"
+#define D_UNIT_SECOND "秒"
+#define D_UNIT_SECTORS "扇區"
+#define D_UNIT_VA "VA"
+#define D_UNIT_VAR "VAr"
+#define D_UNIT_VOLT "伏"
+#define D_UNIT_WATT "瓦"
+#define D_UNIT_WATTHOUR "瓦時"
+#define D_UNIT_WATT_METER_QUADRAT "W/m²"
+
+//SDM220
+#define D_PHASE_ANGLE "Phase Angle"
+#define D_IMPORT_ACTIVE "Import Active"
+#define D_EXPORT_ACTIVE "Export Active"
+#define D_IMPORT_REACTIVE "Import Reactive"
+#define D_EXPORT_REACTIVE "Export Reactive"
+#define D_TOTAL_REACTIVE "Total Reactive"
+#define D_UNIT_KWARH "kVArh"
+#define D_UNIT_ANGLE "Deg"
+
+//SOLAXX1
+#define D_PV1_VOLTAGE "PV1 Voltage"
+#define D_PV1_CURRENT "PV1 Current"
+#define D_PV1_POWER "PV1 Power"
+#define D_PV2_VOLTAGE "PV2 Voltage"
+#define D_PV2_CURRENT "PV2 Current"
+#define D_PV2_POWER "PV2 Power"
+#define D_SOLAR_POWER "Solar Power"
+#define D_INVERTER_POWER "Inverter Power"
+#define D_STATUS "Status"
+#define D_WAITING "Waiting"
+#define D_CHECKING "Checking"
+#define D_WORKING "Working"
+#define D_FAILURE "Failure"
+#define D_SOLAX_ERROR_0 "No Error Code"
+#define D_SOLAX_ERROR_1 "Grid Lost Fault"
+#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
+#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
+#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
+#define D_SOLAX_ERROR_5 "Isolation Fault"
+#define D_SOLAX_ERROR_6 "Over Temperature Fault"
+#define D_SOLAX_ERROR_7 "Fan Fault"
+#define D_SOLAX_ERROR_8 "Other Device Fault"
+
+#endif // _LANGUAGE_ZH_TW_H_
From 69a79c83a513c7b0c38468e9ed9210115f6487ea Mon Sep 17 00:00:00 2001
From: ascillato
Date: Mon, 16 Dec 2019 23:16:25 -0300
Subject: [PATCH 081/559] Add GPS Support - Language Files
---
tasmota/language/bg-BG.h | 2 ++
tasmota/language/cs-CZ.h | 2 ++
tasmota/language/de-DE.h | 2 ++
tasmota/language/el-GR.h | 2 ++
tasmota/language/en-GB.h | 2 ++
tasmota/language/es-ES.h | 8 +++++---
tasmota/language/fr-FR.h | 2 ++
tasmota/language/he-HE.h | 2 ++
tasmota/language/hu-HU.h | 2 ++
tasmota/language/it-IT.h | 2 ++
tasmota/language/ko-KO.h | 2 ++
tasmota/language/nl-NL.h | 2 ++
tasmota/language/pl-PL.h | 2 ++
tasmota/language/pt-BR.h | 2 ++
tasmota/language/pt-PT.h | 2 ++
tasmota/language/ru-RU.h | 2 ++
tasmota/language/sk-SK.h | 2 ++
tasmota/language/sv-SE.h | 2 ++
tasmota/language/tr-TR.h | 2 ++
tasmota/language/uk-UK.h | 2 ++
tasmota/language/zh-CN.h | 2 ++
tasmota/language/zh-TW.h | 2 ++
22 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/tasmota/language/bg-BG.h b/tasmota/language/bg-BG.h
index 1f18d8efb..4ef69b318 100644
--- a/tasmota/language/bg-BG.h
+++ b/tasmota/language/bg-BG.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/cs-CZ.h b/tasmota/language/cs-CZ.h
index 1d7c6f381..242cc3ab9 100644
--- a/tasmota/language/cs-CZ.h
+++ b/tasmota/language/cs-CZ.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h
index 6569dd232..0ed4119aa 100644
--- a/tasmota/language/de-DE.h
+++ b/tasmota/language/de-DE.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/el-GR.h b/tasmota/language/el-GR.h
index f8b9c9614..f694c53a6 100644
--- a/tasmota/language/el-GR.h
+++ b/tasmota/language/el-GR.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/en-GB.h b/tasmota/language/en-GB.h
index 257a34c86..14211c20d 100644
--- a/tasmota/language/en-GB.h
+++ b/tasmota/language/en-GB.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/es-ES.h b/tasmota/language/es-ES.h
index 7527bb77a..ddaf76aed 100644
--- a/tasmota/language/es-ES.h
+++ b/tasmota/language/es-ES.h
@@ -626,9 +626,11 @@
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/fr-FR.h b/tasmota/language/fr-FR.h
index e107409e3..a49acb3e1 100644
--- a/tasmota/language/fr-FR.h
+++ b/tasmota/language/fr-FR.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/he-HE.h b/tasmota/language/he-HE.h
index ac4dadb8e..2a93b0b61 100644
--- a/tasmota/language/he-HE.h
+++ b/tasmota/language/he-HE.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/hu-HU.h b/tasmota/language/hu-HU.h
index 62806fa46..b27c12f87 100644
--- a/tasmota/language/hu-HU.h
+++ b/tasmota/language/hu-HU.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/it-IT.h b/tasmota/language/it-IT.h
index 0585c12d8..e59a71df2 100644
--- a/tasmota/language/it-IT.h
+++ b/tasmota/language/it-IT.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/ko-KO.h b/tasmota/language/ko-KO.h
index bff508474..aafa93855 100644
--- a/tasmota/language/ko-KO.h
+++ b/tasmota/language/ko-KO.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/nl-NL.h b/tasmota/language/nl-NL.h
index 75d841ddc..977d0ae02 100644
--- a/tasmota/language/nl-NL.h
+++ b/tasmota/language/nl-NL.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h
index 8f5af6813..47550d9e0 100644
--- a/tasmota/language/pl-PL.h
+++ b/tasmota/language/pl-PL.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/pt-BR.h b/tasmota/language/pt-BR.h
index 0efa57789..248955a92 100644
--- a/tasmota/language/pt-BR.h
+++ b/tasmota/language/pt-BR.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/pt-PT.h b/tasmota/language/pt-PT.h
index a6299c0c8..7ccfa6c08 100644
--- a/tasmota/language/pt-PT.h
+++ b/tasmota/language/pt-PT.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/ru-RU.h b/tasmota/language/ru-RU.h
index 3bd788ede..cedad2664 100644
--- a/tasmota/language/ru-RU.h
+++ b/tasmota/language/ru-RU.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "А"
diff --git a/tasmota/language/sk-SK.h b/tasmota/language/sk-SK.h
index a64e49e01..448dcd7b0 100644
--- a/tasmota/language/sk-SK.h
+++ b/tasmota/language/sk-SK.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/sv-SE.h b/tasmota/language/sv-SE.h
index 51ffc2ae3..c87941b24 100644
--- a/tasmota/language/sv-SE.h
+++ b/tasmota/language/sv-SE.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/tr-TR.h b/tasmota/language/tr-TR.h
index 6bc48c40f..32b37edf9 100644
--- a/tasmota/language/tr-TR.h
+++ b/tasmota/language/tr-TR.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/uk-UK.h b/tasmota/language/uk-UK.h
index b4a314630..31f420b8f 100644
--- a/tasmota/language/uk-UK.h
+++ b/tasmota/language/uk-UK.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "А"
diff --git a/tasmota/language/zh-CN.h b/tasmota/language/zh-CN.h
index 21aa63be3..7d9ecfd46 100644
--- a/tasmota/language/zh-CN.h
+++ b/tasmota/language/zh-CN.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "安"
diff --git a/tasmota/language/zh-TW.h b/tasmota/language/zh-TW.h
index 1d78f181e..5b633920e 100644
--- a/tasmota/language/zh-TW.h
+++ b/tasmota/language/zh-TW.h
@@ -629,6 +629,8 @@
#define D_SENSOR_SLAVE_TX "Slave TX"
#define D_SENSOR_SLAVE_RX "Slave RX"
#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_GPS_TX "GPS TX"
// Units
#define D_UNIT_AMPERE "安"
From 1a02f52de950bcafe707680488f59a9af549a18d Mon Sep 17 00:00:00 2001
From: ascillato
Date: Mon, 16 Dec 2019 23:29:36 -0300
Subject: [PATCH 082/559] Add NTP Local Server Library
---
lib/ArduinoNTPd/NTPPacket.cpp | 39 +++++++++++++++++
lib/ArduinoNTPd/NTPPacket.h | 75 +++++++++++++++++++++++++++++++++
lib/ArduinoNTPd/NTPServer.cpp | 79 +++++++++++++++++++++++++++++++++++
lib/ArduinoNTPd/NTPServer.h | 35 ++++++++++++++++
tasmota/xsns_58_GPS.ino | 2 +-
5 files changed, 229 insertions(+), 1 deletion(-)
create mode 100644 lib/ArduinoNTPd/NTPPacket.cpp
create mode 100644 lib/ArduinoNTPd/NTPPacket.h
create mode 100644 lib/ArduinoNTPd/NTPServer.cpp
create mode 100644 lib/ArduinoNTPd/NTPServer.h
diff --git a/lib/ArduinoNTPd/NTPPacket.cpp b/lib/ArduinoNTPd/NTPPacket.cpp
new file mode 100644
index 000000000..e3cdf6b32
--- /dev/null
+++ b/lib/ArduinoNTPd/NTPPacket.cpp
@@ -0,0 +1,39 @@
+/*
+ * File: NTPPacket.cpp
+ * Description:
+ * NTP packet representation.
+ * Author: Mooneer Salem
+ * License: New BSD License
+ */
+
+#include "NTPPacket.h"
+
+void NtpPacket::swapEndian()
+{
+ reverseBytes_(&rootDelay);
+ reverseBytes_(&rootDispersion);
+ reverseBytes_(&referenceTimestampSeconds);
+ reverseBytes_(&referenceTimestampFraction);
+ reverseBytes_(&originTimestampSeconds);
+ reverseBytes_(&originTimestampFraction);
+ reverseBytes_(&receiveTimestampSeconds);
+ reverseBytes_(&receiveTimestampFraction);
+ reverseBytes_(&transmitTimestampSeconds);
+ reverseBytes_(&transmitTimestampFraction);
+}
+
+void NtpPacket::reverseBytes_(uint32_t *number)
+{
+ char buf[4];
+ char *numberAsChar = (char*)number;
+
+ buf[0] = numberAsChar[3];
+ buf[1] = numberAsChar[2];
+ buf[2] = numberAsChar[1];
+ buf[3] = numberAsChar[0];
+
+ numberAsChar[0] = buf[0];
+ numberAsChar[1] = buf[1];
+ numberAsChar[2] = buf[2];
+ numberAsChar[3] = buf[3];
+}
diff --git a/lib/ArduinoNTPd/NTPPacket.h b/lib/ArduinoNTPd/NTPPacket.h
new file mode 100644
index 000000000..80a1366f5
--- /dev/null
+++ b/lib/ArduinoNTPd/NTPPacket.h
@@ -0,0 +1,75 @@
+/*
+ * File: NTPPacket.h
+ * Description:
+ * NTP packet representation.
+ * Author: Mooneer Salem
+ * License: New BSD License
+ */
+
+#ifndef NTP_PACKET_H
+#define NTP_PACKET_H
+
+#include "Arduino.h"
+
+
+/*
+ * Contains the data in a typical NTP packet.
+ */
+struct NtpPacket
+{
+ static const int PACKET_SIZE = 48;
+
+ unsigned char leapVersionMode;
+
+ unsigned int leapIndicator() const { return leapVersionMode >> 6; }
+ void leapIndicator(unsigned int newValue) { leapVersionMode = (0x3F & leapVersionMode) | ((newValue & 0x03) << 6); }
+
+ unsigned int versionNumber() const { return (leapVersionMode >> 3) & 0x07; }
+ void versionNumber(unsigned int newValue) { leapVersionMode = (0xC7 & leapVersionMode) | ((newValue & 0x07) << 3); }
+
+ unsigned int mode() const { return (leapVersionMode & 0x07); }
+ void mode(unsigned int newValue) { leapVersionMode = (leapVersionMode & 0xF8) | (newValue & 0x07); }
+
+ char stratum;
+ char poll;
+ char precision;
+ uint32_t rootDelay;
+ uint32_t rootDispersion;
+ char referenceId[4];
+ uint32_t referenceTimestampSeconds;
+ uint32_t referenceTimestampFraction;
+ uint32_t originTimestampSeconds;
+ uint32_t originTimestampFraction;
+ uint32_t receiveTimestampSeconds;
+ uint32_t receiveTimestampFraction;
+ uint32_t transmitTimestampSeconds;
+ uint32_t transmitTimestampFraction;
+
+ /*
+ * Rearranges bytes in 32 bit values from big-endian (NTP protocol)
+ * to little-endian (Arduino/PC), or vice versa. Must be called before
+ * modifying the structure or sending the packet.
+ */
+ void swapEndian();
+
+ /*
+ * Returns packet as a char array for transmission via network.
+ * WARNING: modifying the return value is unsafe.
+ */
+ const char *packet() { return (const char*)this; }
+
+ /*
+ * Copies packet buffer to packet object.
+ */
+ void populatePacket(const char *buffer)
+ {
+ memcpy(this, buffer, PACKET_SIZE);
+ }
+private:
+ /*
+ * Reverses bytes in a number.
+ */
+ void reverseBytes_(uint32_t *number);
+};
+
+#endif // NTP_PACKET_H
diff --git a/lib/ArduinoNTPd/NTPServer.cpp b/lib/ArduinoNTPd/NTPServer.cpp
new file mode 100644
index 000000000..6ee82bd6c
--- /dev/null
+++ b/lib/ArduinoNTPd/NTPServer.cpp
@@ -0,0 +1,79 @@
+/*
+ * File: NTPServer.cpp
+ * Description:
+ * NTP server implementation.
+ * Author: Mooneer Salem
+ * License: New BSD License
+ */
+
+
+#include
+
+#include "NTPPacket.h"
+#include "NTPServer.h"
+
+#define NTP_PORT 123
+#define NTP_TIMESTAMP_DIFF (2208988800) // 1900 to 1970 in seconds
+
+bool NtpServer::beginListening()
+{
+ if (timeServerPort_.begin(NTP_PORT)){
+ return true;
+ }
+ return false;
+}
+
+bool NtpServer::processOneRequest(uint32_t utc, uint32_t millisecs)
+{
+ // We need the time we've received the packet in our response.
+ uint32_t recvSecs = utc + NTP_TIMESTAMP_DIFF;
+ double recvFractDouble = (double)millisecs/0.00023283064365386963; // millisec/((10^6)/(2^32))
+ uint32_t recvFract = (double)recvFractDouble; //TODO: really handle this!!!
+ bool processed = false;
+
+ int packetDataSize = timeServerPort_.parsePacket();
+ if (packetDataSize && packetDataSize >= NtpPacket::PACKET_SIZE)
+ {
+ // Received what is probably an NTP packet. Read it in and verify
+ // that it's legit.
+ NtpPacket packet;
+ timeServerPort_.read((char*)&packet, NtpPacket::PACKET_SIZE);
+ // TODO: verify packet.
+
+ // Populate response.
+ packet.swapEndian();
+ packet.leapIndicator(0);
+ packet.versionNumber(4);
+ packet.mode(4);
+ packet.stratum = 2; // I guess stratum 1 is too optimistic
+ packet.poll = 10; // 6-10 per RFC 5905.
+ packet.precision = -21; // ~0.5 microsecond precision.
+ packet.rootDelay = 0; //60 * (0xFFFF / 1000); // ~60 milliseconds, TBD
+ packet.rootDispersion = 0; //10 * (0xFFFF / 1000); // ~10 millisecond dispersion, TBD
+ packet.referenceId[0] = 'G';
+ packet.referenceId[1] = 'P';
+ packet.referenceId[2] = 'S';
+ packet.referenceId[3] = 0;
+ packet.referenceTimestampSeconds = utc;
+ packet.referenceTimestampFraction = recvFract;
+ packet.originTimestampSeconds = packet.transmitTimestampSeconds;
+ packet.originTimestampFraction = packet.transmitTimestampFraction;
+ packet.receiveTimestampSeconds = recvSecs;
+ packet.receiveTimestampFraction = recvFract;
+
+ // ...and the transmit time.
+ // timeSource_.now(&packet.transmitTimestampSeconds, &packet.transmitTimestampFraction);
+
+ // Now transmit the response to the client.
+ packet.swapEndian();
+ timeServerPort_.beginPacket(timeServerPort_.remoteIP(), timeServerPort_.remotePort());
+ for (int count = 0; count < NtpPacket::PACKET_SIZE; count++)
+ {
+ timeServerPort_.write(packet.packet()[count]);
+ }
+ timeServerPort_.endPacket();
+ processed = true;
+ }
+
+ return processed;
+}
\ No newline at end of file
diff --git a/lib/ArduinoNTPd/NTPServer.h b/lib/ArduinoNTPd/NTPServer.h
new file mode 100644
index 000000000..121d905ce
--- /dev/null
+++ b/lib/ArduinoNTPd/NTPServer.h
@@ -0,0 +1,35 @@
+/*
+ * File: NTPServer.h
+ * Description:
+ * NTP server implementation.
+ * Author: Mooneer Salem
+ * License: New BSD License
+ */
+
+#ifndef NTP_SERVER_H
+#define NTP_SERVER_H
+
+class NtpServer
+{
+public:
+ NtpServer(WiFiUDP Port)
+ {
+ timeServerPort_=Port;
+ }
+
+ /*
+ * Begins listening for NTP requests.
+ */
+ bool beginListening(void);
+
+
+ /*
+ * Processes a single NTP request.
+ */
+ bool processOneRequest(uint32_t utc, uint32_t millisecs);
+
+private:
+ WiFiUDP timeServerPort_;
+};
+
+#endif // NTP_SERVER_H
diff --git a/tasmota/xsns_58_GPS.ino b/tasmota/xsns_58_GPS.ino
index f2808f8fd..1871ff85f 100644
--- a/tasmota/xsns_58_GPS.ino
+++ b/tasmota/xsns_58_GPS.ino
@@ -1,5 +1,5 @@
/*
- xsns_92_GPS_UBX.ino - GPS UBLOX support for Sonoff-Tasmota
+ xsns_58_GPS_UBX.ino - GPS UBLOX support for Sonoff-Tasmota
Copyright (C) 2019 Theo Arends, Christian Baars and Adrian Scillato
From ed92cdc74c2f3b063986cad77d629c78fa1fa550 Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Tue, 17 Dec 2019 01:40:56 -0300
Subject: [PATCH 083/559] Fix sensor number and identations
---
tasmota/xsns_58_GPS.ino | 187 +++++++++++++++++++---------------------
1 file changed, 87 insertions(+), 100 deletions(-)
diff --git a/tasmota/xsns_58_GPS.ino b/tasmota/xsns_58_GPS.ino
index 1871ff85f..5f0c2d46b 100644
--- a/tasmota/xsns_58_GPS.ino
+++ b/tasmota/xsns_58_GPS.ino
@@ -20,7 +20,7 @@
Version Date Action Description
--------------------------------------------------------------------------------------------
- 0.9.1.0 20191216 integrate - Added pin specifications from Tasmota WEB UI
+ 0.9.1.0 20191216 integrate - Added pin specifications from Tasmota WEB UI. Minor tweaks.
---
0.9.0.0 20190817 started - further development by Christian Baars - https://github.com/Staars/Sonoff-Tasmota
forked - from arendst/tasmota - https://github.com/arendst/Sonoff-Tasmota
@@ -299,17 +299,6 @@ void UBXinitCFG(void){
UBXSerial->write( pgm_read_byte(UBLOX_INIT+i) );
}
DEBUG_SENSOR_LOG(PSTR("UBX: turn off NMEA"));
-
-/*
- AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_KNX D_ADD " GA #%d: %s " D_TO " %d/%d/%d"),
- Settings.knx_GA_registered,
- device_param_ga[GAop-1],
- GA_FNUM, GA_AREA, GA_FDEF );
-*/
-
-
-
-
}
void UBXTriggerTele(void){
@@ -435,11 +424,10 @@ uint32_t UBXprocessGPS() {
}
}
// DEBUG_SENSOR_LOG(PSTR("UBX: got none or unknown Message"));
- if(data_bytes!=0){
+ if(data_bytes!=0) {
UBX.state.non_empty_loops++;
DEBUG_SENSOR_LOG(PSTR("UBX: got %u bytes, non-empty-loop: %u"), data_bytes, UBX.state.non_empty_loops);
- }
- else{
+ } else {
UBX.state.non_empty_loops = 0; // now a hidden GPS-device reset is unlikely
}
return MT_NONE;
@@ -449,7 +437,7 @@ uint32_t UBXprocessGPS() {
| * callback functions for the download
\*********************************************************************************************/
#ifdef USE_FLOG
-void UBXsendHeader(void){
+void UBXsendHeader(void) {
WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN);
WebServer->sendHeader(F("Content-Disposition"), F("attachment; filename=TASMOTA.gpx"));
WSSend(200, CT_STREAM, F(
@@ -461,17 +449,17 @@ void UBXsendHeader(void){
}
void UBXsendRecord(uint8_t *buf){
- char record[100];
- char stime[32];
- UBX_t::entry_t *entry = (UBX_t::entry_t*)buf;
- snprintf_P(stime, sizeof(stime), GetDT(entry->time).c_str());
- char lat[12];
- char lon[12];
- dtostrfd((double)entry->lat/10000000.0f,7,lat);
- dtostrfd((double)entry->lon/10000000.0f,7,lon);
- snprintf_P(record, sizeof(record),PSTR("\n\t\n\n"),lat ,lon, stime);
- // DEBUG_SENSOR_LOG(PSTR("FLOG: DL %u %u"), Flog->sector.dword_buffer[k+j],Flog->sector.dword_buffer[k+j+1]);
- WebServer->sendContent_P(record);
+ char record[100];
+ char stime[32];
+ UBX_t::entry_t *entry = (UBX_t::entry_t*)buf;
+ snprintf_P(stime, sizeof(stime), GetDT(entry->time).c_str());
+ char lat[12];
+ char lon[12];
+ dtostrfd((double)entry->lat/10000000.0f,7,lat);
+ dtostrfd((double)entry->lon/10000000.0f,7,lon);
+ snprintf_P(record, sizeof(record),PSTR("\n\t\n\n"),lat ,lon, stime);
+ // DEBUG_SENSOR_LOG(PSTR("FLOG: DL %u %u"), Flog->sector.dword_buffer[k+j],Flog->sector.dword_buffer[k+j+1]);
+ WebServer->sendContent_P(record);
}
void UBXsendFooter(void){
@@ -482,8 +470,8 @@ void UBXsendFooter(void){
/********************************************************************************************/
void UBXsendFile(void){
- if (!HttpCheckPriviledgedAccess()) { return; }
- Flog->startDownload(sizeof(UBX.rec_buffer),UBXsendHeader,UBXsendRecord,UBXsendFooter);
+ if (!HttpCheckPriviledgedAccess()) { return; }
+ Flog->startDownload(sizeof(UBX.rec_buffer),UBXsendHeader,UBXsendRecord,UBXsendFooter);
}
#endif //USE_FLOG
/********************************************************************************************/
@@ -512,69 +500,67 @@ void UBXSetRate(uint16_t interval){
void UBXSelectMode(uint16_t mode){
- DEBUG_SENSOR_LOG(PSTR("UBX: set mode to %u"),mode);
- switch(mode){
+ DEBUG_SENSOR_LOG(PSTR("UBX: set mode to %u"),mode);
+ switch(mode){
#ifdef USE_FLOG
- case 0:
- Flog->mode = 0; // write once to all available sectors, then stop
- break;
+ case 0:
+ Flog->mode = 0; // write once to all available sectors, then stop
+ break;
case 1:
- Flog->mode = 1; // write to all available sectors, then restart and overwrite the older ones
- break;
+ Flog->mode = 1; // write to all available sectors, then restart and overwrite the older ones
+ break;
case 2:
- UBX.mode.filter_noise = true; // filter out horizontal drift noise, TODO: find useful values
- break;
+ UBX.mode.filter_noise = true; // filter out horizontal drift noise, TODO: find useful values
+ break;
case 3:
- UBX.mode.filter_noise = false;
- break;
+ UBX.mode.filter_noise = false;
+ break;
case 4:
- Flog->startRecording(true);
- AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: start recording - appending"));
- break;
+ Flog->startRecording(true);
+ AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: start recording - appending"));
+ break;
case 5:
- Flog->startRecording(false);
- AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: start recording - new log"));
- break;
+ Flog->startRecording(false);
+ AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: start recording - new log"));
+ break;
case 6:
- if(Flog->recording == true){
- Flog->stopRecording();
- }
- AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: stop recording"));
- break;
+ if(Flog->recording == true){
+ Flog->stopRecording();
+ }
+ AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: stop recording"));
+ break;
+#endif //USE_FLOG
case 7:
- UBX.mode.send_when_new = 1; // send mqtt on new postion + TELE -> consider to set TELE to a very high value
- break;
+ UBX.mode.send_when_new = 1; // send mqtt on new postion + TELE -> consider to set TELE to a very high value
+ break;
case 8:
- UBX.mode.send_when_new = 0; // only TELE
- break;
+ UBX.mode.send_when_new = 0; // only TELE
+ break;
case 9:
- if (timeServer.beginListening()){
- UBX.mode.runningNTP = true;
- }
- break;
+ if (timeServer.beginListening()){
+ UBX.mode.runningNTP = true;
+ }
+ break;
case 10:
- UBX.mode.runningNTP = false;
- break;
+ UBX.mode.runningNTP = false;
+ break;
case 11:
- UBX.mode.forceUTCupdate = true;
- break;
+ UBX.mode.forceUTCupdate = true;
+ break;
case 12:
- UBX.mode.forceUTCupdate = false;
- break;
+ UBX.mode.forceUTCupdate = false;
+ break;
case 13:
- Settings.latitude = UBX.state.last_lat;
- Settings.longitude = UBX.state.last_lon;
- break;
-
-
-#endif //USE_FLOG
+ Settings.latitude = UBX.state.last_lat;
+ Settings.longitude = UBX.state.last_lon;
+ break;
default:
if(mode>1000 && mode <1066) {
// UBXSetRate(mode-1000); // min. 1001 = 0.001 Hz, but will be converted to 1/65535 anyway ~0.015 Hz, max. 2000 = 1.000 Hz
UBXSetRate(mode-1000); // set interval between measurements in seconds from 1 to 65
}
- break;
- }
+ break;
+ }
UBX.mode.send_UI_only = true;
UBXTriggerTele();
}
@@ -601,8 +587,7 @@ bool UBXHandlePOSLLH(){
UBXTriggerTele();
}
return true; // new position
- }
- else {
+ } else {
DEBUG_SENSOR_LOG(PSTR("UBX: no valid position data"));
}
return false; // no GPS-fix
@@ -611,12 +596,13 @@ bool UBXHandlePOSLLH(){
void UBXHandleSTATUS(){
DEBUG_SENSOR_LOG(PSTR("UBX: gpsFix: %u, valid: %u"),UBX.Message.navStatus.gpsFix, (UBX.Message.navStatus.flags)&1);
if((UBX.Message.navStatus.flags)&1){
- UBX.state.gpsFix = UBX.Message.navStatus.gpsFix; //only store fixed status if flag is valid
+ UBX.state.gpsFix = UBX.Message.navStatus.gpsFix; //only store fixed status if flag is valid
}
else{
- UBX.state.gpsFix = 0; // without valid flag, everything is "no fix"
+ UBX.state.gpsFix = 0; // without valid flag, everything is "no fix"
}
}
+
void UBXHandleTIME(){
DEBUG_SENSOR_LOG(PSTR("UBX: UTC-Time: %u-%u-%u %u:%u:%u"),UBX.Message.navTime.year, UBX.Message.navTime.month ,UBX.Message.navTime.day,UBX.Message.navTime.hour,UBX.Message.navTime.min,UBX.Message.navTime.sec);
if(UBX.Message.navTime.valid.UTC){
@@ -636,7 +622,8 @@ void UBXHandleTIME(){
}
}
-void UBXHandleOther(void){
+void UBXHandleOther(void)
+{
if(UBX.state.non_empty_loops>6){ // we expect only 4-5 non-empty loops in a row, could change with other sensor speed (Hz)
UBXinitCFG(); // this should only happen with lots of NMEA-messages, but it is only a guess!!
AddLog_P(LOG_LEVEL_ERROR, PSTR("UBX: possible device-reset, will re-init"));
@@ -647,7 +634,8 @@ void UBXHandleOther(void){
/********************************************************************************************/
-void UBXTimeServer(){
+void UBXTimeServer()
+{
if(UBX.mode.runningNTP){
timeServer.processOneRequest(Rtc.utc_time, UBX.state.last_iTOW%1000);
}
@@ -662,17 +650,17 @@ void UBXLoop(void)
switch(msgType){
case MT_NAV_POSLLH:
- new_position = UBXHandlePOSLLH();
- break;
+ new_position = UBXHandlePOSLLH();
+ break;
case MT_NAV_STATUS:
- UBXHandleSTATUS();
- break;
+ UBXHandleSTATUS();
+ break;
case MT_NAV_TIME:
- UBXHandleTIME();
- break;
+ UBXHandleTIME();
+ break;
default:
- UBXHandleOther();
- break;
+ UBXHandleOther();
+ break;
}
#ifdef USE_FLOG
@@ -752,8 +740,7 @@ void UBXShow(bool json)
if(UBX.mode.send_UI_only){
uint32_t i = UBX.state.log_interval / 10;
ResponseAppend_P(PSTR("\"fil\":%u,\"int\":%u}"),UBX.mode.filter_noise, i);
- }
- else{
+ } else {
ResponseAppend_P(PSTR("\"lat\":%s,\"lon\":%s,\"height\":%s,\"hAcc\":%s,\"vAcc\":%s}"), lat, lon, height, hAcc, vAcc);
}
#ifdef USE_FLOG
@@ -768,7 +755,7 @@ void UBXShow(bool json)
#ifdef USE_FLOG
WSContentSend_PD(HTTP_SNS_FLOGVER, Flog->num_sectors, Flog->size, Flog->current_sector, Flog->sectors_left, Flog->sector.header.physical_start_sector);
if(Flog->recording){
- WSContentSend_PD(HTTP_SNS_FLOGREC, Flog->sector.header.buf_pointer - 8);
+ WSContentSend_PD(HTTP_SNS_FLOGREC, Flog->sector.header.buf_pointer - 8);
}
#endif //USE_FLOG
#endif // DEBUG_TASMOTA_SENSOR
@@ -794,10 +781,10 @@ void UBXShow(bool json)
bool UBXCmd(void) {
bool serviced = true;
- if (XdrvMailbox.data_len > 0) {
- UBXSelectMode(XdrvMailbox.payload);
- Response_P(S_JSON_UBX_COMMAND_NVALUE, XdrvMailbox.command, XdrvMailbox.payload);
- }
+ if (XdrvMailbox.data_len > 0) {
+ UBXSelectMode(XdrvMailbox.payload);
+ Response_P(S_JSON_UBX_COMMAND_NVALUE, XdrvMailbox.command, XdrvMailbox.payload);
+ }
return serviced;
}
@@ -805,7 +792,7 @@ bool UBXCmd(void) {
* Interface
\*********************************************************************************************/
-#define XSNS_58 58
+#define XSNS_58 58
bool Xsns58(uint8_t function)
{
@@ -816,12 +803,12 @@ bool Xsns58(uint8_t function)
case FUNC_INIT:
UBXDetect();
break;
- case FUNC_COMMAND_SENSOR:
- if (XSNS_92 == XdrvMailbox.index){
+ case FUNC_COMMAND_SENSOR:
+ if (XSNS_58 == XdrvMailbox.index){
result = UBXCmd();
}
break;
- case FUNC_EVERY_50_MSECOND:
+ case FUNC_EVERY_50_MSECOND:
UBXTimeServer();
break;
case FUNC_EVERY_100_MSECOND:
@@ -834,8 +821,8 @@ bool Xsns58(uint8_t function)
break;
#ifdef USE_FLOG
case FUNC_WEB_ADD_HANDLER:
- WebServer->on("/UBX", UBXsendFile);
- break;
+ WebServer->on("/UBX", UBXsendFile);
+ break;
#endif //USE_FLOG
case FUNC_JSON_APPEND:
UBXShow(1);
From 2d75cb95763aa8da58d07b28e3f76a05c8c9b3ad Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Tue, 17 Dec 2019 02:43:35 -0300
Subject: [PATCH 084/559] Fix more identations
---
tasmota/xsns_58_GPS.ino | 41 +++++++++++++++++++++--------------------
1 file changed, 21 insertions(+), 20 deletions(-)
diff --git a/tasmota/xsns_58_GPS.ino b/tasmota/xsns_58_GPS.ino
index 5f0c2d46b..58178b976 100644
--- a/tasmota/xsns_58_GPS.ino
+++ b/tasmota/xsns_58_GPS.ino
@@ -44,46 +44,46 @@ The serial pins are GPX_RX and GPS_TX, no further installation steps needed. To
## Commands:
-+ sensor92 0
++ sensor58 0
write to all available sectors, then restart and overwrite the older ones
-+ sensor92 1
++ sensor58 1
write to all available sectors, then restart and overwrite the older ones
-+ sensor92 2
++ sensor58 2
filter out horizontal drift noise
-+ sensor92 3
++ sensor58 3
turn off noise filter
-+ sensor92 4
++ sensor58 4
start recording, new data will be appended
-+ sensor92 5
++ sensor58 5
start new recording, old data will lost
-+ sensor92 6
++ sensor58 6
stop recording, download link will be visible in Web-UI
-+ sensor92 7
++ sensor58 7
send mqtt on new postion + TELE -> consider to set TELE to a very high value
-+ sensor92 8
++ sensor58 8
only TELE message
-+ sensor92 9
++ sensor58 9
start NTP-server
-+ sensor92 10
++ sensor58 10
deactivate NTP-server
-+ sensor92 11
++ sensor58 11
force update of Tasmota-system-UTC with every new GPS-time-message
-+ sensor92 12
++ sensor58 12
do not update of Tasmota-system-UTC with every new GPS-time-message
-+ sensor92 13
++ sensor58 13
set latitude and longitude in settings
@@ -91,7 +91,7 @@ The serial pins are GPX_RX and GPS_TX, no further installation steps needed. To
## Rules examples for SSD1306 32x128
-rule1 on tele-GPS#lat do DisplayText [s1p21c1l01f1]LAT: %value% endon on tele-GPS#lon do DisplayText [s1p21c1l2]LON: %value% endon on switch1#state==3 do sensor92 4 endon on switch1#state==2 do sensor92 6 endon
+rule1 on tele-GPS#lat do DisplayText [s1p21c1l01f1]LAT: %value% endon on tele-GPS#lon do DisplayText [s1p21c1l2]LON: %value% endon on switch1#state==3 do sensor58 4 endon on switch1#state==2 do sensor58 6 endon
rule2 on tele-GPS#int>9 do DisplayText [f0c9l4]I%value% endon on tele-GPS#int<10 do DisplayText [f0c9l4]I0%value% endon on tele-GPS#fil==1 do DisplayText [f0c18l4]F endon on tele-GPS#fil==0 do DisplayText [f0c18l4]N endon
@@ -715,7 +715,7 @@ counter++;
const char kGPSFix5[] PROGMEM = "Time only fix";
const char * kGPSFix[] PROGMEM ={kGPSFix0, kGPSFix1, kGPSFix2, kGPSFix3, kGPSFix4, kGPSFix5};
-// const char UBX_GOOGLE_MAPS[] ="";
+// const char UBX_GOOGLE_MAPS[] ="";
#endif // USE_WEBSERVER
@@ -735,7 +735,8 @@ void UBXShow(bool json)
dtostrfd((double)UBX.state.last_vAcc/1000.0f,3,hAcc);
dtostrfd((double)UBX.state.last_hAcc/1000.0f,3,vAcc);
- if (json) {
+ if (json)
+ {
ResponseAppend_P(PSTR(",\"GPS\":{"));
if(UBX.mode.send_UI_only){
uint32_t i = UBX.state.log_interval / 10;
@@ -748,9 +749,9 @@ void UBXShow(bool json)
#endif //USE_FLOG
UBX.mode.send_UI_only = false;
#ifdef USE_WEBSERVER
- } else {
+ } else {
WSContentSend_PD(HTTP_SNS_GPS, lat, lon, height, hAcc, vAcc, kGPSFix[UBX.state.gpsFix]);
- // WSContentSend_PD(UBX_GOOGLE_MAPS, lat, lon);
+ //WSContentSend_P(UBX_GOOGLE_MAPS, lat, lon);
#ifdef DEBUG_TASMOTA_SENSOR
#ifdef USE_FLOG
WSContentSend_PD(HTTP_SNS_FLOGVER, Flog->num_sectors, Flog->size, Flog->current_sector, Flog->sectors_left, Flog->sector.header.physical_start_sector);
@@ -771,7 +772,7 @@ void UBXShow(bool json)
WSContentSend_P(HTTP_SNS_NTPSERVER);
}
#endif // USE_WEBSERVER
- }
+ }
}
From fa56e958e07008d14529dd113dc993c39e7d3d0d Mon Sep 17 00:00:00 2001
From: root
Date: Tue, 26 Nov 2019 16:51:53 +0100
Subject: [PATCH 085/559] domoticz -> tasmota support
---
tasmota/i18n.h | 1 -
tasmota/xdrv_07_domoticz.ino | 48 +++++++++++++++++++++++++++++++++++-
tasmota/xdrv_27_shutter.ino | 8 +++---
3 files changed, 51 insertions(+), 6 deletions(-)
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index fed6930d7..df7cff12b 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -494,7 +494,6 @@
#define D_JSON_MOTOR_MIS "setMIS"
#endif
- // Commands xdrv_27_Shutter.ino
#ifdef USE_SHUTTER
#define D_PRFX_SHUTTER "Shutter"
#define D_CMND_SHUTTER_OPEN "Open"
diff --git a/tasmota/xdrv_07_domoticz.ino b/tasmota/xdrv_07_domoticz.ino
index f5e8af19c..9d24d6edf 100644
--- a/tasmota/xdrv_07_domoticz.ino
+++ b/tasmota/xdrv_07_domoticz.ino
@@ -51,6 +51,10 @@ uint32_t domoticz_fan_debounce = 0; // iFan02 state debounce timer
bool domoticz_subscribe = false;
bool domoticz_update_flag = true;
+#ifdef USE_SHUTTER
+bool domoticz_is_shutter = false;
+#endif // USE_SHUTTER
+
int DomoticzBatteryQuality(void)
{
// Battery 0%: ESP 2.6V (minimum operating voltage is 2.5)
@@ -108,6 +112,11 @@ void MqttPublishDomoticzPowerState(uint8_t device)
if (Settings.flag.mqtt_enabled) { // SetOption3 - Enable MQTT
if ((device < 1) || (device > devices_present)) { device = 1; }
if (Settings.domoticz_relay_idx[device -1]) {
+#ifdef USE_SHUTTER
+ if (domoticz_is_shutter) {
+ // Shutter is updated by sensor update - power state should not be sent
+ } else {
+#endif // USE_SHUTTER
#ifdef USE_SONOFF_IFAN
if (IsModuleIfan() && (device > 1)) {
// Fan handled by MqttPublishDomoticzFanState
@@ -121,6 +130,9 @@ void MqttPublishDomoticzPowerState(uint8_t device)
#ifdef USE_SONOFF_IFAN
}
#endif // USE_SONOFF_IFAN
+#ifdef USE_SHUTTER
+ }
+#endif //USE_SHUTTER
}
}
}
@@ -140,6 +152,13 @@ void DomoticzMqttUpdate(void)
if (domoticz_update_timer <= 0) {
domoticz_update_timer = Settings.domoticz_update_timer;
for (uint32_t i = 1; i <= devices_present; i++) {
+#ifdef USE_SHUTTER
+ if (domoticz_is_shutter)
+ {
+ // no power state updates for shutters
+ break;
+ }
+#endif // USE_SHUTTER
#ifdef USE_SONOFF_IFAN
if (IsModuleIfan() && (i > 1)) {
MqttPublishDomoticzFanState();
@@ -163,6 +182,7 @@ void DomoticzMqttSubscribe(void)
domoticz_subscribe = true;
}
}
+
if (domoticz_subscribe) {
char stopic[TOPSZ];
snprintf_P(stopic, sizeof(stopic), PSTR(DOMOTICZ_OUT_TOPIC "/#")); // domoticz topic
@@ -230,6 +250,8 @@ bool DomoticzMqttData(void)
for (uint32_t i = 0; i < maxdev; i++) {
if (idx == Settings.domoticz_relay_idx[i]) {
bool iscolordimmer = strcmp_P(domoticz["dtype"],PSTR("Color Switch")) == 0;
+ bool isShutter = strcmp_P(domoticz["dtype"],PSTR("Light/Switch")) == 0 & strncmp_P(domoticz["switchType"],PSTR("Blinds"), 6) == 0;
+
char stemp1[10];
snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), i +1);
#ifdef USE_SONOFF_IFAN
@@ -252,6 +274,28 @@ bool DomoticzMqttData(void)
found = true;
} else
#endif // USE_SONOFF_IFAN
+#ifdef USE_SHUTTER
+ if (isShutter)
+ {
+ if (domoticz.containsKey("nvalue")) {
+ nvalue = domoticz["nvalue"];
+ }
+
+ uint8_t position = 0;
+ if (domoticz.containsKey("svalue1")) {
+ position = domoticz["svalue1"];
+ }
+ if (nvalue != 2) {
+ position = nvalue == 0 ? 0 : 100;
+ }
+
+ snprintf_P(XdrvMailbox.topic, TOPSZ, PSTR("/" D_PRFX_SHUTTER D_CMND_SHUTTER_POSITION));
+ snprintf_P(XdrvMailbox.data, XdrvMailbox.data_len, PSTR("%d"), position);
+ XdrvMailbox.data_len = position > 99 ? 3 : (position > 9 ? 2 : 1);
+
+ found = true;
+ } else
+#endif // USE_SHUTTER
if (iscolordimmer && 10 == nvalue) { // Color_SetColor
JsonObject& color = domoticz["Color"];
uint16_t level = nvalue = domoticz["svalue1"];
@@ -573,7 +617,6 @@ void DomoticzSaveSettings(void)
bool Xdrv07(uint8_t function)
{
bool result = false;
-
if (Settings.flag.mqtt_enabled) { // SetOption3 - Enable MQTT
switch (function) {
case FUNC_EVERY_SECOND:
@@ -592,6 +635,9 @@ bool Xdrv07(uint8_t function)
#endif // USE_WEBSERVER
case FUNC_MQTT_SUBSCRIBE:
DomoticzMqttSubscribe();
+#ifdef USE_SHUTTER
+ if (Settings.domoticz_sensor_idx[DZ_SHUTTER]) { domoticz_is_shutter = true; }
+#endif // USE_SHUTTER
break;
case FUNC_MQTT_INIT:
domoticz_update_timer = 2;
diff --git a/tasmota/xdrv_27_shutter.ino b/tasmota/xdrv_27_shutter.ino
index e13bba771..97212ad6e 100644
--- a/tasmota/xdrv_27_shutter.ino
+++ b/tasmota/xdrv_27_shutter.ino
@@ -528,12 +528,12 @@ void CmndShutterPosition(void)
//limit the payload
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: Pos. in: payload %s (%d), payload %d, idx %d, src %d"), XdrvMailbox.data , XdrvMailbox.data_len, XdrvMailbox.payload , XdrvMailbox.index, last_source );
+ // value 0 with data_len > 0 can mean Open
if (XdrvMailbox.data_len > 1 && XdrvMailbox.payload <=0) {
UpperCase(XdrvMailbox.data, XdrvMailbox.data);
- if (!strcmp(XdrvMailbox.data,"UP")) { CmndShutterOpen(); }
- if (!strcmp(XdrvMailbox.data,"DOWN")) { CmndShutterClose(); }
- if (!strcmp(XdrvMailbox.data,"STOP")) { CmndShutterStop(); }
- return;
+ if (!strcmp(XdrvMailbox.data,"UP")) { CmndShutterOpen(); return; }
+ if (!strcmp(XdrvMailbox.data,"DOWN")) { CmndShutterClose(); return; }
+ if (!strcmp(XdrvMailbox.data,"STOP")) { CmndShutterStop(); return; }
}
int8_t target_pos_percent = XdrvMailbox.payload < 0 ? 0 : (XdrvMailbox.payload > 100 ? 100 : XdrvMailbox.payload);
From 082f5e40cefeda76ab458a93a03d4335840c2caa Mon Sep 17 00:00:00 2001
From: ahoiahoi <45395388+ahoiahoi@users.noreply.github.com>
Date: Tue, 26 Nov 2019 16:58:05 +0100
Subject: [PATCH 086/559] accidentally deleted linefeed
---
tasmota/i18n.h | 1 +
tasmota/xdrv_07_domoticz.ino | 1 +
2 files changed, 2 insertions(+)
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index df7cff12b..fed6930d7 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -494,6 +494,7 @@
#define D_JSON_MOTOR_MIS "setMIS"
#endif
+ // Commands xdrv_27_Shutter.ino
#ifdef USE_SHUTTER
#define D_PRFX_SHUTTER "Shutter"
#define D_CMND_SHUTTER_OPEN "Open"
diff --git a/tasmota/xdrv_07_domoticz.ino b/tasmota/xdrv_07_domoticz.ino
index 9d24d6edf..b20e0335c 100644
--- a/tasmota/xdrv_07_domoticz.ino
+++ b/tasmota/xdrv_07_domoticz.ino
@@ -617,6 +617,7 @@ void DomoticzSaveSettings(void)
bool Xdrv07(uint8_t function)
{
bool result = false;
+
if (Settings.flag.mqtt_enabled) { // SetOption3 - Enable MQTT
switch (function) {
case FUNC_EVERY_SECOND:
From efc7dc2388988c6233cbf97cb5b65f36ea30976b Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 17 Dec 2019 10:54:38 +0100
Subject: [PATCH 087/559] Add fallback functionality from next version
Add fallback functionality from next version 8.x
---
tasmota/CHANGELOG.md | 2 +-
tasmota/settings.ino | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index a466a3212..ad2ad30d4 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -5,7 +5,7 @@
- Change some more Settings locations freeing up space for future single char allowing variable length text
- Add Zigbee send automatic ZigbeeRead after sending a command
- Add Zigbee improving Occupancy:false detection for Aqara sensor
-- Add fallback functionality from next version 7.1.2.7
+- Add fallback functionality from next version 8.x
### 7.1.2.5 20191213
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index d1d3fc1e8..d5c59246f 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -471,7 +471,7 @@ bool SettingsUpdateText(uint32_t index, const char* replace_me)
char replace[replace_len +1];
memcpy(replace, replace_me, sizeof(replace));
- if (Settings.version < 0x07010207) {
+ if (Settings.version < 0x08000000) {
uint32_t idx = 0;
switch (index) {
case SET_OTAURL: strlcpy(Settings.ota_url, replace, sizeof(Settings.ota_url)); break;
@@ -575,7 +575,7 @@ char* SettingsText(uint32_t index)
char* position = Settings.ota_url;
- if (Settings.version < 0x07010207) {
+ if (Settings.version < 0x08000000) {
uint32_t idx = 0;
switch (index) {
case SET_MQTTPREFIX3: idx++;
@@ -1387,7 +1387,7 @@ void SettingsDelta(void)
memcpy((char*)&Settings.serial_config, (char*)&Settings.ex_serial_config, 5); // 1E4 -> EFE
}
- if ((VERSION < 0x7010207) && (Settings.version > VERSION)) {
+ if ((VERSION < 0x08000000) && (Settings.version > VERSION)) {
char temp[strlen(SettingsText(SET_OTAURL)) +1]; strncpy(temp, SettingsText(SET_OTAURL), sizeof(temp));
char temp21[strlen(SettingsText(SET_MQTTPREFIX1)) +1]; strncpy(temp21, SettingsText(SET_MQTTPREFIX1), sizeof(temp21));
char temp22[strlen(SettingsText(SET_MQTTPREFIX2)) +1]; strncpy(temp22, SettingsText(SET_MQTTPREFIX2), sizeof(temp22));
From 359770c23eedf86f5c14ed098dde5cc12c7bb089 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 17 Dec 2019 11:43:22 +0100
Subject: [PATCH 088/559] Update support_statistics.ino
---
tasmota/support_statistics.ino | 38 +++++++++++++++++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/tasmota/support_statistics.ino b/tasmota/support_statistics.ino
index 1907b1edc..78334e7eb 100644
--- a/tasmota/support_statistics.ino
+++ b/tasmota/support_statistics.ino
@@ -27,7 +27,43 @@
String GetStatistics(void)
{
char data[40];
- snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/%d\""), GetSettingsTextLen(), settings_text_size); // Char Usage Ratio
+
+ if (Settings.version < 0x08000000) {
+ uint32_t str_len = 0;
+ for (uint32_t i = 0; i < 2; i++) {
+ str_len += strlen(Settings.sta_ssid[i]);
+ str_len += strlen(Settings.sta_pwd[i]);
+ }
+ for (uint32_t i = 0; i < 3; i++) {
+ str_len += strlen(Settings.mqtt_prefix[i]);
+ str_len += strlen(Settings.ntp_server[i]);
+ }
+ for (uint32_t i = 0; i < 4; i++) {
+ str_len += strlen(Settings.state_text[i]);
+ str_len += strlen(Settings.friendlyname[i]);
+ }
+ for (uint32_t i = 0; i < MAX_RULE_MEMS; i++) {
+ str_len += strlen(Settings.mems[i]);
+ }
+
+ str_len += strlen(Settings.ota_url);
+ str_len += strlen(Settings.hostname);
+ str_len += strlen(Settings.syslog_host);
+ str_len += strlen(Settings.mqtt_host);
+ str_len += strlen(Settings.mqtt_client);
+ str_len += strlen(Settings.mqtt_user);
+ str_len += strlen(Settings.mqtt_pwd);
+ str_len += strlen(Settings.mqtt_topic);
+ str_len += strlen(Settings.button_topic);
+ str_len += strlen(Settings.switch_topic);
+ str_len += strlen(Settings.mqtt_grptopic);
+ str_len += strlen(Settings.web_password);
+ str_len += strlen(Settings.mqtt_fulltopic);
+ str_len += strlen(Settings.cors_domain);
+ snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/1151\""), str_len); // Char Usage Ratio
+ } else {
+ snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/%d\""), GetSettingsTextLen(), settings_text_size); // Char Usage Ratio
+ }
return String(data);
}
From 78b1363add7637e853a98f5ce417451cd36a1211 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 17 Dec 2019 12:08:32 +0100
Subject: [PATCH 089/559] Update support_statistics.ino
---
tasmota/support_statistics.ino | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/tasmota/support_statistics.ino b/tasmota/support_statistics.ino
index 78334e7eb..b8f65bd20 100644
--- a/tasmota/support_statistics.ino
+++ b/tasmota/support_statistics.ino
@@ -45,7 +45,6 @@ String GetStatistics(void)
for (uint32_t i = 0; i < MAX_RULE_MEMS; i++) {
str_len += strlen(Settings.mems[i]);
}
-
str_len += strlen(Settings.ota_url);
str_len += strlen(Settings.hostname);
str_len += strlen(Settings.syslog_host);
@@ -60,7 +59,7 @@ String GetStatistics(void)
str_len += strlen(Settings.web_password);
str_len += strlen(Settings.mqtt_fulltopic);
str_len += strlen(Settings.cors_domain);
- snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/1151\""), str_len); // Char Usage Ratio
+ snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/1151\""), 37 + str_len); // Char Usage Ratio
} else {
snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/%d\""), GetSettingsTextLen(), settings_text_size); // Char Usage Ratio
}
From 5968d2b28aa163e0ffde1a43261f1ad70bb7f06d Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 17 Dec 2019 15:13:47 +0100
Subject: [PATCH 090/559] Change tasmota-basic to tasmota-lite
Change tasmota-basic.bin and FIRMWARE_BASIC to tasmota-lite.bin and FIRMWARE_LITE
---
.travis.yml | 2 +-
BUILDS.md | 12 ++++++------
RELEASENOTES.md | 2 +-
platformio.ini | 2 +-
platformio_override_sample.ini | 4 ++--
platformio_tasmota_env.ini | 4 ++--
tasmota/CHANGELOG.md | 1 +
tasmota/my_user_config.h | 2 +-
tasmota/tasmota_post.h | 8 ++++----
9 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 911f3423e..ffd47f546 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,7 +12,7 @@ cache: false
env:
- ENV=tasmota
- ENV=tasmota-minimal
- - ENV=tasmota-basic
+ - ENV=tasmota-lite
- ENV=tasmota-knx
- ENV=tasmota-sensors
- ENV=tasmota-display
diff --git a/BUILDS.md b/BUILDS.md
index 74c0a7a35..d21fd9f15 100644
--- a/BUILDS.md
+++ b/BUILDS.md
@@ -1,6 +1,6 @@
## Available Features and Sensors
-| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks
+| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
|-----------------------|---------|-------|--------|-----|---------|----|---------|--------
| MY_LANGUAGE en-GB | x | x | x | x | x | x | x |
| USE_ARDUINO_OTA | - | - | - | - | - | - | - |
@@ -27,7 +27,7 @@
| USE_EXPRESSION | - | - | - | - | - | - | - |
| SUPPORT_IF_STATEMENT | - | - | - | - | - | - | - |
| | | | | | | | |
-| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks
+| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
| ROTARY_V1 | - | - | - | - | - | - | - |
| USE_SONOFF_RF | - | - | x | x | x | - | - |
| USE_RF_FLASH | - | - | x | x | x | - | - |
@@ -42,7 +42,7 @@
| USE_DEEPSLEEP | - | - | x | - | x | - | - |
| USE_EXS_DIMMER | - | - | x | x | - | - | - |
| | | | | | | | |
-| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks
+| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
| USE_LIGHT | - | x | x | x | x | x | x |
| USE_WS2812 | - | - | x | x | x | - | x |
| USE_WS2812_DMA | - | - | - | - | - | - | - |
@@ -69,7 +69,7 @@
| USE_MAX31855 | - | - | - | - | x | - | - |
| USE_MAX31865 | - | - | - | - | - | - | - |
| | | | | | | | |
-| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks
+| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
| USE_I2C | - | - | x | x | x | - | x |
| USE_SHT | - | - | x | x | x | - | x |
| USE_HTU | - | - | x | x | x | - | x |
@@ -107,7 +107,7 @@
| USE_PCF8574 | - | - | - | - | - | - | - |
| USE_HIH6 | - | - | - | - | x | - | - |
| | | | | | | | |
-| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks
+| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
| USE_SPI | - | - | - | - | - | - | x |
| USE_MHZ19 | - | - | x | x | x | - | x |
| USE_SENSEAIR | - | - | x | x | x | - | x |
@@ -133,7 +133,7 @@
| USE_A4988_STEPPER | - | - | - | - | - | - | - |
| USE_TASMOTA_SLAVE | - | - | - | - | - | - | - | Experimental
| | | | | | | | |
-| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks
+| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
| USE_DISPLAY | - | - | - | - | - | - | x |
| USE_DISPLAY_LCD | - | - | - | - | - | - | x |
| USE_DISPLAY_SSD1306 | - | - | - | - | - | - | x |
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 4341ec587..b8220e8d3 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -34,7 +34,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- **tasmota.bin** = The Tasmota version with sensors. **RECOMMENDED RELEASE BINARY**
- **tasmota-BG.bin** to **tasmota-TW.bin** = The Tasmota version in different languages.
-- **tasmota-basic.bin** = The Basic version without most sensors.
+- **tasmota-lite.bin** = The Lite version without most sensors.
- **tasmota-knx.bin** = The Knx version without some features but adds KNX support.
- **tasmota-sensors.bin** = The Sensors version adds more useful sensors.
- **tasmota-ir** = The InfraRed Receiver and transmitter version allowing all available protocols provided by library IRremoteESP8266 but without most other features.
diff --git a/platformio.ini b/platformio.ini
index d47eadafb..6e73715d4 100755
--- a/platformio.ini
+++ b/platformio.ini
@@ -20,7 +20,7 @@ default_envs =
; tasmota
; tasmota-ircustom ; alternative to 'tasmota' with full IR protocols activated, you will need to disable some features to keep code not too big
; tasmota-minimal
-; tasmota-basic
+; tasmota-lite
; tasmota-knx
; tasmota-sensors
; tasmota-display
diff --git a/platformio_override_sample.ini b/platformio_override_sample.ini
index 6cbd749c4..9ac4084cd 100644
--- a/platformio_override_sample.ini
+++ b/platformio_override_sample.ini
@@ -19,7 +19,7 @@ default_envs =
; tasmota-debug
; tasmota-ircustom ; alternative to 'tasmota' with full IR protocols activated, you will need to disable some features to keep code not too big
; tasmota-minimal
-; tasmota-basic
+; tasmota-lite
; tasmota-knx
; tasmota-sensors
; tasmota-display
@@ -36,7 +36,7 @@ build_flags = ${core_active.build_flags}
; *** Optional Firmware configurations
; -DFIRMWARE_MINIMAL
; -DFIRMWARE_SENSORS
-; -DFIRMWARE_BASIC
+; -DFIRMWARE_LITE
; -DFIRMWARE_KNX_NO_EMULATION
; -DFIRMWARE_DISPLAYS
; -DFIRMWARE_IR
diff --git a/platformio_tasmota_env.ini b/platformio_tasmota_env.ini
index 38aaf2223..fd0571125 100644
--- a/platformio_tasmota_env.ini
+++ b/platformio_tasmota_env.ini
@@ -18,8 +18,8 @@ extra_scripts = ${common.extra_scripts}
[env:tasmota-minimal]
build_flags = ${common.build_flags} -DFIRMWARE_MINIMAL
-[env:tasmota-basic]
-build_flags = ${common.build_flags} -DFIRMWARE_BASIC
+[env:tasmota-lite]
+build_flags = ${common.build_flags} -DFIRMWARE_LITE
[env:tasmota-knx]
build_flags = ${common.build_flags} -DFIRMWARE_KNX_NO_EMULATION
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index ad2ad30d4..90f29af2a 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -3,6 +3,7 @@
### 7.1.2.6 20191214
- Change some more Settings locations freeing up space for future single char allowing variable length text
+- Change tasmota-basic.bin and FIRMWARE_BASIC to tasmota-lite.bin and FIRMWARE_LITE
- Add Zigbee send automatic ZigbeeRead after sending a command
- Add Zigbee improving Occupancy:false detection for Aqara sensor
- Add fallback functionality from next version 8.x
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 5ff6bb6a2..04318d9c8 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -570,7 +570,7 @@
* See RELEASENOTES.md for selected features
\*********************************************************************************************/
-//#define FIRMWARE_BASIC // Create tasmota-basic with no sensors
+//#define FIRMWARE_LITE // Create tasmota-lite with no sensors
//#define FIRMWARE_SENSORS // Create tasmota-sensors with useful sensors enabled
//#define FIRMWARE_KNX_NO_EMULATION // Create tasmota-knx with KNX but without Emulation
//#define FIRMWARE_DISPLAYS // Create tasmota-display with display drivers enabled
diff --git a/tasmota/tasmota_post.h b/tasmota/tasmota_post.h
index cc47e3fc1..75f35cd92 100644
--- a/tasmota/tasmota_post.h
+++ b/tasmota/tasmota_post.h
@@ -390,17 +390,17 @@ char* ToHex_P(const unsigned char * in, size_t insz, char * out, size_t outsz, c
#endif // FIRMWARE_IR
/*********************************************************************************************\
- * [tasmota-basic.bin]
+ * [tasmota-lite.bin]
* Provide an image without sensors
\*********************************************************************************************/
-#ifdef FIRMWARE_BASIC
+#ifdef FIRMWARE_LITE
#undef CODE_IMAGE
#define CODE_IMAGE 4
#undef APP_SLEEP
-#define APP_SLEEP 1 // Default to sleep = 1 for FIRMWARE_BASIC
+#define APP_SLEEP 1 // Default to sleep = 1 for FIRMWARE_LITE
#undef USE_ARDUINO_OTA // Disable support for Arduino OTA
#undef USE_DOMOTICZ // Disable Domoticz
@@ -502,7 +502,7 @@ char* ToHex_P(const unsigned char * in, size_t insz, char * out, size_t outsz, c
#undef CODE_IMAGE
#define CODE_IMAGE 1
-#undef FIRMWARE_BASIC // Disable tasmota-basic with no sensors
+#undef FIRMWARE_LITE // Disable tasmota-lite with no sensors
#undef FIRMWARE_SENSORS // Disable tasmota-sensors with useful sensors enabled
#undef FIRMWARE_KNX_NO_EMULATION // Disable tasmota-knx with KNX but without Emulation
#undef FIRMWARE_DISPLAYS // Disable tasmota-display with display drivers enabled
From 5b80d82054d0adcf7a776621493af6ff1ea01abd Mon Sep 17 00:00:00 2001
From: Michael Ingraham <34340210+meingraham@users.noreply.github.com>
Date: Tue, 17 Dec 2019 13:59:03 -0500
Subject: [PATCH 091/559] wiki link
---
.github/ISSUE_TEMPLATE/Bug_report.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md
index 4b4027bf8..a73024342 100644
--- a/.github/ISSUE_TEMPLATE/Bug_report.md
+++ b/.github/ISSUE_TEMPLATE/Bug_report.md
@@ -29,7 +29,7 @@ _Make sure your have performed every step and checked the applicable boxes befor
- [ ] Read the [Contributing Guide and Policy](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md) and [the Code of Conduct](https://github.com/arendst/Tasmota/blob/development/CODE_OF_CONDUCT.md)
- [ ] Searched the problem in [issues](https://github.com/arendst/Tasmota/issues)
-- [ ] Searched the problem in the [wiki](https://github.com/arendst/Tasmota/wiki/Troubleshooting)
+- [ ] Searched the problem in the [wiki](https://tasmota.github.io/docs/#/help/FAQ)
- [ ] Searched the problem in the [forum](https://groups.google.com/d/forum/sonoffusers)
- [ ] Searched the problem in the [chat](https://discord.gg/Ks2Kzd4)
- [ ] Device used (e.g., Sonoff Basic): _____
From d199cfcc394618883740c01939fe09b056294d8c Mon Sep 17 00:00:00 2001
From: Stefan Oskamp <57906326+stefan-oskamp@users.noreply.github.com>
Date: Tue, 17 Dec 2019 21:25:51 +0100
Subject: [PATCH 092/559] Added DHT12
Refer to issue #7229
---
I2CDEVICES.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/I2CDEVICES.md b/I2CDEVICES.md
index 73f4a9c6b..6d0de4e1a 100644
--- a/I2CDEVICES.md
+++ b/I2CDEVICES.md
@@ -61,4 +61,5 @@ Index | Define | Driver | Device | Address(es) | Description
38 | USE_DISPLAY_ILI9488 | xdsp_08 | FT6236 | 0x38 | Touch panel controller
39 | USE_DISPLAY_RA8876 | xdsp_10 | FT5316 | 0x38 | Touch panel controller
40 | USE_TSL2591 | xsns_57 | TLS2591 | 0x29 | Light intensity sensor
+ 41 | USE_DHT12 | xsns_58 | DHT12 | 0x5C | Temperature and humidity sensor
From 9a7dfe7178449caa21f00838ccb608047d198f5a Mon Sep 17 00:00:00 2001
From: Stefan Oskamp <57906326+stefan-oskamp@users.noreply.github.com>
Date: Tue, 17 Dec 2019 21:31:01 +0100
Subject: [PATCH 093/559] Driver for I2C sensor DHT12
Refer to issue #7229
---
tasmota/xsns_58_dht12.ino | 140 ++++++++++++++++++++++++++++++++++++++
1 file changed, 140 insertions(+)
create mode 100644 tasmota/xsns_58_dht12.ino
diff --git a/tasmota/xsns_58_dht12.ino b/tasmota/xsns_58_dht12.ino
new file mode 100644
index 000000000..1c60329b8
--- /dev/null
+++ b/tasmota/xsns_58_dht12.ino
@@ -0,0 +1,140 @@
+/*
+ xsns_58_dht12.ino - DHT12 I2C temperature and humidity sensor support for Tasmota
+
+ Copyright (C) 2019 Stefan Oskamp 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 .
+*/
+
+#ifdef USE_I2C
+#ifdef USE_DHT12
+/*********************************************************************************************\
+ * DHT12 - Temperature and Humidity
+ *
+ * I2C Address: 0x5C
+\*********************************************************************************************/
+
+#define XSNS_58 58
+#define XI2C_41 41 // See I2CDEVICES.md
+
+#define DHT12_ADDR (uint8_t) 0x5C
+
+char dht12_name[] = "DHT12-0x00";
+uint8_t dht12_count = 0;
+float dht12_temperature = NAN;
+float dht12_humidity = NAN;
+
+bool Dht12Read(void)
+{
+ Wire.beginTransmission(DHT12_ADDR);
+ Wire.write(0);
+ if (Wire.endTransmission() != 0) {
+ return false;
+ }
+ delay(50);
+ Wire.requestFrom(DHT12_ADDR, (uint8_t) 5);
+ delay(5);
+ uint8_t humidity = Wire.read();
+ uint8_t humidityTenth = Wire.read();
+ uint8_t temp = Wire.read();
+ uint8_t tempTenth = Wire.read();
+ uint8_t checksum = Wire.read();
+ dht12_humidity = (float) humidity + (float) humidityTenth/(float) 10.0;
+ dht12_temperature = (float) temp + (float) tempTenth/(float) 10.0;
+ return (!isnan(dht12_temperature) && !isnan(dht12_humidity));
+}
+
+void Dht12Detect(void)
+{
+ if (Dht12Read()) {
+ snprintf_P(log_data, sizeof(log_data), S_LOG_I2C_FOUND_AT, dht12_name, DHT12_ADDR);
+ AddLog(LOG_LEVEL_DEBUG);
+ snprintf_P(dht12_name, sizeof(dht12_name), PSTR("%s%c0x%02X"), "DHT12", IndexSeparator(), DHT12_ADDR);
+ dht12_count = 1;
+ }
+}
+
+void Dht12Show(bool json)
+{
+ if (dht12_count > 0)
+ {
+ char temperature[33];
+ dtostrfd(dht12_temperature, Settings.flag2.temperature_resolution, temperature);
+ char humidity[33];
+ dtostrfd(dht12_humidity, Settings.flag2.humidity_resolution, humidity);
+
+ if (json)
+ {
+ ResponseAppend_P(JSON_SNS_TEMPHUM, dht12_name, temperature, humidity);
+#ifdef USE_DOMOTICZ
+ if ((0 == tele_period))
+ {
+ DomoticzTempHumSensor(temperature, humidity);
+ }
+#endif // USE_DOMOTICZ
+
+#ifdef USE_KNX
+ if (0 == tele_period)
+ {
+ KnxSensor(KNX_TEMPERATURE, dht12_temperature);
+ KnxSensor(KNX_HUMIDITY, dht12_humidity);
+ }
+#endif // USE_KNX
+
+#ifdef USE_WEBSERVER
+ }
+ else
+ {
+ WSContentSend_PD(HTTP_SNS_TEMP, dht12_name, temperature, TempUnit());
+ WSContentSend_PD(HTTP_SNS_HUM, dht12_name, humidity);
+#endif // USE_WEBSERVER
+ }
+ }
+}
+
+
+
+/*********************************************************************************************\
+ * Interface
+\*********************************************************************************************/
+
+bool Xsns58(uint8_t function)
+{
+ if (!I2cEnabled(XI2C_41)) { return false; }
+
+ bool result = false;
+
+ if (FUNC_INIT == function) {
+ Dht12Detect();
+ }
+ else if (dht12_count > 0) {
+ switch (function) {
+ case FUNC_EVERY_SECOND:
+ Dht12Read();
+ break;
+ case FUNC_JSON_APPEND:
+ Dht12Show(1);
+ break;
+#ifdef USE_WEBSERVER
+ case FUNC_WEB_SENSOR:
+ Dht12Show(0);
+ break;
+#endif // USE_WEBSERVER
+ }
+ }
+ return result;
+}
+
+#endif // USE_DHT12
+#endif // USE_I2C
From 3c835f0ee71fd0365e98304c8d5edcc7ee751d19 Mon Sep 17 00:00:00 2001
From: Stefan Oskamp <57906326+stefan-oskamp@users.noreply.github.com>
Date: Tue, 17 Dec 2019 21:32:55 +0100
Subject: [PATCH 094/559] Added USE_DHT12
Refer to issue #7229
---
tasmota/tasmota_post.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/tasmota/tasmota_post.h b/tasmota/tasmota_post.h
index 75f35cd92..108726c77 100644
--- a/tasmota/tasmota_post.h
+++ b/tasmota/tasmota_post.h
@@ -135,6 +135,7 @@ char* ToHex_P(const unsigned char * in, size_t insz, char * out, size_t outsz, c
#define USE_SGP30 // Add I2C code for SGP30 sensor (+1k1 code)
//#define USE_SI1145 // Add I2C code for SI1145/46/47 sensor (+1k code)
#define USE_LM75AD // Add I2C code for LM75AD sensor (+0k5 code)
+#define USE_DHT12 // Add I2C code for DHT12 temperature and humidity sensor (+0kx code)
//#define USE_APDS9960 // Add I2C code for APDS9960 Proximity Sensor. Disables SHT and VEML6070 (+4k7 code)
//#define USE_MCP230xx // Enable MCP23008/MCP23017 - Must define I2C Address in #define USE_MCP230xx_ADDR below - range 0x20 - 0x27 (+4k7 code)
// #define USE_MCP230xx_ADDR 0x20 // Enable MCP23008/MCP23017 I2C Address to use (Must be within range 0x20 through 0x27 - set according to your wired setup)
From 894b5050f7066283d3e76f8bb38c17d1778be780 Mon Sep 17 00:00:00 2001
From: Adrian Scillato <39969427+ascillato2@users.noreply.github.com>
Date: Tue, 17 Dec 2019 18:07:05 -0300
Subject: [PATCH 095/559] Changed wiki for docs on feature request template
---
.github/ISSUE_TEMPLATE/Feature_request.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/ISSUE_TEMPLATE/Feature_request.md b/.github/ISSUE_TEMPLATE/Feature_request.md
index 43fd36e7c..90d705ea0 100644
--- a/.github/ISSUE_TEMPLATE/Feature_request.md
+++ b/.github/ISSUE_TEMPLATE/Feature_request.md
@@ -10,7 +10,7 @@ Please take a few minutes to complete the requested information below. Our abili
DO NOT DELETE ANY TEXT from this template! Otherwise the issue will be auto-closed.
-->
-**Have you looked for this feature in other issues and in the wiki?**
+**Have you looked for this feature in other issues and in the docs?**
**Is your feature request related to a problem? Please describe.**
_A clear and concise description of what the problem is._
From 377ff5e9ea614c7b77ea2ce9bef68f7a92d28eee Mon Sep 17 00:00:00 2001
From: Adrian Scillato <39969427+ascillato2@users.noreply.github.com>
Date: Tue, 17 Dec 2019 18:08:34 -0300
Subject: [PATCH 096/559] Changed wiki for docs on problem report template
---
.github/ISSUE_TEMPLATE/Bug_report.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md
index a73024342..19c9bd00d 100644
--- a/.github/ISSUE_TEMPLATE/Bug_report.md
+++ b/.github/ISSUE_TEMPLATE/Bug_report.md
@@ -29,7 +29,7 @@ _Make sure your have performed every step and checked the applicable boxes befor
- [ ] Read the [Contributing Guide and Policy](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md) and [the Code of Conduct](https://github.com/arendst/Tasmota/blob/development/CODE_OF_CONDUCT.md)
- [ ] Searched the problem in [issues](https://github.com/arendst/Tasmota/issues)
-- [ ] Searched the problem in the [wiki](https://tasmota.github.io/docs/#/help/FAQ)
+- [ ] Searched the problem in the [docs](https://tasmota.github.io/docs/#/help/FAQ)
- [ ] Searched the problem in the [forum](https://groups.google.com/d/forum/sonoffusers)
- [ ] Searched the problem in the [chat](https://discord.gg/Ks2Kzd4)
- [ ] Device used (e.g., Sonoff Basic): _____
From c2d60b2ab772f109cd2b606df7eef56e029afdc7 Mon Sep 17 00:00:00 2001
From: Stefan Oskamp <57906326+stefan-oskamp@users.noreply.github.com>
Date: Tue, 17 Dec 2019 22:19:49 +0100
Subject: [PATCH 097/559] Added entry for I2C sensor DHT12
---
tasmota/my_user_config.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 04318d9c8..d5645a9af 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -418,6 +418,7 @@
// #define USE_PAJ7620 // [I2cDriver34] Enable PAJ7620 gesture sensor (I2C address 0x73) (+2.5k code)
// #define USE_PCF8574 // [I2cDriver2] Enable PCF8574 I/O Expander (I2C addresses 0x20 - 0x26 and 0x39 - 0x3F) (+1k9 code)
// #define USE_HIH6 // [I2cDriver36] Enable Honeywell HIH Humidity and Temperature sensor (I2C address 0x27) (+0k6)
+// #define USE_DHT12 // [I2cDriver41] Enable DHT12 humidity and temperature sensor (I2C address 0x5C)
// #define USE_DISPLAY // Add I2C Display Support (+2k code)
#define USE_DISPLAY_MODES1TO5 // Enable display mode 1 to 5 in addition to mode 0
From 5e9f33a124cf83085422f287f0bc930e4c278b3d Mon Sep 17 00:00:00 2001
From: Adrian Scillato <39969427+ascillato2@users.noreply.github.com>
Date: Tue, 17 Dec 2019 18:24:45 -0300
Subject: [PATCH 098/559] Changed wiki for docs on issue bot
---
.github/issue-close-app.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/issue-close-app.yml b/.github/issue-close-app.yml
index 8e981441b..d222d8980 100644
--- a/.github/issue-close-app.yml
+++ b/.github/issue-close-app.yml
@@ -39,7 +39,7 @@ issueConfigs:
- "EXPECTED BEHAVIOUR"
- content:
# template 2: feature request
- - "Have you looked for this feature in other issues and in the wiki"
+ - "Have you looked for this feature in other issues and in the docs"
- "Describe the solution you'd like"
# Optional configuration:
From eb4b3d306b4dfe9ae56e94539c1e88dcb837b310 Mon Sep 17 00:00:00 2001
From: Stefan Oskamp <57906326+stefan-oskamp@users.noreply.github.com>
Date: Tue, 17 Dec 2019 22:29:16 +0100
Subject: [PATCH 099/559] Added code size for USE_DHT12
---
tasmota/my_user_config.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index d5645a9af..73a965d30 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -418,7 +418,7 @@
// #define USE_PAJ7620 // [I2cDriver34] Enable PAJ7620 gesture sensor (I2C address 0x73) (+2.5k code)
// #define USE_PCF8574 // [I2cDriver2] Enable PCF8574 I/O Expander (I2C addresses 0x20 - 0x26 and 0x39 - 0x3F) (+1k9 code)
// #define USE_HIH6 // [I2cDriver36] Enable Honeywell HIH Humidity and Temperature sensor (I2C address 0x27) (+0k6)
-// #define USE_DHT12 // [I2cDriver41] Enable DHT12 humidity and temperature sensor (I2C address 0x5C)
+// #define USE_DHT12 // [I2cDriver41] Enable DHT12 humidity and temperature sensor (I2C address 0x5C) (+0k7 code)
// #define USE_DISPLAY // Add I2C Display Support (+2k code)
#define USE_DISPLAY_MODES1TO5 // Enable display mode 1 to 5 in addition to mode 0
From e853cc65e597bd47e164ee0a8bfef8061e0d5d8d Mon Sep 17 00:00:00 2001
From: Stefan Oskamp <57906326+stefan-oskamp@users.noreply.github.com>
Date: Tue, 17 Dec 2019 22:31:08 +0100
Subject: [PATCH 100/559] Added code size for USE_DHT12
---
tasmota/tasmota_post.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/tasmota_post.h b/tasmota/tasmota_post.h
index 108726c77..b095fdbf2 100644
--- a/tasmota/tasmota_post.h
+++ b/tasmota/tasmota_post.h
@@ -135,7 +135,7 @@ char* ToHex_P(const unsigned char * in, size_t insz, char * out, size_t outsz, c
#define USE_SGP30 // Add I2C code for SGP30 sensor (+1k1 code)
//#define USE_SI1145 // Add I2C code for SI1145/46/47 sensor (+1k code)
#define USE_LM75AD // Add I2C code for LM75AD sensor (+0k5 code)
-#define USE_DHT12 // Add I2C code for DHT12 temperature and humidity sensor (+0kx code)
+#define USE_DHT12 // Add I2C code for DHT12 temperature and humidity sensor (+0k7 code)
//#define USE_APDS9960 // Add I2C code for APDS9960 Proximity Sensor. Disables SHT and VEML6070 (+4k7 code)
//#define USE_MCP230xx // Enable MCP23008/MCP23017 - Must define I2C Address in #define USE_MCP230xx_ADDR below - range 0x20 - 0x27 (+4k7 code)
// #define USE_MCP230xx_ADDR 0x20 // Enable MCP23008/MCP23017 I2C Address to use (Must be within range 0x20 through 0x27 - set according to your wired setup)
From 46aec3acf5d139fe505179c920f9428b393cc7d2 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 18 Dec 2019 11:41:10 +0100
Subject: [PATCH 101/559] Fix AWS mqtt host length clipped to 32
---
tasmota/settings.ino | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index d5c59246f..881ec2e7c 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -590,8 +590,8 @@ char* SettingsText(uint32_t index)
case SET_WEBPWD: position = Settings.web_password; break;
#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
case SET_MQTT_HOST:
- strlcpy(aws_mqtt_host, Settings.mqtt_user, strlen(Settings.mqtt_user));
- strlcpy(&aws_mqtt_host[strlen(Settings.mqtt_user)], Settings.mqtt_host, sizeof(Settings.mqtt_host));
+ strncpy(aws_mqtt_host, Settings.mqtt_user, strlen(Settings.mqtt_user));
+ strncpy(&aws_mqtt_host[strlen(Settings.mqtt_user)], Settings.mqtt_host, strlen(Settings.mqtt_host));
position = aws_mqtt_host; break;
case SET_MQTT_USER: position = aws_mqtt_user; break;
#else
From ac1e153ec04c0c316819e86dc4c42fa172dd2e2c Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 18 Dec 2019 11:54:31 +0100
Subject: [PATCH 102/559] Better and smaller AWS fix
---
tasmota/settings.ino | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index 881ec2e7c..bcc182de9 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -590,8 +590,7 @@ char* SettingsText(uint32_t index)
case SET_WEBPWD: position = Settings.web_password; break;
#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
case SET_MQTT_HOST:
- strncpy(aws_mqtt_host, Settings.mqtt_user, strlen(Settings.mqtt_user));
- strncpy(&aws_mqtt_host[strlen(Settings.mqtt_user)], Settings.mqtt_host, strlen(Settings.mqtt_host));
+ snprintf_P(aws_mqtt_host, sizeof(aws_mqtt_host), PSTR("%s%s"), Settings.mqtt_user, Settings.mqtt_host);
position = aws_mqtt_host; break;
case SET_MQTT_USER: position = aws_mqtt_user; break;
#else
From dd94df28afb08199180d8e9c7a46a6a46974116d Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 18 Dec 2019 14:29:05 +0100
Subject: [PATCH 103/559] Update fallback preparation
---
tasmota/settings.ino | 34 ++++++++++++++++++++++++----------
tasmota/tasmota.h | 6 +++---
2 files changed, 27 insertions(+), 13 deletions(-)
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index bcc182de9..afb327725 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -1387,16 +1387,23 @@ void SettingsDelta(void)
}
if ((VERSION < 0x08000000) && (Settings.version > VERSION)) {
- char temp[strlen(SettingsText(SET_OTAURL)) +1]; strncpy(temp, SettingsText(SET_OTAURL), sizeof(temp));
- char temp21[strlen(SettingsText(SET_MQTTPREFIX1)) +1]; strncpy(temp21, SettingsText(SET_MQTTPREFIX1), sizeof(temp21));
- char temp22[strlen(SettingsText(SET_MQTTPREFIX2)) +1]; strncpy(temp22, SettingsText(SET_MQTTPREFIX2), sizeof(temp22));
- char temp23[strlen(SettingsText(SET_MQTTPREFIX3)) +1]; strncpy(temp23, SettingsText(SET_MQTTPREFIX3), sizeof(temp23));
- char temp31[strlen(SettingsText(SET_STASSID1)) +1]; strncpy(temp31, SettingsText(SET_STASSID1), sizeof(temp31));
- char temp32[strlen(SettingsText(SET_STASSID2)) +1]; strncpy(temp32, SettingsText(SET_STASSID2), sizeof(temp32));
- char temp41[strlen(SettingsText(SET_STAPWD1)) +1]; strncpy(temp41, SettingsText(SET_STAPWD1), sizeof(temp41));
- char temp42[strlen(SettingsText(SET_STAPWD2)) +1]; strncpy(temp42, SettingsText(SET_STAPWD2), sizeof(temp42));
- char temp5[strlen(SettingsText(SET_HOSTNAME)) +1]; strncpy(temp5, SettingsText(SET_HOSTNAME), sizeof(temp5));
- char temp6[strlen(SettingsText(SET_SYSLOG_HOST)) +1]; strncpy(temp6, SettingsText(SET_SYSLOG_HOST), sizeof(temp5));
+ char temp[strlen(SettingsText(SET_OTAURL)) +1]; strncpy(temp, SettingsText(SET_OTAURL), sizeof(temp));
+ char temp21[strlen(SettingsText(SET_MQTTPREFIX1)) +1]; strncpy(temp21, SettingsText(SET_MQTTPREFIX1), sizeof(temp21));
+ char temp22[strlen(SettingsText(SET_MQTTPREFIX2)) +1]; strncpy(temp22, SettingsText(SET_MQTTPREFIX2), sizeof(temp22));
+ char temp23[strlen(SettingsText(SET_MQTTPREFIX3)) +1]; strncpy(temp23, SettingsText(SET_MQTTPREFIX3), sizeof(temp23));
+ char temp31[strlen(SettingsText(SET_STASSID1)) +1]; strncpy(temp31, SettingsText(SET_STASSID1), sizeof(temp31));
+ char temp32[strlen(SettingsText(SET_STASSID2)) +1]; strncpy(temp32, SettingsText(SET_STASSID2), sizeof(temp32));
+ char temp41[strlen(SettingsText(SET_STAPWD1)) +1]; strncpy(temp41, SettingsText(SET_STAPWD1), sizeof(temp41));
+ char temp42[strlen(SettingsText(SET_STAPWD2)) +1]; strncpy(temp42, SettingsText(SET_STAPWD2), sizeof(temp42));
+ char temp5[strlen(SettingsText(SET_HOSTNAME)) +1]; strncpy(temp5, SettingsText(SET_HOSTNAME), sizeof(temp5));
+ char temp6[strlen(SettingsText(SET_SYSLOG_HOST)) +1]; strncpy(temp6, SettingsText(SET_SYSLOG_HOST), sizeof(temp6));
+ char temp7[strlen(SettingsText(SET_MQTT_HOST)) +1]; strncpy(temp7, SettingsText(SET_MQTT_HOST), sizeof(temp7));
+ char temp8[strlen(SettingsText(SET_MQTT_CLIENT)) +1]; strncpy(temp8, SettingsText(SET_MQTT_CLIENT), sizeof(temp8));
+ char temp9[strlen(SettingsText(SET_MQTT_USER)) +1]; strncpy(temp9, SettingsText(SET_MQTT_USER), sizeof(temp9));
+ char temp10[strlen(SettingsText(SET_MQTT_PWD)) +1]; strncpy(temp10, SettingsText(SET_MQTT_PWD), sizeof(temp10));
+ char temp11[strlen(SettingsText(SET_MQTT_TOPIC)) +1]; strncpy(temp11, SettingsText(SET_MQTT_TOPIC), sizeof(temp11));
+ char temp12[strlen(SettingsText(SET_MQTT_BUTTON_TOPIC)) +1]; strncpy(temp12, SettingsText(SET_MQTT_BUTTON_TOPIC), sizeof(temp12));
+ char temp13[strlen(SettingsText(SET_MQTT_GRP_TOPIC)) +1]; strncpy(temp13, SettingsText(SET_MQTT_GRP_TOPIC), sizeof(temp13));
uint32_t version = Settings.version;
Settings.version = VERSION;
@@ -1410,6 +1417,13 @@ void SettingsDelta(void)
SettingsUpdateText(SET_STAPWD2, temp42);
SettingsUpdateText(SET_HOSTNAME, temp5);
SettingsUpdateText(SET_SYSLOG_HOST, temp6);
+ SettingsUpdateText(SET_MQTT_HOST, temp7);
+ SettingsUpdateText(SET_MQTT_CLIENT, temp8);
+ SettingsUpdateText(SET_MQTT_USER, temp9);
+ SettingsUpdateText(SET_MQTT_PWD, temp10);
+ SettingsUpdateText(SET_MQTT_TOPIC, temp11);
+ SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, temp12);
+ SettingsUpdateText(SET_MQTT_GRP_TOPIC, temp13);
Settings.version = version;
}
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index 1f676acd4..c93c3ea9e 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -277,15 +277,15 @@ enum SettingsTextIndex { SET_OTAURL,
SET_STASSID1, SET_STASSID2,
SET_STAPWD1, SET_STAPWD2,
SET_HOSTNAME, SET_SYSLOG_HOST,
- SET_WEBPWD,
+ SET_WEBPWD, SET_CORS,
SET_MQTT_HOST, SET_MQTT_CLIENT,
SET_MQTT_USER, SET_MQTT_PWD,
SET_MQTT_FULLTOPIC, SET_MQTT_TOPIC,
SET_MQTT_BUTTON_TOPIC, SET_MQTT_SWITCH_TOPIC, SET_MQTT_GRP_TOPIC,
SET_STATE_TXT1, SET_STATE_TXT2, SET_STATE_TXT3, SET_STATE_TXT4,
SET_NTPSERVER1, SET_NTPSERVER2, SET_NTPSERVER3,
- SET_MEM1, SET_MEM2, SET_MEM3, SET_MEM4, SET_MEM5,
- SET_CORS,
+ SET_MEM1, SET_MEM2, SET_MEM3, SET_MEM4, SET_MEM5, SET_MEM6, SET_MEM7, SET_MEM8,
+ SET_MEM9, SET_MEM10, SET_MEM11, SET_MEM12, SET_MEM13, SET_MEM14, SET_MEM15, SET_MEM16,
SET_FRIENDLYNAME1, SET_FRIENDLYNAME2, SET_FRIENDLYNAME3, SET_FRIENDLYNAME4,
// SET_FRIENDLYNAME5, SET_FRIENDLYNAME6, SET_FRIENDLYNAME7, SET_FRIENDLYNAME8, // Future extension
From 62f4419a595353fcf92643226d536751cbdc26f2 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 18 Dec 2019 14:48:32 +0100
Subject: [PATCH 104/559] Update settings.ino
---
tasmota/settings.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index afb327725..139fd3845 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -1386,7 +1386,7 @@ void SettingsDelta(void)
memcpy((char*)&Settings.serial_config, (char*)&Settings.ex_serial_config, 5); // 1E4 -> EFE
}
- if ((VERSION < 0x08000000) && (Settings.version > VERSION)) {
+ if ((VERSION < 0x08000000) && (Settings.version >= 0x08000000)) {
char temp[strlen(SettingsText(SET_OTAURL)) +1]; strncpy(temp, SettingsText(SET_OTAURL), sizeof(temp));
char temp21[strlen(SettingsText(SET_MQTTPREFIX1)) +1]; strncpy(temp21, SettingsText(SET_MQTTPREFIX1), sizeof(temp21));
char temp22[strlen(SettingsText(SET_MQTTPREFIX2)) +1]; strncpy(temp22, SettingsText(SET_MQTTPREFIX2), sizeof(temp22));
From e574f7dd841a501406a2cd2632f2a07a17ac7b53 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 18 Dec 2019 14:54:14 +0100
Subject: [PATCH 105/559] Add fallback support from version 8.x
---
RELEASENOTES.md | 2 ++
tasmota/CHANGELOG.md | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index b8220e8d3..4360e8ee3 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -54,6 +54,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Change GUI Shutter button text to Up and Down Arrows based on PR by Xavier Muller (#7166)
- Change amount of supported DHT sensors from 3 to 4 by Xavier Muller (#7167)
- Change some Settings locations freeing up space for future single char allowing variable length text
+- Change tasmota-basic.bin and FIRMWARE_BASIC to tasmota-lite.bin and FIRMWARE_LITE
- Fix flashing H801 led at boot by Stefan Hadinger (#7165, #649)
- Fix duplicated ``Backlog`` when using Event inside a Backlog by Adrian Scillato (#7178, #7147)
- Fix Gui Timer when using a negative zero offset of -00:00 by Peter Ooms (#7174)
@@ -71,3 +72,4 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Add reporting of raw weight to JSON from HX711 to overcome auto-tare functionality by @tobox (#7171)
- Add Zigbee support for Xiaomi Aqara Vibration Sensor and Presence Sensor by Stefan Hadinger
- Add Shutter functions ramp up/down and MQTT reporting by Stefan Bode
+- Add fallback support from version 8.x
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 90f29af2a..1bf38a0ec 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -6,7 +6,7 @@
- Change tasmota-basic.bin and FIRMWARE_BASIC to tasmota-lite.bin and FIRMWARE_LITE
- Add Zigbee send automatic ZigbeeRead after sending a command
- Add Zigbee improving Occupancy:false detection for Aqara sensor
-- Add fallback functionality from next version 8.x
+- Add fallback support from version 8.x
### 7.1.2.5 20191213
From 5c282db649b6928b15701f393a147bbb6a1e7259 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 18 Dec 2019 18:21:10 +0100
Subject: [PATCH 106/559] Add some GPIO checks
---
tasmota/support.ino | 7 +++++++
tasmota/support_tasmota.ino | 10 ++++------
tasmota/xdrv_24_buzzer.ino | 4 ++--
tasmota/xnrg_01_hlw8012.ino | 4 +---
tasmota/xnrg_04_mcp39f501.ino | 4 +---
5 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/tasmota/support.ino b/tasmota/support.ino
index 87f05ad27..4b2bc49fb 100644
--- a/tasmota/support.ino
+++ b/tasmota/support.ino
@@ -995,6 +995,13 @@ int ResponseJsonEndEnd(void)
* GPIO Module and Template management
\*********************************************************************************************/
+void DigitalWrite(uint32_t gpio_pin, uint32_t state)
+{
+ if (pin[gpio_pin] < 99) {
+ digitalWrite(pin[gpio_pin], state &1);
+ }
+}
+
uint8_t ModuleNr(void)
{
// 0 = User module (255)
diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino
index ff2b6f40a..0935d9a28 100644
--- a/tasmota/support_tasmota.ino
+++ b/tasmota/support_tasmota.ino
@@ -166,9 +166,7 @@ void SetLatchingRelay(power_t lpower, uint32_t state)
for (uint32_t i = 0; i < devices_present; i++) {
uint32_t port = (i << 1) + ((latching_power >> i) &1);
- if (pin[GPIO_REL1 +port] < 99) {
- digitalWrite(pin[GPIO_REL1 +port], bitRead(rel_inverted, port) ? !state : state);
- }
+ DigitalWrite(GPIO_REL1 +port, bitRead(rel_inverted, port) ? !state : state);
}
}
@@ -226,8 +224,8 @@ void SetDevicePower(power_t rpower, uint32_t source)
else {
for (uint32_t i = 0; i < devices_present; i++) {
power_t state = rpower &1;
- if ((i < MAX_RELAYS) && (pin[GPIO_REL1 +i] < 99)) {
- digitalWrite(pin[GPIO_REL1 +i], bitRead(rel_inverted, i) ? !state : state);
+ if (i < MAX_RELAYS) {
+ DigitalWrite(GPIO_REL1 +i, bitRead(rel_inverted, i) ? !state : state);
}
rpower >>= 1;
}
@@ -293,7 +291,7 @@ void SetLedPowerIdx(uint32_t led, uint32_t state)
} else {
led_power &= (0xFF ^ mask);
}
- digitalWrite(pin[GPIO_LED1 + led], bitRead(led_inverted, led) ? !state : state);
+ DigitalWrite(GPIO_LED1 + led, bitRead(led_inverted, led) ? !state : state);
}
}
diff --git a/tasmota/xdrv_24_buzzer.ino b/tasmota/xdrv_24_buzzer.ino
index 2266b1af7..968f91cad 100644
--- a/tasmota/xdrv_24_buzzer.ino
+++ b/tasmota/xdrv_24_buzzer.ino
@@ -39,7 +39,7 @@ struct BUZZER {
void BuzzerOff(void)
{
- digitalWrite(pin[GPIO_BUZZER], Buzzer.inverted); // Buzzer Off
+ DigitalWrite(GPIO_BUZZER, Buzzer.inverted); // Buzzer Off
}
//void BuzzerBeep(uint32_t count = 1, uint32_t on = 1, uint32_t off = 1, uint32_t tune = 0);
@@ -124,7 +124,7 @@ void BuzzerEvery100mSec(void)
Buzzer.duration = Buzzer.set[Buzzer.state];
}
}
- digitalWrite(pin[GPIO_BUZZER], (Buzzer.inverted) ? !Buzzer.state : Buzzer.state);
+ DigitalWrite(GPIO_BUZZER, (Buzzer.inverted) ? !Buzzer.state : Buzzer.state);
} else {
Buzzer.enable = false;
}
diff --git a/tasmota/xnrg_01_hlw8012.ino b/tasmota/xnrg_01_hlw8012.ino
index 488da7059..3b01eaea7 100644
--- a/tasmota/xnrg_01_hlw8012.ino
+++ b/tasmota/xnrg_01_hlw8012.ino
@@ -143,9 +143,7 @@ void HlwEvery200ms(void)
if (Hlw.cf1_timer >= 8) {
Hlw.cf1_timer = 0;
Hlw.select_ui_flag = (Hlw.select_ui_flag) ? false : true;
- if (pin[GPIO_NRG_SEL] < 99) {
- digitalWrite(pin[GPIO_NRG_SEL], Hlw.select_ui_flag);
- }
+ DigitalWrite(GPIO_NRG_SEL, Hlw.select_ui_flag);
if (Hlw.cf1_pulse_counter) {
cf1_pulse_length = Hlw.cf1_summed_pulse_length / Hlw.cf1_pulse_counter;
diff --git a/tasmota/xnrg_04_mcp39f501.ino b/tasmota/xnrg_04_mcp39f501.ino
index 2fa98276d..d5a5dde4a 100644
--- a/tasmota/xnrg_04_mcp39f501.ino
+++ b/tasmota/xnrg_04_mcp39f501.ino
@@ -570,9 +570,7 @@ void McpSnsInit(void)
} else {
mcp_buffer = (char*)(malloc(MCP_BUFFER_SIZE));
}
- if (pin[GPIO_MCP39F5_RST] < 99) {
- digitalWrite(pin[GPIO_MCP39F5_RST], 1); // MCP enable
- }
+ DigitalWrite(GPIO_MCP39F5_RST, 1); // MCP enable
} else {
energy_flg = ENERGY_NONE;
}
From fdd65bbf8c031a025bb7b4da7fabe2b319096f65 Mon Sep 17 00:00:00 2001
From: Federico Leoni
Date: Wed, 18 Dec 2019 22:00:05 -0300
Subject: [PATCH 107/559] Update xdrv_12_home_assistant.ino
---
tasmota/xdrv_12_home_assistant.ino | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tasmota/xdrv_12_home_assistant.ino b/tasmota/xdrv_12_home_assistant.ino
index 58c266c61..274b5f42a 100644
--- a/tasmota/xdrv_12_home_assistant.ino
+++ b/tasmota/xdrv_12_home_assistant.ino
@@ -340,10 +340,10 @@ void HAssAnnounceButtonSwitch(uint8_t device, char* topic, uint8_t present, uint
if (strlen(prefix) > 0 ) TryResponseAppend_P(HASS_DISCOVER_TOPIC_PREFIX, prefix);
if (toggle) {
if (!key) {
- TryResponseAppend_P(HASS_DISCOVER_BUTTON_TOGGLE, PSTR(D_RSLT_STATE), SettingsText(SET_STATE_TXT1 + toggle?2:1));
+ TryResponseAppend_P(HASS_DISCOVER_BUTTON_TOGGLE, PSTR(D_RSLT_STATE), SettingsText(SET_STATE_TXT3));
} else {TryResponseAppend_P(HASS_DISCOVER_SWITCH_TOGGLE);}
}
- else TryResponseAppend_P(HASS_DISCOVER_BUTTON_SWITCH_ONOFF, PSTR(D_RSLT_STATE), SettingsText(SET_STATE_TXT1 + toggle?2:1), SettingsText(SET_STATE_TXT1));
+ else TryResponseAppend_P(HASS_DISCOVER_BUTTON_SWITCH_ONOFF, PSTR(D_RSLT_STATE), SettingsText(SET_STATE_TXT2), SettingsText(SET_STATE_TXT1));
TryResponseAppend_P(PSTR("}"));
}
From 6cae0f8f14fb92a275899e8d0af27e052fde464e Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Thu, 19 Dec 2019 10:06:23 +0100
Subject: [PATCH 108/559] Add some more fallback code
---
tasmota/settings.ino | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index 139fd3845..8820967a4 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -1128,6 +1128,10 @@ void SettingsDefaultSet2(void)
memset(&Settings.monitors, 0xFF, 20); // Enable all possible monitors, displays and sensors
SettingsEnableAllI2cDrivers();
+
+ if (VERSION < 0x08000000) {
+ SettingsBackwardCompat();
+ }
}
/********************************************************************************************/
@@ -1167,6 +1171,17 @@ void SettingsEnableAllI2cDrivers(void)
Settings.i2c_drivers[2] = 0xFFFFFFFF;
}
+void SettingsBackwardCompat(void)
+{
+ Settings.ex_seriallog_level = Settings.seriallog_level; // 09E <- 452
+ Settings.ex_sta_config = Settings.sta_config; // 09F <- EC7
+ Settings.ex_sta_active = Settings.sta_active; // 0A0 <- EC8
+ memcpy((char*)&Settings.ex_rule_stop, (char*)&Settings.rule_stop, 47); // 1A7 <- EC9
+ Settings.ex_flag4 = Settings.flag4; // 1E0 <- EF8
+ Settings.ex_mqtt_port = Settings.mqtt_port; // 20A <- EFC
+ memcpy((char*)&Settings.ex_serial_config, (char*)&Settings.serial_config, 5); // 1E4 <- EFE
+}
+
/********************************************************************************************/
void SettingsDelta(void)
@@ -1425,6 +1440,8 @@ void SettingsDelta(void)
SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, temp12);
SettingsUpdateText(SET_MQTT_GRP_TOPIC, temp13);
Settings.version = version;
+
+ SettingsBackwardCompat();
}
Settings.version = VERSION;
From 1288cc20e0dfff4dd376060bb29019138bf11a13 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Thu, 19 Dec 2019 15:30:25 +0100
Subject: [PATCH 109/559] Fix fallback from 8.x after full erase
---
tasmota/settings.ino | 162 +++++++++++++++++++------------------------
1 file changed, 71 insertions(+), 91 deletions(-)
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index 8820967a4..d921e4957 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -471,97 +471,59 @@ bool SettingsUpdateText(uint32_t index, const char* replace_me)
char replace[replace_len +1];
memcpy(replace, replace_me, sizeof(replace));
- if (Settings.version < 0x08000000) {
- uint32_t idx = 0;
- switch (index) {
- case SET_OTAURL: strlcpy(Settings.ota_url, replace, sizeof(Settings.ota_url)); break;
- case SET_MQTTPREFIX3: idx++;
- case SET_MQTTPREFIX2: idx++;
- case SET_MQTTPREFIX1: strlcpy(Settings.mqtt_prefix[idx], replace, sizeof(Settings.mqtt_prefix[idx])); break;
- case SET_STASSID2: idx++;
- case SET_STASSID1: strlcpy(Settings.sta_ssid[idx], replace, sizeof(Settings.sta_ssid[idx])); break;
- case SET_STAPWD2: idx++;
- case SET_STAPWD1: strlcpy(Settings.sta_pwd[idx], replace, sizeof(Settings.sta_pwd[idx])); break;
- case SET_HOSTNAME: strlcpy(Settings.hostname, replace, sizeof(Settings.hostname)); break;
- case SET_SYSLOG_HOST: strlcpy(Settings.syslog_host, replace, sizeof(Settings.syslog_host)); break;
- case SET_WEBPWD: strlcpy(Settings.web_password, replace, sizeof(Settings.web_password)); break;
+ uint32_t idx = 0;
+ switch (index) {
+ case SET_OTAURL: strlcpy(Settings.ota_url, replace, sizeof(Settings.ota_url)); break;
+ case SET_MQTTPREFIX3: idx++;
+ case SET_MQTTPREFIX2: idx++;
+ case SET_MQTTPREFIX1: strlcpy(Settings.mqtt_prefix[idx], replace, sizeof(Settings.mqtt_prefix[idx])); break;
+ case SET_STASSID2: idx++;
+ case SET_STASSID1: strlcpy(Settings.sta_ssid[idx], replace, sizeof(Settings.sta_ssid[idx])); break;
+ case SET_STAPWD2: idx++;
+ case SET_STAPWD1: strlcpy(Settings.sta_pwd[idx], replace, sizeof(Settings.sta_pwd[idx])); break;
+ case SET_HOSTNAME: strlcpy(Settings.hostname, replace, sizeof(Settings.hostname)); break;
+ case SET_SYSLOG_HOST: strlcpy(Settings.syslog_host, replace, sizeof(Settings.syslog_host)); break;
+ case SET_WEBPWD: strlcpy(Settings.web_password, replace, sizeof(Settings.web_password)); break;
#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
- case SET_MQTT_HOST:
- if (strlen(replace) <= sizeof(Settings.mqtt_host)) {
- strlcpy(Settings.mqtt_host, replace, sizeof(Settings.mqtt_host));
- Settings.mqtt_user[0] = 0;
- } else {
- // need to split in mqtt_user first then mqtt_host
- strlcpy(Settings.mqtt_user, replace, sizeof(Settings.mqtt_user));
- strlcpy(Settings.mqtt_host, &replace[sizeof(Settings.mqtt_user)-1], sizeof(Settings.mqtt_host));
- }
- break;
- case SET_MQTT_USER: break;
+ case SET_MQTT_HOST:
+ if (strlen(replace) <= sizeof(Settings.mqtt_host)) {
+ strlcpy(Settings.mqtt_host, replace, sizeof(Settings.mqtt_host));
+ Settings.mqtt_user[0] = 0;
+ } else {
+ // need to split in mqtt_user first then mqtt_host
+ strlcpy(Settings.mqtt_user, replace, sizeof(Settings.mqtt_user));
+ strlcpy(Settings.mqtt_host, &replace[sizeof(Settings.mqtt_user)-1], sizeof(Settings.mqtt_host));
+ }
+ break;
+ case SET_MQTT_USER: break;
#else
- case SET_MQTT_HOST: strlcpy(Settings.mqtt_host, replace, sizeof(Settings.mqtt_host)); break;
- case SET_MQTT_USER: strlcpy(Settings.mqtt_user, replace, sizeof(Settings.mqtt_user)); break;
+ case SET_MQTT_HOST: strlcpy(Settings.mqtt_host, replace, sizeof(Settings.mqtt_host)); break;
+ case SET_MQTT_USER: strlcpy(Settings.mqtt_user, replace, sizeof(Settings.mqtt_user)); break;
#endif
- case SET_MQTT_CLIENT: strlcpy(Settings.mqtt_client, replace, sizeof(Settings.mqtt_client)); break;
- case SET_MQTT_PWD: strlcpy(Settings.mqtt_pwd, replace, sizeof(Settings.mqtt_pwd)); break;
- case SET_MQTT_FULLTOPIC: strlcpy(Settings.mqtt_fulltopic, replace, sizeof(Settings.mqtt_fulltopic)); break;
- case SET_MQTT_TOPIC: strlcpy(Settings.mqtt_topic, replace, sizeof(Settings.mqtt_topic)); break;
- case SET_MQTT_BUTTON_TOPIC: strlcpy(Settings.button_topic, replace, sizeof(Settings.button_topic)); break;
- case SET_MQTT_SWITCH_TOPIC: strlcpy(Settings.switch_topic, replace, sizeof(Settings.switch_topic)); break;
- case SET_MQTT_GRP_TOPIC: strlcpy(Settings.mqtt_grptopic, replace, sizeof(Settings.mqtt_grptopic)); break;
- case SET_STATE_TXT4: idx++;
- case SET_STATE_TXT3: idx++;
- case SET_STATE_TXT2: idx++;
- case SET_STATE_TXT1: strlcpy(Settings.state_text[idx], replace, sizeof(Settings.state_text[idx])); break;
- case SET_NTPSERVER3: idx++;
- case SET_NTPSERVER2: idx++;
- case SET_NTPSERVER1: strlcpy(Settings.ntp_server[idx], replace, sizeof(Settings.ntp_server[idx])); break;
- case SET_MEM5: idx++;
- case SET_MEM4: idx++;
- case SET_MEM3: idx++;
- case SET_MEM2: idx++;
- case SET_MEM1: strlcpy(Settings.mems[idx], replace, sizeof(Settings.mems[idx])); break;
- case SET_CORS: strlcpy(Settings.cors_domain, replace, sizeof(Settings.cors_domain)); break;
- case SET_FRIENDLYNAME4: idx++;
- case SET_FRIENDLYNAME3: idx++;
- case SET_FRIENDLYNAME2: idx++;
- case SET_FRIENDLYNAME1: strlcpy(Settings.friendlyname[idx], replace, sizeof(Settings.friendlyname[idx])); break;
- }
- } else {
- uint32_t start_pos = 0;
- uint32_t end_pos = 0;
- char* position = Settings.ota_url;
- for (uint32_t size = 0; size < SET_MAX; size++) {
- while (*position++ != '\0') { }
- if (1 == index) {
- start_pos = position - Settings.ota_url;
- }
- else if (0 == index) {
- end_pos = position - Settings.ota_url -1;
- }
- index--;
- }
- uint32_t char_len = position - Settings.ota_url;
-
- uint32_t current_len = end_pos - start_pos;
- int diff = replace_len - current_len;
-
- // AddLog_P2(LOG_LEVEL_DEBUG, PSTR("TST: start %d, end %d, len %d, current %d, replace %d, diff %d"),
- // start_pos, end_pos, char_len, current_len, replace_len, diff);
-
- int too_long = (char_len + diff) - settings_text_size;
- if (too_long > 0) {
- // AddLog_P2(LOG_LEVEL_INFO, PSTR("CFG: Text too long by %d char(s)"), too_long);
- return false; // Replace text too long
- }
-
- if (diff != 0) {
- // Shift Settings.text up or down
- memmove_P(Settings.ota_url + start_pos + replace_len, Settings.ota_url + end_pos, char_len - end_pos);
- }
- // Replace text
- memmove_P(Settings.ota_url + start_pos, replace, replace_len);
- // Fill for future use
- memset(Settings.ota_url + char_len + diff, 0x00, settings_text_size - char_len - diff);
+ case SET_MQTT_CLIENT: strlcpy(Settings.mqtt_client, replace, sizeof(Settings.mqtt_client)); break;
+ case SET_MQTT_PWD: strlcpy(Settings.mqtt_pwd, replace, sizeof(Settings.mqtt_pwd)); break;
+ case SET_MQTT_FULLTOPIC: strlcpy(Settings.mqtt_fulltopic, replace, sizeof(Settings.mqtt_fulltopic)); break;
+ case SET_MQTT_TOPIC: strlcpy(Settings.mqtt_topic, replace, sizeof(Settings.mqtt_topic)); break;
+ case SET_MQTT_BUTTON_TOPIC: strlcpy(Settings.button_topic, replace, sizeof(Settings.button_topic)); break;
+ case SET_MQTT_SWITCH_TOPIC: strlcpy(Settings.switch_topic, replace, sizeof(Settings.switch_topic)); break;
+ case SET_MQTT_GRP_TOPIC: strlcpy(Settings.mqtt_grptopic, replace, sizeof(Settings.mqtt_grptopic)); break;
+ case SET_STATE_TXT4: idx++;
+ case SET_STATE_TXT3: idx++;
+ case SET_STATE_TXT2: idx++;
+ case SET_STATE_TXT1: strlcpy(Settings.state_text[idx], replace, sizeof(Settings.state_text[idx])); break;
+ case SET_NTPSERVER3: idx++;
+ case SET_NTPSERVER2: idx++;
+ case SET_NTPSERVER1: strlcpy(Settings.ntp_server[idx], replace, sizeof(Settings.ntp_server[idx])); break;
+ case SET_MEM5: idx++;
+ case SET_MEM4: idx++;
+ case SET_MEM3: idx++;
+ case SET_MEM2: idx++;
+ case SET_MEM1: strlcpy(Settings.mems[idx], replace, sizeof(Settings.mems[idx])); break;
+ case SET_CORS: strlcpy(Settings.cors_domain, replace, sizeof(Settings.cors_domain)); break;
+ case SET_FRIENDLYNAME4: idx++;
+ case SET_FRIENDLYNAME3: idx++;
+ case SET_FRIENDLYNAME2: idx++;
+ case SET_FRIENDLYNAME1: strlcpy(Settings.friendlyname[idx], replace, sizeof(Settings.friendlyname[idx])); break;
}
return true;
@@ -1402,6 +1364,27 @@ void SettingsDelta(void)
}
if ((VERSION < 0x08000000) && (Settings.version >= 0x08000000)) {
+ SettingsUpdateText(SET_WEBPWD, SettingsText(SET_WEBPWD));
+ SettingsUpdateText(SET_CORS, SettingsText(SET_CORS));
+ SettingsUpdateText(SET_MQTT_FULLTOPIC, SettingsText(SET_MQTT_FULLTOPIC));
+ SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, SettingsText(SET_MQTT_SWITCH_TOPIC));
+ SettingsUpdateText(SET_STATE_TXT1, SettingsText(SET_STATE_TXT1));
+ SettingsUpdateText(SET_STATE_TXT2, SettingsText(SET_STATE_TXT2));
+ SettingsUpdateText(SET_STATE_TXT3, SettingsText(SET_STATE_TXT3));
+ SettingsUpdateText(SET_STATE_TXT4, SettingsText(SET_STATE_TXT4));
+ SettingsUpdateText(SET_NTPSERVER1, SettingsText(SET_NTPSERVER1));
+ SettingsUpdateText(SET_NTPSERVER2, SettingsText(SET_NTPSERVER2));
+ SettingsUpdateText(SET_NTPSERVER3, SettingsText(SET_NTPSERVER3));
+ SettingsUpdateText(SET_MEM1, SettingsText(SET_MEM1));
+ SettingsUpdateText(SET_MEM2, SettingsText(SET_MEM2));
+ SettingsUpdateText(SET_MEM3, SettingsText(SET_MEM3));
+ SettingsUpdateText(SET_MEM4, SettingsText(SET_MEM4));
+ SettingsUpdateText(SET_MEM5, SettingsText(SET_MEM5));
+ SettingsUpdateText(SET_FRIENDLYNAME1, SettingsText(SET_FRIENDLYNAME1));
+ SettingsUpdateText(SET_FRIENDLYNAME2, SettingsText(SET_FRIENDLYNAME2));
+ SettingsUpdateText(SET_FRIENDLYNAME3, SettingsText(SET_FRIENDLYNAME3));
+ SettingsUpdateText(SET_FRIENDLYNAME4, SettingsText(SET_FRIENDLYNAME4));
+
char temp[strlen(SettingsText(SET_OTAURL)) +1]; strncpy(temp, SettingsText(SET_OTAURL), sizeof(temp));
char temp21[strlen(SettingsText(SET_MQTTPREFIX1)) +1]; strncpy(temp21, SettingsText(SET_MQTTPREFIX1), sizeof(temp21));
char temp22[strlen(SettingsText(SET_MQTTPREFIX2)) +1]; strncpy(temp22, SettingsText(SET_MQTTPREFIX2), sizeof(temp22));
@@ -1420,8 +1403,6 @@ void SettingsDelta(void)
char temp12[strlen(SettingsText(SET_MQTT_BUTTON_TOPIC)) +1]; strncpy(temp12, SettingsText(SET_MQTT_BUTTON_TOPIC), sizeof(temp12));
char temp13[strlen(SettingsText(SET_MQTT_GRP_TOPIC)) +1]; strncpy(temp13, SettingsText(SET_MQTT_GRP_TOPIC), sizeof(temp13));
- uint32_t version = Settings.version;
- Settings.version = VERSION;
SettingsUpdateText(SET_OTAURL, temp);
SettingsUpdateText(SET_MQTTPREFIX1, temp21);
SettingsUpdateText(SET_MQTTPREFIX2, temp22);
@@ -1439,7 +1420,6 @@ void SettingsDelta(void)
SettingsUpdateText(SET_MQTT_TOPIC, temp11);
SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, temp12);
SettingsUpdateText(SET_MQTT_GRP_TOPIC, temp13);
- Settings.version = version;
SettingsBackwardCompat();
}
From a2b4b1b06d507a01b18f96cd03bae71e291eaf5a Mon Sep 17 00:00:00 2001
From: stefanbode
Date: Fri, 20 Dec 2019 11:27:35 +0100
Subject: [PATCH 110/559] new features
- new closeduration
- new control how to accelerate an decellerate
---
tasmota/xdrv_27_shutter.ino | 253 ++++++++++++++++++++----------------
1 file changed, 142 insertions(+), 111 deletions(-)
diff --git a/tasmota/xdrv_27_shutter.ino b/tasmota/xdrv_27_shutter.ino
index e13bba771..8392bebad 100644
--- a/tasmota/xdrv_27_shutter.ino
+++ b/tasmota/xdrv_27_shutter.ino
@@ -27,11 +27,13 @@
#define D_SHUTTER "SHUTTER"
const uint16_t MOTOR_STOP_TIME = 500; // in mS
+const uint8_t steps_per_second = 20; // FUNC_EVERY_50_MSECOND
uint8_t calibrate_pos[6] = {0,30,50,70,90,100};
uint16_t messwerte[5] = {30,50,70,90,100};
+uint16_t last_execute_step;
-enum ShutterModes { SHT_OFF_OPEN__OFF_CLOSE, SHT_OFF_ON__OPEN_CLOSE, SHT_PULSE_OPEN__PULSE_CLOSE };
+enum ShutterModes { SHT_OFF_OPEN__OFF_CLOSE, SHT_OFF_ON__OPEN_CLOSE, SHT_PULSE_OPEN__PULSE_CLOSE, SHT_OFF_ON__OPEN_CLOSE_STEPPER,};
const char kShutterCommands[] PROGMEM = D_PRFX_SHUTTER "|"
D_CMND_SHUTTER_OPEN "|" D_CMND_SHUTTER_CLOSE "|" D_CMND_SHUTTER_STOP "|" D_CMND_SHUTTER_POSITION "|"
@@ -68,43 +70,51 @@ struct SHUTTER {
uint8_t mode = 0; // operation mode definition. see enum type above SHT_OFF_OPEN__OFF_CLOSE, SHT_OFF_ON__OPEN_CLOSE, SHT_PULSE_OPEN__PULSE_CLOSE
int16_t motordelay[MAX_SHUTTERS]; // initial motorstarttime in 0.05sec.
int16_t pwm_frequency; // frequency of PWN for stepper motors
- uint16_t max_pwm_frequency = 1000; // maximum of PWM frequency that can be used. depend on the motor and drivers
+ uint16_t max_pwm_frequency = 1000; // maximum of PWM frequency for openig the shutter. depend on the motor and drivers
+ uint16_t max_close_pwm_frequency[MAX_SHUTTERS];// maximum of PWM frequency for closeing the shutter. depend on the motor and drivers
uint8_t skip_relay_change; // avoid overrun at endstops
+ int32_t accelerator[MAX_SHUTTERS]; // speed of ramp-up, ramp down of shutter
} Shutter;
void ShutterRtc50mS(void)
{
for (uint32_t i = 0; i < shutters_present; i++) {
Shutter.time[i]++;
+ if (Shutter.accelerator[i]) {
+ Shutter.pwm_frequency += Shutter.accelerator[i];
+ Shutter.pwm_frequency = tmax(0,tmin(Shutter.direction[i]==1 ? Shutter.max_pwm_frequency : Shutter.max_close_pwm_frequency[i],Shutter.pwm_frequency));
+ analogWriteFreq(Shutter.pwm_frequency);
+ analogWrite(pin[GPIO_PWM1+i], 50);
+ }
}
}
-int32_t ShutterPercentToRealPosition(uint8_t percent,uint8_t index)
+int32_t ShutterPercentToRealPosition(uint8_t percent,uint8_t i)
{
- if (Settings.shutter_set50percent[index] != 50) {
- return percent <= 5 ? Settings.shuttercoeff[2][index] * percent : Settings.shuttercoeff[1][index] * percent + Settings.shuttercoeff[0][index];
+ if (Settings.shutter_set50percent[i] != 50) {
+ return percent <= 5 ? Settings.shuttercoeff[2][i] * percent : Settings.shuttercoeff[1][i] * percent + Settings.shuttercoeff[0][i];
} else {
int32_t realpos;
// check against DIV 0
for (uint8_t j=0 ; j < 5 ; j++) {
- if (Settings.shuttercoeff[j][index] == 0) {
+ if (Settings.shuttercoeff[j][i] == 0) {
AddLog_P2(LOG_LEVEL_ERROR, PSTR("SHT: RESET/INIT CALIBRATION MATRIX DIV 0"));
for (uint8_t k=0 ; k < 5 ; k++) {
- Settings.shuttercoeff[k][index] = messwerte[k] * 1000 / messwerte[4];
+ Settings.shuttercoeff[k][i] = messwerte[k] * 1000 / messwerte[4];
}
}
}
- for (uint8_t i=0 ; i < 5 ; i++) {
- if (percent*10 > Settings.shuttercoeff[i][index]) {
- realpos = Shutter.open_max[index] * calibrate_pos[i+1] / 100;
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realposition TEMP1: %d, %% %d, coeff %d"), realpos, percent, Settings.shuttercoeff[i][index]);
+ for (uint8_t l=0 ; l < 5 ; l++) {
+ if (percent*10 > Settings.shuttercoeff[l][i]) {
+ realpos = Shutter.open_max[i] * calibrate_pos[l+1] / 100;
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realposition TEMP1: %d, %% %d, coeff %d"), realpos, percent, Settings.shuttercoeff[l][i]);
} else {
- if ( i == 0) {
- realpos = percent * Shutter.open_max[index] * calibrate_pos[i+1] / Settings.shuttercoeff[i][index] / 10;
+ if ( l == 0) {
+ realpos = percent * Shutter.open_max[i] * calibrate_pos[l+1] / Settings.shuttercoeff[l][i] / 10;
} else {
- //uint16_t addon = ( percent*10 - Settings.shuttercoeff[i-1][index] ) * Shutter_Open_Max[index] * (calibrate_pos[i+1] - calibrate_pos[i]) / (Settings.shuttercoeff[i][index] -Settings.shuttercoeff[i-1][index]) / 100;
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realposition TEMP2: %d, %% %d, coeff %d"), addon, (calibrate_pos[i+1] - calibrate_pos[i]), (Settings.shuttercoeff[i][index] -Settings.shuttercoeff[i-1][index]));
- realpos += ( percent*10 - Settings.shuttercoeff[i-1][index] ) * Shutter.open_max[index] * (calibrate_pos[i+1] - calibrate_pos[i]) / (Settings.shuttercoeff[i][index] -Settings.shuttercoeff[i-1][index]) / 100;
+ //uint16_t addon = ( percent*10 - Settings.shuttercoeff[i-1][i] ) * Shutter_Open_Max[i] * (calibrate_pos[l+1] - calibrate_pos[l]) / (Settings.shuttercoeff[l][i] -Settings.shuttercoeff[l-1][l]) / 100;
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realposition TEMP2: %d, %% %d, coeff %d"), addon, (calibrate_pos[l+1] - calibrate_pos[l]), (Settings.shuttercoeff[l][i] -Settings.shuttercoeff[l-1][l]));
+ realpos += ( percent*10 - Settings.shuttercoeff[l-1][i] ) * Shutter.open_max[i] * (calibrate_pos[l+1] - calibrate_pos[l]) / (Settings.shuttercoeff[l][i] -Settings.shuttercoeff[l-1][i]) / 100;
}
break;
}
@@ -113,25 +123,25 @@ int32_t ShutterPercentToRealPosition(uint8_t percent,uint8_t index)
}
}
-uint8_t ShutterRealToPercentPosition(int32_t realpos, uint8_t index)
+uint8_t ShutterRealToPercentPosition(int32_t realpos, uint8_t i)
{
- if (Settings.shutter_set50percent[index] != 50) {
- return Settings.shuttercoeff[2][index] * 5 > realpos ? realpos / Settings.shuttercoeff[2][index] : (realpos-Settings.shuttercoeff[0][index]) / Settings.shuttercoeff[1][index];
+ if (Settings.shutter_set50percent[i] != 50) {
+ return Settings.shuttercoeff[2][i] * 5 > realpos ? realpos / Settings.shuttercoeff[2][i] : (realpos-Settings.shuttercoeff[0][i]) / Settings.shuttercoeff[1][i];
} else {
int16_t realpercent;
- for (uint8_t i=0 ; i < 5 ; i++) {
- if (realpos > Shutter.open_max[index] * calibrate_pos[i+1] / 100) {
- realpercent = Settings.shuttercoeff[i][index] /10;
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realpercent TEMP1: %d, %% %d, coeff %d"), realpercent, realpos, Shutter_Open_Max[index] * calibrate_pos[i+1] / 100);
+ for (uint8_t j=0 ; j < 5 ; j++) {
+ if (realpos > Shutter.open_max[i] * calibrate_pos[j+1] / 100) {
+ realpercent = Settings.shuttercoeff[j][i] /10;
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realpercent TEMP1: %d, %% %d, coeff %d"), realpercent, realpos, Shutter_Open_Max[i] * calibrate_pos[i+1] / 100);
} else {
if ( i == 0) {
- realpercent = ( realpos - (Shutter.open_max[index] * calibrate_pos[i] / 100) ) * 10 * Settings.shuttercoeff[i][index] / calibrate_pos[i+1] / Shutter.open_max[index];
+ realpercent = ( realpos - (Shutter.open_max[i] * calibrate_pos[j] / 100) ) * 10 * Settings.shuttercoeff[j][i] / calibrate_pos[j+1] / Shutter.open_max[i];
} else {
- //uint16_t addon = ( realpos - (Shutter_Open_Max[index] * calibrate_pos[i] / 100) ) * 10 * (Settings.shuttercoeff[i][index] - Settings.shuttercoeff[i-1][index]) / (calibrate_pos[i+1] - calibrate_pos[i])/ Shutter_Open_Max[index];
- //uint16_t addon = ( percent*10 - Settings.shuttercoeff[i-1][index] ) * Shutter_Open_Max[index] * (calibrate_pos[i+1] - calibrate_pos[i]) / (Settings.shuttercoeff[i][index] -Settings.shuttercoeff[i-1][index]) / 100;
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realpercent TEMP2: %d, delta %d, %% %d, coeff %d"), addon,( realpos - (Shutter_Open_Max[index] * calibrate_pos[i] / 100) ) , (calibrate_pos[i+1] - calibrate_pos[i])* Shutter_Open_Max[index]/100, (Settings.shuttercoeff[i][index] -Settings.shuttercoeff[i-1][index]));
- realpercent += ( realpos - (Shutter.open_max[index] * calibrate_pos[i] / 100) ) * 10 * (Settings.shuttercoeff[i][index] - Settings.shuttercoeff[i-1][index]) / (calibrate_pos[i+1] - calibrate_pos[i]) / Shutter.open_max[index] ;
+ //uint16_t addon = ( realpos - (Shutter_Open_Max[i] * calibrate_pos[i] / 100) ) * 10 * (Settings.shuttercoeff[i][i] - Settings.shuttercoeff[i-1][i]) / (calibrate_pos[i+1] - calibrate_pos[i])/ Shutter_Open_Max[i];
+ //uint16_t addon = ( percent*10 - Settings.shuttercoeff[i-1][i] ) * Shutter_Open_Max[i] * (calibrate_pos[i+1] - calibrate_pos[i]) / (Settings.shuttercoeff[i][i] -Settings.shuttercoeff[i-1][i]) / 100;
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realpercent TEMP2: %d, delta %d, %% %d, coeff %d"), addon,( realpos - (Shutter_Open_Max[i] * calibrate_pos[i] / 100) ) , (calibrate_pos[i+1] - calibrate_pos[i])* Shutter_Open_Max[i]/100, (Settings.shuttercoeff[i][i] -Settings.shuttercoeff[i-1][i]));
+ realpercent += ( realpos - (Shutter.open_max[i] * calibrate_pos[j] / 100) ) * 10 * (Settings.shuttercoeff[j][i] - Settings.shuttercoeff[j-1][i]) / (calibrate_pos[j+1] - calibrate_pos[j]) / Shutter.open_max[i] ;
}
break;
}
@@ -148,12 +158,11 @@ void ShutterInit(void)
Shutter.old_power = power;
bool relay_in_interlock = false;
+ // if shutter 4 is unused
+ if (Settings.shutter_startrelay[MAX_SHUTTERS] == 0) {
+ Shutter.max_pwm_frequency = Settings.shuttercoeff[4][3] > 0 ? Settings.shuttercoeff[4][3] : Shutter.max_pwm_frequency;
+ }
for (uint32_t i = 0; i < MAX_SHUTTERS; i++) {
- // upgrade to 0.1sec calculation base.
- if ( Settings.shutter_accuracy == 0) {
- Settings.shutter_closetime[i] = Settings.shutter_closetime[i] * 10;
- Settings.shutter_opentime[i] = Settings.shutter_opentime[i] * 10;
- }
// set startrelay to 1 on first init, but only to shutter 1. 90% usecase
Settings.shutter_startrelay[i] = (Settings.shutter_startrelay[i] == 0 && i == 0? 1 : Settings.shutter_startrelay[i]);
if (Settings.shutter_startrelay[i] && Settings.shutter_startrelay[i] <9) {
@@ -177,7 +186,8 @@ void ShutterInit(void)
}
} else {
Shutter.mode = SHT_OFF_ON__OPEN_CLOSE;
- if (pin[GPIO_PWM1+i] < 99) {
+ if (pin[GPIO_PWM1+i] < 99 && pin[GPIO_CNTR1+i]) {
+ Shutter.mode = SHT_OFF_ON__OPEN_CLOSE_STEPPER;
Shutter.pwm_frequency = 0;
analogWriteFreq(Shutter.pwm_frequency);
analogWrite(pin[GPIO_PWM1+i], 50);
@@ -195,6 +205,8 @@ void ShutterInit(void)
// Update Calculation 20 because time interval is 0.05 sec
Shutter.open_max[i] = 200 * Shutter.open_time[i];
Shutter.close_velocity[i] = Shutter.open_max[i] / Shutter.close_time[i] / 2 ;
+ Shutter.max_close_pwm_frequency[i] = Shutter.max_pwm_frequency*Shutter.open_time[i]/Shutter.close_time[i];
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: Shutter %d Closefreq: %d"),i, Shutter.max_close_pwm_frequency[i]);
// calculate a ramp slope at the first 5 percent to compensate that shutters move with down part later than the upper part
if (Settings.shutter_set50percent[i] != 50) {
@@ -222,43 +234,54 @@ void ShutterInit(void)
// terminate loop at first INVALID shutter.
break;
}
- if (shutters_present < 4) {
- Shutter.max_pwm_frequency = Settings.shuttercoeff[4][4] > 0 ? Settings.shuttercoeff[4][4] : Shutter.max_pwm_frequency;
- }
+
Settings.shutter_accuracy = 1;
}
}
void ShutterUpdatePosition(void)
{
+
char scommand[CMDSZ];
char stopic[TOPSZ];
char stemp2[10];
for (uint32_t i = 0; i < shutters_present; i++) {
if (Shutter.direction[i] != 0) {
- if (Shutter.mode == SHT_OFF_ON__OPEN_CLOSE && pin[GPIO_PWM1+i] < 99 && pin[GPIO_CNTR1+i] < 99 ) {
+ int32_t stop_position_delta = 20;
+ if (Shutter.mode == SHT_OFF_ON__OPEN_CLOSE_STEPPER) {
// Calculate position with counter. Much more accurate and no need for motordelay workaround
// adding some steps to stop early
- Shutter.real_position[i] = Shutter.direction[i] * 20 + ShutterCounterBasedPosition(i);;
- //AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: real %d, start %d, counter %d, max_freq %d, dir %d, freq %d"),Shutter.real_position[i], Shutter.start_position[i] ,RtcSettings.pulse_counter[i],Shutter.max_pwm_frequency , Shutter.direction[i] ,Shutter.max_pwm_frequency );
+ Shutter.real_position[i] = ShutterCounterBasedPosition(i);
+
+ int32_t max_frequency = Shutter.direction[i] == 1 ? Shutter.max_pwm_frequency : Shutter.max_close_pwm_frequency[i];
+ int32_t max_freq_change_per_sec = Shutter.max_pwm_frequency*steps_per_second / (Shutter.motordelay[i]>0 ? Shutter.motordelay[i] : 1);
+ int32_t min_runtime_ms = Shutter.pwm_frequency*1000 / max_freq_change_per_sec;
+ int32_t velocity = Shutter.direction[i] == 1 ? 100 : Shutter.close_velocity[i];
+ int32_t minstopway = min_runtime_ms * velocity / 100 * Shutter.pwm_frequency / max_frequency * Shutter.direction[i] ;
+
+ int32_t next_possible_stop = Shutter.real_position[i] + minstopway ;
+ stop_position_delta =200 * Shutter.pwm_frequency/max_frequency + Shutter.direction[i] * (next_possible_stop - Shutter.target_position[i]);
+ //Shutter.accelerator[i] = tmin(tmax(max_freq_change_per_sec*(100-(Shutter.direction[i]*(Shutter.target_position[i]-next_possible_stop) ))/2000 , max_freq_change_per_sec*9/200), max_freq_change_per_sec*11/200);
+ //int32_t act_freq_change = max_freq_change_per_sec/20;
+ AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: time: %d, velocity %d, minstopway %d,cur_freq %d, max_frequency %d, act_freq_change %d, min_runtime_ms %d, act.pos %d, next_stop %d, target: %d"),Shutter.time[i],velocity,minstopway,
+ Shutter.pwm_frequency,max_frequency, Shutter.accelerator[i],min_runtime_ms,Shutter.real_position[i], next_possible_stop,Shutter.target_position[i]);
+
+ if (Shutter.accelerator[i] < 0 || next_possible_stop * Shutter.direction[i] > Shutter.target_position[i] * Shutter.direction[i] ) {
+
+ Shutter.accelerator[i] = - tmin(tmax(max_freq_change_per_sec*(100-(Shutter.direction[i]*(Shutter.target_position[i]-next_possible_stop) ))/2000 , max_freq_change_per_sec*9/200), max_freq_change_per_sec*12/200);
+ //AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Ramp down: acc: %d"), Shutter.accelerator[i]);
+ } else if ( Shutter.accelerator[i] > 0 && Shutter.pwm_frequency == max_frequency) {
+ Shutter.accelerator[i] = 0;
+ }
} else {
Shutter.real_position[i] = Shutter.start_position[i] + ( (Shutter.time[i] - Shutter.motordelay[i]) * (Shutter.direction[i] > 0 ? 100 : -Shutter.close_velocity[i]));
}
-
- if (Shutter.mode == SHT_OFF_ON__OPEN_CLOSE && pin[GPIO_PWM1+i] < 99) {
- uint16_t freq_change = Shutter.max_pwm_frequency/(Shutter.motordelay[i]+1);
- // ramp up phase. calculate frequency
- Shutter.pwm_frequency = tmin(freq_change * Shutter.time[i],Shutter.max_pwm_frequency);
- // ramp down at the end of the movement time will not be exactly motordelay
- Shutter.pwm_frequency = tmax(tmin(freq_change * (Shutter.target_position[i]-Shutter.real_position[i])*Shutter.direction[i]/30, Shutter.pwm_frequency),10);
- analogWriteFreq(Shutter.pwm_frequency);
- analogWrite(pin[GPIO_PWM1+i], 50);
- }
- if (Shutter.real_position[i] * Shutter.direction[i] >= Shutter.target_position[i] * Shutter.direction[i] ) {
+ if ( Shutter.real_position[i] * Shutter.direction[i] + stop_position_delta >= Shutter.target_position[i] * Shutter.direction[i] ) {
// calculate relay number responsible for current movement.
//AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: Stop Condition detected: real: %d, Target: %d, direction: %d"),Shutter.real_position[i], Shutter.target_position[i],Shutter.direction[i]);
uint8_t cur_relay = Settings.shutter_startrelay[i] + (Shutter.direction[i] == 1 ? 0 : 1) ;
+ int16_t missing_steps;
switch (Shutter.mode) {
case SHT_PULSE_OPEN__PULSE_CLOSE:
@@ -269,29 +292,34 @@ void ShutterUpdatePosition(void)
last_source = SRC_SHUTTER;
}
break;
- case SHT_OFF_ON__OPEN_CLOSE:
- // This is a failsafe configuration. Relay1 ON/OFF Relay2 -1/1 direction
- // Only allow PWM microstepping if PWM and COUNTER are defined.
- // see wiki to connect PWM and COUNTER
- if (pin[GPIO_PWM1+i] < 99 && pin[GPIO_CNTR1+i] < 99 ) {
- int16_t missing_steps = ((Shutter.target_position[i]-Shutter.start_position[i])*Shutter.direction[i]*Shutter.max_pwm_frequency/2000) - RtcSettings.pulse_counter[i];
- //prepare for stop PWM
- AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: Remain steps %d, counter %d, freq %d"), missing_steps, RtcSettings.pulse_counter[i] ,Shutter.pwm_frequency);
- Shutter.pwm_frequency = 0;
- analogWriteFreq(Shutter.pwm_frequency);
- while (RtcSettings.pulse_counter[i] < (uint32_t)(Shutter.target_position[i]-Shutter.start_position[i])*Shutter.direction[i]*Shutter.max_pwm_frequency/2000) {
- delay(1);
- }
- analogWrite(pin[GPIO_PWM1+i], 0);
- Shutter.real_position[i] = ShutterCounterBasedPosition(i);
- AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT:Real %d, pulsecount %d, start %d"), Shutter.real_position[i],RtcSettings.pulse_counter[i], Shutter.start_position[i]);
-
+ case SHT_OFF_ON__OPEN_CLOSE_STEPPER:
+ missing_steps = ((Shutter.target_position[i]-Shutter.start_position[i])*Shutter.direction[i]*Shutter.max_pwm_frequency/2000) - RtcSettings.pulse_counter[i];
+ //prepare for stop PWM
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: Remain steps %d, counter %d, freq %d"), missing_steps, RtcSettings.pulse_counter[i] ,Shutter.pwm_frequency);
+ Shutter.accelerator[i] = 0;
+ Shutter.pwm_frequency = Shutter.pwm_frequency > 250 ? 250 : Shutter.pwm_frequency;
+ analogWriteFreq(Shutter.pwm_frequency);
+ analogWrite(pin[GPIO_PWM1+i], 50);
+ Shutter.pwm_frequency = 0;
+ analogWriteFreq(Shutter.pwm_frequency);
+ while (RtcSettings.pulse_counter[i] < (uint32_t)(Shutter.target_position[i]-Shutter.start_position[i])*Shutter.direction[i]*Shutter.max_pwm_frequency/2000) {
+ delay(1);
}
+ analogWrite(pin[GPIO_PWM1+i], 0);
+ Shutter.real_position[i] = ShutterCounterBasedPosition(i);
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT:Real %d, pulsecount %d, start %d"), Shutter.real_position[i],RtcSettings.pulse_counter[i], Shutter.start_position[i]);
+
if ((1 << (Settings.shutter_startrelay[i]-1)) & power) {
ExecuteCommandPower(Settings.shutter_startrelay[i], 0, SRC_SHUTTER);
ExecuteCommandPower(Settings.shutter_startrelay[i]+1, 0, SRC_SHUTTER);
}
break;
+ case SHT_OFF_ON__OPEN_CLOSE:
+ if ((1 << (Settings.shutter_startrelay[i]-1)) & power) {
+ ExecuteCommandPower(Settings.shutter_startrelay[i], 0, SRC_SHUTTER);
+ ExecuteCommandPower(Settings.shutter_startrelay[i]+1, 0, SRC_SHUTTER);
+ }
+ break;
case SHT_OFF_OPEN__OFF_CLOSE:
// avoid switching OFF a relay already OFF
if ((1 << (cur_relay-1)) & power) {
@@ -302,7 +330,7 @@ void ShutterUpdatePosition(void)
}
Settings.shutter_position[i] = ShutterRealToPercentPosition(Shutter.real_position[i], i);
- dtostrfd((float)Shutter.time[i] / 20, 1, stemp2);
+ dtostrfd((float)Shutter.time[i] / steps_per_second, 1, stemp2);
AddLog_P2(LOG_LEVEL_INFO, MSG_SHUTTER_POS, i+1, Shutter.real_position[i], Shutter.start_position[i], Shutter.target_position[i], Shutter.direction[i], Shutter.motordelay[i],stemp2,Shutter.pwm_frequency);
Shutter.start_position[i] = Shutter.real_position[i];
@@ -332,50 +360,51 @@ bool ShutterState(uint8_t device)
(Shutter.mask & (1 << (Settings.shutter_startrelay[device]-1))) );
}
-void ShutterStartInit(uint8_t index, int8_t direction, int32_t target_pos)
+void ShutterStartInit(uint8_t i, int8_t direction, int32_t target_pos)
{
- //AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: dir %d, delta1 %d, delta2 %d, grant %d"),direction, (Shutter.open_max[index] - Shutter.real_position[index]) / Shutter.close_velocity[index], Shutter.real_position[index] / Shutter.close_velocity[index], 2+Shutter.motordelay[index]);
- if ( ( direction == 1 && (Shutter.open_max[index] - Shutter.real_position[index]) / 100 <= 2 )
- || ( direction == -1 && Shutter.real_position[index] / Shutter.close_velocity[index] <= 2)) {
+ //AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: dir %d, delta1 %d, delta2 %d, grant %d"),direction, (Shutter.open_max[i] - Shutter.real_position[i]) / Shutter.close_velocity[i], Shutter.real_position[i] / Shutter.close_velocity[i], 2+Shutter.motordelay[i]);
+ if ( ( direction == 1 && (Shutter.open_max[i] - Shutter.real_position[i]) / 100 <= 2 )
+ || ( direction == -1 && Shutter.real_position[i] / Shutter.close_velocity[i] <= 2)) {
Shutter.skip_relay_change = 1 ;
} else {
- if (pin[GPIO_PWM1+index] < 99) {
+ if (Shutter.mode == SHT_OFF_ON__OPEN_CLOSE_STEPPER) {
Shutter.pwm_frequency = 0;
analogWriteFreq(Shutter.pwm_frequency);
- analogWrite(pin[GPIO_PWM1+index], 0);
+ analogWrite(pin[GPIO_PWM1+i], 0);
// can be operated without counter, but then not that acurate.
- if (pin[GPIO_CNTR1+index] < 99) {
- RtcSettings.pulse_counter[index] = 0;
+ if (pin[GPIO_CNTR1+i] < 99) {
+ RtcSettings.pulse_counter[i] = 0;
}
+ Shutter.accelerator[i] = Shutter.max_pwm_frequency / (Shutter.motordelay[i]>0 ? Shutter.motordelay[i] : 1);
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: Ramp up: %d"), Shutter.accelerator[i]);
}
- Shutter.target_position[index] = target_pos;
- Shutter.start_position[index] = Shutter.real_position[index];
- Shutter.time[index] = 0;
+ Shutter.target_position[i] = target_pos;
+ Shutter.start_position[i] = Shutter.real_position[i];
+ Shutter.time[i] = 0;
Shutter.skip_relay_change = 0;
- Shutter.direction[index] = direction;
- //AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: real %d, start %d, counter %d, max_freq %d, dir %d, freq %d"),Shutter.real_position[index], Shutter.start_position[index] ,RtcSettings.pulse_counter[index],Shutter.max_pwm_frequency , Shutter.direction[index] ,Shutter.max_pwm_frequency );
+ Shutter.direction[i] = direction;
+ //AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: real %d, start %d, counter %d, max_freq %d, dir %d, freq %d"),Shutter.real_position[i], Shutter.start_position[i] ,RtcSettings.pulse_counter[i],Shutter.max_pwm_frequency , Shutter.direction[i] ,Shutter.max_pwm_frequency );
}
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("SHT: Start shutter: %d from %d to %d in directin %d"), index, Shutter.start_position[index], Shutter.target_position[index], Shutter.direction[index]);
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("SHT: Start shutter: %d from %d to %d in directin %d"), i, Shutter.start_position[i], Shutter.target_position[i], Shutter.direction[i]);
}
-void ShutterWaitForMotorStop(uint8_t index)
+void ShutterWaitForMotorStop(uint8_t i)
{
AddLog_P2(LOG_LEVEL_INFO, PSTR("SHT: Wait for Motorstop.."));
- if (Shutter.mode == SHT_OFF_ON__OPEN_CLOSE) {
- if (pin[GPIO_PWM1+index] < 99 && pin[GPIO_CNTR1+index] < 99 ) {
+ if (Shutter.mode == SHT_OFF_ON__OPEN_CLOSE || Shutter.mode == SHT_OFF_ON__OPEN_CLOSE_STEPPER) {
+ if ( Shutter.mode = SHT_OFF_ON__OPEN_CLOSE_STEPPER) {
//AddLog_P2(LOG_LEVEL_INFO, PSTR("SHT: Frequency change %d"), Shutter.pwm_frequency);
- while (Shutter.pwm_frequency > 100) {
- Shutter.pwm_frequency = tmax(Shutter.pwm_frequency-(Shutter.max_pwm_frequency/(Shutter.motordelay[index]+1)) , 0);
+ while (Shutter.pwm_frequency > 0) {
+ Shutter.accelerator[i] = 0;
+ Shutter.pwm_frequency = tmax(Shutter.pwm_frequency-((Shutter.direction[i] == 1 ? Shutter.max_pwm_frequency : Shutter.max_close_pwm_frequency[i])/(Shutter.motordelay[i]+1)) , 0);
analogWriteFreq(Shutter.pwm_frequency);
- analogWrite(pin[GPIO_PWM1+index], 50);
+ analogWrite(pin[GPIO_PWM1+i], 50);
delay(50);
}
- Shutter.pwm_frequency = 0;
- analogWriteFreq(Shutter.pwm_frequency);
- analogWrite(pin[GPIO_PWM1+index], 0);
- Shutter.real_position[index] = ShutterCounterBasedPosition(index);
+ analogWrite(pin[GPIO_PWM1+i], 0);
+ Shutter.real_position[i] = ShutterCounterBasedPosition(i);
} else {
- ExecuteCommandPower(Settings.shutter_startrelay[index], 0, SRC_SHUTTER);
+ ExecuteCommandPower(Settings.shutter_startrelay[i], 0, SRC_SHUTTER);
delay(MOTOR_STOP_TIME);
}
} else {
@@ -391,7 +420,7 @@ void ShutterReportPosition(void)
if (Shutter.direction[i] != 0) {
char stemp2[10];
uint8_t position = ShutterRealToPercentPosition(Shutter.real_position[i], i);
- dtostrfd((float)Shutter.time[i] / 20, 2, stemp2);
+ dtostrfd((float)Shutter.time[i] / steps_per_second, 2, stemp2);
shutter_moving = 1;
//Settings.shutter_position[i] = Settings.shuttercoeff[2][i] * 5 > Shutter.real_position[i] ? Shutter.real_position[i] / Settings.shuttercoeff[2][i] : (Shutter.real_position[i]-Settings.shuttercoeff[0,i]) / Settings.shuttercoeff[1][i];
AddLog_P2(LOG_LEVEL_INFO, MSG_SHUTTER_POS, i+1, Shutter.real_position[i], Shutter.start_position[i], Shutter.target_position[i], Shutter.direction[i], Shutter.motordelay[i],stemp2,Shutter.pwm_frequency);
@@ -430,7 +459,7 @@ void ShutterRelayChanged(void)
//AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: Shutter %d: source: %s, powerstate_local %ld, Shutter.switched_relay %d, manual change %d"), i+1, GetTextIndexed(stemp1, sizeof(stemp1), last_source, kCommandSource), powerstate_local,Shutter.switched_relay,manual_relays_changed);
if (manual_relays_changed) {
//Shutter.skip_relay_change = true;
- if (Shutter.mode == SHT_OFF_ON__OPEN_CLOSE) {
+ if (Shutter.mode == SHT_OFF_ON__OPEN_CLOSE || Shutter.mode == SHT_OFF_ON__OPEN_CLOSE_STEPPER) {
ShutterWaitForMotorStop(i);
switch (powerstate_local) {
case 1:
@@ -478,7 +507,7 @@ void ShutterSetPosition(uint8_t device, uint8_t position)
void CmndShutterOpen(void)
{
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("SHT: Payload close: %d, index %d"), XdrvMailbox.payload, XdrvMailbox.index);
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("SHT: Payload close: %d, i %d"), XdrvMailbox.payload, XdrvMailbox.i);
if ( XdrvMailbox.index == 1 && XdrvMailbox.payload != -99) {
XdrvMailbox.index = XdrvMailbox.payload;
}
@@ -489,7 +518,7 @@ void CmndShutterOpen(void)
void CmndShutterClose(void)
{
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("SHT: Payload open: %d, index %d"), XdrvMailbox.payload, XdrvMailbox.index);
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("SHT: Payload open: %d, i %d"), XdrvMailbox.payload, XdrvMailbox.i);
if ( XdrvMailbox.index == 1 && XdrvMailbox.payload != -99) {
XdrvMailbox.index = XdrvMailbox.payload;
}
@@ -505,14 +534,14 @@ void CmndShutterStop(void)
if ( XdrvMailbox.index == 1 && XdrvMailbox.payload != -99) {
XdrvMailbox.index = XdrvMailbox.payload;
}
- uint32_t index = XdrvMailbox.index -1;
- if (Shutter.direction[index] != 0) {
+ uint32_t i = XdrvMailbox.index -1;
+ if (Shutter.direction[i] != 0) {
- AddLog_P2(LOG_LEVEL_INFO, PSTR("SHT: Stop moving %d: dir: %d"), XdrvMailbox.index, Shutter.direction[index]);
+ AddLog_P2(LOG_LEVEL_INFO, PSTR("SHT: Stop moving %d: dir: %d"), XdrvMailbox.index, Shutter.direction[i]);
// set stop position 10 steps ahead (0.5sec to allow normal stop)
- int32_t temp_realpos = Shutter.start_position[index] + ( (Shutter.time[index]+10) * (Shutter.direction[index] > 0 ? 100 : -Shutter.close_velocity[index]));
- XdrvMailbox.payload = ShutterRealToPercentPosition(temp_realpos, index);
- //XdrvMailbox.payload = Settings.shuttercoeff[2][index] * 5 > temp_realpos ? temp_realpos / Settings.shuttercoeff[2][index] : (temp_realpos-Settings.shuttercoeff[0,index]) / Settings.shuttercoeff[1][index];
+ int32_t temp_realpos = Shutter.start_position[i] + ( (Shutter.time[i]+10) * (Shutter.direction[i] > 0 ? 100 : -Shutter.close_velocity[i]));
+ XdrvMailbox.payload = ShutterRealToPercentPosition(temp_realpos, i);
+ //XdrvMailbox.payload = Settings.shuttercoeff[2][i] * 5 > temp_realpos ? temp_realpos / Settings.shuttercoeff[2][i] : (temp_realpos-Settings.shuttercoeff[0,i]) / Settings.shuttercoeff[1][i];
last_source = SRC_WEBGUI;
CmndShutterPosition();
} else {
@@ -524,7 +553,7 @@ void CmndShutterStop(void)
void CmndShutterPosition(void)
{
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= shutters_present)) {
- uint32_t index = XdrvMailbox.index -1;
+ uint32_t index = XdrvMailbox.index-1;
//limit the payload
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: Pos. in: payload %s (%d), payload %d, idx %d, src %d"), XdrvMailbox.data , XdrvMailbox.data_len, XdrvMailbox.payload , XdrvMailbox.index, last_source );
@@ -542,6 +571,7 @@ void CmndShutterPosition(void)
if (XdrvMailbox.payload != -99) {
//target_pos_percent = Settings.shutter_invert[index] ? 100 - target_pos_percent : target_pos_percent;
Shutter.target_position[index] = ShutterPercentToRealPosition(target_pos_percent, index);
+ Shutter.accelerator[index] = Shutter.max_pwm_frequency / (Shutter.motordelay[index]>0 ? Shutter.motordelay[index] : 1);
//Shutter.target_position[index] = XdrvMailbox.payload < 5 ? Settings.shuttercoeff[2][index] * XdrvMailbox.payload : Settings.shuttercoeff[1][index] * XdrvMailbox.payload + Settings.shuttercoeff[0,index];
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: lastsource %d:, real %d, target %d, payload %d"), last_source, Shutter.real_position[index] ,Shutter.target_position[index],target_pos_percent);
}
@@ -561,7 +591,7 @@ void CmndShutterPosition(void)
}
}
if (Shutter.direction[index] != new_shutterdirection ) {
- if (Shutter.mode == SHT_OFF_ON__OPEN_CLOSE) {
+ if (Shutter.mode == SHT_OFF_ON__OPEN_CLOSE || Shutter.mode == SHT_OFF_ON__OPEN_CLOSE_STEPPER) {
//AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SHT: Delay5 5s, xdrv %d"), XdrvMailbox.payload);
ShutterWaitForMotorStop(index);
ExecuteCommandPower(Settings.shutter_startrelay[index], 0, SRC_SHUTTER);
@@ -617,11 +647,11 @@ void CmndShutterMotorDelay(void)
{
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= shutters_present)) {
if (XdrvMailbox.data_len > 0) {
- Settings.shutter_motordelay[XdrvMailbox.index -1] = (uint16_t)(20 * CharToFloat(XdrvMailbox.data));
+ Settings.shutter_motordelay[XdrvMailbox.index -1] = (uint16_t)(steps_per_second * CharToFloat(XdrvMailbox.data));
ShutterInit();
}
char time_chr[10];
- dtostrfd((float)(Settings.shutter_motordelay[XdrvMailbox.index -1]) / 20, 2, time_chr);
+ dtostrfd((float)(Settings.shutter_motordelay[XdrvMailbox.index -1]) / steps_per_second, 2, time_chr);
ResponseCmndIdxChar(time_chr);
}
}
@@ -660,8 +690,9 @@ void CmndShutterFrequency(void)
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 20000)) {
Shutter.max_pwm_frequency = XdrvMailbox.payload;
if (shutters_present < 4) {
- Settings.shuttercoeff[4][4] = Shutter.max_pwm_frequency;
+ Settings.shuttercoeff[4][3] = Shutter.max_pwm_frequency;
}
+ ShutterInit();
ResponseCmndNumber(XdrvMailbox.payload); // ????
} else {
ResponseCmndNumber(Shutter.max_pwm_frequency);
@@ -707,8 +738,8 @@ void CmndShutterCalibration(void) // ????
messwerte[i] = field;
}
for (i=0 ; i < 5 ; i++) {
- Settings.shuttercoeff[i][XdrvMailbox.index-1] = messwerte[i] * 1000 / messwerte[4];
- AddLog_P2(LOG_LEVEL_INFO, PSTR("Settings.shuttercoeff: %d, i: %d, value: %d, messwert %d"), i,XdrvMailbox.index-1,Settings.shuttercoeff[i][XdrvMailbox.index-1], messwerte[i]);
+ Settings.shuttercoeff[i][XdrvMailbox.index -1] = messwerte[i] * 1000 / messwerte[4];
+ AddLog_P2(LOG_LEVEL_INFO, PSTR("Settings.shuttercoeff: %d, i: %d, value: %d, messwert %d"), i,XdrvMailbox.index -1,Settings.shuttercoeff[i][XdrvMailbox.index -1], messwerte[i]);
}
ShutterInit();
ResponseCmndIdxChar(XdrvMailbox.data);
From f49b498c3902174e61580d88c3b777f84cf58f90 Mon Sep 17 00:00:00 2001
From: stefanbode
Date: Fri, 20 Dec 2019 12:40:40 +0100
Subject: [PATCH 111/559] fix #7213
DIV0 fix
---
tasmota/xdrv_29_deepsleep.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/xdrv_29_deepsleep.ino b/tasmota/xdrv_29_deepsleep.ino
index c830a092e..78479bd5b 100644
--- a/tasmota/xdrv_29_deepsleep.ino
+++ b/tasmota/xdrv_29_deepsleep.ino
@@ -103,7 +103,7 @@ void DeepSleepPrepare(void)
// if more then 10% timeslip = 0 == non valid wakeup; maybe manual
timeslip = (timeslip < -(int32_t)Settings.deepsleep) ? 0 : (timeslip > (int32_t)Settings.deepsleep) ? 0 : 1;
if (timeslip) {
- RtcSettings.deepsleep_slip = (Settings.deepsleep + RtcSettings.nextwakeup - UtcTime()) * RtcSettings.deepsleep_slip / (Settings.deepsleep - (millis() / 1000));
+ RtcSettings.deepsleep_slip = (Settings.deepsleep + RtcSettings.nextwakeup - UtcTime()) * RtcSettings.deepsleep_slip / tmax((Settings.deepsleep - (millis() / 1000),5));
// Avoid crazy numbers. Again maximum 10% deviation.
RtcSettings.deepsleep_slip = tmin(tmax(RtcSettings.deepsleep_slip, 9000), 11000);
RtcSettings.nextwakeup += Settings.deepsleep;
From f2209109e9e306c90b4b4a67df1e54e8ca9d481f Mon Sep 17 00:00:00 2001
From: stefanbode
Date: Fri, 20 Dec 2019 12:45:29 +0100
Subject: [PATCH 112/559] Update xdrv_29_deepsleep.ino
---
tasmota/xdrv_29_deepsleep.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/xdrv_29_deepsleep.ino b/tasmota/xdrv_29_deepsleep.ino
index 78479bd5b..f0a8de685 100644
--- a/tasmota/xdrv_29_deepsleep.ino
+++ b/tasmota/xdrv_29_deepsleep.ino
@@ -103,7 +103,7 @@ void DeepSleepPrepare(void)
// if more then 10% timeslip = 0 == non valid wakeup; maybe manual
timeslip = (timeslip < -(int32_t)Settings.deepsleep) ? 0 : (timeslip > (int32_t)Settings.deepsleep) ? 0 : 1;
if (timeslip) {
- RtcSettings.deepsleep_slip = (Settings.deepsleep + RtcSettings.nextwakeup - UtcTime()) * RtcSettings.deepsleep_slip / tmax((Settings.deepsleep - (millis() / 1000),5));
+ RtcSettings.deepsleep_slip = (Settings.deepsleep + RtcSettings.nextwakeup - UtcTime()) * RtcSettings.deepsleep_slip / tmax((Settings.deepsleep - (millis() / 1000)),5);
// Avoid crazy numbers. Again maximum 10% deviation.
RtcSettings.deepsleep_slip = tmin(tmax(RtcSettings.deepsleep_slip, 9000), 11000);
RtcSettings.nextwakeup += Settings.deepsleep;
From 7459a8a4248c2991b6d39d066f1760d1dc66956c Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 20 Dec 2019 15:12:44 +0100
Subject: [PATCH 113/559] Add restriction if fallback firmware is incompatible
Add restriction if fallback firmware is incompatible with settings resulting in unreachable device
---
RELEASENOTES.md | 1 +
tasmota/CHANGELOG.md | 1 +
tasmota/i18n.h | 4 ++++
tasmota/language/bg-BG.h | 1 +
tasmota/language/cs-CZ.h | 1 +
tasmota/language/de-DE.h | 1 +
tasmota/language/el-GR.h | 1 +
tasmota/language/en-GB.h | 3 ++-
tasmota/language/es-ES.h | 1 +
tasmota/language/fr-FR.h | 1 +
tasmota/language/he-HE.h | 1 +
tasmota/language/hu-HU.h | 1 +
tasmota/language/it-IT.h | 1 +
tasmota/language/ko-KO.h | 1 +
tasmota/language/nl-NL.h | 1 +
tasmota/language/pl-PL.h | 1 +
tasmota/language/pt-BR.h | 1 +
tasmota/language/pt-PT.h | 1 +
tasmota/language/ru-RU.h | 1 +
tasmota/language/sk-SK.h | 1 +
tasmota/language/sv-SE.h | 1 +
tasmota/language/tr-TR.h | 1 +
tasmota/language/uk-UK.h | 1 +
tasmota/language/zh-CN.h | 1 +
tasmota/language/zh-TW.h | 1 +
tasmota/settings.ino | 38 +++++++++++++++++++++++++++++++++++
tasmota/support_tasmota.ino | 14 ++++++++++---
tasmota/tasmota.ino | 2 ++
tasmota/tasmota_version.h | 3 +++
tasmota/xdrv_01_webserver.ino | 10 +++++++--
30 files changed, 91 insertions(+), 6 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 4360e8ee3..9224a1825 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -73,3 +73,4 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Add Zigbee support for Xiaomi Aqara Vibration Sensor and Presence Sensor by Stefan Hadinger
- Add Shutter functions ramp up/down and MQTT reporting by Stefan Bode
- Add fallback support from version 8.x
+- Add restriction if fallback firmware is incompatible with settings resulting in unreachable device
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 1bf38a0ec..2d5ae9077 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -7,6 +7,7 @@
- Add Zigbee send automatic ZigbeeRead after sending a command
- Add Zigbee improving Occupancy:false detection for Aqara sensor
- Add fallback support from version 8.x
+- Add restriction if fallback firmware is incompatible with settings resulting in unreachable device
### 7.1.2.5 20191213
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index fed6930d7..1844dd44b 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -635,4 +635,8 @@ const char S_INFORMATION[] PROGMEM = D_INFORMATION;
const char S_RESTART[] PROGMEM = D_RESTART;
#endif // USE_WEBSERVER
+const uint32_t MARKER_START = 0x5AA55AA5;
+const uint32_t MARKER_END = 0xA55AA55A;
+const uint32_t VERSION_MARKER[] PROGMEM = { MARKER_START, VERSION, MARKER_END };
+
#endif // _I18N_H_
diff --git a/tasmota/language/bg-BG.h b/tasmota/language/bg-BG.h
index 1f18d8efb..251a840e8 100644
--- a/tasmota/language/bg-BG.h
+++ b/tasmota/language/bg-BG.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Грешка при изтриване на RF чипа"
#define D_UPLOAD_ERR_12 "Грешка при записване в RF чипа"
#define D_UPLOAD_ERR_13 "Грешка при декодиране на RF фърмуера"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Код на грешка при зареждането"
#define D_ENTER_COMMAND "Въвеждане на команда"
diff --git a/tasmota/language/cs-CZ.h b/tasmota/language/cs-CZ.h
index 1d7c6f381..79ba068ab 100644
--- a/tasmota/language/cs-CZ.h
+++ b/tasmota/language/cs-CZ.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Chyba smazání RF chipu"
#define D_UPLOAD_ERR_12 "Chyba při zápisu do RF chipu"
#define D_UPLOAD_ERR_13 "Chyba dekódování RF firmwaru"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Chyba nahrávání"
#define D_ENTER_COMMAND "Vlož příkaz"
diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h
index 6569dd232..3cb7786af 100644
--- a/tasmota/language/de-DE.h
+++ b/tasmota/language/de-DE.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "RF Chip löschen fehlgeschlagen"
#define D_UPLOAD_ERR_12 "RF Chip beschreiben fehlgeschlagen"
#define D_UPLOAD_ERR_13 "RF Firmware ungültig"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Upload Fehler Nummer"
#define D_ENTER_COMMAND "Befehl eingeben"
diff --git a/tasmota/language/el-GR.h b/tasmota/language/el-GR.h
index f8b9c9614..3bea69d8f 100644
--- a/tasmota/language/el-GR.h
+++ b/tasmota/language/el-GR.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Αποτυχία σβησίματος στο RF chip"
#define D_UPLOAD_ERR_12 "Αποτυχία εγγραφής στο RF chip"
#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Κωδικός λάθους στη μεταφόρτωση"
#define D_ENTER_COMMAND "Εισαγωγή εντολής"
diff --git a/tasmota/language/en-GB.h b/tasmota/language/en-GB.h
index 257a34c86..d64632603 100644
--- a/tasmota/language/en-GB.h
+++ b/tasmota/language/en-GB.h
@@ -28,7 +28,7 @@
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
* Use online command Prefix to translate cmnd, stat and tele.
*
- * Updated until v6.2.1.11
+ * Updated until v8.0.0.0
\*********************************************************************/
//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Upload error code"
#define D_ENTER_COMMAND "Enter command"
diff --git a/tasmota/language/es-ES.h b/tasmota/language/es-ES.h
index 7527bb77a..b0c9477de 100644
--- a/tasmota/language/es-ES.h
+++ b/tasmota/language/es-ES.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "No se pudo borrar en el chip RF"
#define D_UPLOAD_ERR_12 "No se puedo escribir en el chip RF"
#define D_UPLOAD_ERR_13 "No se pudo decodificar firmware RF"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Código de error de carga"
#define D_ENTER_COMMAND "Ingresar comando"
diff --git a/tasmota/language/fr-FR.h b/tasmota/language/fr-FR.h
index e107409e3..48576002e 100644
--- a/tasmota/language/fr-FR.h
+++ b/tasmota/language/fr-FR.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Erreur d'effacement du chip RF"
#define D_UPLOAD_ERR_12 "Erreur d'accès en écriture au chip RF"
#define D_UPLOAD_ERR_13 "Erreur de décodage du firmware RF"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Code d'erreur téléchargement"
#define D_ENTER_COMMAND "Saisir une commande"
diff --git a/tasmota/language/he-HE.h b/tasmota/language/he-HE.h
index ac4dadb8e..1d4a1b549 100644
--- a/tasmota/language/he-HE.h
+++ b/tasmota/language/he-HE.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "נכשלה RF מחיקת שבב"
#define D_UPLOAD_ERR_12 "נכשלה RF כתיבת שבב"
#define D_UPLOAD_ERR_13 "נכשלה RF קידוד קושחת שבב"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "שגיאת קוד העלאה"
#define D_ENTER_COMMAND "הקש פקודה"
diff --git a/tasmota/language/hu-HU.h b/tasmota/language/hu-HU.h
index 62806fa46..111558516 100644
--- a/tasmota/language/hu-HU.h
+++ b/tasmota/language/hu-HU.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Az RF chip törlése sikertelen"
#define D_UPLOAD_ERR_12 "Az RF chip írása sikertelen"
#define D_UPLOAD_ERR_13 "Az RF firmware dekódolása sikertelen"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Feltöltési hibakód"
#define D_ENTER_COMMAND "Kérem a parancsot..."
diff --git a/tasmota/language/it-IT.h b/tasmota/language/it-IT.h
index 0585c12d8..edf9b92c2 100644
--- a/tasmota/language/it-IT.h
+++ b/tasmota/language/it-IT.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Cancellazione fallita del chip RF"
#define D_UPLOAD_ERR_12 "Scrittura fallita del chip RF"
#define D_UPLOAD_ERR_13 "Decodifica fallita del firmware RF"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Codice errore invio"
#define D_ENTER_COMMAND "Inserire comando"
diff --git a/tasmota/language/ko-KO.h b/tasmota/language/ko-KO.h
index bff508474..4e20860f5 100644
--- a/tasmota/language/ko-KO.h
+++ b/tasmota/language/ko-KO.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "RF 칩 삭제 실패"
#define D_UPLOAD_ERR_12 "RF 칩 쓰기 실패"
#define D_UPLOAD_ERR_13 "RF 펌웨어 decode 실패"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "업로드 에러 코드"
#define D_ENTER_COMMAND "커맨드 입력"
diff --git a/tasmota/language/nl-NL.h b/tasmota/language/nl-NL.h
index 75d841ddc..e49b71ca1 100644
--- a/tasmota/language/nl-NL.h
+++ b/tasmota/language/nl-NL.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Wissen RF chip mislukt"
#define D_UPLOAD_ERR_12 "Opwaarderen RF chip mislukt"
#define D_UPLOAD_ERR_13 "Decoderen RF bestand mislukt"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Opwaardeer foutcode"
#define D_ENTER_COMMAND "Geef opdracht"
diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h
index 8f5af6813..a2aada42b 100644
--- a/tasmota/language/pl-PL.h
+++ b/tasmota/language/pl-PL.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Błąd kasowania układu RF"
#define D_UPLOAD_ERR_12 "Błąd zapisu układu RF"
#define D_UPLOAD_ERR_13 "Błąd dekodowania oprrogramowania układu RF"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Błąd wgrywania"
#define D_ENTER_COMMAND "Wprowadź polecenie"
diff --git a/tasmota/language/pt-BR.h b/tasmota/language/pt-BR.h
index 0efa57789..ae808ef9e 100644
--- a/tasmota/language/pt-BR.h
+++ b/tasmota/language/pt-BR.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Falha ao apagar o chip RF"
#define D_UPLOAD_ERR_12 "Falha ao escrever o chip RF"
#define D_UPLOAD_ERR_13 "Falha ao decodificar o firmware de RF"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Código de erro do envio"
#define D_ENTER_COMMAND "Inserir comando"
diff --git a/tasmota/language/pt-PT.h b/tasmota/language/pt-PT.h
index a6299c0c8..e6684232c 100644
--- a/tasmota/language/pt-PT.h
+++ b/tasmota/language/pt-PT.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Falha ao apagar o chip de RF"
#define D_UPLOAD_ERR_12 "Falha ao escrever no chip de RF"
#define D_UPLOAD_ERR_13 "Falha ao descodificar o firmware RF"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Código de erro do envio"
#define D_ENTER_COMMAND "Inserir comando"
diff --git a/tasmota/language/ru-RU.h b/tasmota/language/ru-RU.h
index 3bd788ede..cd5c072aa 100644
--- a/tasmota/language/ru-RU.h
+++ b/tasmota/language/ru-RU.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Код ошибки загрузки"
#define D_ENTER_COMMAND "Введите команду"
diff --git a/tasmota/language/sk-SK.h b/tasmota/language/sk-SK.h
index a64e49e01..ef16212ca 100644
--- a/tasmota/language/sk-SK.h
+++ b/tasmota/language/sk-SK.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Chyba zmazania RF chipu"
#define D_UPLOAD_ERR_12 "Chyba pri zápise do RF chipu"
#define D_UPLOAD_ERR_13 "Chyba dekódovania RF firmwaru"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Chyba nahrávania"
#define D_ENTER_COMMAND "Vlož príkaz"
diff --git a/tasmota/language/sv-SE.h b/tasmota/language/sv-SE.h
index 51ffc2ae3..971ee42b1 100644
--- a/tasmota/language/sv-SE.h
+++ b/tasmota/language/sv-SE.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Misslyckades rensa RF chip"
#define D_UPLOAD_ERR_12 "Misslyckades skriva till RF chip"
#define D_UPLOAD_ERR_13 "Misslyckades avkoda RF firmware"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Uppladdningsfelkod"
#define D_ENTER_COMMAND "Ange kommando"
diff --git a/tasmota/language/tr-TR.h b/tasmota/language/tr-TR.h
index 6bc48c40f..67400d1cc 100644
--- a/tasmota/language/tr-TR.h
+++ b/tasmota/language/tr-TR.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Upload error code"
#define D_ENTER_COMMAND "Komut girişi"
diff --git a/tasmota/language/uk-UK.h b/tasmota/language/uk-UK.h
index b4a314630..b81f30012 100644
--- a/tasmota/language/uk-UK.h
+++ b/tasmota/language/uk-UK.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Помилка стирання чипу RF"
#define D_UPLOAD_ERR_12 "Помилка запису чипу RF"
#define D_UPLOAD_ERR_13 "Помилка розкодування прошивки RF"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "Код помилки завантаження"
#define D_ENTER_COMMAND "Уведіть команду"
diff --git a/tasmota/language/zh-CN.h b/tasmota/language/zh-CN.h
index 21aa63be3..665f39fc3 100644
--- a/tasmota/language/zh-CN.h
+++ b/tasmota/language/zh-CN.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "擦除 RF 芯片失败"
#define D_UPLOAD_ERR_12 "写入 RF 芯片失败"
#define D_UPLOAD_ERR_13 "解码 RF 固件失败"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "上传错误代码"
#define D_ENTER_COMMAND "输入命令"
diff --git a/tasmota/language/zh-TW.h b/tasmota/language/zh-TW.h
index 1d78f181e..6f56e03df 100644
--- a/tasmota/language/zh-TW.h
+++ b/tasmota/language/zh-TW.h
@@ -353,6 +353,7 @@
#define D_UPLOAD_ERR_11 "Failed to erase RF chip"
#define D_UPLOAD_ERR_12 "Failed to write to RF chip"
#define D_UPLOAD_ERR_13 "Failed to decode RF firmware"
+#define D_UPLOAD_ERR_14 "Not compatible"
#define D_UPLOAD_ERROR_CODE "上傳錯誤代碼"
#define D_ENTER_COMMAND "輸入命令"
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index d921e4957..b572ca645 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -343,6 +343,44 @@ void SetFlashModeDout(void)
delete[] _buffer;
}
+uint32_t OtaVersion(void)
+{
+ eboot_command ebcmd;
+ eboot_command_read(&ebcmd);
+ uint32_t start_address = ebcmd.args[0];
+ uint32_t end_address = start_address + (ebcmd.args[2] & 0xFFFFF000) + FLASH_SECTOR_SIZE;
+ uint32_t* buffer = new uint32_t[FLASH_SECTOR_SIZE / 4];
+
+ uint32_t version[3] = { 0 };
+ bool found = false;
+ for (uint32_t address = start_address; address < end_address; address = address + FLASH_SECTOR_SIZE) {
+ ESP.flashRead(address, (uint32_t*)buffer, FLASH_SECTOR_SIZE);
+ for (uint32_t i = 0; i < (FLASH_SECTOR_SIZE / 4); i++) {
+ version[0] = version[1];
+ version[1] = version[2];
+ version[2] = buffer[i];
+ if ((version[0] == MARKER_START) && (version[2] == MARKER_END)) {
+ found = true;
+ break;
+ }
+ }
+ if (found) { break; }
+ }
+ delete[] buffer;
+
+ if (!found) { version[1] = 0; }
+
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR("OTA: Version 0x%08X, Compatible 0x%08X"), version[1], VERSION_COMPATIBLE);
+
+ return version[1];
+}
+
+void AbandonOta(void)
+{
+ uint32_t eboot_magic = 0;
+ ESP.rtcUserMemoryWrite(0, (uint32_t*)&eboot_magic, sizeof(eboot_magic));
+}
+
void SettingsBufferFree(void)
{
if (settings_buffer != nullptr) {
diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino
index 0935d9a28..08b898efb 100644
--- a/tasmota/support_tasmota.ino
+++ b/tasmota/support_tasmota.ino
@@ -866,13 +866,21 @@ void Every250mSeconds(void)
}
if (90 == ota_state_flag) { // Allow MQTT to reconnect
ota_state_flag = 0;
+ Response_P(PSTR("{\"" D_CMND_UPGRADE "\":\""));
if (ota_result) {
// SetFlashModeDout(); // Force DOUT for both ESP8266 and ESP8285
- Response_P(PSTR(D_JSON_SUCCESSFUL ". " D_JSON_RESTARTING));
+ if (OtaVersion() < VERSION_COMPATIBLE) {
+ AbandonOta();
+ ResponseAppend_P(PSTR(D_JSON_FAILED " " D_UPLOAD_ERR_14));
+ } else {
+ ResponseAppend_P(PSTR(D_JSON_SUCCESSFUL ". " D_JSON_RESTARTING));
+ restart_flag = 2;
+ }
} else {
- Response_P(PSTR(D_JSON_FAILED " %s"), ESPhttpUpdate.getLastErrorString().c_str());
+ ResponseAppend_P(PSTR(D_JSON_FAILED " %s"), ESPhttpUpdate.getLastErrorString().c_str());
}
- restart_flag = 2; // Restart anyway to keep memory clean webserver
+ ResponseAppend_P(PSTR("\"}"));
+// restart_flag = 2; // Restart anyway to keep memory clean webserver
MqttPublishPrefixTopic_P(STAT, PSTR(D_CMND_UPGRADE));
}
}
diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino
index 3b9e64a25..67be9d35f 100644
--- a/tasmota/tasmota.ino
+++ b/tasmota/tasmota.ino
@@ -334,6 +334,8 @@ void setup(void)
AddLog_P2(LOG_LEVEL_INFO, PSTR(D_WARNING_MINIMAL_VERSION));
#endif // FIRMWARE_MINIMAL
+ memcpy_P(log_data, VERSION_MARKER, 1); // Dummy for compiler saving VERSION_MARKER
+
RtcInit();
#ifdef USE_ARDUINO_OTA
diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h
index a083dad4b..84ff6d905 100644
--- a/tasmota/tasmota_version.h
+++ b/tasmota/tasmota_version.h
@@ -22,4 +22,7 @@
const uint32_t VERSION = 0x07010206;
+// Lowest compatible version
+const uint32_t VERSION_COMPATIBLE = 0x06000000;
+
#endif // _TASMOTA_VERSION_H_
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index 9c8131ad3..fe10e4cd3 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -511,6 +511,8 @@ const char kUploadErrors[] PROGMEM =
D_UPLOAD_ERR_1 "|" D_UPLOAD_ERR_2 "|" D_UPLOAD_ERR_3 "|" D_UPLOAD_ERR_4 "|" D_UPLOAD_ERR_5 "|" D_UPLOAD_ERR_6 "|" D_UPLOAD_ERR_7 "|" D_UPLOAD_ERR_8 "|" D_UPLOAD_ERR_9
#ifdef USE_RF_FLASH
"|" D_UPLOAD_ERR_10 "|" D_UPLOAD_ERR_11 "|" D_UPLOAD_ERR_12 "|" D_UPLOAD_ERR_13
+#else
+ "|" D_UPLOAD_ERR_14
#endif
;
@@ -2137,12 +2139,11 @@ void HandleUploadDone(void)
WSContentSendStyle();
WSContentSend_P(PSTR("" D_UPLOAD " " D_FAILED ""));
WSContentSend_P(PSTR("%06x'>" D_FAILED "
"), WebColor(COL_TEXT_WARNING));
#ifdef USE_RF_FLASH
if (Web.upload_error < 14) {
#else
- if (Web.upload_error < 10) {
+ if (Web.upload_error < 11) {
#endif
GetTextIndexed(error, sizeof(error), Web.upload_error -1, kUploadErrors);
} else {
@@ -2376,6 +2377,11 @@ void HandleUploadLoop(void)
Web.upload_error = 6; // Upload failed. Enable logging 3
return;
}
+ if (OtaVersion() < VERSION_COMPATIBLE) {
+ AbandonOta();
+ Web.upload_error = 10; // Not compatible
+ return;
+ }
}
if (!Web.upload_error) {
AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_UPLOAD D_SUCCESSFUL " %u bytes. " D_RESTARTING), upload.totalSize);
From 72849f672e907ca5ed43c697fb13cf57a065c1f5 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 20 Dec 2019 15:48:40 +0100
Subject: [PATCH 114/559] Add support for DHT12
- Fix DeepSleep in case there is no wifi by Stefan Bode (#7213)
- Add support for DHT12 Temperature and Humidity sensor by Stefan Oskamp
---
BUILDS.md | 1 +
RELEASENOTES.md | 2 ++
tasmota/CHANGELOG.md | 2 ++
tasmota/support_features.ino | 4 +++-
tools/decode-status.py | 2 +-
5 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/BUILDS.md b/BUILDS.md
index d21fd9f15..3b311a6eb 100644
--- a/BUILDS.md
+++ b/BUILDS.md
@@ -106,6 +106,7 @@
| USE_PAJ7620 | - | - | - | - | - | - | - |
| USE_PCF8574 | - | - | - | - | - | - | - |
| USE_HIH6 | - | - | - | - | x | - | - |
+| USE_DHT12 | - | - | - | - | x | - | - |
| | | | | | | | |
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
| USE_SPI | - | - | - | - | - | - | x |
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 9224a1825..234258dab 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -58,6 +58,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Fix flashing H801 led at boot by Stefan Hadinger (#7165, #649)
- Fix duplicated ``Backlog`` when using Event inside a Backlog by Adrian Scillato (#7178, #7147)
- Fix Gui Timer when using a negative zero offset of -00:00 by Peter Ooms (#7174)
+- Fix DeepSleep in case there is no wifi by Stefan Bode (#7213)
- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config based in PR by Luis Teixeira (#7108)
- Add command ``Sensor34 9
`` to set minimum delta to trigger JSON message by @tobox (#7188)
- Add rule var ``%topic%`` by Adrian Scillato (#5522)
@@ -74,3 +75,4 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Add Shutter functions ramp up/down and MQTT reporting by Stefan Bode
- Add fallback support from version 8.x
- Add restriction if fallback firmware is incompatible with settings resulting in unreachable device
+- Add support for DHT12 Temperature and Humidity sensor by Stefan Oskamp
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 2d5ae9077..2b32857c2 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -4,10 +4,12 @@
- Change some more Settings locations freeing up space for future single char allowing variable length text
- Change tasmota-basic.bin and FIRMWARE_BASIC to tasmota-lite.bin and FIRMWARE_LITE
+- Fix DeepSleep in case there is no wifi by Stefan Bode (#7213)
- Add Zigbee send automatic ZigbeeRead after sending a command
- Add Zigbee improving Occupancy:false detection for Aqara sensor
- Add fallback support from version 8.x
- Add restriction if fallback firmware is incompatible with settings resulting in unreachable device
+- Add support for DHT12 Temperature and Humidity sensor by Stefan Oskamp
### 7.1.2.5 20191213
diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino
index be4c8f6a4..31428d03b 100644
--- a/tasmota/support_features.ino
+++ b/tasmota/support_features.ino
@@ -489,7 +489,9 @@ void GetFeatures(void)
#ifdef USE_TSL2591
feature5 |= 0x00080000;
#endif
-// feature5 |= 0x00100000;
+#ifdef USE_DHT12
+ feature5 |= 0x00100000;
+#endif
// feature5 |= 0x00200000;
// feature5 |= 0x00400000;
// feature5 |= 0x00800000;
diff --git a/tools/decode-status.py b/tools/decode-status.py
index be79cf921..e6751ae92 100755
--- a/tools/decode-status.py
+++ b/tools/decode-status.py
@@ -187,7 +187,7 @@ a_features = [[
"USE_SHUTTER","USE_PCF8574","USE_DDSU666","USE_DEEPSLEEP",
"USE_SONOFF_SC","USE_SONOFF_RF","USE_SONOFF_L1","USE_EXS_DIMMER",
"USE_ARDUINO_SLAVE","USE_HIH6","USE_HPMA","USE_TSL2591",
- "","","","",
+ "USE_DHT12","","","",
"","","","",
"","","",""
]]
From 18bc158bc84ca2d3c7c713e106dabf8329fa0920 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Fri, 20 Dec 2019 16:01:24 +0100
Subject: [PATCH 115/559] Fix Fade would ignore ``savedata 0`` and store to
flash anyways (#7262)
---
tasmota/CHANGELOG.md | 1 +
tasmota/xdrv_04_light.ino | 12 +++++++-----
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 2b32857c2..f14c46658 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -10,6 +10,7 @@
- Add fallback support from version 8.x
- Add restriction if fallback firmware is incompatible with settings resulting in unreachable device
- Add support for DHT12 Temperature and Humidity sensor by Stefan Oskamp
+- Fix Fade would ignore ``savedata 0`` and store to flash anyways (#7262)
### 7.1.2.5 20191213
diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino
index 7f1e66fc6..6148a9aad 100644
--- a/tasmota/xdrv_04_light.ino
+++ b/tasmota/xdrv_04_light.ino
@@ -1766,11 +1766,13 @@ void LightApplyFade(void) {
// Note: Settings.light_speed is the number of half-seconds for a 100% fade,
// i.e. light_speed=1 means 1024 steps in 10 ticks (500ms)
Light.fade_duration = (distance * Settings.light_speed * 10) / 1024;
- // Also postpone the save_data for the duration of the Fade (in seconds)
- uint32_t delay_seconds = 1 + (Light.fade_duration + 19) / 20; // add one more second
- // AddLog_P2(LOG_LEVEL_INFO, PSTR("delay_seconds %d, save_data_counter %d"), delay_seconds, save_data_counter);
- if (save_data_counter < delay_seconds) {
- save_data_counter = delay_seconds; // pospone
+ if (Settings.save_data) {
+ // Also postpone the save_data for the duration of the Fade (in seconds)
+ uint32_t delay_seconds = 1 + (Light.fade_duration + 19) / 20; // add one more second
+ // AddLog_P2(LOG_LEVEL_INFO, PSTR("delay_seconds %d, save_data_counter %d"), delay_seconds, save_data_counter);
+ if (save_data_counter < delay_seconds) {
+ save_data_counter = delay_seconds; // pospone
+ }
}
} else {
// no fade needed, we keep the duration at zero, it will fallback directly to end of fade
From 70a2c2cd20cb5a6003151f1cdf05a9232bd7a1da Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 20 Dec 2019 16:22:49 +0100
Subject: [PATCH 116/559] Fix Fade
---
RELEASENOTES.md | 3 +++
tasmota/CHANGELOG.md | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 234258dab..56c4e2c07 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -14,6 +14,8 @@ See [migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-pat
4. Migrate to **Sonoff-Tasmota 6.x**
5. Migrate to **Tasmota 7.x**
+Only this version will support fallback from version 8.x.
+
## Supported Core versions
This release will be supported from ESP8266/Arduino library Core version **2.6.1** due to reported security and stability issues on previous Core version.
@@ -59,6 +61,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Fix duplicated ``Backlog`` when using Event inside a Backlog by Adrian Scillato (#7178, #7147)
- Fix Gui Timer when using a negative zero offset of -00:00 by Peter Ooms (#7174)
- Fix DeepSleep in case there is no wifi by Stefan Bode (#7213)
+- Fix Fade would ignore ``savedata 0`` and store to flash anyways (#7262)
- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config based in PR by Luis Teixeira (#7108)
- Add command ``Sensor34 9 `` to set minimum delta to trigger JSON message by @tobox (#7188)
- Add rule var ``%topic%`` by Adrian Scillato (#5522)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index f14c46658..d847aef5b 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -5,12 +5,12 @@
- Change some more Settings locations freeing up space for future single char allowing variable length text
- Change tasmota-basic.bin and FIRMWARE_BASIC to tasmota-lite.bin and FIRMWARE_LITE
- Fix DeepSleep in case there is no wifi by Stefan Bode (#7213)
+- Fix Fade would ignore ``savedata 0`` and store to flash anyways (#7262)
- Add Zigbee send automatic ZigbeeRead after sending a command
- Add Zigbee improving Occupancy:false detection for Aqara sensor
- Add fallback support from version 8.x
- Add restriction if fallback firmware is incompatible with settings resulting in unreachable device
- Add support for DHT12 Temperature and Humidity sensor by Stefan Oskamp
-- Fix Fade would ignore ``savedata 0`` and store to flash anyways (#7262)
### 7.1.2.5 20191213
From 74d0f55ce725f578de6ab27b0d0f4ff68eb9cb82 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 20 Dec 2019 16:36:08 +0100
Subject: [PATCH 117/559] Update languages
---
tasmota/language/de-DE.h | 4 ++--
tasmota/language/nl-NL.h | 22 +++++++++++-----------
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h
index 3cb7786af..c61da0932 100644
--- a/tasmota/language/de-DE.h
+++ b/tasmota/language/de-DE.h
@@ -28,7 +28,7 @@
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
* Use online command Prefix to translate cmnd, stat and tele.
*
- * Updated until v6.6.0.21
+ * Updated until v8.0.0
\*********************************************************************/
//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -353,7 +353,7 @@
#define D_UPLOAD_ERR_11 "RF Chip löschen fehlgeschlagen"
#define D_UPLOAD_ERR_12 "RF Chip beschreiben fehlgeschlagen"
#define D_UPLOAD_ERR_13 "RF Firmware ungültig"
-#define D_UPLOAD_ERR_14 "Not compatible"
+#define D_UPLOAD_ERR_14 "Nicht kompatibel"
#define D_UPLOAD_ERROR_CODE "Upload Fehler Nummer"
#define D_ENTER_COMMAND "Befehl eingeben"
diff --git a/tasmota/language/nl-NL.h b/tasmota/language/nl-NL.h
index e49b71ca1..40222e65f 100644
--- a/tasmota/language/nl-NL.h
+++ b/tasmota/language/nl-NL.h
@@ -28,7 +28,7 @@
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
* Use online command Prefix to translate cmnd, stat and tele.
*
- * Updated until v6.7.0
+ * Updated until v8.0.0
\*********************************************************************/
//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -353,7 +353,7 @@
#define D_UPLOAD_ERR_11 "Wissen RF chip mislukt"
#define D_UPLOAD_ERR_12 "Opwaarderen RF chip mislukt"
#define D_UPLOAD_ERR_13 "Decoderen RF bestand mislukt"
-#define D_UPLOAD_ERR_14 "Not compatible"
+#define D_UPLOAD_ERR_14 "Niet geschikt"
#define D_UPLOAD_ERROR_CODE "Opwaardeer foutcode"
#define D_ENTER_COMMAND "Geef opdracht"
@@ -479,12 +479,12 @@
#define D_PARTICALS_BEYOND "Stofdeeltjes"
// xsns_32_mpu6050.ino
-#define D_AX_AXIS "Accel. X-Axis"
-#define D_AY_AXIS "Accel. Y-Axis"
-#define D_AZ_AXIS "Accel. Z-Axis"
-#define D_GX_AXIS "Gyro X-Axis"
-#define D_GY_AXIS "Gyro Y-Axis"
-#define D_GZ_AXIS "Gyro Z-Axis"
+#define D_AX_AXIS "Versn. X-as"
+#define D_AY_AXIS "Versn. Y-as"
+#define D_AZ_AXIS "Versn. Z-as"
+#define D_GX_AXIS "Gyro X-as"
+#define D_GY_AXIS "Gyro Y-as"
+#define D_GZ_AXIS "Gyro Z-as"
// xsns_34_hx711.ino
#define D_HX_CAL_REMOVE "Verwijder gewicht"
@@ -627,9 +627,9 @@
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
// Units
#define D_UNIT_AMPERE "A"
From 7e24ed9c2cd6886c80dadb3a35b70faea849c73c Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 20 Dec 2019 18:24:20 +0100
Subject: [PATCH 118/559] Fix error message
---
tasmota/settings.h | 4 ++--
tasmota/settings.ino | 4 ++++
tasmota/xdrv_01_webserver.ino | 10 +++++-----
3 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/tasmota/settings.h b/tasmota/settings.h
index af74422df..8b7fe2822 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -91,7 +91,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
uint32_t grouptopic_mode : 1; // bit 25 (v7.0.0.1) - SetOption75 - GroupTopic replaces %topic% (0) or fixed topic cmnd/grouptopic (1)
uint32_t bootcount_update : 1; // bit 26 (v7.0.0.4) - SetOption76 - Enable incrementing bootcount when deepsleep is enabled
uint32_t slider_dimmer_stay_on : 1; // bit 27 (v7.0.0.6) - SetOption77 - Do not power off if slider moved to far left
- uint32_t spare28 : 1;
+ uint32_t compatibility_check : 1; // bit 28 (v7.1.2.6) - SetOption78 - Disable OTA compatibility check
uint32_t spare29 : 1;
uint32_t shutter_mode : 1; // bit 30 (v6.6.0.14) - SetOption80 - Enable shutter support
uint32_t pcf8574_ports_inverted : 1; // bit 31 (v6.6.0.14) - SetOption81 - Invert all ports on PCF8574 devices
@@ -428,7 +428,7 @@ struct SYSCFG {
unsigned long weight_calibration; // 7C4
unsigned long energy_frequency_calibration; // 7C8 also used by HX711 to save last weight
uint16_t web_refresh; // 7CC
- char mems[MAX_RULE_MEMS][10]; // 7CE
+ char mems[MAX_RULE_MEMS][10]; // 7CE - Used by scripter as script_pram
char rules[MAX_RULE_SETS][MAX_RULE_SIZE]; // 800 uses 512 bytes in v5.12.0m, 3 x 512 bytes in v5.14.0b
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index b572ca645..afbd7b223 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -345,6 +345,10 @@ void SetFlashModeDout(void)
uint32_t OtaVersion(void)
{
+ if (Settings.flag3.compatibility_check) {
+ return 0xFFFFFFFF;
+ }
+
eboot_command ebcmd;
eboot_command_read(&ebcmd);
uint32_t start_address = ebcmd.args[0];
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index fe10e4cd3..6b0edd8cb 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -511,9 +511,8 @@ const char kUploadErrors[] PROGMEM =
D_UPLOAD_ERR_1 "|" D_UPLOAD_ERR_2 "|" D_UPLOAD_ERR_3 "|" D_UPLOAD_ERR_4 "|" D_UPLOAD_ERR_5 "|" D_UPLOAD_ERR_6 "|" D_UPLOAD_ERR_7 "|" D_UPLOAD_ERR_8 "|" D_UPLOAD_ERR_9
#ifdef USE_RF_FLASH
"|" D_UPLOAD_ERR_10 "|" D_UPLOAD_ERR_11 "|" D_UPLOAD_ERR_12 "|" D_UPLOAD_ERR_13
-#else
- "|" D_UPLOAD_ERR_14
#endif
+ "|" D_UPLOAD_ERR_14
;
const uint16_t DNS_PORT = 53;
@@ -2141,9 +2140,10 @@ void HandleUploadDone(void)
if (Web.upload_error) {
WSContentSend_P(PSTR("%06x'>" D_FAILED "
"), WebColor(COL_TEXT_WARNING));
#ifdef USE_RF_FLASH
- if (Web.upload_error < 14) {
+ if (Web.upload_error < 15) {
#else
- if (Web.upload_error < 11) {
+ if ((Web.upload_error < 10) || (14 == Web.upload_error)) {
+ if (14 == Web.upload_error) { Web.upload_error = 10; }
#endif
GetTextIndexed(error, sizeof(error), Web.upload_error -1, kUploadErrors);
} else {
@@ -2379,7 +2379,7 @@ void HandleUploadLoop(void)
}
if (OtaVersion() < VERSION_COMPATIBLE) {
AbandonOta();
- Web.upload_error = 10; // Not compatible
+ Web.upload_error = 14; // Not compatible
return;
}
}
From 42f25b1cfb928671460d7dd3f4cd131c4521e516 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 20 Dec 2019 18:37:14 +0100
Subject: [PATCH 119/559] Update xdrv_01_webserver.ino
---
tasmota/xdrv_01_webserver.ino | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index 6b0edd8cb..8aece2be8 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -2238,7 +2238,7 @@ void HandleUploadLoop(void)
Update.end(); // End esp8266 update session
Web.upload_file_type = UPL_EFM8BB1;
- Web.upload_error = SnfBrUpdateInit();
+ Web.upload_error = SnfBrUpdateInit(); // 10, 11
if (Web.upload_error != 0) { return; }
} else
#endif // USE_RF_FLASH
@@ -2246,7 +2246,7 @@ void HandleUploadLoop(void)
if ((WEMOS == my_module_type) && (upload.buf[0] == ':')) { // Check if this is a ARDUINO SLAVE hex file
Update.end(); // End esp8266 update session
Web.upload_file_type = UPL_TASMOTASLAVE;
- Web.upload_error = TasmotaSlave_UpdateInit();
+ Web.upload_error = TasmotaSlave_UpdateInit(); // 0
if (Web.upload_error != 0) { return; }
} else
#endif
@@ -2281,13 +2281,13 @@ void HandleUploadLoop(void)
free(efm8bb1_update);
efm8bb1_update = nullptr;
if (result != 0) {
- Web.upload_error = abs(result); // 2 = Not enough space, 8 = File invalid
+ Web.upload_error = abs(result); // 2 = Not enough space, 8 = File invalid, 12, 13
return;
}
}
ssize_t result = rf_search_and_write(upload.buf, upload.currentSize);
if (result < 0) {
- Web.upload_error = abs(result);
+ Web.upload_error = abs(result); // 8, 12, 13
return;
} else if (result > 0) {
if ((size_t)result > upload.currentSize) {
From e85f1560a22c514ff945257891a4d7a7d642fed6 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 Dec 2019 12:43:07 +0100
Subject: [PATCH 120/559] Refactor DHT12 sensor driver
---
tasmota/xsns_58_dht12.ino | 136 +++++++++++++++++++++-----------------
1 file changed, 74 insertions(+), 62 deletions(-)
diff --git a/tasmota/xsns_58_dht12.ino b/tasmota/xsns_58_dht12.ino
index 1c60329b8..88dfd3598 100644
--- a/tasmota/xsns_58_dht12.ino
+++ b/tasmota/xsns_58_dht12.ino
@@ -28,82 +28,94 @@
#define XSNS_58 58
#define XI2C_41 41 // See I2CDEVICES.md
-#define DHT12_ADDR (uint8_t) 0x5C
+#define DHT12_ADDR 0x5C
-char dht12_name[] = "DHT12-0x00";
-uint8_t dht12_count = 0;
-float dht12_temperature = NAN;
-float dht12_humidity = NAN;
+struct DHT12 {
+ float temperature = NAN;
+ float humidity = NAN;
+ uint8_t valid = 0;
+ uint8_t count = 0;
+ char name[6] = "DHT12";
+} Dht12;
bool Dht12Read(void)
{
- Wire.beginTransmission(DHT12_ADDR);
- Wire.write(0);
- if (Wire.endTransmission() != 0) {
- return false;
- }
- delay(50);
- Wire.requestFrom(DHT12_ADDR, (uint8_t) 5);
- delay(5);
- uint8_t humidity = Wire.read();
- uint8_t humidityTenth = Wire.read();
- uint8_t temp = Wire.read();
- uint8_t tempTenth = Wire.read();
- uint8_t checksum = Wire.read();
- dht12_humidity = (float) humidity + (float) humidityTenth/(float) 10.0;
- dht12_temperature = (float) temp + (float) tempTenth/(float) 10.0;
- return (!isnan(dht12_temperature) && !isnan(dht12_humidity));
+ if (Dht12.valid) { Dht12.valid--; }
+
+ Wire.beginTransmission(DHT12_ADDR);
+ Wire.write(0);
+ if (Wire.endTransmission() != 0) { return false; }
+
+ delay(50);
+
+ Wire.requestFrom(DHT12_ADDR, 5);
+ delay(5);
+ uint8_t humidity = Wire.read();
+ uint8_t humidityTenth = Wire.read();
+ uint8_t temp = Wire.read();
+ uint8_t tempTenth = Wire.read();
+ uint8_t checksum = Wire.read();
+
+ Dht12.humidity = ConvertHumidity( (float) humidity + (float) humidityTenth/(float) 10.0 );
+ Dht12.temperature = ConvertTemp( (float) temp + (float) tempTenth/(float) 10.0 );
+
+ if (isnan(Dht12.temperature) || isnan(Dht12.humidity)) { return false; }
+
+ Dht12.valid = SENSOR_MAX_MISS;
+ return true;
}
+/********************************************************************************************/
+
void Dht12Detect(void)
{
- if (Dht12Read()) {
- snprintf_P(log_data, sizeof(log_data), S_LOG_I2C_FOUND_AT, dht12_name, DHT12_ADDR);
- AddLog(LOG_LEVEL_DEBUG);
- snprintf_P(dht12_name, sizeof(dht12_name), PSTR("%s%c0x%02X"), "DHT12", IndexSeparator(), DHT12_ADDR);
- dht12_count = 1;
- }
+ if (I2cActive(DHT12_ADDR)) { return; }
+
+ if (Dht12Read()) {
+ I2cSetActiveFound(DHT12_ADDR, Dht12.name);
+ Dht12.count = 1;
+ }
}
-void Dht12Show(bool json)
+void Dht12EverySecond(void)
{
- if (dht12_count > 0)
- {
- char temperature[33];
- dtostrfd(dht12_temperature, Settings.flag2.temperature_resolution, temperature);
- char humidity[33];
- dtostrfd(dht12_humidity, Settings.flag2.humidity_resolution, humidity);
-
- if (json)
- {
- ResponseAppend_P(JSON_SNS_TEMPHUM, dht12_name, temperature, humidity);
-#ifdef USE_DOMOTICZ
- if ((0 == tele_period))
- {
- DomoticzTempHumSensor(temperature, humidity);
- }
-#endif // USE_DOMOTICZ
-
-#ifdef USE_KNX
- if (0 == tele_period)
- {
- KnxSensor(KNX_TEMPERATURE, dht12_temperature);
- KnxSensor(KNX_HUMIDITY, dht12_humidity);
- }
-#endif // USE_KNX
-
-#ifdef USE_WEBSERVER
- }
- else
- {
- WSContentSend_PD(HTTP_SNS_TEMP, dht12_name, temperature, TempUnit());
- WSContentSend_PD(HTTP_SNS_HUM, dht12_name, humidity);
-#endif // USE_WEBSERVER
+ if (uptime &1) {
+ // DHT12: 55mS
+ if (!Dht12Read()) {
+ AddLogMissed(Dht12.name, Dht12.valid);
}
}
}
+void Dht12Show(bool json)
+{
+ if (Dht12.valid) {
+ char temperature[33];
+ dtostrfd(Dht12.temperature, Settings.flag2.temperature_resolution, temperature);
+ char humidity[33];
+ dtostrfd(Dht12.humidity, Settings.flag2.humidity_resolution, humidity);
+ if (json) {
+ ResponseAppend_P(JSON_SNS_TEMPHUM, Dht12.name, temperature, humidity);
+#ifdef USE_DOMOTICZ
+ if ((0 == tele_period)) {
+ DomoticzTempHumSensor(temperature, humidity);
+ }
+#endif // USE_DOMOTICZ
+#ifdef USE_KNX
+ if (0 == tele_period) {
+ KnxSensor(KNX_TEMPERATURE, Dht12.temperature);
+ KnxSensor(KNX_HUMIDITY, Dht12.humidity);
+ }
+#endif // USE_KNX
+#ifdef USE_WEBSERVER
+ } else {
+ WSContentSend_PD(HTTP_SNS_TEMP, Dht12.name, temperature, TempUnit());
+ WSContentSend_PD(HTTP_SNS_HUM, Dht12.name, humidity);
+#endif // USE_WEBSERVER
+ }
+ }
+}
/*********************************************************************************************\
* Interface
@@ -118,10 +130,10 @@ bool Xsns58(uint8_t function)
if (FUNC_INIT == function) {
Dht12Detect();
}
- else if (dht12_count > 0) {
+ else if (Dht12.count) {
switch (function) {
case FUNC_EVERY_SECOND:
- Dht12Read();
+ Dht12EverySecond();
break;
case FUNC_JSON_APPEND:
Dht12Show(1);
From d2ebefbb16405c53dd07b5a82ea27b81c8146ec2 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 Dec 2019 13:45:26 +0100
Subject: [PATCH 121/559] Bump version to 7.2.0.1
---
README.md | 2 +-
RELEASENOTES.md | 2 +-
tasmota/CHANGELOG.md | 10 ++++++++--
tasmota/tasmota_version.h | 2 +-
4 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index acb6430d5..9a9ff0e1c 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ In addition to the [release webpage](https://github.com/arendst/Tasmota/releases
## Development
-[](https://github.com/arendst/Tasmota)
+[](https://github.com/arendst/Tasmota)
[](http://thehackbox.org/tasmota/)
[](https://travis-ci.org/arendst/Tasmota)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 56c4e2c07..f3fff8860 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -49,7 +49,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
## Changelog
-### Version 7.1.2.6
+### Version 7.2.0 Constance
- Change Exception reporting removing exception details from ``Status 1`` and consolidated in ``Status 12`` if available
- Change HTTP CORS from command ``SetOption73 0/1`` to ``Cors `` allowing user control of specific CORS domain by Shantur Rathore (#7066)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index d847aef5b..e290e1909 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -1,5 +1,13 @@
## Unreleased (development)
+### 7.2.0.1 20191221
+
+## Released
+
+### 7.2.0 20191221
+
+- Release
+
### 7.1.2.6 20191214
- Change some more Settings locations freeing up space for future single char allowing variable length text
@@ -51,8 +59,6 @@
- Add experimental support for stepper motor shutter control by Stefan Bode
- Add optional USE_MQTT_TLS to tasmota-minimal.bin by Bohdan Kmit (#7115)
-## Released
-
### 7.1.2 20191206
- Maintenance Release
diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h
index 84ff6d905..27480159d 100644
--- a/tasmota/tasmota_version.h
+++ b/tasmota/tasmota_version.h
@@ -20,7 +20,7 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x07010206;
+const uint32_t VERSION = 0x07020001;
// Lowest compatible version
const uint32_t VERSION_COMPATIBLE = 0x06000000;
From f55e02e80041e58159c6480dde62bfe0d5a77ace Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 Dec 2019 15:37:36 +0100
Subject: [PATCH 122/559] Bump version to 8.0.0.1
Change Settings text handling allowing variable length text within a total text pool of 699 characters
---
RELEASENOTES.md | 36 +----
tasmota/CHANGELOG.md | 4 +-
tasmota/settings.h | 9 --
tasmota/settings.ino | 258 ++++++++++++---------------------
tasmota/support_statistics.ino | 37 +----
tasmota/tasmota_version.h | 4 +-
6 files changed, 100 insertions(+), 248 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index f3fff8860..bf21cf32b 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -2,8 +2,6 @@
# RELEASE NOTES
-### Sonoff-Tasmota is now Tasmota
-
## Migration Information
See [migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates:
@@ -13,8 +11,7 @@ See [migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-pat
3. Migrate to **Sonoff-Tasmota 5.14**
4. Migrate to **Sonoff-Tasmota 6.x**
5. Migrate to **Tasmota 7.x**
-
-Only this version will support fallback from version 8.x.
+6. Migrate to **Tasmota 8.x**
## Supported Core versions
@@ -49,33 +46,6 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
## Changelog
-### Version 7.2.0 Constance
+### Version 8.0.0.1
-- Change Exception reporting removing exception details from ``Status 1`` and consolidated in ``Status 12`` if available
-- Change HTTP CORS from command ``SetOption73 0/1`` to ``Cors `` allowing user control of specific CORS domain by Shantur Rathore (#7066)
-- Change GUI Shutter button text to Up and Down Arrows based on PR by Xavier Muller (#7166)
-- Change amount of supported DHT sensors from 3 to 4 by Xavier Muller (#7167)
-- Change some Settings locations freeing up space for future single char allowing variable length text
-- Change tasmota-basic.bin and FIRMWARE_BASIC to tasmota-lite.bin and FIRMWARE_LITE
-- Fix flashing H801 led at boot by Stefan Hadinger (#7165, #649)
-- Fix duplicated ``Backlog`` when using Event inside a Backlog by Adrian Scillato (#7178, #7147)
-- Fix Gui Timer when using a negative zero offset of -00:00 by Peter Ooms (#7174)
-- Fix DeepSleep in case there is no wifi by Stefan Bode (#7213)
-- Fix Fade would ignore ``savedata 0`` and store to flash anyways (#7262)
-- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config based in PR by Luis Teixeira (#7108)
-- Add command ``Sensor34 9 `` to set minimum delta to trigger JSON message by @tobox (#7188)
-- Add rule var ``%topic%`` by Adrian Scillato (#5522)
-- Add rule triggers ``tele-wifi1#xxx`` by Adrian Scillato (#7093)
-- Add SML bus decoder syntax support for byte order by Gerhard Mutz (#7112)
-- Add experimental support for stepper motor shutter control by Stefan Bode
-- Add optional USE_MQTT_TLS to tasmota-minimal.bin by Bohdan Kmit (#7115)
-- Add save call stack in RTC memory in case of crash, command ``Status 12`` to dump the stack by Stefan Hadinger
-- Add Home Assistant force update by Frederico Leoni (#7140, #7074)
-- Add Wifi Signal Strength in dBm in addition to RSSI Wifi Experience by Andreas Schultz (#7145)
-- Add Yaw, Pitch and Roll support for MPU6050 by Philip Barclay (#7058)
-- Add reporting of raw weight to JSON from HX711 to overcome auto-tare functionality by @tobox (#7171)
-- Add Zigbee support for Xiaomi Aqara Vibration Sensor and Presence Sensor by Stefan Hadinger
-- Add Shutter functions ramp up/down and MQTT reporting by Stefan Bode
-- Add fallback support from version 8.x
-- Add restriction if fallback firmware is incompatible with settings resulting in unreachable device
-- Add support for DHT12 Temperature and Humidity sensor by Stefan Oskamp
+- Change Settings text handling allowing variable length text within a total text pool of 699 characters
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index e290e1909..e8b70c0cd 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -1,6 +1,8 @@
## Unreleased (development)
-### 7.2.0.1 20191221
+### 8.0.0.1 20191221
+
+- Change Settings text handling allowing variable length text within a total text pool of 699 characters
## Released
diff --git a/tasmota/settings.h b/tasmota/settings.h
index 8b7fe2822..0b3990578 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -231,13 +231,6 @@ typedef struct {
const uint8_t MAX_TUYA_FUNCTIONS = 16;
-/*
-struct SYSCFG {
- unsigned long cfg_holder; // 000 Pre v6 header
- unsigned long save_flag; // 004
- unsigned long version; // 008
- unsigned long bootcount; // 00C
-*/
struct SYSCFG {
uint16_t cfg_holder; // 000 v6 header
uint16_t cfg_size; // 002
@@ -274,8 +267,6 @@ struct SYSCFG {
uint8_t ex_free_1d6[10]; // 1D6
- // End of single char array of 456 chars max (phase 3)
-
SysBitfield4 ex_flag4; // 1E0
uint8_t ex_serial_config; // 1E4
uint8_t ex_wifi_output_power; // 1E5
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index afbd7b223..9a0ea44f1 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -488,10 +488,7 @@ void UpdateQuickPowerCycle(bool update)
* Config Settings.text char array support
\*********************************************************************************************/
-char aws_mqtt_host[66];
-char aws_mqtt_user[1] { 0 };
-
-const uint32_t settings_text_size = 457; // Settings.flag4 (1E0) - Settings.ota_url (017)
+const uint32_t settings_text_size = 699; // Settings.flag4 (2D2) - Settings.ota_url (017)
uint32_t GetSettingsTextLen(void)
{
@@ -513,60 +510,43 @@ bool SettingsUpdateText(uint32_t index, const char* replace_me)
char replace[replace_len +1];
memcpy(replace, replace_me, sizeof(replace));
- uint32_t idx = 0;
- switch (index) {
- case SET_OTAURL: strlcpy(Settings.ota_url, replace, sizeof(Settings.ota_url)); break;
- case SET_MQTTPREFIX3: idx++;
- case SET_MQTTPREFIX2: idx++;
- case SET_MQTTPREFIX1: strlcpy(Settings.mqtt_prefix[idx], replace, sizeof(Settings.mqtt_prefix[idx])); break;
- case SET_STASSID2: idx++;
- case SET_STASSID1: strlcpy(Settings.sta_ssid[idx], replace, sizeof(Settings.sta_ssid[idx])); break;
- case SET_STAPWD2: idx++;
- case SET_STAPWD1: strlcpy(Settings.sta_pwd[idx], replace, sizeof(Settings.sta_pwd[idx])); break;
- case SET_HOSTNAME: strlcpy(Settings.hostname, replace, sizeof(Settings.hostname)); break;
- case SET_SYSLOG_HOST: strlcpy(Settings.syslog_host, replace, sizeof(Settings.syslog_host)); break;
- case SET_WEBPWD: strlcpy(Settings.web_password, replace, sizeof(Settings.web_password)); break;
-#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
- case SET_MQTT_HOST:
- if (strlen(replace) <= sizeof(Settings.mqtt_host)) {
- strlcpy(Settings.mqtt_host, replace, sizeof(Settings.mqtt_host));
- Settings.mqtt_user[0] = 0;
- } else {
- // need to split in mqtt_user first then mqtt_host
- strlcpy(Settings.mqtt_user, replace, sizeof(Settings.mqtt_user));
- strlcpy(Settings.mqtt_host, &replace[sizeof(Settings.mqtt_user)-1], sizeof(Settings.mqtt_host));
- }
- break;
- case SET_MQTT_USER: break;
-#else
- case SET_MQTT_HOST: strlcpy(Settings.mqtt_host, replace, sizeof(Settings.mqtt_host)); break;
- case SET_MQTT_USER: strlcpy(Settings.mqtt_user, replace, sizeof(Settings.mqtt_user)); break;
-#endif
- case SET_MQTT_CLIENT: strlcpy(Settings.mqtt_client, replace, sizeof(Settings.mqtt_client)); break;
- case SET_MQTT_PWD: strlcpy(Settings.mqtt_pwd, replace, sizeof(Settings.mqtt_pwd)); break;
- case SET_MQTT_FULLTOPIC: strlcpy(Settings.mqtt_fulltopic, replace, sizeof(Settings.mqtt_fulltopic)); break;
- case SET_MQTT_TOPIC: strlcpy(Settings.mqtt_topic, replace, sizeof(Settings.mqtt_topic)); break;
- case SET_MQTT_BUTTON_TOPIC: strlcpy(Settings.button_topic, replace, sizeof(Settings.button_topic)); break;
- case SET_MQTT_SWITCH_TOPIC: strlcpy(Settings.switch_topic, replace, sizeof(Settings.switch_topic)); break;
- case SET_MQTT_GRP_TOPIC: strlcpy(Settings.mqtt_grptopic, replace, sizeof(Settings.mqtt_grptopic)); break;
- case SET_STATE_TXT4: idx++;
- case SET_STATE_TXT3: idx++;
- case SET_STATE_TXT2: idx++;
- case SET_STATE_TXT1: strlcpy(Settings.state_text[idx], replace, sizeof(Settings.state_text[idx])); break;
- case SET_NTPSERVER3: idx++;
- case SET_NTPSERVER2: idx++;
- case SET_NTPSERVER1: strlcpy(Settings.ntp_server[idx], replace, sizeof(Settings.ntp_server[idx])); break;
- case SET_MEM5: idx++;
- case SET_MEM4: idx++;
- case SET_MEM3: idx++;
- case SET_MEM2: idx++;
- case SET_MEM1: strlcpy(Settings.mems[idx], replace, sizeof(Settings.mems[idx])); break;
- case SET_CORS: strlcpy(Settings.cors_domain, replace, sizeof(Settings.cors_domain)); break;
- case SET_FRIENDLYNAME4: idx++;
- case SET_FRIENDLYNAME3: idx++;
- case SET_FRIENDLYNAME2: idx++;
- case SET_FRIENDLYNAME1: strlcpy(Settings.friendlyname[idx], replace, sizeof(Settings.friendlyname[idx])); break;
+ uint32_t start_pos = 0;
+ uint32_t end_pos = 0;
+ char* position = Settings.ota_url;
+ for (uint32_t size = 0; size < SET_MAX; size++) {
+ while (*position++ != '\0') { }
+ if (1 == index) {
+ start_pos = position - Settings.ota_url;
+ }
+ else if (0 == index) {
+ end_pos = position - Settings.ota_url -1;
+ }
+ index--;
}
+ uint32_t char_len = position - Settings.ota_url;
+
+ uint32_t current_len = end_pos - start_pos;
+ int diff = replace_len - current_len;
+
+// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("TST: start %d, end %d, len %d, current %d, replace %d, diff %d"),
+// start_pos, end_pos, char_len, current_len, replace_len, diff);
+
+ int too_long = (char_len + diff) - settings_text_size;
+ if (too_long > 0) {
+// AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_CONFIG "Text too long by %d char(s)"), too_long);
+ return false; // Replace text too long
+ }
+
+ if (diff != 0) {
+ // Shift Settings.text up or down
+ memmove_P(Settings.ota_url + start_pos + replace_len, Settings.ota_url + end_pos, char_len - end_pos);
+ }
+ // Replace text
+ memmove_P(Settings.ota_url + start_pos, replace, replace_len);
+ // Fill for future use
+ memset(Settings.ota_url + char_len + diff, 0x00, settings_text_size - char_len - diff);
+
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_CONFIG "CR %d/%d"), GetSettingsTextLen(), settings_text_size);
return true;
}
@@ -578,61 +558,9 @@ char* SettingsText(uint32_t index)
}
char* position = Settings.ota_url;
-
- if (Settings.version < 0x08000000) {
- uint32_t idx = 0;
- switch (index) {
- case SET_MQTTPREFIX3: idx++;
- case SET_MQTTPREFIX2: idx++;
- case SET_MQTTPREFIX1: position = Settings.mqtt_prefix[idx]; break;
- case SET_STASSID2: idx++;
- case SET_STASSID1: position = Settings.sta_ssid[idx]; break;
- case SET_STAPWD2: idx++;
- case SET_STAPWD1: position = Settings.sta_pwd[idx]; break;
- case SET_HOSTNAME: position = Settings.hostname; break;
- case SET_SYSLOG_HOST: position = Settings.syslog_host; break;
- case SET_WEBPWD: position = Settings.web_password; break;
-#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
- case SET_MQTT_HOST:
- snprintf_P(aws_mqtt_host, sizeof(aws_mqtt_host), PSTR("%s%s"), Settings.mqtt_user, Settings.mqtt_host);
- position = aws_mqtt_host; break;
- case SET_MQTT_USER: position = aws_mqtt_user; break;
-#else
- case SET_MQTT_HOST: position = Settings.mqtt_host; break;
- case SET_MQTT_USER: position = Settings.mqtt_user; break;
-#endif
- case SET_MQTT_CLIENT: position = Settings.mqtt_client; break;
- case SET_MQTT_PWD: position = Settings.mqtt_pwd; break;
- case SET_MQTT_FULLTOPIC: position = Settings.mqtt_fulltopic; break;
- case SET_MQTT_TOPIC: position = Settings.mqtt_topic; break;
- case SET_MQTT_BUTTON_TOPIC: position = Settings.button_topic; break;
- case SET_MQTT_SWITCH_TOPIC: position = Settings.switch_topic; break;
- case SET_MQTT_GRP_TOPIC: position = Settings.mqtt_grptopic; break;
- case SET_STATE_TXT4: idx++;
- case SET_STATE_TXT3: idx++;
- case SET_STATE_TXT2: idx++;
- case SET_STATE_TXT1: position = Settings.state_text[idx]; break;
- case SET_NTPSERVER3: idx++;
- case SET_NTPSERVER2: idx++;
- case SET_NTPSERVER1: position = Settings.ntp_server[idx]; break;
- case SET_MEM5: idx++;
- case SET_MEM4: idx++;
- case SET_MEM3: idx++;
- case SET_MEM2: idx++;
- case SET_MEM1: position = Settings.mems[idx]; break;
- case SET_CORS: position = Settings.cors_domain; break;
- case SET_FRIENDLYNAME4: idx++;
- case SET_FRIENDLYNAME3: idx++;
- case SET_FRIENDLYNAME2: idx++;
- case SET_FRIENDLYNAME1: position = Settings.friendlyname[idx]; break;
- }
-
- } else {
- for (;index > 0; index--) {
- while (*position++ != '\0') { }
- }
+ for (;index > 0; index--) {
+ while (*position++ != '\0') { }
}
-
return position;
}
@@ -1132,10 +1060,6 @@ void SettingsDefaultSet2(void)
memset(&Settings.monitors, 0xFF, 20); // Enable all possible monitors, displays and sensors
SettingsEnableAllI2cDrivers();
-
- if (VERSION < 0x08000000) {
- SettingsBackwardCompat();
- }
}
/********************************************************************************************/
@@ -1175,17 +1099,6 @@ void SettingsEnableAllI2cDrivers(void)
Settings.i2c_drivers[2] = 0xFFFFFFFF;
}
-void SettingsBackwardCompat(void)
-{
- Settings.ex_seriallog_level = Settings.seriallog_level; // 09E <- 452
- Settings.ex_sta_config = Settings.sta_config; // 09F <- EC7
- Settings.ex_sta_active = Settings.sta_active; // 0A0 <- EC8
- memcpy((char*)&Settings.ex_rule_stop, (char*)&Settings.rule_stop, 47); // 1A7 <- EC9
- Settings.ex_flag4 = Settings.flag4; // 1E0 <- EF8
- Settings.ex_mqtt_port = Settings.mqtt_port; // 20A <- EFC
- memcpy((char*)&Settings.ex_serial_config, (char*)&Settings.serial_config, 5); // 1E4 <- EFE
-}
-
/********************************************************************************************/
void SettingsDelta(void)
@@ -1405,46 +1318,26 @@ void SettingsDelta(void)
memcpy((char*)&Settings.serial_config, (char*)&Settings.ex_serial_config, 5); // 1E4 -> EFE
}
- if ((VERSION < 0x08000000) && (Settings.version >= 0x08000000)) {
- SettingsUpdateText(SET_WEBPWD, SettingsText(SET_WEBPWD));
- SettingsUpdateText(SET_CORS, SettingsText(SET_CORS));
- SettingsUpdateText(SET_MQTT_FULLTOPIC, SettingsText(SET_MQTT_FULLTOPIC));
- SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, SettingsText(SET_MQTT_SWITCH_TOPIC));
- SettingsUpdateText(SET_STATE_TXT1, SettingsText(SET_STATE_TXT1));
- SettingsUpdateText(SET_STATE_TXT2, SettingsText(SET_STATE_TXT2));
- SettingsUpdateText(SET_STATE_TXT3, SettingsText(SET_STATE_TXT3));
- SettingsUpdateText(SET_STATE_TXT4, SettingsText(SET_STATE_TXT4));
- SettingsUpdateText(SET_NTPSERVER1, SettingsText(SET_NTPSERVER1));
- SettingsUpdateText(SET_NTPSERVER2, SettingsText(SET_NTPSERVER2));
- SettingsUpdateText(SET_NTPSERVER3, SettingsText(SET_NTPSERVER3));
- SettingsUpdateText(SET_MEM1, SettingsText(SET_MEM1));
- SettingsUpdateText(SET_MEM2, SettingsText(SET_MEM2));
- SettingsUpdateText(SET_MEM3, SettingsText(SET_MEM3));
- SettingsUpdateText(SET_MEM4, SettingsText(SET_MEM4));
- SettingsUpdateText(SET_MEM5, SettingsText(SET_MEM5));
- SettingsUpdateText(SET_FRIENDLYNAME1, SettingsText(SET_FRIENDLYNAME1));
- SettingsUpdateText(SET_FRIENDLYNAME2, SettingsText(SET_FRIENDLYNAME2));
- SettingsUpdateText(SET_FRIENDLYNAME3, SettingsText(SET_FRIENDLYNAME3));
- SettingsUpdateText(SET_FRIENDLYNAME4, SettingsText(SET_FRIENDLYNAME4));
-
- char temp[strlen(SettingsText(SET_OTAURL)) +1]; strncpy(temp, SettingsText(SET_OTAURL), sizeof(temp));
- char temp21[strlen(SettingsText(SET_MQTTPREFIX1)) +1]; strncpy(temp21, SettingsText(SET_MQTTPREFIX1), sizeof(temp21));
- char temp22[strlen(SettingsText(SET_MQTTPREFIX2)) +1]; strncpy(temp22, SettingsText(SET_MQTTPREFIX2), sizeof(temp22));
- char temp23[strlen(SettingsText(SET_MQTTPREFIX3)) +1]; strncpy(temp23, SettingsText(SET_MQTTPREFIX3), sizeof(temp23));
- char temp31[strlen(SettingsText(SET_STASSID1)) +1]; strncpy(temp31, SettingsText(SET_STASSID1), sizeof(temp31));
- char temp32[strlen(SettingsText(SET_STASSID2)) +1]; strncpy(temp32, SettingsText(SET_STASSID2), sizeof(temp32));
- char temp41[strlen(SettingsText(SET_STAPWD1)) +1]; strncpy(temp41, SettingsText(SET_STAPWD1), sizeof(temp41));
- char temp42[strlen(SettingsText(SET_STAPWD2)) +1]; strncpy(temp42, SettingsText(SET_STAPWD2), sizeof(temp42));
- char temp5[strlen(SettingsText(SET_HOSTNAME)) +1]; strncpy(temp5, SettingsText(SET_HOSTNAME), sizeof(temp5));
- char temp6[strlen(SettingsText(SET_SYSLOG_HOST)) +1]; strncpy(temp6, SettingsText(SET_SYSLOG_HOST), sizeof(temp6));
- char temp7[strlen(SettingsText(SET_MQTT_HOST)) +1]; strncpy(temp7, SettingsText(SET_MQTT_HOST), sizeof(temp7));
- char temp8[strlen(SettingsText(SET_MQTT_CLIENT)) +1]; strncpy(temp8, SettingsText(SET_MQTT_CLIENT), sizeof(temp8));
- char temp9[strlen(SettingsText(SET_MQTT_USER)) +1]; strncpy(temp9, SettingsText(SET_MQTT_USER), sizeof(temp9));
- char temp10[strlen(SettingsText(SET_MQTT_PWD)) +1]; strncpy(temp10, SettingsText(SET_MQTT_PWD), sizeof(temp10));
- char temp11[strlen(SettingsText(SET_MQTT_TOPIC)) +1]; strncpy(temp11, SettingsText(SET_MQTT_TOPIC), sizeof(temp11));
- char temp12[strlen(SettingsText(SET_MQTT_BUTTON_TOPIC)) +1]; strncpy(temp12, SettingsText(SET_MQTT_BUTTON_TOPIC), sizeof(temp12));
- char temp13[strlen(SettingsText(SET_MQTT_GRP_TOPIC)) +1]; strncpy(temp13, SettingsText(SET_MQTT_GRP_TOPIC), sizeof(temp13));
+ if (Settings.version < 0x08000000) {
+ char temp[strlen(Settings.ota_url) +1]; strncpy(temp, Settings.ota_url, sizeof(temp));
+ char temp21[strlen(Settings.mqtt_prefix[0]) +1]; strncpy(temp21, Settings.mqtt_prefix[0], sizeof(temp21));
+ char temp22[strlen(Settings.mqtt_prefix[1]) +1]; strncpy(temp22, Settings.mqtt_prefix[1], sizeof(temp22));
+ char temp23[strlen(Settings.mqtt_prefix[2]) +1]; strncpy(temp23, Settings.mqtt_prefix[2], sizeof(temp23));
+ char temp31[strlen(Settings.sta_ssid[0]) +1]; strncpy(temp31, Settings.sta_ssid[0], sizeof(temp31));
+ char temp32[strlen(Settings.sta_ssid[1]) +1]; strncpy(temp32, Settings.sta_ssid[1], sizeof(temp32));
+ char temp41[strlen(Settings.sta_pwd[0]) +1]; strncpy(temp41, Settings.sta_pwd[0], sizeof(temp41));
+ char temp42[strlen(Settings.sta_pwd[1]) +1]; strncpy(temp42, Settings.sta_pwd[1], sizeof(temp42));
+ char temp5[strlen(Settings.hostname) +1]; strncpy(temp5, Settings.hostname, sizeof(temp5));
+ char temp6[strlen(Settings.syslog_host) +1]; strncpy(temp6, Settings.syslog_host, sizeof(temp6));
+ char temp7[strlen(Settings.mqtt_host) +1]; strncpy(temp7, Settings.mqtt_host, sizeof(temp7));
+ char temp8[strlen(Settings.mqtt_client) +1]; strncpy(temp8, Settings.mqtt_client, sizeof(temp8));
+ char temp9[strlen(Settings.mqtt_user) +1]; strncpy(temp9, Settings.mqtt_user, sizeof(temp9));
+ char temp10[strlen(Settings.mqtt_pwd) +1]; strncpy(temp10, Settings.mqtt_pwd, sizeof(temp10));
+ char temp11[strlen(Settings.mqtt_topic) +1]; strncpy(temp11, Settings.mqtt_topic, sizeof(temp11));
+ char temp12[strlen(Settings.button_topic) +1]; strncpy(temp12, Settings.button_topic, sizeof(temp12));
+ char temp13[strlen(Settings.mqtt_grptopic) +1]; strncpy(temp13, Settings.mqtt_grptopic, sizeof(temp13));
+ memset(Settings.ota_url, 0x00, settings_text_size);
SettingsUpdateText(SET_OTAURL, temp);
SettingsUpdateText(SET_MQTTPREFIX1, temp21);
SettingsUpdateText(SET_MQTTPREFIX2, temp22);
@@ -1455,15 +1348,46 @@ void SettingsDelta(void)
SettingsUpdateText(SET_STAPWD2, temp42);
SettingsUpdateText(SET_HOSTNAME, temp5);
SettingsUpdateText(SET_SYSLOG_HOST, temp6);
+#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
+ if (!strlen(Settings.mqtt_user)) {
+ SettingsUpdateText(SET_MQTT_HOST, temp7);
+ SettingsUpdateText(SET_MQTT_USER, temp9);
+ } else {
+ char aws_mqtt_host[66];
+ snprintf_P(aws_mqtt_host, sizeof(aws_mqtt_host), PSTR("%s%s"), temp9, temp7);
+ SettingsUpdateText(SET_MQTT_HOST, mqtt_host);
+ SettingsUpdateText(SET_MQTT_USER, "");
+ }
+#else
SettingsUpdateText(SET_MQTT_HOST, temp7);
- SettingsUpdateText(SET_MQTT_CLIENT, temp8);
SettingsUpdateText(SET_MQTT_USER, temp9);
+#endif
+ SettingsUpdateText(SET_MQTT_CLIENT, temp8);
SettingsUpdateText(SET_MQTT_PWD, temp10);
SettingsUpdateText(SET_MQTT_TOPIC, temp11);
SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, temp12);
SettingsUpdateText(SET_MQTT_GRP_TOPIC, temp13);
- SettingsBackwardCompat();
+ SettingsUpdateText(SET_WEBPWD, Settings.web_password);
+ SettingsUpdateText(SET_CORS, Settings.cors_domain);
+ SettingsUpdateText(SET_MQTT_FULLTOPIC, Settings.mqtt_fulltopic);
+ SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, Settings.switch_topic);
+ SettingsUpdateText(SET_STATE_TXT1, Settings.state_text[0]);
+ SettingsUpdateText(SET_STATE_TXT2, Settings.state_text[1]);
+ SettingsUpdateText(SET_STATE_TXT3, Settings.state_text[2]);
+ SettingsUpdateText(SET_STATE_TXT4, Settings.state_text[3]);
+ SettingsUpdateText(SET_NTPSERVER1, Settings.ntp_server[0]);
+ SettingsUpdateText(SET_NTPSERVER2, Settings.ntp_server[1]);
+ SettingsUpdateText(SET_NTPSERVER3, Settings.ntp_server[2]);
+ SettingsUpdateText(SET_MEM1, Settings.mems[0]);
+ SettingsUpdateText(SET_MEM2, Settings.mems[1]);
+ SettingsUpdateText(SET_MEM3, Settings.mems[2]);
+ SettingsUpdateText(SET_MEM4, Settings.mems[3]);
+ SettingsUpdateText(SET_MEM5, Settings.mems[4]);
+ SettingsUpdateText(SET_FRIENDLYNAME1, Settings.friendlyname[0]);
+ SettingsUpdateText(SET_FRIENDLYNAME2, Settings.friendlyname[1]);
+ SettingsUpdateText(SET_FRIENDLYNAME3, Settings.friendlyname[2]);
+ SettingsUpdateText(SET_FRIENDLYNAME4, Settings.friendlyname[3]);
}
Settings.version = VERSION;
diff --git a/tasmota/support_statistics.ino b/tasmota/support_statistics.ino
index b8f65bd20..1907b1edc 100644
--- a/tasmota/support_statistics.ino
+++ b/tasmota/support_statistics.ino
@@ -27,42 +27,7 @@
String GetStatistics(void)
{
char data[40];
-
- if (Settings.version < 0x08000000) {
- uint32_t str_len = 0;
- for (uint32_t i = 0; i < 2; i++) {
- str_len += strlen(Settings.sta_ssid[i]);
- str_len += strlen(Settings.sta_pwd[i]);
- }
- for (uint32_t i = 0; i < 3; i++) {
- str_len += strlen(Settings.mqtt_prefix[i]);
- str_len += strlen(Settings.ntp_server[i]);
- }
- for (uint32_t i = 0; i < 4; i++) {
- str_len += strlen(Settings.state_text[i]);
- str_len += strlen(Settings.friendlyname[i]);
- }
- for (uint32_t i = 0; i < MAX_RULE_MEMS; i++) {
- str_len += strlen(Settings.mems[i]);
- }
- str_len += strlen(Settings.ota_url);
- str_len += strlen(Settings.hostname);
- str_len += strlen(Settings.syslog_host);
- str_len += strlen(Settings.mqtt_host);
- str_len += strlen(Settings.mqtt_client);
- str_len += strlen(Settings.mqtt_user);
- str_len += strlen(Settings.mqtt_pwd);
- str_len += strlen(Settings.mqtt_topic);
- str_len += strlen(Settings.button_topic);
- str_len += strlen(Settings.switch_topic);
- str_len += strlen(Settings.mqtt_grptopic);
- str_len += strlen(Settings.web_password);
- str_len += strlen(Settings.mqtt_fulltopic);
- str_len += strlen(Settings.cors_domain);
- snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/1151\""), 37 + str_len); // Char Usage Ratio
- } else {
- snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/%d\""), GetSettingsTextLen(), settings_text_size); // Char Usage Ratio
- }
+ snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/%d\""), GetSettingsTextLen(), settings_text_size); // Char Usage Ratio
return String(data);
}
diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h
index 27480159d..be2cfafe2 100644
--- a/tasmota/tasmota_version.h
+++ b/tasmota/tasmota_version.h
@@ -20,9 +20,9 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x07020001;
+const uint32_t VERSION = 0x08000001;
// Lowest compatible version
-const uint32_t VERSION_COMPATIBLE = 0x06000000;
+const uint32_t VERSION_COMPATIBLE = 0x07010006;
#endif // _TASMOTA_VERSION_H_
From 9fc11270bad712d5f34823ce721bc5db25ecd390 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 Dec 2019 17:09:24 +0100
Subject: [PATCH 123/559] Fix Arduino IDE compile error
Fix Arduino IDE compile error (#7277)
---
tasmota/tasmota_post.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tasmota/tasmota_post.h b/tasmota/tasmota_post.h
index b095fdbf2..c54adfe82 100644
--- a/tasmota/tasmota_post.h
+++ b/tasmota/tasmota_post.h
@@ -21,7 +21,7 @@
#define _TASMOTA_POST_H_
/*********************************************************************************************\
- * Function declarations
+ * Function prototypes
\*********************************************************************************************/
// Needed for core 2.3.0 compilation (#6721)
@@ -39,6 +39,7 @@ void KNX_CB_Action(message_t const &msg, void *arg);
//#endif // USE_KNX
char* ToHex_P(const unsigned char * in, size_t insz, char * out, size_t outsz, char inbetween = '\0');
+extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack, uint32_t stack_end);
/*********************************************************************************************\
* Default global defines
From 281cef6763a26635ea872b8c860c07b463caa889 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 Dec 2019 17:57:54 +0100
Subject: [PATCH 124/559] Fix no AP on initial install
Fix no AP on initial install (#7282)
---
tasmota/support_tasmota.ino | 2 +-
tasmota/support_wifi.ino | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino
index 08b898efb..900ba3dd4 100644
--- a/tasmota/support_tasmota.ino
+++ b/tasmota/support_tasmota.ino
@@ -108,7 +108,7 @@ char* GetTopic_P(char *stopic, uint32_t prefix, char *topic, const char* subtopi
fulltopic += FPSTR(MQTT_TOKEN_PREFIX); // Need prefix for commands to handle mqtt topic loops
}
for (uint32_t i = 0; i < 3; i++) {
- if ('\0' == SettingsText(SET_MQTTPREFIX1 + i)) {
+ if (!strlen(SettingsText(SET_MQTTPREFIX1 + i))) {
char temp[TOPSZ];
SettingsUpdateText(SET_MQTTPREFIX1 + i, GetTextIndexed(temp, sizeof(temp), i, kPrefixes));
}
diff --git a/tasmota/support_wifi.ino b/tasmota/support_wifi.ino
index 86cc81dd8..c283f1bb5 100644
--- a/tasmota/support_wifi.ino
+++ b/tasmota/support_wifi.ino
@@ -191,7 +191,7 @@ void WifiBegin(uint8_t flag, uint8_t channel)
case 2: // Toggle
Settings.sta_active ^= 1;
} // 3: Current AP
- if ('\0' == SettingsText(SET_STASSID1 + Settings.sta_active)) {
+ if (!strlen(SettingsText(SET_STASSID1 + Settings.sta_active))) {
Settings.sta_active ^= 1; // Skip empty SSID
}
if (Settings.ip_address[0]) {
@@ -436,7 +436,7 @@ void WifiCheckIp(void)
if (!Wifi.retry || ((Wifi.retry_init / 2) == Wifi.retry)) {
AddLog_P(LOG_LEVEL_INFO, S_LOG_WIFI, PSTR(D_CONNECT_FAILED_AP_TIMEOUT));
} else {
- if (('\0' == SettingsText(SET_STASSID1)) && ('\0' == SettingsText(SET_STASSID2))) {
+ if (!strlen(SettingsText(SET_STASSID1)) && !strlen(SettingsText(SET_STASSID2))) {
wifi_config_tool = WIFI_MANAGER; // Skip empty SSIDs and start Wifi config tool
Wifi.retry = 0;
} else {
From 9a7d5346c457c288ea564dcb33ca47a8f643e39d Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 21 Dec 2019 18:26:36 +0100
Subject: [PATCH 125/559] Change Smoother ``Fade`` using 100Hz instead of 20Hz
animation (#7179)
---
tasmota/CHANGELOG.md | 1 +
tasmota/xdrv_04_light.ino | 78 +++++++++++++++++++++++++--------------
2 files changed, 51 insertions(+), 28 deletions(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index e8b70c0cd..8d7a06812 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -3,6 +3,7 @@
### 8.0.0.1 20191221
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
+- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
## Released
diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino
index 6148a9aad..d6e71ab08 100644
--- a/tasmota/xdrv_04_light.ino
+++ b/tasmota/xdrv_04_light.ino
@@ -262,8 +262,8 @@ struct LIGHT {
uint16_t fade_start_10[LST_MAX] = {0,0,0,0,0};
uint16_t fade_cur_10[LST_MAX];
uint16_t fade_end_10[LST_MAX]; // 10 bits resolution target channel values
- uint16_t fade_counter = 0; // fade timer in ticks (50ms)
- uint16_t fade_duration = 0; // duration of fade in ticks (50ms)
+ uint16_t fade_duration = 0; // duration of fade in milliseconds
+ uint32_t fade_start = 0; // fade start time in milliseconds, compared to millis()
} Light;
power_t LightPower(void)
@@ -1574,20 +1574,25 @@ void LightAnimate(void)
bool power_off = false;
Light.strip_timer_counter++;
- if (!Light.power) { // All channels powered off
- Light.strip_timer_counter = 0;
- if (!Light.fade_running) {
- sleep = Settings.sleep;
- }
- if (Settings.light_scheme >= LS_MAX) {
- power_off = true;
- }
- } else {
+
+ // set sleep parameter: either settings,
+ // or set a maximum of PWM_MAX_SLEEP if light is on or Fade is running
+ if (Light.power || Light.fade_running) {
if (Settings.sleep > PWM_MAX_SLEEP) {
sleep = PWM_MAX_SLEEP; // set a maxumum value of 50 milliseconds to ensure that animations are smooth
} else {
sleep = Settings.sleep; // or keep the current sleep if it's lower than 50
}
+ } else {
+ sleep = Settings.sleep;
+ }
+
+ if (!Light.power) { // All channels powered off
+ Light.strip_timer_counter = 0;
+ if (Settings.light_scheme >= LS_MAX) {
+ power_off = true;
+ }
+ } else {
switch (Settings.light_scheme) {
case LS_POWER:
light_controller.calcLevels(Light.new_color);
@@ -1733,27 +1738,35 @@ void LightAnimate(void)
memcpy(Light.fade_end_8, cur_col, sizeof(Light.fade_start_8));
memcpy(Light.fade_end_10, cur_col_10bits, sizeof(Light.fade_start_10));
Light.fade_running = true;
- Light.fade_counter = 0;
Light.fade_duration = 0; // set the value to zero to force a recompute
+ Light.fade_start = 0;
// Fade will applied immediately below
}
}
if (Light.fade_running) {
- LightApplyFade();
- // AddLog_P2(LOG_LEVEL_INFO, PSTR("LightApplyFade %d %d %d %d %d - %d %d %d %d %d"),
- // Light.fade_cur_8[0], Light.fade_cur_8[1], Light.fade_cur_8[2], Light.fade_cur_8[3], Light.fade_cur_8[4],
- // Light.fade_cur_10[0], Light.fade_cur_10[1], Light.fade_cur_10[2], Light.fade_cur_10[3], Light.fade_cur_10[4]);
+ if (LightApplyFade()) {
+ // AddLog_P2(LOG_LEVEL_INFO, PSTR("LightApplyFade %d %d %d %d %d - %d %d %d %d %d"),
+ // Light.fade_cur_8[0], Light.fade_cur_8[1], Light.fade_cur_8[2], Light.fade_cur_8[3], Light.fade_cur_8[4],
+ // Light.fade_cur_10[0], Light.fade_cur_10[1], Light.fade_cur_10[2], Light.fade_cur_10[3], Light.fade_cur_10[4]);
- LightSetOutputs(Light.fade_cur_8, Light.fade_cur_10);
+ LightSetOutputs(Light.fade_cur_8, Light.fade_cur_10);
+ }
}
}
}
-void LightApplyFade(void) {
+bool LightApplyFade(void) { // did the value chanegd and needs to be applied
+ static uint32_t last_millis = 0;
+ uint32_t now = millis();
+
+ if ((now - last_millis) <= 5) {
+ return false; // the value was not changed in the last 5 milliseconds, ignore
+ }
+ last_millis = now;
// Check if we need to calculate the duration
if (0 == Light.fade_duration) {
- Light.fade_counter = 0;
+ Light.fade_start = now;
// compute the distance between start and and color (max of distance for each channel)
uint32_t distance = 0;
for (uint32_t i = 0; i < Light.subtype; i++) {
@@ -1764,11 +1777,11 @@ void LightApplyFade(void) {
if (distance > 0) {
// compute the duration of the animation
// Note: Settings.light_speed is the number of half-seconds for a 100% fade,
- // i.e. light_speed=1 means 1024 steps in 10 ticks (500ms)
- Light.fade_duration = (distance * Settings.light_speed * 10) / 1024;
+ // i.e. light_speed=1 means 1024 steps in 500ms
+ Light.fade_duration = (distance * Settings.light_speed * 500) / 1023;
if (Settings.save_data) {
// Also postpone the save_data for the duration of the Fade (in seconds)
- uint32_t delay_seconds = 1 + (Light.fade_duration + 19) / 20; // add one more second
+ uint32_t delay_seconds = 1 + (Light.fade_duration + 999) / 1000; // add one more second
// AddLog_P2(LOG_LEVEL_INFO, PSTR("delay_seconds %d, save_data_counter %d"), delay_seconds, save_data_counter);
if (save_data_counter < delay_seconds) {
save_data_counter = delay_seconds; // pospone
@@ -1776,16 +1789,18 @@ void LightApplyFade(void) {
}
} else {
// no fade needed, we keep the duration at zero, it will fallback directly to end of fade
+ Light.fade_running = false;
}
}
- Light.fade_counter++;
- if (Light.fade_counter <= Light.fade_duration) { // fade not finished
+ uint16_t fade_current = now - Light.fade_start; // number of milliseconds since start of fade
+ if (fade_current <= Light.fade_duration) { // fade not finished
+ //Serial.printf("Fade: %d / %d - ", fade_current, Light.fade_duration);
for (uint32_t i = 0; i < Light.subtype; i++) {
- Light.fade_cur_8[i] = changeUIntScale(Light.fade_counter,
+ Light.fade_cur_8[i] = changeUIntScale(fade_current,
0, Light.fade_duration,
Light.fade_start_8[i], Light.fade_end_8[i]);
- Light.fade_cur_10[i] = changeUIntScale(Light.fade_counter,
+ Light.fade_cur_10[i] = changeUIntScale(fade_current,
0, Light.fade_duration,
Light.fade_start_10[i], Light.fade_end_10[i]);
}
@@ -1793,7 +1808,7 @@ void LightApplyFade(void) {
// stop fade
//AddLop_P2(LOG_LEVEL_DEBUG, PSTR("Stop fade"));
Light.fade_running = false;
- Light.fade_counter = 0;
+ Light.fade_start = 0;
Light.fade_duration = 0;
// set light to target value
memcpy(Light.fade_cur_8, Light.fade_end_8, sizeof(Light.fade_end_8));
@@ -1802,7 +1817,7 @@ void LightApplyFade(void) {
memcpy(Light.fade_start_8, Light.fade_end_8, sizeof(Light.fade_start_8));
memcpy(Light.fade_start_10, Light.fade_end_10, sizeof(Light.fade_start_10));
}
-
+ return true;
}
// On entry we take the 5 channels 8 bits entry, and we apply Power modifiers
@@ -2428,6 +2443,13 @@ bool Xdrv04(uint8_t function)
case FUNC_SERIAL:
result = XlgtCall(FUNC_SERIAL);
break;
+ case FUNC_LOOP:
+ if (Light.fade_running) {
+ if (LightApplyFade()) {
+ LightSetOutputs(Light.fade_cur_8, Light.fade_cur_10);
+ }
+ }
+ break;
case FUNC_EVERY_50_MSECOND:
LightAnimate();
break;
From fbe29e485b4ea835b46320d85587e7b8f4285d0b Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 21 Dec 2019 18:39:47 +0100
Subject: [PATCH 126/559] Zigbee aqara switch, support for double/triple clicks
---
tasmota/xdrv_23_zigbee_5_converters.ino | 1 +
1 file changed, 1 insertion(+)
diff --git a/tasmota/xdrv_23_zigbee_5_converters.ino b/tasmota/xdrv_23_zigbee_5_converters.ino
index 687ac2483..a4ab9e9fc 100644
--- a/tasmota/xdrv_23_zigbee_5_converters.ino
+++ b/tasmota/xdrv_23_zigbee_5_converters.ino
@@ -511,6 +511,7 @@ const Z_AttributeConverter Z_PostProcess[] PROGMEM = {
// On/off cluster
{ 0x0006, 0x0000, "Power", &Z_Copy },
+ { 0x0006, 0x8000, "Power", &Z_Copy }, // See 7280
// On/Off Switch Configuration cluster
{ 0x0007, 0x0000, "SwitchType", &Z_Copy },
From d13553baefa9a53af18c1eeb031449fa80708916 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 Dec 2019 18:59:00 +0100
Subject: [PATCH 127/559] Fix restore
Fix restore ShutterAccuracy, MqttLog, WifiConfig, WifiPower and SerialConfig (#7281)
---
tasmota/CHANGELOG.md | 3 +++
tasmota/settings.ino | 10 +++++-----
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index e8b70c0cd..bd8801376 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -9,6 +9,9 @@
### 7.2.0 20191221
- Release
+- Fix Arduino IDE compile error (#7277)
+- Fix restore ShutterAccuracy, MqttLog, WifiConfig, WifiPower and SerialConfig (#7281)
+- Fix no AP on initial install (#7282)
### 7.1.2.6 20191214
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index 9a0ea44f1..2fd84bde0 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -1240,8 +1240,8 @@ void SettingsDelta(void)
memset((char*)&Settings +0x1D6, 0x00, 16);
}
if (Settings.version < 0x0606000F) {
- Settings.shutter_accuracy = 0;
- Settings.mqttlog_level = MQTT_LOG_LEVEL;
+ Settings.ex_shutter_accuracy = 0;
+ Settings.ex_mqttlog_level = MQTT_LOG_LEVEL;
}
if (Settings.version < 0x06060011) {
Settings.param[P_BACKLOG_DELAY] = MIN_BACKLOG_DELAY;
@@ -1281,7 +1281,7 @@ void SettingsDelta(void)
}
if (Settings.version < 0x06060015) {
if ((EX_WIFI_SMARTCONFIG == Settings.sta_config) || (EX_WIFI_WPSCONFIG == Settings.sta_config)) {
- Settings.sta_config = WIFI_MANAGER;
+ Settings.ex_sta_config = WIFI_MANAGER;
}
}
@@ -1294,10 +1294,10 @@ void SettingsDelta(void)
SettingsEnableAllI2cDrivers();
}
if (Settings.version < 0x07000004) {
- Settings.wifi_output_power = 170;
+ Settings.ex_wifi_output_power = 170;
}
if (Settings.version < 0x07010202) {
- Settings.serial_config = TS_SERIAL_8N1;
+ Settings.ex_serial_config = TS_SERIAL_8N1;
}
if (Settings.version < 0x07010204) {
if (Settings.flag3.ex_cors_enabled == 1) {
From 486894781f775eb7cde2b971aa904d7f3d059a4e Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 21 Dec 2019 22:38:49 +0100
Subject: [PATCH 128/559] Fix AWS IoT
---
tasmota/settings.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index 2fd84bde0..8c378264b 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -1355,7 +1355,7 @@ void SettingsDelta(void)
} else {
char aws_mqtt_host[66];
snprintf_P(aws_mqtt_host, sizeof(aws_mqtt_host), PSTR("%s%s"), temp9, temp7);
- SettingsUpdateText(SET_MQTT_HOST, mqtt_host);
+ SettingsUpdateText(SET_MQTT_HOST, aws_mqtt_host);
SettingsUpdateText(SET_MQTT_USER, "");
}
#else
From ca534c4a1bb9f7910219c15a33e340578c639053 Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Sat, 21 Dec 2019 23:36:15 -0300
Subject: [PATCH 129/559] Changed sensor number to a new free one
---
tasmota/{xsns_58_GPS.ino => xsns_60_GPS.ino} | 40 ++++++++++----------
1 file changed, 20 insertions(+), 20 deletions(-)
rename tasmota/{xsns_58_GPS.ino => xsns_60_GPS.ino} (95%)
diff --git a/tasmota/xsns_58_GPS.ino b/tasmota/xsns_60_GPS.ino
similarity index 95%
rename from tasmota/xsns_58_GPS.ino
rename to tasmota/xsns_60_GPS.ino
index 58178b976..db9343e2d 100644
--- a/tasmota/xsns_58_GPS.ino
+++ b/tasmota/xsns_60_GPS.ino
@@ -1,5 +1,5 @@
/*
- xsns_58_GPS_UBX.ino - GPS UBLOX support for Sonoff-Tasmota
+ xsns_60_GPS.ino - GPS UBLOX support for Sonoff-Tasmota
Copyright (C) 2019 Theo Arends, Christian Baars and Adrian Scillato
@@ -44,46 +44,46 @@ The serial pins are GPX_RX and GPS_TX, no further installation steps needed. To
## Commands:
-+ sensor58 0
++ sensor60 0
write to all available sectors, then restart and overwrite the older ones
-+ sensor58 1
++ sensor60 1
write to all available sectors, then restart and overwrite the older ones
-+ sensor58 2
++ sensor60 2
filter out horizontal drift noise
-+ sensor58 3
++ sensor60 3
turn off noise filter
-+ sensor58 4
++ sensor60 4
start recording, new data will be appended
-+ sensor58 5
++ sensor60 5
start new recording, old data will lost
-+ sensor58 6
++ sensor60 6
stop recording, download link will be visible in Web-UI
-+ sensor58 7
++ sensor60 7
send mqtt on new postion + TELE -> consider to set TELE to a very high value
-+ sensor58 8
++ sensor60 8
only TELE message
-+ sensor58 9
++ sensor60 9
start NTP-server
-+ sensor58 10
++ sensor60 10
deactivate NTP-server
-+ sensor58 11
++ sensor60 11
force update of Tasmota-system-UTC with every new GPS-time-message
-+ sensor58 12
++ sensor60 12
do not update of Tasmota-system-UTC with every new GPS-time-message
-+ sensor58 13
++ sensor60 13
set latitude and longitude in settings
@@ -91,7 +91,7 @@ The serial pins are GPX_RX and GPS_TX, no further installation steps needed. To
## Rules examples for SSD1306 32x128
-rule1 on tele-GPS#lat do DisplayText [s1p21c1l01f1]LAT: %value% endon on tele-GPS#lon do DisplayText [s1p21c1l2]LON: %value% endon on switch1#state==3 do sensor58 4 endon on switch1#state==2 do sensor58 6 endon
+rule1 on tele-GPS#lat do DisplayText [s1p21c1l01f1]LAT: %value% endon on tele-GPS#lon do DisplayText [s1p21c1l2]LON: %value% endon on switch1#state==3 do sensor60 4 endon on switch1#state==2 do sensor60 6 endon
rule2 on tele-GPS#int>9 do DisplayText [f0c9l4]I%value% endon on tele-GPS#int<10 do DisplayText [f0c9l4]I0%value% endon on tele-GPS#fil==1 do DisplayText [f0c18l4]F endon on tele-GPS#fil==0 do DisplayText [f0c18l4]N endon
@@ -793,9 +793,9 @@ bool UBXCmd(void) {
* Interface
\*********************************************************************************************/
-#define XSNS_58 58
+#define XSNS_60 60
-bool Xsns58(uint8_t function)
+bool Xsns60(uint8_t function)
{
bool result = false;
@@ -805,7 +805,7 @@ bool Xsns58(uint8_t function)
UBXDetect();
break;
case FUNC_COMMAND_SENSOR:
- if (XSNS_58 == XdrvMailbox.index){
+ if (XSNS_60 == XdrvMailbox.index){
result = UBXCmd();
}
break;
@@ -843,4 +843,4 @@ bool Xsns58(uint8_t function)
return result;
}
-#endif // USE_GPS_UBX
+#endif // USE_GPS
From f642f014b70959b41248f951a72d52c2dc96db7a Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sun, 22 Dec 2019 11:52:54 +0100
Subject: [PATCH 130/559] Fix WifiConfig error
---
tasmota/CHANGELOG.md | 1 +
tasmota/settings.ino | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 6d6c82853..c7d34cbea 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -13,6 +13,7 @@
- Fix Arduino IDE compile error (#7277)
- Fix restore ShutterAccuracy, MqttLog, WifiConfig, WifiPower and SerialConfig (#7281)
- Fix no AP on initial install (#7282)
+- Fix failing downgrade (#7285)
### 7.1.2.6 20191214
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index 8c378264b..a1da16764 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -488,7 +488,7 @@ void UpdateQuickPowerCycle(bool update)
* Config Settings.text char array support
\*********************************************************************************************/
-const uint32_t settings_text_size = 699; // Settings.flag4 (2D2) - Settings.ota_url (017)
+const uint32_t settings_text_size = 699; // Settings.display_model (2D2) - Settings.ota_url (017)
uint32_t GetSettingsTextLen(void)
{
@@ -1280,7 +1280,7 @@ void SettingsDelta(void)
Settings.ex_energy_power_delta = 0;
}
if (Settings.version < 0x06060015) {
- if ((EX_WIFI_SMARTCONFIG == Settings.sta_config) || (EX_WIFI_WPSCONFIG == Settings.sta_config)) {
+ if ((EX_WIFI_SMARTCONFIG == Settings.ex_sta_config) || (EX_WIFI_WPSCONFIG == Settings.ex_sta_config)) {
Settings.ex_sta_config = WIFI_MANAGER;
}
}
From ad4a7e91acd3e7eccce345b50269b4604a356fb9 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sun, 22 Dec 2019 15:23:52 +0100
Subject: [PATCH 131/559] Add support for max 150 characters
Add support for max 150 characters in most command parameter strings (#3686, #4754)
---
RELEASENOTES.md | 2 ++
tasmota/CHANGELOG.md | 2 ++
tasmota/settings.h | 2 +-
tasmota/settings.ino | 2 +-
tasmota/support_command.ino | 2 +-
tasmota/support_tasmota.ino | 2 +-
tasmota/tasmota.h | 4 ++--
tasmota/tasmota.ino | 6 +++---
tasmota/xdrv_01_webserver.ino | 14 +++++++-------
tasmota/xdrv_02_mqtt.ino | 4 ++--
tasmota/xdrv_10_scripter.ino | 14 +++++++-------
11 files changed, 29 insertions(+), 25 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index bf21cf32b..7f07caaaa 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -49,3 +49,5 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
### Version 8.0.0.1
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
+- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
+- Add support for max 150 characters in command parameter strings (#3686, #4754)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index c7d34cbea..6930b6ab4 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -4,12 +4,14 @@
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
+- Add support for max 150 characters in most command parameter strings (#3686, #4754)
## Released
### 7.2.0 20191221
- Release
+- Change basic version string to lite (#7291)
- Fix Arduino IDE compile error (#7277)
- Fix restore ShutterAccuracy, MqttLog, WifiConfig, WifiPower and SerialConfig (#7281)
- Fix no AP on initial install (#7282)
diff --git a/tasmota/settings.h b/tasmota/settings.h
index 0b3990578..c55d85b34 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -419,7 +419,7 @@ struct SYSCFG {
unsigned long weight_calibration; // 7C4
unsigned long energy_frequency_calibration; // 7C8 also used by HX711 to save last weight
uint16_t web_refresh; // 7CC
- char mems[MAX_RULE_MEMS][10]; // 7CE - Used by scripter as script_pram
+ char mems[5][10]; // 7CE - Used by scripter as script_pram
char rules[MAX_RULE_SETS][MAX_RULE_SIZE]; // 800 uses 512 bytes in v5.12.0m, 3 x 512 bytes in v5.14.0b
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index a1da16764..b0241f9fb 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -533,7 +533,7 @@ bool SettingsUpdateText(uint32_t index, const char* replace_me)
int too_long = (char_len + diff) - settings_text_size;
if (too_long > 0) {
-// AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_CONFIG "Text too long by %d char(s)"), too_long);
+ AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_CONFIG "Text overflow by %d char(s)"), too_long);
return false; // Replace text too long
}
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index b8fbd4a7a..265926b59 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -326,7 +326,7 @@ void CmndStatus(void)
uint32_t option = STAT;
char stemp[200];
- char stemp2[100];
+ char stemp2[TOPSZ];
// Workaround MQTT - TCP/IP stack queueing when SUB_PREFIX = PUB_PREFIX
if (!strcmp(SettingsText(SET_MQTTPREFIX1), SettingsText(SET_MQTTPREFIX2)) && (!payload)) { option++; } // TELE
diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino
index 900ba3dd4..c649d9379 100644
--- a/tasmota/support_tasmota.ino
+++ b/tasmota/support_tasmota.ino
@@ -546,7 +546,7 @@ void MqttShowPWMState(void)
void MqttShowState(void)
{
- char stemp1[33];
+ char stemp1[TOPSZ];
ResponseAppendTime();
ResponseAppend_P(PSTR(",\"" D_JSON_UPTIME "\":\"%s\",\"UptimeSec\":%u"), GetUptime().c_str(), UpTime());
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index c93c3ea9e..d68907185 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -70,10 +70,10 @@ const uint8_t MAX_XSNS_DRIVERS = 96; // Max number of allowed sensor driv
const uint8_t MAX_I2C_DRIVERS = 96; // Max number of allowed i2c drivers
const uint8_t MAX_SHUTTERS = 4; // Max number of shutters
const uint8_t MAX_PCF8574 = 8; // Max number of PCF8574 devices
-const uint8_t MAX_RULE_MEMS = 5; // Max number of saved vars
const uint8_t MAX_RULE_SETS = 3; // Max number of rule sets of size 512 characters
const uint16_t MAX_RULE_SIZE = 512; // Max number of characters in rules
+const uint8_t MAX_RULE_MEMS = 5; // Max number of saved vars
const uint8_t MAX_HUE_DEVICES = 15; // Max number of Philips Hue device per emulation
const char MQTT_TOKEN_PREFIX[] PROGMEM = "%prefix%"; // To be substituted by mqtt_prefix[x]
@@ -118,7 +118,7 @@ const uint8_t OTA_ATTEMPTS = 5; // Number of times to try fetching t
const uint16_t INPUT_BUFFER_SIZE = 520; // Max number of characters in (serial and http) command buffer
const uint16_t FLOATSZ = 16; // Max number of characters in float result from dtostrfd (max 32)
const uint16_t CMDSZ = 24; // Max number of characters in command
-const uint16_t TOPSZ = 100; // Max number of characters in topic string
+const uint16_t TOPSZ = 151; // Max number of characters in topic string
const uint16_t LOGSZ = 700; // Max number of characters in log
const uint16_t MIN_MESSZ = 893; // Min number of characters in MQTT message
diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino
index 67be9d35f..e80331366 100644
--- a/tasmota/tasmota.ino
+++ b/tasmota/tasmota.ino
@@ -68,7 +68,7 @@
// Structs
#include "settings.h"
-const char kCodeImage[] PROGMEM = "tasmota|minimal|sensors|knx|basic|display|ir";
+const char kCodeImage[] PROGMEM = "tasmota|minimal|sensors|knx|lite|display|ir";
/*********************************************************************************************\
* Global variables
@@ -161,8 +161,8 @@ StateBitfield global_state; // Global states (currently Wifi and
char my_version[33]; // Composed version string
char my_image[33]; // Code image and/or commit
char my_hostname[33]; // Composed Wifi hostname
-char mqtt_client[33]; // Composed MQTT Clientname
-char mqtt_topic[33]; // Composed MQTT topic
+char mqtt_client[TOPSZ]; // Composed MQTT Clientname
+char mqtt_topic[TOPSZ]; // Composed MQTT topic
char serial_in_buffer[INPUT_BUFFER_SIZE]; // Receive buffer
char mqtt_data[MESSZ]; // MQTT publish buffer and web page ajax buffer
char log_data[LOGSZ]; // Logging
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index 8aece2be8..104e71f67 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -1694,7 +1694,7 @@ void HandleWifiConfiguration(void)
void WifiSaveSettings(void)
{
- char tmp[100]; // Max length is currently 65
+ char tmp[TOPSZ]; // Max length is currently 150
WebGetArg("h", tmp, sizeof(tmp));
SettingsUpdateText(SET_HOSTNAME, (!strlen(tmp)) ? WIFI_HOSTNAME : tmp);
@@ -1757,7 +1757,7 @@ void HandleLoggingConfiguration(void)
void LoggingSaveSettings(void)
{
- char tmp[100]; // Max length is currently 33
+ char tmp[TOPSZ]; // Max length is currently 33
WebGetArg("l0", tmp, sizeof(tmp));
SetSeriallog((!strlen(tmp)) ? SERIAL_LOG_LEVEL : atoi(tmp));
@@ -1843,7 +1843,7 @@ void HandleOtherConfiguration(void)
void OtherSaveSettings(void)
{
- char tmp[128];
+ char tmp[TOPSZ];
char webindex[5];
char friendlyname[TOPSZ];
@@ -1890,7 +1890,7 @@ void HandleBackupConfiguration(void)
WiFiClient myClient = WebServer->client();
WebServer->setContentLength(sizeof(Settings));
- char attachment[100];
+ char attachment[TOPSZ];
// char friendlyname[TOPSZ];
// snprintf_P(attachment, sizeof(attachment), PSTR("attachment; filename=Config_%s_%s.dmp"), NoAlNumToUnderscore(friendlyname, SettingsText(SET_FRIENDLYNAME1)), my_version);
@@ -2095,12 +2095,12 @@ void HandleUpgradeFirmwareStart(void)
{
if (!HttpCheckPriviledgedAccess()) { return; }
- char command[128]; // OtaUrl
+ char command[TOPSZ + 10]; // OtaUrl
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPGRADE_STARTED));
WifiConfigCounter();
- char otaurl[101];
+ char otaurl[TOPSZ];
WebGetArg("o", otaurl, sizeof(otaurl));
if (strlen(otaurl)) {
snprintf_P(command, sizeof(command), PSTR(D_CMND_OTAURL " %s"), otaurl);
@@ -2637,7 +2637,7 @@ int WebSend(char *buffer)
if (user) {
user = strtok_r(user, ":", &password); // user = |admin|, password = |joker|
if (user && password) {
- char userpass[128];
+ char userpass[200];
snprintf_P(userpass, sizeof(userpass), PSTR("user=%s&password=%s&"), user, password);
url += userpass; // url = |http://192.168.178.86/cm?user=admin&password=joker&|
}
diff --git a/tasmota/xdrv_02_mqtt.ino b/tasmota/xdrv_02_mqtt.ino
index 47838e223..f9ff3e67d 100644
--- a/tasmota/xdrv_02_mqtt.ino
+++ b/tasmota/xdrv_02_mqtt.ino
@@ -1190,7 +1190,7 @@ void HandleMqttConfiguration(void)
return;
}
- char str[33];
+ char str[TOPSZ];
WSContentStart_P(S_CONFIGURE_MQTT);
WSContentSendStyle();
@@ -1209,7 +1209,7 @@ void HandleMqttConfiguration(void)
void MqttSaveSettings(void)
{
- char tmp[100];
+ char tmp[TOPSZ];
char stemp[TOPSZ];
char stemp2[TOPSZ];
diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino
index 68df13984..da63dbb22 100755
--- a/tasmota/xdrv_10_scripter.ino
+++ b/tasmota/xdrv_10_scripter.ino
@@ -56,7 +56,7 @@ keywords if then else endif, or, and are better readable for beginners (others m
#define SCRIPT_MAXSSIZE 48
#define SCRIPT_EOL '\n'
#define SCRIPT_FLOAT_PRECISION 2
-#define SCRIPT_MAXPERM (MAX_RULE_MEMS*10)-4/sizeof(float)
+#define SCRIPT_MAXPERM (5*10)-4/sizeof(float)
#define MAX_SCRIPT_SIZE MAX_RULE_SIZE*MAX_RULE_SETS
// offsets epoch readings by 1.1.2019 00:00:00 to fit into float with second resolution
@@ -1041,7 +1041,7 @@ char *isvar(char *lp, uint8_t *vtype,struct T_INDEX *tind,float *fp,char *sp,Jso
if (sp) strlcpy(sp,str_value,SCRIPT_MAXSSIZE);
return lp+len;
}
-
+
} else {
if (fp) {
if (!strncmp(vn.c_str(),"Epoch",5)) {
@@ -1575,7 +1575,7 @@ chknext:
case 'r':
if (!strncmp(vname,"ram",3)) {
- fvar=glob_script_mem.script_mem_size+(glob_script_mem.script_size)+(MAX_RULE_MEMS*10);
+ fvar=glob_script_mem.script_mem_size+(glob_script_mem.script_size)+(5*10);
goto exit;
}
break;
@@ -2995,7 +2995,7 @@ void ScripterEvery100ms(void) {
if (fast_script==99) Run_Scripter(">F",2,0);
}
-//mems[MAX_RULE_MEMS] is 50 bytes in 6.5
+//mems[5] is 50 bytes in 6.5
// can hold 11 floats or floats + strings
// should report overflow later
void Scripter_save_pvars(void) {
@@ -3007,7 +3007,7 @@ void Scripter_save_pvars(void) {
if (vtp[count].bits.is_permanent && !vtp[count].bits.is_string) {
uint8_t index=vtp[count].index;
mlen+=sizeof(float);
- if (mlen>MAX_RULE_MEMS*10) {
+ if (mlen>5*10) {
vtp[count].bits.is_permanent=0;
return;
}
@@ -3021,7 +3021,7 @@ void Scripter_save_pvars(void) {
char *sp=glob_script_mem.glob_snp+(index*glob_script_mem.max_ssize);
uint8_t slen=strlen(sp);
mlen+=slen+1;
- if (mlen>MAX_RULE_MEMS*10) {
+ if (mlen>5*10) {
vtp[count].bits.is_permanent=0;
return;
}
@@ -4755,7 +4755,7 @@ bool Xdrv10(uint8_t function)
glob_script_mem.script_size=MAX_SCRIPT_SIZE;
glob_script_mem.flags=0;
glob_script_mem.script_pram=(uint8_t*)Settings.mems[0];
- glob_script_mem.script_pram_size=MAX_RULE_MEMS*10;
+ glob_script_mem.script_pram_size=5*10;
#ifdef USE_BUTTON_EVENT
for (uint32_t cnt=0;cnt
Date: Sun, 22 Dec 2019 15:36:20 +0100
Subject: [PATCH 132/559] Change max number of rule ``Mem``s to 16
Change max number of rule ``Mem``s from 5 to 16 (#4933)
---
RELEASENOTES.md | 1 +
tasmota/CHANGELOG.md | 1 +
tasmota/tasmota.h | 2 +-
tasmota/xdrv_10_rules.ino | 4 ++--
4 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 7f07caaaa..b2bff6a7a 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -50,4 +50,5 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
+- Change max number of rule ``Mem``s from 5 to 16 (#4933)
- Add support for max 150 characters in command parameter strings (#3686, #4754)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 6930b6ab4..1c99c7223 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -4,6 +4,7 @@
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
+- Change max number of rule ``Mem``s from 5 to 16 (#4933)
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
## Released
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index d68907185..bdbe5d177 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -73,7 +73,7 @@ const uint8_t MAX_PCF8574 = 8; // Max number of PCF8574 devices
const uint8_t MAX_RULE_SETS = 3; // Max number of rule sets of size 512 characters
const uint16_t MAX_RULE_SIZE = 512; // Max number of characters in rules
-const uint8_t MAX_RULE_MEMS = 5; // Max number of saved vars
+const uint8_t MAX_RULE_MEMS = 16; // Max number of saved vars
const uint8_t MAX_HUE_DEVICES = 15; // Max number of Philips Hue device per emulation
const char MQTT_TOKEN_PREFIX[] PROGMEM = "%prefix%"; // To be substituted by mqtt_prefix[x]
diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino
index 6e1636518..72276f94b 100644
--- a/tasmota/xdrv_10_rules.ino
+++ b/tasmota/xdrv_10_rules.ino
@@ -174,8 +174,8 @@ char rules_vars[MAX_RULE_VARS][33] = {{ 0 }};
#if (MAX_RULE_VARS>16)
#error MAX_RULE_VARS is bigger than 16
#endif
-#if (MAX_RULE_MEMS>5)
-#error MAX_RULE_MEMS is bigger than 5
+#if (MAX_RULE_MEMS>16)
+#error MAX_RULE_MEMS is bigger than 16
#endif
/*******************************************************************************************/
From 35e51918e30c0d6d30cbc94524bec980bdf97aa1 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sun, 22 Dec 2019 16:53:51 +0100
Subject: [PATCH 133/559] Document Settings changes
---
tasmota/settings.h | 68 ++++++++++++-----------
tasmota/settings.ino | 104 +++++++++++++++++------------------
tasmota/xdrv_10_scripter.ino | 2 +-
tasmota/xdrv_20_hue.ino | 1 -
4 files changed, 88 insertions(+), 87 deletions(-)
diff --git a/tasmota/settings.h b/tasmota/settings.h
index c55d85b34..af774a4c2 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -229,6 +229,7 @@ typedef struct {
uint8_t dpid = 0;
} TuyaFnidDpidMap;
+const uint32_t settings_text_size = 699; // Settings.text_pool[size] = Settings.display_model (2D2) - Settings.text_pool (017)
const uint8_t MAX_TUYA_FUNCTIONS = 16;
struct SYSCFG {
@@ -242,21 +243,19 @@ struct SYSCFG {
int16_t save_data; // 014
int8_t timezone; // 016
- // Start of single char array Settings.text
+ // Start of char array storing all parameter strings
- char ota_url[101]; // 017
- char mqtt_prefix[3][11]; // 07C
+ char text_pool[101]; // 017 - was ota_url[101] - size is settings_text_size
- uint8_t ex_baudrate; // 09D - Free since 6.6.0.9
+ char ex_mqtt_prefix[3][11]; // 07C
+ uint8_t ex_baudrate; // 09D
uint8_t ex_seriallog_level; // 09E
uint8_t ex_sta_config; // 09F
uint8_t ex_sta_active; // 0A0
-
- char sta_ssid[2][33]; // 0A1 - Keep together with sta_pwd as being copied as one chunck with reset 5
- char sta_pwd[2][65]; // 0E3 - Keep together with sta_ssid as being copied as one chunck with reset 5
- char hostname[33]; // 165
- char syslog_host[33]; // 186
-
+ char ex_sta_ssid[2][33]; // 0A1
+ char ex_sta_pwd[2][65]; // 0E3
+ char ex_hostname[33]; // 165
+ char ex_syslog_host[33]; // 186
uint8_t ex_rule_stop; // 1A7
uint16_t ex_syslog_port; // 1A8
uint8_t ex_syslog_level; // 1AA
@@ -264,28 +263,23 @@ struct SYSCFG {
uint8_t ex_weblog_level; // 1AC
uint8_t ex_mqtt_fingerprint[2][20]; // 1AD
uint8_t ex_adc_param_type; // 1D5
-
uint8_t ex_free_1d6[10]; // 1D6
-
SysBitfield4 ex_flag4; // 1E0
uint8_t ex_serial_config; // 1E4
uint8_t ex_wifi_output_power; // 1E5
uint8_t ex_shutter_accuracy; // 1E6
uint8_t ex_mqttlog_level; // 1E7
uint8_t ex_sps30_inuse_hours; // 1E8
+ char ex_mqtt_host[33]; // 1E9
+ uint16_t ex_mqtt_port; // 20A
+ char ex_mqtt_client[33]; // 20C
+ char ex_mqtt_user[33]; // 22D
+ char ex_mqtt_pwd[33]; // 24E
+ char ex_mqtt_topic[33]; // 26F
+ char ex_button_topic[33]; // 290
+ char ex_mqtt_grptopic[33]; // 2B1
- char mqtt_host[33]; // 1E9 - Keep together with below as being copied as one chunck with reset 6
-
- uint16_t ex_mqtt_port; // 20A - Keep together
-
- char mqtt_client[33]; // 20C - Keep together
- char mqtt_user[33]; // 22D - Keep together
- char mqtt_pwd[33]; // 24E - Keep together
- char mqtt_topic[33]; // 26F - Keep together with above items as being copied as one chunck with reset 6
- char button_topic[33]; // 290
- char mqtt_grptopic[33]; // 2B1
-
- // Optional end of single char array of 698 chars max (phase 5)
+ // End of single char array of 698 chars max
uint8_t display_model; // 2D2
uint8_t display_mode; // 2D3
@@ -306,8 +300,8 @@ struct SYSCFG {
uint8_t param[PARAM8_SIZE]; // 2FC SetOption32 .. SetOption49
int16_t toffset[2]; // 30E
uint8_t display_font; // 312
- char state_text[4][11]; // 313
+ char ex_state_text[4][11]; // 313
uint8_t ex_energy_power_delta; // 33F - Free since 6.6.0.20
uint16_t domoticz_update_timer; // 340
@@ -342,8 +336,10 @@ struct SYSCFG {
uint16_t light_rotation; // 39E
SysBitfield3 flag3; // 3A0
uint8_t switchmode[MAX_SWITCHES]; // 3A4 (6.0.0b - moved from 0x4CA)
- char friendlyname[MAX_FRIENDLYNAMES][33]; // 3AC
- char switch_topic[33]; // 430
+
+ char ex_friendlyname[MAX_FRIENDLYNAMES][33]; // 3AC
+ char ex_switch_topic[33]; // 430
+
char serial_delimiter; // 451
uint8_t seriallog_level; // 452
uint8_t sleep; // 453
@@ -367,15 +363,21 @@ struct SYSCFG {
uint8_t knx_GA_registered; // 4A5 Number of Group Address to read
uint16_t light_wakeup; // 4A6
uint8_t knx_CB_registered; // 4A8 Number of Group Address to write
- char web_password[33]; // 4A9
+
+ char ex_web_password[33]; // 4A9
+
uint8_t interlock[MAX_INTERLOCKS]; // 4CA
- char ntp_server[3][33]; // 4CE
+
+ char ex_ntp_server[3][33]; // 4CE
+
uint8_t ina219_mode; // 531
uint16_t pulse_timer[MAX_PULSETIMERS]; // 532
uint16_t button_debounce; // 542
uint32_t ip_address[4]; // 544
unsigned long energy_kWhtotal; // 554
- char mqtt_fulltopic[100]; // 558
+
+ char ex_mqtt_fulltopic[100]; // 558
+
SysBitfield2 flag2; // 5BC
unsigned long pulse_counter[MAX_COUNTERS]; // 5C0
uint16_t pulse_counter_type; // 5D0
@@ -419,7 +421,7 @@ struct SYSCFG {
unsigned long weight_calibration; // 7C4
unsigned long energy_frequency_calibration; // 7C8 also used by HX711 to save last weight
uint16_t web_refresh; // 7CC
- char mems[5][10]; // 7CE - Used by scripter as script_pram
+ char script_pram[5][10]; // 7CE
char rules[MAX_RULE_SETS][MAX_RULE_SIZE]; // 800 uses 512 bytes in v5.12.0m, 3 x 512 bytes in v5.14.0b
@@ -443,7 +445,9 @@ struct SYSCFG {
int8_t temp_comp; // E9E
uint8_t weight_change; // E9F
uint8_t web_color2[2][3]; // EA0 - Needs to be on integer / 3 distance from web_color
- char cors_domain[33]; // EA6
+
+ char ex_cors_domain[33]; // EA6
+
uint8_t sta_config; // EC7
uint8_t sta_active; // EC8
uint8_t rule_stop; // EC9
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index b0241f9fb..ce6c33ff4 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -488,15 +488,13 @@ void UpdateQuickPowerCycle(bool update)
* Config Settings.text char array support
\*********************************************************************************************/
-const uint32_t settings_text_size = 699; // Settings.display_model (2D2) - Settings.ota_url (017)
-
uint32_t GetSettingsTextLen(void)
{
- char* position = Settings.ota_url;
+ char* position = Settings.text_pool;
for (uint32_t size = 0; size < SET_MAX; size++) {
while (*position++ != '\0') { }
}
- return position - Settings.ota_url;
+ return position - Settings.text_pool;
}
bool SettingsUpdateText(uint32_t index, const char* replace_me)
@@ -512,18 +510,18 @@ bool SettingsUpdateText(uint32_t index, const char* replace_me)
uint32_t start_pos = 0;
uint32_t end_pos = 0;
- char* position = Settings.ota_url;
+ char* position = Settings.text_pool;
for (uint32_t size = 0; size < SET_MAX; size++) {
while (*position++ != '\0') { }
if (1 == index) {
- start_pos = position - Settings.ota_url;
+ start_pos = position - Settings.text_pool;
}
else if (0 == index) {
- end_pos = position - Settings.ota_url -1;
+ end_pos = position - Settings.text_pool -1;
}
index--;
}
- uint32_t char_len = position - Settings.ota_url;
+ uint32_t char_len = position - Settings.text_pool;
uint32_t current_len = end_pos - start_pos;
int diff = replace_len - current_len;
@@ -539,12 +537,12 @@ bool SettingsUpdateText(uint32_t index, const char* replace_me)
if (diff != 0) {
// Shift Settings.text up or down
- memmove_P(Settings.ota_url + start_pos + replace_len, Settings.ota_url + end_pos, char_len - end_pos);
+ memmove_P(Settings.text_pool + start_pos + replace_len, Settings.text_pool + end_pos, char_len - end_pos);
}
// Replace text
- memmove_P(Settings.ota_url + start_pos, replace, replace_len);
+ memmove_P(Settings.text_pool + start_pos, replace, replace_len);
// Fill for future use
- memset(Settings.ota_url + char_len + diff, 0x00, settings_text_size - char_len - diff);
+ memset(Settings.text_pool + char_len + diff, 0x00, settings_text_size - char_len - diff);
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_CONFIG "CR %d/%d"), GetSettingsTextLen(), settings_text_size);
@@ -557,7 +555,7 @@ char* SettingsText(uint32_t index)
return nullptr; // Setting not supported - internal error
}
- char* position = Settings.ota_url;
+ char* position = Settings.text_pool;
for (;index > 0; index--) {
while (*position++ != '\0') { }
}
@@ -1301,9 +1299,9 @@ void SettingsDelta(void)
}
if (Settings.version < 0x07010204) {
if (Settings.flag3.ex_cors_enabled == 1) {
- strlcpy(Settings.cors_domain, CORS_ENABLED_ALL, sizeof(Settings.cors_domain));
+ strlcpy(Settings.ex_cors_domain, CORS_ENABLED_ALL, sizeof(Settings.ex_cors_domain));
} else {
- Settings.cors_domain[0] = 0;
+ Settings.ex_cors_domain[0] = 0;
}
}
if (Settings.version < 0x07010205) {
@@ -1319,25 +1317,25 @@ void SettingsDelta(void)
}
if (Settings.version < 0x08000000) {
- char temp[strlen(Settings.ota_url) +1]; strncpy(temp, Settings.ota_url, sizeof(temp));
- char temp21[strlen(Settings.mqtt_prefix[0]) +1]; strncpy(temp21, Settings.mqtt_prefix[0], sizeof(temp21));
- char temp22[strlen(Settings.mqtt_prefix[1]) +1]; strncpy(temp22, Settings.mqtt_prefix[1], sizeof(temp22));
- char temp23[strlen(Settings.mqtt_prefix[2]) +1]; strncpy(temp23, Settings.mqtt_prefix[2], sizeof(temp23));
- char temp31[strlen(Settings.sta_ssid[0]) +1]; strncpy(temp31, Settings.sta_ssid[0], sizeof(temp31));
- char temp32[strlen(Settings.sta_ssid[1]) +1]; strncpy(temp32, Settings.sta_ssid[1], sizeof(temp32));
- char temp41[strlen(Settings.sta_pwd[0]) +1]; strncpy(temp41, Settings.sta_pwd[0], sizeof(temp41));
- char temp42[strlen(Settings.sta_pwd[1]) +1]; strncpy(temp42, Settings.sta_pwd[1], sizeof(temp42));
- char temp5[strlen(Settings.hostname) +1]; strncpy(temp5, Settings.hostname, sizeof(temp5));
- char temp6[strlen(Settings.syslog_host) +1]; strncpy(temp6, Settings.syslog_host, sizeof(temp6));
- char temp7[strlen(Settings.mqtt_host) +1]; strncpy(temp7, Settings.mqtt_host, sizeof(temp7));
- char temp8[strlen(Settings.mqtt_client) +1]; strncpy(temp8, Settings.mqtt_client, sizeof(temp8));
- char temp9[strlen(Settings.mqtt_user) +1]; strncpy(temp9, Settings.mqtt_user, sizeof(temp9));
- char temp10[strlen(Settings.mqtt_pwd) +1]; strncpy(temp10, Settings.mqtt_pwd, sizeof(temp10));
- char temp11[strlen(Settings.mqtt_topic) +1]; strncpy(temp11, Settings.mqtt_topic, sizeof(temp11));
- char temp12[strlen(Settings.button_topic) +1]; strncpy(temp12, Settings.button_topic, sizeof(temp12));
- char temp13[strlen(Settings.mqtt_grptopic) +1]; strncpy(temp13, Settings.mqtt_grptopic, sizeof(temp13));
+ char temp[strlen(Settings.text_pool) +1]; strncpy(temp, Settings.text_pool, sizeof(temp)); // Was ota_url
+ char temp21[strlen(Settings.ex_mqtt_prefix[0]) +1]; strncpy(temp21, Settings.ex_mqtt_prefix[0], sizeof(temp21));
+ char temp22[strlen(Settings.ex_mqtt_prefix[1]) +1]; strncpy(temp22, Settings.ex_mqtt_prefix[1], sizeof(temp22));
+ char temp23[strlen(Settings.ex_mqtt_prefix[2]) +1]; strncpy(temp23, Settings.ex_mqtt_prefix[2], sizeof(temp23));
+ char temp31[strlen(Settings.ex_sta_ssid[0]) +1]; strncpy(temp31, Settings.ex_sta_ssid[0], sizeof(temp31));
+ char temp32[strlen(Settings.ex_sta_ssid[1]) +1]; strncpy(temp32, Settings.ex_sta_ssid[1], sizeof(temp32));
+ char temp41[strlen(Settings.ex_sta_pwd[0]) +1]; strncpy(temp41, Settings.ex_sta_pwd[0], sizeof(temp41));
+ char temp42[strlen(Settings.ex_sta_pwd[1]) +1]; strncpy(temp42, Settings.ex_sta_pwd[1], sizeof(temp42));
+ char temp5[strlen(Settings.ex_hostname) +1]; strncpy(temp5, Settings.ex_hostname, sizeof(temp5));
+ char temp6[strlen(Settings.ex_syslog_host) +1]; strncpy(temp6, Settings.ex_syslog_host, sizeof(temp6));
+ char temp7[strlen(Settings.ex_mqtt_host) +1]; strncpy(temp7, Settings.ex_mqtt_host, sizeof(temp7));
+ char temp8[strlen(Settings.ex_mqtt_client) +1]; strncpy(temp8, Settings.ex_mqtt_client, sizeof(temp8));
+ char temp9[strlen(Settings.ex_mqtt_user) +1]; strncpy(temp9, Settings.ex_mqtt_user, sizeof(temp9));
+ char temp10[strlen(Settings.ex_mqtt_pwd) +1]; strncpy(temp10, Settings.ex_mqtt_pwd, sizeof(temp10));
+ char temp11[strlen(Settings.ex_mqtt_topic) +1]; strncpy(temp11, Settings.ex_mqtt_topic, sizeof(temp11));
+ char temp12[strlen(Settings.ex_button_topic) +1]; strncpy(temp12, Settings.ex_button_topic, sizeof(temp12));
+ char temp13[strlen(Settings.ex_mqtt_grptopic) +1]; strncpy(temp13, Settings.ex_mqtt_grptopic, sizeof(temp13));
- memset(Settings.ota_url, 0x00, settings_text_size);
+ memset(Settings.text_pool, 0x00, settings_text_size);
SettingsUpdateText(SET_OTAURL, temp);
SettingsUpdateText(SET_MQTTPREFIX1, temp21);
SettingsUpdateText(SET_MQTTPREFIX2, temp22);
@@ -1349,7 +1347,7 @@ void SettingsDelta(void)
SettingsUpdateText(SET_HOSTNAME, temp5);
SettingsUpdateText(SET_SYSLOG_HOST, temp6);
#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
- if (!strlen(Settings.mqtt_user)) {
+ if (!strlen(Settings.ex_mqtt_user)) {
SettingsUpdateText(SET_MQTT_HOST, temp7);
SettingsUpdateText(SET_MQTT_USER, temp9);
} else {
@@ -1368,26 +1366,26 @@ void SettingsDelta(void)
SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, temp12);
SettingsUpdateText(SET_MQTT_GRP_TOPIC, temp13);
- SettingsUpdateText(SET_WEBPWD, Settings.web_password);
- SettingsUpdateText(SET_CORS, Settings.cors_domain);
- SettingsUpdateText(SET_MQTT_FULLTOPIC, Settings.mqtt_fulltopic);
- SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, Settings.switch_topic);
- SettingsUpdateText(SET_STATE_TXT1, Settings.state_text[0]);
- SettingsUpdateText(SET_STATE_TXT2, Settings.state_text[1]);
- SettingsUpdateText(SET_STATE_TXT3, Settings.state_text[2]);
- SettingsUpdateText(SET_STATE_TXT4, Settings.state_text[3]);
- SettingsUpdateText(SET_NTPSERVER1, Settings.ntp_server[0]);
- SettingsUpdateText(SET_NTPSERVER2, Settings.ntp_server[1]);
- SettingsUpdateText(SET_NTPSERVER3, Settings.ntp_server[2]);
- SettingsUpdateText(SET_MEM1, Settings.mems[0]);
- SettingsUpdateText(SET_MEM2, Settings.mems[1]);
- SettingsUpdateText(SET_MEM3, Settings.mems[2]);
- SettingsUpdateText(SET_MEM4, Settings.mems[3]);
- SettingsUpdateText(SET_MEM5, Settings.mems[4]);
- SettingsUpdateText(SET_FRIENDLYNAME1, Settings.friendlyname[0]);
- SettingsUpdateText(SET_FRIENDLYNAME2, Settings.friendlyname[1]);
- SettingsUpdateText(SET_FRIENDLYNAME3, Settings.friendlyname[2]);
- SettingsUpdateText(SET_FRIENDLYNAME4, Settings.friendlyname[3]);
+ SettingsUpdateText(SET_WEBPWD, Settings.ex_web_password);
+ SettingsUpdateText(SET_CORS, Settings.ex_cors_domain);
+ SettingsUpdateText(SET_MQTT_FULLTOPIC, Settings.ex_mqtt_fulltopic);
+ SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, Settings.ex_switch_topic);
+ SettingsUpdateText(SET_STATE_TXT1, Settings.ex_state_text[0]);
+ SettingsUpdateText(SET_STATE_TXT2, Settings.ex_state_text[1]);
+ SettingsUpdateText(SET_STATE_TXT3, Settings.ex_state_text[2]);
+ SettingsUpdateText(SET_STATE_TXT4, Settings.ex_state_text[3]);
+ SettingsUpdateText(SET_NTPSERVER1, Settings.ex_ntp_server[0]);
+ SettingsUpdateText(SET_NTPSERVER2, Settings.ex_ntp_server[1]);
+ SettingsUpdateText(SET_NTPSERVER3, Settings.ex_ntp_server[2]);
+ SettingsUpdateText(SET_MEM1, Settings.script_pram[0]);
+ SettingsUpdateText(SET_MEM2, Settings.script_pram[1]);
+ SettingsUpdateText(SET_MEM3, Settings.script_pram[2]);
+ SettingsUpdateText(SET_MEM4, Settings.script_pram[3]);
+ SettingsUpdateText(SET_MEM5, Settings.script_pram[4]);
+ SettingsUpdateText(SET_FRIENDLYNAME1, Settings.ex_friendlyname[0]);
+ SettingsUpdateText(SET_FRIENDLYNAME2, Settings.ex_friendlyname[1]);
+ SettingsUpdateText(SET_FRIENDLYNAME3, Settings.ex_friendlyname[2]);
+ SettingsUpdateText(SET_FRIENDLYNAME4, Settings.ex_friendlyname[3]);
}
Settings.version = VERSION;
diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino
index da63dbb22..c6aedb80e 100755
--- a/tasmota/xdrv_10_scripter.ino
+++ b/tasmota/xdrv_10_scripter.ino
@@ -4754,7 +4754,7 @@ bool Xdrv10(uint8_t function)
glob_script_mem.script_ram=Settings.rules[0];
glob_script_mem.script_size=MAX_SCRIPT_SIZE;
glob_script_mem.flags=0;
- glob_script_mem.script_pram=(uint8_t*)Settings.mems[0];
+ glob_script_mem.script_pram=(uint8_t*)Settings.script_pram[0];
glob_script_mem.script_pram_size=5*10;
#ifdef USE_BUTTON_EVENT
diff --git a/tasmota/xdrv_20_hue.ino b/tasmota/xdrv_20_hue.ino
index 1d13ee263..80e85d821 100644
--- a/tasmota/xdrv_20_hue.ino
+++ b/tasmota/xdrv_20_hue.ino
@@ -365,7 +365,6 @@ void HueLightStatus1(uint8_t device, String *response)
// Any device whose friendly name start with "$" is considered hidden
bool HueActive(uint8_t device) {
if (device > MAX_FRIENDLYNAMES) { device = MAX_FRIENDLYNAMES; }
-// return '$' != Settings.friendlyname[device-1][0];
return '$' != *SettingsText(SET_FRIENDLYNAME1 +device -1);
}
From 7695a2c5bf457e719d6387e1b03e6798e528e8d3 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sun, 22 Dec 2019 17:15:47 +0100
Subject: [PATCH 134/559] Change max number of rule ``Var``s to 16
Change max number of rule ``Var``s from 5 to 16 (#4933)
---
README.md | 3 ++-
RELEASENOTES.md | 3 ++-
tasmota/CHANGELOG.md | 1 +
tasmota/tasmota.h | 2 +-
4 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 9a9ff0e1c..43bf4604a 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ In addition to the [release webpage](https://github.com/arendst/Tasmota/releases
## Development
-[](https://github.com/arendst/Tasmota)
+[](https://github.com/arendst/Tasmota)
[](http://thehackbox.org/tasmota/)
[](https://travis-ci.org/arendst/Tasmota)
@@ -67,6 +67,7 @@ See [wiki migration path](https://tasmota.github.io/docs/#/Upgrading?id=migratio
3. Migrate to **Sonoff-Tasmota 5.14**
4. Migrate to **Sonoff-Tasmota 6.x**
5. Migrate to **Tasmota 7.x**
+6. Migrate to **Tasmota 8.x**
## Support Information
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index b2bff6a7a..8ac156872 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -51,4 +51,5 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
- Change max number of rule ``Mem``s from 5 to 16 (#4933)
-- Add support for max 150 characters in command parameter strings (#3686, #4754)
+- Change max number of rule ``Var``s from 5 to 16 (#4933)
+- Add support for max 150 characters in most command parameter strings (#3686, #4754)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 1c99c7223..653112388 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -5,6 +5,7 @@
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
- Change max number of rule ``Mem``s from 5 to 16 (#4933)
+- Change max number of rule ``Var``s from 5 to 16 (#4933)
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
## Released
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index bdbe5d177..829a90871 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -143,7 +143,7 @@ const uint32_t LOOP_SLEEP_DELAY = 50; // Lowest number of milliseconds to
\*********************************************************************************************/
#define MAX_RULE_TIMERS 8 // Max number of rule timers (4 bytes / timer)
-#define MAX_RULE_VARS 5 // Max number of rule variables (10 bytes / variable)
+#define MAX_RULE_VARS 16 // Max number of rule variables (33 bytes / variable)
/*
// Removed from esp8266 core since 20171105
From cdcaaa325deb9f31f1292e5196a94a70e312f94f Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sun, 22 Dec 2019 17:47:45 +0100
Subject: [PATCH 135/559] Add Zigbee coalesce sensor attributes into a single
message
---
tasmota/CHANGELOG.md | 1 +
tasmota/my_user_config.h | 1 +
tasmota/xdrv_23_zigbee_0_constants.ino | 2 +
tasmota/xdrv_23_zigbee_1_headers.ino | 20 +++++++++
tasmota/xdrv_23_zigbee_3_devices.ino | 57 ++++++++++++++++++++++--
tasmota/xdrv_23_zigbee_5_converters.ino | 22 +---------
tasmota/xdrv_23_zigbee_8_parsers.ino | 58 +++++++++++++++++++++----
tasmota/xdrv_23_zigbee_9_impl.ino | 19 --------
8 files changed, 130 insertions(+), 50 deletions(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 653112388..084388717 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -7,6 +7,7 @@
- Change max number of rule ``Mem``s from 5 to 16 (#4933)
- Change max number of rule ``Var``s from 5 to 16 (#4933)
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
+- Add Zigbee coalesce sensor attributes into a single message
## Released
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 73a965d30..89640ffcf 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -530,6 +530,7 @@
#define USE_ZIGBEE_PRECFGKEY_L 0x0F0D0B0907050301L // note: changing requires to re-pair all devices
#define USE_ZIGBEE_PRECFGKEY_H 0x0D0C0A0806040200L // note: changing requires to re-pair all devices
#define USE_ZIGBEE_PERMIT_JOIN false // don't allow joining by default
+ #define USE_ZIGBEE_COALESCE_ATTR_TIMER 350 // timer to coalesce attribute values (in ms)
// -- Other sensors/drivers -----------------------
diff --git a/tasmota/xdrv_23_zigbee_0_constants.ino b/tasmota/xdrv_23_zigbee_0_constants.ino
index 0c74c9d8a..f83acf21b 100644
--- a/tasmota/xdrv_23_zigbee_0_constants.ino
+++ b/tasmota/xdrv_23_zigbee_0_constants.ino
@@ -19,6 +19,8 @@
#ifdef USE_ZIGBEE
+#define OCCUPANCY "Occupancy" // global define for Aqara
+
typedef uint64_t Z_IEEEAddress;
typedef uint16_t Z_ShortAddress;
diff --git a/tasmota/xdrv_23_zigbee_1_headers.ino b/tasmota/xdrv_23_zigbee_1_headers.ino
index b017d8e2e..8bfc59b70 100644
--- a/tasmota/xdrv_23_zigbee_1_headers.ino
+++ b/tasmota/xdrv_23_zigbee_1_headers.ino
@@ -23,4 +23,24 @@
void ZigbeeZCLSend(uint16_t dtsAddr, uint16_t clusterId, uint8_t endpoint, uint8_t cmdId, bool clusterSpecific, const uint8_t *msg, size_t len, bool disableDefResp = true, uint8_t transacId = 1);
+
+// Get an JSON attribute, with case insensitive key search
+JsonVariant &getCaseInsensitive(const JsonObject &json, const char *needle) {
+ // key can be in PROGMEM
+ if ((nullptr == &json) || (nullptr == needle) || (0 == pgm_read_byte(needle))) {
+ return *(JsonVariant*)nullptr;
+ }
+
+ for (auto kv : json) {
+ const char *key = kv.key;
+ JsonVariant &value = kv.value;
+
+ if (0 == strcasecmp_P(key, needle)) {
+ return value;
+ }
+ }
+ // if not found
+ return *(JsonVariant*)nullptr;
+}
+
#endif // USE_ZIGBEE
diff --git a/tasmota/xdrv_23_zigbee_3_devices.ino b/tasmota/xdrv_23_zigbee_3_devices.ino
index de13990c2..c42f4b603 100644
--- a/tasmota/xdrv_23_zigbee_3_devices.ino
+++ b/tasmota/xdrv_23_zigbee_3_devices.ino
@@ -42,6 +42,9 @@ typedef struct Z_Device {
uint16_t endpoint; // endpoint to use for timer
uint32_t value; // any raw value to use for the timer
Z_DeviceTimer func; // function to call when timer occurs
+ // json buffer used for attribute reporting
+ DynamicJsonBuffer *json_buffer;
+ JsonObject *json;
} Z_Device;
// All devices are stored in a Vector
@@ -84,6 +87,11 @@ public:
void setTimer(uint32_t shortaddr, uint32_t wait_ms, uint16_t cluster, uint16_t endpoint, uint32_t value, Z_DeviceTimer func);
void runTimer(void);
+ // Append or clear attributes Json structure
+ void jsonClear(uint16_t shortaddr);
+ void jsonAppend(uint16_t shortaddr, JsonObject &values);
+ const JsonObject *jsonGet(uint16_t shortaddr);
+
private:
std::vector _devices = {};
@@ -173,7 +181,9 @@ Z_Device & Z_Devices::createDeviceEntry(uint16_t shortaddr, uint64_t longaddr) {
std::vector(),
std::vector(),
0,0,0,0,
- nullptr };
+ nullptr,
+ nullptr, nullptr };
+ device.json_buffer = new DynamicJsonBuffer();
_devices.push_back(device);
return _devices.back();
}
@@ -394,14 +404,55 @@ void Z_Devices::runTimer(void) {
uint32_t timer = device.timer;
if ((timer) && (timer <= now)) {
+ device.timer = 0; // cancel the timer before calling, so the callback can set another timer
// trigger the timer
(*device.func)(device.shortaddr, device.cluster, device.endpoint, device.value);
-
- device.timer = 0; // cancel the timer
}
}
}
+void Z_Devices::jsonClear(uint16_t shortaddr) {
+ Z_Device & device = getShortAddr(shortaddr);
+ if (&device == nullptr) { return; } // don't crash if not found
+
+ device.json = nullptr;
+ device.json_buffer->clear();
+}
+
+void Z_Devices::jsonAppend(uint16_t shortaddr, JsonObject &values) {
+ Z_Device & device = getShortAddr(shortaddr);
+ if (&device == nullptr) { return; } // don't crash if not found
+ if (&values == nullptr) { return; }
+
+ if (nullptr == device.json) {
+ device.json = &(device.json_buffer->createObject());
+ }
+ // copy all values from 'values' to 'json'
+ for (auto kv : values) {
+ String key_string = kv.key;
+ const char * key = key_string.c_str();
+ JsonVariant &val = kv.value;
+
+ device.json->remove(key_string); // force remove to have metadata like LinkQuality at the end
+
+ if (val.is()) {
+ String sval = val.as(); // force a copy of the String value
+ device.json->set(key_string, sval);
+ } else if (val.is()) {
+ // todo
+ } else if (val.is()) {
+ // todo
+ } else {
+ device.json->set(key_string, kv.value);
+ }
+ }
+}
+
+const JsonObject *Z_Devices::jsonGet(uint16_t shortaddr) {
+ Z_Device & device = getShortAddr(shortaddr);
+ if (&device == nullptr) { return nullptr; } // don't crash if not found
+ return device.json;
+}
// Dump the internal memory of Zigbee devices
// Mode = 1: simple dump of devices addresses and names
diff --git a/tasmota/xdrv_23_zigbee_5_converters.ino b/tasmota/xdrv_23_zigbee_5_converters.ino
index a4ab9e9fc..49d63808e 100644
--- a/tasmota/xdrv_23_zigbee_5_converters.ino
+++ b/tasmota/xdrv_23_zigbee_5_converters.ino
@@ -480,8 +480,6 @@ typedef struct Z_AttributeConverter {
Z_AttrConverter func;
} Z_AttributeConverter;
-#define OCCUPANCY "Occupancy" // global define for Aqara
-
// list of post-processing directives
const Z_AttributeConverter Z_PostProcess[] PROGMEM = {
{ 0x0000, 0x0000, "ZCLVersion", &Z_Copy },
@@ -751,7 +749,7 @@ const Z_AttributeConverter Z_PostProcess[] PROGMEM = {
{ 0x0405, 0xFFFF, nullptr, &Z_Remove }, // Remove all other values
// Occupancy Sensing cluster
- { 0x0406, 0x0000, OCCUPANCY, &Z_AqaraOccupancy }, // Occupancy (map8)
+ { 0x0406, 0x0000, OCCUPANCY, &Z_Copy }, // Occupancy (map8)
{ 0x0406, 0x0001, "OccupancySensorType", &Z_Copy }, // OccupancySensorType
{ 0x0406, 0xFFFF, nullptr, &Z_Remove }, // Remove all other values
@@ -818,11 +816,7 @@ int32_t Z_FloatDiv10(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject&
return 1; // remove original key
}
-
-// Aqara Occupancy behavior: the Aqara device only sends Occupancy: true events every 60 seconds.
-// Here we add a timer so if we don't receive a Occupancy event for 90 seconds, we send Occupancy:false
-const uint32_t OCCUPANCY_TIMEOUT = 90 * 1000; // 90 s
-
+// Publish a message for `"Occupancy":0` when the timer expired
int32_t Z_OccupancyCallback(uint16_t shortaddr, uint16_t cluster, uint16_t endpoint, uint32_t value) {
// send Occupancy:false message
Response_P(PSTR("{\"" D_CMND_ZIGBEE_RECEIVED "\":{\"0x%04X\":{\"" OCCUPANCY "\":0}}}"), shortaddr);
@@ -830,18 +824,6 @@ int32_t Z_OccupancyCallback(uint16_t shortaddr, uint16_t cluster, uint16_t endpo
XdrvRulesProcess();
}
-int32_t Z_AqaraOccupancy(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
- json[new_name] = value;
- uint32_t occupancy = value;
-
- if (occupancy) {
- zigbee_devices.setTimer(shortaddr, OCCUPANCY_TIMEOUT, cluster, zcl->getSrcEndpoint(), 0, &Z_OccupancyCallback);
- } else {
- zigbee_devices.resetTimer(shortaddr);
- }
- return 1; // remove original key
-}
-
// Aqara Vibration Sensor - special proprietary attributes
int32_t Z_AqaraVibration(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
//json[new_name] = value;
diff --git a/tasmota/xdrv_23_zigbee_8_parsers.ino b/tasmota/xdrv_23_zigbee_8_parsers.ino
index 2f30080fa..89320b117 100644
--- a/tasmota/xdrv_23_zigbee_8_parsers.ino
+++ b/tasmota/xdrv_23_zigbee_8_parsers.ino
@@ -357,6 +357,39 @@ int32_t Z_ReceiveEndDeviceAnnonce(int32_t res, const class SBuffer &buf) {
return -1;
}
+// Aqara Occupancy behavior: the Aqara device only sends Occupancy: true events every 60 seconds.
+// Here we add a timer so if we don't receive a Occupancy event for 90 seconds, we send Occupancy:false
+const uint32_t OCCUPANCY_TIMEOUT = 90 * 1000; // 90 s
+
+void Z_AqaraOccupancy(uint16_t shortaddr, uint16_t cluster, uint16_t endpoint, const JsonObject *json) {
+ // Read OCCUPANCY value if any
+ const JsonVariant &val_endpoint = getCaseInsensitive(*json, PSTR(OCCUPANCY));
+ if (nullptr != &val_endpoint) {
+ uint32_t occupancy = strToUInt(val_endpoint);
+
+ if (occupancy) {
+ zigbee_devices.setTimer(shortaddr, OCCUPANCY_TIMEOUT, cluster, endpoint, 0, &Z_OccupancyCallback);
+ }
+ }
+}
+
+
+// Publish the received values once they have been coalesced
+int32_t Z_PublishAttributes(uint16_t shortaddr, uint16_t cluster, uint16_t endpoint, uint32_t value) {
+ const JsonObject *json = zigbee_devices.jsonGet(shortaddr);
+ if (json == nullptr) { return 0; } // don't crash if not found
+
+ // Post-provess for Aqara Presence Senson
+ Z_AqaraOccupancy(shortaddr, cluster, endpoint, json);
+
+ String msg = "";
+ json->printTo(msg);
+ zigbee_devices.jsonClear(shortaddr);
+ Response_P(PSTR("{\"" D_CMND_ZIGBEE_RECEIVED "\":{\"0x%04X\":%s}}"), shortaddr, msg.c_str());
+ MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR));
+ XdrvRulesProcess();
+}
+
int32_t Z_ReceiveAfIncomingMessage(int32_t res, const class SBuffer &buf) {
uint16_t groupid = buf.get16(2);
uint16_t clusterid = buf.get16(4);
@@ -369,6 +402,8 @@ int32_t Z_ReceiveAfIncomingMessage(int32_t res, const class SBuffer &buf) {
uint32_t timestamp = buf.get32(13);
uint8_t seqnumber = buf.get8(17);
+ bool defer_attributes = false; // do we defer attributes reporting to coalesce
+
zigbee_devices.updateLastSeen(srcaddr);
ZCLFrame zcl_received = ZCLFrame::parseRawFrame(buf, 19, buf.get8(18), clusterid, groupid,
srcaddr,
@@ -384,13 +419,13 @@ int32_t Z_ReceiveAfIncomingMessage(int32_t res, const class SBuffer &buf) {
JsonObject& json1 = json_root.createNestedObject(F(D_CMND_ZIGBEE_RECEIVED));
JsonObject& json = json1.createNestedObject(shortaddr);
- // TODO add name field if it is known
if ( (!zcl_received.isClusterSpecificCommand()) && (ZCL_REPORT_ATTRIBUTES == zcl_received.getCmdId())) {
- zcl_received.parseRawAttributes(json);
+ zcl_received.parseRawAttributes(json);
+ if (clusterid) { defer_attributes = true; } // don't defer system Cluster=0 messages
} else if ( (!zcl_received.isClusterSpecificCommand()) && (ZCL_READ_ATTRIBUTES_RESPONSE == zcl_received.getCmdId())) {
zcl_received.parseReadAttributes(json);
} else if (zcl_received.isClusterSpecificCommand()) {
- zcl_received.parseClusterSpecificCommand(json);
+ zcl_received.parseClusterSpecificCommand(json);
}
String msg("");
msg.reserve(100);
@@ -401,11 +436,18 @@ int32_t Z_ReceiveAfIncomingMessage(int32_t res, const class SBuffer &buf) {
// Add linkquality
json[F(D_CMND_ZIGBEE_LINKQUALITY)] = linkquality;
- msg = "";
- json_root.printTo(msg);
- Response_P(PSTR("%s"), msg.c_str());
- MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR));
- XdrvRulesProcess();
+ if (defer_attributes) {
+ // Prepare for publish
+ zigbee_devices.jsonAppend(srcaddr, json);
+ zigbee_devices.setTimer(srcaddr, USE_ZIGBEE_COALESCE_ATTR_TIMER, clusterid, srcendpoint, 0, &Z_PublishAttributes);
+ } else {
+ // Publish immediately
+ msg = "";
+ json_root.printTo(msg);
+ Response_P(PSTR("%s"), msg.c_str());
+ MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR));
+ XdrvRulesProcess();
+ }
return -1;
}
diff --git a/tasmota/xdrv_23_zigbee_9_impl.ino b/tasmota/xdrv_23_zigbee_9_impl.ino
index 461b3af32..b3681f00e 100644
--- a/tasmota/xdrv_23_zigbee_9_impl.ino
+++ b/tasmota/xdrv_23_zigbee_9_impl.ino
@@ -423,25 +423,6 @@ void zigbeeZCLSendStr(uint16_t dstAddr, uint8_t endpoint, const char *data) {
ResponseCmndDone();
}
-// Get an JSON attribute, with case insensitive key search
-JsonVariant &getCaseInsensitive(const JsonObject &json, const char *needle) {
- // key can be in PROGMEM
- if ((nullptr == &json) || (nullptr == needle) || (0 == pgm_read_byte(needle))) {
- return *(JsonVariant*)nullptr;
- }
-
- for (auto kv : json) {
- const char *key = kv.key;
- JsonVariant &value = kv.value;
-
- if (0 == strcasecmp_P(key, needle)) {
- return value;
- }
- }
- // if not found
- return *(JsonVariant*)nullptr;
-}
-
void CmndZigbeeSend(void) {
// ZigbeeSend { "device":"0x1234", "endpoint":"0x03", "send":{"Power":1} }
// ZigbeeSend { "device":"0x1234", "endpoint":"0x03", "send":{"Power":"3"} }
From 3fee364fd75286e1c0c95305ee76b71a7ef751d2 Mon Sep 17 00:00:00 2001
From: stefanbode
Date: Sun, 22 Dec 2019 19:59:56 +0100
Subject: [PATCH 136/559] Allow deepsleep to wait for second TELEPERIOD
intervall
Compatible with old values teleperiod10 or 300 to start deepsleep immediately asap.
All Other values (at least >15, because this is often min runtime) for teleperiod causes the device to wait for another teleperiod
eventually fix for #7295
---
tasmota/xdrv_29_deepsleep.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/xdrv_29_deepsleep.ino b/tasmota/xdrv_29_deepsleep.ino
index f0a8de685..69eed78f1 100644
--- a/tasmota/xdrv_29_deepsleep.ino
+++ b/tasmota/xdrv_29_deepsleep.ino
@@ -192,7 +192,7 @@ bool Xdrv29(uint8_t function)
DeepSleepEverySecond();
break;
case FUNC_AFTER_TELEPERIOD:
- if (DeepSleepEnabled() && !deepsleep_flag) {
+ if (DeepSleepEnabled() && !deepsleep_flag && (Settings.tele_period == 10 || Settings.tele_period == 300 || UpTime() > Settings.tele_period)) {
deepsleep_flag = DEEPSLEEP_START_COUNTDOWN; // Start deepsleep in 4 seconds
}
break;
From bf1c48c67e6b8c9162ff091791e6d4c69fee2dd6 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Mon, 23 Dec 2019 14:05:26 +0100
Subject: [PATCH 137/559] Update migration path
---
README.md | 4 +++-
RELEASENOTES.md | 9 ++++++---
tasmota/CHANGELOG.md | 4 ++--
3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index 43bf4604a..ea1d1c23c 100644
--- a/README.md
+++ b/README.md
@@ -67,7 +67,9 @@ See [wiki migration path](https://tasmota.github.io/docs/#/Upgrading?id=migratio
3. Migrate to **Sonoff-Tasmota 5.14**
4. Migrate to **Sonoff-Tasmota 6.x**
5. Migrate to **Tasmota 7.x**
-6. Migrate to **Tasmota 8.x**
+--- Major change in parameter storage layout ---
+6. Migrate to **Tasmota 8.1**
+7. Migrate to **Tasmota 8.x**
## Support Information
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 8ac156872..79f653d8e 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -11,7 +11,9 @@ See [migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-pat
3. Migrate to **Sonoff-Tasmota 5.14**
4. Migrate to **Sonoff-Tasmota 6.x**
5. Migrate to **Tasmota 7.x**
-6. Migrate to **Tasmota 8.x**
+--- Major change in parameter storage layout ---
+6. Migrate to **Tasmota 8.1**
+7. Migrate to **Tasmota 8.x**
## Supported Core versions
@@ -50,6 +52,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
-- Change max number of rule ``Mem``s from 5 to 16 (#4933)
-- Change max number of rule ``Var``s from 5 to 16 (#4933)
+- Change number of rule ``Var``s and ``Mem``s from 5 to 16 (#4933)
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
+- Add Zigbee coalesce sensor attributes into a single message
+- Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 084388717..09b12eb9a 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -4,10 +4,10 @@
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
-- Change max number of rule ``Mem``s from 5 to 16 (#4933)
-- Change max number of rule ``Var``s from 5 to 16 (#4933)
+- Change number of rule ``Var``s and ``Mem``s from 5 to 16 (#4933)
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
- Add Zigbee coalesce sensor attributes into a single message
+- Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300
## Released
From fb8bb1223aef674ca2f41a49189e2abbe5527200 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Mon, 23 Dec 2019 15:39:07 +0100
Subject: [PATCH 138/559] Add support for GPS as NTP server
Add support for GPS as NTP server by Christian Baars and Adrian Scillato
---
RELEASENOTES.md | 1 +
tasmota/CHANGELOG.md | 1 +
tasmota/support_features.ino | 4 +-
tasmota/tasmota_template.h | 15 +-
tasmota/xsns_60_GPS.ino | 384 ++++++++++++++++++-----------------
tools/decode-status.py | 5 +-
6 files changed, 216 insertions(+), 194 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 79f653d8e..237568fc5 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -54,5 +54,6 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
- Change number of rule ``Var``s and ``Mem``s from 5 to 16 (#4933)
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
+- Add support for GPS as NTP server by Christian Baars and Adrian Scillato
- Add Zigbee coalesce sensor attributes into a single message
- Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 09b12eb9a..33617755b 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -6,6 +6,7 @@
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
- Change number of rule ``Var``s and ``Mem``s from 5 to 16 (#4933)
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
+- Add support for GPS as NTP server by Christian Baars and Adrian Scillato
- Add Zigbee coalesce sensor attributes into a single message
- Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300
diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino
index 31428d03b..dcc24de0b 100644
--- a/tasmota/support_features.ino
+++ b/tasmota/support_features.ino
@@ -493,7 +493,9 @@ void GetFeatures(void)
feature5 |= 0x00100000;
#endif
// feature5 |= 0x00200000;
-// feature5 |= 0x00400000;
+#ifdef USE_GPS
+ feature5 |= 0x00400000;
+#endif
// feature5 |= 0x00800000;
// feature5 |= 0x01000000;
diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h
index 793c93626..3985884ef 100644
--- a/tasmota/tasmota_template.h
+++ b/tasmota/tasmota_template.h
@@ -295,7 +295,8 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_SM2135_CLK "|" D_SENSOR_SM2135_DAT "|"
D_SENSOR_DEEPSLEEP "|" D_SENSOR_EXS_ENABLE "|"
D_SENSOR_SLAVE_TX "|" D_SENSOR_SLAVE_RX "|" D_SENSOR_SLAVE_RESET "|" D_SENSOR_SLAVE_RESET "i|"
- D_SENSOR_HPMA_RX "|" D_SENSOR_HPMA_TX "|" D_SENSOR_GPS_RX "|" D_SENSOR_GPS_TX
+ D_SENSOR_HPMA_RX "|" D_SENSOR_HPMA_TX "|"
+ D_SENSOR_GPS_RX "|" D_SENSOR_GPS_TX
;
const char kSensorNamesFixed[] PROGMEM =
@@ -673,6 +674,7 @@ const uint8_t kGpioNiceList[] PROGMEM = {
#endif // USE_SOLAX_X1
#endif // USE_ENERGY_SENSOR
+// Serial
#ifdef USE_SERIAL_BRIDGE
GPIO_SBR_TX, // Serial Bridge Serial interface
GPIO_SBR_RX, // Serial Bridge Serial interface
@@ -727,6 +729,11 @@ const uint8_t kGpioNiceList[] PROGMEM = {
GPIO_IBEACON_RX,
GPIO_IBEACON_TX,
#endif
+#ifdef USE_GPS
+ GPIO_GPS_RX, // GPS serial interface
+ GPIO_GPS_TX, // GPS serial interface
+#endif
+
#ifdef USE_MGC3130
GPIO_MGC3130_XFER,
GPIO_MGC3130_RESET,
@@ -756,11 +763,7 @@ const uint8_t kGpioNiceList[] PROGMEM = {
GPIO_A4988_MS3, // A4988 microstep pin3
#endif
#ifdef USE_DEEPSLEEP
- GPIO_DEEPSLEEP
-#endif
-#ifdef USE_GPS
- GPIO_GPS_RX, // GPS serial interface
- GPIO_GPS_TX // GPS serial interface
+ GPIO_DEEPSLEEP,
#endif
};
diff --git a/tasmota/xsns_60_GPS.ino b/tasmota/xsns_60_GPS.ino
index db9343e2d..519caac20 100644
--- a/tasmota/xsns_60_GPS.ino
+++ b/tasmota/xsns_60_GPS.ino
@@ -1,5 +1,5 @@
/*
- xsns_60_GPS.ino - GPS UBLOX support for Sonoff-Tasmota
+ xsns_60_GPS.ino - GPS UBLOX support for Tasmota
Copyright (C) 2019 Theo Arends, Christian Baars and Adrian Scillato
@@ -15,7 +15,10 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see .
+*/
+#ifdef USE_GPS
+/*********************************************************************************************\
--------------------------------------------------------------------------------------------
Version Date Action Description
--------------------------------------------------------------------------------------------
@@ -25,86 +28,85 @@
0.9.0.0 20190817 started - further development by Christian Baars - https://github.com/Staars/Sonoff-Tasmota
forked - from arendst/tasmota - https://github.com/arendst/Sonoff-Tasmota
base - code base from arendst and - https://www.youtube.com/watch?v=TwhCX0c8Xe0
-
-## GPS-driver for the Ublox-series 6-8
+
+## GPS-driver for the Ublox-series 6-8
Driver is tested on a NEO-6m and a Beitian-220. Series 7 should work too. This adds only about 6kb to the program size, because the efficient UBX-protocol is used. These modules are quite cheap, starting at about 3.50€ for the NEO-6m.
-## Features:
+## Features:
- get position and time data
-- sets system time automatically and Settings.latitude and Settings.longitude via command
+- sets system time automatically and Settings.latitude and Settings.longitude via command
- can log postion data with timestamp to flash with a small memory footprint of only 12 Bytes per record
-- constructs a GPX-file for download of this data
-- Web-UI
+- constructs a GPX-file for download of this data
+- Web-UI
- simplified NTP-server
-- command interface
-
-## Usage:
-The serial pins are GPX_RX and GPS_TX, no further installation steps needed. To get more debug information compile it with option "DEBUG_TASMOTA_SENSOR".
+- command interface
-
-## Commands:
-
-+ sensor60 0
+## Usage:
+The serial pins are GPX_RX and GPS_TX, no further installation steps needed. To get more debug information compile it with option "DEBUG_TASMOTA_SENSOR".
+
+
+## Commands:
+
++ sensor60 0
write to all available sectors, then restart and overwrite the older ones
-
-+ sensor60 1
+
++ sensor60 1
write to all available sectors, then restart and overwrite the older ones
-
-+ sensor60 2
+
++ sensor60 2
filter out horizontal drift noise
-
-+ sensor60 3
+
++ sensor60 3
turn off noise filter
-
-+ sensor60 4
+
++ sensor60 4
start recording, new data will be appended
-
-+ sensor60 5
+
++ sensor60 5
start new recording, old data will lost
-
-+ sensor60 6
+
++ sensor60 6
stop recording, download link will be visible in Web-UI
-
-+ sensor60 7
+
++ sensor60 7
send mqtt on new postion + TELE -> consider to set TELE to a very high value
-
-+ sensor60 8
+
++ sensor60 8
only TELE message
-
-+ sensor60 9
+
++ sensor60 9
start NTP-server
-
-+ sensor60 10
+
++ sensor60 10
deactivate NTP-server
-
-+ sensor60 11
+
++ sensor60 11
force update of Tasmota-system-UTC with every new GPS-time-message
-
-+ sensor60 12
+
++ sensor60 12
do not update of Tasmota-system-UTC with every new GPS-time-message
-
-+ sensor60 13
- set latitude and longitude in settings
-
-
-
-## Rules examples for SSD1306 32x128
-
-
+
++ sensor60 13
+ set latitude and longitude in settings
+
+
+
+## Rules examples for SSD1306 32x128
+
+
rule1 on tele-GPS#lat do DisplayText [s1p21c1l01f1]LAT: %value% endon on tele-GPS#lon do DisplayText [s1p21c1l2]LON: %value% endon on switch1#state==3 do sensor60 4 endon on switch1#state==2 do sensor60 6 endon
rule2 on tele-GPS#int>9 do DisplayText [f0c9l4]I%value% endon on tele-GPS#int<10 do DisplayText [f0c9l4]I0%value% endon on tele-GPS#fil==1 do DisplayText [f0c18l4]F endon on tele-GPS#fil==0 do DisplayText [f0c18l4]N endon
rule3 on tele-FLOG#sec do DisplayText [f0c1l4]SAV:%value% endon on tele-FLOG#rec==1 do DisplayText [f0c1l4]REC: endon on tele-FLOG#mode do DisplayText [f0c14l4]M%value% endon
-*/
+\*********************************************************************************************/
-#ifdef USE_GPS
+#define XSNS_60 60
#include "NTPServer.h"
#include "NTPPacket.h"
-
/*********************************************************************************************\
* constants
\*********************************************************************************************/
@@ -117,7 +119,6 @@ const char kUBXTypes[] PROGMEM = "UBX";
#define UBX_LAT_LON_THRESHOLD 1000 // filter out some noise of local drift
-
/********************************************************************************************\
| *globals
\*********************************************************************************************/
@@ -152,13 +153,13 @@ const char UBLOX_INIT[] PROGMEM = {
char UBX_name[4];
-struct UBX_t{
+struct UBX_t {
const char UBX_HEADER[2] = { 0xB5, 0x62 }; // TODO: Check if we really save space here inside the struct
const char NAV_POSLLH_HEADER[2] = { 0x01, 0x02 };
const char NAV_STATUS_HEADER[2] = { 0x01, 0x03 };
const char NAV_TIME_HEADER[2] = { 0x01, 0x21 };
- struct entry_t{
+ struct entry_t {
int32_t lat; //raw sensor value
int32_t lon; //raw sensor value
uint32_t time; //local time from system (maybe provided by the sensor)
@@ -200,7 +201,7 @@ struct UBX_t{
uint32_t ttff;
uint32_t msss;
};
-
+
struct NAV_TIME_UTC {
uint8_t cls;
uint8_t id;
@@ -281,7 +282,9 @@ NtpServer timeServer(PortUdp);
/*********************************************************************************************\
* helper function
\*********************************************************************************************/
-void UBXcalcChecksum(char* CK, size_t msgSize) {
+
+void UBXcalcChecksum(char* CK, size_t msgSize)
+{
memset(CK, 0, 2);
for (int i = 0; i < msgSize; i++) {
CK[0] += ((char*)(&UBX.Message))[i];
@@ -289,19 +292,22 @@ void UBXcalcChecksum(char* CK, size_t msgSize) {
}
}
-boolean UBXcompareMsgHeader(const char* msgHeader) {
+bool UBXcompareMsgHeader(const char* msgHeader)
+{
char* ptr = (char*)(&UBX.Message);
return ptr[0] == msgHeader[0] && ptr[1] == msgHeader[1];
}
-void UBXinitCFG(void){
- for(uint32_t i = 0; i < sizeof(UBLOX_INIT); i++) {
+void UBXinitCFG(void)
+{
+ for (uint32_t i = 0; i < sizeof(UBLOX_INIT); i++) {
UBXSerial->write( pgm_read_byte(UBLOX_INIT+i) );
}
DEBUG_SENSOR_LOG(PSTR("UBX: turn off NMEA"));
}
-void UBXTriggerTele(void){
+void UBXTriggerTele(void)
+{
mqtt_data[0] = '\0';
if (MqttShowSensor()) {
MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain);
@@ -313,23 +319,22 @@ void UBXTriggerTele(void){
/********************************************************************************************/
-
void UBXDetect(void)
{
if ((pin[GPIO_GPS_RX] < 99) && (pin[GPIO_GPS_TX] < 99)) {
UBXSerial = new TasmotaSerial(pin[GPIO_GPS_RX], pin[GPIO_GPS_TX], 1, 0, 96); // 64 byte buffer is NOT enough
if (UBXSerial->begin(9600)) {
DEBUG_SENSOR_LOG(PSTR("UBX: started serial"));
- if (UBXSerial->hardwareSerial()) {
- ClaimSerial();
+ if (UBXSerial->hardwareSerial()) {
+ ClaimSerial();
DEBUG_SENSOR_LOG(PSTR("UBX: claim HW"));
- }
+ }
}
}
UBXinitCFG(); // turn of NMEA, only use "our" UBX-messages
#ifdef USE_FLOG
- if(!Flog){
+ if (!Flog) {
Flog = new FLOG; // init Flash Log
Flog->init();
}
@@ -340,7 +345,8 @@ void UBXDetect(void)
UBXTriggerTele(); // ... once at after start
}
-uint32_t UBXprocessGPS() {
+uint32_t UBXprocessGPS()
+{
static uint32_t fpos = 0;
static char checksum[2];
static uint8_t currentMsgType = MT_NONE;
@@ -350,27 +356,27 @@ uint32_t UBXprocessGPS() {
uint32_t data_bytes = 0;
while ( UBXSerial->available() ) {
data_bytes++;
- byte c = UBXSerial->read();
+ byte c = UBXSerial->read();
if ( fpos < 2 ) {
// For the first two bytes we are simply looking for a match with the UBX header bytes (0xB5,0x62)
- if ( c == UBX.UBX_HEADER[fpos] )
+ if ( c == UBX.UBX_HEADER[fpos] ) {
fpos++;
- else
+ } else {
fpos = 0; // Reset to beginning state.
- }
- else {
+ }
+ } else {
// If we come here then fpos >= 2, which means we have found a match with the UBX_HEADER
// and we are now reading in the bytes that make up the payload.
-
+
// Place the incoming byte into the ubxMessage struct. The position is fpos-2 because
// the struct does not include the initial two-byte header (UBX_HEADER).
- if ( (fpos-2) < payloadSize )
+ if ( (fpos-2) < payloadSize ) {
((char*)(&UBX.Message))[fpos-2] = c;
-
+ }
fpos++;
-
+
if ( fpos == 4 ) {
- // We have just received the second byte of the message type header,
+ // We have just received the second byte of the message type header,
// so now we can check to see what kind of message it is.
if ( UBXcompareMsgHeader(UBX.NAV_POSLLH_HEADER) ) {
currentMsgType = MT_NAV_POSLLH;
@@ -395,7 +401,7 @@ uint32_t UBXprocessGPS() {
}
if ( fpos == (payloadSize+2) ) {
- // All payload bytes have now been received, so we can calculate the
+ // All payload bytes have now been received, so we can calculate the
// expected checksum value to compare with the next two incoming bytes.
UBXcalcChecksum(checksum, payloadSize);
}
@@ -404,7 +410,7 @@ uint32_t UBXprocessGPS() {
// Does it match the first byte of the checksum we calculated?
if ( c != checksum[0] ) {
// Checksum doesn't match, reset to beginning state and try again.
- fpos = 0;
+ fpos = 0;
}
}
else if ( fpos == (payloadSize+4) ) {
@@ -417,18 +423,18 @@ uint32_t UBXprocessGPS() {
}
}
else if ( fpos > (payloadSize+4) ) {
- // We have now read more bytes than both the expected payload and checksum
+ // We have now read more bytes than both the expected payload and checksum
// together, so something went wrong. Reset to beginning state and try again.
fpos = 0;
}
}
}
// DEBUG_SENSOR_LOG(PSTR("UBX: got none or unknown Message"));
- if(data_bytes!=0) {
- UBX.state.non_empty_loops++;
- DEBUG_SENSOR_LOG(PSTR("UBX: got %u bytes, non-empty-loop: %u"), data_bytes, UBX.state.non_empty_loops);
+ if (data_bytes!=0) {
+ UBX.state.non_empty_loops++;
+ DEBUG_SENSOR_LOG(PSTR("UBX: got %u bytes, non-empty-loop: %u"), data_bytes, UBX.state.non_empty_loops);
} else {
- UBX.state.non_empty_loops = 0; // now a hidden GPS-device reset is unlikely
+ UBX.state.non_empty_loops = 0; // now a hidden GPS-device reset is unlikely
}
return MT_NONE;
}
@@ -436,19 +442,22 @@ uint32_t UBXprocessGPS() {
/********************************************************************************************\
| * callback functions for the download
\*********************************************************************************************/
+
#ifdef USE_FLOG
-void UBXsendHeader(void) {
+void UBXsendHeader(void)
+{
WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN);
WebServer->sendHeader(F("Content-Disposition"), F("attachment; filename=TASMOTA.gpx"));
WSSend(200, CT_STREAM, F(
- "\r\n"
+ "\r\n"
"\r\n"
"\r\n\r\n"));
}
-void UBXsendRecord(uint8_t *buf){
+void UBXsendRecord(uint8_t *buf)
+{
char record[100];
char stime[32];
UBX_t::entry_t *entry = (UBX_t::entry_t*)buf;
@@ -462,27 +471,32 @@ void UBXsendRecord(uint8_t *buf){
WebServer->sendContent_P(record);
}
-void UBXsendFooter(void){
+void UBXsendFooter(void)
+{
WebServer->sendContent(F("\n\n"));
WebServer->sendContent("");
Rtc.user_time_entry = false; // we have blocked the main loop and want a new valid time
}
/********************************************************************************************/
-void UBXsendFile(void){
+
+void UBXsendFile(void)
+{
if (!HttpCheckPriviledgedAccess()) { return; }
Flog->startDownload(sizeof(UBX.rec_buffer),UBXsendHeader,UBXsendRecord,UBXsendFooter);
}
#endif //USE_FLOG
+
/********************************************************************************************/
-void UBXSetRate(uint16_t interval){
+void UBXSetRate(uint16_t interval)
+{
UBX.Message.cfgRate.cls = 0x06;
UBX.Message.cfgRate.id = 0x08;
UBX.Message.cfgRate.len = 6;
uint32_t measRate = (1000*(uint32_t)interval); //seconds to milliseconds
if (measRate > 0xffff) {
- measRate = 0xffff; // max. 65535 ms interval
+ measRate = 0xffff; // max. 65535 ms interval
}
UBX.Message.cfgRate.measRate = (uint16_t)measRate;
UBX.Message.cfgRate.navRate = 1;
@@ -491,15 +505,15 @@ void UBXSetRate(uint16_t interval){
DEBUG_SENSOR_LOG(PSTR("UBX: requested interval: %u seconds measRate: %u ms"), interval, UBX.Message.cfgRate.measRate);
UBXSerial->write(UBX.UBX_HEADER[0]);
UBXSerial->write(UBX.UBX_HEADER[1]);
- for(uint32_t i =0; iwrite(((uint8_t*)(&UBX.Message.cfgRate))[i]);
DEBUG_SENSOR_LOG(PSTR("UBX: cfgRate byte %u: %x"), i, ((uint8_t*)(&UBX.Message.cfgRate))[i]);
}
- UBX.state.log_interval = 10*interval;
+ UBX.state.log_interval = 10*interval;
}
-
-void UBXSelectMode(uint16_t mode){
+void UBXSelectMode(uint16_t mode)
+{
DEBUG_SENSOR_LOG(PSTR("UBX: set mode to %u"),mode);
switch(mode){
#ifdef USE_FLOG
@@ -513,7 +527,7 @@ void UBXSelectMode(uint16_t mode){
UBX.mode.filter_noise = true; // filter out horizontal drift noise, TODO: find useful values
break;
case 3:
- UBX.mode.filter_noise = false;
+ UBX.mode.filter_noise = false;
break;
case 4:
Flog->startRecording(true);
@@ -529,7 +543,7 @@ void UBXSelectMode(uint16_t mode){
}
AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: stop recording"));
break;
-#endif //USE_FLOG
+#endif //USE_FLOG
case 7:
UBX.mode.send_when_new = 1; // send mqtt on new postion + TELE -> consider to set TELE to a very high value
break;
@@ -537,7 +551,7 @@ void UBXSelectMode(uint16_t mode){
UBX.mode.send_when_new = 0; // only TELE
break;
case 9:
- if (timeServer.beginListening()){
+ if (timeServer.beginListening()) {
UBX.mode.runningNTP = true;
}
break;
@@ -555,77 +569,80 @@ void UBXSelectMode(uint16_t mode){
Settings.longitude = UBX.state.last_lon;
break;
default:
- if(mode>1000 && mode <1066) {
+ if (mode>1000 && mode <1066) {
// UBXSetRate(mode-1000); // min. 1001 = 0.001 Hz, but will be converted to 1/65535 anyway ~0.015 Hz, max. 2000 = 1.000 Hz
- UBXSetRate(mode-1000); // set interval between measurements in seconds from 1 to 65
+ UBXSetRate(mode-1000); // set interval between measurements in seconds from 1 to 65
}
break;
}
UBX.mode.send_UI_only = true;
UBXTriggerTele();
}
+
/********************************************************************************************/
-bool UBXHandlePOSLLH(){
- DEBUG_SENSOR_LOG(PSTR("UBX: iTOW: %u"),UBX.Message.navPosllh.iTOW);
- if(UBX.state.gpsFix>1){
- if(UBX.mode.filter_noise){
- if((UBX.Message.navPosllh.lat-UBX.rec_buffer.values.lat1) {
+ if (UBX.mode.filter_noise) {
+ if ((UBX.Message.navPosllh.lat-UBX.rec_buffer.values.lat6){ // we expect only 4-5 non-empty loops in a row, could change with other sensor speed (Hz)
- UBXinitCFG(); // this should only happen with lots of NMEA-messages, but it is only a guess!!
+ if (UBX.state.non_empty_loops>6) { // we expect only 4-5 non-empty loops in a row, could change with other sensor speed (Hz)
+ UBXinitCFG(); // this should only happen with lots of NMEA-messages, but it is only a guess!!
AddLog_P(LOG_LEVEL_ERROR, PSTR("UBX: possible device-reset, will re-init"));
UBXSerial->flush();
UBX.state.non_empty_loops = 0;
@@ -645,7 +662,7 @@ void UBXLoop(void)
{
static uint16_t counter; //count up every 100 msec
static bool new_position;
-
+
uint32_t msgType = UBXprocessGPS();
switch(msgType){
@@ -664,8 +681,8 @@ void UBXLoop(void)
}
#ifdef USE_FLOG
- if(counter>UBX.state.log_interval){
- if(Flog->recording && new_position){
+ if (counter>UBX.state.log_interval) {
+ if (Flog->recording && new_position) {
UBX.rec_buffer.values.time = Rtc.local_time;
Flog->addToBuffer(UBX.rec_buffer.bytes, sizeof(UBX.rec_buffer.bytes));
counter = 0;
@@ -673,7 +690,7 @@ void UBXLoop(void)
}
#endif // USE_FLOG
-counter++;
+ counter++;
}
/********************************************************************************************/
@@ -716,7 +733,7 @@ counter++;
const char * kGPSFix[] PROGMEM ={kGPSFix0, kGPSFix1, kGPSFix2, kGPSFix3, kGPSFix4, kGPSFix5};
// const char UBX_GOOGLE_MAPS[] ="";
-
+
#endif // USE_WEBSERVER
@@ -724,23 +741,22 @@ counter++;
void UBXShow(bool json)
{
- char lat[12];
- char lon[12];
- char height[12];
- char hAcc[12];
- char vAcc[12];
- dtostrfd((double)UBX.rec_buffer.values.lat/10000000.0f,7,lat);
- dtostrfd((double)UBX.rec_buffer.values.lon/10000000.0f,7,lon);
- dtostrfd((double)UBX.state.last_height/1000.0f,3,height);
- dtostrfd((double)UBX.state.last_vAcc/1000.0f,3,hAcc);
- dtostrfd((double)UBX.state.last_hAcc/1000.0f,3,vAcc);
+ char lat[12];
+ char lon[12];
+ char height[12];
+ char hAcc[12];
+ char vAcc[12];
+ dtostrfd((double)UBX.rec_buffer.values.lat/10000000.0f,7,lat);
+ dtostrfd((double)UBX.rec_buffer.values.lon/10000000.0f,7,lon);
+ dtostrfd((double)UBX.state.last_height/1000.0f,3,height);
+ dtostrfd((double)UBX.state.last_vAcc/1000.0f,3,hAcc);
+ dtostrfd((double)UBX.state.last_hAcc/1000.0f,3,vAcc);
- if (json)
- {
+ if (json) {
ResponseAppend_P(PSTR(",\"GPS\":{"));
- if(UBX.mode.send_UI_only){
+ if (UBX.mode.send_UI_only) {
uint32_t i = UBX.state.log_interval / 10;
- ResponseAppend_P(PSTR("\"fil\":%u,\"int\":%u}"),UBX.mode.filter_noise, i);
+ ResponseAppend_P(PSTR("\"fil\":%u,\"int\":%u}"), UBX.mode.filter_noise, i);
} else {
ResponseAppend_P(PSTR("\"lat\":%s,\"lon\":%s,\"height\":%s,\"hAcc\":%s,\"vAcc\":%s}"), lat, lon, height, hAcc, vAcc);
}
@@ -755,37 +771,37 @@ void UBXShow(bool json)
#ifdef DEBUG_TASMOTA_SENSOR
#ifdef USE_FLOG
WSContentSend_PD(HTTP_SNS_FLOGVER, Flog->num_sectors, Flog->size, Flog->current_sector, Flog->sectors_left, Flog->sector.header.physical_start_sector);
- if(Flog->recording){
+ if (Flog->recording) {
WSContentSend_PD(HTTP_SNS_FLOGREC, Flog->sector.header.buf_pointer - 8);
}
#endif //USE_FLOG
#endif // DEBUG_TASMOTA_SENSOR
#ifdef USE_FLOG
- if(Flog->ready){
+ if (Flog->ready) {
WSContentSend_P(HTTP_SNS_FLOG,kFLOG_STATE[Flog->recording]);
}
- if(!Flog->recording && Flog->found_saved_data){
+ if (!Flog->recording && Flog->found_saved_data) {
WSContentSend_P(HTTP_BTN_FLOG_DL);
}
#endif //USE_FLOG
- if(UBX.mode.runningNTP){
+ if (UBX.mode.runningNTP) {
WSContentSend_P(HTTP_SNS_NTPSERVER);
}
#endif // USE_WEBSERVER
}
}
-
/*********************************************************************************************\
* check the UBX commands
\*********************************************************************************************/
-bool UBXCmd(void) {
+bool UBXCmd(void)
+{
bool serviced = true;
- if (XdrvMailbox.data_len > 0) {
- UBXSelectMode(XdrvMailbox.payload);
- Response_P(S_JSON_UBX_COMMAND_NVALUE, XdrvMailbox.command, XdrvMailbox.payload);
- }
+ if (XdrvMailbox.data_len > 0) {
+ UBXSelectMode(XdrvMailbox.payload);
+ Response_P(S_JSON_UBX_COMMAND_NVALUE, XdrvMailbox.command, XdrvMailbox.payload);
+ }
return serviced;
}
@@ -793,28 +809,26 @@ bool UBXCmd(void) {
* Interface
\*********************************************************************************************/
-#define XSNS_60 60
-
bool Xsns60(uint8_t function)
{
bool result = false;
- if (true) {
+ if (true) {
switch (function) {
case FUNC_INIT:
UBXDetect();
break;
case FUNC_COMMAND_SENSOR:
- if (XSNS_60 == XdrvMailbox.index){
+ if (XSNS_60 == XdrvMailbox.index) {
result = UBXCmd();
- }
+ }
break;
case FUNC_EVERY_50_MSECOND:
UBXTimeServer();
break;
case FUNC_EVERY_100_MSECOND:
#ifdef USE_FLOG
- if(!Flog->running_download)
+ if (!Flog->running_download)
#endif //USE_FLOG
{
UBXLoop();
@@ -831,7 +845,7 @@ bool Xsns60(uint8_t function)
#ifdef USE_WEBSERVER
case FUNC_WEB_SENSOR:
#ifdef USE_FLOG
- if(!Flog->running_download)
+ if (!Flog->running_download)
#endif //USE_FLOG
{
UBXShow(0);
diff --git a/tools/decode-status.py b/tools/decode-status.py
index e6751ae92..492c300fa 100755
--- a/tools/decode-status.py
+++ b/tools/decode-status.py
@@ -131,7 +131,8 @@ a_setoption = [[
"GroupTopic replaces %topic% (0) or fixed topic cmnd/grouptopic (1)",
"Enable incrementing bootcount when deepsleep is enabled",
"Do not power off if slider moved to far left",
- "","",
+ "Bypass Compatibility check",
+ "",
"Enable shutter support",
"Invert PCF8574 ports"
],[
@@ -187,7 +188,7 @@ a_features = [[
"USE_SHUTTER","USE_PCF8574","USE_DDSU666","USE_DEEPSLEEP",
"USE_SONOFF_SC","USE_SONOFF_RF","USE_SONOFF_L1","USE_EXS_DIMMER",
"USE_ARDUINO_SLAVE","USE_HIH6","USE_HPMA","USE_TSL2591",
- "USE_DHT12","","","",
+ "USE_DHT12","","USE_GPS","",
"","","","",
"","","",""
]]
From fd0155a5b1153cbb45f4579f0822a30927cf5f9f Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Mon, 23 Dec 2019 15:53:43 +0100
Subject: [PATCH 139/559] Update supported sensor list
---
BUILDS.md | 3 +++
tasmota/tasmota_post.h | 4 ++++
2 files changed, 7 insertions(+)
diff --git a/BUILDS.md b/BUILDS.md
index 3b311a6eb..5c897746a 100644
--- a/BUILDS.md
+++ b/BUILDS.md
@@ -119,6 +119,9 @@
| USE_MP3_PLAYER | - | - | - | - | x | - | - |
| USE_AZ7798 | - | - | - | - | - | - | - |
| USE_PN532_HSU | - | - | - | - | x | - | - |
+| USE_RDM6300 | - | - | - | - | x | - | - |
+| USE_IBEACON | - | - | - | - | x | - | - |
+| USE_GPS | - | - | - | - | - | - | - |
| USE_ZIGBEE | - | - | - | - | - | - | - |
| | | | | | | | |
| USE_IR_REMOTE | - | - | x | x | x | x | x |
diff --git a/tasmota/tasmota_post.h b/tasmota/tasmota_post.h
index c54adfe82..c9f8396fe 100644
--- a/tasmota/tasmota_post.h
+++ b/tasmota/tasmota_post.h
@@ -180,6 +180,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
#define USE_PN532_HSU // Add support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem)
#define USE_RDM6300 // Add support for RDM6300 125kHz RFID Reader (+0k8)
#define USE_IBEACON // Add support for bluetooth LE passive scan of ibeacon devices (uses HM17 module)
+//#define USE_GPS // Add support for GPS and NTP Server for becoming Stratus 1 Time Source (+ 3.1kb flash, +132 bytes RAM)
#define USE_ENERGY_SENSOR // Add energy sensors (-14k code)
#define USE_PZEM004T // Add support for PZEM004T Energy monitor (+2k code)
@@ -374,6 +375,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
#undef USE_PN532_HSU // Disable support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem)
#undef USE_RDM6300 // Disable support for RDM6300 125kHz RFID Reader (+0k8)
#undef USE_IBEACON // Disable support for bluetooth LE passive scan of ibeacon devices (uses HM17 module)
+#undef USE_GPS // Disable support for GPS and NTP Server for becoming Stratus 1 Time Source (+ 3.1kb flash, +132 bytes RAM)
//#define USE_DHT // Add 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
@@ -462,6 +464,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
#undef USE_PN532_HSU // Disable support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem)
#undef USE_RDM6300 // Disable support for RDM6300 125kHz RFID Reader (+0k8)
#undef USE_IBEACON // Disable support for bluetooth LE passive scan of ibeacon devices (uses HM17 module)
+#undef USE_GPS // Disable support for GPS and NTP Server for becoming Stratus 1 Time Source (+ 3.1kb flash, +132 bytes RAM)
//#undef USE_ENERGY_SENSOR // Disable energy sensors
#undef USE_PZEM004T // Disable PZEM004T energy sensor
@@ -571,6 +574,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
#undef USE_PN532_HSU // Disable support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem)
#undef USE_RDM6300 // Disable support for RDM6300 125kHz RFID Reader (+0k8)
#undef USE_IBEACON // Disable support for bluetooth LE passive scan of ibeacon devices (uses HM17 module)
+#undef USE_GPS // Disable support for GPS and NTP Server for becoming Stratus 1 Time Source (+ 3.1kb flash, +132 bytes RAM)
#undef USE_ENERGY_SENSOR // Disable energy sensors
#undef USE_PZEM004T // Disable PZEM004T energy sensor
From a10b1998085d340acc7fcc890bf1d197a9186702 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Mon, 23 Dec 2019 15:59:00 +0100
Subject: [PATCH 140/559] Version bump to 8.0.0.2
---
RELEASENOTES.md | 2 +-
tasmota/CHANGELOG.md | 4 ++++
tasmota/tasmota_version.h | 2 +-
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 237568fc5..6033aa5df 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -48,7 +48,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
## Changelog
-### Version 8.0.0.1
+### Version 8.0.0.2
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 33617755b..73e035ff2 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -1,5 +1,9 @@
## Unreleased (development)
+### 8.0.0.2 20191223
+
+- Changed Settings variable namings
+
### 8.0.0.1 20191221
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h
index be2cfafe2..e69d4fd39 100644
--- a/tasmota/tasmota_version.h
+++ b/tasmota/tasmota_version.h
@@ -20,7 +20,7 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x08000001;
+const uint32_t VERSION = 0x08000002;
// Lowest compatible version
const uint32_t VERSION_COMPATIBLE = 0x07010006;
From 749960533f45056061e195c175b70eb7a9cd5d15 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Mon, 23 Dec 2019 16:53:54 +0100
Subject: [PATCH 141/559] Add Zigbee better support for Xiaomi Double Switch
and Xiaomi Vibration sensor
---
tasmota/CHANGELOG.md | 1 +
tasmota/i18n.h | 1 +
tasmota/xdrv_23_zigbee_3_devices.ino | 95 ++++++++++++++++++-----
tasmota/xdrv_23_zigbee_5_converters.ino | 74 +++++++++++-------
tasmota/xdrv_23_zigbee_7_statemachine.ino | 1 +
tasmota/xdrv_23_zigbee_8_parsers.ino | 42 +++++++---
tasmota/xdrv_23_zigbee_9_impl.ino | 25 +++++-
7 files changed, 182 insertions(+), 57 deletions(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 73e035ff2..cb2bfe0c5 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -3,6 +3,7 @@
### 8.0.0.2 20191223
- Changed Settings variable namings
+- Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor
### 8.0.0.1 20191221
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index 1844dd44b..68a19f75e 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -468,6 +468,7 @@
#define D_CMND_ZIGBEE_STATUS "ZigbeeStatus"
#define D_CMND_ZIGBEE_RESET "ZigbeeReset"
#define D_JSON_ZIGBEE_CC2530 "CC2530"
+#define D_CMND_ZIGBEEZNPRECEIVE "ZigbeeZNPReceive" // only for debug
#define D_CMND_ZIGBEEZNPSEND "ZigbeeZNPSend"
#define D_JSON_ZIGBEE_STATE "ZigbeeState"
#define D_JSON_ZIGBEEZNPRECEIVED "ZigbeeZNPReceived"
diff --git a/tasmota/xdrv_23_zigbee_3_devices.ino b/tasmota/xdrv_23_zigbee_3_devices.ino
index c42f4b603..1ec18d3e1 100644
--- a/tasmota/xdrv_23_zigbee_3_devices.ino
+++ b/tasmota/xdrv_23_zigbee_3_devices.ino
@@ -91,6 +91,8 @@ public:
void jsonClear(uint16_t shortaddr);
void jsonAppend(uint16_t shortaddr, JsonObject &values);
const JsonObject *jsonGet(uint16_t shortaddr);
+ const void jsonPublish(uint16_t shortaddr); // publish the json message and clear buffer
+ bool jsonIsConflict(uint16_t shortaddr, const JsonObject &values);
private:
std::vector _devices = {};
@@ -419,6 +421,67 @@ void Z_Devices::jsonClear(uint16_t shortaddr) {
device.json_buffer->clear();
}
+void CopyJsonVariant(JsonObject &to, const String &key, const JsonVariant &val) {
+ to.remove(key); // force remove to have metadata like LinkQuality at the end
+
+ if (val.is()) {
+ String sval = val.as(); // force a copy of the String value
+ to.set(key, sval);
+ } else if (val.is()) {
+ JsonArray &nested_arr = to.createNestedArray(key);
+ CopyJsonArray(nested_arr, val.as());
+ } else if (val.is()) {
+ JsonObject &nested_obj = to.createNestedObject(key);
+ CopyJsonObject(nested_obj, val.as());
+ } else {
+ to.set(key, val);
+ }
+}
+
+void CopyJsonArray(JsonArray &to, const JsonArray &arr) {
+ for (auto v : arr) {
+ if (v.is()) {
+ String sval = v.as(); // force a copy of the String value
+ to.add(sval);
+ } else if (v.is()) {
+ } else if (v.is()) {
+ } else {
+ to.add(v);
+ }
+ }
+}
+
+void CopyJsonObject(JsonObject &to, const JsonObject &from) {
+ for (auto kv : from) {
+ String key_string = kv.key;
+ JsonVariant &val = kv.value;
+
+ CopyJsonVariant(to, key_string, val);
+ }
+}
+
+// does the new payload conflicts with the existing payload, i.e. values would be overwritten
+bool Z_Devices::jsonIsConflict(uint16_t shortaddr, const JsonObject &values) {
+ Z_Device & device = getShortAddr(shortaddr);
+ if (&device == nullptr) { return false; } // don't crash if not found
+ if (&values == nullptr) { return false; }
+
+ if (nullptr == device.json) {
+ return false; // if no previous value, no conflict
+ }
+
+ for (auto kv : values) {
+ String key_string = kv.key;
+
+ if (strcasecmp_P(kv.key, PSTR(D_CMND_ZIGBEE_LINKQUALITY))) { // exception = ignore duplicates for LinkQuality
+ if (device.json->containsKey(kv.key)) {
+ return true; // conflict!
+ }
+ }
+ }
+ return false;
+}
+
void Z_Devices::jsonAppend(uint16_t shortaddr, JsonObject &values) {
Z_Device & device = getShortAddr(shortaddr);
if (&device == nullptr) { return; } // don't crash if not found
@@ -428,24 +491,7 @@ void Z_Devices::jsonAppend(uint16_t shortaddr, JsonObject &values) {
device.json = &(device.json_buffer->createObject());
}
// copy all values from 'values' to 'json'
- for (auto kv : values) {
- String key_string = kv.key;
- const char * key = key_string.c_str();
- JsonVariant &val = kv.value;
-
- device.json->remove(key_string); // force remove to have metadata like LinkQuality at the end
-
- if (val.is()) {
- String sval = val.as(); // force a copy of the String value
- device.json->set(key_string, sval);
- } else if (val.is()) {
- // todo
- } else if (val.is()) {
- // todo
- } else {
- device.json->set(key_string, kv.value);
- }
- }
+ CopyJsonObject(*device.json, values);
}
const JsonObject *Z_Devices::jsonGet(uint16_t shortaddr) {
@@ -454,6 +500,19 @@ const JsonObject *Z_Devices::jsonGet(uint16_t shortaddr) {
return device.json;
}
+const void Z_Devices::jsonPublish(uint16_t shortaddr) {
+ const JsonObject *json = zigbee_devices.jsonGet(shortaddr);
+ if (json == nullptr) { return; } // don't crash if not found
+
+ String msg = "";
+ json->printTo(msg);
+ zigbee_devices.jsonClear(shortaddr);
+ Response_P(PSTR("{\"" D_CMND_ZIGBEE_RECEIVED "\":{\"0x%04X\":%s}}"), shortaddr, msg.c_str());
+ MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR));
+ XdrvRulesProcess();
+}
+
+
// Dump the internal memory of Zigbee devices
// Mode = 1: simple dump of devices addresses and names
// Mode = 2: Mode 1 + also dump the endpoints, profiles and clusters
diff --git a/tasmota/xdrv_23_zigbee_5_converters.ino b/tasmota/xdrv_23_zigbee_5_converters.ino
index 49d63808e..1423c53f1 100644
--- a/tasmota/xdrv_23_zigbee_5_converters.ino
+++ b/tasmota/xdrv_23_zigbee_5_converters.ino
@@ -100,6 +100,7 @@ public:
return _frame_control.b.frame_type & 1;
}
+ static void generateAttributeName(const JsonObject& json, uint16_t cluster, uint16_t attr, char *key, size_t key_len);
void parseRawAttributes(JsonObject& json, uint8_t offset = 0);
void parseReadAttributes(JsonObject& json, uint8_t offset = 0);
void parseClusterSpecificCommand(JsonObject& json, uint8_t offset = 0);
@@ -290,17 +291,20 @@ uint32_t parseSingleAttribute(JsonObject& json, char *attrid_str, class SBuffer
bool parse_as_string = true;
uint32_t len = (attrtype <= 0x42) ? buf.get8(i) : buf.get16(i); // len is 8 or 16 bits
i += (attrtype <= 0x42) ? 1 : 2; // increment pointer
+ if (i + len > buf.len()) { // make sure we don't get past the buffer
+ len = buf.len() - i;
+ }
// check if we can safely use a string
if ((0x41 == attrtype) || (0x43 == attrtype)) { parse_as_string = false; }
- else {
- for (uint32_t j = 0; j < len; j++) {
- if (0x00 == buf.get8(i+j)) {
- parse_as_string = false;
- break;
- }
- }
- }
+ // else {
+ // for (uint32_t j = 0; j < len; j++) {
+ // if (0x00 == buf.get8(i+j)) {
+ // parse_as_string = false;
+ // break;
+ // }
+ // }
+ // }
if (parse_as_string) {
char str[len+1];
@@ -409,19 +413,28 @@ uint32_t parseSingleAttribute(JsonObject& json, char *attrid_str, class SBuffer
return i - offset; // how much have we increased the index
}
+// Generate an attribute name based on cluster number, attribute, and suffix if duplicates
+void ZCLFrame::generateAttributeName(const JsonObject& json, uint16_t cluster, uint16_t attr, char *key, size_t key_len) {
+ uint32_t suffix = 1;
+
+ snprintf_P(key, key_len, PSTR("%04X/%04X"), cluster, attr);
+ while (json.containsKey(key)) {
+ suffix++;
+ snprintf_P(key, key_len, PSTR("%04X/%04X+%d"), cluster, attr, suffix); // add "0008/0001+2" suffix if duplicate
+ }
+}
// First pass, parse all attributes in their native format
void ZCLFrame::parseRawAttributes(JsonObject& json, uint8_t offset) {
uint32_t i = offset;
uint32_t len = _payload.len();
- while (len - i >= 3) {
+ while (len >= i + 3) {
uint16_t attrid = _payload.get16(i);
i += 2;
char key[16];
- snprintf_P(key, sizeof(key), PSTR("%04X/%04X"),
- _cluster_id, attrid);
+ generateAttributeName(json, _cluster_id, attrid, key, sizeof(key));
// exception for Xiaomi lumi.weather - specific field to be treated as octet and not char
if ((0x0000 == _cluster_id) && (0xFF01 == attrid)) {
@@ -445,8 +458,7 @@ void ZCLFrame::parseReadAttributes(JsonObject& json, uint8_t offset) {
if (0 == status) {
char key[16];
- snprintf_P(key, sizeof(key), PSTR("%04X/%04X"),
- _cluster_id, attrid);
+ generateAttributeName(json, _cluster_id, attrid, key, sizeof(key));
i += parseSingleAttribute(json, key, _payload, i, len);
}
@@ -472,7 +484,7 @@ void ZCLFrame::parseClusterSpecificCommand(JsonObject& json, uint8_t offset) {
// return value:
// 0 = keep initial value
// 1 = remove initial value
-typedef int32_t (*Z_AttrConverter)(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper* new_name, uint16_t cluster, uint16_t attr);
+typedef int32_t (*Z_AttrConverter)(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr);
typedef struct Z_AttributeConverter {
uint16_t cluster;
uint16_t attribute;
@@ -775,13 +787,13 @@ const Z_AttributeConverter Z_PostProcess[] PROGMEM = {
// ======================================================================
// Record Manuf
-int32_t Z_ManufKeep(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
+int32_t Z_ManufKeep(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
json[new_name] = value;
zigbee_devices.setManufId(shortaddr, value.as());
return 1;
}
//
-int32_t Z_ModelKeep(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
+int32_t Z_ModelKeep(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
json[new_name] = value;
zigbee_devices.setModelId(shortaddr, value.as());
return 1;
@@ -789,29 +801,29 @@ int32_t Z_ModelKeep(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& j
// ======================================================================
// Remove attribute
-int32_t Z_Remove(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
+int32_t Z_Remove(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
return 1; // remove original key
}
// Copy value as-is
-int32_t Z_Copy(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
+int32_t Z_Copy(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
json[new_name] = value;
return 1; // remove original key
}
// Add pressure unit
-int32_t Z_AddPressureUnit(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
+int32_t Z_AddPressureUnit(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
json[new_name] = F(D_UNIT_PRESSURE);
return 0; // keep original key
}
// Convert int to float and divide by 100
-int32_t Z_FloatDiv100(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
+int32_t Z_FloatDiv100(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
json[new_name] = ((float)value) / 100.0f;
return 1; // remove original key
}
// Convert int to float and divide by 10
-int32_t Z_FloatDiv10(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
+int32_t Z_FloatDiv10(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
json[new_name] = ((float)value) / 10.0f;
return 1; // remove original key
}
@@ -825,7 +837,7 @@ int32_t Z_OccupancyCallback(uint16_t shortaddr, uint16_t cluster, uint16_t endpo
}
// Aqara Vibration Sensor - special proprietary attributes
-int32_t Z_AqaraVibration(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
+int32_t Z_AqaraVibration(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
//json[new_name] = value;
switch (attr) {
case 0x0055:
@@ -879,7 +891,7 @@ int32_t Z_AqaraVibration(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObje
return 1; // remove original key
}
-int32_t Z_AqaraSensor(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const __FlashStringHelper *new_name, uint16_t cluster, uint16_t attr) {
+int32_t Z_AqaraSensor(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
String hex = value;
SBuffer buf2 = SBuffer::SBufferFromHex(hex.c_str(), hex.length());
uint32_t i = 0;
@@ -925,11 +937,19 @@ void ZCLFrame::postProcessAttributes(uint16_t shortaddr, JsonObject& json) {
String key_string = kv.key;
const char * key = key_string.c_str();
JsonVariant& value = kv.value;
- // Check that format looks like "CCCC/AAAA"
+ // Check that format looks like "CCCC/AAAA" or "CCCC/AAAA+d"
char * delimiter = strchr(key, '/');
+ char * delimiter2 = strchr(key, '+');
if (delimiter) {
+ uint16_t attribute;
+ uint16_t suffix = 1;
uint16_t cluster = strtoul(key, &delimiter, 16);
- uint16_t attribute = strtoul(delimiter+1, nullptr, 16);
+ if (!delimiter2) {
+ attribute = strtoul(delimiter+1, nullptr, 16);
+ } else {
+ attribute = strtoul(delimiter+1, &delimiter2, 16);
+ suffix = strtoul(delimiter2+1, nullptr, 10);
+ }
// Iterate on filter
for (uint32_t i = 0; i < sizeof(Z_PostProcess) / sizeof(Z_PostProcess[0]); i++) {
@@ -939,7 +959,9 @@ void ZCLFrame::postProcessAttributes(uint16_t shortaddr, JsonObject& json) {
if ((conv_cluster == cluster) &&
((conv_attribute == attribute) || (conv_attribute == 0xFFFF)) ) {
- int32_t drop = (*converter->func)(this, shortaddr, json, key, value, (const __FlashStringHelper*) converter->name, conv_cluster, conv_attribute);
+ String new_name_str = converter->name;
+ if (suffix > 1) { new_name_str += suffix; } // append suffix number
+ int32_t drop = (*converter->func)(this, shortaddr, json, key, value, new_name_str, conv_cluster, conv_attribute);
if (drop) {
json.remove(key);
}
diff --git a/tasmota/xdrv_23_zigbee_7_statemachine.ino b/tasmota/xdrv_23_zigbee_7_statemachine.ino
index d4f3e459f..261a4ac6a 100644
--- a/tasmota/xdrv_23_zigbee_7_statemachine.ino
+++ b/tasmota/xdrv_23_zigbee_7_statemachine.ino
@@ -32,6 +32,7 @@ const uint8_t ZIGBEE_STATUS_DEVICE_ANNOUNCE = 30; // Device announces its
const uint8_t ZIGBEE_STATUS_NODE_DESC = 31; // Node descriptor
const uint8_t ZIGBEE_STATUS_ACTIVE_EP = 32; // Endpoints descriptor
const uint8_t ZIGBEE_STATUS_SIMPLE_DESC = 33; // Simple Descriptor (clusters)
+const uint8_t ZIGBEE_STATUS_DEVICE_INDICATION = 34; // Device announces its address
const uint8_t ZIGBEE_STATUS_CC_VERSION = 50; // Status: CC2530 ZNP Version
const uint8_t ZIGBEE_STATUS_CC_INFO = 51; // Status: CC2530 Device Configuration
const uint8_t ZIGBEE_STATUS_UNSUPPORTED_VERSION = 98; // Unsupported ZNP version
diff --git a/tasmota/xdrv_23_zigbee_8_parsers.ino b/tasmota/xdrv_23_zigbee_8_parsers.ino
index 89320b117..fcfeb06a7 100644
--- a/tasmota/xdrv_23_zigbee_8_parsers.ino
+++ b/tasmota/xdrv_23_zigbee_8_parsers.ino
@@ -357,6 +357,28 @@ int32_t Z_ReceiveEndDeviceAnnonce(int32_t res, const class SBuffer &buf) {
return -1;
}
+// 45CA
+int32_t Z_ReceiveTCDevInd(int32_t res, const class SBuffer &buf) {
+ Z_ShortAddress srcAddr = buf.get16(2);
+ Z_IEEEAddress ieeeAddr = buf.get64(4);
+ Z_ShortAddress parentNw = buf.get16(12);
+
+ zigbee_devices.updateDevice(srcAddr, ieeeAddr);
+
+ char hex[20];
+ Uint64toHex(ieeeAddr, hex, 64);
+ Response_P(PSTR("{\"" D_JSON_ZIGBEE_STATE "\":{"
+ "\"Status\":%d,\"IEEEAddr\":\"%s\",\"ShortAddr\":\"0x%04X\""
+ ",\"ParentNetwork\":\"0x%04X\"}}"),
+ ZIGBEE_STATUS_DEVICE_INDICATION, hex, srcAddr, parentNw
+ );
+
+ MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_ZIGBEEZCL_RECEIVED));
+ XdrvRulesProcess();
+ //Z_SendActiveEpReq(srcAddr);
+ return -1;
+}
+
// Aqara Occupancy behavior: the Aqara device only sends Occupancy: true events every 60 seconds.
// Here we add a timer so if we don't receive a Occupancy event for 90 seconds, we send Occupancy:false
const uint32_t OCCUPANCY_TIMEOUT = 90 * 1000; // 90 s
@@ -378,16 +400,11 @@ void Z_AqaraOccupancy(uint16_t shortaddr, uint16_t cluster, uint16_t endpoint, c
int32_t Z_PublishAttributes(uint16_t shortaddr, uint16_t cluster, uint16_t endpoint, uint32_t value) {
const JsonObject *json = zigbee_devices.jsonGet(shortaddr);
if (json == nullptr) { return 0; } // don't crash if not found
-
// Post-provess for Aqara Presence Senson
Z_AqaraOccupancy(shortaddr, cluster, endpoint, json);
- String msg = "";
- json->printTo(msg);
- zigbee_devices.jsonClear(shortaddr);
- Response_P(PSTR("{\"" D_CMND_ZIGBEE_RECEIVED "\":{\"0x%04X\":%s}}"), shortaddr, msg.c_str());
- MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR));
- XdrvRulesProcess();
+ zigbee_devices.jsonPublish(shortaddr);
+ return 1;
}
int32_t Z_ReceiveAfIncomingMessage(int32_t res, const class SBuffer &buf) {
@@ -438,8 +455,13 @@ int32_t Z_ReceiveAfIncomingMessage(int32_t res, const class SBuffer &buf) {
if (defer_attributes) {
// Prepare for publish
- zigbee_devices.jsonAppend(srcaddr, json);
- zigbee_devices.setTimer(srcaddr, USE_ZIGBEE_COALESCE_ATTR_TIMER, clusterid, srcendpoint, 0, &Z_PublishAttributes);
+ if (zigbee_devices.jsonIsConflict(srcaddr, json)) {
+ // there is conflicting values, force a publish of the previous message now and don't coalesce
+ zigbee_devices.jsonPublish(srcaddr);
+ } else {
+ zigbee_devices.jsonAppend(srcaddr, json);
+ zigbee_devices.setTimer(srcaddr, USE_ZIGBEE_COALESCE_ATTR_TIMER, clusterid, srcendpoint, 0, &Z_PublishAttributes);
+ }
} else {
// Publish immediately
msg = "";
@@ -459,6 +481,7 @@ typedef struct Z_Dispatcher {
// Filters for ZCL frames
ZBM(AREQ_AF_INCOMING_MESSAGE, Z_AREQ | Z_AF, AF_INCOMING_MSG) // 4481
ZBM(AREQ_END_DEVICE_ANNCE_IND, Z_AREQ | Z_ZDO, ZDO_END_DEVICE_ANNCE_IND) // 45C1
+ZBM(AREQ_END_DEVICE_TC_DEV_IND, Z_AREQ | Z_ZDO, ZDO_TC_DEV_IND) // 45CA
ZBM(AREQ_PERMITJOIN_OPEN_XX, Z_AREQ | Z_ZDO, ZDO_PERMIT_JOIN_IND ) // 45CB
ZBM(AREQ_ZDO_ACTIVEEPRSP, Z_AREQ | Z_ZDO, ZDO_ACTIVE_EP_RSP) // 4585
ZBM(AREQ_ZDO_SIMPLEDESCRSP, Z_AREQ | Z_ZDO, ZDO_SIMPLE_DESC_RSP) // 4584
@@ -466,6 +489,7 @@ ZBM(AREQ_ZDO_SIMPLEDESCRSP, Z_AREQ | Z_ZDO, ZDO_SIMPLE_DESC_RSP) // 4584
const Z_Dispatcher Z_DispatchTable[] PROGMEM = {
{ AREQ_AF_INCOMING_MESSAGE, &Z_ReceiveAfIncomingMessage },
{ AREQ_END_DEVICE_ANNCE_IND, &Z_ReceiveEndDeviceAnnonce },
+ { AREQ_END_DEVICE_TC_DEV_IND, &Z_ReceiveTCDevInd },
{ AREQ_PERMITJOIN_OPEN_XX, &Z_ReceivePermitJoinStatus },
{ AREQ_ZDO_NODEDESCRSP, &Z_ReceiveNodeDesc },
{ AREQ_ZDO_ACTIVEEPRSP, &Z_ReceiveActiveEp },
diff --git a/tasmota/xdrv_23_zigbee_9_impl.ino b/tasmota/xdrv_23_zigbee_9_impl.ino
index b3681f00e..59cf382b0 100644
--- a/tasmota/xdrv_23_zigbee_9_impl.ino
+++ b/tasmota/xdrv_23_zigbee_9_impl.ino
@@ -31,12 +31,14 @@ TasmotaSerial *ZigbeeSerial = nullptr;
const char kZigbeeCommands[] PROGMEM = "|"
D_CMND_ZIGBEEZNPSEND "|" D_CMND_ZIGBEE_PERMITJOIN "|"
D_CMND_ZIGBEE_STATUS "|" D_CMND_ZIGBEE_RESET "|" D_CMND_ZIGBEE_SEND "|"
- D_CMND_ZIGBEE_PROBE "|" D_CMND_ZIGBEE_READ ;
+ D_CMND_ZIGBEE_PROBE "|" D_CMND_ZIGBEE_READ "|" D_CMND_ZIGBEEZNPRECEIVE
+ ;
void (* const ZigbeeCommand[])(void) PROGMEM = {
&CmndZigbeeZNPSend, &CmndZigbeePermitJoin,
&CmndZigbeeStatus, &CmndZigbeeReset, &CmndZigbeeSend,
- &CmndZigbeeProbe, &CmndZigbeeRead };
+ &CmndZigbeeProbe, &CmndZigbeeRead, &CmndZigbeeZNPReceive
+ };
int32_t ZigbeeProcessInput(class SBuffer &buf) {
if (!zigbee.state_machine) { return -1; } // if state machine is stopped, send 'ignore' message
@@ -268,7 +270,7 @@ void CmndZigbeeStatus(void) {
}
}
-void CmndZigbeeZNPSend(void)
+void CmndZigbeeZNPSendOrReceive(bool send)
{
if (ZigbeeSerial && (XdrvMailbox.data_len > 0)) {
uint8_t code;
@@ -286,11 +288,26 @@ void CmndZigbeeZNPSend(void)
size -= 2;
codes += 2;
}
- ZigbeeZNPSend(buf.getBuffer(), buf.len());
+ if (send) {
+ ZigbeeZNPSend(buf.getBuffer(), buf.len());
+ } else {
+ ZigbeeProcessInput(buf);
+ }
}
ResponseCmndDone();
}
+// For debug purposes only, simulates a message received
+void CmndZigbeeZNPReceive(void)
+{
+ CmndZigbeeZNPSendOrReceive(false);
+}
+
+void CmndZigbeeZNPSend(void)
+{
+ CmndZigbeeZNPSendOrReceive(true);
+}
+
void ZigbeeZNPSend(const uint8_t *msg, size_t len) {
if ((len < 2) || (len > 252)) {
// abort, message cannot be less than 2 bytes for CMD1 and CMD2
From 1f20c36ce44919c2f3d44c0f40eeaf7a326549e8 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Mon, 23 Dec 2019 17:41:36 +0100
Subject: [PATCH 142/559] Update migration info
---
README.md | 2 ++
RELEASENOTES.md | 3 +++
2 files changed, 5 insertions(+)
diff --git a/README.md b/README.md
index ea1d1c23c..f3412a9c7 100644
--- a/README.md
+++ b/README.md
@@ -67,7 +67,9 @@ See [wiki migration path](https://tasmota.github.io/docs/#/Upgrading?id=migratio
3. Migrate to **Sonoff-Tasmota 5.14**
4. Migrate to **Sonoff-Tasmota 6.x**
5. Migrate to **Tasmota 7.x**
+
--- Major change in parameter storage layout ---
+
6. Migrate to **Tasmota 8.1**
7. Migrate to **Tasmota 8.x**
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 6033aa5df..88442445a 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -11,7 +11,9 @@ See [migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-pat
3. Migrate to **Sonoff-Tasmota 5.14**
4. Migrate to **Sonoff-Tasmota 6.x**
5. Migrate to **Tasmota 7.x**
+
--- Major change in parameter storage layout ---
+
6. Migrate to **Tasmota 8.1**
7. Migrate to **Tasmota 8.x**
@@ -56,4 +58,5 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
- Add support for GPS as NTP server by Christian Baars and Adrian Scillato
- Add Zigbee coalesce sensor attributes into a single message
+- Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor
- Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300
From c1f30da81ee71fcfb9b293997fb4d4b1dc75fe7f Mon Sep 17 00:00:00 2001
From: Federico Leoni
Date: Mon, 23 Dec 2019 22:22:29 -0300
Subject: [PATCH 143/559] Add Moisture Sensor
---
tasmota/i18n.h | 4 +++
tasmota/language/bg-BG.h | 1 +
tasmota/language/cs-CZ.h | 1 +
tasmota/language/de-DE.h | 1 +
tasmota/language/el-GR.h | 1 +
tasmota/language/en-GB.h | 1 +
tasmota/language/es-ES.h | 1 +
tasmota/language/fr-FR.h | 1 +
tasmota/language/he-HE.h | 1 +
tasmota/language/hu-HU.h | 1 +
tasmota/language/it-IT.h | 1 +
tasmota/language/ko-KO.h | 1 +
tasmota/language/nl-NL.h | 1 +
tasmota/language/pl-PL.h | 1 +
tasmota/language/pt-BR.h | 1 +
tasmota/language/pt-PT.h | 1 +
tasmota/language/ru-RU.h | 1 +
tasmota/language/sk-SK.h | 1 +
tasmota/language/sv-SE.h | 1 +
tasmota/language/tr-TR.h | 1 +
tasmota/language/uk-UK.h | 1 +
tasmota/language/zh-CN.h | 1 +
tasmota/language/zh-TW.h | 1 +
tasmota/tasmota_template.h | 2 ++
tasmota/xsns_02_analog.ino | 51 +++++++++++++++++++++++++++++++++-----
tasmota/xsns_48_chirp.ino | 2 +-
26 files changed, 74 insertions(+), 7 deletions(-)
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index 68a19f75e..24b0e1f19 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -99,6 +99,7 @@
#define D_JSON_MEMORY_ERROR "Memory error"
#define D_JSON_MINIMAL "minimal"
#define D_JSON_MODEL "Model"
+#define D_JSON_MOISTURE "Moisture"
#define D_JSON_MQTT_COUNT "MqttCount"
#define D_JSON_NO "No"
#define D_JSON_NOISE "Noise"
@@ -589,6 +590,7 @@ const char JSON_SNS_TEMP[] PROGMEM = ",\"%s\":{\"" D_JSON_TEMPERATURE "\":%s}";
const char JSON_SNS_TEMPHUM[] PROGMEM = ",\"%s\":{\"" D_JSON_TEMPERATURE "\":%s,\"" D_JSON_HUMIDITY "\":%s}";
const char JSON_SNS_ILLUMINANCE[] PROGMEM = ",\"%s\":{\"" D_JSON_ILLUMINANCE "\":%d}";
+const char JSON_SNS_MOISTURE[] PROGMEM = ",\"%s\":{\"" D_JSON_MOISTURE "\":%d}";
const char JSON_SNS_GNGPM[] PROGMEM = ",\"%s\":{\"" D_JSON_TOTAL_USAGE "\":%s,\"" D_JSON_FLOWRATE "\":%s}";
@@ -618,6 +620,8 @@ const char HTTP_SNS_CO2[] PROGMEM = "{s}%s " D_CO2 "{m}%d " D_UNIT_PARTS_PER_MIL
const char HTTP_SNS_CO2EAVG[] PROGMEM = "{s}%s " D_ECO2 "{m}%d " D_UNIT_PARTS_PER_MILLION "{e}"; // {s} = , {m} = | , {e} = |
const char HTTP_SNS_GALLONS[] PROGMEM = "{s}%s " D_TOTAL_USAGE "{m}%s " D_UNIT_GALLONS " {e}"; // {s} = , {m} = | , {e} = |
const char HTTP_SNS_GPM[] PROGMEM = "{s}%s " D_FLOW_RATE "{m}%s " D_UNIT_GALLONS_PER_MIN" {e}"; // {s} = , {m} = | , {e} = |
+const char HTTP_SNS_MOISTURE[] PROGMEM = "{s}%s " D_MOISTURE "{m}%d %%{e}"; // {s} = , {m} = | , {e} = |
+
const char S_MAIN_MENU[] PROGMEM = D_MAIN_MENU;
const char S_CONFIGURATION[] PROGMEM = D_CONFIGURATION;
diff --git a/tasmota/language/bg-BG.h b/tasmota/language/bg-BG.h
index 12937ca6c..f2ac56402 100644
--- a/tasmota/language/bg-BG.h
+++ b/tasmota/language/bg-BG.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Светлина"
#define D_LWT "LWT"
#define D_MODULE "Модул"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "неколкократно натискане"
#define D_NOISE "Шум"
diff --git a/tasmota/language/cs-CZ.h b/tasmota/language/cs-CZ.h
index a297d7063..272e2c5ca 100644
--- a/tasmota/language/cs-CZ.h
+++ b/tasmota/language/cs-CZ.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Světlo"
#define D_LWT "LWT"
#define D_MODULE "Modul"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "několikeré-stisknutí"
#define D_NOISE "Hluk"
diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h
index 663628cd1..89d36103d 100644
--- a/tasmota/language/de-DE.h
+++ b/tasmota/language/de-DE.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Licht"
#define D_LWT "LWT"
#define D_MODULE "Modul"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "Mehrfachdruck"
#define D_NOISE "Lautstärke"
diff --git a/tasmota/language/el-GR.h b/tasmota/language/el-GR.h
index d491d31a2..2b1e4748c 100644
--- a/tasmota/language/el-GR.h
+++ b/tasmota/language/el-GR.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Φως"
#define D_LWT "LWT"
#define D_MODULE "Μονάδα"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "ανίχνευση για πολλαπλά πατήματα"
#define D_NOISE "Θόρυβος"
diff --git a/tasmota/language/en-GB.h b/tasmota/language/en-GB.h
index 8ec56b16c..ab7f90cf8 100644
--- a/tasmota/language/en-GB.h
+++ b/tasmota/language/en-GB.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Light"
#define D_LWT "LWT"
#define D_MODULE "Module"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "multi-press"
#define D_NOISE "Noise"
diff --git a/tasmota/language/es-ES.h b/tasmota/language/es-ES.h
index 42f0991a6..e41b4cb32 100644
--- a/tasmota/language/es-ES.h
+++ b/tasmota/language/es-ES.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Luz"
#define D_LWT "LWT"
#define D_MODULE "Módulo"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "multi-press"
#define D_NOISE "Ruido"
diff --git a/tasmota/language/fr-FR.h b/tasmota/language/fr-FR.h
index a0e34da3e..840421ff3 100644
--- a/tasmota/language/fr-FR.h
+++ b/tasmota/language/fr-FR.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Lumière"
#define D_LWT "LWT"
#define D_MODULE "Module"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "multi-pression"
#define D_NOISE "Bruit"
diff --git a/tasmota/language/he-HE.h b/tasmota/language/he-HE.h
index d31d5380c..9e26a6c5e 100644
--- a/tasmota/language/he-HE.h
+++ b/tasmota/language/he-HE.h
@@ -113,6 +113,7 @@
#define D_LIGHT "אור"
#define D_LWT "LWT"
#define D_MODULE "מודול"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "לחיצה מרובה"
#define D_NOISE "רעש"
diff --git a/tasmota/language/hu-HU.h b/tasmota/language/hu-HU.h
index 7cde76cbb..b7f33a549 100644
--- a/tasmota/language/hu-HU.h
+++ b/tasmota/language/hu-HU.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Fény"
#define D_LWT "LWT"
#define D_MODULE "Modul"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "több lenyomás"
#define D_NOISE "Zaj"
diff --git a/tasmota/language/it-IT.h b/tasmota/language/it-IT.h
index 7b6d7eed0..d3c55579a 100644
--- a/tasmota/language/it-IT.h
+++ b/tasmota/language/it-IT.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Luce"
#define D_LWT "LWT"
#define D_MODULE "Modulo"
+#define D_MOISTURE "Umidità"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "multi-pressione"
#define D_NOISE "Rumore"
diff --git a/tasmota/language/ko-KO.h b/tasmota/language/ko-KO.h
index 5d15554de..a6c2088a1 100644
--- a/tasmota/language/ko-KO.h
+++ b/tasmota/language/ko-KO.h
@@ -113,6 +113,7 @@
#define D_LIGHT "밝게"
#define D_LWT "LWT"
#define D_MODULE "모듈"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "multi-press"
#define D_NOISE "소음"
diff --git a/tasmota/language/nl-NL.h b/tasmota/language/nl-NL.h
index ec352f3e6..8fb492399 100644
--- a/tasmota/language/nl-NL.h
+++ b/tasmota/language/nl-NL.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Licht"
#define D_LWT "LWT"
#define D_MODULE "Module"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "meervoudig"
#define D_NOISE "Lawaai"
diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h
index 9c547e29b..58168516d 100644
--- a/tasmota/language/pl-PL.h
+++ b/tasmota/language/pl-PL.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Światło"
#define D_LWT "LWT"
#define D_MODULE "Moduł"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "Wielokrotne naciśnięcie"
#define D_NOISE "Szum"
diff --git a/tasmota/language/pt-BR.h b/tasmota/language/pt-BR.h
index 7a8db0dca..0c9891323 100644
--- a/tasmota/language/pt-BR.h
+++ b/tasmota/language/pt-BR.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Luz"
#define D_LWT "LWT"
#define D_MODULE "Módulo"
+#define D_MOISTURE "Umidade"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "multi-pressão"
#define D_NOISE "Ruído"
diff --git a/tasmota/language/pt-PT.h b/tasmota/language/pt-PT.h
index 8b9868bd8..210ef8e29 100644
--- a/tasmota/language/pt-PT.h
+++ b/tasmota/language/pt-PT.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Luz"
#define D_LWT "LWT"
#define D_MODULE "Módulo"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "multi-pressão"
#define D_NOISE "Ruído"
diff --git a/tasmota/language/ru-RU.h b/tasmota/language/ru-RU.h
index 610af6f3f..6696e0e48 100644
--- a/tasmota/language/ru-RU.h
+++ b/tasmota/language/ru-RU.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Свет"
#define D_LWT "LWT"
#define D_MODULE "Модуль"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "многократное нажатие"
#define D_NOISE "Шум"
diff --git a/tasmota/language/sk-SK.h b/tasmota/language/sk-SK.h
index 9aa428b69..21120179a 100644
--- a/tasmota/language/sk-SK.h
+++ b/tasmota/language/sk-SK.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Svetlo"
#define D_LWT "LWT"
#define D_MODULE "Modul"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "multi-stlačenie"
#define D_NOISE "Hluk"
diff --git a/tasmota/language/sv-SE.h b/tasmota/language/sv-SE.h
index 1a70704ee..117fb40ed 100644
--- a/tasmota/language/sv-SE.h
+++ b/tasmota/language/sv-SE.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Ljus"
#define D_LWT "LWT"
#define D_MODULE "Modul"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "fler tryck"
#define D_NOISE "Oväsen"
diff --git a/tasmota/language/tr-TR.h b/tasmota/language/tr-TR.h
index 6e9d9b9bf..9874688da 100644
--- a/tasmota/language/tr-TR.h
+++ b/tasmota/language/tr-TR.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Işık"
#define D_LWT "LWT"
#define D_MODULE "Modül"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "multi-press"
#define D_NOISE "Noise"
diff --git a/tasmota/language/uk-UK.h b/tasmota/language/uk-UK.h
index d4862c3c8..dbf58fe35 100644
--- a/tasmota/language/uk-UK.h
+++ b/tasmota/language/uk-UK.h
@@ -113,6 +113,7 @@
#define D_LIGHT "Світло"
#define D_LWT "LWT"
#define D_MODULE "Модуль"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "Багаторазове натискання"
#define D_NOISE "Шум"
diff --git a/tasmota/language/zh-CN.h b/tasmota/language/zh-CN.h
index 886a7c918..7700e7e78 100644
--- a/tasmota/language/zh-CN.h
+++ b/tasmota/language/zh-CN.h
@@ -113,6 +113,7 @@
#define D_LIGHT "灯"
#define D_LWT "LWT"
#define D_MODULE "模块"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "多次按键"
#define D_NOISE "嘈杂"
diff --git a/tasmota/language/zh-TW.h b/tasmota/language/zh-TW.h
index 61f82fb4c..34bb68e3d 100644
--- a/tasmota/language/zh-TW.h
+++ b/tasmota/language/zh-TW.h
@@ -113,6 +113,7 @@
#define D_LIGHT "燈"
#define D_LWT "LWT"
#define D_MODULE "模組"
+#define D_MOISTURE "Moisture"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "多次按鍵"
#define D_NOISE "雜訊"
diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h
index 3985884ef..6b936d14a 100644
--- a/tasmota/tasmota_template.h
+++ b/tasmota/tasmota_template.h
@@ -313,6 +313,7 @@ enum UserSelectableAdc0 {
ADC0_BUTTON_INV,
// ADC0_SWITCH, // Switch
// ADC0_SWITCH_INV,
+ ADC0_MOIST, // Moisture
ADC0_END };
// Programmer selectable ADC0 functionality
@@ -326,6 +327,7 @@ const char kAdc0Names[] PROGMEM =
D_SENSOR_NONE "|" D_ANALOG_INPUT "|"
D_TEMPERATURE "|" D_LIGHT "|"
D_SENSOR_BUTTON "|" D_SENSOR_BUTTON "i|"
+ D_MOISTURE "|"
// D_SENSOR_SWITCH "|" D_SENSOR_SWITCH "i|"
;
diff --git a/tasmota/xsns_02_analog.ino b/tasmota/xsns_02_analog.ino
index 1a4bc090b..4e75dbbe7 100644
--- a/tasmota/xsns_02_analog.ino
+++ b/tasmota/xsns_02_analog.ino
@@ -66,6 +66,12 @@ void AdcInit(void)
Settings.adc_param2 = ANALOG_LDR_LUX_CALC_SCALAR;
Settings.adc_param3 = ANALOG_LDR_LUX_CALC_EXPONENT * 10000;
}
+ else if (ADC0_MOIST == my_adc0) {
+ Settings.adc_param_type = ADC0_MOIST;
+ Settings.adc_param1 = 0;
+ Settings.adc_param2 = 1023;
+ Settings.adc_param3 = 0;
+ }
}
}
@@ -113,6 +119,20 @@ uint16_t AdcGetLux(void)
return (uint16_t)ldrLux;
}
+uint16_t AdcGetMoist(void)
+// formula for calibration: value, fromLow, fromHigh, toHigh, toLow
+// Example: 632, 0, 1023, 100, 0
+// int( ( ( ( - ) / ( - ) ) * ( - ) ) + )
+// double amoist = ((Settings.adc_param2 - (double)adc) / (Settings.adc_param2 - Settings.adc_param1) * 100;
+// int((((1023 - ) / ( 1023 - 0 )) * ( 100 - 0 )) + 0 )
+
+{
+ int adc = AdcRead(2);
+ double amoist = ((double)Settings.adc_param2 - (double)adc) / ((double)Settings.adc_param2 - (double)Settings.adc_param1) * 100;
+ //double amoist = ((1023 - (double)adc) / 1023) * 100;
+ return (uint16_t)amoist;
+}
+
void AdcEverySecond(void)
{
if (ADC0_TEMP == my_adc0) {
@@ -126,7 +146,7 @@ void AdcEverySecond(void)
}
void AdcShow(bool json)
-{
+{
if (ADC0_INPUT == my_adc0) {
uint16_t analog = AdcRead(5);
@@ -173,9 +193,20 @@ void AdcShow(bool json)
#ifdef USE_WEBSERVER
} else {
WSContentSend_PD(HTTP_SNS_ILLUMINANCE, "", adc_light);
+
#endif // USE_WEBSERVER
}
}
+ else if (ADC0_MOIST == my_adc0) {
+ uint16_t adc_moist = AdcGetMoist();
+ if (json) {
+ ResponseAppend_P(JSON_SNS_MOISTURE, "ANALOG", adc_moist);
+#ifdef USE_WEBSERVER
+ } else {
+ WSContentSend_PD(HTTP_SNS_MOISTURE, "", adc_moist);
+#endif // USE_WEBSERVER
+ }
+ }
}
/*********************************************************************************************\
@@ -217,7 +248,7 @@ void CmndAdcs(void)
void CmndAdcParam(void)
{
if (XdrvMailbox.data_len) {
- if ((ADC0_TEMP == XdrvMailbox.payload) || (ADC0_LIGHT == XdrvMailbox.payload)) {
+ if ((ADC0_TEMP == XdrvMailbox.payload) || (ADC0_LIGHT == XdrvMailbox.payload) || (ADC0_MOIST == XdrvMailbox.payload)) {
// if ((XdrvMailbox.payload == my_adc0) && ((ADC0_TEMP == my_adc0) || (ADC0_LIGHT == my_adc0))) {
if (strstr(XdrvMailbox.data, ",") != nullptr) { // Process parameter entry
char sub_string[XdrvMailbox.data_len +1];
@@ -227,10 +258,13 @@ void CmndAdcParam(void)
// Settings.adc_param_type = my_adc0;
Settings.adc_param1 = strtol(subStr(sub_string, XdrvMailbox.data, ",", 2), nullptr, 10);
Settings.adc_param2 = strtol(subStr(sub_string, XdrvMailbox.data, ",", 3), nullptr, 10);
- Settings.adc_param3 = (int)(CharToFloat(subStr(sub_string, XdrvMailbox.data, ",", 4)) * 10000);
+ if (!ADC0_MOIST == XdrvMailbox.payload) {
+ Settings.adc_param3 = (int)(CharToFloat(subStr(sub_string, XdrvMailbox.data, ",", 4)) * 10000);
+ }
} else { // Set default values based on current adc type
// AdcParam 2
// AdcParam 3
+ // AdcParam 6
Settings.adc_param_type = 0;
AdcInit();
}
@@ -246,8 +280,13 @@ void CmndAdcParam(void)
}
char param3[33];
dtostrfd(((double)Settings.adc_param3)/10000, precision, param3);
- Response_P(PSTR("{\"" D_CMND_ADCPARAM "\":[%d,%d,%d,%s]}"),
- Settings.adc_param_type, Settings.adc_param1, Settings.adc_param2, param3);
+ if ((ADC0_TEMP == my_adc0) || (ADC0_LIGHT == my_adc0)) {
+ Response_P(PSTR("{\"" D_CMND_ADCPARAM "\":[%d,%d,%d,%s]}"),
+ Settings.adc_param_type, Settings.adc_param1, Settings.adc_param2, param3);
+ } else if (ADC0_MOIST == my_adc0) {
+ Response_P(PSTR("{\"" D_CMND_ADCPARAM "\":[%d,%d,%d]}"),
+ Settings.adc_param_type, Settings.adc_param1, Settings.adc_param2);
+ }
}
/*********************************************************************************************\
@@ -263,7 +302,7 @@ bool Xsns02(uint8_t function)
result = DecodeCommand(kAdcCommands, AdcCommand);
break;
default:
- if ((ADC0_INPUT == my_adc0) || (ADC0_TEMP == my_adc0) || (ADC0_LIGHT == my_adc0)) {
+ if ((ADC0_INPUT == my_adc0) || (ADC0_TEMP == my_adc0) || (ADC0_LIGHT == my_adc0) || (ADC0_MOIST == my_adc0)) {
switch (function) {
#ifdef USE_RULES
case FUNC_EVERY_250_MSECOND:
diff --git a/tasmota/xsns_48_chirp.ino b/tasmota/xsns_48_chirp.ino
index 84fcd4f66..131a0cc24 100644
--- a/tasmota/xsns_48_chirp.ino
+++ b/tasmota/xsns_48_chirp.ino
@@ -399,7 +399,7 @@ void ChirpEvery100MSecond(void)
/********************************************************************************************/
// normaly in i18n.h
-#define D_JSON_MOISTURE "Moisture"
+// #define D_JSON_MOISTURE "Moisture" // on i18n.h
#define D_JSON_DARKNESS "Darkness"
#ifdef USE_WEBSERVER
From def43784998c18f0821caef253326ced45455b36 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 24 Dec 2019 12:20:04 +0100
Subject: [PATCH 144/559] Add support for ADC0 Moisture
Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309)
---
RELEASENOTES.md | 1 +
tasmota/CHANGELOG.md | 1 +
tasmota/i18n.h | 55 +++++++++++++++++++-------------------
tasmota/tasmota_template.h | 2 +-
tasmota/xsns_02_analog.ino | 14 +++++-----
tasmota/xsns_48_chirp.ino | 34 +++++++++++------------
6 files changed, 52 insertions(+), 55 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 88442445a..3515a7433 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -57,6 +57,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Change number of rule ``Var``s and ``Mem``s from 5 to 16 (#4933)
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
- Add support for GPS as NTP server by Christian Baars and Adrian Scillato
+- Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309)
- Add Zigbee coalesce sensor attributes into a single message
- Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor
- Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index cb2bfe0c5..372a2507f 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -4,6 +4,7 @@
- Changed Settings variable namings
- Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor
+- Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309)
### 8.0.0.1 20191221
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index 24b0e1f19..1ae20dcde 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -50,6 +50,7 @@
#define D_JSON_COUNT "Count"
#define D_JSON_COUNTER "Counter"
#define D_JSON_CURRENT "Current" // As in Voltage and Current
+#define D_JSON_DARKNESS "Darkness"
#define D_JSON_DATA "Data"
#define D_JSON_DISTANCE "Distance"
#define D_JSON_DNSSERVER "DNSServer"
@@ -458,7 +459,6 @@
#define D_CMND_LONGITUDE "Longitude"
// Commands xdrv_16_tuyadimmer.ino
-
#define D_CMND_TUYA_MCU "TuyaMCU"
#define D_CMND_TUYA_MCU_SEND_STATE "TuyaSend"
#define D_JSON_TUYA_MCU_RECEIVED "TuyaReceived"
@@ -485,34 +485,33 @@
#define D_CMND_ZIGBEE_SEND "ZigbeeSend"
#define D_JSON_ZIGBEE_ZCL_SENT "ZigbeeZCLSent"
- // Commands xdrv_25_A4988_Stepper.ino
- #ifdef USE_A4988_STEPPER
- #define D_CMND_MOTOR "MOTOR"
- #define D_JSON_MOTOR_MOVE "doMove"
- #define D_JSON_MOTOR_ROTATE "doRotate"
- #define D_JSON_MOTOR_TURN "doTurn"
- #define D_JSON_MOTOR_SPR "setSPR"
- #define D_JSON_MOTOR_RPM "setRPM"
- #define D_JSON_MOTOR_MIS "setMIS"
- #endif
+// Commands xdrv_25_A4988_Stepper.ino
+#define D_CMND_MOTOR "MOTOR"
+#define D_JSON_MOTOR_MOVE "doMove"
+#define D_JSON_MOTOR_ROTATE "doRotate"
+#define D_JSON_MOTOR_TURN "doTurn"
+#define D_JSON_MOTOR_SPR "setSPR"
+#define D_JSON_MOTOR_RPM "setRPM"
+#define D_JSON_MOTOR_MIS "setMIS"
- // Commands xdrv_27_Shutter.ino
- #ifdef USE_SHUTTER
- #define D_PRFX_SHUTTER "Shutter"
- #define D_CMND_SHUTTER_OPEN "Open"
- #define D_CMND_SHUTTER_CLOSE "Close"
- #define D_CMND_SHUTTER_STOP "Stop"
- #define D_CMND_SHUTTER_POSITION "Position"
- #define D_CMND_SHUTTER_OPENTIME "OpenDuration"
- #define D_CMND_SHUTTER_CLOSETIME "CloseDuration"
- #define D_CMND_SHUTTER_RELAY "Relay"
- #define D_CMND_SHUTTER_SETHALFWAY "SetHalfway"
- #define D_CMND_SHUTTER_SETCLOSE "SetClose"
- #define D_CMND_SHUTTER_INVERT "Invert"
- #define D_CMND_SHUTTER_CLIBRATION "Calibration"
- #define D_CMND_SHUTTER_MOTORDELAY "MotorDelay"
- #define D_CMND_SHUTTER_FREQUENCY "Frequency"
- #endif
+// Commands xdrv_27_Shutter.ino
+#define D_PRFX_SHUTTER "Shutter"
+#define D_CMND_SHUTTER_OPEN "Open"
+#define D_CMND_SHUTTER_CLOSE "Close"
+#define D_CMND_SHUTTER_STOP "Stop"
+#define D_CMND_SHUTTER_POSITION "Position"
+#define D_CMND_SHUTTER_OPENTIME "OpenDuration"
+#define D_CMND_SHUTTER_CLOSETIME "CloseDuration"
+#define D_CMND_SHUTTER_RELAY "Relay"
+#define D_CMND_SHUTTER_SETHALFWAY "SetHalfway"
+#define D_CMND_SHUTTER_SETCLOSE "SetClose"
+#define D_CMND_SHUTTER_INVERT "Invert"
+#define D_CMND_SHUTTER_CLIBRATION "Calibration"
+#define D_CMND_SHUTTER_MOTORDELAY "MotorDelay"
+#define D_CMND_SHUTTER_FREQUENCY "Frequency"
+
+// Commands xsns_02_analog.ino
+#define D_CMND_ADCPARAM "AdcParam"
/********************************************************************************************/
diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h
index 6b936d14a..685546b91 100644
--- a/tasmota/tasmota_template.h
+++ b/tasmota/tasmota_template.h
@@ -311,9 +311,9 @@ enum UserSelectableAdc0 {
ADC0_LIGHT, // Light sensor
ADC0_BUTTON, // Button
ADC0_BUTTON_INV,
+ ADC0_MOIST, // Moisture
// ADC0_SWITCH, // Switch
// ADC0_SWITCH_INV,
- ADC0_MOIST, // Moisture
ADC0_END };
// Programmer selectable ADC0 functionality
diff --git a/tasmota/xsns_02_analog.ino b/tasmota/xsns_02_analog.ino
index 4e75dbbe7..3dd974918 100644
--- a/tasmota/xsns_02_analog.ino
+++ b/tasmota/xsns_02_analog.ino
@@ -146,7 +146,7 @@ void AdcEverySecond(void)
}
void AdcShow(bool json)
-{
+{
if (ADC0_INPUT == my_adc0) {
uint16_t analog = AdcRead(5);
@@ -193,12 +193,12 @@ void AdcShow(bool json)
#ifdef USE_WEBSERVER
} else {
WSContentSend_PD(HTTP_SNS_ILLUMINANCE, "", adc_light);
-
#endif // USE_WEBSERVER
}
}
else if (ADC0_MOIST == my_adc0) {
uint16_t adc_moist = AdcGetMoist();
+
if (json) {
ResponseAppend_P(JSON_SNS_MOISTURE, "ANALOG", adc_moist);
#ifdef USE_WEBSERVER
@@ -206,14 +206,13 @@ void AdcShow(bool json)
WSContentSend_PD(HTTP_SNS_MOISTURE, "", adc_moist);
#endif // USE_WEBSERVER
}
- }
+ }
}
/*********************************************************************************************\
* Commands
\*********************************************************************************************/
-#define D_CMND_ADCPARAM "AdcParam"
const char kAdcCommands[] PROGMEM = "|" // No prefix
D_CMND_ADC "|" D_CMND_ADCS "|" D_CMND_ADCPARAM;
@@ -248,7 +247,7 @@ void CmndAdcs(void)
void CmndAdcParam(void)
{
if (XdrvMailbox.data_len) {
- if ((ADC0_TEMP == XdrvMailbox.payload) || (ADC0_LIGHT == XdrvMailbox.payload) || (ADC0_MOIST == XdrvMailbox.payload)) {
+ if ((ADC0_TEMP == XdrvMailbox.payload) || (ADC0_LIGHT == XdrvMailbox.payload) || (ADC0_MOIST == XdrvMailbox.payload)) {
// if ((XdrvMailbox.payload == my_adc0) && ((ADC0_TEMP == my_adc0) || (ADC0_LIGHT == my_adc0))) {
if (strstr(XdrvMailbox.data, ",") != nullptr) { // Process parameter entry
char sub_string[XdrvMailbox.data_len +1];
@@ -283,10 +282,11 @@ void CmndAdcParam(void)
if ((ADC0_TEMP == my_adc0) || (ADC0_LIGHT == my_adc0)) {
Response_P(PSTR("{\"" D_CMND_ADCPARAM "\":[%d,%d,%d,%s]}"),
Settings.adc_param_type, Settings.adc_param1, Settings.adc_param2, param3);
- } else if (ADC0_MOIST == my_adc0) {
+ }
+ else if (ADC0_MOIST == my_adc0) {
Response_P(PSTR("{\"" D_CMND_ADCPARAM "\":[%d,%d,%d]}"),
Settings.adc_param_type, Settings.adc_param1, Settings.adc_param2);
- }
+ }
}
/*********************************************************************************************\
diff --git a/tasmota/xsns_48_chirp.ino b/tasmota/xsns_48_chirp.ino
index 131a0cc24..f761e6afc 100644
--- a/tasmota/xsns_48_chirp.ino
+++ b/tasmota/xsns_48_chirp.ino
@@ -397,22 +397,17 @@ void ChirpEvery100MSecond(void)
}
/********************************************************************************************/
+
// normaly in i18n.h
-
-// #define D_JSON_MOISTURE "Moisture" // on i18n.h
-#define D_JSON_DARKNESS "Darkness"
-
#ifdef USE_WEBSERVER
// {s} = , {m} = | , {e} = |
- const char HTTP_SNS_MOISTURE[] PROGMEM = "{s} " D_JSON_MOISTURE "{m}%s %{e}";
- const char HTTP_SNS_DARKNESS[] PROGMEM = "{s} " D_JSON_DARKNESS "{m}%s %{e}";
- const char HTTP_SNS_CHIRPVER[] PROGMEM = "{s} CHIRP-sensor %u at address{m}0x%x{e}"
- "{s} FW-version{m}%s {e}"; ;
- const char HTTP_SNS_CHIRPSLEEP[] PROGMEM = "{s} {m} is sleeping ...{e}";
+const char HTTP_SNS_DARKNESS[] PROGMEM = "{s} " D_JSON_DARKNESS "{m}%s %%{e}";
+const char HTTP_SNS_CHIRPVER[] PROGMEM = "{s} CHIRP-sensor %u at address{m}0x%x{e}"
+ "{s} FW-version{m}%s {e}"; ;
+const char HTTP_SNS_CHIRPSLEEP[] PROGMEM = "{s} {m} is sleeping ...{e}";
#endif // USE_WEBSERVER
-
/********************************************************************************************/
void ChirpShow(bool json)
@@ -420,8 +415,6 @@ void ChirpShow(bool json)
for (uint32_t i = 0; i < chirp_found_sensors; i++) {
if (chirp_sensor[i].version) {
// convert double values to string
- char str_moisture[33];
- dtostrfd(chirp_sensor[i].moisture, 0, str_moisture);
char str_temperature[33];
double t_temperature = ((double) chirp_sensor[i].temperature )/10.0;
dtostrfd(t_temperature, Settings.flag2.temperature_resolution, str_temperature);
@@ -434,9 +427,10 @@ void ChirpShow(bool json)
else{
sprintf(str_version, "%x", chirp_sensor[i].version);
}
+
if (json) {
if(!chirp_sensor[i].explicitSleep) {
- ResponseAppend_P(PSTR(",\"%s%u\":{\"" D_JSON_MOISTURE "\":%s"),chirp_name, i, str_moisture);
+ ResponseAppend_P(PSTR(",\"%s%u\":{\"" D_JSON_MOISTURE "\":%d"), chirp_name, i, chirp_sensor[i].moisture);
if(chirp_sensor[i].temperature!=-1){ // this is the error code -> no temperature
ResponseAppend_P(PSTR(",\"" D_JSON_TEMPERATURE "\":%s"),str_temperature);
}
@@ -447,9 +441,11 @@ void ChirpShow(bool json)
}
#ifdef USE_DOMOTICZ
if (0 == tele_period) {
- DomoticzTempHumSensor(str_temperature, str_moisture);
- DomoticzSensor(DZ_ILLUMINANCE,chirp_sensor[i].light); // this is not LUX!!
- }
+ char str_moisture[33];
+ dtostrfd(chirp_sensor[i].moisture, 0, str_moisture);
+ DomoticzTempHumSensor(str_temperature, str_moisture);
+ DomoticzSensor(DZ_ILLUMINANCE,chirp_sensor[i].light); // this is not LUX!!
+ }
#endif // USE_DOMOTICZ
#ifdef USE_WEBSERVER
} else {
@@ -458,10 +454,10 @@ void ChirpShow(bool json)
WSContentSend_PD(HTTP_SNS_CHIRPSLEEP);
}
else {
- WSContentSend_PD(HTTP_SNS_MOISTURE, str_moisture);
+ WSContentSend_PD(HTTP_SNS_MOISTURE, "", chirp_sensor[i].moisture);
WSContentSend_PD(HTTP_SNS_DARKNESS, str_light);
- if(chirp_sensor[i].temperature!=-1){ // this is the error code -> no temperature
- WSContentSend_PD(HTTP_SNS_TEMP, " ",str_temperature, TempUnit());
+ if (chirp_sensor[i].temperature!=-1) { // this is the error code -> no temperature
+ WSContentSend_PD(HTTP_SNS_TEMP, "", str_temperature, TempUnit());
}
}
From a2478f9569a5411ad3660085c9ae5384c5e92358 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 24 Dec 2019 15:06:19 +0100
Subject: [PATCH 145/559] Change number of ``FriendlyName``s from 4 to 8
Change number of ``FriendlyName``s from 4 to 8
---
RELEASENOTES.md | 1 +
tasmota/CHANGELOG.md | 1 +
tasmota/settings.h | 2 +-
tasmota/tasmota.h | 16 ++++++-------
tasmota/xdrv_01_webserver.ino | 9 +++++---
tasmota/xdrv_09_timers.ino | 7 +++---
tasmota/xdrv_10_rules.ino | 6 ++---
tasmota/xdrv_10_scripter.ino | 12 ++++------
tasmota/xdsp_02_ssd1306.ino | 3 +--
tasmota/xdsp_07_sh1106.ino | 3 +--
tasmota/xdsp_09_SSD1351.ino | 3 +--
tasmota/xsns_41_max44009.ino | 3 +--
tasmota/xsns_42_scd30.ino | 43 ++++++++++++++++-------------------
13 files changed, 50 insertions(+), 59 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 3515a7433..c9293bb95 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -55,6 +55,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
- Change number of rule ``Var``s and ``Mem``s from 5 to 16 (#4933)
+- Change number of ``FriendlyName``s from 4 to 8
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
- Add support for GPS as NTP server by Christian Baars and Adrian Scillato
- Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 372a2507f..d6b1d0ab7 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -3,6 +3,7 @@
### 8.0.0.2 20191223
- Changed Settings variable namings
+- Change number of ``FriendlyName``s from 4 to 8
- Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor
- Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309)
diff --git a/tasmota/settings.h b/tasmota/settings.h
index af774a4c2..eddc4f04b 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -337,7 +337,7 @@ struct SYSCFG {
SysBitfield3 flag3; // 3A0
uint8_t switchmode[MAX_SWITCHES]; // 3A4 (6.0.0b - moved from 0x4CA)
- char ex_friendlyname[MAX_FRIENDLYNAMES][33]; // 3AC
+ char ex_friendlyname[4][33]; // 3AC
char ex_switch_topic[33]; // 430
char serial_delimiter; // 451
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index 829a90871..2e539bb49 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -58,7 +58,6 @@ const uint8_t MAX_PWMS = 5; // Max number of PWM channels
const uint8_t MAX_COUNTERS = 4; // Max number of counter sensors
const uint8_t MAX_TIMERS = 16; // Max number of Timers
const uint8_t MAX_PULSETIMERS = 8; // Max number of supported pulse timers
-const uint8_t MAX_FRIENDLYNAMES = 4; // Max number of Friendly names
const uint8_t MAX_DOMOTICZ_IDX = 4; // Max number of Domoticz device, key and switch indices
const uint8_t MAX_DOMOTICZ_SNS_IDX = 12; // Max number of Domoticz sensors indices
const uint8_t MAX_KNX_GA = 10; // Max number of KNX Group Addresses to read that can be set
@@ -73,7 +72,10 @@ const uint8_t MAX_PCF8574 = 8; // Max number of PCF8574 devices
const uint8_t MAX_RULE_SETS = 3; // Max number of rule sets of size 512 characters
const uint16_t MAX_RULE_SIZE = 512; // Max number of characters in rules
+// Changes to the following MAX_ defines need to be in line with enum SettingsTextIndex
+const uint8_t MAX_FRIENDLYNAMES = 8; // Max number of Friendly names
const uint8_t MAX_RULE_MEMS = 16; // Max number of saved vars
+
const uint8_t MAX_HUE_DEVICES = 15; // Max number of Philips Hue device per emulation
const char MQTT_TOKEN_PREFIX[] PROGMEM = "%prefix%"; // To be substituted by mqtt_prefix[x]
@@ -287,13 +289,11 @@ enum SettingsTextIndex { SET_OTAURL,
SET_MEM1, SET_MEM2, SET_MEM3, SET_MEM4, SET_MEM5, SET_MEM6, SET_MEM7, SET_MEM8,
SET_MEM9, SET_MEM10, SET_MEM11, SET_MEM12, SET_MEM13, SET_MEM14, SET_MEM15, SET_MEM16,
SET_FRIENDLYNAME1, SET_FRIENDLYNAME2, SET_FRIENDLYNAME3, SET_FRIENDLYNAME4,
-
-// SET_FRIENDLYNAME5, SET_FRIENDLYNAME6, SET_FRIENDLYNAME7, SET_FRIENDLYNAME8, // Future extension
-// SET_BUTTON1, SET_BUTTON2, SET_BUTTON3, SET_BUTTON4, // Future extension
-// SET_BUTTON5, SET_BUTTON6, SET_BUTTON7, SET_BUTTON8, // Future extension
-// SET_BUTTON9, SET_BUTTON10, SET_BUTTON11, SET_BUTTON12, // Future extension
-// SET_BUTTON13, SET_BUTTON14, SET_BUTTON15, SET_BUTTON16, // Future extension
-
+ SET_FRIENDLYNAME5, SET_FRIENDLYNAME6, SET_FRIENDLYNAME7, SET_FRIENDLYNAME8,
+ SET_BUTTON1, SET_BUTTON2, SET_BUTTON3, SET_BUTTON4,
+ SET_BUTTON5, SET_BUTTON6, SET_BUTTON7, SET_BUTTON8,
+ SET_BUTTON9, SET_BUTTON10, SET_BUTTON11, SET_BUTTON12,
+ SET_BUTTON13, SET_BUTTON14, SET_BUTTON15, SET_BUTTON16,
SET_MAX };
enum CommandSource { SRC_IGNORE, SRC_MQTT, SRC_RESTART, SRC_BUTTON, SRC_SWITCH, SRC_BACKLOG, SRC_SERIAL, SRC_WEBGUI, SRC_WEBCOMMAND, SRC_WEBCONSOLE, SRC_PULSETIMER,
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index 104e71f67..c25cdc3f6 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -1846,6 +1846,7 @@ void OtherSaveSettings(void)
char tmp[TOPSZ];
char webindex[5];
char friendlyname[TOPSZ];
+ char message[LOGSZ];
WebGetArg("wp", tmp, sizeof(tmp));
SettingsUpdateText(SET_WEBPWD, (!strlen(tmp)) ? "" : (strchr(tmp,'*')) ? SettingsText(SET_WEBPWD) : tmp);
@@ -1854,15 +1855,17 @@ void OtherSaveSettings(void)
WebGetArg("b2", tmp, sizeof(tmp));
Settings.flag2.emulation = (!strlen(tmp)) ? 0 : atoi(tmp);
#endif // USE_EMULATION
- snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_OTHER D_MQTT_ENABLE " %s, " D_CMND_EMULATION " %d, " D_CMND_FRIENDLYNAME), GetStateText(Settings.flag.mqtt_enabled), Settings.flag2.emulation);
+
+ snprintf_P(message, sizeof(message), PSTR(D_LOG_OTHER D_MQTT_ENABLE " %s, " D_CMND_EMULATION " %d, " D_CMND_FRIENDLYNAME), GetStateText(Settings.flag.mqtt_enabled), Settings.flag2.emulation);
for (uint32_t i = 0; i < MAX_FRIENDLYNAMES; i++) {
snprintf_P(webindex, sizeof(webindex), PSTR("a%d"), i);
WebGetArg(webindex, tmp, sizeof(tmp));
snprintf_P(friendlyname, sizeof(friendlyname), PSTR(FRIENDLY_NAME"%d"), i +1);
SettingsUpdateText(SET_FRIENDLYNAME1 +i, (!strlen(tmp)) ? (i) ? friendlyname : FRIENDLY_NAME : tmp);
- snprintf_P(log_data, sizeof(log_data), PSTR("%s%s %s"), log_data, (i) ? "," : "", SettingsText(SET_FRIENDLYNAME1 +i));
+ snprintf_P(message, sizeof(message), PSTR("%s%s %s"), message, (i) ? "," : "", SettingsText(SET_FRIENDLYNAME1 +i));
}
- AddLog(LOG_LEVEL_INFO);
+ AddLog_P(LOG_LEVEL_INFO, message);
+
WebGetArg("t1", tmp, sizeof(tmp));
if (strlen(tmp)) { // {"NAME":"12345678901234","GPIO":[255,255,255,255,255,255,255,255,255,255,255,255,255],"FLAG":255,"BASE":255}
char svalue[128];
diff --git a/tasmota/xdrv_09_timers.ino b/tasmota/xdrv_09_timers.ino
index db1cde97e..a6c7b23a9 100644
--- a/tasmota/xdrv_09_timers.ino
+++ b/tasmota/xdrv_09_timers.ino
@@ -733,12 +733,13 @@ void HandleTimerConfiguration(void)
void TimerSaveSettings(void)
{
char tmp[MAX_TIMERS *12]; // Need space for MAX_TIMERS x 10 digit numbers separated by a comma
+ char message[LOGSZ];
Timer timer;
Settings.flag3.timers_enable = WebServer->hasArg("e0"); // CMND_TIMERS
WebGetArg("t0", tmp, sizeof(tmp));
char *p = tmp;
- snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_MQTT D_CMND_TIMERS " %d"), Settings.flag3.timers_enable); // CMND_TIMERS
+ snprintf_P(message, sizeof(message), PSTR(D_LOG_MQTT D_CMND_TIMERS " %d"), Settings.flag3.timers_enable); // CMND_TIMERS
for (uint32_t i = 0; i < MAX_TIMERS; i++) {
timer.data = strtol(p, &p, 10);
p++; // Skip comma
@@ -747,9 +748,9 @@ void TimerSaveSettings(void)
Settings.timer[i].data = timer.data;
if (flag) TimerSetRandomWindow(i);
}
- snprintf_P(log_data, sizeof(log_data), PSTR("%s,0x%08X"), log_data, Settings.timer[i].data);
+ snprintf_P(message, sizeof(message), PSTR("%s,0x%08X"), message, Settings.timer[i].data);
}
- AddLog(LOG_LEVEL_DEBUG);
+ AddLog_P(LOG_LEVEL_DEBUG, message);
}
#endif // USE_TIMERS_WEB
#endif // USE_WEBSERVER
diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino
index 72276f94b..21c9de283 100644
--- a/tasmota/xdrv_10_rules.ino
+++ b/tasmota/xdrv_10_rules.ino
@@ -1400,8 +1400,7 @@ bool evaluateLogicalExpression(const char * expression, int len)
memcpy(expbuff, expression, len);
expbuff[len] = '\0';
- //snprintf_P(log_data, sizeof(log_data), PSTR("EvalLogic: |%s|"), expbuff);
- //AddLog(LOG_LEVEL_DEBUG);
+ //AddLog_P2(LOG_LEVEL_DEBUG, PSTR("EvalLogic: |%s|"), expbuff);
char * pointer = expbuff;
LinkedList values;
LinkedList logicOperators;
@@ -1527,8 +1526,7 @@ void ExecuteCommandBlock(const char * commands, int len)
memcpy(cmdbuff, commands, len);
cmdbuff[len] = '\0';
- //snprintf_P(log_data, sizeof(log_data), PSTR("ExecCmd: |%s|"), cmdbuff);
- //AddLog(LOG_LEVEL_DEBUG);
+ //AddLog_P2(LOG_LEVEL_DEBUG, PSTR("ExecCmd: |%s|"), cmdbuff);
char oneCommand[len + 1]; //To put one command
int insertPosition = 0; //When insert into backlog, we should do it by 0, 1, 2 ...
char * pos = cmdbuff;
diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino
index c6aedb80e..27d72c717 100755
--- a/tasmota/xdrv_10_scripter.ino
+++ b/tasmota/xdrv_10_scripter.ino
@@ -2203,8 +2203,7 @@ void Replace_Cmd_Vars(char *srcbuf,char *dstbuf,uint16_t dstsize) {
void toLog(const char *str) {
if (!str) return;
- snprintf_P(log_data, sizeof(log_data), PSTR("%s"),str);
- AddLog(LOG_LEVEL_INFO);
+ AddLog_P(LOG_LEVEL_INFO, str);
}
@@ -2681,8 +2680,7 @@ int16_t Run_Scripter(const char *type, int8_t tlen, char *js) {
}
cmd[count]=*lp++;
}
- //snprintf_P(log_data, sizeof(log_data), tmp);
- //AddLog(LOG_LEVEL_INFO);
+ //AddLog_P(LOG_LEVEL_INFO, tmp);
// replace vars in cmd
char *tmp=cmdmem+SCRIPT_CMDMEM/2;
Replace_Cmd_Vars(cmd,tmp,SCRIPT_CMDMEM/2);
@@ -2694,8 +2692,7 @@ int16_t Run_Scripter(const char *type, int8_t tlen, char *js) {
} else {
if (!sflag) {
tasm_cmd_activ=1;
- snprintf_P(log_data, sizeof(log_data), PSTR("Script: performs \"%s\""), tmp);
- AddLog(glob_script_mem.script_loglevel&0x7f);
+ AddLog_P2(glob_script_mem.script_loglevel&0x7f, PSTR("Script: performs \"%s\""), tmp);
} else if (sflag==2) {
// allow recursive call
} else {
@@ -3544,8 +3541,7 @@ void ScriptSaveSettings(void) {
if (bitRead(Settings.rule_enabled, 0)) {
int16_t res=Init_Scripter();
if (res) {
- snprintf_P(log_data, sizeof(log_data), PSTR("script init error: %d"),res);
- AddLog(LOG_LEVEL_INFO);
+ AddLog_P2(LOG_LEVEL_INFO, PSTR("script init error: %d"), res);
return;
}
Run_Scripter(">B",2,0);
diff --git a/tasmota/xdsp_02_ssd1306.ino b/tasmota/xdsp_02_ssd1306.ino
index e263901bc..0bee9d10d 100644
--- a/tasmota/xdsp_02_ssd1306.ino
+++ b/tasmota/xdsp_02_ssd1306.ino
@@ -124,8 +124,7 @@ void Ssd1306PrintLog(void)
strlcpy(disp_screen_buffer[last_row], txt, disp_screen_buffer_cols);
DisplayFillScreen(last_row);
- snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]);
- AddLog(LOG_LEVEL_DEBUG);
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]);
renderer->println(disp_screen_buffer[last_row]);
renderer->Updateframe();
diff --git a/tasmota/xdsp_07_sh1106.ino b/tasmota/xdsp_07_sh1106.ino
index eba56a442..00babbdf9 100644
--- a/tasmota/xdsp_07_sh1106.ino
+++ b/tasmota/xdsp_07_sh1106.ino
@@ -119,8 +119,7 @@ void SH1106PrintLog(void)
strlcpy(disp_screen_buffer[last_row], txt, disp_screen_buffer_cols);
DisplayFillScreen(last_row);
- snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]);
- AddLog(LOG_LEVEL_DEBUG);
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]);
renderer->println(disp_screen_buffer[last_row]);
renderer->Updateframe();
diff --git a/tasmota/xdsp_09_SSD1351.ino b/tasmota/xdsp_09_SSD1351.ino
index ad7e86f99..0391bf8f4 100644
--- a/tasmota/xdsp_09_SSD1351.ino
+++ b/tasmota/xdsp_09_SSD1351.ino
@@ -112,8 +112,7 @@ void SSD1351PrintLog(void)
strlcpy(disp_screen_buffer[last_row], txt, disp_screen_buffer_cols);
DisplayFillScreen(last_row);
- snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]);
- AddLog(LOG_LEVEL_DEBUG);
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]);
renderer->println(disp_screen_buffer[last_row]);
renderer->Updateframe();
diff --git a/tasmota/xsns_41_max44009.ino b/tasmota/xsns_41_max44009.ino
index 2cdf6b78d..e1ef99ee1 100644
--- a/tasmota/xsns_41_max44009.ino
+++ b/tasmota/xsns_41_max44009.ino
@@ -75,8 +75,7 @@ void Max4409Detect(void)
if ((I2cValidRead8(&buffer1, max44009_address, REG_LOWER_THRESHOLD)) &&
(I2cValidRead8(&buffer2, max44009_address, REG_THRESHOLD_TIMER))) {
- //snprintf(log_data, sizeof(log_data), "MAX44009 %x: %x, %x", max44009_address, (int)buffer1, (int)buffer2);
- //AddLog(LOG_LEVEL_DEBUG_MORE);
+ //AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR("MAX44009 %x: %x, %x"), max44009_address, (int)buffer1, (int)buffer2);
if ((0x00 == buffer1) &&
(0xFF == buffer2)) {
diff --git a/tasmota/xsns_42_scd30.ino b/tasmota/xsns_42_scd30.ino
index d3bb5cbef..12ac95cd2 100644
--- a/tasmota/xsns_42_scd30.ino
+++ b/tasmota/xsns_42_scd30.ino
@@ -23,6 +23,8 @@
#define XSNS_42 42
#define XI2C_29 29 // See I2CDEVICES.md
+//#define SCD30_DEBUG
+
#define SCD30_ADDRESS 0x61
#define SCD30_MAX_MISSED_READS 3
@@ -118,24 +120,23 @@ void Scd30Update(void)
scd30ErrorState = SCD30_STATE_ERROR_DATA_CRC;
scd30CrcError_count++;
#ifdef SCD30_DEBUG
- snprintf_P(log_data, sizeof(log_data), "SCD30: CRC error, CRC error: %ld, CO2 zero: %ld, good: %ld, no data: %ld, sc30_reset: %ld, i2c_reset: %ld", scd30CrcError_count, scd30Co2Zero_count, scd30GoodMeas_count, scd30DataNotAvailable_count, scd30Reset_count, i2cReset_count);
- AddLog(LOG_LEVEL_ERROR);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: CRC error, CRC error: %ld, CO2 zero: %ld, good: %ld, no data: %ld, sc30_reset: %ld, i2c_reset: %ld"),
+ scd30CrcError_count, scd30Co2Zero_count, scd30GoodMeas_count, scd30DataNotAvailable_count, scd30Reset_count, i2cReset_count);
#endif
break;
case ERROR_SCD30_CO2_ZERO:
scd30Co2Zero_count++;
#ifdef SCD30_DEBUG
- snprintf_P(log_data, sizeof(log_data), "SCD30: CO2 zero, CRC error: %ld, CO2 zero: %ld, good: %ld, no data: %ld, sc30_reset: %ld, i2c_reset: %ld", scd30CrcError_count, scd30Co2Zero_count, scd30GoodMeas_count, scd30DataNotAvailable_count, scd30Reset_count, i2cReset_count);
- AddLog(LOG_LEVEL_ERROR);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: CO2 zero, CRC error: %ld, CO2 zero: %ld, good: %ld, no data: %ld, sc30_reset: %ld, i2c_reset: %ld"),
+ scd30CrcError_count, scd30Co2Zero_count, scd30GoodMeas_count, scd30DataNotAvailable_count, scd30Reset_count, i2cReset_count);
#endif
break;
default: {
scd30ErrorState = SCD30_STATE_ERROR_READ_MEAS;
#ifdef SCD30_DEBUG
- snprintf_P(log_data, sizeof(log_data), "SCD30: Update: ReadMeasurement error: 0x%lX, counter: %ld", error, scd30Loop_count);
- AddLog(LOG_LEVEL_ERROR);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: Update: ReadMeasurement error: 0x%lX, counter: %ld"), error, scd30Loop_count);
#endif
return;
}
@@ -147,10 +148,9 @@ void Scd30Update(void)
case SCD30_STATE_ERROR_DATA_CRC: {
//scd30IsDataValid = false;
#ifdef SCD30_DEBUG
- snprintf_P(log_data, sizeof(log_data), "SCD30: in error state: %d, good: %ld, no data: %ld, sc30 reset: %ld, i2c reset: %ld", scd30ErrorState, scd30GoodMeas_count, scd30DataNotAvailable_count, scd30Reset_count, i2cReset_count);
- AddLog(LOG_LEVEL_ERROR);
- snprintf_P(log_data, sizeof(log_data), "SCD30: got CRC error, try again, counter: %ld", scd30Loop_count);
- AddLog(LOG_LEVEL_ERROR);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: in error state: %d, good: %ld, no data: %ld, sc30 reset: %ld, i2c reset: %ld"),
+ scd30ErrorState, scd30GoodMeas_count, scd30DataNotAvailable_count, scd30Reset_count, i2cReset_count);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: got CRC error, try again, counter: %ld"), scd30Loop_count);
#endif
scd30ErrorState = ERROR_SCD30_NO_ERROR;
}
@@ -159,17 +159,15 @@ void Scd30Update(void)
case SCD30_STATE_ERROR_READ_MEAS: {
//scd30IsDataValid = false;
#ifdef SCD30_DEBUG
- snprintf_P(log_data, sizeof(log_data), "SCD30: in error state: %d, good: %ld, no data: %ld, sc30 reset: %ld, i2c reset: %ld", scd30ErrorState, scd30GoodMeas_count, scd30DataNotAvailable_count, scd30Reset_count, i2cReset_count);
- AddLog(LOG_LEVEL_ERROR);
- snprintf_P(log_data, sizeof(log_data), "SCD30: not answering, sending soft reset, counter: %ld", scd30Loop_count);
- AddLog(LOG_LEVEL_ERROR);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: in error state: %d, good: %ld, no data: %ld, sc30 reset: %ld, i2c reset: %ld"),
+ scd30ErrorState, scd30GoodMeas_count, scd30DataNotAvailable_count, scd30Reset_count, i2cReset_count);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: not answering, sending soft reset, counter: %ld"), scd30Loop_count);
#endif
scd30Reset_count++;
error = scd30.softReset();
if (error) {
#ifdef SCD30_DEBUG
- snprintf_P(log_data, sizeof(log_data), "SCD30: resetting got error: 0x%lX", error);
- AddLog(LOG_LEVEL_ERROR);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: resetting got error: 0x%lX"), error);
#endif
error >>= 8;
if (error == 4) {
@@ -186,18 +184,16 @@ void Scd30Update(void)
case SCD30_STATE_ERROR_SOFT_RESET: {
//scd30IsDataValid = false;
#ifdef SCD30_DEBUG
- snprintf_P(log_data, sizeof(log_data), "SCD30: in error state: %d, good: %ld, no data: %ld, sc30 reset: %ld, i2c reset: %ld", scd30ErrorState, scd30GoodMeas_count, scd30DataNotAvailable_count, scd30Reset_count, i2cReset_count);
- AddLog(LOG_LEVEL_ERROR);
- snprintf_P(log_data, sizeof(log_data), "SCD30: clearing i2c bus");
- AddLog(LOG_LEVEL_ERROR);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: in error state: %d, good: %ld, no data: %ld, sc30 reset: %ld, i2c reset: %ld"),
+ scd30ErrorState, scd30GoodMeas_count, scd30DataNotAvailable_count, scd30Reset_count, i2cReset_count);
+ AddLog_P(LOG_LEVEL_ERROR, PSTR("SCD30: clearing i2c bus"));
#endif
i2cReset_count++;
error = scd30.clearI2CBus();
if (error) {
scd30ErrorState = SCD30_STATE_ERROR_I2C_RESET;
#ifdef SCD30_DEBUG
- snprintf_P(log_data, sizeof(log_data), "SCD30: error clearing i2c bus: 0x%lX", error);
- AddLog(LOG_LEVEL_ERROR);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: error clearing i2c bus: 0x%lX"), error);
#endif
} else {
scd30ErrorState = ERROR_SCD30_NO_ERROR;
@@ -342,8 +338,7 @@ bool Scd30CommandSensor()
if (error)
{
#ifdef SCD30_DEBUG
- snprintf_P(log_data, sizeof(log_data), "SCD30: error getting FW version: 0x%lX", error);
- AddLog(LOG_LEVEL_ERROR);
+ AddLog_P2(LOG_LEVEL_ERROR, PSTR("SCD30: error getting FW version: 0x%lX"), error);
#endif
serviced = false;
}
From 29366222a538283fb86b94eb1000e8fc6cb17bee Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Tue, 24 Dec 2019 16:42:47 +0100
Subject: [PATCH 146/559] Re-enable mqttuser/mqttpassword for AWS IoT
---
tasmota/xdrv_02_mqtt.ino | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/tasmota/xdrv_02_mqtt.ino b/tasmota/xdrv_02_mqtt.ino
index f9ff3e67d..910a2ea6f 100644
--- a/tasmota/xdrv_02_mqtt.ino
+++ b/tasmota/xdrv_02_mqtt.ino
@@ -32,9 +32,7 @@ const char kMqttCommands[] PROGMEM = "|" // No prefix
#if defined(USE_MQTT_TLS) && !defined(USE_MQTT_TLS_CA_CERT)
D_CMND_MQTTFINGERPRINT "|"
#endif
-#if !defined(USE_MQTT_TLS) || !defined(USE_MQTT_AWS_IOT) // user and password are disabled with AWS IoT
D_CMND_MQTTUSER "|" D_CMND_MQTTPASSWORD "|"
-#endif
#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
D_CMND_TLSKEY "|"
#endif
@@ -46,9 +44,7 @@ void (* const MqttCommand[])(void) PROGMEM = {
#if defined(USE_MQTT_TLS) && !defined(USE_MQTT_TLS_CA_CERT)
&CmndMqttFingerprint,
#endif
-#if !defined(USE_MQTT_TLS) || !defined(USE_MQTT_AWS_IOT) // user and password are disabled with AWS IoT
&CmndMqttUser, &CmndMqttPassword,
-#endif
#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
&CmndTlsKey,
#endif
@@ -640,7 +636,6 @@ void MqttReconnect(void)
#endif
#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT)
AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT "AWS IoT endpoint: %s"), SettingsText(SET_MQTT_HOST));
- //if (MqttClient.connect(mqtt_client, nullptr, nullptr, nullptr, 0, false, nullptr)) {
if (MqttClient.connect(mqtt_client, nullptr, nullptr, stopic, 1, false, mqtt_data, MQTT_CLEAN_SESSION)) {
#else
if (MqttClient.connect(mqtt_client, mqtt_user, mqtt_pwd, stopic, 1, true, mqtt_data, MQTT_CLEAN_SESSION)) {
@@ -737,7 +732,6 @@ void CmndMqttFingerprint(void)
}
#endif
-#if !defined(USE_MQTT_TLS) || !defined(USE_MQTT_AWS_IOT) // user and password are disabled with AWS IoT
void CmndMqttUser(void)
{
if (XdrvMailbox.data_len > 0) {
@@ -757,7 +751,6 @@ void CmndMqttPassword(void)
Response_P(S_JSON_COMMAND_ASTERISK, XdrvMailbox.command);
}
}
-#endif // USE_MQTT_AWS_IOT
void CmndMqttlog(void)
{
@@ -1171,10 +1164,8 @@ const char HTTP_FORM_MQTT1[] PROGMEM =
"" D_PORT " (" STR(MQTT_PORT) ")
"
"" D_CLIENT " (%s)
";
const char HTTP_FORM_MQTT2[] PROGMEM =
-#if !defined(USE_MQTT_TLS) || !defined(USE_MQTT_AWS_IOT) // user and password disabled with AWS IoT
"" D_USER " (" MQTT_USER ")
"
"" D_PASSWORD "
"
-#endif // USE_MQTT_AWS_IOT
"" D_TOPIC " = %%topic%% (%s)
"
"" D_FULL_TOPIC " (%s)
";
From b66cc3479f363b61b53104aa40d841467062fe51 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 24 Dec 2019 17:10:50 +0100
Subject: [PATCH 147/559] Add support for user defined GUI button text
Add commands ``WebButton1`` until ``WebButton16`` to support user defined GUI button text (#7166)
---
RELEASENOTES.md | 1 +
tasmota/CHANGELOG.md | 1 +
tasmota/i18n.h | 1 +
tasmota/settings.ino | 13 +++++-----
tasmota/support_command.ino | 2 +-
tasmota/tasmota.h | 9 +++----
tasmota/xdrv_01_webserver.ino | 47 +++++++++++++++++++++++++++++------
7 files changed, 54 insertions(+), 20 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index c9293bb95..6be1dfa9f 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -56,6 +56,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
- Change number of rule ``Var``s and ``Mem``s from 5 to 16 (#4933)
- Change number of ``FriendlyName``s from 4 to 8
+- Add commands ``WebButton1`` until ``WebButton16`` to support user defined GUI button text (#7166)
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
- Add support for GPS as NTP server by Christian Baars and Adrian Scillato
- Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index d6b1d0ab7..0c12ed15c 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -6,6 +6,7 @@
- Change number of ``FriendlyName``s from 4 to 8
- Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor
- Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309)
+- Add commands ``WebButton1`` until ``WebButton16`` to support user defined GUI button text (#7166)
### 8.0.0.1 20191221
diff --git a/tasmota/i18n.h b/tasmota/i18n.h
index 1ae20dcde..e726fdf5d 100644
--- a/tasmota/i18n.h
+++ b/tasmota/i18n.h
@@ -334,6 +334,7 @@
#define D_CMND_WEBREFRESH "WebRefresh"
#define D_CMND_WEBSEND "WebSend"
#define D_CMND_WEBCOLOR "WebColor"
+#define D_CMND_WEBBUTTON "WebButton"
#define D_CMND_WEBSENSOR "WebSensor"
#define D_CMND_EMULATION "Emulation"
#define D_CMND_SENDMAIL "Sendmail"
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index ce6c33ff4..6412d3fc9 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -551,13 +551,14 @@ bool SettingsUpdateText(uint32_t index, const char* replace_me)
char* SettingsText(uint32_t index)
{
- if (index >= SET_MAX) {
- return nullptr; // Setting not supported - internal error
- }
-
char* position = Settings.text_pool;
- for (;index > 0; index--) {
- while (*position++ != '\0') { }
+
+ if (index >= SET_MAX) {
+ position += settings_text_size -1; // Setting not supported - internal error - return empty string
+ } else {
+ for (;index > 0; index--) {
+ while (*position++ != '\0') { }
+ }
}
return position;
}
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index 265926b59..f6413dd57 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -1311,7 +1311,7 @@ void CmndFriendlyname(void)
} else {
snprintf_P(stemp1, sizeof(stemp1), PSTR(FRIENDLY_NAME "%d"), XdrvMailbox.index);
}
- SettingsUpdateText(SET_FRIENDLYNAME1 + XdrvMailbox.index -1, (SC_DEFAULT == Shortcut()) ? stemp1 : XdrvMailbox.data);
+ SettingsUpdateText(SET_FRIENDLYNAME1 + XdrvMailbox.index -1, ('"' == XdrvMailbox.data[0]) ? "" : (SC_DEFAULT == Shortcut()) ? stemp1 : XdrvMailbox.data);
}
ResponseCmndIdxChar(SettingsText(SET_FRIENDLYNAME1 + XdrvMailbox.index -1));
}
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index 2e539bb49..c0231d3c9 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -73,8 +73,9 @@ const uint8_t MAX_RULE_SETS = 3; // Max number of rule sets of size 5
const uint16_t MAX_RULE_SIZE = 512; // Max number of characters in rules
// Changes to the following MAX_ defines need to be in line with enum SettingsTextIndex
-const uint8_t MAX_FRIENDLYNAMES = 8; // Max number of Friendly names
const uint8_t MAX_RULE_MEMS = 16; // Max number of saved vars
+const uint8_t MAX_FRIENDLYNAMES = 8; // Max number of Friendly names
+const uint8_t MAX_BUTTON_TEXT = 16; // Max number of GUI button labels
const uint8_t MAX_HUE_DEVICES = 15; // Max number of Philips Hue device per emulation
@@ -290,10 +291,8 @@ enum SettingsTextIndex { SET_OTAURL,
SET_MEM9, SET_MEM10, SET_MEM11, SET_MEM12, SET_MEM13, SET_MEM14, SET_MEM15, SET_MEM16,
SET_FRIENDLYNAME1, SET_FRIENDLYNAME2, SET_FRIENDLYNAME3, SET_FRIENDLYNAME4,
SET_FRIENDLYNAME5, SET_FRIENDLYNAME6, SET_FRIENDLYNAME7, SET_FRIENDLYNAME8,
- SET_BUTTON1, SET_BUTTON2, SET_BUTTON3, SET_BUTTON4,
- SET_BUTTON5, SET_BUTTON6, SET_BUTTON7, SET_BUTTON8,
- SET_BUTTON9, SET_BUTTON10, SET_BUTTON11, SET_BUTTON12,
- SET_BUTTON13, SET_BUTTON14, SET_BUTTON15, SET_BUTTON16,
+ SET_BUTTON1, SET_BUTTON2, SET_BUTTON3, SET_BUTTON4, SET_BUTTON5, SET_BUTTON6, SET_BUTTON7, SET_BUTTON8,
+ SET_BUTTON9, SET_BUTTON10, SET_BUTTON11, SET_BUTTON12, SET_BUTTON13, SET_BUTTON14, SET_BUTTON15, SET_BUTTON16,
SET_MAX };
enum CommandSource { SRC_IGNORE, SRC_MQTT, SRC_RESTART, SRC_BUTTON, SRC_SWITCH, SRC_BACKLOG, SRC_SERIAL, SRC_WEBGUI, SRC_WEBCOMMAND, SRC_WEBCONSOLE, SRC_PULSETIMER,
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index c25cdc3f6..d86562bb3 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -1014,7 +1014,7 @@ void HandleRoot(void)
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_MAIN_MENU);
- char stemp[10];
+ char stemp[33];
WSContentStart_P(S_MAIN_MENU);
#ifdef USE_SCRIPT_WEB_DISPLAY
@@ -1106,14 +1106,19 @@ void HandleRoot(void)
WSContentSend_P(PSTR(""));
#ifdef USE_SONOFF_IFAN
if (IsModuleIfan()) {
- WSContentSend_P(HTTP_DEVICE_CONTROL, 36, 1, D_BUTTON_TOGGLE, "");
+ WSContentSend_P(HTTP_DEVICE_CONTROL, 36, 1,
+ (strlen(SettingsText(SET_BUTTON1))) ? SettingsText(SET_BUTTON1) : D_BUTTON_TOGGLE,
+ "");
for (uint32_t i = 0; i < MaxFanspeed(); i++) {
snprintf_P(stemp, sizeof(stemp), PSTR("%d"), i);
- WSContentSend_P(HTTP_DEVICE_CONTROL, 16, i +2, stemp, "");
+ WSContentSend_P(HTTP_DEVICE_CONTROL, 16, i +2,
+ (strlen(SettingsText(SET_BUTTON2 + i))) ? SettingsText(SET_BUTTON2 + i) : stemp,
+ "");
}
} else {
#endif // USE_SONOFF_IFAN
for (uint32_t idx = 1; idx <= devices_present; idx++) {
+ bool set_button = ((idx <= MAX_BUTTON_TEXT) && strlen(SettingsText(SET_BUTTON1 + idx -1)));
#ifdef USE_SHUTTER
if (Settings.flag3.shutter_mode) { // SetOption80 - Enable shutter support
bool shutter_used = false;
@@ -1124,13 +1129,17 @@ void HandleRoot(void)
}
}
if (shutter_used) {
- WSContentSend_P(HTTP_DEVICE_CONTROL, 100 / devices_present, idx, (idx % 2) ? "▲" : "▼" , "");
+ WSContentSend_P(HTTP_DEVICE_CONTROL, 100 / devices_present, idx,
+ (set_button) ? SettingsText(SET_BUTTON1 + idx -1) : (idx % 2) ? "▲" : "▼",
+ "");
continue;
}
}
#endif // USE_SHUTTER
snprintf_P(stemp, sizeof(stemp), PSTR(" %d"), idx);
- WSContentSend_P(HTTP_DEVICE_CONTROL, 100 / devices_present, idx, (devices_present < 5) ? D_BUTTON_TOGGLE : "", (devices_present > 1) ? stemp : "");
+ WSContentSend_P(HTTP_DEVICE_CONTROL, 100 / devices_present, idx,
+ (set_button) ? SettingsText(SET_BUTTON1 + idx -1) : (devices_present < 5) ? D_BUTTON_TOGGLE : "",
+ (set_button) ? "" : (devices_present > 1) ? stemp : "");
}
#ifdef USE_SONOFF_IFAN
}
@@ -1146,7 +1155,9 @@ void HandleRoot(void)
if (idx > 0) { WSContentSend_P(PSTR("
")); }
for (uint32_t j = 0; j < 4; j++) {
idx++;
- WSContentSend_P(PSTR(" | "), idx, idx); // &k is related to WebGetArg("k", tmp, sizeof(tmp));
+ snprintf_P(stemp, sizeof(stemp), PSTR("%d"), idx);
+ WSContentSend_P(PSTR(" | "), idx, // &k is related to WebGetArg("k", tmp, sizeof(tmp));
+ (strlen(SettingsText(SET_BUTTON1 + idx -1))) ? SettingsText(SET_BUTTON1 + idx -1) : stemp);
}
}
WSContentSend_P(PSTR("
"));
@@ -2733,7 +2744,8 @@ const char kWebCommands[] PROGMEM = "|" // No prefix
#ifdef USE_SENDMAIL
D_CMND_SENDMAIL "|"
#endif
- D_CMND_WEBSERVER "|" D_CMND_WEBPASSWORD "|" D_CMND_WEBLOG "|" D_CMND_WEBREFRESH "|" D_CMND_WEBSEND "|" D_CMND_WEBCOLOR "|" D_CMND_WEBSENSOR "|" D_CMND_CORS;
+ D_CMND_WEBSERVER "|" D_CMND_WEBPASSWORD "|" D_CMND_WEBLOG "|" D_CMND_WEBREFRESH "|" D_CMND_WEBSEND "|" D_CMND_WEBCOLOR "|"
+ D_CMND_WEBSENSOR "|" D_CMND_WEBBUTTON "|" D_CMND_CORS;
void (* const WebCommand[])(void) PROGMEM = {
#ifdef USE_EMULATION
@@ -2742,7 +2754,8 @@ void (* const WebCommand[])(void) PROGMEM = {
#ifdef USE_SENDMAIL
&CmndSendmail,
#endif
- &CmndWebServer, &CmndWebPassword, &CmndWeblog, &CmndWebRefresh, &CmndWebSend, &CmndWebColor, &CmndWebSensor, &CmndCors };
+ &CmndWebServer, &CmndWebPassword, &CmndWeblog, &CmndWebRefresh, &CmndWebSend, &CmndWebColor,
+ &CmndWebSensor, &CmndWebButton, &CmndCors };
/*********************************************************************************************\
* Commands
@@ -2863,6 +2876,24 @@ void CmndWebSensor(void)
ResponseJsonEnd();
}
+void CmndWebButton(void)
+{
+ if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= MAX_BUTTON_TEXT)) {
+ if (!XdrvMailbox.usridx) {
+ mqtt_data[0] = '\0';
+ for (uint32_t i = 0; i < MAX_BUTTON_TEXT; i++) {
+ ResponseAppend_P(PSTR("%c\"WebButton%d\":\"%s\""), (i) ? ',' : '{', i +1, SettingsText(SET_BUTTON1 +i));
+ }
+ ResponseJsonEnd();
+ } else {
+ if (XdrvMailbox.data_len > 0) {
+ SettingsUpdateText(SET_BUTTON1 + XdrvMailbox.index -1, ('"' == XdrvMailbox.data[0]) ? "" : XdrvMailbox.data);
+ }
+ ResponseCmndIdxChar(SettingsText(SET_BUTTON1 + XdrvMailbox.index -1));
+ }
+ }
+}
+
void CmndCors(void)
{
if (XdrvMailbox.data_len > 0) {
From ad312c04144d17e6d38de34f1b44503480852739 Mon Sep 17 00:00:00 2001
From: Federico Leoni
Date: Tue, 24 Dec 2019 13:21:56 -0300
Subject: [PATCH 148/559] Update xdrv_12_home_assistant.ino
---
tasmota/xdrv_12_home_assistant.ino | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tasmota/xdrv_12_home_assistant.ino b/tasmota/xdrv_12_home_assistant.ino
index 274b5f42a..50ac66761 100644
--- a/tasmota/xdrv_12_home_assistant.ino
+++ b/tasmota/xdrv_12_home_assistant.ino
@@ -100,6 +100,12 @@ const char HASS_DISCOVER_SENSOR_HUM[] PROGMEM =
"\"val_tpl\":\"{{value_json['%s'].Humidity}}\"," // "SI7021-14":{"Temperature":null,"Humidity":null} -> {{ value_json['SI7021-14'].Humidity }}
"\"dev_cla\":\"humidity\""; // humidity
+const char HASS_DISCOVER_SENSOR_MOIST[] PROGMEM =
+ ",\"unit_of_meas\":\"%%\"," // %
+ "\"val_tpl\":\"{{value_json['%s'].Moisture}}\"," // "ANALOG":{"Moisture":78} -> {{ value_json['ANALOG'].Moisture }}
+ "\"dev_cla\":\"humidity\"," // humidity
+ "\"ic\":\"mdi:cup-water\""; // cup-water icon
+
const char HASS_DISCOVER_SENSOR_PRESS[] PROGMEM =
",\"unit_of_meas\":\"%s\"," // PressureUnit() setting
"\"val_tpl\":\"{{value_json['%s'].%s}}\"," // "BME280":{"Temperature":19.7,"Humidity":27.8,"Pressure":990.1} -> {{ value_json['BME280'].Pressure }}
@@ -473,6 +479,8 @@ void HAssAnnounceSensor(const char* sensorname, const char* subsensortype)
TryResponseAppend_P(HASS_DISCOVER_SENSOR_AMPERE, sensorname, subsensortype);
} else if (!strcmp_P(subsensortype, PSTR(D_JSON_ILLUMINANCE))){
TryResponseAppend_P(HASS_DISCOVER_SENSOR_ILLUMINANCE, sensorname, subsensortype);
+ } else if (!strcmp_P(subsensortype, PSTR(D_JSON_MOISTURE))){
+ TryResponseAppend_P(HASS_DISCOVER_SENSOR_MOIST, sensorname, subsensortype);
} else {
if (is_sensor){
TryResponseAppend_P(PSTR(",\"unit_of_meas\":\" \"")); // " " As unit of measurement to get a value graph (not available for binary sensors)
From 8cf7c6fbc212929f397c202af0009369ebe6d249 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 24 Dec 2019 17:25:21 +0100
Subject: [PATCH 149/559] Bump version to 8.0.0.3
---
RELEASENOTES.md | 2 +-
tasmota/CHANGELOG.md | 4 ++++
tasmota/tasmota_version.h | 2 +-
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 6be1dfa9f..c7566764e 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -50,7 +50,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
## Changelog
-### Version 8.0.0.2
+### Version 8.0.0.3
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 0c12ed15c..b351cb091 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -1,5 +1,9 @@
## Unreleased (development)
+### 8.0.0.3 20191224
+
+- Version bump due to internal Settings change
+
### 8.0.0.2 20191223
- Changed Settings variable namings
diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h
index e69d4fd39..57329bcd1 100644
--- a/tasmota/tasmota_version.h
+++ b/tasmota/tasmota_version.h
@@ -20,7 +20,7 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x08000002;
+const uint32_t VERSION = 0x08000003;
// Lowest compatible version
const uint32_t VERSION_COMPATIBLE = 0x07010006;
From 72f2e944d5070eeaffac8ecc89a373cc7c5e5353 Mon Sep 17 00:00:00 2001
From: gemu2015
Date: Wed, 25 Dec 2019 09:04:54 +0100
Subject: [PATCH 150/559] scripter pram update
---
tasmota/settings.h | 2 +-
tasmota/settings.ino | 5 -----
tasmota/xdrv_10_scripter.ino | 11 ++++++-----
3 files changed, 7 insertions(+), 11 deletions(-)
diff --git a/tasmota/settings.h b/tasmota/settings.h
index eddc4f04b..dfe35be60 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -421,7 +421,7 @@ struct SYSCFG {
unsigned long weight_calibration; // 7C4
unsigned long energy_frequency_calibration; // 7C8 also used by HX711 to save last weight
uint16_t web_refresh; // 7CC
- char script_pram[5][10]; // 7CE
+ uint8_t script_pram[50]; // 7CE
char rules[MAX_RULE_SETS][MAX_RULE_SIZE]; // 800 uses 512 bytes in v5.12.0m, 3 x 512 bytes in v5.14.0b
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index 6412d3fc9..8181440d7 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -1378,11 +1378,6 @@ void SettingsDelta(void)
SettingsUpdateText(SET_NTPSERVER1, Settings.ex_ntp_server[0]);
SettingsUpdateText(SET_NTPSERVER2, Settings.ex_ntp_server[1]);
SettingsUpdateText(SET_NTPSERVER3, Settings.ex_ntp_server[2]);
- SettingsUpdateText(SET_MEM1, Settings.script_pram[0]);
- SettingsUpdateText(SET_MEM2, Settings.script_pram[1]);
- SettingsUpdateText(SET_MEM3, Settings.script_pram[2]);
- SettingsUpdateText(SET_MEM4, Settings.script_pram[3]);
- SettingsUpdateText(SET_MEM5, Settings.script_pram[4]);
SettingsUpdateText(SET_FRIENDLYNAME1, Settings.ex_friendlyname[0]);
SettingsUpdateText(SET_FRIENDLYNAME2, Settings.ex_friendlyname[1]);
SettingsUpdateText(SET_FRIENDLYNAME3, Settings.ex_friendlyname[2]);
diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino
index 27d72c717..6b97fa68a 100755
--- a/tasmota/xdrv_10_scripter.ino
+++ b/tasmota/xdrv_10_scripter.ino
@@ -56,7 +56,8 @@ keywords if then else endif, or, and are better readable for beginners (others m
#define SCRIPT_MAXSSIZE 48
#define SCRIPT_EOL '\n'
#define SCRIPT_FLOAT_PRECISION 2
-#define SCRIPT_MAXPERM (5*10)-4/sizeof(float)
+#define PMEM_SIZE sizeof(Settings.script_pram)
+#define SCRIPT_MAXPERM (PMEM_SIZE)-4/sizeof(float)
#define MAX_SCRIPT_SIZE MAX_RULE_SIZE*MAX_RULE_SETS
// offsets epoch readings by 1.1.2019 00:00:00 to fit into float with second resolution
@@ -1575,7 +1576,7 @@ chknext:
case 'r':
if (!strncmp(vname,"ram",3)) {
- fvar=glob_script_mem.script_mem_size+(glob_script_mem.script_size)+(5*10);
+ fvar=glob_script_mem.script_mem_size+(glob_script_mem.script_size)+(PMEM_SIZE);
goto exit;
}
break;
@@ -3004,7 +3005,7 @@ void Scripter_save_pvars(void) {
if (vtp[count].bits.is_permanent && !vtp[count].bits.is_string) {
uint8_t index=vtp[count].index;
mlen+=sizeof(float);
- if (mlen>5*10) {
+ if (mlen>PMEM_SIZE) {
vtp[count].bits.is_permanent=0;
return;
}
@@ -3018,7 +3019,7 @@ void Scripter_save_pvars(void) {
char *sp=glob_script_mem.glob_snp+(index*glob_script_mem.max_ssize);
uint8_t slen=strlen(sp);
mlen+=slen+1;
- if (mlen>5*10) {
+ if (mlen>PMEM_SIZE) {
vtp[count].bits.is_permanent=0;
return;
}
@@ -4751,7 +4752,7 @@ bool Xdrv10(uint8_t function)
glob_script_mem.script_size=MAX_SCRIPT_SIZE;
glob_script_mem.flags=0;
glob_script_mem.script_pram=(uint8_t*)Settings.script_pram[0];
- glob_script_mem.script_pram_size=5*10;
+ glob_script_mem.script_pram_size=PMEM_SIZE;
#ifdef USE_BUTTON_EVENT
for (uint32_t cnt=0;cnt
Date: Wed, 25 Dec 2019 09:09:43 +0100
Subject: [PATCH 151/559] sml max vars for large meter definitions redefinable
---
tasmota/xsns_53_sml.ino | 26 ++++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/tasmota/xsns_53_sml.ino b/tasmota/xsns_53_sml.ino
index 7aa0fd22d..672f7f826 100755
--- a/tasmota/xsns_53_sml.ino
+++ b/tasmota/xsns_53_sml.ino
@@ -493,19 +493,19 @@ const uint8_t meter[]=
//=====================================================
// median filter eliminates outliers, but uses much RAM and CPU cycles
-// 672 bytes extra RAM with MAX_VARS = 16
+// 672 bytes extra RAM with SML_MAX_VARS = 16
// default compile on, but must be enabled by descriptor flag 16
// may be undefined if RAM must be saved
#define USE_SML_MEDIAN_FILTER
// max number of vars , may be adjusted
-#ifndef MAX_VARS
-#define MAX_VARS 20
+#ifndef SML_MAX_VARS
+#define SML_MAX_VARS 20
#endif
// max number of meters , may be adjusted
#define MAX_METERS 5
-double meter_vars[MAX_VARS];
+double meter_vars[SML_MAX_VARS];
// calulate deltas
#define MAX_DVARS MAX_METERS*2
double dvalues[MAX_DVARS];
@@ -540,7 +540,7 @@ uint8_t sml_desc_cnt;
struct SML_MEDIAN_FILTER {
double buffer[MEDIAN_SIZE];
int8_t index;
-} sml_mf[MAX_VARS];
+} sml_mf[SML_MAX_VARS];
#ifndef FLT_MAX
#define FLT_MAX 99999999
@@ -1326,7 +1326,7 @@ void SML_Decode(uint8_t index) {
uint32_t ind;
ind=atoi(mp);
while (*mp>='0' && *mp<='9') mp++;
- if (ind<1 || ind>MAX_VARS) ind=1;
+ if (ind<1 || ind>SML_MAX_VARS) ind=1;
dvar=meter_vars[ind-1];
for (uint8_t p=0;p<5;p++) {
if (*mp=='@') {
@@ -1345,7 +1345,7 @@ void SML_Decode(uint8_t index) {
}
ind=atoi(mp);
while (*mp>='0' && *mp<='9') mp++;
- if (ind<1 || ind>MAX_VARS) ind=1;
+ if (ind<1 || ind>SML_MAX_VARS) ind=1;
switch (opr) {
case '+':
if (iflg) dvar+=ind;
@@ -1381,7 +1381,7 @@ void SML_Decode(uint8_t index) {
while (*mp==' ') mp++;
uint8_t ind=atoi(mp);
while (*mp>='0' && *mp<='9') mp++;
- if (ind<1 || ind>MAX_VARS) ind=1;
+ if (ind<1 || ind>SML_MAX_VARS) ind=1;
uint32_t delay=atoi(mp)*1000;
uint32_t dtime=millis()-dtimes[dindex];
if (dtime>delay) {
@@ -1604,7 +1604,7 @@ void SML_Decode(uint8_t index) {
}
nextsect:
// next section
- if (vindex
Date: Wed, 25 Dec 2019 09:57:37 +0100
Subject: [PATCH 152/559] revert
---
tasmota/settings.h | 2 +-
tasmota/settings.ino | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/tasmota/settings.h b/tasmota/settings.h
index dfe35be60..eddc4f04b 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -421,7 +421,7 @@ struct SYSCFG {
unsigned long weight_calibration; // 7C4
unsigned long energy_frequency_calibration; // 7C8 also used by HX711 to save last weight
uint16_t web_refresh; // 7CC
- uint8_t script_pram[50]; // 7CE
+ char script_pram[5][10]; // 7CE
char rules[MAX_RULE_SETS][MAX_RULE_SIZE]; // 800 uses 512 bytes in v5.12.0m, 3 x 512 bytes in v5.14.0b
diff --git a/tasmota/settings.ino b/tasmota/settings.ino
index 8181440d7..6412d3fc9 100644
--- a/tasmota/settings.ino
+++ b/tasmota/settings.ino
@@ -1378,6 +1378,11 @@ void SettingsDelta(void)
SettingsUpdateText(SET_NTPSERVER1, Settings.ex_ntp_server[0]);
SettingsUpdateText(SET_NTPSERVER2, Settings.ex_ntp_server[1]);
SettingsUpdateText(SET_NTPSERVER3, Settings.ex_ntp_server[2]);
+ SettingsUpdateText(SET_MEM1, Settings.script_pram[0]);
+ SettingsUpdateText(SET_MEM2, Settings.script_pram[1]);
+ SettingsUpdateText(SET_MEM3, Settings.script_pram[2]);
+ SettingsUpdateText(SET_MEM4, Settings.script_pram[3]);
+ SettingsUpdateText(SET_MEM5, Settings.script_pram[4]);
SettingsUpdateText(SET_FRIENDLYNAME1, Settings.ex_friendlyname[0]);
SettingsUpdateText(SET_FRIENDLYNAME2, Settings.ex_friendlyname[1]);
SettingsUpdateText(SET_FRIENDLYNAME3, Settings.ex_friendlyname[2]);
From 19dbcc777010db4aba0ba5e2be9067fe40bffbb7 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 25 Dec 2019 12:39:38 +0100
Subject: [PATCH 153/559] Release 8.1.0
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index f3412a9c7..35abdb7e6 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ In addition to the [release webpage](https://github.com/arendst/Tasmota/releases
## Development
-[](https://github.com/arendst/Tasmota)
+[](https://github.com/arendst/Tasmota)
[](http://thehackbox.org/tasmota/)
[](https://travis-ci.org/arendst/Tasmota)
From b07e6b5386a059a93a4dec118234962a0d8c67a0 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 25 Dec 2019 12:59:21 +0100
Subject: [PATCH 154/559] Add fallback information
---
RELEASENOTES.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index c7566764e..1e048b2f6 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -17,6 +17,8 @@ See [migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-pat
6. Migrate to **Tasmota 8.1**
7. Migrate to **Tasmota 8.x**
+While fallback or downgrading is common practice it was never supported due to Settings additions or changes in newer releases. Starting with release **v8.1.0 Doris** the Settings are re-allocated in such a way that fallback is only allowed and possible to release **v7.2.0 Constance**. Once at v7.2.0 you're on your own when downgrading even further.
+
## Supported Core versions
This release will be supported from ESP8266/Arduino library Core version **2.6.1** due to reported security and stability issues on previous Core version.
From 15acf8487d980794f475804abcc51eb94f2895dc Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 25 Dec 2019 13:28:29 +0100
Subject: [PATCH 155/559] Bump version to 8.1.0.1
---
RELEASENOTES.md | 2 +-
tasmota/CHANGELOG.md | 10 ++++++++--
tasmota/tasmota_version.h | 2 +-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 1e048b2f6..578d145b9 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -52,7 +52,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
## Changelog
-### Version 8.0.0.3
+### Version 8.1.0 Doris
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index b351cb091..80c6b480b 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -1,5 +1,13 @@
## Unreleased (development)
+### 8.1.0.1 20191225
+
+## Released
+
+### 8.1.0 20191225
+
+- Release
+
### 8.0.0.3 20191224
- Version bump due to internal Settings change
@@ -22,8 +30,6 @@
- Add Zigbee coalesce sensor attributes into a single message
- Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300
-## Released
-
### 7.2.0 20191221
- Release
diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h
index 57329bcd1..8bc0a50e1 100644
--- a/tasmota/tasmota_version.h
+++ b/tasmota/tasmota_version.h
@@ -20,7 +20,7 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x08000003;
+const uint32_t VERSION = 0x08010001;
// Lowest compatible version
const uint32_t VERSION_COMPATIBLE = 0x07010006;
From 4f6a74730016d780273b9a0be1314d5136b59ccf Mon Sep 17 00:00:00 2001
From: Ian Duffy
Date: Wed, 25 Dec 2019 21:44:38 +0000
Subject: [PATCH 156/559] Add manufactureURL to the hue description.xml
endpoint
The netdisco library by HA looks for manufacture, modelNumber and manufactureURL for its auto discovery mechanism. https://github.com/home-assistant/netdisco/blob/master/netdisco/discoverables/philips_hue.py
Currently, tasmota doesn't return this, and as a result home assistant doesn't discover the emulator.
this commit adds a manufactureURL so discovery works
---
tasmota/xdrv_20_hue.ino | 1 +
1 file changed, 1 insertion(+)
diff --git a/tasmota/xdrv_20_hue.ino b/tasmota/xdrv_20_hue.ino
index 80e85d821..c9f0031b0 100644
--- a/tasmota/xdrv_20_hue.ino
+++ b/tasmota/xdrv_20_hue.ino
@@ -124,6 +124,7 @@ const char HUE_DESCRIPTION_XML[] PROGMEM =
"Amazon-Echo-HA-Bridge ({x1)"
// "Philips hue ({x1)"
"Royal Philips Electronics"
+ "http://www.philips.com"
"Philips hue Personal Wireless Lighting"
"Philips hue bridge 2012"
"929000226503"
From aa155f9a52a28421ecb17d9977034d663497ebca Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Wed, 25 Dec 2019 21:59:42 -0300
Subject: [PATCH 157/559] AP MODE: Added Restore Config Button
---
tasmota/xdrv_01_webserver.ino | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index d86562bb3..b9bad2812 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -1693,10 +1693,11 @@ void HandleWifiConfiguration(void)
}
if (WifiIsInManagerMode()) {
- WSContentSpaceButton(BUTTON_RESTART);
#ifndef FIRMWARE_MINIMAL
+ WSContentSpaceButton(BUTTON_RESTORE);
WSContentSpaceButton(BUTTON_RESET_CONFIGURATION);
#endif // FIRMWARE_MINIMAL
+ WSContentSpaceButton(BUTTON_RESTART);
} else {
WSContentSpaceButton(BUTTON_CONFIGURATION);
}
@@ -1970,7 +1971,11 @@ void HandleRestoreConfiguration(void)
WSContentSendStyle();
WSContentSend_P(HTTP_FORM_RST);
WSContentSend_P(HTTP_FORM_RST_UPG, D_RESTORE);
- WSContentSpaceButton(BUTTON_CONFIGURATION);
+ if (WifiIsInManagerMode()) {
+ WSContentSpaceButton(BUTTON_MAIN);
+ } else {
+ WSContentSpaceButton(BUTTON_CONFIGURATION);
+ }
WSContentStop();
Web.upload_error = 0;
From 96842eed7343b2e782eb2dba7c5aadb5c5abbee0 Mon Sep 17 00:00:00 2001
From: Adrian Scillato <35405447+ascillato@users.noreply.github.com>
Date: Wed, 25 Dec 2019 22:13:17 -0300
Subject: [PATCH 158/559] Better Button Spacing
---
tasmota/xdrv_01_webserver.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index b9bad2812..d2b405437 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -1695,7 +1695,7 @@ void HandleWifiConfiguration(void)
if (WifiIsInManagerMode()) {
#ifndef FIRMWARE_MINIMAL
WSContentSpaceButton(BUTTON_RESTORE);
- WSContentSpaceButton(BUTTON_RESET_CONFIGURATION);
+ WSContentButton(BUTTON_RESET_CONFIGURATION);
#endif // FIRMWARE_MINIMAL
WSContentSpaceButton(BUTTON_RESTART);
} else {
From e8626e9cca73188ba4b07d9f910b2c71fb9fab98 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Thu, 26 Dec 2019 12:26:06 +0100
Subject: [PATCH 159/559] Fix command processing
Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
---
RELEASENOTES.md | 14 ++------------
tasmota/CHANGELOG.md | 2 ++
tasmota/support.ino | 7 +++++++
3 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 578d145b9..e2a87362a 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -52,16 +52,6 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
## Changelog
-### Version 8.1.0 Doris
+### Version 8.1.0.1
-- Change Settings text handling allowing variable length text within a total text pool of 699 characters
-- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
-- Change number of rule ``Var``s and ``Mem``s from 5 to 16 (#4933)
-- Change number of ``FriendlyName``s from 4 to 8
-- Add commands ``WebButton1`` until ``WebButton16`` to support user defined GUI button text (#7166)
-- Add support for max 150 characters in most command parameter strings (#3686, #4754)
-- Add support for GPS as NTP server by Christian Baars and Adrian Scillato
-- Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309)
-- Add Zigbee coalesce sensor attributes into a single message
-- Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor
-- Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300
+- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 80c6b480b..c208e88b8 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -2,6 +2,8 @@
### 8.1.0.1 20191225
+- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
+
## Released
### 8.1.0 20191225
diff --git a/tasmota/support.ino b/tasmota/support.ino
index 4b2bc49fb..9b66fbc2a 100644
--- a/tasmota/support.ino
+++ b/tasmota/support.ino
@@ -731,6 +731,13 @@ bool DecodeCommand(const char* haystack, void (* const MyCommand[])(void))
{
GetTextIndexed(XdrvMailbox.command, CMDSZ, 0, haystack); // Get prefix if available
int prefix_length = strlen(XdrvMailbox.command);
+ if (prefix_length) {
+ char prefix[prefix_length +1];
+ snprintf_P(prefix, sizeof(prefix), XdrvMailbox.topic); // Copy prefix part only
+ if (strcasecmp(prefix, XdrvMailbox.command)) {
+ return false; // Prefix not in command
+ }
+ }
int command_code = GetCommandCode(XdrvMailbox.command + prefix_length, CMDSZ, XdrvMailbox.topic + prefix_length, haystack);
if (command_code > 0) { // Skip prefix
XdrvMailbox.command_code = command_code -1;
From 3fe685d2521b006490f9bd2ed7b1fc1033bf93da Mon Sep 17 00:00:00 2001
From: localhost61 <33861984+localhost61@users.noreply.github.com>
Date: Thu, 26 Dec 2019 13:28:27 +0100
Subject: [PATCH 160/559] Update French language to v8.1.0.1
---
tasmota/language/fr-FR.h | 106 +++++++++++++++++++--------------------
1 file changed, 53 insertions(+), 53 deletions(-)
diff --git a/tasmota/language/fr-FR.h b/tasmota/language/fr-FR.h
index 840421ff3..d9d7019f8 100644
--- a/tasmota/language/fr-FR.h
+++ b/tasmota/language/fr-FR.h
@@ -28,7 +28,7 @@
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
* Use online command Prefix to translate cmnd, stat and tele.
*
- * Updated until v7.1.2.4
+ * Updated until v8.1.0.1
\*********************************************************************/
#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -83,7 +83,7 @@
#define D_DNS_SERVER "Serveur DNS"
#define D_DONE "Fait"
#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
+#define D_ECO2 "eCO₂"
#define D_EMULATION "Émulation"
#define D_ENABLED "Activé"
#define D_ERASE "Effacer"
@@ -113,7 +113,7 @@
#define D_LIGHT "Lumière"
#define D_LWT "LWT"
#define D_MODULE "Module"
-#define D_MOISTURE "Moisture"
+#define D_MOISTURE "Humidité"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "multi-pression"
#define D_NOISE "Bruit"
@@ -354,7 +354,7 @@
#define D_UPLOAD_ERR_11 "Erreur d'effacement du chip RF"
#define D_UPLOAD_ERR_12 "Erreur d'accès en écriture au chip RF"
#define D_UPLOAD_ERR_13 "Erreur de décodage du firmware RF"
-#define D_UPLOAD_ERR_14 "Not compatible"
+#define D_UPLOAD_ERR_14 "Incompatible"
#define D_UPLOAD_ERROR_CODE "Code d'erreur téléchargement"
#define D_ENTER_COMMAND "Saisir une commande"
@@ -500,7 +500,7 @@
#define D_CALIBRATE "Étalonner"
#define D_CALIBRATION "Étalonnage"
-//xsns_35_tx20.ino
+//xsns_35_TX20.ino
#define D_TX20_WIND_DIRECTION "Direction du vent"
#define D_TX20_WIND_SPEED "Vitesse du vent"
#define D_TX20_WIND_SPEED_AVG "Vitesse Moy."
@@ -521,7 +521,7 @@
#define D_SENSOR_I2C_SDA "I2C SDA"
#define D_SENSOR_WS2812 "WS2812"
#define D_SENSOR_DFR562 "MP3 Player"
-#define D_SENSOR_IRSEND "ÉmetIR"
+#define D_SENSOR_IRSEND "IR TX"
#define D_SENSOR_SWITCH "Inter." // Suffix "1"
#define D_SENSOR_BUTTON "Bouton" // Suffix "1"
#define D_SENSOR_RELAY "Relais" // Suffix "1i"
@@ -529,15 +529,15 @@
#define D_SENSOR_LED_LINK "LedLink" // Suffix "i"
#define D_SENSOR_PWM "PWM" // Suffix "1"
#define D_SENSOR_COUNTER "Compteur" // Suffix "1"
-#define D_SENSOR_IRRECV "RécptIR"
-#define D_SENSOR_MHZ_RX "MHZ Rx"
-#define D_SENSOR_MHZ_TX "MHZ Tx"
-#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
-#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
-#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
-#define D_SENSOR_SAIR_RX "SAir Rx"
-#define D_SENSOR_SAIR_TX "SAir Tx"
+#define D_SENSOR_IRRECV "IR RX"
+#define D_SENSOR_MHZ_RX "MHZ RX"
+#define D_SENSOR_MHZ_TX "MHZ TX"
+#define D_SENSOR_PZEM004_RX "PZEM004 RX"
+#define D_SENSOR_PZEM016_RX "PZEM016 RX"
+#define D_SENSOR_PZEM017_RX "PZEM017 RX"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX TX"
+#define D_SENSOR_SAIR_RX "SAir RX"
+#define D_SENSOR_SAIR_TX "SAir TX"
#define D_SENSOR_SPI_CS "SPI CS"
#define D_SENSOR_SPI_DC "SPI DC"
#define D_SENSOR_SPI_MISO "SPI MISO"
@@ -545,28 +545,28 @@
#define D_SENSOR_SPI_CLK "SPI CLK"
#define D_SENSOR_BACKLIGHT "RétroÉcl"
#define D_SENSOR_PMS5003 "PMS5003"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
-#define D_SENSOR_HPMA_RX "HPMA Rx"
-#define D_SENSOR_HPMA_TX "HPMA Tx"
-#define D_SENSOR_SBR_RX "SerBr Rx"
-#define D_SENSOR_SBR_TX "SerBr Tx"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 RX"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 TX"
+#define D_SENSOR_HPMA_RX "HPMA RX"
+#define D_SENSOR_HPMA_TX "HPMA TX"
+#define D_SENSOR_SBR_RX "SerBr RX"
+#define D_SENSOR_SBR_TX "SerBr TX"
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_SDM120_TX "SDMx20 Tx"
-#define D_SENSOR_SDM120_RX "SDMx20 Rx"
-#define D_SENSOR_SDM630_TX "SDM630 Tx"
-#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_SDM120_TX "SDMx20 TX"
+#define D_SENSOR_SDM120_RX "SDMx20 RX"
+#define D_SENSOR_SDM630_TX "SDM630 TX"
+#define D_SENSOR_SDM630_RX "SDM630 RX"
#define D_SENSOR_TM1638_CLK "TM16 CLK"
#define D_SENSOR_TM1638_DIO "TM16 DIO"
#define D_SENSOR_TM1638_STB "TM16 STB"
#define D_SENSOR_HX711_SCK "HX711 SCK"
#define D_SENSOR_HX711_DAT "HX711 DAT"
#define D_SENSOR_TX20_TX "TX20"
-#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
-#define D_SENSOR_TUYA_TX "Tuya Tx"
-#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_RFSEND "RF TX"
+#define D_SENSOR_RFRECV "RF RX"
+#define D_SENSOR_TUYA_TX "Tuya TX"
+#define D_SENSOR_TUYA_RX "Tuya RX"
#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
#define D_SENSOR_SSPI_MISO "SSPI MISO"
@@ -575,8 +575,8 @@
#define D_SENSOR_SSPI_CS "SSPI CS"
#define D_SENSOR_SSPI_DC "SSPI DC"
#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ Rx"
-#define D_SENSOR_AZ_TX "AZ Tx"
+#define D_SENSOR_AZ_RX "AZ RX"
+#define D_SENSOR_AZ_TX "AZ TX"
#define D_SENSOR_MAX31855_CS "MX31855 CS"
#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
#define D_SENSOR_MAX31855_DO "MX31855 DO"
@@ -584,13 +584,13 @@
#define D_SENSOR_NRG_CF1 "HLWBL CF1"
#define D_SENSOR_HLW_CF "HLW8012 CF"
#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 TX"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 RX"
#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
-#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
-#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
-#define D_SENSOR_PN532_TX "PN532 Tx"
-#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_CSE7766_TX "CSE7766 TX"
+#define D_SENSOR_CSE7766_RX "CSE7766 RX"
+#define D_SENSOR_PN532_TX "PN532 TX"
+#define D_SENSOR_PN532_RX "PN532 RX"
#define D_SENSOR_SM16716_CLK "SM16716 CLK"
#define D_SENSOR_SM16716_DAT "SM16716 DAT"
#define D_SENSOR_SM16716_POWER "SM16716 PWR"
@@ -598,18 +598,18 @@
#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
#define D_SENSOR_ARIRFRCV "ALux IrRcv"
#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Serial Tx"
-#define D_SENSOR_RXD "Serial Rx"
+#define D_SENSOR_TXD "Série TX"
+#define D_SENSOR_RXD "Série RX"
#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
#define D_SENSOR_HRE_CLOCK "HRE Clock"
#define D_SENSOR_HRE_DATA "HRE Data"
#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
#define D_SENSOR_BUZZER "Buzzer"
#define D_SENSOR_OLED_RESET "OLED Reset"
-#define D_SENSOR_ZIGBEE_TXD "Zigbee Tx"
-#define D_SENSOR_ZIGBEE_RXD "Zigbee Rx"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
+#define D_SENSOR_ZIGBEE_TXD "Zigbee TX"
+#define D_SENSOR_ZIGBEE_RXD "Zigbee RX"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 TX"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 RX"
#define D_SENSOR_IBEACON_TX "iBeacon TX"
#define D_SENSOR_IBEACON_RX "iBeacon RX"
#define D_SENSOR_RDM6300_RX "RDM6300 RX"
@@ -620,19 +620,19 @@
#define D_SENSOR_A4988_MS1 "A4988 MS1"
#define D_SENSOR_A4988_MS2 "A4988 MS2"
#define D_SENSOR_A4988_MS3 "A4988 MS3"
-#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
-#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
-#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
-#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_DDS2382_TX "DDS238-2 TX"
+#define D_SENSOR_DDS2382_RX "DDS238-2 RX"
+#define D_SENSOR_DDSU666_TX "DDSU666 TX"
+#define D_SENSOR_DDSU666_RX "DDSU666 RX"
#define D_SENSOR_SM2135_CLK "SM2135 Clk"
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
-#define D_SENSOR_DEEPSLEEP "DeepSleep"
+#define D_SENSOR_DEEPSLEEP "Hibernation"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
+#define D_SENSOR_SLAVE_TX "Esclave TX"
+#define D_SENSOR_SLAVE_RX "Esclave RX"
+#define D_SENSOR_SLAVE_RESET "Esclave Rst"
#define D_SENSOR_GPS_TX "GPS TX"
+#define D_SENSOR_GPS_RX "GPS RX"
// Units
#define D_UNIT_AMPERE "A"
@@ -647,7 +647,7 @@
#define D_UNIT_KILOOHM "kΩ"
#define D_UNIT_KILOWATTHOUR "kWh"
#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
#define D_UNIT_MICROMETER "µm"
#define D_UNIT_MICROSECOND "µs"
#define D_UNIT_MILLIAMPERE "mA"
From baacd946252350eb429caf79cf1b78f43704d271 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Thu, 26 Dec 2019 17:23:10 +0100
Subject: [PATCH 161/559] Update de-DE.h
---
tasmota/language/de-DE.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h
index 89d36103d..9e30f42f8 100644
--- a/tasmota/language/de-DE.h
+++ b/tasmota/language/de-DE.h
@@ -28,7 +28,7 @@
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
* Use online command Prefix to translate cmnd, stat and tele.
*
- * Updated until v8.0.0
+ * Updated until v8.1.0.1
\*********************************************************************/
//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -66,7 +66,7 @@
#define D_BYTES "Bytes"
#define D_CELSIUS "Celsius"
#define D_CHANNEL "Kanal"
-#define D_CO2 "CO²"
+#define D_CO2 "CO₂"
#define D_CODE "code" // Button code
#define D_COLDLIGHT "kalt"
#define D_COMMAND "Befehl"
@@ -83,7 +83,7 @@
#define D_DNS_SERVER "DNS-Server"
#define D_DONE "erledigt"
#define D_DST_TIME "DST"
-#define D_ECO2 "eCO2"
+#define D_ECO2 "eCO₂"
#define D_EMULATION "Emulation"
#define D_ENABLED "aktiviert"
#define D_ERASE "löschen"
@@ -647,7 +647,7 @@
#define D_UNIT_KILOOHM "kΩ"
#define D_UNIT_KILOWATTHOUR "kWh"
#define D_UNIT_LUX "lx"
-#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m3"
+#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
#define D_UNIT_MICROMETER "µm"
#define D_UNIT_MICROSECOND "µs"
#define D_UNIT_MILLIAMPERE "mA"
From 35e306f41047c6c842add3b6742c312a8b3d9793 Mon Sep 17 00:00:00 2001
From: Grzegorz
Date: Thu, 26 Dec 2019 19:11:51 +0100
Subject: [PATCH 162/559] Update pl-PL.h
Update PL to last changes.
---
tasmota/language/pl-PL.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h
index 58168516d..4f2c9c069 100644
--- a/tasmota/language/pl-PL.h
+++ b/tasmota/language/pl-PL.h
@@ -62,7 +62,7 @@
#define D_BRIGHTLIGHT "Jasny"
#define D_BSSID "BSSId"
#define D_BUTTON "Przycisk"
-#define D_BY "by" // Written by me
+#define D_BY "przez" // Written by me
#define D_BYTES "Bajtów"
#define D_CELSIUS "Celsiusz"
#define D_CHANNEL "Kanał"
@@ -71,7 +71,7 @@
#define D_COLDLIGHT "Zimny"
#define D_COMMAND "Komenda"
#define D_CONNECTED "Połączony"
-#define D_CORS_DOMAIN "CORS Domain"
+#define D_CORS_DOMAIN "Domena CORS"
#define D_COUNT "Licz"
#define D_COUNTER "Licznik"
#define D_CURRENT "Prąd" // As in Voltage and Current
@@ -113,7 +113,7 @@
#define D_LIGHT "Światło"
#define D_LWT "LWT"
#define D_MODULE "Moduł"
-#define D_MOISTURE "Moisture"
+#define D_MOISTURE "Wilgotność"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "Wielokrotne naciśnięcie"
#define D_NOISE "Szum"
From 6ebe7b219b1cbef0d3834cd51f04fd6e8fc16275 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Thu, 26 Dec 2019 22:07:29 +0100
Subject: [PATCH 163/559] Fix White blend mode #7325
---
tasmota/xdrv_04_light.ino | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino
index d6e71ab08..a7f996914 100644
--- a/tasmota/xdrv_04_light.ino
+++ b/tasmota/xdrv_04_light.ino
@@ -1682,8 +1682,10 @@ void LightAnimate(void)
cur_col_10bits[i] = changeUIntScale(cur_col_10bits[i] - min_rgb_10, 0, 1023, 0, adjust10);
cur_col[i] = changeUIntScale(cur_col[i] - min_rgb, 0, 255, 0, Settings.rgbwwTable[i]);
}
+
// compute the adjusted white levels for 10 and 8 bits
- uint32_t white_10 = changeUIntScale(min_rgb_10, 0, 255, 0, Settings.rgbwwTable[3]); // set white power down corrected with rgbwwTable[3]
+ uint32_t adjust_w_10 = changeUIntScale(Settings.rgbwwTable[3], 0, 255, 0, 1023);
+ uint32_t white_10 = changeUIntScale(min_rgb_10, 0, 1023, 0, adjust_w_10); // set white power down corrected with rgbwwTable[3]
uint32_t white = changeUIntScale(min_rgb, 0, 255, 0, Settings.rgbwwTable[3]); // set white power down corrected with rgbwwTable[3]
if (LST_RGBW == Light.subtype) {
// we simply set the white channel
@@ -1863,8 +1865,9 @@ void LightSetOutputs(const uint8_t *cur_col, const uint16_t *cur_col_10bits) {
}
}
}
- // AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR("LGT: R %02X(%d) G %02X(%d) B %02X(%d), CW %02X(%d) WW %02x(%d), D %d"),
- // cur_col[0], cur_col_10bits[0], cur_col[1], cur_col_10bits[1], cur_col[2], cur_col_10bits[2], cur_col[3], cur_col_10bits[3], cur_col[4], cur_col_10bits[4], light_state.getDimmer());
+ char msg[24];
+ AddLog_P2(LOG_LEVEL_DEBUG, PSTR("LGT: Channels %s"),
+ ToHex_P((const unsigned char *)cur_col_10bits, 10, msg, sizeof(msg)));
// Some devices need scaled RGB like Sonoff L1
// TODO, should be probably moved to the Sonoff L1 support code
@@ -1873,8 +1876,6 @@ void LightSetOutputs(const uint8_t *cur_col, const uint16_t *cur_col_10bits) {
for (uint32_t i = 0; i < 3; i++) {
scale_col[i] = (0 == max) ? 255 : (255 > max) ? changeUIntScale(cur_col[i], 0, max, 0, 255) : cur_col[i];
}
- // AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR("LGT: R%d(%d) G%d(%d) B%d(%d), C%d(%d) W%d(%d), D%d"),
- // cur_col[0], scale_col[0], cur_col[1], scale_col[1], cur_col[2], scale_col[2], cur_col[3], scale_col[3], cur_col[4], scale_col[4], light_state.getDimmer());
char *tmp_data = XdrvMailbox.data;
char *tmp_topic = XdrvMailbox.topic;
From 24aff9b4156d82e4056cb6bb6106c4325ff9001f Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 27 Dec 2019 11:13:22 +0100
Subject: [PATCH 164/559] Add info to Status 0
- Add SerialConfig to ``Status 1``
- Add WifiPower to ``Status 5``
---
RELEASENOTES.md | 2 ++
tasmota/CHANGELOG.md | 2 ++
tasmota/support_command.ino | 12 ++++++------
tasmota/support_wifi.ino | 7 +++++++
4 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index e2a87362a..f7eabdb5b 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -55,3 +55,5 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
### Version 8.1.0.1
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
+- Add SerialConfig to ``Status 1``
+- Add WifiPower to ``Status 5``
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index c208e88b8..a6bc376b6 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -3,6 +3,8 @@
### 8.1.0.1 20191225
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
+- Add SerialConfig to ``Status 1``
+- Add WifiPower to ``Status 5``
## Released
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index f6413dd57..53f4601a8 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -193,7 +193,7 @@ void CommandHandler(char* topicBuf, char* dataBuf, uint32_t data_len)
// backlog_delay = millis() + (100 * MIN_BACKLOG_DELAY);
backlog_delay = millis() + Settings.param[P_BACKLOG_DELAY];
- char command[CMDSZ];
+ char command[CMDSZ] = { 0 };
XdrvMailbox.command = command;
XdrvMailbox.index = index;
XdrvMailbox.data_len = data_len;
@@ -368,10 +368,10 @@ void CmndStatus(void)
}
if ((0 == payload) || (1 == payload)) {
- Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS1_PARAMETER "\":{\"" D_JSON_BAUDRATE "\":%d,\"" D_CMND_GROUPTOPIC "\":\"%s\",\"" D_CMND_OTAURL "\":\"%s\",\""
+ Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS1_PARAMETER "\":{\"" D_JSON_BAUDRATE "\":%d,\"" D_CMND_SERIALCONFIG "\":\"%s\",\"" D_CMND_GROUPTOPIC "\":\"%s\",\"" D_CMND_OTAURL "\":\"%s\",\""
D_JSON_RESTARTREASON "\":\"%s\",\"" D_JSON_UPTIME "\":\"%s\",\"" D_JSON_STARTUPUTC "\":\"%s\",\"" D_CMND_SLEEP "\":%d,\""
D_JSON_CONFIG_HOLDER "\":%d,\"" D_JSON_BOOTCOUNT "\":%d,\"" D_JSON_SAVECOUNT "\":%d,\"" D_JSON_SAVEADDRESS "\":\"%X\"}}"),
- baudrate, SettingsText(SET_MQTT_GRP_TOPIC), SettingsText(SET_OTAURL),
+ baudrate, GetSerialConfig().c_str(), SettingsText(SET_MQTT_GRP_TOPIC), SettingsText(SET_OTAURL),
GetResetReason().c_str(), GetUptime().c_str(), GetDateAndTime(DT_RESTART).c_str(), Settings.sleep,
Settings.cfg_holder, Settings.bootcount, Settings.save_flag, GetSettingsAddress());
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "1"));
@@ -417,10 +417,10 @@ void CmndStatus(void)
if ((0 == payload) || (5 == payload)) {
Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS5_NETWORK "\":{\"" D_CMND_HOSTNAME "\":\"%s\",\"" D_CMND_IPADDRESS "\":\"%s\",\"" D_JSON_GATEWAY "\":\"%s\",\""
D_JSON_SUBNETMASK "\":\"%s\",\"" D_JSON_DNSSERVER "\":\"%s\",\"" D_JSON_MAC "\":\"%s\",\""
- D_CMND_WEBSERVER "\":%d,\"" D_CMND_WIFICONFIG "\":%d}}"),
+ D_CMND_WEBSERVER "\":%d,\"" D_CMND_WIFICONFIG "\":%d,\"" D_CMND_WIFIPOWER "\":%s}}"),
my_hostname, WiFi.localIP().toString().c_str(), IPAddress(Settings.ip_address[1]).toString().c_str(),
IPAddress(Settings.ip_address[2]).toString().c_str(), IPAddress(Settings.ip_address[3]).toString().c_str(), WiFi.macAddress().c_str(),
- Settings.webserver, Settings.sta_config);
+ Settings.webserver, Settings.sta_config, WifiGetOutputPower().c_str());
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "5"));
}
@@ -1607,7 +1607,7 @@ void CmndWifiPower(void)
}
WifiSetOutputPower();
}
- ResponseCmndFloat((float)(Settings.wifi_output_power) / 10, 1);
+ ResponseCmndChar(WifiGetOutputPower().c_str());
}
#ifdef USE_I2C
diff --git a/tasmota/support_wifi.ino b/tasmota/support_wifi.ino
index c283f1bb5..0d54723ca 100644
--- a/tasmota/support_wifi.ino
+++ b/tasmota/support_wifi.ino
@@ -587,6 +587,13 @@ int WifiState(void)
return state;
}
+String WifiGetOutputPower(void)
+{
+ char stemp1[TOPSZ];
+ dtostrfd((float)(Settings.wifi_output_power) / 10, 1, stemp1);
+ return String(stemp1);
+}
+
void WifiSetOutputPower(void)
{
WiFi.setOutputPower((float)(Settings.wifi_output_power) / 10);
From 5682675ac9faa14c6a80c80f3754015191d88900 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 27 Dec 2019 15:13:40 +0100
Subject: [PATCH 165/559] Fix some serial interface initializations
Fix Sonoff Bridge, Sc, L1, iFan03 and CSE7766 serial interface to forced speed, config and disable logging
---
RELEASENOTES.md | 1 +
tasmota/CHANGELOG.md | 1 +
tasmota/support.ino | 17 +++++++++--------
tasmota/support_tasmota.ino | 10 +++-------
tasmota/tasmota.ino | 2 --
tasmota/xdrv_06_snfbridge.ino | 3 +--
tasmota/xdrv_22_sonoff_ifan.ino | 4 +---
tasmota/xlgt_05_sonoff_l1.ino | 3 +--
tasmota/xnrg_02_cse7766.ino | 3 +--
tasmota/xsns_04_snfsc.ino | 6 +++---
10 files changed, 21 insertions(+), 29 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index f7eabdb5b..b3b5c8c2d 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -54,6 +54,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
### Version 8.1.0.1
+- Fix Sonoff Bridge, Sc, L1, iFan03 and CSE7766 serial interface to forced speed, config and disable logging
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
- Add SerialConfig to ``Status 1``
- Add WifiPower to ``Status 5``
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index a6bc376b6..321d405c5 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -2,6 +2,7 @@
### 8.1.0.1 20191225
+- Fix Sonoff Bridge, Sc, L1, iFan03 and CSE7766 serial interface to forced speed, config and disable logging
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
- Add SerialConfig to ``Status 1``
- Add WifiPower to ``Status 5``
diff --git a/tasmota/support.ino b/tasmota/support.ino
index 9b66fbc2a..32ef55731 100644
--- a/tasmota/support.ino
+++ b/tasmota/support.ino
@@ -790,14 +790,9 @@ String GetSerialConfig(void)
void SetSerialBegin(uint32_t baudrate)
{
- if (seriallog_level) {
- AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION "Set Serial to %s %d bit/s"), GetSerialConfig().c_str(), baudrate);
- delay(100);
- }
+ AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION "Set Serial to %s %d bit/s"), GetSerialConfig().c_str(), baudrate);
Serial.flush();
Serial.begin(baudrate, (SerialConfig)pgm_read_byte(kTasmotaSerialConfig + Settings.serial_config));
- delay(10);
- Serial.println();
}
void SetSerialConfig(uint32_t serial_config)
@@ -812,11 +807,17 @@ void SetSerialConfig(uint32_t serial_config)
void SetSerialBaudrate(int baudrate)
{
Settings.baudrate = baudrate / 300;
- if (Serial.baudRate() == baudrate) { return; }
-
SetSerialBegin(baudrate);
}
+void PrepSerial(int prep_baudrate, uint32_t serial_config)
+{
+ Settings.flag.mqtt_serial = 0; // CMND_SERIALSEND and CMND_SERIALLOG
+ Settings.serial_config = serial_config;
+ baudrate = prep_baudrate;
+ SetSeriallog(LOG_LEVEL_NONE);
+}
+
void ClaimSerial(void)
{
serial_local = true;
diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino
index c649d9379..153d8a1fd 100644
--- a/tasmota/support_tasmota.ino
+++ b/tasmota/support_tasmota.ino
@@ -1296,20 +1296,16 @@ void GpioInit(void)
// devices_present = 1;
}
else if (SONOFF_DUAL == my_module_type) {
- Settings.flag.mqtt_serial = 0; // CMND_SERIALSEND and CMND_SERIALLOG
devices_present = 2;
- baudrate = 19200;
+ PrepSerial(19200, TS_SERIAL_8N1);
}
else if (CH4 == my_module_type) {
- Settings.flag.mqtt_serial = 0; // CMND_SERIALSEND and CMND_SERIALLOG
devices_present = 4;
- baudrate = 19200;
+ PrepSerial(19200, TS_SERIAL_8N1);
}
#ifdef USE_SONOFF_SC
else if (SONOFF_SC == my_module_type) {
- Settings.flag.mqtt_serial = 0; // CMND_SERIALSEND and CMND_SERIALLOG
- devices_present = 0;
- baudrate = 19200;
+ PrepSerial(19200, TS_SERIAL_8N1);
}
#endif // USE_SONOFF_SC
diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino
index e80331366..e2866347e 100644
--- a/tasmota/tasmota.ino
+++ b/tasmota/tasmota.ino
@@ -194,8 +194,6 @@ void setup(void)
RtcRebootSave();
Serial.begin(baudrate);
- delay(10);
- Serial.println();
seriallog_level = LOG_LEVEL_INFO; // Allow specific serial messages until config loaded
snprintf_P(my_version, sizeof(my_version), PSTR("%d.%d.%d"), VERSION >> 24 & 0xff, VERSION >> 16 & 0xff, VERSION >> 8 & 0xff); // Release version 6.3.0
diff --git a/tasmota/xdrv_06_snfbridge.ino b/tasmota/xdrv_06_snfbridge.ino
index 9f8a852d5..56ba3dabc 100644
--- a/tasmota/xdrv_06_snfbridge.ino
+++ b/tasmota/xdrv_06_snfbridge.ino
@@ -578,8 +578,7 @@ bool Xdrv06(uint8_t function)
SonoffBridgeSendCommand(0xA7); // Stop reading RF signals enabling iTead default RF handling
break;
case FUNC_PRE_INIT:
- Settings.flag.mqtt_serial = 0; // CMND_SERIALSEND and CMND_SERIALLOG
- baudrate = 19200;
+ PrepSerial(19200, TS_SERIAL_8N1);
break;
}
}
diff --git a/tasmota/xdrv_22_sonoff_ifan.ino b/tasmota/xdrv_22_sonoff_ifan.ino
index b260952f4..125800367 100644
--- a/tasmota/xdrv_22_sonoff_ifan.ino
+++ b/tasmota/xdrv_22_sonoff_ifan.ino
@@ -217,9 +217,7 @@ void CmndFanspeed(void)
bool SonoffIfanInit(void)
{
if (SONOFF_IFAN03 == my_module_type) {
- Settings.flag.mqtt_serial = 0; // CMND_SERIALSEND and CMND_SERIALLOG
- baudrate = 9600;
- SetSeriallog(LOG_LEVEL_NONE);
+ PrepSerial(9600, TS_SERIAL_8N1);
}
return false; // Continue init chain
}
diff --git a/tasmota/xlgt_05_sonoff_l1.ino b/tasmota/xlgt_05_sonoff_l1.ino
index 3fef84576..11059f6ff 100644
--- a/tasmota/xlgt_05_sonoff_l1.ino
+++ b/tasmota/xlgt_05_sonoff_l1.ino
@@ -222,8 +222,7 @@ void SnfL1ModuleSelected(void)
{
if (SONOFF_L1 == my_module_type) {
if ((pin[GPIO_RXD] < 99) && (pin[GPIO_TXD] < 99)) {
- Settings.flag.mqtt_serial = 0; // CMND_SERIALSEND and CMND_SERIALLOG
- baudrate = 19200;
+ PrepSerial(19200, TS_SERIAL_8N1);
light_type = LT_RGB;
light_flg = XLGT_05;
diff --git a/tasmota/xnrg_02_cse7766.ino b/tasmota/xnrg_02_cse7766.ino
index d52ee9ca3..a10f6cc9d 100644
--- a/tasmota/xnrg_02_cse7766.ino
+++ b/tasmota/xnrg_02_cse7766.ino
@@ -210,8 +210,7 @@ void CseEverySecond(void)
void CseDrvInit(void)
{
if ((3 == pin[GPIO_CSE7766_RX]) && (1 == pin[GPIO_CSE7766_TX])) { // As it uses 8E1 currently only hardware serial is supported
- baudrate = 4800;
- Settings.serial_config = TS_SERIAL_8E1;
+ PrepSerial(4800, TS_SERIAL_8E1);
if (0 == Settings.param[P_CSE7766_INVALID_POWER]) {
Settings.param[P_CSE7766_INVALID_POWER] = CSE_MAX_INVALID_POWER; // SetOption39 1..255
}
diff --git a/tasmota/xsns_04_snfsc.ino b/tasmota/xsns_04_snfsc.ino
index 060321349..7f83f4e06 100644
--- a/tasmota/xsns_04_snfsc.ino
+++ b/tasmota/xsns_04_snfsc.ino
@@ -159,9 +159,6 @@ bool Xsns04(uint8_t function)
if (SONOFF_SC == my_module_type) {
switch (function) {
- case FUNC_INIT:
- SonoffScInit();
- break;
case FUNC_JSON_APPEND:
SonoffScShow(1);
break;
@@ -170,6 +167,9 @@ bool Xsns04(uint8_t function)
SonoffScShow(0);
break;
#endif // USE_WEBSERVER
+ case FUNC_INIT:
+ SonoffScInit();
+ break;
}
}
return result;
From 782414c35d8eaa23d52518c3feafad5b6f15e246 Mon Sep 17 00:00:00 2001
From: Leonid Muravjev
Date: Fri, 20 Dec 2019 22:29:54 +0300
Subject: [PATCH 166/559] ds1624: support for ds1621 and ds1624
[x] the I2C address reservation implemented.
[x] multiple sensors any combination with 8 addresses
[x] with and without HotPlug support
---
BUILDS.md | 3 +-
I2CDEVICES.md | 2 +
RELEASENOTES.md | 2 +
tasmota/tasmota_post.h | 1 +
tasmota/xsns_59_ds1624.ino | 200 +++++++++++++++++++++++++++++++++++++
tools/decode-status.py | 2 +-
6 files changed, 208 insertions(+), 2 deletions(-)
create mode 100644 tasmota/xsns_59_ds1624.ino
diff --git a/BUILDS.md b/BUILDS.md
index 5c897746a..4318635ec 100644
--- a/BUILDS.md
+++ b/BUILDS.md
@@ -107,6 +107,7 @@
| USE_PCF8574 | - | - | - | - | - | - | - |
| USE_HIH6 | - | - | - | - | x | - | - |
| USE_DHT12 | - | - | - | - | x | - | - |
+| USE_DS1624 | - | - | - | - | x | - | - |
| | | | | | | | |
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
| USE_SPI | - | - | - | - | - | - | x |
@@ -148,4 +149,4 @@
| USE_DISPLAY_EPAPER_42 | - | - | - | - | - | - | x |
| USE_DISPLAY_ILI9488 | - | - | - | - | - | - | - |
| USE_DISPLAY_SSD1351 | - | - | - | - | - | - | - |
-| USE_DISPLAY_RA8876 | - | - | - | - | - | - | - |
\ No newline at end of file
+| USE_DISPLAY_RA8876 | - | - | - | - | - | - | - |
diff --git a/I2CDEVICES.md b/I2CDEVICES.md
index 6d0de4e1a..c7b42108f 100644
--- a/I2CDEVICES.md
+++ b/I2CDEVICES.md
@@ -62,4 +62,6 @@ Index | Define | Driver | Device | Address(es) | Description
39 | USE_DISPLAY_RA8876 | xdsp_10 | FT5316 | 0x38 | Touch panel controller
40 | USE_TSL2591 | xsns_57 | TLS2591 | 0x29 | Light intensity sensor
41 | USE_DHT12 | xsns_58 | DHT12 | 0x5C | Temperature and humidity sensor
+ 42 | USE_DS1624 | xsns_59 | DS1621 | 0x48 - 0x4F | Temperature sensor
+ 42 | USE_DS1624 | xsns_59 | DS1624 | 0x48 - 0x4F | Temperature sensor
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index e2a87362a..fb7a2436c 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -50,6 +50,8 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
[Complete list](BUILDS.md) of available feature and sensors.
+For merge for Changelog:
+- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
## Changelog
### Version 8.1.0.1
diff --git a/tasmota/tasmota_post.h b/tasmota/tasmota_post.h
index c9f8396fe..5571da265 100644
--- a/tasmota/tasmota_post.h
+++ b/tasmota/tasmota_post.h
@@ -137,6 +137,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
//#define USE_SI1145 // Add I2C code for SI1145/46/47 sensor (+1k code)
#define USE_LM75AD // Add I2C code for LM75AD sensor (+0k5 code)
#define USE_DHT12 // Add I2C code for DHT12 temperature and humidity sensor (+0k7 code)
+#define USE_DS1624 // Add I2C code for DS1624, DS1621 sensor
//#define USE_APDS9960 // Add I2C code for APDS9960 Proximity Sensor. Disables SHT and VEML6070 (+4k7 code)
//#define USE_MCP230xx // Enable MCP23008/MCP23017 - Must define I2C Address in #define USE_MCP230xx_ADDR below - range 0x20 - 0x27 (+4k7 code)
// #define USE_MCP230xx_ADDR 0x20 // Enable MCP23008/MCP23017 I2C Address to use (Must be within range 0x20 through 0x27 - set according to your wired setup)
diff --git a/tasmota/xsns_59_ds1624.ino b/tasmota/xsns_59_ds1624.ino
new file mode 100644
index 000000000..82ce7d8f6
--- /dev/null
+++ b/tasmota/xsns_59_ds1624.ino
@@ -0,0 +1,200 @@
+/*
+ xsns_59_ds1624.ino - Support for I2C DS1624 Temperature Sensor
+
+ Copyright (C) 2019 Leonid Myravjev
+
+ 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_I2C
+#ifdef USE_DS1624
+
+/*********************************************************************************************\
+ * DS1624,DS1621 - Temperature
+ *
+ * I2C Address: 0x48 - 0x4F
+\*********************************************************************************************/
+
+#define XSNS_59 59
+#define XI2C_42 42 // See I2CDEVICES.md
+
+#define DS1624_MEM_REGISTER 0x17 //only for ds1624, don't exists on 1621
+#define DS1624_CONF_REGISTER 0xAC
+#define DS1624_TEMP_REGISTER 0xAA
+#define DS1624_START_REGISTER 0xEE
+#define DS1624_STOP_REGISTER 0x22
+
+#define DS1621_COUNTER_REGISTER 0xA8 //exists on 1621 and 1624(undocumented)
+#define DS1621_SLOPE_REGISTER 0xA9 //exists on 1624 and 1624(undocumented)
+
+enum {
+ DS1624_TYPE_DS1624,
+ DS1624_TYPE_DS1621
+};
+
+#define DS1624_MAX_SENSORS 8
+bool ds1624_init=false;
+struct {
+ bool valid;
+ float value;
+ int type;
+ char name[9];
+} ds1624_sns[DS1624_MAX_SENSORS];
+
+uint32_t DS1624_Idx2Addr(int idx) {
+ return 0x48 + idx;
+}
+
+void DS1624_HotPlugUp(int idx) {
+ uint32_t addr;
+ uint8_t config,tmp;
+
+ addr = DS1624_Idx2Addr(idx);
+ if (I2cActive(addr)) return;
+ if (!I2cSetDevice(addr)) return;
+ if (I2cValidRead8(&config, addr, DS1624_CONF_REGISTER)) {
+ if (I2cValidRead8(&tmp, addr, DS1624_MEM_REGISTER))
+ ds1624_sns[idx].type=DS1624_TYPE_DS1624;
+ else ds1624_sns[idx].type=DS1624_TYPE_DS1621;
+ if (ds1624_sns[idx].type==DS1624_TYPE_DS1621)
+ snprintf_P(ds1624_sns[idx].name, sizeof(ds1624_sns[idx].name), PSTR("DS1621_%d"), idx);
+ else snprintf_P(ds1624_sns[idx].name, sizeof(ds1624_sns[idx].name), PSTR("DS1624_%d"), idx);
+ I2cSetActiveFound(addr, ds1624_sns[idx].name);
+ ds1624_sns[idx].valid=true;
+ if ((config & 1) == 1) {
+ config &= 0xfe;
+ I2cWrite8(addr, DS1624_CONF_REGISTER, config); //1show off
+ delay(10);// by spec after writing
+ }
+ I2cValidRead(addr, DS1624_START_REGISTER, 1); //FIXME 0 must read, but 0 isn't work for tasmota
+ AddLog_P2(LOG_LEVEL_INFO, "Hot Plug %s addr %x config: %x", ds1624_sns[idx].name, addr, config);
+ }
+}
+
+void DS1624_HotPlugDown(int idx) {
+ uint32_t addr=DS1624_Idx2Addr(idx);
+ if (I2cActive(addr)==false) return;
+ I2cResetActive(addr);
+ ds1624_sns[idx].valid=false;
+ AddLog_P2(LOG_LEVEL_INFO, "Hot UnPlug %s", ds1624_sns[idx].name);
+}
+
+bool DS1624GetTemp(float *value, int idx)
+{
+ uint16_t t;
+ bool result;
+ uint32_t addr=DS1624_Idx2Addr(idx);
+
+ if (!I2cValidRead16(&t, DS1624_Idx2Addr(idx), DS1624_TEMP_REGISTER)) return false;
+ *value = ConvertTemp(((float)(int8_t)(t>>8)) + ((t>>4)&0xf)*0.0625);
+ if (ds1624_sns[idx].type==DS1624_TYPE_DS1621) { // Higher resolution
+ uint8_t perc,remain;
+ if (I2cValidRead8(&remain, addr, DS1621_COUNTER_REGISTER)==false) return true;
+ if (I2cValidRead8(&perc, addr, DS1621_SLOPE_REGISTER)==false) return true;
+ *value += ((float)perc - (float)remain)/((float)perc) - 0.25;
+ }
+ return true;
+}
+
+void DS1624HotPlugScan(void)
+{
+ uint16_t t;
+
+ for (int idx = 0; idx < DS1624_MAX_SENSORS; idx++) {
+ uint32_t addr=DS1624_Idx2Addr(idx);
+ if ((I2cActive(addr)==true) && (ds1624_sns[idx].valid==false))
+ continue; // is busy by another driver
+ if (!I2cValidRead16(&t, DS1624_Idx2Addr(idx), DS1624_TEMP_REGISTER)) {
+ DS1624_HotPlugDown(idx);
+ continue; }
+ DS1624_HotPlugUp(idx);
+ }
+}
+
+void DS1624EverySecond(void)
+{
+ float t;
+ for (int i = 0; i < DS1624_MAX_SENSORS; i++) {
+ if (ds1624_sns[i].valid==false) continue;
+ if (!DS1624GetTemp(&t, i)) continue;
+ ds1624_sns[i].value=t;
+ }
+}
+
+void DS1624Show(bool json)
+{
+ int i;
+ char temperature[33];
+
+ for (i = 0; i < DS1624_MAX_SENSORS; i++) {
+ if (ds1624_sns[i].valid==false) continue;
+
+ dtostrfd(ds1624_sns[i].value, Settings.flag2.temperature_resolution, temperature);
+ if (json) {
+ ResponseAppend_P(PSTR(",\"%s\":{\"" D_JSON_TEMPERATURE "\":%s}"), ds1624_sns[i].name, temperature);
+ if (0 == tele_period) { //FIXME 0==i WTF?
+ #ifdef USE_DOMOTICZ
+ DomoticzSensor(DZ_TEMP, temperature);
+ #endif // USE_DOMOTICZ
+ #ifdef USE_KNX
+ KnxSensor(KNX_TEMPERATURE, temperature);
+ #endif // USE_KNX
+ }
+ #ifdef USE_WEBSERVER
+ } else {
+ WSContentSend_PD(HTTP_SNS_TEMP, ds1624_sns[i].name, temperature, TempUnit());
+ #endif // USE_WEBSERVER
+ }
+ }
+}
+
+/*********************************************************************************************\
+ * Interface
+\*********************************************************************************************/
+
+#define FUNC_HOTPLUG_SCAN 999 // FIXME remove it after HOTPLUG supported
+
+bool Xsns59(uint8_t function)
+{
+ if (!I2cEnabled(XI2C_20)) { return false; }
+
+ bool result = false;
+ if (FUNC_INIT == function) {
+ if (ds1624_init==false) {
+ memset(ds1624_sns, 0, sizeof(ds1624_sns));
+ ds1624_init=true;
+ DS1624HotPlugScan(); //If HotPlug is off
+ }
+ }
+ switch (function) {
+ case FUNC_HOTPLUG_SCAN:
+ DS1624HotPlugScan();
+ break;
+ case FUNC_EVERY_SECOND:
+ DS1624EverySecond();
+ break;
+ case FUNC_JSON_APPEND:
+ DS1624Show(1);
+ break;
+ #ifdef USE_WEBSERVER
+ case FUNC_WEB_SENSOR:
+ DS1624Show(0);
+ break;
+ #endif // USE_WEBSERVER
+ }
+ return result;
+}
+
+#endif // USE_DS1624
+#endif // USE_I2C
diff --git a/tools/decode-status.py b/tools/decode-status.py
index 492c300fa..81c5c0fc1 100755
--- a/tools/decode-status.py
+++ b/tools/decode-status.py
@@ -188,7 +188,7 @@ a_features = [[
"USE_SHUTTER","USE_PCF8574","USE_DDSU666","USE_DEEPSLEEP",
"USE_SONOFF_SC","USE_SONOFF_RF","USE_SONOFF_L1","USE_EXS_DIMMER",
"USE_ARDUINO_SLAVE","USE_HIH6","USE_HPMA","USE_TSL2591",
- "USE_DHT12","","USE_GPS","",
+ "USE_DHT12","USE_DS1624","USE_GPS","",
"","","","",
"","","",""
]]
From e48e5859cddeee636e43d01749482212aed3e491 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Fri, 27 Dec 2019 21:02:23 +0100
Subject: [PATCH 167/559] Change Lights: simplified gamma correction and 10
bits internal computation
---
tasmota/CHANGELOG.md | 1 +
tasmota/xdrv_04_light.ino | 341 ++++++++++++++++++--------------------
2 files changed, 166 insertions(+), 176 deletions(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 321d405c5..077384325 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -6,6 +6,7 @@
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
- Add SerialConfig to ``Status 1``
- Add WifiPower to ``Status 5``
+- Change Lights: simplified gamma correction and 10 bits internal computation
## Released
diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino
index a7f996914..ecb966053 100644
--- a/tasmota/xdrv_04_light.ino
+++ b/tasmota/xdrv_04_light.ino
@@ -112,12 +112,11 @@
* to adjust leds with different power
* .g If rgbwwTable[4] is zero, blend RGB with White and adjust the level of
* White channel according to rgbwwTable[3]
- * .h Avoid PMW values between 1008 and 1022, issue #1146
- * .i Scale ranges from 10 bits to 0..PWMRange (by default 1023) so no change
+ * .h Scale ranges from 10 bits to 0..PWMRange (by default 1023) so no change
* by default.
- * .j Apply port remapping from Option37
- * .k Invert PWM value if port is of type PMWxi instead of PMWx
- * .l Apply PWM value with analogWrite() - if pin is configured
+ * .i Apply port remapping from Option37
+ * .j Invert PWM value if port is of type PMWxi instead of PMWx
+ * .k Apply PWM value with analogWrite() - if pin is configured
*
\*********************************************************************************************/
@@ -161,73 +160,82 @@ struct LCwColor {
const uint8_t MAX_FIXED_COLD_WARM = 4;
const LCwColor kFixedColdWarm[MAX_FIXED_COLD_WARM] PROGMEM = { 0,0, 255,0, 0,255, 128,128 };
-// New version of Gamma correction table, with adaptative resolution
-// from 11 bits (lower values) to 8 bits (upper values).
-// We're using the fact that lower values are small and can fit within 8 bits
-// To save flash space, the array is only 8 bits uint
-#ifdef XFUNC_PTR_IN_ROM
-const uint8_t _ledTable[] PROGMEM = {
-#else
-const uint8_t _ledTable[] = {
-#endif
- // 11 bits resolution
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, // 11 bits, 0..2047
- 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, // 11 bits, 0..2047
- 7, 8, 8, 9, 10, 10, 11, 12, 12, 13, 14, 15, 16, 17, 18, 19, // 11 bits, 0..2047
- 20, 21, 22, 24, 25, 26, 28, 29, 30, 32, 33, 35, 37, 38, 40, 42, // 11 bits, 0..2047
- // 10 bits resolution
- 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 36, 37, 38, 39, // 10 bits, 0..1023
- 41, 42, 44, 45, 47, 48, 50, 51, 53, 55, 56, 58, 60, 62, 64, 65, // 10 bits, 0..1023
- 67, 69, 71, 73, 75, 78, 80, 82, 84, 86, 89, 91, 93, 96, 98,101, // 10 bits, 0..1023
- 103,106,108,111,114,116,119,122,125,128,131,134,137,140,143,146, // 10 bits, 0..1023
- // 9 bits resolution
- 75, 77, 78, 80, 82, 84, 85, 87, 89, 91, 93, 94, 96, 98,100,102, // 9 bits, 0..511
- 104,106,108,110,112,115,117,119,121,123,125,128,130,132,135,137, // 9 bits, 0..511
- 140,142,144,147,149,152,155,157,160,163,165,168,171,173,176,179, // 9 bits, 0..511
- 182,185,188,191,194,197,200,203,206,209,212,215,219,222,225,229, // 9 bits, 0..511
- // 8 bits resolution
- 116,118,120,121,123,125,127,128,130,132,134,136,138,139,141,143, // 8 bits, 0..255
- 145,147,149,151,153,155,157,159,161,163,165,168,170,172,174,176, // 8 bits, 0..255
- 178,181,183,185,187,190,192,194,197,199,201,204,206,209,211,214, // 8 bits, 0..255
- 216,219,221,224,226,229,232,234,237,240,242,245,248,250,253,255 // 8 bits, 0..255
+// New version of Gamma correction compute
+// Instead of a table, we do a multi-linear approximation, which is close enough
+// At low levels, the slope is a bit higher than actual gamma, to make changes smoother
+// Internal resolution is 10 bits.
+
+typedef struct gamma_table_t {
+ uint16_t to_src;
+ uint16_t to_gamma;
+} gamma_table_t;
+
+const gamma_table_t gamma_table[] = { // don't put in PROGMEM for performance reasons
+ { 3, 0 },
+ { 209, 13 },
+ { 312, 41 },
+ { 457, 106 },
+ { 626, 261 },
+ { 762, 450 },
+ { 895, 703 },
+ { 1023, 1023 },
+ { 0xFFFF, 0xFFFF } // fail-safe if out of range
+};
+
+// simplified Gamma table for Fade, cheating a little at low brightness
+const gamma_table_t gamma_table_fast[] = {
+ { 0, 0 },
+ { 384, 67 },
+ { 768, 467 },
+ { 1023, 1023 },
+ { 0xFFFF, 0xFFFF } // fail-safe if out of range
};
// For reference, below are the computed gamma tables, via ledGamma()
// for 8 bits output:
-// 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-// 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-// 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
-// 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6,
-// 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10,
-// 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 16, 16, 17,
-// 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 23, 23, 24, 24, 25, 26,
-// 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37,
-// 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 47, 48, 49, 50, 51,
-// 52, 53, 54, 55, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69,
-// 70, 71, 72, 74, 75, 76, 78, 79, 80, 82, 83, 84, 86, 87, 88, 90,
-// 91, 93, 94, 96, 97, 99,100,102,103,105,106,108,110,111,113,115,
-//116,118,120,121,123,125,127,128,130,132,134,136,138,139,141,143,
-//145,147,149,151,153,155,157,159,161,163,165,168,170,172,174,176,
-//178,181,183,185,187,190,192,194,197,199,201,204,206,209,211,214,
-//216,219,221,224,226,229,232,234,237,240,242,245,248,250,253,255
+// 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+// 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
+// 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
+// 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
+// 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11,
+// 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18,
+// 18, 19, 19, 20, 20, 21, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25,
+// 25, 26, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 36, 37, 38,
+// 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 51, 52, 53,
+// 54, 55, 56, 57, 58, 59, 60, 61, 61, 62, 63, 64, 65, 66, 68, 69,
+// 71, 72, 73, 75, 76, 78, 79, 80, 82, 83, 85, 86, 87, 88, 90, 91,
+// 93, 94, 95, 97, 98,100,101,102,104,105,107,108,109,111,112,114,
+// 116,118,120,121,123,125,127,129,131,133,135,137,139,141,142,144,
+// 146,148,150,152,154,156,158,160,162,164,166,168,170,171,173,175,
+// 177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,
+// 217,220,222,225,227,230,233,235,238,240,243,245,248,250,253,255
//
// and for 10 bits output:
-// 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-// 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4,
-// 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 9, 9, 10,
-// 10, 11, 11, 12, 13, 13, 14, 15, 15, 16, 17, 18, 19, 19, 20, 21,
-// 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 36, 37, 38, 39,
-// 41, 42, 44, 45, 47, 48, 50, 51, 53, 55, 56, 58, 60, 62, 64, 65,
-// 67, 69, 71, 73, 75, 78, 80, 82, 84, 86, 89, 91, 93, 96, 98,101,
-//103,106,108,111,114,116,119,122,125,128,131,134,137,140,143,146,
-//151,155,157,161,165,169,171,175,179,183,187,189,193,197,201,205,
-//209,213,217,221,225,231,235,239,243,247,251,257,261,265,271,275,
-//281,285,289,295,299,305,311,315,321,327,331,337,343,347,353,359,
-//365,371,377,383,389,395,401,407,413,419,425,431,439,445,451,459,
-//467,475,483,487,495,503,511,515,523,531,539,547,555,559,567,575,
-//583,591,599,607,615,623,631,639,647,655,663,675,683,691,699,707,
-//715,727,735,743,751,763,771,779,791,799,807,819,827,839,847,859,
-//867,879,887,899,907,919,931,939,951,963,971,983,995,1003,1015,1023
+// 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4,
+// 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8,
+// 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
+// 12, 12, 13, 13, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+// 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 44,
+// 46, 47, 49, 51, 53, 54, 56, 58, 60, 62, 63, 65, 67, 69, 70, 72,
+// 74, 76, 78, 79, 81, 83, 85, 86, 88, 90, 92, 94, 95, 97, 99, 101,
+// 102, 104, 106, 110, 113, 117, 121, 124, 128, 132, 135, 139, 143, 146, 150, 154,
+// 158, 162, 166, 169, 173, 177, 180, 184, 188, 191, 195, 199, 202, 206, 210, 213,
+// 217, 221, 224, 228, 232, 235, 239, 243, 246, 250, 254, 257, 261, 266, 272, 277,
+// 283, 288, 294, 300, 305, 311, 316, 322, 327, 333, 339, 344, 350, 355, 361, 366,
+// 372, 378, 383, 389, 394, 400, 405, 411, 417, 422, 428, 433, 439, 444, 450, 457,
+// 464, 472, 480, 487, 495, 503, 510, 518, 525, 533, 541, 548, 556, 564, 571, 579,
+// 587, 594, 602, 609, 617, 627, 634, 642, 650, 657, 665, 672, 680, 688, 695, 703,
+// 712, 722, 732, 742, 752, 762, 772, 782, 792, 802, 812, 822, 832, 842, 852, 862,
+// 872, 882, 892, 902, 912, 923, 933, 943, 953, 963, 973, 983, 993,1003,1013,1023
+//
+// Output for Dimmer 0..100 values
+// 0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 7, 8, 8, 9,
+// 10, 10, 11, 12, 12, 13, 16, 18, 21, 23, 26, 29, 32, 34, 37,
+// 40, 44, 49, 53, 58, 62, 67, 70, 76, 79, 85, 90, 94, 99,102,
+// 110,117,128,135,146,158,166,177,184,195,202,213,221,232,239,
+// 250,261,272,288,300,316,327,344,355,372,389,400,417,428,444,
+// 457,480,495,518,533,556,579,594,617,634,657,672,695,712,742,
+// 772,792,822,842,872,892,923,943,973,993,1023
struct LIGHT {
uint32_t strip_timer_counter = 0; // Bars and Gradient
@@ -256,9 +264,6 @@ struct LIGHT {
bool pwm_multi_channels = false; // SetOption68, treat each PWM channel as an independant dimmer
bool fade_running = false;
- uint8_t fade_start_8[LST_MAX] = {0,0,0,0,0};
- uint8_t fade_cur_8[LST_MAX];
- uint8_t fade_end_8[LST_MAX]; // 8 bits resolution target channel values
uint16_t fade_start_10[LST_MAX] = {0,0,0,0,0};
uint16_t fade_cur_10[LST_MAX];
uint16_t fade_end_10[LST_MAX]; // 10 bits resolution target channel values
@@ -1072,36 +1077,53 @@ public:
LightStateClass light_state = LightStateClass();
LightControllerClass light_controller = LightControllerClass(light_state);
+/*********************************************************************************************\
+ * Change scales from 8 bits to 10 bits and vice versa
+\*********************************************************************************************/
+// 8 to 10 to 8 is garanteed to give the same result
+uint16_t change8to10(uint8_t v) {
+ return changeUIntScale(v, 0, 255, 0, 1023);
+}
+// change from 10 bits to 8 bits, but any non-zero input will be non-zero
+uint8_t change10to8(uint16_t v) {
+ return (0 == v) ? 0 : changeUIntScale(v, 4, 1023, 1, 255);
+}
+
/*********************************************************************************************\
* Gamma correction
\*********************************************************************************************/
// Calculate the gamma corrected value for LEDS
-// You can request 11, 10, 9 or 8 bits resolution via 'bits_out' parameter
-uint16_t ledGamma(uint8_t v, uint16_t bits_out = 8) {
- uint16_t result;
- // bits_resolution: the resolution of _ledTable[v], between 8 and 11
- uint32_t bits_resolution = 11 - (v / 64); // 8..11
- int32_t bits_correction = bits_out - bits_resolution; // -3..3
-#ifdef XFUNC_PTR_IN_ROM
- uint32_t uncorrected_value = pgm_read_byte(_ledTable + v); // 0..255
-#else
- uint32_t uncorrected_value = _ledTable[v]; // 0..255
-#endif
- if (0 == bits_correction) {
- // we already match the required resolution, no change
- result = uncorrected_value;
- } else if (bits_correction > 0) {
- // the output resolution is higher than our value, we need to extrapolate
- // we shift by bits_correction, and force last bits to 1
- uint32_t bits_mask = (1 << bits_correction) - 1; // 1, 3, 7
- result = (uncorrected_value << bits_correction) | bits_mask;
- } else { // bits_correction < 0
- // our resolution is too high, we need to remove bits
- // we add 1, 3 or 7 to force rouding to the nearest high value
- uint32_t bits_mask = (1 << -bits_correction) - 1; // 1, 3, 7
- result = ((uncorrected_value + bits_mask) >> -bits_correction);
+uint16_t ledGamma_internal(uint16_t v, const struct gamma_table_t *gt_ptr) {
+ uint16_t from_src = 0;
+ uint16_t from_gamma = 0;
+
+ for (const gamma_table_t *gt = gt_ptr; ; gt++) {
+ uint16_t to_src = gt->to_src;
+ uint16_t to_gamma = gt->to_gamma;
+ if (v <= to_src) {
+ return changeUIntScale(v, from_src, to_src, from_gamma, to_gamma);
+ }
+ from_src = to_src + 1;
+ from_gamma = to_gamma + 1;
}
- return result;
+}
+// 10_10 bits, fast fade mode
+uint16_t ledGamma10_10_fast(uint16_t v) {
+ return ledGamma_internal(v, gamma_table_fast);
+}
+
+// 10 bits in, 10 bits out
+uint16_t ledGamma10_10(uint16_t v) {
+ return ledGamma_internal(v, gamma_table);
+}
+// 10 bits resolution, 8 bits in
+uint16_t ledGamma10(uint8_t v) {
+ return ledGamma10_10(change8to10(v));
+}
+
+// Legacy function
+uint8_t ledGamma(uint8_t v) {
+ return change10to8(ledGamma10(v));
}
/********************************************************************************************/
@@ -1569,7 +1591,6 @@ void LightSetPower(void)
// Light.power tells which lights or channels (SetOption68) are on/off
void LightAnimate(void)
{
- uint8_t cur_col[LST_MAX];
uint16_t light_still_on = 0;
bool power_off = false;
@@ -1653,92 +1674,73 @@ void LightAnimate(void)
Light.update = true;
}
if (Light.update) {
- uint16_t cur_col_10bits[LST_MAX]; // 10 bits version of cur_col for PWM
+ uint16_t cur_col_10[LST_MAX]; // 10 bits resolution
Light.update = false;
// first set 8 and 10 bits channels
for (uint32_t i = 0; i < LST_MAX; i++) {
- cur_col[i] = Light.last_color[i] = Light.new_color[i];
+ Light.last_color[i] = Light.new_color[i];
// Extend from 8 to 10 bits if no correction (in case no gamma correction is required)
- cur_col_10bits[i] = changeUIntScale(cur_col[i], 0, 255, 0, 1023);
+ cur_col_10[i] = change8to10(Light.new_color[i]);
}
if (Light.pwm_multi_channels) {
- calcGammaMultiChannels(cur_col, cur_col_10bits);
+ calcGammaMultiChannels(cur_col_10);
} else {
- calcGammaBulbs(cur_col, cur_col_10bits);
+ calcGammaBulbs(cur_col_10);
if (PHILIPS == my_module_type) {
- calcGammaCTPwm(cur_col, cur_col_10bits);
+ calcGammaCTPwm(cur_col_10);
}
// Now see if we need to mix RGB and True White
// Valid only for LST_RGBW, LST_RGBWC, rgbwwTable[4] is zero, and white is zero (see doc)
- if ((LST_RGBW <= Light.subtype) && (0 == Settings.rgbwwTable[4]) && (0 == cur_col[3]+cur_col[4])) {
- uint32_t min_rgb_10 = min3(cur_col_10bits[0], cur_col_10bits[1], cur_col_10bits[2]);
- uint8_t min_rgb = min3(cur_col[0], cur_col[1], cur_col[2]);
+ if ((LST_RGBW <= Light.subtype) && (0 == Settings.rgbwwTable[4]) && (0 == cur_col_10[3]+cur_col_10[4])) {
+ uint32_t min_rgb_10 = min3(cur_col_10[0], cur_col_10[1], cur_col_10[2]);
for (uint32_t i=0; i<3; i++) {
// substract white and adjust according to rgbwwTable
- uint32_t adjust10 = changeUIntScale(Settings.rgbwwTable[i], 0, 255, 0, 1023);
- cur_col_10bits[i] = changeUIntScale(cur_col_10bits[i] - min_rgb_10, 0, 1023, 0, adjust10);
- cur_col[i] = changeUIntScale(cur_col[i] - min_rgb, 0, 255, 0, Settings.rgbwwTable[i]);
+ uint32_t adjust10 = change8to10(Settings.rgbwwTable[i]);
+ cur_col_10[i] = changeUIntScale(cur_col_10[i] - min_rgb_10, 0, 1023, 0, adjust10);
}
// compute the adjusted white levels for 10 and 8 bits
uint32_t adjust_w_10 = changeUIntScale(Settings.rgbwwTable[3], 0, 255, 0, 1023);
uint32_t white_10 = changeUIntScale(min_rgb_10, 0, 1023, 0, adjust_w_10); // set white power down corrected with rgbwwTable[3]
- uint32_t white = changeUIntScale(min_rgb, 0, 255, 0, Settings.rgbwwTable[3]); // set white power down corrected with rgbwwTable[3]
if (LST_RGBW == Light.subtype) {
// we simply set the white channel
- cur_col_10bits[3] = white_10;
- cur_col[3] = white;
+ cur_col_10[3] = white_10;
} else { // LST_RGBWC
// we distribute white between cold and warm according to CT value
uint32_t ct = light_state.getCT();
- cur_col_10bits[4] = changeUIntScale(ct, 153, 500, 0, white_10);
- cur_col_10bits[3] = white_10 - cur_col_10bits[4];
- cur_col[4] = changeUIntScale(ct, 153, 500, 0, white);
- cur_col[3] = white - cur_col[4];
+ cur_col_10[4] = changeUIntScale(ct, 153, 500, 0, white_10);
+ cur_col_10[3] = white_10 - cur_col_10[4];
}
}
}
// final adjusments for PMW, post-gamma correction
for (uint32_t i = 0; i < LST_MAX; i++) {
-#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2)
- // Fix unwanted blinking and PWM watchdog errors for values close to pwm_range (H801, Arilux and BN-SZ01)
- // but keep value 1023 if full range (PWM will be deactivated in this case)
- if ((cur_col_10bits[i] > 1008) && (cur_col_10bits[i] < 1023)) {
- cur_col_10bits[i] = 1008;
- }
-#endif
// scale from 0..1023 to 0..pwm_range, but keep any non-zero value to at least 1
- cur_col_10bits[i] = (cur_col_10bits[i] > 0) ? changeUIntScale(cur_col_10bits[i], 1, 1023, 1, Settings.pwm_range) : 0;
+ cur_col_10[i] = (cur_col_10[i] > 0) ? changeUIntScale(cur_col_10[i], 1, 1023, 1, Settings.pwm_range) : 0;
}
// apply port remapping on both 8 bits and 10 bits versions
- uint8_t orig_col[LST_MAX];
uint16_t orig_col_10bits[LST_MAX];
- memcpy(orig_col, cur_col, sizeof(orig_col));
- memcpy(orig_col_10bits, cur_col_10bits, sizeof(orig_col_10bits));
+ memcpy(orig_col_10bits, cur_col_10, sizeof(orig_col_10bits));
for (uint32_t i = 0; i < LST_MAX; i++) {
- cur_col[i] = orig_col[Light.color_remap[i]];
- cur_col_10bits[i] = orig_col_10bits[Light.color_remap[i]];
+ cur_col_10[i] = orig_col_10bits[Light.color_remap[i]];
}
if (!Settings.light_fade || power_off) { // no fade
// record the current value for a future Fade
- memcpy(Light.fade_start_8, cur_col, sizeof(Light.fade_start_8));
- memcpy(Light.fade_start_10, cur_col_10bits, sizeof(Light.fade_start_10));
+ memcpy(Light.fade_start_10, cur_col_10, sizeof(Light.fade_start_10));
// push the final values at 8 and 10 bits resolution to the PWMs
- LightSetOutputs(cur_col, cur_col_10bits);
+ LightSetOutputs(cur_col_10);
} else { // fade on
if (Light.fade_running) {
// if fade is running, we take the curring value as the start for the next fade
- memcpy(Light.fade_start_8, Light.fade_cur_8, sizeof(Light.fade_start_8));
memcpy(Light.fade_start_10, Light.fade_cur_10, sizeof(Light.fade_start_10));
}
- memcpy(Light.fade_end_8, cur_col, sizeof(Light.fade_start_8));
- memcpy(Light.fade_end_10, cur_col_10bits, sizeof(Light.fade_start_10));
+ memcpy(Light.fade_end_10, cur_col_10, sizeof(Light.fade_start_10));
Light.fade_running = true;
Light.fade_duration = 0; // set the value to zero to force a recompute
Light.fade_start = 0;
@@ -1747,11 +1749,10 @@ void LightAnimate(void)
}
if (Light.fade_running) {
if (LightApplyFade()) {
- // AddLog_P2(LOG_LEVEL_INFO, PSTR("LightApplyFade %d %d %d %d %d - %d %d %d %d %d"),
- // Light.fade_cur_8[0], Light.fade_cur_8[1], Light.fade_cur_8[2], Light.fade_cur_8[3], Light.fade_cur_8[4],
+ // AddLog_P2(LOG_LEVEL_INFO, PSTR("LightApplyFade %d %d %d %d %d"),
// Light.fade_cur_10[0], Light.fade_cur_10[1], Light.fade_cur_10[2], Light.fade_cur_10[3], Light.fade_cur_10[4]);
- LightSetOutputs(Light.fade_cur_8, Light.fade_cur_10);
+ LightSetOutputs(Light.fade_cur_10);
}
}
}
@@ -1799,9 +1800,6 @@ bool LightApplyFade(void) { // did the value chanegd and needs to be applied
if (fade_current <= Light.fade_duration) { // fade not finished
//Serial.printf("Fade: %d / %d - ", fade_current, Light.fade_duration);
for (uint32_t i = 0; i < Light.subtype; i++) {
- Light.fade_cur_8[i] = changeUIntScale(fade_current,
- 0, Light.fade_duration,
- Light.fade_start_8[i], Light.fade_end_8[i]);
Light.fade_cur_10[i] = changeUIntScale(fade_current,
0, Light.fade_duration,
Light.fade_start_10[i], Light.fade_end_10[i]);
@@ -1813,10 +1811,8 @@ bool LightApplyFade(void) { // did the value chanegd and needs to be applied
Light.fade_start = 0;
Light.fade_duration = 0;
// set light to target value
- memcpy(Light.fade_cur_8, Light.fade_end_8, sizeof(Light.fade_end_8));
memcpy(Light.fade_cur_10, Light.fade_end_10, sizeof(Light.fade_end_10));
// record the last value for next start
- memcpy(Light.fade_start_8, Light.fade_end_8, sizeof(Light.fade_start_8));
memcpy(Light.fade_start_10, Light.fade_end_10, sizeof(Light.fade_start_10));
}
return true;
@@ -1855,20 +1851,24 @@ void LightApplyPower(uint8_t new_color[LST_MAX], power_t power) {
}
}
-void LightSetOutputs(const uint8_t *cur_col, const uint16_t *cur_col_10bits) {
+void LightSetOutputs(const uint16_t *cur_col_10) {
// now apply the actual PWM values, adjusted and remapped 10-bits range
if (light_type < LT_PWM6) { // only for direct PWM lights, not for Tuya, Armtronix...
for (uint32_t i = 0; i < (Light.subtype - Light.pwm_offset); i++) {
if (pin[GPIO_PWM1 +i] < 99) {
- //AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION "Cur_Col%d 10 bits %d, Pwm%d %d"), i, cur_col_10bits[i], i+1, cur_col[i]);
- analogWrite(pin[GPIO_PWM1 +i], bitRead(pwm_inverted, i) ? Settings.pwm_range - cur_col_10bits[(i + Light.pwm_offset)] : cur_col_10bits[(i + Light.pwm_offset)]);
+ //AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION "Cur_Col%d 10 bits %d"), i, cur_col_10[i]);
+ analogWrite(pin[GPIO_PWM1 +i], bitRead(pwm_inverted, i) ? Settings.pwm_range - cur_col_10[(i + Light.pwm_offset)] : cur_col_10[(i + Light.pwm_offset)]);
}
}
}
char msg[24];
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("LGT: Channels %s"),
- ToHex_P((const unsigned char *)cur_col_10bits, 10, msg, sizeof(msg)));
-
+ ToHex_P((const unsigned char *)cur_col_10, 10, msg, sizeof(msg)));
+
+ uint8_t cur_col[LST_MAX];
+ for (uint32_t i = 0; i < LST_MAX; i++) {
+ cur_col[i] = change10to8(cur_col_10[i]);
+ }
// Some devices need scaled RGB like Sonoff L1
// TODO, should be probably moved to the Sonoff L1 support code
uint8_t scale_col[3];
@@ -1888,7 +1888,7 @@ void LightSetOutputs(const uint8_t *cur_col, const uint16_t *cur_col_10bits) {
}
// Do specific computation is SetOption73 is on, Color Temp is a separate PWM channel
-void calcGammaCTPwm(uint8_t cur_col[5], uint16_t cur_col_10bits[5]) {
+void calcGammaCTPwm(uint16_t cur_col_10[5]) {
// Xiaomi Philips bulbs follow a different scheme:
uint8_t cold, warm; // channel 1 is the color tone, mapped to cold channel (0..255)
light_state.getCW(&cold, &warm);
@@ -1896,32 +1896,28 @@ void calcGammaCTPwm(uint8_t cur_col[5], uint16_t cur_col_10bits[5]) {
uint32_t cw1 = Light.subtype - 1; // address for the ColorTone PWM
uint32_t cw0 = Light.subtype - 2; // address for the White Brightness PWM
// overall brightness
- uint16_t pxBri = cur_col[cw0] + cur_col[cw1];
- if (pxBri > 255) { pxBri = 255; }
- cur_col[cw1] = changeUIntScale(cold, 0, cold + warm, 0, 255); //
- cur_col_10bits[cw1] = changeUIntScale(cur_col[cw1], 0, 255, 0, 1023);
+ uint16_t pxBri10 = cur_col_10[cw0] + cur_col_10[cw1];
+ if (pxBri10 > 1023) { pxBri10 = 1023; }
+ cur_col_10[cw1] = changeUIntScale(cold, 0, cold + warm, 0, 1023); //
// channel 0=intensity, channel1=temperature
if (Settings.light_correction) { // gamma correction
- cur_col[cw0] = ledGamma(pxBri);
- cur_col_10bits[cw0] = ledGamma(pxBri, 10); // 10 bits gamma correction
+ cur_col_10[cw0] = ledGamma10_10(pxBri10); // 10 bits gamma correction
} else {
- cur_col[cw0] = pxBri;
- cur_col_10bits[cw0] = changeUIntScale(pxBri, 0, 255, 0, 1023); // no gamma, extend to 10 bits
+ cur_col_10[cw0] = pxBri10; // no gamma, extend to 10 bits
}
}
// Just apply basic Gamma to each channel
-void calcGammaMultiChannels(uint8_t cur_col[5], uint16_t cur_col_10bits[5]) {
+void calcGammaMultiChannels(uint16_t cur_col_10[5]) {
// Apply gamma correction for 8 and 10 bits resolutions, if needed
if (Settings.light_correction) {
for (uint32_t i = 0; i < LST_MAX; i++) {
- cur_col_10bits[i] = ledGamma(cur_col[i], 10);
- cur_col[i] = ledGamma(cur_col[i]);
+ cur_col_10[i] = ledGamma10_10(cur_col_10[i]);
}
}
}
-void calcGammaBulbs(uint8_t cur_col[5], uint16_t cur_col_10bits[5]) {
+void calcGammaBulbs(uint16_t cur_col_10[5]) {
// Apply gamma correction for 8 and 10 bits resolutions, if needed
if (Settings.light_correction) {
// First apply combined correction to the overall white power
@@ -1931,35 +1927,28 @@ void calcGammaBulbs(uint8_t cur_col[5], uint16_t cur_col_10bits[5]) {
w_idx[0] = 3;
w_idx[1] = 4;
}
- uint16_t white_bri = cur_col[w_idx[0]] + cur_col[w_idx[1]];
+ uint16_t white_bri10 = cur_col_10[w_idx[0]] + cur_col_10[w_idx[1]];
// if sum of both channels is > 255, then channels are probablu uncorrelated
- if (white_bri <= 255) {
+ if (white_bri10 <= 1023) {
// we calculate the gamma corrected sum of CW + WW
- uint16_t white_bri_10bits = ledGamma(white_bri, 10);
- uint8_t white_bri_8bits = ledGamma(white_bri);
+ uint16_t white_bri_10bits = ledGamma10_10(white_bri10);
// then we split the total energy among the cold and warm leds
- cur_col_10bits[w_idx[0]] = changeUIntScale(cur_col[w_idx[0]], 0, white_bri, 0, white_bri_10bits);
- cur_col_10bits[w_idx[1]] = changeUIntScale(cur_col[w_idx[1]], 0, white_bri, 0, white_bri_10bits);
- cur_col[w_idx[0]] = changeUIntScale(cur_col[w_idx[0]], 0, white_bri, 0, white_bri_8bits);
- cur_col[w_idx[1]] = changeUIntScale(cur_col[w_idx[1]], 0, white_bri, 0, white_bri_8bits);
+ cur_col_10[w_idx[0]] = changeUIntScale(cur_col_10[w_idx[0]], 0, white_bri10, 0, white_bri_10bits);
+ cur_col_10[w_idx[1]] = changeUIntScale(cur_col_10[w_idx[1]], 0, white_bri10, 0, white_bri_10bits);
} else {
- cur_col_10bits[w_idx[0]] = ledGamma(cur_col[w_idx[0]], 10);
- cur_col_10bits[w_idx[1]] = ledGamma(cur_col[w_idx[1]], 10);
- cur_col[w_idx[0]] = ledGamma(cur_col[w_idx[0]]);
- cur_col[w_idx[1]] = ledGamma(cur_col[w_idx[1]]);
+ cur_col_10[w_idx[0]] = ledGamma10_10(cur_col_10[w_idx[0]]);
+ cur_col_10[w_idx[1]] = ledGamma10_10(cur_col_10[w_idx[1]]);
}
}
// then apply gamma correction to RGB channels
if (LST_RGB <= Light.subtype) {
for (uint32_t i = 0; i < 3; i++) {
- cur_col_10bits[i] = ledGamma(cur_col[i], 10);
- cur_col[i] = ledGamma(cur_col[i]);
+ cur_col_10[i] = ledGamma10_10(cur_col_10[i]);
}
}
// If RGBW or Single channel, also adjust White channel
if ((LST_COLDWARM != Light.subtype) && (LST_RGBWC != Light.subtype)) {
- cur_col_10bits[3] = ledGamma(cur_col[3], 10);
- cur_col[3] = ledGamma(cur_col[3]);
+ cur_col_10[3] = ledGamma10_10(cur_col_10[3]);
}
}
}
@@ -2447,7 +2436,7 @@ bool Xdrv04(uint8_t function)
case FUNC_LOOP:
if (Light.fade_running) {
if (LightApplyFade()) {
- LightSetOutputs(Light.fade_cur_8, Light.fade_cur_10);
+ LightSetOutputs(Light.fade_cur_10);
}
}
break;
From 1ba2239804540267a5fb76354759c2f9d0b8424d Mon Sep 17 00:00:00 2001
From: Bohdan Kmit
Date: Sat, 28 Dec 2019 00:29:25 +0200
Subject: [PATCH 168/559] Improved Ukrainian translation, renamed localization
to proper uk-UA name
---
platformio_tasmota_env.ini | 2 +-
tasmota/language/{uk-UK.h => uk-UA.h} | 150 +++++++++++++-------------
tasmota/my_user_config.h | 2 +-
3 files changed, 77 insertions(+), 77 deletions(-)
rename tasmota/language/{uk-UK.h => uk-UA.h} (88%)
diff --git a/platformio_tasmota_env.ini b/platformio_tasmota_env.ini
index fd0571125..f2b46c131 100644
--- a/platformio_tasmota_env.ini
+++ b/platformio_tasmota_env.ini
@@ -97,4 +97,4 @@ build_flags = ${common.build_flags} -DMY_LANGUAGE=tr-TR
build_flags = ${common.build_flags} -DMY_LANGUAGE=zh-TW
[env:tasmota-UK]
-build_flags = ${common.build_flags} -DMY_LANGUAGE=uk-UK
+build_flags = ${common.build_flags} -DMY_LANGUAGE=uk-UA
diff --git a/tasmota/language/uk-UK.h b/tasmota/language/uk-UA.h
similarity index 88%
rename from tasmota/language/uk-UK.h
rename to tasmota/language/uk-UA.h
index dbf58fe35..cd77adebd 100644
--- a/tasmota/language/uk-UK.h
+++ b/tasmota/language/uk-UA.h
@@ -1,5 +1,5 @@
/*
- uk-UK.h - localization for Ukrainian - Ukraine for Tasmota
+ uk-UA.h - localization for Ukrainian - Ukraine for Tasmota
Copyright (C) 2019 Theo Arends / vadym-adik
@@ -17,8 +17,8 @@
along with this program. If not, see .
*/
-#ifndef _LANGUAGE_UK_UK_H_
-#define _LANGUAGE_UK_UK_H_
+#ifndef _LANGUAGE_UK_UA_H_
+#define _LANGUAGE_UK_UA_H_
/*************************** ATTENTION *******************************\
*
@@ -51,7 +51,7 @@
#define D_DECIMAL_SEPARATOR ","
// Common
-#define D_ADMIN "Admin"
+#define D_ADMIN "Адміністратор"
#define D_AIR_QUALITY "Якість повітря"
#define D_AP "Точка доступу" // Access Point
#define D_AS "як"
@@ -63,7 +63,7 @@
#define D_BSSID "BSSId"
#define D_BUTTON "Кнопка"
#define D_BY " " // Written by me
-#define D_BYTES "Байт"
+#define D_BYTES "Байтів"
#define D_CELSIUS "Цельсія"
#define D_CHANNEL "Канал"
#define D_CO2 "Вуглек. газ"
@@ -71,27 +71,27 @@
#define D_COLDLIGHT "Холодний"
#define D_COMMAND "Команда"
#define D_CONNECTED "Під'єднано"
-#define D_CORS_DOMAIN "CORS Domain"
-#define D_COUNT "Розмір"
+#define D_CORS_DOMAIN "Домен CORS"
+#define D_COUNT "разів"
#define D_COUNTER "Лічильник"
#define D_CURRENT "Струм" // As in Voltage and Current
#define D_DATA "Дані"
#define D_DARKLIGHT "Темний"
#define D_DEBUG "Налагодження"
-#define D_DISABLED "Заблоковано"
+#define D_DISABLED "Вимкнено"
#define D_DISTANCE "Відстань"
#define D_DNS_SERVER "Сервер DNS"
#define D_DONE "Виконано"
#define D_DST_TIME "Літній час"
#define D_ECO2 "eCO2"
#define D_EMULATION "Емуляція"
-#define D_ENABLED "Активно"
+#define D_ENABLED "Увімкнено"
#define D_ERASE "Стирати"
#define D_ERROR "Помилка"
#define D_FAHRENHEIT "Фаренгейт"
#define D_FAILED "Невдало"
-#define D_FALLBACK "Зворотній зв'язок"
-#define D_FALLBACK_TOPIC "Топік зворотнього зв'язку"
+#define D_FALLBACK "Запасний"
+#define D_FALLBACK_TOPIC "Запасний топік"
#define D_FALSE "Ні"
#define D_FILE "Файл"
#define D_FLOW_RATE "Потік"
@@ -106,34 +106,34 @@
#define D_ILLUMINANCE "Освітленність"
#define D_IMMEDIATE "Негайно" // Button immediate
#define D_INDEX "Індекс"
-#define D_INFO "Інфо"
+#define D_INFO "Інформація"
#define D_INFRARED "Інфрачервоний"
#define D_INITIALIZED "Ініціалізовано"
#define D_IP_ADDRESS "IP адреса"
#define D_LIGHT "Світло"
#define D_LWT "LWT"
#define D_MODULE "Модуль"
-#define D_MOISTURE "Moisture"
+#define D_MOISTURE "Волога"
#define D_MQTT "MQTT"
#define D_MULTI_PRESS "Багаторазове натискання"
#define D_NOISE "Шум"
#define D_NONE "Нічого"
-#define D_OFF "Вимк."
-#define D_OFFLINE "Офф-лайн"
+#define D_OFF "Вимкнено"
+#define D_OFFLINE "Неактивний"
#define D_OK "Ок"
-#define D_ON "Увімк."
-#define D_ONLINE "Он-лайн"
+#define D_ON "Увімкнено"
+#define D_ONLINE "Активний"
#define D_PASSWORD "Гасло"
#define D_PORT "Порт"
#define D_POWER_FACTOR "Коефіцієнт потужності"
#define D_POWERUSAGE "Потужність"
#define D_POWERUSAGE_ACTIVE "Активна потужність"
-#define D_POWERUSAGE_APPARENT "Дійсна потужність"
+#define D_POWERUSAGE_APPARENT "Загальна потужність"
#define D_POWERUSAGE_REACTIVE "Реактивна потужність"
#define D_PRESSURE "Тиск"
#define D_PRESSUREATSEALEVEL "Тиск на рівні моря"
#define D_PROGRAM_FLASH_SIZE "Розмір Flash для програм"
-#define D_PROGRAM_SIZE "Розмір програм"
+#define D_PROGRAM_SIZE "Розмір програми"
#define D_PROJECT "Проект"
#define D_RAIN "Дощ"
#define D_RECEIVED "Отримано"
@@ -194,7 +194,7 @@
#define D_SET_BAUDRATE_TO "Встановити швидкість передачі (Baudrate)"
#define D_RECEIVED_TOPIC "Отриманий Топік"
#define D_DATA_SIZE "Розмір даних"
-#define D_ANALOG_INPUT "Напруга"
+#define D_ANALOG_INPUT "Аналоговий вхід"
// support.ino
#define D_OSWATCH "osWatch"
@@ -203,7 +203,7 @@
#define D_ACTIVE_FOR_3_MINUTES "активний протягом 3 хвилин"
#define D_FAILED_TO_START "не вдалось запустити"
#define D_PATCH_ISSUE_2186 "Проблема з виправленням 2186"
-#define D_CONNECTING_TO_AP "Підключення до AP"
+#define D_CONNECTING_TO_AP "Підключення до Точки Доступу"
#define D_IN_MODE "в режимі"
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Помилка підключення, IP-адреса не отримана"
#define D_CONNECT_FAILED_AP_NOT_REACHED "Помилка з'єднання, AP не знайдено"
@@ -213,12 +213,12 @@
#define D_CHECKING_CONNECTION "Перевірка з'єднання..."
#define D_QUERY_DONE "Запит виконаний. Виявлено сервер MQTT"
#define D_MQTT_SERVICE_FOUND "MQTT сервер знайдено"
-#define D_FOUND_AT "знайдено в"
+#define D_FOUND_AT "знайдено за адресою"
#define D_SYSLOG_HOST_NOT_FOUND "Сервер журналу не знайдено"
// settings.ino
-#define D_SAVED_TO_FLASH_AT "Збережено в флэш-пам'ять"
-#define D_LOADED_FROM_FLASH_AT "Завантажено з флэш-пам'яті"
+#define D_SAVED_TO_FLASH_AT "Збережено в Flash-пам'ять"
+#define D_LOADED_FROM_FLASH_AT "Завантажено з Flash-пам'яті"
#define D_USE_DEFAULTS "Використовувати значення за замовчуванням"
#define D_ERASED_SECTOR "Стерто сектор"
@@ -230,7 +230,7 @@
#define D_WEBSERVER_STOPPED "Веб-сервер зупинений"
#define D_FILE_NOT_FOUND "Файл не знайдений"
#define D_REDIRECTED "Перенаправлено на адаптивний портал"
-#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi менеджер встановлює Точку Доступу і зберігає параметри"
+#define D_WIFIMANAGER_SET_ACCESSPOINT_AND_STATION "Wifi менеджер встановлює Точку Доступу і станцію"
#define D_WIFIMANAGER_SET_ACCESSPOINT "Wifi менеджер встановив Точку Доступу"
#define D_TRYING_TO_CONNECT "Спроба підключення пристрою до мережі"
@@ -286,18 +286,18 @@
#define D_LOGGING_PARAMETERS "Параметри журналу"
#define D_SERIAL_LOG_LEVEL "Serial рівень"
-#define D_MQTT_LOG_LEVEL "Mqtt log level"
+#define D_MQTT_LOG_LEVEL "Mqtt рівень"
#define D_WEB_LOG_LEVEL "Web рівень"
-#define D_SYS_LOG_LEVEL "System рівень"
+#define D_SYS_LOG_LEVEL "Syslog рівень"
#define D_MORE_DEBUG "Додаткова інформація для налагодження"
-#define D_SYSLOG_HOST "System хост"
-#define D_SYSLOG_PORT "System порт"
+#define D_SYSLOG_HOST "Syslog хост"
+#define D_SYSLOG_PORT "Syslog порт"
#define D_TELEMETRY_PERIOD "Період телеметрії"
#define D_OTHER_PARAMETERS "Параметри Інше"
#define D_TEMPLATE "Шаблони"
-#define D_ACTIVATE "Activate"
-#define D_WEB_ADMIN_PASSWORD "Гасло Web адміністратора"
+#define D_ACTIVATE "Активувний"
+#define D_WEB_ADMIN_PASSWORD "Гасло адміністратора Web"
#define D_MQTT_ENABLE "MQTT активний"
#define D_FRIENDLY_NAME "Дружнє Ім'я"
#define D_BELKIN_WEMO "Belkin WeMo"
@@ -328,14 +328,14 @@
#define D_MQTT_GROUP_TOPIC "MQTT Топік групи"
#define D_MQTT_FULL_TOPIC "MQTT Топік повний"
#define D_MDNS_DISCOVERY "mDNS Виявлення"
-#define D_MDNS_ADVERTISE "mDNS Транcляція"
+#define D_MDNS_ADVERTISE "mDNS Анонс"
#define D_ESP_CHIP_ID "ID чипу ESP"
#define D_FLASH_CHIP_ID "ID чипу Flash пам'яті"
#define D_FLASH_CHIP_SIZE "Розмір Flash пам'яті"
#define D_FREE_PROGRAM_SPACE "Вільний простір для програм"
#define D_UPGRADE_BY_WEBSERVER "Оновлення через Веб-сервер"
-#define D_OTA_URL "OTA Url"
+#define D_OTA_URL "OTA URL"
#define D_START_UPGRADE "Почати оновлення"
#define D_UPGRADE_BY_FILE_UPLOAD "Оновлення шляхом завантаження файлів"
#define D_UPLOAD_STARTED "Завантаження почалось"
@@ -350,11 +350,11 @@
#define D_UPLOAD_ERR_7 "Завантаження перервано"
#define D_UPLOAD_ERR_8 "Файл невірний"
#define D_UPLOAD_ERR_9 "Занадто великий файл"
-#define D_UPLOAD_ERR_10 "Помилка ініціалізаціції чипу FR"
+#define D_UPLOAD_ERR_10 "Помилка ініціалізаціції чипу RF"
#define D_UPLOAD_ERR_11 "Помилка стирання чипу RF"
#define D_UPLOAD_ERR_12 "Помилка запису чипу RF"
#define D_UPLOAD_ERR_13 "Помилка розкодування прошивки RF"
-#define D_UPLOAD_ERR_14 "Not compatible"
+#define D_UPLOAD_ERR_14 "Не сумісно"
#define D_UPLOAD_ERROR_CODE "Код помилки завантаження"
#define D_ENTER_COMMAND "Уведіть команду"
@@ -363,7 +363,7 @@
// xdrv_01_mqtt.ino
#define D_FINGERPRINT "Перевірка відбитка TLS..."
-#define D_TLS_CONNECT_FAILED_TO "Збій підключення TLS до"
+#define D_TLS_CONNECT_FAILED_TO "Збій TLS підключення до"
#define D_RETRY_IN "Повторити"
#define D_VERIFIED "Перевірено відбиток"
#define D_INSECURE "Небезпечне з'єднання, недійсний відбиток"
@@ -414,7 +414,7 @@
#define D_TIMER_ARM "Увімкнений"
#define D_TIMER_TIME "Час"
#define D_TIMER_DAYS "Дні"
-#define D_TIMER_REPEAT "Повтор"
+#define D_TIMER_REPEAT "Повторення"
#define D_TIMER_OUTPUT "Вихід"
#define D_TIMER_ACTION "Дія"
@@ -459,9 +459,9 @@
#define D_DEVICE_OUTPUT "Output"
// xsns_05_ds18b20.ino
-#define D_SENSOR_BUSY "Датчик DS18x20 зайнятий"
-#define D_SENSOR_CRC_ERROR "Датчик DS18x20 - помилка CRC"
-#define D_SENSORS_FOUND "Датчик DS18x20 знайдено"
+#define D_SENSOR_BUSY "Давач DS18x20 зайнятий"
+#define D_SENSOR_CRC_ERROR "Давач DS18x20 - помилка CRC"
+#define D_SENSORS_FOUND "Давач DS18x20 знайдено"
// xsns_06_dht.ino
#define D_TIMEOUT_WAITING_FOR "Тайм-аут, в очікуванні"
@@ -471,7 +471,7 @@
#define D_CHECKSUM_FAILURE "Помилка контрольної суми"
// xsns_07_sht1x.ino
-#define D_SENSOR_DID_NOT_ACK_COMMAND "Датчик не підтвердив отримання команди"
+#define D_SENSOR_DID_NOT_ACK_COMMAND "Давач не підтвердив отримання команди"
#define D_SHT1X_FOUND "SHT1X знайдено"
// xsns_18_pms5003.ino
@@ -543,7 +543,7 @@
#define D_SENSOR_SPI_MISO "SPI MISO"
#define D_SENSOR_SPI_MOSI "SPI MOSI"
#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_BACKLIGHT "Backlight"
+#define D_SENSOR_BACKLIGHT "OLED Light"
#define D_SENSOR_PMS5003 "PMS5003"
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
@@ -564,7 +564,7 @@
#define D_SENSOR_HX711_DAT "HX711 DAT"
#define D_SENSOR_TX20_TX "TX20"
#define D_SENSOR_RFSEND "RFSend"
-#define D_SENSOR_RFRECV "RFrecv"
+#define D_SENSOR_RFRECV "RFRecv"
#define D_SENSOR_TUYA_TX "Tuya Tx"
#define D_SENSOR_TUYA_RX "Tuya Rx"
#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
@@ -628,9 +628,9 @@
#define D_SENSOR_SM2135_DAT "SM2135 Dat"
#define D_SENSOR_DEEPSLEEP "DeepSleep"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_SLAVE_TX "Slave TX"
-#define D_SENSOR_SLAVE_RX "Slave RX"
-#define D_SENSOR_SLAVE_RESET "Slave RST"
+#define D_SENSOR_SLAVE_TX "Slave TX"
+#define D_SENSOR_SLAVE_RX "Slave RX"
+#define D_SENSOR_SLAVE_RESET "Slave RST"
#define D_SENSOR_GPS_RX "GPS RX"
#define D_SENSOR_GPS_TX "GPS TX"
@@ -640,20 +640,20 @@
#define D_UNIT_HERTZ "Гц"
#define D_UNIT_HOUR "Г"
#define D_UNIT_GALLONS "гал"
-#define D_UNIT_GALLONS_PER_MIN "g/m"
+#define D_UNIT_GALLONS_PER_MIN "гал/хв"
#define D_UNIT_INCREMENTS "inc"
#define D_UNIT_KILOGRAM "кг"
#define D_UNIT_KILOMETER_PER_HOUR "км/г" // or "km/h"
#define D_UNIT_KILOOHM "кОм"
-#define D_UNIT_KILOWATTHOUR "кВт"
+#define D_UNIT_KILOWATTHOUR "кВт/г"
#define D_UNIT_LUX "лк"
#define D_UNIT_MICROGRAM_PER_CUBIC_METER "мкг/м3"
#define D_UNIT_MICROMETER "мкм"
-#define D_UNIT_MICROSECOND "мкс"
+#define D_UNIT_MICROSECOND "мкС"
#define D_UNIT_MILLIAMPERE "мА"
#define D_UNIT_MILLIMETER "мм"
#define D_UNIT_MILLIMETER_MERCURY "ммHg"
-#define D_UNIT_MILLISECOND "мс"
+#define D_UNIT_MILLISECOND "мС"
#define D_UNIT_MINUTE "хв"
#define D_UNIT_PARTS_PER_BILLION "ppb"
#define D_UNIT_PARTS_PER_DECILITER "ppd"
@@ -665,8 +665,8 @@
#define D_UNIT_VAR "ВАр"
#define D_UNIT_VOLT "В"
#define D_UNIT_WATT "Вт"
-#define D_UNIT_WATTHOUR "Вт/Год"
-#define D_UNIT_WATT_METER_QUADRAT "Вт/m²"
+#define D_UNIT_WATTHOUR "Вт/г"
+#define D_UNIT_WATT_METER_QUADRAT "Вт/м²"
//SDM220
#define D_PHASE_ANGLE "Кут фази"
@@ -679,27 +679,27 @@
#define D_UNIT_ANGLE "Град"
//SOLAXX1
-#define D_PV1_VOLTAGE "PV1 Voltage"
-#define D_PV1_CURRENT "PV1 Current"
-#define D_PV1_POWER "PV1 Power"
-#define D_PV2_VOLTAGE "PV2 Voltage"
-#define D_PV2_CURRENT "PV2 Current"
-#define D_PV2_POWER "PV2 Power"
-#define D_SOLAR_POWER "Solar Power"
-#define D_INVERTER_POWER "Inverter Power"
-#define D_STATUS "Status"
-#define D_WAITING "Waiting"
-#define D_CHECKING "Checking"
-#define D_WORKING "Working"
-#define D_FAILURE "Failure"
-#define D_SOLAX_ERROR_0 "No Error Code"
-#define D_SOLAX_ERROR_1 "Grid Lost Fault"
-#define D_SOLAX_ERROR_2 "Grid Voltage Fault"
-#define D_SOLAX_ERROR_3 "Grid Frequency Fault"
-#define D_SOLAX_ERROR_4 "Pv Voltage Fault"
-#define D_SOLAX_ERROR_5 "Isolation Fault"
-#define D_SOLAX_ERROR_6 "Over Temperature Fault"
-#define D_SOLAX_ERROR_7 "Fan Fault"
-#define D_SOLAX_ERROR_8 "Other Device Fault"
+#define D_PV1_VOLTAGE "PV1 Напруга"
+#define D_PV1_CURRENT "PV1 Струм"
+#define D_PV1_POWER "PV1 Потужність"
+#define D_PV2_VOLTAGE "PV2 Напруга"
+#define D_PV2_CURRENT "PV2 Струм"
+#define D_PV2_POWER "PV2 Потужність"
+#define D_SOLAR_POWER "Solar Потужність"
+#define D_INVERTER_POWER "Inverter Потужність"
+#define D_STATUS "Стан"
+#define D_WAITING "Очікування"
+#define D_CHECKING "Перевірка"
+#define D_WORKING "Працює"
+#define D_FAILURE "Помилка"
+#define D_SOLAX_ERROR_0 "Немає помилки"
+#define D_SOLAX_ERROR_1 "Втрата мережі"
+#define D_SOLAX_ERROR_2 "Напруга мережі"
+#define D_SOLAX_ERROR_3 "Частота мережі"
+#define D_SOLAX_ERROR_4 "Напруга Pv"
+#define D_SOLAX_ERROR_5 "Ізоляція"
+#define D_SOLAX_ERROR_6 "Перегрів"
+#define D_SOLAX_ERROR_7 "Вентилятор"
+#define D_SOLAX_ERROR_8 "Інший пристрій"
-#endif // _LANGUAGE_UK_UK_H_
+#endif // _LANGUAGE_UK_UA_H_
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 13e7c6c64..b60651fec 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -265,7 +265,7 @@
//#define MY_LANGUAGE sk-SK // Slovak in Slovakia
//#define MY_LANGUAGE sv-SE // Swedish in Sweden
//#define MY_LANGUAGE tr-TR // Turkish in Turkey
-//#define MY_LANGUAGE uk-UK // Ukrainian in Ukraine
+//#define MY_LANGUAGE uk-UA // Ukrainian in Ukraine
//#define MY_LANGUAGE zh-CN // Chinese (Simplified) in China
//#define MY_LANGUAGE zh-TW // Chinese (Traditional) in Taiwan
From 3f9018658c9ddee84326cef98f4e7c46eaaacc86 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 28 Dec 2019 09:58:30 +0100
Subject: [PATCH 169/559] Better gamma curve
---
tasmota/xdrv_04_light.ino | 55 ++++++++++++++++++++-------------------
1 file changed, 28 insertions(+), 27 deletions(-)
diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino
index ecb966053..1310ff471 100644
--- a/tasmota/xdrv_04_light.ino
+++ b/tasmota/xdrv_04_light.ino
@@ -171,7 +171,8 @@ typedef struct gamma_table_t {
} gamma_table_t;
const gamma_table_t gamma_table[] = { // don't put in PROGMEM for performance reasons
- { 3, 0 },
+ { 1, 1 },
+ { 4, 1 },
{ 209, 13 },
{ 312, 41 },
{ 457, 106 },
@@ -196,46 +197,46 @@ const gamma_table_t gamma_table_fast[] = {
// 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
// 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
// 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
-// 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
-// 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11,
-// 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18,
+// 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6,
+// 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11,
+// 11, 12, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18,
// 18, 19, 19, 20, 20, 21, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25,
// 25, 26, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 36, 37, 38,
// 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 51, 52, 53,
-// 54, 55, 56, 57, 58, 59, 60, 61, 61, 62, 63, 64, 65, 66, 68, 69,
-// 71, 72, 73, 75, 76, 78, 79, 80, 82, 83, 85, 86, 87, 88, 90, 91,
+// 54, 55, 56, 57, 58, 59, 60, 61, 61, 62, 63, 64, 65, 67, 68, 69,
+// 71, 72, 73, 75, 76, 78, 79, 80, 82, 83, 85, 86, 87, 89, 90, 91,
// 93, 94, 95, 97, 98,100,101,102,104,105,107,108,109,111,112,114,
-// 116,118,120,121,123,125,127,129,131,133,135,137,139,141,142,144,
+// 116,118,120,122,124,125,127,129,131,133,135,137,139,141,143,144,
// 146,148,150,152,154,156,158,160,162,164,166,168,170,171,173,175,
-// 177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,
-// 217,220,222,225,227,230,233,235,238,240,243,245,248,250,253,255
+// 178,180,183,185,188,190,193,195,198,200,203,205,208,210,213,215,
+// 218,220,223,225,228,230,233,235,238,240,243,245,248,250,253,255
//
// and for 10 bits output:
// 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4,
// 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8,
// 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
-// 12, 12, 13, 13, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-// 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 44,
-// 46, 47, 49, 51, 53, 54, 56, 58, 60, 62, 63, 65, 67, 69, 70, 72,
-// 74, 76, 78, 79, 81, 83, 85, 86, 88, 90, 92, 94, 95, 97, 99, 101,
+// 12, 12, 13, 13, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25,
+// 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43,
+// 45, 47, 49, 50, 52, 54, 56, 58, 59, 61, 63, 65, 67, 68, 70, 72,
+// 74, 76, 77, 79, 81, 83, 84, 86, 88, 90, 92, 93, 95, 97, 99, 101,
// 102, 104, 106, 110, 113, 117, 121, 124, 128, 132, 135, 139, 143, 146, 150, 154,
// 158, 162, 166, 169, 173, 177, 180, 184, 188, 191, 195, 199, 202, 206, 210, 213,
-// 217, 221, 224, 228, 232, 235, 239, 243, 246, 250, 254, 257, 261, 266, 272, 277,
-// 283, 288, 294, 300, 305, 311, 316, 322, 327, 333, 339, 344, 350, 355, 361, 366,
-// 372, 378, 383, 389, 394, 400, 405, 411, 417, 422, 428, 433, 439, 444, 450, 457,
-// 464, 472, 480, 487, 495, 503, 510, 518, 525, 533, 541, 548, 556, 564, 571, 579,
-// 587, 594, 602, 609, 617, 627, 634, 642, 650, 657, 665, 672, 680, 688, 695, 703,
-// 712, 722, 732, 742, 752, 762, 772, 782, 792, 802, 812, 822, 832, 842, 852, 862,
-// 872, 882, 892, 902, 912, 923, 933, 943, 953, 963, 973, 983, 993,1003,1013,1023
+// 217, 221, 224, 228, 232, 235, 239, 243, 246, 250, 254, 257, 261, 267, 272, 278,
+// 283, 289, 294, 300, 305, 311, 317, 322, 328, 333, 339, 344, 350, 356, 361, 367,
+// 372, 378, 383, 389, 394, 400, 406, 411, 417, 422, 428, 433, 439, 444, 450, 458,
+// 465, 473, 480, 488, 496, 503, 511, 518, 526, 534, 541, 549, 557, 564, 572, 579,
+// 587, 595, 602, 610, 617, 627, 635, 642, 650, 657, 665, 673, 680, 688, 695, 703,
+// 713, 723, 733, 743, 753, 763, 773, 783, 793, 803, 813, 823, 833, 843, 853, 863,
+// 873, 883, 893, 903, 913, 923, 933, 943, 953, 963, 973, 983, 993,1003,1013,1023
//
// Output for Dimmer 0..100 values
// 0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 7, 8, 8, 9,
-// 10, 10, 11, 12, 12, 13, 16, 18, 21, 23, 26, 29, 32, 34, 37,
-// 40, 44, 49, 53, 58, 62, 67, 70, 76, 79, 85, 90, 94, 99,102,
+// 10, 10, 11, 12, 12, 13, 15, 17, 21, 23, 26, 28, 31, 34, 37,
+// 40, 43, 49, 52, 58, 61, 67, 70, 76, 79, 84, 90, 93, 99,102,
// 110,117,128,135,146,158,166,177,184,195,202,213,221,232,239,
-// 250,261,272,288,300,316,327,344,355,372,389,400,417,428,444,
-// 457,480,495,518,533,556,579,594,617,634,657,672,695,712,742,
-// 772,792,822,842,872,892,923,943,973,993,1023
+// 250,261,272,289,300,317,328,344,356,372,389,400,417,428,444,
+// 458,480,496,518,534,557,579,595,617,635,657,673,695,713,743,
+// 773,793,823,843,873,893,923,943,973,993,1023
struct LIGHT {
uint32_t strip_timer_counter = 0; // Bars and Gradient
@@ -1103,8 +1104,8 @@ uint16_t ledGamma_internal(uint16_t v, const struct gamma_table_t *gt_ptr) {
if (v <= to_src) {
return changeUIntScale(v, from_src, to_src, from_gamma, to_gamma);
}
- from_src = to_src + 1;
- from_gamma = to_gamma + 1;
+ from_src = to_src;
+ from_gamma = to_gamma;
}
}
// 10_10 bits, fast fade mode
From 7295b6631021fc68443033665c12373499658cbf Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 28 Dec 2019 10:42:00 +0100
Subject: [PATCH 170/559] Add DS1624 support
---
RELEASENOTES.md | 4 ++--
tasmota/CHANGELOG.md | 3 ++-
tasmota/support_features.ino | 4 +++-
3 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 16e5d63c2..e3b1e0fb4 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -50,13 +50,13 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
[Complete list](BUILDS.md) of available feature and sensors.
-For merge for Changelog:
-- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
## Changelog
### Version 8.1.0.1
+- Change Lights: simplified gamma correction and 10 bits internal computation
- Fix Sonoff Bridge, Sc, L1, iFan03 and CSE7766 serial interface to forced speed, config and disable logging
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
- Add SerialConfig to ``Status 1``
- Add WifiPower to ``Status 5``
+- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 077384325..530b8c198 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -2,11 +2,12 @@
### 8.1.0.1 20191225
+- Change Lights: simplified gamma correction and 10 bits internal computation
- Fix Sonoff Bridge, Sc, L1, iFan03 and CSE7766 serial interface to forced speed, config and disable logging
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
- Add SerialConfig to ``Status 1``
- Add WifiPower to ``Status 5``
-- Change Lights: simplified gamma correction and 10 bits internal computation
+- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
## Released
diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino
index dcc24de0b..696e5ee5d 100644
--- a/tasmota/support_features.ino
+++ b/tasmota/support_features.ino
@@ -492,7 +492,9 @@ void GetFeatures(void)
#ifdef USE_DHT12
feature5 |= 0x00100000;
#endif
-// feature5 |= 0x00200000;
+#ifdef USE_DS1624
+ feature5 |= 0x00200000;
+#endif
#ifdef USE_GPS
feature5 |= 0x00400000;
#endif
From 5f62b59f05d82b15792e0cfda81a451825d8942f Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 28 Dec 2019 11:35:44 +0100
Subject: [PATCH 171/559] Refactor DS1624 driver
---
tasmota/my_user_config.h | 1 +
tasmota/xsns_59_ds1624.ino | 134 ++++++++++++++++++++-----------------
2 files changed, 72 insertions(+), 63 deletions(-)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index b60651fec..538301695 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -419,6 +419,7 @@
// #define USE_PCF8574 // [I2cDriver2] Enable PCF8574 I/O Expander (I2C addresses 0x20 - 0x26 and 0x39 - 0x3F) (+1k9 code)
// #define USE_HIH6 // [I2cDriver36] Enable Honeywell HIH Humidity and Temperature sensor (I2C address 0x27) (+0k6)
// #define USE_DHT12 // [I2cDriver41] Enable DHT12 humidity and temperature sensor (I2C address 0x5C) (+0k7 code)
+// #define USE_DS1624 // [I2cDriver42] Enable DS1624, DS1621 temperature sensor (I2C addresses 0x48 - 0x4F) (+1k2 code)
// #define USE_DISPLAY // Add I2C Display Support (+2k code)
#define USE_DISPLAY_MODES1TO5 // Enable display mode 1 to 5 in addition to mode 0
diff --git a/tasmota/xsns_59_ds1624.ino b/tasmota/xsns_59_ds1624.ino
index 82ce7d8f6..06b21d39e 100644
--- a/tasmota/xsns_59_ds1624.ino
+++ b/tasmota/xsns_59_ds1624.ino
@@ -21,8 +21,8 @@
#ifdef USE_DS1624
/*********************************************************************************************\
- * DS1624,DS1621 - Temperature
- *
+ * DS1624, DS1621 - Temperature
+ *
* I2C Address: 0x48 - 0x4F
\*********************************************************************************************/
@@ -44,64 +44,68 @@ enum {
};
#define DS1624_MAX_SENSORS 8
-bool ds1624_init=false;
+
+bool ds1624_init = false;
+
struct {
- bool valid;
- float value;
- int type;
- char name[9];
+ float value;
+ uint8_t type;
+ bool valid;
+ char name[9];
} ds1624_sns[DS1624_MAX_SENSORS];
-uint32_t DS1624_Idx2Addr(int idx) {
+uint32_t DS1624_Idx2Addr(uint32_t idx) {
return 0x48 + idx;
}
-void DS1624_HotPlugUp(int idx) {
- uint32_t addr;
- uint8_t config,tmp;
+void DS1624_HotPlugUp(uint32_t idx)
+{
+ uint32_t addr = DS1624_Idx2Addr(idx);
- addr = DS1624_Idx2Addr(idx);
- if (I2cActive(addr)) return;
- if (!I2cSetDevice(addr)) return;
+ if (I2cActive(addr)) { return; }
+ if (!I2cSetDevice(addr)) { return; }
+
+ uint8_t config;
if (I2cValidRead8(&config, addr, DS1624_CONF_REGISTER)) {
- if (I2cValidRead8(&tmp, addr, DS1624_MEM_REGISTER))
- ds1624_sns[idx].type=DS1624_TYPE_DS1624;
- else ds1624_sns[idx].type=DS1624_TYPE_DS1621;
- if (ds1624_sns[idx].type==DS1624_TYPE_DS1621)
- snprintf_P(ds1624_sns[idx].name, sizeof(ds1624_sns[idx].name), PSTR("DS1621_%d"), idx);
- else snprintf_P(ds1624_sns[idx].name, sizeof(ds1624_sns[idx].name), PSTR("DS1624_%d"), idx);
+ uint8_t tmp;
+ ds1624_sns[idx].type = (I2cValidRead8(&tmp, addr, DS1624_MEM_REGISTER)) ? DS1624_TYPE_DS1624 : DS1624_TYPE_DS1621;
+
+ snprintf_P(ds1624_sns[idx].name, sizeof(ds1624_sns[idx].name), PSTR("DS162%c%c%d"),
+ (ds1624_sns[idx].type == DS1624_TYPE_DS1621) ? '1' : '4', IndexSeparator(), idx);
I2cSetActiveFound(addr, ds1624_sns[idx].name);
- ds1624_sns[idx].valid=true;
+
+ ds1624_sns[idx].valid = true;
if ((config & 1) == 1) {
config &= 0xfe;
- I2cWrite8(addr, DS1624_CONF_REGISTER, config); //1show off
- delay(10);// by spec after writing
+ I2cWrite8(addr, DS1624_CONF_REGISTER, config); // 1show off
+ delay(10); // by spec after writing
}
- I2cValidRead(addr, DS1624_START_REGISTER, 1); //FIXME 0 must read, but 0 isn't work for tasmota
+ I2cValidRead(addr, DS1624_START_REGISTER, 1); // FIXME 0 must read, but 0 isn't work for tasmota
AddLog_P2(LOG_LEVEL_INFO, "Hot Plug %s addr %x config: %x", ds1624_sns[idx].name, addr, config);
}
}
-void DS1624_HotPlugDown(int idx) {
- uint32_t addr=DS1624_Idx2Addr(idx);
- if (I2cActive(addr)==false) return;
+void DS1624_HotPlugDown(int idx)
+{
+ uint32_t addr = DS1624_Idx2Addr(idx);
+ if (!I2cActive(addr)) { return; }
I2cResetActive(addr);
- ds1624_sns[idx].valid=false;
+ ds1624_sns[idx].valid = false;
AddLog_P2(LOG_LEVEL_INFO, "Hot UnPlug %s", ds1624_sns[idx].name);
}
bool DS1624GetTemp(float *value, int idx)
{
- uint16_t t;
- bool result;
- uint32_t addr=DS1624_Idx2Addr(idx);
+ uint32_t addr = DS1624_Idx2Addr(idx);
- if (!I2cValidRead16(&t, DS1624_Idx2Addr(idx), DS1624_TEMP_REGISTER)) return false;
- *value = ConvertTemp(((float)(int8_t)(t>>8)) + ((t>>4)&0xf)*0.0625);
- if (ds1624_sns[idx].type==DS1624_TYPE_DS1621) { // Higher resolution
- uint8_t perc,remain;
- if (I2cValidRead8(&remain, addr, DS1621_COUNTER_REGISTER)==false) return true;
- if (I2cValidRead8(&perc, addr, DS1621_SLOPE_REGISTER)==false) return true;
+ uint16_t t;
+ if (!I2cValidRead16(&t, DS1624_Idx2Addr(idx), DS1624_TEMP_REGISTER)) { return false; }
+ *value = ((float)(int8_t)(t>>8)) + ((t>>4)&0xf)*0.0625;
+ if (ds1624_sns[idx].type == DS1624_TYPE_DS1621) { // Higher resolution
+ uint8_t remain;
+ if (!I2cValidRead8(&remain, addr, DS1621_COUNTER_REGISTER)) { return true; }
+ uint8_t perc;
+ if (!I2cValidRead8(&perc, addr, DS1621_SLOPE_REGISTER)) { return true; }
*value += ((float)perc - (float)remain)/((float)perc) - 0.25;
}
return true;
@@ -111,13 +115,15 @@ void DS1624HotPlugScan(void)
{
uint16_t t;
- for (int idx = 0; idx < DS1624_MAX_SENSORS; idx++) {
- uint32_t addr=DS1624_Idx2Addr(idx);
- if ((I2cActive(addr)==true) && (ds1624_sns[idx].valid==false))
- continue; // is busy by another driver
+ for (uint32_t idx = 0; idx < DS1624_MAX_SENSORS; idx++) {
+ uint32_t addr = DS1624_Idx2Addr(idx);
+ if (I2cActive(addr) && !ds1624_sns[idx].valid) {
+ continue; // is busy by another driver
+ }
if (!I2cValidRead16(&t, DS1624_Idx2Addr(idx), DS1624_TEMP_REGISTER)) {
DS1624_HotPlugDown(idx);
- continue; }
+ continue;
+ }
DS1624_HotPlugUp(idx);
}
}
@@ -125,36 +131,37 @@ void DS1624HotPlugScan(void)
void DS1624EverySecond(void)
{
float t;
- for (int i = 0; i < DS1624_MAX_SENSORS; i++) {
- if (ds1624_sns[i].valid==false) continue;
- if (!DS1624GetTemp(&t, i)) continue;
- ds1624_sns[i].value=t;
+ for (uint32_t i = 0; i < DS1624_MAX_SENSORS; i++) {
+ if (!ds1624_sns[i].valid) { continue; }
+ if (!DS1624GetTemp(&t, i)) { continue; }
+ ds1624_sns[i].value = ConvertTemp(t);
}
}
void DS1624Show(bool json)
{
- int i;
char temperature[33];
+ bool once = true;
- for (i = 0; i < DS1624_MAX_SENSORS; i++) {
- if (ds1624_sns[i].valid==false) continue;
+ for (uint32_t i = 0; i < DS1624_MAX_SENSORS; i++) {
+ if (!ds1624_sns[i].valid) { continue; }
dtostrfd(ds1624_sns[i].value, Settings.flag2.temperature_resolution, temperature);
if (json) {
ResponseAppend_P(PSTR(",\"%s\":{\"" D_JSON_TEMPERATURE "\":%s}"), ds1624_sns[i].name, temperature);
- if (0 == tele_period) { //FIXME 0==i WTF?
- #ifdef USE_DOMOTICZ
+ if ((0 == tele_period) && once) {
+#ifdef USE_DOMOTICZ
DomoticzSensor(DZ_TEMP, temperature);
- #endif // USE_DOMOTICZ
- #ifdef USE_KNX
+#endif // USE_DOMOTICZ
+#ifdef USE_KNX
KnxSensor(KNX_TEMPERATURE, temperature);
- #endif // USE_KNX
+#endif // USE_KNX
+ once = false;
}
- #ifdef USE_WEBSERVER
+#ifdef USE_WEBSERVER
} else {
WSContentSend_PD(HTTP_SNS_TEMP, ds1624_sns[i].name, temperature, TempUnit());
- #endif // USE_WEBSERVER
+#endif // USE_WEBSERVER
}
}
}
@@ -163,18 +170,19 @@ void DS1624Show(bool json)
* Interface
\*********************************************************************************************/
-#define FUNC_HOTPLUG_SCAN 999 // FIXME remove it after HOTPLUG supported
+#define FUNC_HOTPLUG_SCAN 255 // FIXME remove it after HOTPLUG supported
bool Xsns59(uint8_t function)
{
- if (!I2cEnabled(XI2C_20)) { return false; }
+ if (!I2cEnabled(XI2C_42)) { return false; }
bool result = false;
+
if (FUNC_INIT == function) {
- if (ds1624_init==false) {
+ if (!ds1624_init) {
memset(ds1624_sns, 0, sizeof(ds1624_sns));
- ds1624_init=true;
- DS1624HotPlugScan(); //If HotPlug is off
+ ds1624_init = true;
+ DS1624HotPlugScan(); // If HotPlug is off
}
}
switch (function) {
@@ -187,11 +195,11 @@ bool Xsns59(uint8_t function)
case FUNC_JSON_APPEND:
DS1624Show(1);
break;
- #ifdef USE_WEBSERVER
+#ifdef USE_WEBSERVER
case FUNC_WEB_SENSOR:
DS1624Show(0);
break;
- #endif // USE_WEBSERVER
+#endif // USE_WEBSERVER
}
return result;
}
From 4d9c55108314c789dc704ea758e74993ec490776 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 28 Dec 2019 13:14:51 +0100
Subject: [PATCH 172/559] Add WDT crash status
---
tasmota/support_command.ino | 5 ++++-
tasmota/support_crash_recorder.ino | 9 +++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index 53f4601a8..397d60f30 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -334,7 +334,7 @@ void CmndStatus(void)
if ((!Settings.flag.mqtt_enabled) && (6 == payload)) { payload = 99; } // SetOption3 - Enable MQTT
if (!energy_flg && (9 == payload)) { payload = 99; }
- bool exception_flg = (ResetReason() == REASON_EXCEPTION_RST);
+ bool exception_flg = (ResetReason() == REASON_EXCEPTION_RST) || (ResetReason() == REASON_SOFT_WDT_RST);
if (!exception_flg && (12 == payload)) { payload = 99; }
if ((0 == payload) || (99 == payload)) {
@@ -575,6 +575,9 @@ void CmndRestart(void)
case -1:
CmndCrash(); // force a crash
break;
+ case -2:
+ CmndWDT();
+ break;
case 99:
AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_RESTARTING));
EspRestart();
diff --git a/tasmota/support_crash_recorder.ino b/tasmota/support_crash_recorder.ino
index 87009bbc5..d354adb3b 100644
--- a/tasmota/support_crash_recorder.ino
+++ b/tasmota/support_crash_recorder.ino
@@ -50,6 +50,15 @@ void CmndCrash(void)
dummy = *((uint32_t*) 0x00000000);
}
+// do an infinite loop to trigger WDT watchdog
+void CmndWDT(void)
+{
+ volatile uint32_t dummy = 0;
+ while (1) {
+ dummy++;
+ }
+}
+
// Clear the RTC dump counter when we do a normal reboot, this avoids garbage data to stay in RTC
void CrashDumpClear(void)
{
From eabac5e466027f9df1e616a97419e6ffd6f75fd5 Mon Sep 17 00:00:00 2001
From: Hadinger
Date: Sat, 28 Dec 2019 13:59:01 +0100
Subject: [PATCH 173/559] Zigbee attribute decoder for Xiaomi Aqara Cube
---
tasmota/CHANGELOG.md | 1 +
tasmota/xdrv_23_zigbee_5_converters.ino | 61 ++++++++++++++++++++++++-
2 files changed, 61 insertions(+), 1 deletion(-)
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 530b8c198..3abb0db81 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -8,6 +8,7 @@
- Add SerialConfig to ``Status 1``
- Add WifiPower to ``Status 5``
- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
+- Add Zigbee attribute decoder for Xiaomi Aqara Cube
## Released
diff --git a/tasmota/xdrv_23_zigbee_5_converters.ino b/tasmota/xdrv_23_zigbee_5_converters.ino
index 1423c53f1..94853d629 100644
--- a/tasmota/xdrv_23_zigbee_5_converters.ino
+++ b/tasmota/xdrv_23_zigbee_5_converters.ino
@@ -601,7 +601,7 @@ const Z_AttributeConverter Z_PostProcess[] PROGMEM = {
{ 0x0012, 0x001C, "Description", &Z_Copy },
{ 0x0012, 0x004A, "NumberOfStates", &Z_Copy },
{ 0x0012, 0x0051, "OutOfService", &Z_Copy },
- { 0x0012, 0x0055, "PresentValue", &Z_Copy },
+ { 0x0012, 0x0055, "PresentValue", &Z_AqaraCube },
{ 0x0012, 0x0067, "Reliability", &Z_Copy },
{ 0x0012, 0x006F, "StatusFlags", &Z_Copy },
{ 0x0012, 0x0100, "ApplicationType", &Z_Copy },
@@ -836,6 +836,65 @@ int32_t Z_OccupancyCallback(uint16_t shortaddr, uint16_t cluster, uint16_t endpo
XdrvRulesProcess();
}
+// Aqara Cube
+int32_t Z_AqaraCube(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
+ json[new_name] = value; // copy the original value
+ int32_t val = value;
+ const __FlashStringHelper *aqara_cube = F("AqaraCube");
+ const __FlashStringHelper *aqara_cube_side = F("AqaraCubeSide");
+ const __FlashStringHelper *aqara_cube_from_side = F("AqaraCubeFromSide");
+
+ switch (val) {
+ case 0:
+ json[aqara_cube] = F("shake");
+ break;
+ case 2:
+ json[aqara_cube] = F("wakeup");
+ break;
+ case 3:
+ json[aqara_cube] = F("fall");
+ break;
+ case 64 ... 127:
+ json[aqara_cube] = F("flip90");
+ json[aqara_cube_side] = val % 8;
+ json[aqara_cube_from_side] = (val - 64) / 8;
+ break;
+ case 128 ... 132:
+ json[aqara_cube] = F("flip180");
+ json[aqara_cube_side] = val - 128;
+ break;
+ case 256 ... 261:
+ json[aqara_cube] = F("slide");
+ json[aqara_cube_side] = val - 256;
+ break;
+ case 512 ... 517:
+ json[aqara_cube] = F("tap");
+ json[aqara_cube_side] = val - 512;
+ break;
+ }
+
+ // Source: https://github.com/kirovilya/ioBroker.zigbee
+ // +---+
+ // | 2 |
+ // +---+---+---+
+ // | 4 | 0 | 1 |
+ // +---+---+---+
+ // |M5I|
+ // +---+
+ // | 3 |
+ // +---+
+ // Side 5 is with the MI logo, side 3 contains the battery door.
+ // presentValue = 0 = shake
+ // presentValue = 2 = wakeup
+ // presentValue = 3 = fly/fall
+ // presentValue = y + x * 8 + 64 = 90º Flip from side x on top to side y on top
+ // presentValue = x + 128 = 180º flip to side x on top
+ // presentValue = x + 256 = push/slide cube while side x is on top
+ // presentValue = x + 512 = double tap while side x is on top
+
+ return 1;
+}
+
// Aqara Vibration Sensor - special proprietary attributes
int32_t Z_AqaraVibration(const class ZCLFrame *zcl, uint16_t shortaddr, JsonObject& json, const char *name, JsonVariant& value, const String &new_name, uint16_t cluster, uint16_t attr) {
//json[new_name] = value;
From ab167b097477b0fd53857e784edf77bfe955cbb4 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 28 Dec 2019 14:54:26 +0100
Subject: [PATCH 174/559] Add more crash dump information
---
RELEASENOTES.md | 1 +
tasmota/support.ino | 7 ++++++-
tasmota/support_command.ino | 9 +++++----
tasmota/support_crash_recorder.ino | 15 ++++++++++++++-
tasmota/xdrv_02_mqtt.ino | 2 +-
5 files changed, 27 insertions(+), 7 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index e3b1e0fb4..42788a5b9 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -60,3 +60,4 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Add SerialConfig to ``Status 1``
- Add WifiPower to ``Status 5``
- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
+- Add Zigbee attribute decoder for Xiaomi Aqara Cube
diff --git a/tasmota/support.ino b/tasmota/support.ino
index 32ef55731..8010f1e5c 100644
--- a/tasmota/support.ino
+++ b/tasmota/support.ino
@@ -57,8 +57,13 @@ void OsWatchTicker(void)
// AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_OSWATCH " " D_BLOCKED_LOOP ". " D_RESTARTING)); // Save iram space
RtcSettings.oswatch_blocked_loop = 1;
RtcSettingsSave();
+
// ESP.restart(); // normal reboot
- ESP.reset(); // hard reset
+// ESP.reset(); // hard reset
+
+ // Force an exception to get a stackdump
+ volatile uint32_t dummy;
+ dummy = *((uint32_t*) 0x00000000);
}
}
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index 397d60f30..0762fa329 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -333,9 +333,7 @@ void CmndStatus(void)
if ((!Settings.flag.mqtt_enabled) && (6 == payload)) { payload = 99; } // SetOption3 - Enable MQTT
if (!energy_flg && (9 == payload)) { payload = 99; }
-
- bool exception_flg = (ResetReason() == REASON_EXCEPTION_RST) || (ResetReason() == REASON_SOFT_WDT_RST);
- if (!exception_flg && (12 == payload)) { payload = 99; }
+ if (!CrashFlag() && (12 == payload)) { payload = 99; }
if ((0 == payload) || (99 == payload)) {
uint32_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
@@ -482,7 +480,7 @@ void CmndStatus(void)
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "11"));
}
- if (exception_flg) {
+ if (CrashFlag()) {
if ((0 == payload) || (12 == payload)) {
Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS12_STATUS "\":"));
CrashDump();
@@ -578,6 +576,9 @@ void CmndRestart(void)
case -2:
CmndWDT();
break;
+ case -3:
+ CmndBlockedLoop();
+ break;
case 99:
AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_RESTARTING));
EspRestart();
diff --git a/tasmota/support_crash_recorder.ino b/tasmota/support_crash_recorder.ino
index d354adb3b..a51cb5dd2 100644
--- a/tasmota/support_crash_recorder.ino
+++ b/tasmota/support_crash_recorder.ino
@@ -50,7 +50,7 @@ void CmndCrash(void)
dummy = *((uint32_t*) 0x00000000);
}
-// do an infinite loop to trigger WDT watchdog
+// Do an infinite loop to trigger WDT watchdog
void CmndWDT(void)
{
volatile uint32_t dummy = 0;
@@ -59,6 +59,14 @@ void CmndWDT(void)
}
}
+// This will trigger the os watch after OSWATCH_RESET_TIME (=120) seconds
+void CmndBlockedLoop(void)
+{
+ while (1) {
+ delay(1000);
+ }
+}
+
// Clear the RTC dump counter when we do a normal reboot, this avoids garbage data to stay in RTC
void CrashDumpClear(void)
{
@@ -70,6 +78,11 @@ void CrashDumpClear(void)
* CmndCrashDump - dump the crash history - called by `Status 12`
\*********************************************************************************************/
+bool CrashFlag(void)
+{
+ return ((ResetReason() == REASON_EXCEPTION_RST) || (ResetReason() == REASON_SOFT_WDT_RST) || oswatch_blocked_loop);
+}
+
void CrashDump(void)
{
ResponseAppend_P(PSTR("{\"Exception\":%d,\"Reason\":\"%s\",\"EPC\":[\"%08x\",\"%08x\",\"%08x\"],\"EXCVADDR\":\"%08x\",\"DEPC\":\"%08x\""),
diff --git a/tasmota/xdrv_02_mqtt.ino b/tasmota/xdrv_02_mqtt.ino
index 910a2ea6f..3544ec070 100644
--- a/tasmota/xdrv_02_mqtt.ino
+++ b/tasmota/xdrv_02_mqtt.ino
@@ -532,7 +532,7 @@ void MqttConnected(void)
}
#endif // USE_WEBSERVER
Response_P(PSTR("{\"" D_JSON_RESTARTREASON "\":"));
- if (ResetReason() == REASON_EXCEPTION_RST) {
+ if (CrashFlag()) {
CrashDump();
} else {
ResponseAppend_P(PSTR("\"%s\""), GetResetReason().c_str());
From aefb3fb9de0e2f43afd54665006009a99d030eb8 Mon Sep 17 00:00:00 2001
From: Andre Thomas <470015+andrethomas@users.noreply.github.com>
Date: Sat, 28 Dec 2019 16:47:30 +0200
Subject: [PATCH 175/559] Reserve SetOption79
Used to enable resetting of the counter values to zero after telemetry data was transmitted.
---
tasmota/settings.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/settings.h b/tasmota/settings.h
index eddc4f04b..0c47e5aca 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -92,7 +92,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
uint32_t bootcount_update : 1; // bit 26 (v7.0.0.4) - SetOption76 - Enable incrementing bootcount when deepsleep is enabled
uint32_t slider_dimmer_stay_on : 1; // bit 27 (v7.0.0.6) - SetOption77 - Do not power off if slider moved to far left
uint32_t compatibility_check : 1; // bit 28 (v7.1.2.6) - SetOption78 - Disable OTA compatibility check
- uint32_t spare29 : 1;
+ uint32_t counter_reset_on_tele : 1; // bit 29 (v8.1.0.1) - SetOption79 - Enable resetting of counters after telemetry was sent
uint32_t shutter_mode : 1; // bit 30 (v6.6.0.14) - SetOption80 - Enable shutter support
uint32_t pcf8574_ports_inverted : 1; // bit 31 (v6.6.0.14) - SetOption81 - Invert all ports on PCF8574 devices
};
From 436cf830b9b5690d3f41a122160352c5106d87cf Mon Sep 17 00:00:00 2001
From: Andre Thomas <470015+andrethomas@users.noreply.github.com>
Date: Sat, 28 Dec 2019 16:49:57 +0200
Subject: [PATCH 176/559] Add support for resetting counters on tele_period
Add support for resetting counters on tele_period if SetOption78 is enabled.
---
tasmota/xsns_01_counter.ino | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tasmota/xsns_01_counter.ino b/tasmota/xsns_01_counter.ino
index 8ed615c86..c664ff811 100644
--- a/tasmota/xsns_01_counter.ino
+++ b/tasmota/xsns_01_counter.ino
@@ -150,6 +150,9 @@ void CounterShow(bool json)
ResponseAppend_P(PSTR(",\"COUNTER\":{"));
}
ResponseAppend_P(PSTR("%s\"C%d\":%s"), (header)?",":"", i +1, counter);
+ if ((0 == tele_period ) && (Settings.flag3.counter_reset_on_tele)) {
+ RtcSettings.pulse_counter[i] = 0;
+ }
header = true;
#ifdef USE_DOMOTICZ
if ((0 == tele_period) && (1 == dsxflg)) {
From 4a9271acedc8cb11829d45c1632723f9c35ec5c5 Mon Sep 17 00:00:00 2001
From: Andre Thomas <470015+andrethomas@users.noreply.github.com>
Date: Sat, 28 Dec 2019 17:26:15 +0200
Subject: [PATCH 177/559] Update xsns_01_counter.ino
---
tasmota/xsns_01_counter.ino | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tasmota/xsns_01_counter.ino b/tasmota/xsns_01_counter.ino
index c664ff811..985216392 100644
--- a/tasmota/xsns_01_counter.ino
+++ b/tasmota/xsns_01_counter.ino
@@ -150,9 +150,6 @@ void CounterShow(bool json)
ResponseAppend_P(PSTR(",\"COUNTER\":{"));
}
ResponseAppend_P(PSTR("%s\"C%d\":%s"), (header)?",":"", i +1, counter);
- if ((0 == tele_period ) && (Settings.flag3.counter_reset_on_tele)) {
- RtcSettings.pulse_counter[i] = 0;
- }
header = true;
#ifdef USE_DOMOTICZ
if ((0 == tele_period) && (1 == dsxflg)) {
@@ -160,6 +157,9 @@ void CounterShow(bool json)
dsxflg++;
}
#endif // USE_DOMOTICZ
+ if ((0 == tele_period ) && (Settings.flag3.counter_reset_on_tele)) {
+ RtcSettings.pulse_counter[i] = 0;
+ }
#ifdef USE_WEBSERVER
} else {
WSContentSend_PD(PSTR("{s}" D_COUNTER "%d{m}%s%s{e}"),
From 6a06d356267b0291409f4f114cf7e1736d3a75ce Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 28 Dec 2019 16:33:51 +0100
Subject: [PATCH 178/559] Add command ``SetOption79 0/1``
Add command ``SetOption79 0/1`` to enable reset of counters at teleperiod time by Andre Thomas (#7355)
---
RELEASENOTES.md | 1 +
tasmota/CHANGELOG.md | 1 +
2 files changed, 2 insertions(+)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 42788a5b9..c0524023e 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -57,6 +57,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Change Lights: simplified gamma correction and 10 bits internal computation
- Fix Sonoff Bridge, Sc, L1, iFan03 and CSE7766 serial interface to forced speed, config and disable logging
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
+- Add command ``SetOption79 0/1`` to enable reset of counters at teleperiod time by Andre Thomas (#7355)
- Add SerialConfig to ``Status 1``
- Add WifiPower to ``Status 5``
- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md
index 3abb0db81..0cb300692 100644
--- a/tasmota/CHANGELOG.md
+++ b/tasmota/CHANGELOG.md
@@ -5,6 +5,7 @@
- Change Lights: simplified gamma correction and 10 bits internal computation
- Fix Sonoff Bridge, Sc, L1, iFan03 and CSE7766 serial interface to forced speed, config and disable logging
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
+- Add command ``SetOption79 0/1`` to enable reset of counters at teleperiod time by Andre Thomas (#7355)
- Add SerialConfig to ``Status 1``
- Add WifiPower to ``Status 5``
- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
From daf3d27c9afe0f89d8eeb8cd92609e146764c3e3 Mon Sep 17 00:00:00 2001
From: stefanbode
Date: Sat, 28 Dec 2019 23:24:52 +0700
Subject: [PATCH 179/559] Update xdrv_27_shutter.ino
Try to bugfix
---
tasmota/xdrv_27_shutter.ino | 60 +++++++++++++++++++------------------
1 file changed, 31 insertions(+), 29 deletions(-)
diff --git a/tasmota/xdrv_27_shutter.ino b/tasmota/xdrv_27_shutter.ino
index 8392bebad..4b3936533 100644
--- a/tasmota/xdrv_27_shutter.ino
+++ b/tasmota/xdrv_27_shutter.ino
@@ -89,32 +89,33 @@ void ShutterRtc50mS(void)
}
}
-int32_t ShutterPercentToRealPosition(uint8_t percent,uint8_t i)
+
+int32_t ShutterPercentToRealPosition(uint8_t percent,uint8_t index)
{
- if (Settings.shutter_set50percent[i] != 50) {
- return percent <= 5 ? Settings.shuttercoeff[2][i] * percent : Settings.shuttercoeff[1][i] * percent + Settings.shuttercoeff[0][i];
+ if (Settings.shutter_set50percent[index] != 50) {
+ return percent <= 5 ? Settings.shuttercoeff[2][index] * percent : Settings.shuttercoeff[1][index] * percent + Settings.shuttercoeff[0][index];
} else {
- int32_t realpos;
+ uint32_t realpos;
// check against DIV 0
for (uint8_t j=0 ; j < 5 ; j++) {
- if (Settings.shuttercoeff[j][i] == 0) {
+ if (Settings.shuttercoeff[j][index] == 0) {
AddLog_P2(LOG_LEVEL_ERROR, PSTR("SHT: RESET/INIT CALIBRATION MATRIX DIV 0"));
for (uint8_t k=0 ; k < 5 ; k++) {
- Settings.shuttercoeff[k][i] = messwerte[k] * 1000 / messwerte[4];
+ Settings.shuttercoeff[k][index] = messwerte[k] * 1000 / messwerte[4];
}
}
}
- for (uint8_t l=0 ; l < 5 ; l++) {
- if (percent*10 > Settings.shuttercoeff[l][i]) {
- realpos = Shutter.open_max[i] * calibrate_pos[l+1] / 100;
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realposition TEMP1: %d, %% %d, coeff %d"), realpos, percent, Settings.shuttercoeff[l][i]);
+ for (uint8_t i=0 ; i < 5 ; i++) {
+ if (percent*10 > Settings.shuttercoeff[i][index]) {
+ realpos = Shutter.open_max[index] * calibrate_pos[i+1] / 100;
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realposition TEMP1: %d, %% %d, coeff %d"), realpos, percent, Settings.shuttercoeff[i][index]);
} else {
- if ( l == 0) {
- realpos = percent * Shutter.open_max[i] * calibrate_pos[l+1] / Settings.shuttercoeff[l][i] / 10;
+ if ( i == 0) {
+ realpos = percent * Shutter.open_max[index] * calibrate_pos[i+1] / Settings.shuttercoeff[i][index] / 10;
} else {
- //uint16_t addon = ( percent*10 - Settings.shuttercoeff[i-1][i] ) * Shutter_Open_Max[i] * (calibrate_pos[l+1] - calibrate_pos[l]) / (Settings.shuttercoeff[l][i] -Settings.shuttercoeff[l-1][l]) / 100;
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realposition TEMP2: %d, %% %d, coeff %d"), addon, (calibrate_pos[l+1] - calibrate_pos[l]), (Settings.shuttercoeff[l][i] -Settings.shuttercoeff[l-1][l]));
- realpos += ( percent*10 - Settings.shuttercoeff[l-1][i] ) * Shutter.open_max[i] * (calibrate_pos[l+1] - calibrate_pos[l]) / (Settings.shuttercoeff[l][i] -Settings.shuttercoeff[l-1][i]) / 100;
+ //uint16_t addon = ( percent*10 - Settings.shuttercoeff[i-1][index] ) * Shutter_Open_Max[index] * (calibrate_pos[i+1] - calibrate_pos[i]) / (Settings.shuttercoeff[i][index] -Settings.shuttercoeff[i-1][index]) / 100;
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realposition TEMP2: %d, %% %d, coeff %d"), addon, (calibrate_pos[i+1] - calibrate_pos[i]), (Settings.shuttercoeff[i][index] -Settings.shuttercoeff[i-1][index]));
+ realpos += ( percent*10 - Settings.shuttercoeff[i-1][index] ) * Shutter.open_max[index] * (calibrate_pos[i+1] - calibrate_pos[i]) / (Settings.shuttercoeff[i][index] -Settings.shuttercoeff[i-1][index]) / 100;
}
break;
}
@@ -123,33 +124,34 @@ int32_t ShutterPercentToRealPosition(uint8_t percent,uint8_t i)
}
}
-uint8_t ShutterRealToPercentPosition(int32_t realpos, uint8_t i)
+uint8_t ShutterRealToPercentPosition(int32_t realpos, uint8_t index)
{
- if (Settings.shutter_set50percent[i] != 50) {
- return Settings.shuttercoeff[2][i] * 5 > realpos ? realpos / Settings.shuttercoeff[2][i] : (realpos-Settings.shuttercoeff[0][i]) / Settings.shuttercoeff[1][i];
+ if (Settings.shutter_set50percent[index] != 50) {
+ return Settings.shuttercoeff[2][index] * 5 > realpos ? realpos / Settings.shuttercoeff[2][index] : (realpos-Settings.shuttercoeff[0][index]) / Settings.shuttercoeff[1][index];
} else {
- int16_t realpercent;
+ uint16_t realpercent;
- for (uint8_t j=0 ; j < 5 ; j++) {
- if (realpos > Shutter.open_max[i] * calibrate_pos[j+1] / 100) {
- realpercent = Settings.shuttercoeff[j][i] /10;
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realpercent TEMP1: %d, %% %d, coeff %d"), realpercent, realpos, Shutter_Open_Max[i] * calibrate_pos[i+1] / 100);
+ for (uint8_t i=0 ; i < 5 ; i++) {
+ if (realpos > Shutter.open_max[index] * calibrate_pos[i+1] / 100) {
+ realpercent = Settings.shuttercoeff[i][index] /10;
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realpercent TEMP1: %d, %% %d, coeff %d"), realpercent, realpos, Shutter_Open_Max[index] * calibrate_pos[i+1] / 100);
} else {
if ( i == 0) {
- realpercent = ( realpos - (Shutter.open_max[i] * calibrate_pos[j] / 100) ) * 10 * Settings.shuttercoeff[j][i] / calibrate_pos[j+1] / Shutter.open_max[i];
+ realpercent = ( realpos - (Shutter.open_max[index] * calibrate_pos[i] / 100) ) * 10 * Settings.shuttercoeff[i][index] / calibrate_pos[i+1] / Shutter.open_max[index];
} else {
- //uint16_t addon = ( realpos - (Shutter_Open_Max[i] * calibrate_pos[i] / 100) ) * 10 * (Settings.shuttercoeff[i][i] - Settings.shuttercoeff[i-1][i]) / (calibrate_pos[i+1] - calibrate_pos[i])/ Shutter_Open_Max[i];
- //uint16_t addon = ( percent*10 - Settings.shuttercoeff[i-1][i] ) * Shutter_Open_Max[i] * (calibrate_pos[i+1] - calibrate_pos[i]) / (Settings.shuttercoeff[i][i] -Settings.shuttercoeff[i-1][i]) / 100;
- //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realpercent TEMP2: %d, delta %d, %% %d, coeff %d"), addon,( realpos - (Shutter_Open_Max[i] * calibrate_pos[i] / 100) ) , (calibrate_pos[i+1] - calibrate_pos[i])* Shutter_Open_Max[i]/100, (Settings.shuttercoeff[i][i] -Settings.shuttercoeff[i-1][i]));
- realpercent += ( realpos - (Shutter.open_max[i] * calibrate_pos[j] / 100) ) * 10 * (Settings.shuttercoeff[j][i] - Settings.shuttercoeff[j-1][i]) / (calibrate_pos[j+1] - calibrate_pos[j]) / Shutter.open_max[i] ;
+ //uint16_t addon = ( realpos - (Shutter_Open_Max[index] * calibrate_pos[i] / 100) ) * 10 * (Settings.shuttercoeff[i][index] - Settings.shuttercoeff[i-1][index]) / (calibrate_pos[i+1] - calibrate_pos[i])/ Shutter_Open_Max[index];
+ //uint16_t addon = ( percent*10 - Settings.shuttercoeff[i-1][index] ) * Shutter_Open_Max[index] * (calibrate_pos[i+1] - calibrate_pos[i]) / (Settings.shuttercoeff[i][index] -Settings.shuttercoeff[i-1][index]) / 100;
+ //AddLog_P2(LOG_LEVEL_INFO, PSTR("Realpercent TEMP2: %d, delta %d, %% %d, coeff %d"), addon,( realpos - (Shutter_Open_Max[index] * calibrate_pos[i] / 100) ) , (calibrate_pos[i+1] - calibrate_pos[i])* Shutter_Open_Max[index]/100, (Settings.shuttercoeff[i][index] -Settings.shuttercoeff[i-1][index]));
+ realpercent += ( realpos - (Shutter.open_max[index] * calibrate_pos[i] / 100) ) * 10 * (Settings.shuttercoeff[i][index] - Settings.shuttercoeff[i-1][index]) / (calibrate_pos[i+1] - calibrate_pos[i]) / Shutter.open_max[index] ;
}
break;
}
}
- return (realpercent < 0 ? 0 : (realpercent > 100 ? 0 : realpercent));
+ return realpercent;
}
}
+
void ShutterInit(void)
{
shutters_present = 0;
From 7a49f523e7d3f296a3f1ae9ab2310be181cbc5b9 Mon Sep 17 00:00:00 2001
From: Bohdan Kmit
Date: Sat, 28 Dec 2019 19:25:43 +0200
Subject: [PATCH 180/559] Make scripter configuration interface localizable
Add tasmota-script build environment and travis entry
---
tasmota/language/bg-BG.h | 13 +++++++++++++
tasmota/language/cs-CZ.h | 13 +++++++++++++
tasmota/language/de-DE.h | 13 +++++++++++++
tasmota/language/el-GR.h | 13 +++++++++++++
tasmota/language/en-GB.h | 13 +++++++++++++
tasmota/language/es-ES.h | 13 +++++++++++++
tasmota/language/fr-FR.h | 13 +++++++++++++
tasmota/language/he-HE.h | 13 +++++++++++++
tasmota/language/hu-HU.h | 13 +++++++++++++
tasmota/language/it-IT.h | 13 +++++++++++++
tasmota/language/ko-KO.h | 13 +++++++++++++
tasmota/language/nl-NL.h | 13 +++++++++++++
tasmota/language/pl-PL.h | 13 +++++++++++++
tasmota/language/pt-BR.h | 13 +++++++++++++
tasmota/language/pt-PT.h | 13 +++++++++++++
tasmota/language/ru-RU.h | 13 +++++++++++++
tasmota/language/sk-SK.h | 13 +++++++++++++
tasmota/language/sv-SE.h | 13 +++++++++++++
tasmota/language/tr-TR.h | 13 +++++++++++++
tasmota/language/uk-UA.h | 23 ++++++++++++++++++-----
tasmota/language/zh-CN.h | 13 +++++++++++++
tasmota/language/zh-TW.h | 13 +++++++++++++
tasmota/xdrv_10_scripter.ino | 19 +++++++------------
23 files changed, 298 insertions(+), 17 deletions(-)
diff --git a/tasmota/language/bg-BG.h b/tasmota/language/bg-BG.h
index f2ac56402..22e99f9f9 100644
--- a/tasmota/language/bg-BG.h
+++ b/tasmota/language/bg-BG.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Грешка - вентилатор"
#define D_SOLAX_ERROR_8 "Грешка - друго оборудване"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_BG_BG_H_
diff --git a/tasmota/language/cs-CZ.h b/tasmota/language/cs-CZ.h
index 272e2c5ca..92ba99b30 100644
--- a/tasmota/language/cs-CZ.h
+++ b/tasmota/language/cs-CZ.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_CS_CZ_H_
diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h
index 9e30f42f8..eeddc5580 100644
--- a/tasmota/language/de-DE.h
+++ b/tasmota/language/de-DE.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Lüfterfehler"
#define D_SOLAX_ERROR_8 "sonstiger Fehler"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_DE_DE_H_
diff --git a/tasmota/language/el-GR.h b/tasmota/language/el-GR.h
index 2b1e4748c..15b78fea7 100644
--- a/tasmota/language/el-GR.h
+++ b/tasmota/language/el-GR.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_EL_GR_H_
diff --git a/tasmota/language/en-GB.h b/tasmota/language/en-GB.h
index ab7f90cf8..72d30faac 100644
--- a/tasmota/language/en-GB.h
+++ b/tasmota/language/en-GB.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_EN_GB_H_
diff --git a/tasmota/language/es-ES.h b/tasmota/language/es-ES.h
index e41b4cb32..cc8cc3166 100644
--- a/tasmota/language/es-ES.h
+++ b/tasmota/language/es-ES.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Falla de Ventilador"
#define D_SOLAX_ERROR_8 "Falla del Dispositivo"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_ES_ES_H_
diff --git a/tasmota/language/fr-FR.h b/tasmota/language/fr-FR.h
index d9d7019f8..c84610379 100644
--- a/tasmota/language/fr-FR.h
+++ b/tasmota/language/fr-FR.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Défaut Ventilateur"
#define D_SOLAX_ERROR_8 "Défaut Autre équipement"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_FR_FR_H_
diff --git a/tasmota/language/he-HE.h b/tasmota/language/he-HE.h
index 9e26a6c5e..d21750fba 100644
--- a/tasmota/language/he-HE.h
+++ b/tasmota/language/he-HE.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_HE_HE_H_
diff --git a/tasmota/language/hu-HU.h b/tasmota/language/hu-HU.h
index b7f33a549..da61d1ffd 100644
--- a/tasmota/language/hu-HU.h
+++ b/tasmota/language/hu-HU.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_HU_HU_H_
diff --git a/tasmota/language/it-IT.h b/tasmota/language/it-IT.h
index d3c55579a..ca584ec8e 100644
--- a/tasmota/language/it-IT.h
+++ b/tasmota/language/it-IT.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Errore Ventilatore"
#define D_SOLAX_ERROR_8 "Altro Errore del Dispositivo"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_IT_IT_H_
diff --git a/tasmota/language/ko-KO.h b/tasmota/language/ko-KO.h
index a6c2088a1..b85f60bce 100644
--- a/tasmota/language/ko-KO.h
+++ b/tasmota/language/ko-KO.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_KO_KO_H_
diff --git a/tasmota/language/nl-NL.h b/tasmota/language/nl-NL.h
index 8fb492399..1fde4786d 100644
--- a/tasmota/language/nl-NL.h
+++ b/tasmota/language/nl-NL.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Ventilator"
#define D_SOLAX_ERROR_8 "Overige"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_NL_NL_H_
diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h
index 4f2c9c069..f8250eda2 100644
--- a/tasmota/language/pl-PL.h
+++ b/tasmota/language/pl-PL.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Błąd - wentylator"
#define D_SOLAX_ERROR_8 "Błąd - inne urządzenie"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_PL_PL_D_H_
diff --git a/tasmota/language/pt-BR.h b/tasmota/language/pt-BR.h
index 0c9891323..f5390be86 100644
--- a/tasmota/language/pt-BR.h
+++ b/tasmota/language/pt-BR.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Falha no Ventilador"
#define D_SOLAX_ERROR_8 "Outra falha do dispositivo"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_PT_BR_H_
diff --git a/tasmota/language/pt-PT.h b/tasmota/language/pt-PT.h
index 210ef8e29..154bebd70 100644
--- a/tasmota/language/pt-PT.h
+++ b/tasmota/language/pt-PT.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Falha no ventilador"
#define D_SOLAX_ERROR_8 "Outra falha no dispositivo"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_PT_PT_H_
diff --git a/tasmota/language/ru-RU.h b/tasmota/language/ru-RU.h
index 6696e0e48..89567f11f 100644
--- a/tasmota/language/ru-RU.h
+++ b/tasmota/language/ru-RU.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_RU_RU_H_
diff --git a/tasmota/language/sk-SK.h b/tasmota/language/sk-SK.h
index 21120179a..c42130e11 100644
--- a/tasmota/language/sk-SK.h
+++ b/tasmota/language/sk-SK.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_SK_SK_H_
diff --git a/tasmota/language/sv-SE.h b/tasmota/language/sv-SE.h
index 117fb40ed..074c81c8e 100644
--- a/tasmota/language/sv-SE.h
+++ b/tasmota/language/sv-SE.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_SV_SE_H_
diff --git a/tasmota/language/tr-TR.h b/tasmota/language/tr-TR.h
index 9874688da..04cc270ec 100644
--- a/tasmota/language/tr-TR.h
+++ b/tasmota/language/tr-TR.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_TR_TR_H_
diff --git a/tasmota/language/uk-UA.h b/tasmota/language/uk-UA.h
index cd77adebd..af7672973 100644
--- a/tasmota/language/uk-UA.h
+++ b/tasmota/language/uk-UA.h
@@ -296,14 +296,14 @@
#define D_OTHER_PARAMETERS "Параметри Інше"
#define D_TEMPLATE "Шаблони"
-#define D_ACTIVATE "Активувний"
+#define D_ACTIVATE "Активований"
#define D_WEB_ADMIN_PASSWORD "Гасло адміністратора Web"
#define D_MQTT_ENABLE "MQTT активний"
-#define D_FRIENDLY_NAME "Дружнє Ім'я"
+#define D_FRIENDLY_NAME "Дружня назва"
#define D_BELKIN_WEMO "Belkin WeMo"
-#define D_HUE_BRIDGE "Hue Bridge"
-#define D_SINGLE_DEVICE "одиночне"
-#define D_MULTI_DEVICE "мульти"
+#define D_HUE_BRIDGE "Міст Hue"
+#define D_SINGLE_DEVICE "один пристрій"
+#define D_MULTI_DEVICE "декілька пристроїв"
#define D_CONFIGURE_TEMPLATE "Конфігурація шаблона"
#define D_TEMPLATE_PARAMETERS "Параметри шаблона"
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Вентилятор"
#define D_SOLAX_ERROR_8 "Інший пристрій"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Конфігурація сценарія"
+#define D_SCRIPT "Редагування сценарія"
+#define D_SDCARD_UPLOAD "завантажити файл на карту SD"
+#define D_SDCARD_DIR "завантажити файл в каталог на карту SD"
+#define D_UPL_DONE "Готово"
+#define D_SCRIPT_CHARS_LEFT "символів ще вільно"
+#define D_SCRIPT_CHARS_NO_MORE "більше немає місця"
+#define D_SCRIPT_DOWNLOAD "Звантажити"
+#define D_SCRIPT_ENABLE "Сценарій увімкнено"
+#define D_SCRIPT_UPLOAD "Завантажити"
+#define D_SCRIPT_UPLOAD_FILES "Завантажити файли"
+
#endif // _LANGUAGE_UK_UA_H_
diff --git a/tasmota/language/zh-CN.h b/tasmota/language/zh-CN.h
index 7700e7e78..4c75b7bb7 100644
--- a/tasmota/language/zh-CN.h
+++ b/tasmota/language/zh-CN.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_ZH_CN_H_
diff --git a/tasmota/language/zh-TW.h b/tasmota/language/zh-TW.h
index 34bb68e3d..f17ba46b7 100644
--- a/tasmota/language/zh-TW.h
+++ b/tasmota/language/zh-TW.h
@@ -702,4 +702,17 @@
#define D_SOLAX_ERROR_7 "Fan Fault"
#define D_SOLAX_ERROR_8 "Other Device Fault"
+//xdrv_10_scripter.ino
+#define D_CONFIGURE_SCRIPT "Edit script"
+#define D_SCRIPT "edit script"
+#define D_SDCARD_UPLOAD "file upload"
+#define D_SDCARD_DIR "sd card directory"
+#define D_UPL_DONE "Done"
+#define D_SCRIPT_CHARS_LEFT "chars left"
+#define D_SCRIPT_CHARS_NO_MORE "no more chars"
+#define D_SCRIPT_DOWNLOAD "Download"
+#define D_SCRIPT_ENABLE "script enable"
+#define D_SCRIPT_UPLOAD "Upload"
+#define D_SCRIPT_UPLOAD_FILES "Upload files"
+
#endif // _LANGUAGE_ZH_TW_H_
diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino
index 6b97fa68a..29177482a 100755
--- a/tasmota/xdrv_10_scripter.ino
+++ b/tasmota/xdrv_10_scripter.ino
@@ -3033,11 +3033,6 @@ void Scripter_save_pvars(void) {
#ifdef USE_WEBSERVER
#define WEB_HANDLE_SCRIPT "s10"
-#define D_CONFIGURE_SCRIPT "Edit script"
-#define D_SCRIPT "edit script"
-#define D_SDCARD_UPLOAD "file upload"
-#define D_SDCARD_DIR "sd card directory"
-#define D_UPL_DONE "Done"
const char S_CONFIGURE_SCRIPT[] PROGMEM = D_CONFIGURE_SCRIPT;
@@ -3051,7 +3046,7 @@ const char HTTP_FORM_SCRIPT[] PROGMEM =
const char HTTP_FORM_SCRIPT1[] PROGMEM =
"
"
- "script enable
"
+ "" D_SCRIPT_ENABLE "
"
"