"
" | %s | %s | |
";
const char HTTP_FORM_DOMOTICZ_INDEX[] PROGMEM =
"| " D_DOMOTICZ_IDX " %d | ";
const char HTTP_FORM_DOMOTICZ_INPUT[] PROGMEM =
"";
const char HTTP_FORM_DOMOTICZ_SENSOR[] PROGMEM =
" |
| " D_DOMOTICZ_SENSOR_IDX " %d %s | ";
const char HTTP_FORM_DOMOTICZ_TIMER[] PROGMEM =
" |
| " D_DOMOTICZ_UPDATE_TIMER " (" STR(DOMOTICZ_UPDATE_TIMER) ") | "
" |
";
void HandleDomoticzConfiguration(void) {
if (!HttpCheckPriviledgedAccess()) { return; }
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_CONFIGURE_DOMOTICZ));
if (Webserver->hasArg(F("save"))) {
DomoticzSaveSettings();
HandleConfiguration();
return;
}
WSContentStart_P(PSTR(D_CONFIGURE_DOMOTICZ));
WSContentSendStyle();
WSContentSend_P(HTTP_FIELDSET_LEGEND, PSTR(D_DOMOTICZ_PARAMETERS));
WSContentSend_P(HTTP_FORM_DOMOTICZ,
(Domoticz->switches)? D_DOMOTICZ_SWITCH :"", (Domoticz->keys)? D_DOMOTICZ_KEY :"");
for (uint32_t i = 0; i < Domoticz->devices; i++) {
WSContentSend_P(HTTP_FORM_DOMOTICZ_INDEX, i +1);
if (i < Domoticz->switches) {
WSContentSend_P(HTTP_FORM_DOMOTICZ_INPUT, 's', i, Domoticz->Settings.switch_idx[i]);
}
WSContentSend_P(PSTR(""));
if (i < Domoticz->keys) {
WSContentSend_P(HTTP_FORM_DOMOTICZ_INPUT, 'k', i, Domoticz->Settings.key_idx[i]);
}
WSContentSend_P(PSTR(" | "));
WSContentSend_P(HTTP_FORM_DOMOTICZ_INPUT, 'r', i, Domoticz->Settings.relay_idx[i]);
WSContentSend_P(PSTR(" | "));
#ifdef USE_SONOFF_IFAN
if (IsModuleIfan() && (1 == i)) { break; }
#endif // USE_SONOFF_IFAN
}
char stemp[40];
for (uint32_t i = 0; i < DZ_MAX_SENSORS; i++) {
WSContentSend_P(HTTP_FORM_DOMOTICZ_SENSOR, i +1, GetTextIndexed(stemp, sizeof(stemp), i, kDomoticzSensors));
WSContentSend_P(HTTP_FORM_DOMOTICZ_INPUT, 'l', i, Domoticz->Settings.sensor_idx[i]);
WSContentSend_P(PSTR(""));
}
WSContentSend_P(HTTP_FORM_DOMOTICZ_TIMER, Domoticz->Settings.update_timer);
WSContentSend_P(PSTR("
"));
WSContentSend_P(HTTP_FORM_END);
WSContentSpaceButton(BUTTON_CONFIGURATION);
WSContentStop();
}
String DomoticzAddWebCommand(const char* command, const char* arg, uint32_t value) {
char tmp[8]; // WebGetArg numbers only
WebGetArg(arg, tmp, sizeof(tmp));
if (!strlen(tmp)) { strcpy(tmp, "0"); }
if (atoi(tmp) == value) { return ""; }
return AddWebCommand(command, arg, PSTR("0"));
}
void DomoticzSaveSettings(void) {
String cmnd = F(D_CMND_BACKLOG "0 ");
cmnd += AddWebCommand(PSTR(D_PRFX_DOMOTICZ D_CMND_UPDATETIMER), PSTR("ut"), STR(DOMOTICZ_UPDATE_TIMER));
char arg_idx[5];
char cmnd2[24];
for (uint32_t i = 0; i < Domoticz->devices; i++) {
snprintf_P(cmnd2, sizeof(cmnd2), PSTR(D_PRFX_DOMOTICZ D_CMND_IDX "%d"), i +1);
snprintf_P(arg_idx, sizeof(arg_idx), PSTR("r%d"), i);
cmnd += DomoticzAddWebCommand(cmnd2, arg_idx, Domoticz->Settings.relay_idx[i]);
if (i < Domoticz->keys) {
snprintf_P(cmnd2, sizeof(cmnd2), PSTR(D_PRFX_DOMOTICZ D_CMND_KEYIDX "%d"), i +1);
arg_idx[0] = 'k';
cmnd += DomoticzAddWebCommand(cmnd2, arg_idx, Domoticz->Settings.key_idx[i]);
}
if (i < Domoticz->switches) {
snprintf_P(cmnd2, sizeof(cmnd2), PSTR(D_PRFX_DOMOTICZ D_CMND_SWITCHIDX "%d"), i +1);
arg_idx[0] = 's';
cmnd += DomoticzAddWebCommand(cmnd2, arg_idx, Domoticz->Settings.switch_idx[i]);
}
}
for (uint32_t i = 0; i < DZ_MAX_SENSORS; i++) {
snprintf_P(cmnd2, sizeof(cmnd2), PSTR(D_PRFX_DOMOTICZ D_CMND_SENSORIDX "%d"), i +1);
snprintf_P(arg_idx, sizeof(arg_idx), PSTR("l%d"), i);
cmnd += DomoticzAddWebCommand(cmnd2, arg_idx, Domoticz->Settings.sensor_idx[i]);
}
ExecuteWebCommand((char*)cmnd.c_str());
}
#endif // USE_WEBSERVER
/*********************************************************************************************\
* Interface
\*********************************************************************************************/
bool Xdrv07(uint32_t function) {
bool result = false;
if (FUNC_INIT == function) {
DomoticzInit();
}
else if (Domoticz) {
switch (function) {
case FUNC_EVERY_SECOND:
DomoticzMqttUpdate();
break;
case FUNC_MQTT_DATA:
result = DomoticzMqttData();
break;
case FUNC_RESET_SETTINGS:
DomoticzSettingsLoad(1);
break;
case FUNC_SAVE_SETTINGS:
DomoticzSettingsSave();
break;
#ifdef USE_WEBSERVER
case FUNC_WEB_ADD_BUTTON:
WSContentSend_P(HTTP_BTN_MENU_DOMOTICZ);
break;
case FUNC_WEB_ADD_HANDLER:
WebServer_on(PSTR("/" WEB_HANDLE_DOMOTICZ), HandleDomoticzConfiguration);
break;
#endif // USE_WEBSERVER
case FUNC_MQTT_SUBSCRIBE:
DomoticzMqttSubscribe();
#ifdef USE_SHUTTER
if (Domoticz->Settings.sensor_idx[DZ_SHUTTER]) {
Domoticz->is_shutter = true;
}
#endif // USE_SHUTTER
break;
case FUNC_MQTT_INIT:
Domoticz->update_timer = 2;
break;
case FUNC_SHOW_SENSOR:
// DomoticzSendSensor();
break;
case FUNC_COMMAND:
result = DecodeCommand(kDomoticzCommands, DomoticzCommand);
break;
case FUNC_ACTIVE:
result = true;
break;
}
}
return result;
}
#endif // USE_UFILESYS
#endif // USE_DOMOTICZ