diff --git a/sonoff/_releasenotes.ino b/sonoff/_releasenotes.ino
index c8a76e970..7c3159de2 100644
--- a/sonoff/_releasenotes.ino
+++ b/sonoff/_releasenotes.ino
@@ -1,5 +1,6 @@
/* 5.14.0a
* Add Eastron SDM630 energy meter (#2735)
+ * Add KNX communication enhancement (#2742)
*
* 5.14.0 20180515
* Update language files
diff --git a/sonoff/language/bg-BG.h b/sonoff/language/bg-BG.h
index 5aef7c4a1..d4856eb19 100644
--- a/sonoff/language/bg-BG.h
+++ b/sonoff/language/bg-BG.h
@@ -400,6 +400,7 @@
#define D_KNX_COMMAND_OTHER "Друго"
#define D_SENT_TO "изпратен до"
#define D_KNX_WARNING "Груповият адрес ( 0 / 0 / 0 ) е резервиран и не може да бъде използван."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Използвана енергия днес"
diff --git a/sonoff/language/cs-CZ.h b/sonoff/language/cs-CZ.h
index 13935c6eb..bdaef9b36 100644
--- a/sonoff/language/cs-CZ.h
+++ b/sonoff/language/cs-CZ.h
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Spotřeba Dnes"
diff --git a/sonoff/language/de-DE.h b/sonoff/language/de-DE.h
index 1dcdce025..e1b925ac6 100644
--- a/sonoff/language/de-DE.h
+++ b/sonoff/language/de-DE.h
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Energie heute"
diff --git a/sonoff/language/el-GR.h b/sonoff/language/el-GR.h
index b3d3f50a8..fa38c7c97 100644
--- a/sonoff/language/el-GR.h
+++ b/sonoff/language/el-GR.h
@@ -400,6 +400,7 @@
#define D_KNX_COMMAND_OTHER "Αλλο"
#define D_SENT_TO "αποστολή σε"
#define D_KNX_WARNING "Η Ομάδα Διευθύνσεων ( 0 / 0 / 0 ) είναι δεσμευμένη και δεν μπορεί να χρησιμοποιηθεί."
+#define D_KNX_ENHANCEMENT "Communication Enhancement"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Energy Σήμερα"
diff --git a/sonoff/language/en-GB.h b/sonoff/language/en-GB.h
index 4cdb117f3..3e5b0a0c0 100644
--- a/sonoff/language/en-GB.h
+++ b/sonoff/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 v5.14.0
+ * Updated until v5.14.0a
\*********************************************************************/
//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Energy Today"
diff --git a/sonoff/language/es-AR.h b/sonoff/language/es-AR.h
index a05cd7e03..d9c37fa0e 100644
--- a/sonoff/language/es-AR.h
+++ b/sonoff/language/es-AR.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 v5.14.0
+ * Updated until v5.14.0a
\*********************************************************************/
#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Energía Hoy"
diff --git a/sonoff/language/fr-FR.h b/sonoff/language/fr-FR.h
index d37647912..843f4ef51 100644
--- a/sonoff/language/fr-FR.h
+++ b/sonoff/language/fr-FR.h
@@ -400,6 +400,7 @@
#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 "Communication Enhancement"
// xsns_03_energy.ino
#define D_ENERGY_TODAY "Énergie aujourd'hui"
diff --git a/sonoff/language/hu-HU.h b/sonoff/language/hu-HU.h
index 46f2ca82a..a5f373146 100644
--- a/sonoff/language/hu-HU.h
+++ b/sonoff/language/hu-HU.h
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Mai Energia"
diff --git a/sonoff/language/it-IT.h b/sonoff/language/it-IT.h
index 3fde551ec..ceb1faa16 100644
--- a/sonoff/language/it-IT.h
+++ b/sonoff/language/it-IT.h
@@ -400,6 +400,7 @@
#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 "Communication Enhancement"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Energia Oggi"
diff --git a/sonoff/language/nl-NL.h b/sonoff/language/nl-NL.h
index 47f682006..df970798f 100644
--- a/sonoff/language/nl-NL.h
+++ b/sonoff/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 v5.14.0
+ * Updated until v5.14.0a
\*********************************************************************/
//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Verbruik vandaag"
diff --git a/sonoff/language/pl-PL.h b/sonoff/language/pl-PL.h
index f63eb88b6..2b96e5195 100644
--- a/sonoff/language/pl-PL.h
+++ b/sonoff/language/pl-PL.h
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Energia Dzisiaj"
diff --git a/sonoff/language/pt-BR.h b/sonoff/language/pt-BR.h
index e6a93c8f1..1740abbdd 100644
--- a/sonoff/language/pt-BR.h
+++ b/sonoff/language/pt-BR.h
@@ -400,6 +400,7 @@
#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 "Communication Enhancement"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Consumo energético de hoje"
diff --git a/sonoff/language/pt-PT.h b/sonoff/language/pt-PT.h
index df93d370e..c8d8944af 100644
--- a/sonoff/language/pt-PT.h
+++ b/sonoff/language/pt-PT.h
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Consumo energético de hoje"
diff --git a/sonoff/language/ru-RU.h b/sonoff/language/ru-RU.h
index 980875891..bd1440d28 100644
--- a/sonoff/language/ru-RU.h
+++ b/sonoff/language/ru-RU.h
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "Энергия Сегодня"
diff --git a/sonoff/language/zh-CN.h b/sonoff/language/zh-CN.h
index f452f1fe9..113c470b9 100644
--- a/sonoff/language/zh-CN.h
+++ b/sonoff/language/zh-CN.h
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "今日用电量"
diff --git a/sonoff/language/zh-TW.h b/sonoff/language/zh-TW.h
index 4120b6f54..14e9cad00 100644
--- a/sonoff/language/zh-TW.h
+++ b/sonoff/language/zh-TW.h
@@ -400,6 +400,7 @@
#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"
// xdrv_03_energy.ino
#define D_ENERGY_TODAY "今日用電量"
diff --git a/sonoff/settings.h b/sonoff/settings.h
index ec156c85a..6f67c3843 100644
--- a/sonoff/settings.h
+++ b/sonoff/settings.h
@@ -52,7 +52,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
uint32_t rules_once : 1; // bit 24 (v5.12.0k)
uint32_t knx_enabled : 1; // bit 25 (v5.12.0l) KNX
uint32_t device_index_enable : 1; // bit 26 (v5.13.1a)
- uint32_t spare27 : 1;
+ uint32_t knx_enable_enhancement : 1; // bit 27 (v5.14.0a) KNX
uint32_t spare28 : 1;
uint32_t spare29 : 1;
uint32_t spare30 : 1;
diff --git a/sonoff/xdrv_11_knx.ino b/sonoff/xdrv_11_knx.ino
index 89959d269..b5eef6989 100644
--- a/sonoff/xdrv_11_knx.ino
+++ b/sonoff/xdrv_11_knx.ino
@@ -60,9 +60,11 @@ address_t KNX_addr; // KNX Address converter variable
#define KNX_TEMPERATURE 17
#define KNX_HUMIDITY 18
#define KNX_MAX_device_param 18
+#define TOGGLE_INHIBIT_TIME 10 // 10*50mseg = 500mseg
float last_temp;
float last_hum;
+byte toggle_inhibit;
typedef struct __device_parameters
{
@@ -461,21 +463,38 @@ void KNX_CB_Action(message_t const &msg, void *arg)
}
else if (chan->type < 17) // Toggle Relays
{
- ExecuteCommandPower((chan->type) -8, 2);
+ if (!toggle_inhibit) {
+ ExecuteCommandPower((chan->type) -8, 2);
+ if (Settings.flag.knx_enable_enhancement) {
+ toggle_inhibit = TOGGLE_INHIBIT_TIME;
+ }
+ }
}
break;
case KNX_CT_READ:
if (chan->type < 9) // reply Relays status
{
knx.answer_1bit(msg.received_on, chan->last_state);
+ if (Settings.flag.knx_enable_enhancement) {
+ knx.answer_1bit(msg.received_on, chan->last_state);
+ knx.answer_1bit(msg.received_on, chan->last_state);
+ }
}
else if (chan->type = KNX_TEMPERATURE) // Reply Temperature
{
knx.answer_2byte_float(msg.received_on, last_temp);
+ if (Settings.flag.knx_enable_enhancement) {
+ knx.answer_2byte_float(msg.received_on, last_temp);
+ knx.answer_2byte_float(msg.received_on, last_temp);
+ }
}
else if (chan->type = KNX_HUMIDITY) // Reply Humidity
{
knx.answer_2byte_float(msg.received_on, last_hum);
+ if (Settings.flag.knx_enable_enhancement) {
+ knx.answer_2byte_float(msg.received_on, last_hum);
+ knx.answer_2byte_float(msg.received_on, last_hum);
+ }
}
break;
}
@@ -493,6 +512,10 @@ void KnxUpdatePowerState(byte device, power_t state)
while ( i != KNX_Empty ) {
KNX_addr.value = Settings.knx_GA_addr[i];
knx.write_1bit(KNX_addr, device_param[device -1].last_state);
+ if (Settings.flag.knx_enable_enhancement) {
+ knx.write_1bit(KNX_addr, device_param[device -1].last_state);
+ knx.write_1bit(KNX_addr, device_param[device -1].last_state);
+ }
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "%s = %d " D_SENT_TO " %d.%d.%d"),
device_param_ga[device -1], device_param[device -1].last_state,
@@ -522,6 +545,10 @@ void KnxSendButtonPower(byte key, byte device, byte state)
while ( i != KNX_Empty ) {
KNX_addr.value = Settings.knx_GA_addr[i];
knx.write_1bit(KNX_addr, !(state == 0));
+ if (Settings.flag.knx_enable_enhancement) {
+ knx.write_1bit(KNX_addr, !(state == 0));
+ knx.write_1bit(KNX_addr, !(state == 0));
+ }
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "%s = %d " D_SENT_TO " %d.%d.%d"),
device_param_ga[device + 7], !(state == 0),
@@ -550,6 +577,10 @@ void KnxSensor(byte sensor_type, float value)
while ( i != KNX_Empty ) {
KNX_addr.value = Settings.knx_GA_addr[i];
knx.write_2byte_float(KNX_addr, value);
+ if (Settings.flag.knx_enable_enhancement) {
+ knx.write_2byte_float(KNX_addr, value);
+ knx.write_2byte_float(KNX_addr, value);
+ }
snprintf_P(log_data, sizeof(log_data), PSTR(D_LOG_KNX "%s " D_SENT_TO " %d.%d.%d "),
device_param_ga[sensor_type -1],
@@ -578,8 +609,11 @@ const char HTTP_FORM_KNX[] PROGMEM =
"
" D_KNX_PHYSICAL_ADDRESS_NOTE "
"
"" D_KNX_ENABLE " " D_KNX_ENABLE "
"
+ ">" D_KNX_ENHANCEMENT "
"
"