Refactor GUI save settings (prt3)

This commit is contained in:
Theo Arends 2021-04-09 12:18:26 +02:00
parent 0650744ac2
commit b8f2c97fbe
2 changed files with 31 additions and 36 deletions

View File

@ -1505,16 +1505,16 @@ uint16_t WebGetGpioArg(uint32_t i) {
void TemplateSaveSettings(void) { void TemplateSaveSettings(void) {
char tmp[TOPSZ]; // WebGetArg NAME and GPIO/BASE/FLAG byte value char tmp[TOPSZ]; // WebGetArg NAME and GPIO/BASE/FLAG byte value
char svalue[300]; // Template command string char command[300]; // Template command string
WebGetArg(PSTR("s1"), tmp, sizeof(tmp)); // NAME WebGetArg(PSTR("s1"), tmp, sizeof(tmp)); // NAME
snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_TEMPLATE " {\"" D_JSON_NAME "\":\"%s\",\"" D_JSON_GPIO "\":["), tmp); snprintf_P(command, sizeof(command), PSTR(D_CMND_TEMPLATE " {\"" D_JSON_NAME "\":\"%s\",\"" D_JSON_GPIO "\":["), tmp);
uint32_t j = 0; uint32_t j = 0;
for (uint32_t i = 0; i < nitems(Settings.user_template.gp.io); i++) { for (uint32_t i = 0; i < nitems(Settings.user_template.gp.io); i++) {
if (6 == i) { j = 9; } if (6 == i) { j = 9; }
if (8 == i) { j = 12; } if (8 == i) { j = 12; }
snprintf_P(svalue, sizeof(svalue), PSTR("%s%s%d"), svalue, (i>0)?",":"", WebGetGpioArg(j)); snprintf_P(command, sizeof(command), PSTR("%s%s%d"), command, (i>0)?",":"", WebGetGpioArg(j));
j++; j++;
} }
@ -1528,8 +1528,8 @@ void TemplateSaveSettings(void) {
WebGetArg(PSTR("g99"), tmp, sizeof(tmp)); // BASE WebGetArg(PSTR("g99"), tmp, sizeof(tmp)); // BASE
uint32_t base = atoi(tmp) +1; uint32_t base = atoi(tmp) +1;
snprintf_P(svalue, sizeof(svalue), PSTR("%s],\"" D_JSON_FLAG "\":%d,\"" D_JSON_BASE "\":%d}"), svalue, flag, base); snprintf_P(command, sizeof(command), PSTR("%s],\"" D_JSON_FLAG "\":%d,\"" D_JSON_BASE "\":%d}"), command, flag, base);
ExecuteWebCommand(svalue); ExecuteWebCommand(command);
} }
/*-------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------*/
@ -1958,7 +1958,7 @@ void OtherSaveSettings(void) {
WebGetArg(PSTR("dn"), tmp1, sizeof(tmp1)); // Device name WebGetArg(PSTR("dn"), tmp1, sizeof(tmp1)); // Device name
char tmp2[100]; char tmp2[100];
WebGetArg(PSTR("wp"), tmp2, sizeof(tmp2)); // Web password WebGetArg(PSTR("wp"), tmp2, sizeof(tmp2)); // Web password
char command[600]; char command[500];
snprintf_P(command, sizeof(command), PSTR(D_CMND_BACKLOG "0 " D_CMND_WEBPASSWORD "2 %s;" D_CMND_SO "3 %d;" D_CMND_DEVICENAME " %s"), snprintf_P(command, sizeof(command), PSTR(D_CMND_BACKLOG "0 " D_CMND_WEBPASSWORD "2 %s;" D_CMND_SO "3 %d;" D_CMND_DEVICENAME " %s"),
(!strlen(tmp2)) ? "\"" : (strlen(tmp2) < 5) ? "" : tmp2, (!strlen(tmp2)) ? "\"" : (strlen(tmp2) < 5) ? "" : tmp2,
Webserver->hasArg(F("b1")), // SetOption3 - Enable MQTT Webserver->hasArg(F("b1")), // SetOption3 - Enable MQTT

View File

@ -602,36 +602,31 @@ void HandleDomoticzConfiguration(void) {
} }
void DomoticzSaveSettings(void) { void DomoticzSaveSettings(void) {
char stemp[20]; char tmp1[CMDSZ];
char ssensor_indices[6 * MAX_DOMOTICZ_SNS_IDX]; WebGetArg(PSTR("ut"), tmp1, sizeof(tmp1));
char tmp[100]; char command[500];
snprintf_P(command, sizeof(command), PSTR(D_CMND_BACKLOG "0 " D_PRFX_DOMOTICZ D_CMND_UPDATETIMER " %s"),
for (uint32_t i = 0; i < MAX_DOMOTICZ_IDX; i++) { (!strlen(tmp1)) ? STR(DOMOTICZ_UPDATE_TIMER) : tmp1);
snprintf_P(stemp, sizeof(stemp), PSTR("r%d"), i); char arg_idx[8];
WebGetArg(stemp, tmp, sizeof(tmp)); char tmp2[CMDSZ];
Settings.domoticz_relay_idx[i] = (!strlen(tmp)) ? 0 : atoi(tmp); char tmp3[CMDSZ];
snprintf_P(stemp, sizeof(stemp), PSTR("k%d"), i); for (uint32_t i = 1; i <= MAX_DOMOTICZ_IDX; i++) {
WebGetArg(stemp, tmp, sizeof(tmp)); snprintf_P(arg_idx, sizeof(arg_idx), PSTR("r%d"), i -1);
Settings.domoticz_key_idx[i] = (!strlen(tmp)) ? 0 : atoi(tmp); WebGetArg(arg_idx, tmp1, sizeof(tmp1));
snprintf_P(stemp, sizeof(stemp), PSTR("s%d"), i); arg_idx[0] = 'k';
WebGetArg(stemp, tmp, sizeof(tmp)); WebGetArg(arg_idx, tmp2, sizeof(tmp2));
Settings.domoticz_switch_idx[i] = (!strlen(tmp)) ? 0 : atoi(tmp); arg_idx[0] = 's';
WebGetArg(arg_idx, tmp3, sizeof(tmp3));
snprintf_P(command, sizeof(command),PSTR("%s;" D_PRFX_DOMOTICZ D_CMND_IDX "%d %s;" D_PRFX_DOMOTICZ D_CMND_KEYIDX "%d %s;" D_PRFX_DOMOTICZ D_CMND_SWITCHIDX "%d %s"),
command, i, (!strlen(tmp1)) ? "0" : tmp1, i, (!strlen(tmp2)) ? "0" : tmp2, i, (!strlen(tmp3)) ? "0" : tmp3);
} }
ssensor_indices[0] = '\0'; for (uint32_t i = 1; i <= DZ_MAX_SENSORS; i++) {
for (uint32_t i = 0; i < DZ_MAX_SENSORS; i++) { snprintf_P(arg_idx, sizeof(arg_idx), PSTR("l%d"), i -1);
snprintf_P(stemp, sizeof(stemp), PSTR("l%d"), i); WebGetArg(arg_idx, tmp1, sizeof(tmp1));
WebGetArg(stemp, tmp, sizeof(tmp)); snprintf_P(command, sizeof(command),PSTR("%s;" D_PRFX_DOMOTICZ D_CMND_SENSORIDX "%d %s"),
Settings.domoticz_sensor_idx[i] = (!strlen(tmp)) ? 0 : atoi(tmp); command, i, (!strlen(tmp1)) ? "0" : tmp1);
snprintf_P(ssensor_indices, sizeof(ssensor_indices), PSTR("%s%s%d"), ssensor_indices, (strlen(ssensor_indices)) ? "," : "", Settings.domoticz_sensor_idx[i]);
} }
WebGetArg(PSTR("ut"), tmp, sizeof(tmp)); ExecuteWebCommand(command); // Note: beware of max number of commands in backlog currently 30 (MAX_BACKLOG)
Settings.domoticz_update_timer = (!strlen(tmp)) ? DOMOTICZ_UPDATE_TIMER : atoi(tmp);
AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_DOMOTICZ D_CMND_IDX " %d,%d,%d,%d, " D_CMND_KEYIDX " %d,%d,%d,%d, " D_CMND_SWITCHIDX " %d,%d,%d,%d, " D_CMND_SENSORIDX " %s, " D_CMND_UPDATETIMER " %d"),
Settings.domoticz_relay_idx[0], Settings.domoticz_relay_idx[1], Settings.domoticz_relay_idx[2], Settings.domoticz_relay_idx[3],
Settings.domoticz_key_idx[0], Settings.domoticz_key_idx[1], Settings.domoticz_key_idx[2], Settings.domoticz_key_idx[3],
Settings.domoticz_switch_idx[0], Settings.domoticz_switch_idx[1], Settings.domoticz_switch_idx[2], Settings.domoticz_switch_idx[3],
ssensor_indices, Settings.domoticz_update_timer);
} }
#endif // USE_WEBSERVER #endif // USE_WEBSERVER