";
const char HTTP_FORM_DOMOTICZ_RELAY[] PROGMEM =
"| " D_DOMOTICZ_IDX " %d | |
"
"| " D_DOMOTICZ_KEY_IDX " %d | |
";
const char HTTP_FORM_DOMOTICZ_SWITCH[] PROGMEM =
"| " D_DOMOTICZ_SWITCH_IDX " %d | |
";
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;
}
char stemp[40];
WSContentStart_P(PSTR(D_CONFIGURE_DOMOTICZ));
WSContentSendStyle();
WSContentSend_P(HTTP_FIELDSET_LEGEND, PSTR(D_DOMOTICZ_PARAMETERS));
WSContentSend_P(HTTP_FORM_DOMOTICZ);
for (uint32_t i = 0; i < MAX_DOMOTICZ_IDX; i++) {
if (i < TasmotaGlobal.devices_present) {
WSContentSend_P(HTTP_FORM_DOMOTICZ_RELAY,
i +1, i, Settings->domoticz_relay_idx[i],
i +1, i, Settings->domoticz_key_idx[i]);
}
if (PinUsed(GPIO_SWT1, i)) {
WSContentSend_P(HTTP_FORM_DOMOTICZ_SWITCH,
i +1, i, Settings->domoticz_switch_idx[i]);
}
#ifdef USE_SONOFF_IFAN
if (IsModuleIfan() && (1 == i)) { break; }
#endif // USE_SONOFF_IFAN
}
for (uint32_t i = 0; i < DZ_MAX_SENSORS; i++) {
WSContentSend_P(HTTP_FORM_DOMOTICZ_SENSOR,
i +1, GetTextIndexed(stemp, sizeof(stemp), i, kDomoticzSensors), i, Settings->domoticz_sensor_idx[i]);
}
WSContentSend_P(HTTP_FORM_DOMOTICZ_TIMER, Settings->domoticz_update_timer);
WSContentSend_P(PSTR("
"));
WSContentSend_P(HTTP_FORM_END);
WSContentSpaceButton(BUTTON_CONFIGURATION);
WSContentStop();
}
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 = 1; i <= MAX_DOMOTICZ_IDX; i++) {
snprintf_P(cmnd2, sizeof(cmnd2), PSTR(D_PRFX_DOMOTICZ D_CMND_IDX "%d"), i);
snprintf_P(arg_idx, sizeof(arg_idx), PSTR("r%d"), i -1);
cmnd += AddWebCommand(cmnd2, arg_idx, PSTR("0"));
snprintf_P(cmnd2, sizeof(cmnd2), PSTR(D_PRFX_DOMOTICZ D_CMND_KEYIDX "%d"), i);
arg_idx[0] = 'k';
cmnd += AddWebCommand(cmnd2, arg_idx, PSTR("0"));
snprintf_P(cmnd2, sizeof(cmnd2), PSTR(D_PRFX_DOMOTICZ D_CMND_SWITCHIDX "%d"), i);
arg_idx[0] = 's';
cmnd += AddWebCommand(cmnd2, arg_idx, PSTR("0"));
}
for (uint32_t i = 1; i <= DZ_MAX_SENSORS; i++) {
snprintf_P(cmnd2, sizeof(cmnd2), PSTR(D_PRFX_DOMOTICZ D_CMND_SENSORIDX "%d"), i);
snprintf_P(arg_idx, sizeof(arg_idx), PSTR("l%d"), i -1);
cmnd += AddWebCommand(cmnd2, arg_idx, PSTR("0"));
}
ExecuteWebCommand((char*)cmnd.c_str());
}
#endif // USE_WEBSERVER
/*********************************************************************************************\
* Interface
\*********************************************************************************************/
bool Xdrv07(uint32_t function) {
bool result = false;
if (FUNC_PRE_INIT == function) {
DomoticzInit();
}
else if (Domoticz) {
switch (function) {
case FUNC_EVERY_SECOND:
DomoticzMqttUpdate();
break;
case FUNC_MQTT_DATA:
result = DomoticzMqttData();
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 (Settings->domoticz_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 // No USE_UFILESYS
#endif // USE_DOMOTICZ