From c1c0b25c174034adbb96578e228a77ed712fb7e0 Mon Sep 17 00:00:00 2001 From: eeak Date: Fri, 28 Oct 2022 19:47:55 +0300 Subject: [PATCH] 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;