diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 17b267290..165e4f82a 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Подобрена комуникация" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Използвана енергия днес" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index f123481dd..7b53e6274 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Communication Enhancement" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Spotřeba Dnes" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 8c2fa8645..4804ea7ba 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Erweiterte Kommunikation" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energie heute" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 44e812b35..3efac89e8 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Βελτίωση επικοινωνίας" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Ενέργεια σήμερα" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index b3e06b94a..1dd0429d8 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Communication Enhancement" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energy Today" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 471c0d449..e0141cf83 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Mejora de Comunicación" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX ESCENA TX" +#define D_KNX_RX_SCENE "KNX ESCENA RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energía Hoy" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index b45b9b1a2..28e9e28b9 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Amélioration de la communication" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX Scène TX" +#define D_KNX_RX_SCENE "KNX Scène RX" // xsns_03_energy.ino #define D_ENERGY_TODAY "Énergie aujourd'hui" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index acf642ce3..7cbc64acf 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "שיפור התקשורת" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "צריכה יומית" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index 26e0ced62..07dfe6349 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Communication Enhancement" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Mai energia" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 924105509..ebd7addfe 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Miglioramento comunicazione" #define D_KNX_TX_SLOT "KNX - TX" #define D_KNX_RX_SLOT "KNX - RX" +#define D_KNX_TX_SCENE "Scena - TX" +#define D_KNX_RX_SCENE "Scena - RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energia - oggi" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 3fd602224..0a4cb7633 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "커뮤니케이션 강화" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "금일 전력 사용량" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index d48d02988..819b39045 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Verbeter verbinding" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Verbruik vandaag" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 6ca24f165..2cb92290e 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Rozszerzenia" #define D_KNX_TX_SLOT "Gniazdo TX" #define D_KNX_RX_SLOT "Gniazdo RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energia dzisiaj" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 8eb4381d0..5e866f809 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Melhoria da comunicação" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Consumo energético de hoje" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 9defb5975..af5e2f7aa 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Melhoria de Comunicação" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Consumo energético de hoje" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index b41cfef2f..3e8418960 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Îmbunătățire Communicație" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energia de Azi" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index 8c0a54b19..af5ef942d 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Communication Enhancement" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Энергия Сегодня" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 0bd2d2016..06251277c 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Communication Enhancement" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Spotreba dnes" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index b846fdb82..74c30ef32 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Kommuniceringsförbättring" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energi idag" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index 7778459fa..97a03b15b 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Communication Enhancement" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energy Today" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 9d153c732..07a60ee5b 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Підвищення зв'язку" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Енергія Сьогодні" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 37d280fc3..92dc25766 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "通讯增强" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "今日用电量" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index f0696fc01..91339b304 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -445,6 +445,8 @@ #define D_KNX_ENHANCEMENT "Communication Enhancement" #define D_KNX_TX_SLOT "KNX TX" #define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_TX_SCENE "KNX SCENE TX" +#define D_KNX_RX_SCENE "KNX SCENE RX" // xdrv_03_energy.ino #define D_ENERGY_TODAY "今日用電量" diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h index 3d3811c89..4eceddb5c 100644 --- a/tasmota/tasmota.h +++ b/tasmota/tasmota.h @@ -203,7 +203,8 @@ const uint32_t LOOP_SLEEP_DELAY = 50; // Lowest number of milliseconds to #define KNX_SLOT3 28 #define KNX_SLOT4 29 #define KNX_SLOT5 30 -#define KNX_MAX_device_param 30 +#define KNX_SCENE 31 +#define KNX_MAX_device_param 31 #define MAX_KNXTX_CMNDS 5 /*********************************************************************************************\ diff --git a/tasmota/xdrv_11_knx.ino b/tasmota/xdrv_11_knx.ino index f23e896fd..d6fef25fe 100644 --- a/tasmota/xdrv_11_knx.ino +++ b/tasmota/xdrv_11_knx.ino @@ -114,6 +114,7 @@ device_parameters_t device_param[] = { { KNX_SLOT3 , false, false, KNX_Empty }, { KNX_SLOT4 , false, false, KNX_Empty }, { KNX_SLOT5 , false, false, KNX_Empty }, + { KNX_SCENE , false, false, KNX_Empty }, { KNX_Empty, false, false, KNX_Empty} }; @@ -149,6 +150,7 @@ const char * device_param_ga[] = { D_KNX_TX_SLOT " 3", D_KNX_TX_SLOT " 4", D_KNX_TX_SLOT " 5", + D_KNX_TX_SCENE , nullptr }; @@ -184,6 +186,7 @@ const char *device_param_cb[] = { D_KNX_RX_SLOT " 3", D_KNX_RX_SLOT " 4", D_KNX_RX_SLOT " 5", + D_KNX_RX_SCENE , nullptr }; @@ -196,12 +199,14 @@ const char *device_param_cb[] = { #define D_CMND_KNX_PA "_PA" #define D_CMND_KNX_GA "_GA" #define D_CMND_KNX_CB "_CB" +#define D_CMND_KNXTXSCENE "Tx_Scene" + const char kKnxCommands[] PROGMEM = D_PRFX_KNX "|" // Prefix - D_CMND_KNXTXCMND "|" D_CMND_KNXTXVAL "|" D_CMND_KNX_ENABLED "|" D_CMND_KNX_ENHANCED "|" D_CMND_KNX_PA "|" D_CMND_KNX_GA "|" D_CMND_KNX_CB ; + D_CMND_KNXTXCMND "|" D_CMND_KNXTXVAL "|" D_CMND_KNX_ENABLED "|" D_CMND_KNX_ENHANCED "|" D_CMND_KNX_PA "|" D_CMND_KNX_GA "|" D_CMND_KNX_CB "|" D_CMND_KNXTXSCENE ; void (* const KnxCommand[])(void) PROGMEM = { - &CmndKnxTxCmnd, &CmndKnxTxVal, &CmndKnxEnabled, &CmndKnxEnhanced, &CmndKnxPa, &CmndKnxGa, &CmndKnxCb }; + &CmndKnxTxCmnd, &CmndKnxTxVal, &CmndKnxEnabled, &CmndKnxEnhanced, &CmndKnxPa, &CmndKnxGa, &CmndKnxCb, &CmndKnxTxScene }; uint8_t KNX_GA_Search( uint8_t param, uint8_t start = 0 ) { @@ -518,6 +523,7 @@ void KNX_INIT(void) device_param[KNX_SLOT3-1].show = true; device_param[KNX_SLOT4-1].show = true; device_param[KNX_SLOT5-1].show = true; + device_param[KNX_SCENE-1].show = true; #endif // Delete from KNX settings all configuration is not anymore related to this device @@ -557,7 +563,11 @@ void KNX_CB_Action(message_t const &msg, void *arg) if (msg.data_len == 1) { // COMMAND sprintf(tempchar,"%d",msg.data[0]); - } else { + } else if (chan->type == KNX_SCENE) { + // VALUE + uint8_t tempvar = knx.data_to_1byte_uint(msg.data); + dtostrfd(tempvar,2,tempchar); + } else { // VALUE float tempvar = knx.data_to_2byte_float(msg.data); dtostrfd(tempvar,2,tempchar); @@ -602,6 +612,18 @@ void KNX_CB_Action(message_t const &msg, void *arg) } } } + else if (chan->type == KNX_SCENE) // KNX RX SCENE SLOT (write command) + { + if (!toggle_inhibit) { + char command[25]; + // Value received + snprintf_P(command, sizeof(command), PSTR("event KNX_SCENE=%s"), tempchar); + ExecuteCommand(command, SRC_KNX); + if (Settings.flag.knx_enable_enhancement) { + toggle_inhibit = TOGGLE_INHIBIT_TIME; + } + } + } #endif break; @@ -1054,6 +1076,31 @@ void CmndKnxTxVal(void) } } +void CmndKnxTxScene(void) +{ + if ( (XdrvMailbox.data_len > 0) && Settings.flag.knx_enabled ) { + // XdrvMailbox.payload <- scene number to send + uint8_t i = KNX_GA_Search(KNX_SCENE); + if ( i != KNX_Empty ) { + KNX_addr.value = Settings.knx_GA_addr[i]; + + uint8_t tempvar = TextToInt(XdrvMailbox.data); + dtostrfd(tempvar,0,XdrvMailbox.data); + + knx.write_1byte_uint(KNX_addr, tempvar); + if (Settings.flag.knx_enable_enhancement) { + knx.write_1byte_uint(KNX_addr, tempvar); + knx.write_1byte_uint(KNX_addr, tempvar); + } + + AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_KNX "%s = %s " D_SENT_TO " %d.%d.%d"), + device_param_ga[KNX_SCENE-1], XdrvMailbox.data, + KNX_addr.ga.area, KNX_addr.ga.line, KNX_addr.ga.member); + ResponseCmndIdxChar (XdrvMailbox.data); + } + } +} + void CmndKnxEnabled(void) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 1)) {