Clean up some comments and little refactor

This commit is contained in:
eeak 2022-10-28 19:47:55 +03:00
parent 1bf69fd310
commit c1c0b25c17
2 changed files with 43 additions and 99 deletions

View File

@ -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

View File

@ -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 =
"<p><form action='" WEB_HANDLE_DALI "' method='get'><button>" D_CONFIGURE_DALI "</button></form></p>";
#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;