From 1bf69fd3108a0ca10d4271375d759c78c191b14f Mon Sep 17 00:00:00 2001 From: eeak Date: Fri, 28 Oct 2022 17:08:02 +0300 Subject: [PATCH 1/7] dali --- tasmota/include/tasmota_template.h | 11 + tasmota/language/af_AF.h | 7 + tasmota/language/bg_BG.h | 7 + tasmota/language/ca_AD.h | 7 + tasmota/language/cs_CZ.h | 7 + tasmota/language/de_DE.h | 7 + tasmota/language/el_GR.h | 7 + tasmota/language/en_GB.h | 7 + tasmota/language/es_ES.h | 7 + tasmota/language/fr_FR.h | 7 + tasmota/language/fy_NL.h | 7 + tasmota/language/he_HE.h | 7 + tasmota/language/hu_HU.h | 7 + tasmota/language/it_IT.h | 7 + tasmota/language/ko_KO.h | 7 + tasmota/language/nl_NL.h | 7 + tasmota/language/pl_PL.h | 7 + tasmota/language/pt_BR.h | 7 + tasmota/language/pt_PT.h | 7 + tasmota/language/ro_RO.h | 7 + tasmota/language/ru_RU.h | 7 + tasmota/language/sk_SK.h | 7 + tasmota/language/sv_SE.h | 7 + tasmota/language/tr_TR.h | 7 + tasmota/language/uk_UA.h | 7 + tasmota/language/vi_VN.h | 7 + tasmota/language/zh_CN.h | 7 + tasmota/language/zh_TW.h | 7 + .../xdrv_89_esp32_dali.ino | 643 ++++++++++++++++++ 29 files changed, 843 insertions(+) create mode 100644 tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino diff --git a/tasmota/include/tasmota_template.h b/tasmota/include/tasmota_template.h index 869e92a8c..76977bde0 100644 --- a/tasmota/include/tasmota_template.h +++ b/tasmota/include/tasmota_template.h @@ -198,6 +198,9 @@ enum UserSelectablePins { GPIO_ADE7953_RST, // ADE7953 Reset GPIO_NRG_MBS_TX, GPIO_NRG_MBS_RX, // Generic Energy Modbus device GPIO_ADE7953_CS, // ADE7953 SPI Chip Select +#ifdef ESP32 + GPIO_DALI_RX, GPIO_DALI_TX, // Dali +#endif GPIO_SENSOR_END }; // Error as warning to rethink GPIO usage with max 2045 @@ -443,6 +446,9 @@ const char kSensorNames[] PROGMEM = D_SENSOR_ADE7953_RST "|" D_SENSOR_NRG_MBS_TX "|" D_SENSOR_NRG_MBS_RX "|" D_SENSOR_ADE7953_CS "|" +#ifdef ESP32 + D_SENSOR_DALI_RX "|" D_SENSOR_DALI_TX "|" +#endif ; const char kSensorNamesFixed[] PROGMEM = @@ -527,6 +533,11 @@ const uint16_t kGpioNiceList[] PROGMEM = { * Protocol specifics \*-------------------------------------------------------------------------------------------*/ +#if defined(USE_DALI) && defined(ESP32) + AGPIO(GPIO_DALI_RX), // DALI RX + AGPIO(GPIO_DALI_TX), // DALI TX +#endif // USE_DALI + #ifdef USE_I2C AGPIO(GPIO_I2C_SCL) + MAX_I2C, // I2C SCL AGPIO(GPIO_I2C_SDA) + MAX_I2C, // I2C SDA diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 58b48a17a..39dc3126b 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM gevind by adres" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Ewekansige Zigbee parameters, kyk asseblief met 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energie Vandag" #define D_ENERGY_YESTERDAY "Energie Gister" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 968746cd4..21ecbce73 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Консумация за днес" #define D_ENERGY_YESTERDAY "Консумация за вчера" diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h index 26bafafd8..01cf177b1 100644 --- a/tasmota/language/ca_AD.h +++ b/tasmota/language/ca_AD.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energy Today" #define D_ENERGY_YESTERDAY "Energy Yesterday" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 2d32dcc9a..f1fea69ec 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Spotřeba Dnes" #define D_ENERGY_YESTERDAY "Spotřeba Včera" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 05f940706..df8a827b1 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM gefunden an Adresse" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Zufällige Zigbee Parameter erstellt, Überprüfung mit 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energie heute" #define D_ENERGY_YESTERDAY "Energie gestern" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index d7cdbfe65..0d7500450 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Ενέργεια σήμερα" #define D_ENERGY_YESTERDAY "Ενέργεια χθες" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index ea85e0861..d59a97f01 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energy Today" #define D_ENERGY_YESTERDAY "Energy Yesterday" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index fa8dd2b67..b75beec9a 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "Encontrada EEPROM de ZBBridge en" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Configurando parámetros Zigbee de forma aleatoria. Usar 'ZbConfig' para revisarlos." +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energía Hoy" #define D_ENERGY_YESTERDAY "Energía Ayer" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 3364ff482..5f3eac5a3 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "EEPROM ZBBridge trouvée à l'adresse" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomisation des paramètres ZigBee, veuillez vérifier avec 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xsns_03_energy.ino #define D_ENERGY_TODAY "Énergie aujourd'hui" #define D_ENERGY_YESTERDAY "Énergie hier" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index 1e1a25927..a5f22689a 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM fûn op adres" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, kontrolearje asjebleaft mei 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Konsumpsje hjoed" #define D_ENERGY_YESTERDAY "Konsumpsje juster" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 4db4cc9ff..31d969f78 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "צריכה יומית" #define D_ENERGY_YESTERDAY "צריכה בעבר" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index d90312b00..c2204ea65 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM található a címen" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Zigbee paramétereknek véletlennek kell lenniük, ellenőrizd a 'ZbConfig'-gal" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Mai energia" #define D_ENERGY_YESTERDAY "Tegnapi energia" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 99301cc0e..5db1e1220 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "Trovata EEPROM ZBBridge all'indirizzo" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizzazione parametri Zigbee, controlla con \"ZbConfig\"" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energia - oggi" #define D_ENERGY_YESTERDAY "Energia - ieri" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 5554f07a0..7e85879cc 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "금일 전력 사용량" #define D_ENERGY_YESTERDAY "어제 전력 사용량" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 960a8fcf2..f2355a709 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM aanwezig op adres" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Willekeurige Zigbee parameters gemaakt, controleer met 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Verbruik vandaag" #define D_ENERGY_YESTERDAY "Verbruik gisteren" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 1157da535..c523cec6f 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "Znaleziono ZBBridge EEPROM na adresie" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Losowanie parametrów Zigbee, proszę sprawdzić 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energia dzisiaj" #define D_ENERGY_YESTERDAY "Energia wczoraj" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index fe96b16b8..b87b1a618 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "EEPROM ZBBridge encontrada no endereço" // "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizando parametros Zigbee, por favor congira em 'ZbConfig'" // "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Consumo energético de hoje" #define D_ENERGY_YESTERDAY "Consumo energético de ontem" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 3607f8252..c050785fa 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM encontrada no edereço" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomização de parâmetros Zigbee, por-favor verifique a 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Consumo energético de hoje" #define D_ENERGY_YESTERDAY "Consumo energético de ontem" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index f51f0d07a..77ca813dc 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energia de Azi" #define D_ENERGY_YESTERDAY "Energia de Ieri" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index d45530605..fd9c3a7ee 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Конфигурация DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Энергия Сегодня" #define D_ENERGY_YESTERDAY "Энергия Вчера" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 945bd72c1..8b1f107df 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Spotreba dnes" #define D_ENERGY_YESTERDAY "Spotreba včera" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index ffc3e2764..a603635c3 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energi idag" #define D_ENERGY_YESTERDAY "Energi igår" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index a19995a43..4c6d46b49 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energy Today" #define D_ENERGY_YESTERDAY "Energy Yesterday" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 8e832b9d8..1a6f34161 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Енергія Сьогодні" #define D_ENERGY_YESTERDAY "Енергія Вчора" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index f87ba1029..7416d1dae 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "Năng lượng tiêu thụ hôm nay" #define D_ENERGY_YESTERDAY "Năng lượng tiêu thụ hôm qua" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 348718091..4f93019fc 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "找到 ZBBridge EEPROM, 地址:" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "正在随机化 Zigbee 参数, 请通过 'ZbConfig' 检查" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "今日用电量" #define D_ENERGY_YESTERDAY "昨日用电量" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 50c8c5dfb..641f8192c 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -511,6 +511,13 @@ #define D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS "ZBBridge EEPROM found at address" #define D_ZIGBEE_RANDOMIZING_ZBCONFIG "Randomizing Zigbee parameters, please check with 'ZbConfig'" +// xdrv_89_dali.ino +#define D_SENSOR_DALI_RX "Dali RX" +#define D_SENSOR_DALI_TX "Dali TX" +#define D_CONFIGURE_DALI "Config DALI" +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // xdrv_03_energy.ino #define D_ENERGY_TODAY "今日用電量" #define D_ENERGY_YESTERDAY "昨日用電量" diff --git a/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino b/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino new file mode 100644 index 000000000..222f91bac --- /dev/null +++ b/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino @@ -0,0 +1,643 @@ +/* + xdrv_89_esp32_dali.ino - DALI support for Tasmota + + Copyright (C) 2022 Andrei Kazmirtsuk aka eeak + + 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 yyyymmdd Action Description + -------------------------------------------------------------------------------------------- + 0.0.0.1 20221027 publish - initial version +*/ + +#ifdef ESP32 +#ifdef USE_DALI + +/*********************************************************************************************\ + * DALI support for Tasmota +\*********************************************************************************************/ + +#define XDRV_89 89 + +#define BROADCAST_DP 0b11111110 // 0xFE + +enum +{ + DALI_NO_ACTION, + DALI_SENDING_DATA, + DALI_RECEIVING_DATA, + DALI_ERROR +}; + +struct DALI { + bool present = false; +} Dali; + +// http and json defines +#define D_NAME_DALI "DALI" + +const char S_JSON_DALI_COMMAND_NVALUE[] PROGMEM = "{\"" D_NAME_DALI "\":{\"%s\":%d}}"; +const char kDALI_Commands[] PROGMEM = D_CMND_DALI_POWER "|" D_CMND_DALI_DIMMER; + +enum DALI_Commands { // commands for Console + CMND_DALI_PWR, + CMND_DALI_DIM, +}; + +/* Private variables ---------------------------------------------------------*/ +// Communication ports and pins +bool DALIOUT_invert = false; +bool DALIIN_invert = false; +// Data variables +uint16_t send_dali_data; // data to send to DALI bus +uint16_t received_dali_data; // data received from DALI bus +// Processing variables +uint8_t flag; // DALI status flag +uint8_t bit_count; // nr of rec/send bits +uint16_t tick_count; // nr of ticks of the timer + +bool bit_value; // value of actual bit +bool actual_val; // bit value in this tick of timer +bool former_val; // bit value in previous tick of timer + +hw_timer_t *DALI_timer = NULL; + +/*********************************************************************************************\ + * DALI low level +\*********************************************************************************************/ + +/** +* @brief This function handles hardware timer Handler. +* @param None +* @retval None +*/ +void IRAM_ATTR DALI_Tick_Handler(void) +{ + if (get_flag() == DALI_RECEIVING_DATA) + { + receive_tick(); + } + else if (get_flag() == DALI_SENDING_DATA) + { + send_tick(); + } +} + +/** +* @brief This function enable data transfer start interrupt. +* @param None +* @retval None +*/ +void enableDaliRxInterrupt() { + flag = DALI_NO_ACTION; + timerAlarmDisable(DALI_timer); + attachInterrupt(Pin(GPIO_DALI_RX), receiveDaliData, FALLING); +} + +/** +* @brief This function disable data transfer start interrupt. +* @param None +* @retval None +*/ +void disableRxInterrupt() { + timerAlarmEnable(DALI_timer); + detachInterrupt(Pin(GPIO_DALI_RX)); +} + +/** +* @brief receiving flag status +* @param None +* @retval uint8_t flag +*/ +uint8_t get_flag(void) +{ + return flag; +} + +/** +* @brief DALI data received callback +* @param None +* @retval uint8_t flag +*/ +void DataReceivedCallback() { + AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: Received: %d %d"), received_dali_data>>9, received_dali_data&0xff); +} + +/*************** R E C E I V E * P R O C E D U R E S *******/ + +/** +* @brief receive data from DALI bus +* @param None +* @retval None +*/ +void receiveDaliData() +{ + // null variables + received_dali_data = 0; + bit_count = 0; + tick_count = 0; + former_val = true; + + flag = DALI_RECEIVING_DATA; + + disableRxInterrupt(); +} + +/** +* @brief Get state of DALIIN pin +* @param None +* @retval bool status +*/ +bool get_DALIIN(void) +{ + bool dali_read = digitalRead(Pin(GPIO_DALI_RX)); + return (false == DALIIN_invert) ? dali_read : !dali_read; +} + +/** +* @brief receiving data from DALI bus +* @param None +* @retval None +* +* |--------|----|---------------------------|----| +* 0 24 32 160 176 +* wait start data stop +*/ +void receive_tick(void) +{ + // four ticks per bit + actual_val = get_DALIIN(); + tick_count++; + + // edge detected + if(actual_val != former_val) + { + switch(bit_count) + { + case 0: + if (tick_count > 2) + { + tick_count = 0; + bit_count = 1; // start bit + } + break; + case 17: // 1st stop bit + if(tick_count > 6) { // stop bit error, no edge should exist + flag = DALI_ERROR; + } + break; + default: // other bits + if(tick_count > 6) + { + received_dali_data |= (actual_val << (16-bit_count)); + bit_count++; + tick_count = 0; + } + break; + } + }else // voltage level stable + { + switch(bit_count) + { + case 0: + if(tick_count==8) { // too long start bit + flag = DALI_ERROR; + Serial.println("Too long start bit."); + } + break; + case 17: + // First stop bit + if (tick_count==8) + { + if (actual_val==0) // wrong level of stop bit + { + flag = DALI_ERROR; + } + else + { + bit_count++; + tick_count = 0; + } + } + break; + case 18: + // Second stop bit + if (tick_count==8) + { + enableDaliRxInterrupt(); + DataReceivedCallback(); + + } + break; + default: // normal bits + if(tick_count==10) + { // too long delay before edge + flag = DALI_ERROR; + } + break; + } + } + former_val = actual_val; + if(flag==DALI_ERROR) + { + enableDaliRxInterrupt(); + } +} + + +/*************** S E N D * P R O C E D U R E S *************/ + +/** +* @brief Set value to the DALIOUT pin +* @param bool +* @retval None +*/ +void set_DALIOUT(bool pin_value) +{ + digitalWrite(Pin(GPIO_DALI_TX), pin_value == DALIOUT_invert ? LOW : HIGH); +} + +/** +* @brief gets state of the DALIOUT pin +* @param None +* @retval bool state of the DALIOUT pin +*/ +bool get_DALIOUT(void) +{ + bool dali_read = digitalRead(Pin(GPIO_DALI_TX)); + return (false == DALIOUT_invert) ? dali_read : !dali_read; +} + +/** +* @brief Send data to DALI bus +* @param byteToSend +* @retval None +*/ +void sendDaliData(uint8_t firstByte, uint8_t secondByte) +{ + send_dali_data = firstByte << 8; + send_dali_data += secondByte & 0xff; + bit_count = 0; + tick_count = 0; + + flag = DALI_SENDING_DATA; + + disableRxInterrupt(); +} + +/** +* @brief DALI protocol physical layer for slave device +* @param None +* @retval None +* +* |--------|----|---------------------------|----| +* 0 24 32 160 176 +* wait start data stop +*/ +void send_tick(void) +{ + // access to the routine just every 4 ticks = every half bit + if ((tick_count & 0x03) == 0) + { + if (tick_count < 160) + { + // settling time between forward and backward frame + if (tick_count < 24) + { + tick_count++; + return; + } + + // start of the start bit + if (tick_count == 24) + { + // GPIOB->ODR ^= GPIO_ODR_7; + set_DALIOUT(false); + tick_count++; + return; + } + + // edge of the start bit + // 28 ticks = 28/9600 = 2,92ms = delay between forward and backward message frame + if (tick_count == 28) + { + set_DALIOUT(true); + tick_count++; + return; + } + + // bit value (edge) selection + bit_value = (bool)((send_dali_data >> (15 - bit_count)) & 0x01); + + // Every half bit -> Manchester coding + if (!((tick_count - 24) & 0x0007)) + { // div by 8 + if (get_DALIOUT() == bit_value) // former value of bit = new value of bit + set_DALIOUT((bool)(1 - bit_value)); + } + + // Generate edge for actual bit + if (!((tick_count - 28) & 0x0007)) + { + set_DALIOUT(bit_value); + bit_count++; + } + } + else + { // end of data byte, start of stop bits + if (tick_count == 160) + { + set_DALIOUT(true); // start of stop bit + } + + // end of stop bits, no settling time + if (tick_count == 176) + { + enableDaliRxInterrupt(); + } + } + } + tick_count++; + + return; +} + +/***********************************************************/ + +void DaliPreInit() { + if (!PinUsed(GPIO_DALI_TX) || !PinUsed(GPIO_DALI_RX)) { return; } + AddLog(LOG_LEVEL_INFO, PSTR("DLI: Init - RX-pin: %d, TX-pin: %d"), Pin(GPIO_DALI_RX), Pin(GPIO_DALI_TX)); + // pinMode(LED, OUTPUT); + pinMode(Pin(GPIO_DALI_TX), OUTPUT); + digitalWrite(Pin(GPIO_DALI_TX), HIGH); + pinMode(Pin(GPIO_DALI_RX), INPUT); + + DALI_timer = timerBegin(0, 13, true); + timerAttachInterrupt(DALI_timer, &DALI_Tick_Handler, true); + timerAlarmWrite(DALI_timer, 641, true); + + attachInterrupt(Pin(GPIO_DALI_RX), receiveDaliData, FALLING); + enableDaliRxInterrupt(); + Dali.present = true; +} + +void DaliPwr(uint8_t val){ + // AddLog(LOG_LEVEL_INFO, PSTR("DLI: Send to address %d value %d"), 0, val); + sendDaliData(BROADCAST_DP, val); +} + +bool DaliCmd(void) +{ + char command[CMDSZ]; + uint8_t name_len = strlen(D_NAME_DALI); + if (!strncasecmp_P(XdrvMailbox.topic, PSTR(D_NAME_DALI), name_len)) + { + uint32_t command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic + name_len, kDALI_Commands); + switch (command_code) + { + case CMND_DALI_PWR: + if (XdrvMailbox.data_len) + { + // AddLog(LOG_LEVEL_INFO, PSTR("DLI: XdrvMailbox.data_len %d"), XdrvMailbox.data_len); + // AddLog(LOG_LEVEL_INFO, PSTR("DLI: XdrvMailbox.payload %d"), XdrvMailbox.payload); + if (254 >= XdrvMailbox.payload) + { + DaliPwr(XdrvMailbox.payload); + } + } + // Response_P(S_JSON_DALI_COMMAND_NVALUE, command, DaliGetPwr()); + Response_P(S_JSON_DALI_COMMAND_NVALUE, command, XdrvMailbox.payload); + break; + default: + return false; + } + return true; + } + else + { + return false; + } +} + +/*********************************************************************************************\ + * Presentation +\*********************************************************************************************/ + +#ifdef USE_WEBSERVER + +#define WEB_HANDLE_DALI "dali" + +const char HTTP_BTN_MENU_DALI[] PROGMEM = + "

"; + +#endif // USE_WEBSERVER + + + +#define DALI_TOPIC "DALI" +static char tmp[120]; + +bool DaliMqtt() +{ + char stopic[TOPSZ]; + strncpy(stopic, XdrvMailbox.topic, TOPSZ); + XdrvMailbox.topic[TOPSZ - 1] = 0; + + // AddLog(LOG_LEVEL_DEBUG, PSTR("DALI mqtt: %s:%s"), stopic, XdrvMailbox.data); + + // Разберем топик на слова по "/" + char *items[10]; + char *p = stopic; + int cnt = 0; + do + { + items[cnt] = strtok(p, "/"); + cnt++; + p = nullptr; + } while (items[cnt - 1]); + cnt--; // repreents the number of items + + if (cnt < 3) + { // not for us? + AddLog(LOG_LEVEL_INFO,PSTR("cnt: %d < 3"), cnt); + return false; + } + + // cnt-4 cnt -3 cnt-2 cnt-1 + // cmnd/tasmota_078480/DALI/power :70 + // cnt-5 cnt -4 cnt-3 cnt-2 cnt-1 + // cmnd/tasmota_078480/DALI/power/0 :70 + int DALIindex = 0; + int ADRindex = 0; + int CMDindex = 0; + uint8_t DALIaddr = BROADCAST_DP; + if (strcasecmp_P(items[cnt - 3], PSTR(DALI_TOPIC)) != 0) + { + // AddLog(LOG_LEVEL_INFO,PSTR("cnt-3 not %s"), PSTR(DALI_TOPIC)); + if (strcasecmp_P(items[cnt - 2], PSTR(DALI_TOPIC)) != 0) + { + // AddLog(LOG_LEVEL_INFO,PSTR("cnt-2 not %s"), PSTR(DALI_TOPIC)); + if (strcasecmp_P(items[cnt - 1], PSTR(DALI_TOPIC)) != 0) + { + return false; // not for us + } + else + { + // AddLog(LOG_LEVEL_INFO,PSTR("DLI: handle json")); + if (true == DaliJsonParse()) { return true; } + } + } + else + { + DALIindex = cnt - 2; + CMDindex = cnt - 1; + } + } + else + { + DALIindex = cnt - 3; + CMDindex = cnt - 2; + ADRindex = cnt - 1; + DALIaddr = ((int)CharToFloat(items[ADRindex])) << 1; // !!! ВАЖНО !!! Номер лампы должен быть сдвинут << 1 + + } + + // AddLog(LOG_LEVEL_INFO,PSTR("DLI: handle topic + data")); + uint8_t level; + uint8_t value = (uint8_t)CharToFloat(XdrvMailbox.data); + if (strcasecmp_P(items[CMDindex], PSTR("percent")) == 0) { + float percent = (float)(254 * value * 0.01); + level = (uint8_t)percent; + } + else if (strcasecmp_P(items[CMDindex], PSTR("level")) == 0) { + level = value; + } + else { + AddLog(LOG_LEVEL_INFO,PSTR("command not recognized: %s"), items[CMDindex]); + return false; // not for us + } + + AddLog(LOG_LEVEL_INFO,PSTR("Dali value %d on address %d"), value, DALIaddr); + sendDaliData(DALIaddr, level); + + return true; +} + +bool DaliJsonParse() +{ + bool served = false; + + // if (strlen(XdrvMailbox.data) > 8) { // Workaround exception if empty JSON like {} - Needs checks + JsonParser parser((char *)XdrvMailbox.data); + JsonParserObject root = parser.getRootObject(); + if (root) + { + int DALIindex = 0; + int ADRindex = 0; + int8_t DALIdim = -1; + uint8_t DALIaddr = BROADCAST_DP; + + JsonParserToken val = root[PSTR("cmd")]; // Команда + if (val) + { + uint8_t cmd = val.getUInt(); + val = root[PSTR("addr")]; + if (val) + { + uint8_t addr = val.getUInt(); + AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: cmd = %d, addr = %d"), cmd, addr); + sendDaliData(addr, cmd); + return true; + } + else + { + return false; + } + } + val = root[PSTR("addr")]; + if (val) + { + uint8_t addr = val.getUInt(); + if ((addr >= 0) && (addr < 64)) + DALIaddr = addr << 1; // !!! ВАЖНО !!! Номер лампы должен быть сдвинут << 1 + // AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: mqtt->json addr = %d"), val.getUInt()); + } + val = root[PSTR("dim")]; + if (val) + { + uint8_t dim = val.getUInt(); + if ((dim >= 0) && (dim < 255)) + DALIdim = dim; + // AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: mqtt->json dimmer = %d"), val.getUInt()); + } + // val = root[PSTR("power")]; + // if (val) + // { + // // FMqtt.file_type = val.getUInt(); + // // AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: mqtt->json power = %d"), val.getUInt()); + // } + sendDaliData(DALIaddr, DALIdim); + served = true; + } + // else { + // AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: mqtt->json ERROR - not json")); + // } + // } + + return served; +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xdrv89(uint8_t function) +{ + bool result = false; + + if (FUNC_INIT == function) + { + DaliPreInit(); + } + else if (Dali.present) + { + switch (function) + { + case FUNC_MQTT_DATA: + result = DaliMqtt(); + break; + case FUNC_COMMAND: + result = DaliCmd(); + break; +#ifdef USE_WEBSERVER + // case FUNC_WEB_ADD_BUTTON: + // WSContentSend_P(HTTP_BTN_MENU_DALI); + // break; + // case FUNC_WEB_ADD_HANDLER: + // WebServer_on(PSTR("/" WEB_HANDLE_DALI), HandleDali); + // break; +#ifdef USE_DALI_DISPLAYINPUT + // case FUNC_WEB_SENSOR: + // DaliShow(0); + // break; +#endif // #ifdef USE_DALI_DISPLAYINPUT +#endif // USE_WEBSERVER + } + } + return result; +} + +#endif // USE_DALI +#endif // ESP32 \ No newline at end of file From c1c0b25c174034adbb96578e228a77ed712fb7e0 Mon Sep 17 00:00:00 2001 From: eeak Date: Fri, 28 Oct 2022 19:47:55 +0300 Subject: [PATCH 2/7] Clean up some comments and little refactor --- tasmota/my_user_config.h | 4 + .../xdrv_89_esp32_dali.ino | 138 +++++------------- 2 files changed, 43 insertions(+), 99 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 51ea0d677..8a4de54f0 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -1034,6 +1034,10 @@ #define USE_ESP32_SENSORS // Add support for ESP32 temperature and optional hall effect sensor +#define USE_DALI // Add support for DALI + #define DALI_IN_INVERT 0 // DALI RX inverted ? + #define DALI_OUT_INVERT 0 // DALI TX inverted ? + //#define USE_SONOFF_SPM // Add support for ESP32 based Sonoff Smart Stackable Power Meter (+11k code) //#define USE_DISPLAY_TM1621_SONOFF // Add support for TM1621 dsiplay driver used by Sonoff POWR3xxD and THR3xxD diff --git a/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino b/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino index 222f91bac..844b71af6 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino @@ -32,6 +32,7 @@ #define XDRV_89 89 #define BROADCAST_DP 0b11111110 // 0xFE +#define DALI_TOPIC "DALI" enum { @@ -57,9 +58,6 @@ enum DALI_Commands { // commands for Console }; /* Private variables ---------------------------------------------------------*/ -// Communication ports and pins -bool DALIOUT_invert = false; -bool DALIIN_invert = false; // Data variables uint16_t send_dali_data; // data to send to DALI bus uint16_t received_dali_data; // data received from DALI bus @@ -163,7 +161,7 @@ void receiveDaliData() bool get_DALIIN(void) { bool dali_read = digitalRead(Pin(GPIO_DALI_RX)); - return (false == DALIIN_invert) ? dali_read : !dali_read; + return (false == DALI_IN_INVERT) ? dali_read : !dali_read; } /** @@ -266,7 +264,7 @@ void receive_tick(void) */ void set_DALIOUT(bool pin_value) { - digitalWrite(Pin(GPIO_DALI_TX), pin_value == DALIOUT_invert ? LOW : HIGH); + digitalWrite(Pin(GPIO_DALI_TX), pin_value == DALI_OUT_INVERT ? LOW : HIGH); } /** @@ -277,7 +275,7 @@ void set_DALIOUT(bool pin_value) bool get_DALIOUT(void) { bool dali_read = digitalRead(Pin(GPIO_DALI_TX)); - return (false == DALIOUT_invert) ? dali_read : !dali_read; + return (false == DALI_OUT_INVERT) ? dali_read : !dali_read; } /** @@ -394,7 +392,6 @@ void DaliPreInit() { } void DaliPwr(uint8_t val){ - // AddLog(LOG_LEVEL_INFO, PSTR("DLI: Send to address %d value %d"), 0, val); sendDaliData(BROADCAST_DP, val); } @@ -410,14 +407,11 @@ bool DaliCmd(void) case CMND_DALI_PWR: if (XdrvMailbox.data_len) { - // AddLog(LOG_LEVEL_INFO, PSTR("DLI: XdrvMailbox.data_len %d"), XdrvMailbox.data_len); - // AddLog(LOG_LEVEL_INFO, PSTR("DLI: XdrvMailbox.payload %d"), XdrvMailbox.payload); if (254 >= XdrvMailbox.payload) { DaliPwr(XdrvMailbox.payload); } } - // Response_P(S_JSON_DALI_COMMAND_NVALUE, command, DaliGetPwr()); Response_P(S_JSON_DALI_COMMAND_NVALUE, command, XdrvMailbox.payload); break; default: @@ -431,23 +425,6 @@ bool DaliCmd(void) } } -/*********************************************************************************************\ - * Presentation -\*********************************************************************************************/ - -#ifdef USE_WEBSERVER - -#define WEB_HANDLE_DALI "dali" - -const char HTTP_BTN_MENU_DALI[] PROGMEM = - "

"; - -#endif // USE_WEBSERVER - - - -#define DALI_TOPIC "DALI" -static char tmp[120]; bool DaliMqtt() { @@ -455,9 +432,6 @@ bool DaliMqtt() strncpy(stopic, XdrvMailbox.topic, TOPSZ); XdrvMailbox.topic[TOPSZ - 1] = 0; - // AddLog(LOG_LEVEL_DEBUG, PSTR("DALI mqtt: %s:%s"), stopic, XdrvMailbox.data); - - // Разберем топик на слова по "/" char *items[10]; char *p = stopic; int cnt = 0; @@ -475,27 +449,20 @@ bool DaliMqtt() return false; } - // cnt-4 cnt -3 cnt-2 cnt-1 - // cmnd/tasmota_078480/DALI/power :70 - // cnt-5 cnt -4 cnt-3 cnt-2 cnt-1 - // cmnd/tasmota_078480/DALI/power/0 :70 int DALIindex = 0; int ADRindex = 0; int CMDindex = 0; uint8_t DALIaddr = BROADCAST_DP; if (strcasecmp_P(items[cnt - 3], PSTR(DALI_TOPIC)) != 0) { - // AddLog(LOG_LEVEL_INFO,PSTR("cnt-3 not %s"), PSTR(DALI_TOPIC)); if (strcasecmp_P(items[cnt - 2], PSTR(DALI_TOPIC)) != 0) { - // AddLog(LOG_LEVEL_INFO,PSTR("cnt-2 not %s"), PSTR(DALI_TOPIC)); if (strcasecmp_P(items[cnt - 1], PSTR(DALI_TOPIC)) != 0) { return false; // not for us } else { - // AddLog(LOG_LEVEL_INFO,PSTR("DLI: handle json")); if (true == DaliJsonParse()) { return true; } } } @@ -510,11 +477,10 @@ bool DaliMqtt() DALIindex = cnt - 3; CMDindex = cnt - 2; ADRindex = cnt - 1; - DALIaddr = ((int)CharToFloat(items[ADRindex])) << 1; // !!! ВАЖНО !!! Номер лампы должен быть сдвинут << 1 + DALIaddr = ((int)CharToFloat(items[ADRindex])) << 1; } - // AddLog(LOG_LEVEL_INFO,PSTR("DLI: handle topic + data")); uint8_t level; uint8_t value = (uint8_t)CharToFloat(XdrvMailbox.data); if (strcasecmp_P(items[CMDindex], PSTR("percent")) == 0) { @@ -538,63 +504,50 @@ bool DaliMqtt() bool DaliJsonParse() { bool served = false; + JsonParser parser((char *)XdrvMailbox.data); + JsonParserObject root = parser.getRootObject(); + if (root) + { + int DALIindex = 0; + int ADRindex = 0; + int8_t DALIdim = -1; + uint8_t DALIaddr = BROADCAST_DP; - // if (strlen(XdrvMailbox.data) > 8) { // Workaround exception if empty JSON like {} - Needs checks - JsonParser parser((char *)XdrvMailbox.data); - JsonParserObject root = parser.getRootObject(); - if (root) + JsonParserToken val = root[PSTR("cmd")]; + if (val) { - int DALIindex = 0; - int ADRindex = 0; - int8_t DALIdim = -1; - uint8_t DALIaddr = BROADCAST_DP; - - JsonParserToken val = root[PSTR("cmd")]; // Команда - if (val) - { - uint8_t cmd = val.getUInt(); - val = root[PSTR("addr")]; - if (val) - { - uint8_t addr = val.getUInt(); - AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: cmd = %d, addr = %d"), cmd, addr); - sendDaliData(addr, cmd); - return true; - } - else - { - return false; - } - } + uint8_t cmd = val.getUInt(); val = root[PSTR("addr")]; if (val) { uint8_t addr = val.getUInt(); - if ((addr >= 0) && (addr < 64)) - DALIaddr = addr << 1; // !!! ВАЖНО !!! Номер лампы должен быть сдвинут << 1 - // AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: mqtt->json addr = %d"), val.getUInt()); + AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: cmd = %d, addr = %d"), cmd, addr); + sendDaliData(addr, cmd); + return true; } - val = root[PSTR("dim")]; - if (val) + else { - uint8_t dim = val.getUInt(); - if ((dim >= 0) && (dim < 255)) - DALIdim = dim; - // AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: mqtt->json dimmer = %d"), val.getUInt()); + return false; } - // val = root[PSTR("power")]; - // if (val) - // { - // // FMqtt.file_type = val.getUInt(); - // // AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: mqtt->json power = %d"), val.getUInt()); - // } - sendDaliData(DALIaddr, DALIdim); - served = true; } - // else { - // AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: mqtt->json ERROR - not json")); - // } - // } + val = root[PSTR("addr")]; + if (val) + { + uint8_t addr = val.getUInt(); + if ((addr >= 0) && (addr < 64)) + DALIaddr = addr << 1; + } + val = root[PSTR("dim")]; + if (val) + { + uint8_t dim = val.getUInt(); + if (dim < 255) + DALIdim = dim; + } + + sendDaliData(DALIaddr, DALIdim); + served = true; + } return served; } @@ -621,19 +574,6 @@ bool Xdrv89(uint8_t function) case FUNC_COMMAND: result = DaliCmd(); break; -#ifdef USE_WEBSERVER - // case FUNC_WEB_ADD_BUTTON: - // WSContentSend_P(HTTP_BTN_MENU_DALI); - // break; - // case FUNC_WEB_ADD_HANDLER: - // WebServer_on(PSTR("/" WEB_HANDLE_DALI), HandleDali); - // break; -#ifdef USE_DALI_DISPLAYINPUT - // case FUNC_WEB_SENSOR: - // DaliShow(0); - // break; -#endif // #ifdef USE_DALI_DISPLAYINPUT -#endif // USE_WEBSERVER } } return result; From 76c5be76346ef1fb85918b6e91a10963cd30d263 Mon Sep 17 00:00:00 2001 From: eeak Date: Fri, 28 Oct 2022 20:16:45 +0300 Subject: [PATCH 3/7] Packed global variables into a struct --- .../xdrv_89_esp32_dali.ino | 146 +++++++++--------- 1 file changed, 77 insertions(+), 69 deletions(-) diff --git a/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino b/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino index 844b71af6..39ac47a3f 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino @@ -42,10 +42,6 @@ enum DALI_ERROR }; -struct DALI { - bool present = false; -} Dali; - // http and json defines #define D_NAME_DALI "DALI" @@ -59,16 +55,29 @@ enum DALI_Commands { // commands for Console /* Private variables ---------------------------------------------------------*/ // Data variables -uint16_t send_dali_data; // data to send to DALI bus -uint16_t received_dali_data; // data received from DALI bus +// uint16_t send_dali_data; // data to send to DALI bus +// uint16_t received_dali_data; // data received from DALI bus // Processing variables -uint8_t flag; // DALI status flag -uint8_t bit_count; // nr of rec/send bits -uint16_t tick_count; // nr of ticks of the timer +// uint8_t flag; // DALI status flag +// uint8_t bit_count; // nr of rec/send bits +// uint16_t tick_count; // nr of ticks of the timer -bool bit_value; // value of actual bit -bool actual_val; // bit value in this tick of timer -bool former_val; // bit value in previous tick of timer +// bool bit_value; // value of actual bit +// bool actual_val; // bit value in this tick of timer +// bool former_val; // bit value in previous tick of timer + +struct DALI { + // Data variables + uint16_t send_dali_data; // data to send to DALI bus + uint16_t received_dali_data; // data received from DALI bus + // Processing variables + uint8_t flag; // DALI status flag + uint8_t bit_count; // nr of rec/send bits + uint16_t tick_count; // nr of ticks of the timer + bool former_val; // bit value in previous tick of timer + + bool present = false;// DALI initialized +} Dali; hw_timer_t *DALI_timer = NULL; @@ -83,11 +92,11 @@ hw_timer_t *DALI_timer = NULL; */ void IRAM_ATTR DALI_Tick_Handler(void) { - if (get_flag() == DALI_RECEIVING_DATA) + if (getDaliFlag() == DALI_RECEIVING_DATA) { receive_tick(); } - else if (get_flag() == DALI_SENDING_DATA) + else if (getDaliFlag() == DALI_SENDING_DATA) { send_tick(); } @@ -99,7 +108,7 @@ void IRAM_ATTR DALI_Tick_Handler(void) * @retval None */ void enableDaliRxInterrupt() { - flag = DALI_NO_ACTION; + Dali.flag = DALI_NO_ACTION; timerAlarmDisable(DALI_timer); attachInterrupt(Pin(GPIO_DALI_RX), receiveDaliData, FALLING); } @@ -119,9 +128,9 @@ void disableRxInterrupt() { * @param None * @retval uint8_t flag */ -uint8_t get_flag(void) +uint8_t getDaliFlag(void) { - return flag; + return Dali.flag; } /** @@ -130,7 +139,7 @@ uint8_t get_flag(void) * @retval uint8_t flag */ void DataReceivedCallback() { - AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: Received: %d %d"), received_dali_data>>9, received_dali_data&0xff); + AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: Received: %d %d"), Dali.received_dali_data>>9, Dali.received_dali_data&0xff); } /*************** R E C E I V E * P R O C E D U R E S *******/ @@ -143,12 +152,12 @@ void DataReceivedCallback() { void receiveDaliData() { // null variables - received_dali_data = 0; - bit_count = 0; - tick_count = 0; - former_val = true; + Dali.received_dali_data = 0; + Dali.bit_count = 0; + Dali.tick_count = 0; + Dali.former_val = true; - flag = DALI_RECEIVING_DATA; + Dali.flag = DALI_RECEIVING_DATA; disableRxInterrupt(); } @@ -176,63 +185,62 @@ bool get_DALIIN(void) void receive_tick(void) { // four ticks per bit - actual_val = get_DALIIN(); - tick_count++; + bool actual_val = get_DALIIN(); + Dali.tick_count++; // edge detected - if(actual_val != former_val) + if(actual_val != Dali.former_val) { - switch(bit_count) + switch(Dali.bit_count) { case 0: - if (tick_count > 2) + if (Dali.tick_count > 2) { - tick_count = 0; - bit_count = 1; // start bit + Dali.tick_count = 0; + Dali.bit_count = 1; // start bit } break; case 17: // 1st stop bit - if(tick_count > 6) { // stop bit error, no edge should exist - flag = DALI_ERROR; + if(Dali.tick_count > 6) { // stop bit error, no edge should exist + Dali.flag = DALI_ERROR; } break; default: // other bits - if(tick_count > 6) + if(Dali.tick_count > 6) { - received_dali_data |= (actual_val << (16-bit_count)); - bit_count++; - tick_count = 0; + Dali.received_dali_data |= (actual_val << (16-Dali.bit_count)); + Dali.bit_count++; + Dali.tick_count = 0; } break; } }else // voltage level stable { - switch(bit_count) + switch(Dali.bit_count) { case 0: - if(tick_count==8) { // too long start bit - flag = DALI_ERROR; - Serial.println("Too long start bit."); + if(Dali.tick_count==8) { // too long start bit + Dali.flag = DALI_ERROR; } break; case 17: // First stop bit - if (tick_count==8) + if (Dali.tick_count==8) { if (actual_val==0) // wrong level of stop bit { - flag = DALI_ERROR; + Dali.flag = DALI_ERROR; } else { - bit_count++; - tick_count = 0; + Dali.bit_count++; + Dali.tick_count = 0; } } break; case 18: // Second stop bit - if (tick_count==8) + if (Dali.tick_count==8) { enableDaliRxInterrupt(); DataReceivedCallback(); @@ -240,15 +248,15 @@ void receive_tick(void) } break; default: // normal bits - if(tick_count==10) + if(Dali.tick_count==10) { // too long delay before edge - flag = DALI_ERROR; + Dali.flag = DALI_ERROR; } break; } } - former_val = actual_val; - if(flag==DALI_ERROR) + Dali.former_val = actual_val; + if(getDaliFlag() == DALI_ERROR) { enableDaliRxInterrupt(); } @@ -285,12 +293,12 @@ bool get_DALIOUT(void) */ void sendDaliData(uint8_t firstByte, uint8_t secondByte) { - send_dali_data = firstByte << 8; - send_dali_data += secondByte & 0xff; - bit_count = 0; - tick_count = 0; + Dali.send_dali_data = firstByte << 8; + Dali.send_dali_data += secondByte & 0xff; + Dali.bit_count = 0; + Dali.tick_count = 0; - flag = DALI_SENDING_DATA; + Dali.flag = DALI_SENDING_DATA; disableRxInterrupt(); } @@ -307,67 +315,67 @@ void sendDaliData(uint8_t firstByte, uint8_t secondByte) void send_tick(void) { // access to the routine just every 4 ticks = every half bit - if ((tick_count & 0x03) == 0) + if ((Dali.tick_count & 0x03) == 0) { - if (tick_count < 160) + if (Dali.tick_count < 160) { // settling time between forward and backward frame - if (tick_count < 24) + if (Dali.tick_count < 24) { - tick_count++; + Dali.tick_count++; return; } // start of the start bit - if (tick_count == 24) + if (Dali.tick_count == 24) { // GPIOB->ODR ^= GPIO_ODR_7; set_DALIOUT(false); - tick_count++; + Dali.tick_count++; return; } // edge of the start bit // 28 ticks = 28/9600 = 2,92ms = delay between forward and backward message frame - if (tick_count == 28) + if (Dali.tick_count == 28) { set_DALIOUT(true); - tick_count++; + Dali.tick_count++; return; } // bit value (edge) selection - bit_value = (bool)((send_dali_data >> (15 - bit_count)) & 0x01); + bool bit_value = (bool)((Dali.send_dali_data >> (15 - Dali.bit_count)) & 0x01); // Every half bit -> Manchester coding - if (!((tick_count - 24) & 0x0007)) + if (!((Dali.tick_count - 24) & 0x0007)) { // div by 8 if (get_DALIOUT() == bit_value) // former value of bit = new value of bit set_DALIOUT((bool)(1 - bit_value)); } // Generate edge for actual bit - if (!((tick_count - 28) & 0x0007)) + if (!((Dali.tick_count - 28) & 0x0007)) { set_DALIOUT(bit_value); - bit_count++; + Dali.bit_count++; } } else { // end of data byte, start of stop bits - if (tick_count == 160) + if (Dali.tick_count == 160) { set_DALIOUT(true); // start of stop bit } // end of stop bits, no settling time - if (tick_count == 176) + if (Dali.tick_count == 176) { enableDaliRxInterrupt(); } } } - tick_count++; + Dali.tick_count++; return; } From 404db7965e84421d6cb83e4b536fc2cd0142f49b Mon Sep 17 00:00:00 2001 From: eeak Date: Fri, 28 Oct 2022 21:57:40 +0300 Subject: [PATCH 4/7] Timer number is now declared in my_user_config.h --- tasmota/my_user_config.h | 1 + .../xdrv_89_esp32_dali.ino | 19 +++++-------------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 8a4de54f0..3e2d83a5b 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -1037,6 +1037,7 @@ #define USE_DALI // Add support for DALI #define DALI_IN_INVERT 0 // DALI RX inverted ? #define DALI_OUT_INVERT 0 // DALI TX inverted ? + #define DALI_TIMER 0 // ESP32 hardware timer number 0-3 !!! timer 3 used in xdrv_10_scripter.ino !!! //#define USE_SONOFF_SPM // Add support for ESP32 based Sonoff Smart Stackable Power Meter (+11k code) //#define USE_DISPLAY_TM1621_SONOFF // Add support for TM1621 dsiplay driver used by Sonoff POWR3xxD and THR3xxD diff --git a/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino b/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino index 39ac47a3f..87523b6e0 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino @@ -31,6 +31,10 @@ #define XDRV_89 89 +#ifndef DALI_TIMER + #define DALI_TIMER 0 // Default timer +#endif + #define BROADCAST_DP 0b11111110 // 0xFE #define DALI_TOPIC "DALI" @@ -53,19 +57,6 @@ enum DALI_Commands { // commands for Console CMND_DALI_DIM, }; -/* Private variables ---------------------------------------------------------*/ -// Data variables -// uint16_t send_dali_data; // data to send to DALI bus -// uint16_t received_dali_data; // data received from DALI bus -// Processing variables -// uint8_t flag; // DALI status flag -// uint8_t bit_count; // nr of rec/send bits -// uint16_t tick_count; // nr of ticks of the timer - -// bool bit_value; // value of actual bit -// bool actual_val; // bit value in this tick of timer -// bool former_val; // bit value in previous tick of timer - struct DALI { // Data variables uint16_t send_dali_data; // data to send to DALI bus @@ -390,7 +381,7 @@ void DaliPreInit() { digitalWrite(Pin(GPIO_DALI_TX), HIGH); pinMode(Pin(GPIO_DALI_RX), INPUT); - DALI_timer = timerBegin(0, 13, true); + DALI_timer = timerBegin(DALI_TIMER, 13, true); timerAttachInterrupt(DALI_timer, &DALI_Tick_Handler, true); timerAlarmWrite(DALI_timer, 641, true); From 6c0e38e38d783646b0ed12d3485ceb244ff9d61b Mon Sep 17 00:00:00 2001 From: eeak Date: Sat, 29 Oct 2022 12:50:41 +0300 Subject: [PATCH 5/7] Data struct rebuilded. Thanks barbudor for help --- tasmota/my_user_config.h | 2 +- .../xdrv_89_esp32_dali.ino | 135 +++++++++--------- 2 files changed, 69 insertions(+), 68 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 3e2d83a5b..24077f12f 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -1034,7 +1034,7 @@ #define USE_ESP32_SENSORS // Add support for ESP32 temperature and optional hall effect sensor -#define USE_DALI // Add support for DALI +// #define USE_DALI // Add support for DALI #define DALI_IN_INVERT 0 // DALI RX inverted ? #define DALI_OUT_INVERT 0 // DALI TX inverted ? #define DALI_TIMER 0 // ESP32 hardware timer number 0-3 !!! timer 3 used in xdrv_10_scripter.ino !!! diff --git a/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino b/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino index 87523b6e0..0a247a2bd 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_89_esp32_dali.ino @@ -58,19 +58,16 @@ enum DALI_Commands { // commands for Console }; struct DALI { - // Data variables uint16_t send_dali_data; // data to send to DALI bus uint16_t received_dali_data; // data received from DALI bus - // Processing variables - uint8_t flag; // DALI status flag - uint8_t bit_count; // nr of rec/send bits - uint16_t tick_count; // nr of ticks of the timer - bool former_val; // bit value in previous tick of timer + uint8_t flag; // DALI status flag + uint8_t bit_count; // nr of rec/send bits + uint16_t tick_count; // nr of ticks of the timer + bool former_val; // bit value in previous tick of timer + hw_timer_t *timer; // hardware timer +} *Dali = nullptr; - bool present = false;// DALI initialized -} Dali; -hw_timer_t *DALI_timer = NULL; /*********************************************************************************************\ * DALI low level @@ -99,8 +96,8 @@ void IRAM_ATTR DALI_Tick_Handler(void) * @retval None */ void enableDaliRxInterrupt() { - Dali.flag = DALI_NO_ACTION; - timerAlarmDisable(DALI_timer); + Dali->flag = DALI_NO_ACTION; + timerAlarmDisable(Dali->timer); attachInterrupt(Pin(GPIO_DALI_RX), receiveDaliData, FALLING); } @@ -110,7 +107,7 @@ void enableDaliRxInterrupt() { * @retval None */ void disableRxInterrupt() { - timerAlarmEnable(DALI_timer); + timerAlarmEnable(Dali->timer); detachInterrupt(Pin(GPIO_DALI_RX)); } @@ -121,7 +118,7 @@ void disableRxInterrupt() { */ uint8_t getDaliFlag(void) { - return Dali.flag; + return Dali->flag; } /** @@ -130,7 +127,7 @@ uint8_t getDaliFlag(void) * @retval uint8_t flag */ void DataReceivedCallback() { - AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: Received: %d %d"), Dali.received_dali_data>>9, Dali.received_dali_data&0xff); + AddLog(LOG_LEVEL_DEBUG, PSTR("DLI: Received: %d %d"), Dali->received_dali_data>>9, Dali->received_dali_data&0xff); } /*************** R E C E I V E * P R O C E D U R E S *******/ @@ -143,12 +140,12 @@ void DataReceivedCallback() { void receiveDaliData() { // null variables - Dali.received_dali_data = 0; - Dali.bit_count = 0; - Dali.tick_count = 0; - Dali.former_val = true; + Dali->received_dali_data = 0; + Dali->bit_count = 0; + Dali->tick_count = 0; + Dali->former_val = true; - Dali.flag = DALI_RECEIVING_DATA; + Dali->flag = DALI_RECEIVING_DATA; disableRxInterrupt(); } @@ -177,61 +174,61 @@ void receive_tick(void) { // four ticks per bit bool actual_val = get_DALIIN(); - Dali.tick_count++; + Dali->tick_count++; // edge detected - if(actual_val != Dali.former_val) + if(actual_val != Dali->former_val) { - switch(Dali.bit_count) + switch(Dali->bit_count) { case 0: - if (Dali.tick_count > 2) + if (Dali->tick_count > 2) { - Dali.tick_count = 0; - Dali.bit_count = 1; // start bit + Dali->tick_count = 0; + Dali->bit_count = 1; // start bit } break; case 17: // 1st stop bit - if(Dali.tick_count > 6) { // stop bit error, no edge should exist - Dali.flag = DALI_ERROR; + if(Dali->tick_count > 6) { // stop bit error, no edge should exist + Dali->flag = DALI_ERROR; } break; default: // other bits - if(Dali.tick_count > 6) + if(Dali->tick_count > 6) { - Dali.received_dali_data |= (actual_val << (16-Dali.bit_count)); - Dali.bit_count++; - Dali.tick_count = 0; + Dali->received_dali_data |= (actual_val << (16-Dali->bit_count)); + Dali->bit_count++; + Dali->tick_count = 0; } break; } }else // voltage level stable { - switch(Dali.bit_count) + switch(Dali->bit_count) { case 0: - if(Dali.tick_count==8) { // too long start bit - Dali.flag = DALI_ERROR; + if(Dali->tick_count==8) { // too long start bit + Dali->flag = DALI_ERROR; } break; case 17: // First stop bit - if (Dali.tick_count==8) + if (Dali->tick_count==8) { if (actual_val==0) // wrong level of stop bit { - Dali.flag = DALI_ERROR; + Dali->flag = DALI_ERROR; } else { - Dali.bit_count++; - Dali.tick_count = 0; + Dali->bit_count++; + Dali->tick_count = 0; } } break; case 18: // Second stop bit - if (Dali.tick_count==8) + if (Dali->tick_count==8) { enableDaliRxInterrupt(); DataReceivedCallback(); @@ -239,14 +236,14 @@ void receive_tick(void) } break; default: // normal bits - if(Dali.tick_count==10) + if(Dali->tick_count==10) { // too long delay before edge - Dali.flag = DALI_ERROR; + Dali->flag = DALI_ERROR; } break; } } - Dali.former_val = actual_val; + Dali->former_val = actual_val; if(getDaliFlag() == DALI_ERROR) { enableDaliRxInterrupt(); @@ -284,12 +281,12 @@ bool get_DALIOUT(void) */ void sendDaliData(uint8_t firstByte, uint8_t secondByte) { - Dali.send_dali_data = firstByte << 8; - Dali.send_dali_data += secondByte & 0xff; - Dali.bit_count = 0; - Dali.tick_count = 0; + Dali->send_dali_data = firstByte << 8; + Dali->send_dali_data += secondByte & 0xff; + Dali->bit_count = 0; + Dali->tick_count = 0; - Dali.flag = DALI_SENDING_DATA; + Dali->flag = DALI_SENDING_DATA; disableRxInterrupt(); } @@ -306,67 +303,67 @@ void sendDaliData(uint8_t firstByte, uint8_t secondByte) void send_tick(void) { // access to the routine just every 4 ticks = every half bit - if ((Dali.tick_count & 0x03) == 0) + if ((Dali->tick_count & 0x03) == 0) { - if (Dali.tick_count < 160) + if (Dali->tick_count < 160) { // settling time between forward and backward frame - if (Dali.tick_count < 24) + if (Dali->tick_count < 24) { - Dali.tick_count++; + Dali->tick_count++; return; } // start of the start bit - if (Dali.tick_count == 24) + if (Dali->tick_count == 24) { // GPIOB->ODR ^= GPIO_ODR_7; set_DALIOUT(false); - Dali.tick_count++; + Dali->tick_count++; return; } // edge of the start bit // 28 ticks = 28/9600 = 2,92ms = delay between forward and backward message frame - if (Dali.tick_count == 28) + if (Dali->tick_count == 28) { set_DALIOUT(true); - Dali.tick_count++; + Dali->tick_count++; return; } // bit value (edge) selection - bool bit_value = (bool)((Dali.send_dali_data >> (15 - Dali.bit_count)) & 0x01); + bool bit_value = (bool)((Dali->send_dali_data >> (15 - Dali->bit_count)) & 0x01); // Every half bit -> Manchester coding - if (!((Dali.tick_count - 24) & 0x0007)) + if (!((Dali->tick_count - 24) & 0x0007)) { // div by 8 if (get_DALIOUT() == bit_value) // former value of bit = new value of bit set_DALIOUT((bool)(1 - bit_value)); } // Generate edge for actual bit - if (!((Dali.tick_count - 28) & 0x0007)) + if (!((Dali->tick_count - 28) & 0x0007)) { set_DALIOUT(bit_value); - Dali.bit_count++; + Dali->bit_count++; } } else { // end of data byte, start of stop bits - if (Dali.tick_count == 160) + if (Dali->tick_count == 160) { set_DALIOUT(true); // start of stop bit } // end of stop bits, no settling time - if (Dali.tick_count == 176) + if (Dali->tick_count == 176) { enableDaliRxInterrupt(); } } } - Dali.tick_count++; + Dali->tick_count++; return; } @@ -381,13 +378,17 @@ void DaliPreInit() { digitalWrite(Pin(GPIO_DALI_TX), HIGH); pinMode(Pin(GPIO_DALI_RX), INPUT); - DALI_timer = timerBegin(DALI_TIMER, 13, true); - timerAttachInterrupt(DALI_timer, &DALI_Tick_Handler, true); - timerAlarmWrite(DALI_timer, 641, true); + Dali = (DALI*)calloc(1,sizeof(DALI)); + if (!Dali) { + AddLog(LOG_LEVEL_INFO, PSTR("DLI: Memory allocation error")); + return; + } + Dali->timer = timerBegin(DALI_TIMER, 13, true); + timerAttachInterrupt(Dali->timer, &DALI_Tick_Handler, true); + timerAlarmWrite(Dali->timer, 641, true); attachInterrupt(Pin(GPIO_DALI_RX), receiveDaliData, FALLING); enableDaliRxInterrupt(); - Dali.present = true; } void DaliPwr(uint8_t val){ @@ -563,7 +564,7 @@ bool Xdrv89(uint8_t function) { DaliPreInit(); } - else if (Dali.present) + else if (Dali) { switch (function) { From 4e98cbb387d619a2e4d93a785acecc81b680111a Mon Sep 17 00:00:00 2001 From: eeak Date: Sat, 29 Oct 2022 16:09:09 +0300 Subject: [PATCH 6/7] moved D_CMND_xx to i18n.h --- tasmota/include/i18n.h | 4 ++++ tasmota/language/af_AF.h | 2 -- tasmota/language/bg_BG.h | 2 -- tasmota/language/ca_AD.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 | 2 -- tasmota/language/fr_FR.h | 2 -- tasmota/language/fy_NL.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/ro_RO.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_UA.h | 2 -- tasmota/language/vi_VN.h | 2 -- tasmota/language/zh_CN.h | 2 -- tasmota/language/zh_TW.h | 2 -- 28 files changed, 4 insertions(+), 54 deletions(-) diff --git a/tasmota/include/i18n.h b/tasmota/include/i18n.h index 84c0a78a6..1c46f3df4 100644 --- a/tasmota/include/i18n.h +++ b/tasmota/include/i18n.h @@ -753,6 +753,10 @@ // Commands xdrv_60_shift595.ino - 74x595 family shift register driver #define D_CMND_SHIFT595_DEVICE_COUNT "Shift595DeviceCount" +// Commands xdrv_89_dali.ino +#define D_CMND_DALI_POWER "power" +#define D_CMND_DALI_DIMMER "dim" + // Commands xsns_02_analog.ino #define D_CMND_ADCPARAM "AdcParam" diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 39dc3126b..53f836a14 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energie Vandag" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 21ecbce73..784a15f90 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Консумация за днес" diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h index 01cf177b1..c01ee0d66 100644 --- a/tasmota/language/ca_AD.h +++ b/tasmota/language/ca_AD.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Energy Today" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index f1fea69ec..eb3d4d797 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 df8a827b1..d4ba67d4a 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 0d7500450..a7e79adf7 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Ενέργεια σήμερα" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index d59a97f01..392abdb0e 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 b75beec9a..62043d5c5 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 5f3eac5a3..3a26c486f 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xsns_03_energy.ino #define D_ENERGY_TODAY "Énergie aujourd'hui" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index a5f22689a..4e2bb00a1 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Konsumpsje hjoed" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 31d969f78..afde4734d 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "צריכה יומית" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index c2204ea65..1d753de1b 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 5db1e1220..15b933509 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 7e85879cc..7fd6d1864 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "금일 전력 사용량" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index f2355a709..d0f96fe48 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 c523cec6f..a4237e480 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 b87b1a618..ed31fc1f9 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 c050785fa..e1bde2d58 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 77ca813dc..b9db344a1 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 fd9c3a7ee..5e38b74f9 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Конфигурация DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Энергия Сегодня" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 8b1f107df..2565fd648 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 a603635c3..6c85c366f 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 4c6d46b49..a32bd177a 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // 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 1a6f34161..b786a6700 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Енергія Сьогодні" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index 7416d1dae..c054ed967 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "Năng lượng tiêu thụ hôm nay" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 4f93019fc..63d885088 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "今日用电量" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 641f8192c..30db4a4f1 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -515,8 +515,6 @@ #define D_SENSOR_DALI_RX "Dali RX" #define D_SENSOR_DALI_TX "Dali TX" #define D_CONFIGURE_DALI "Config DALI" -#define D_CMND_DALI_POWER "power" -#define D_CMND_DALI_DIMMER "dim" // xdrv_03_energy.ino #define D_ENERGY_TODAY "今日用電量" From 06350618b7a312be04fc90578880e9c00ca78577 Mon Sep 17 00:00:00 2001 From: eeak Date: Sat, 29 Oct 2022 16:12:10 +0300 Subject: [PATCH 7/7] cleanup tasmota_template.h --- tasmota/include/tasmota_template.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tasmota/include/tasmota_template.h b/tasmota/include/tasmota_template.h index 76977bde0..831115456 100644 --- a/tasmota/include/tasmota_template.h +++ b/tasmota/include/tasmota_template.h @@ -198,9 +198,7 @@ enum UserSelectablePins { GPIO_ADE7953_RST, // ADE7953 Reset GPIO_NRG_MBS_TX, GPIO_NRG_MBS_RX, // Generic Energy Modbus device GPIO_ADE7953_CS, // ADE7953 SPI Chip Select -#ifdef ESP32 GPIO_DALI_RX, GPIO_DALI_TX, // Dali -#endif GPIO_SENSOR_END }; // Error as warning to rethink GPIO usage with max 2045 @@ -446,9 +444,7 @@ const char kSensorNames[] PROGMEM = D_SENSOR_ADE7953_RST "|" D_SENSOR_NRG_MBS_TX "|" D_SENSOR_NRG_MBS_RX "|" D_SENSOR_ADE7953_CS "|" -#ifdef ESP32 D_SENSOR_DALI_RX "|" D_SENSOR_DALI_TX "|" -#endif ; const char kSensorNamesFixed[] PROGMEM =