mirror of
https://github.com/letscontrolit/ESPEasy.git
synced 2026-09-12 09:36:59 +00:00
334 lines
16 KiB
Arduino
334 lines
16 KiB
Arduino
#include "ESPEasy_plugindefs.h"
|
|
#include "src/Globals/CPlugins.h"
|
|
#include "src/Globals/SecuritySettings.h"
|
|
#include "src/DataStructs/ESPEasy_EventStruct.h"
|
|
|
|
|
|
/*********************************************************************************************\
|
|
* Functions to load and store controller settings on the web page.
|
|
\*********************************************************************************************/
|
|
String getControllerParameterName(protocolIndex_t ProtocolIndex, ControllerSettingsStruct::VarType parameterIdx, bool displayName, bool& isAlternative) {
|
|
String name;
|
|
|
|
if (displayName) {
|
|
EventStruct tmpEvent;
|
|
tmpEvent.idx = parameterIdx;
|
|
|
|
if (CPluginCall(ProtocolIndex, CPlugin::Function::CPLUGIN_GET_PROTOCOL_DISPLAY_NAME, &tmpEvent, name)) {
|
|
// Found an alternative name for it.
|
|
isAlternative = true;
|
|
return name;
|
|
}
|
|
}
|
|
isAlternative = false;
|
|
|
|
switch (parameterIdx) {
|
|
case ControllerSettingsStruct::CONTROLLER_USE_DNS: name = F("Locate Controller"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_HOSTNAME: name = F("Controller Hostname"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_IP: name = F("Controller IP"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_PORT: name = F("Controller Port"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_USER: name = F("Controller User"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_PASS: name = F("Controller Password"); break;
|
|
|
|
case ControllerSettingsStruct::CONTROLLER_MIN_SEND_INTERVAL: name = F("Minimum Send Interval"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_MAX_QUEUE_DEPTH: name = F("Max Queue Depth"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_MAX_RETRIES: name = F("Max Retries"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_FULL_QUEUE_ACTION: name = F("Full Queue Action"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_CHECK_REPLY: name = F("Check Reply"); break;
|
|
|
|
case ControllerSettingsStruct::CONTROLLER_CLIENT_ID: name = F("Controller Client ID"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_UNIQUE_CLIENT_ID_RECONNECT: name = F("Unique Client ID on Reconnect"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_RETAINFLAG: name = F("Publish Retain Flag"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_SUBSCRIBE: name = F("Controller Subscribe"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_PUBLISH: name = F("Controller Publish"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_LWT_TOPIC: name = F("Controller LWT Topic"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_LWT_CONNECT_MESSAGE: name = F("LWT Connect Message"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_LWT_DISCONNECT_MESSAGE: name = F("LWT Disconnect Message"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_SEND_LWT: name = F("Send LWT to broker"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_WILL_RETAIN: name = F("Will Retain"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_CLEAN_SESSION: name = F("Clean Session"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_USE_EXTENDED_CREDENTIALS: name = F("Use Extended Credentials"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_TIMEOUT: name = F("Client Timeout"); break;
|
|
case ControllerSettingsStruct::CONTROLLER_SAMPLE_SET_INITIATOR: name = F("Sample Set Initiator"); break;
|
|
|
|
case ControllerSettingsStruct::CONTROLLER_ENABLED:
|
|
|
|
if (displayName) { name = F("Enabled"); }
|
|
else { name = F("controllerenabled"); }
|
|
break;
|
|
|
|
default:
|
|
name = F("Undefined");
|
|
}
|
|
|
|
if (!displayName) {
|
|
// Change name to lower case and remove spaces to make it an internal name.
|
|
name.toLowerCase();
|
|
name.replace(" ", "");
|
|
}
|
|
return name;
|
|
}
|
|
|
|
String getControllerParameterInternalName(protocolIndex_t ProtocolIndex, ControllerSettingsStruct::VarType parameterIdx) {
|
|
bool isAlternative; // Dummy, not needed for internal name
|
|
bool displayName = false;
|
|
|
|
return getControllerParameterName(ProtocolIndex, parameterIdx, displayName, isAlternative);
|
|
}
|
|
|
|
String getControllerParameterDisplayName(protocolIndex_t ProtocolIndex, ControllerSettingsStruct::VarType parameterIdx, bool& isAlternative) {
|
|
bool displayName = true;
|
|
|
|
return getControllerParameterName(ProtocolIndex, parameterIdx, displayName, isAlternative);
|
|
}
|
|
|
|
void addControllerParameterForm(const ControllerSettingsStruct& ControllerSettings, controllerIndex_t controllerindex, ControllerSettingsStruct::VarType varType) {
|
|
protocolIndex_t ProtocolIndex = getProtocolIndex_from_ControllerIndex(controllerindex);
|
|
if (!validProtocolIndex(ProtocolIndex)) {
|
|
return;
|
|
}
|
|
|
|
bool isAlternativeDisplayName = false;
|
|
String displayName = getControllerParameterDisplayName(ProtocolIndex, varType, isAlternativeDisplayName);
|
|
String internalName = getControllerParameterInternalName(ProtocolIndex, varType);
|
|
|
|
switch (varType) {
|
|
case ControllerSettingsStruct::CONTROLLER_USE_DNS:
|
|
{
|
|
byte choice = ControllerSettings.UseDNS;
|
|
String options[2];
|
|
options[0] = F("Use IP address");
|
|
options[1] = F("Use Hostname");
|
|
addFormSelector(displayName, internalName, 2, options, NULL, NULL, choice, true);
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_HOSTNAME:
|
|
{
|
|
addFormTextBox(displayName, internalName, ControllerSettings.HostName, sizeof(ControllerSettings.HostName) - 1);
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_IP:
|
|
{
|
|
addFormIPBox(displayName, internalName, ControllerSettings.IP);
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_PORT:
|
|
{
|
|
addFormNumericBox(displayName, internalName, ControllerSettings.Port, 1, 65535);
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_USER:
|
|
{
|
|
size_t fieldMaxLength = ControllerSettings.useExtendedCredentials() ? EXT_SECURITY_MAX_USER_LENGTH : sizeof(SecuritySettings.ControllerUser[0]) - 1;
|
|
addFormTextBox(displayName,
|
|
internalName,
|
|
getControllerUser(controllerindex, ControllerSettings),
|
|
fieldMaxLength);
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_PASS:
|
|
{
|
|
size_t fieldMaxLength = ControllerSettings.useExtendedCredentials() ? EXT_SECURITY_MAX_PASS_LENGTH : sizeof(SecuritySettings.ControllerPassword[0]) - 1;
|
|
if (isAlternativeDisplayName) {
|
|
// It is not a regular password, thus use normal text field.
|
|
addFormTextBox(displayName, internalName,
|
|
getControllerPass(controllerindex, ControllerSettings),
|
|
fieldMaxLength);
|
|
} else {
|
|
addFormPasswordBox(displayName, internalName,
|
|
getControllerPass(controllerindex, ControllerSettings),
|
|
fieldMaxLength);
|
|
|
|
}
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_MIN_SEND_INTERVAL:
|
|
{
|
|
addFormNumericBox(displayName, internalName, ControllerSettings.MinimalTimeBetweenMessages, 1, CONTROLLER_DELAY_QUEUE_DELAY_MAX);
|
|
addUnit(F("ms"));
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_MAX_QUEUE_DEPTH:
|
|
{
|
|
addFormNumericBox(displayName, internalName, ControllerSettings.MaxQueueDepth, 1, CONTROLLER_DELAY_QUEUE_DEPTH_MAX);
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_MAX_RETRIES:
|
|
{
|
|
addFormNumericBox(displayName, internalName, ControllerSettings.MaxRetry, 1, CONTROLLER_DELAY_QUEUE_RETRY_MAX);
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_FULL_QUEUE_ACTION:
|
|
{
|
|
String options[2];
|
|
options[0] = F("Ignore New");
|
|
options[1] = F("Delete Oldest");
|
|
addFormSelector(displayName, internalName, 2, options, NULL, NULL, ControllerSettings.DeleteOldest, false);
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_CHECK_REPLY:
|
|
{
|
|
String options[2];
|
|
options[0] = F("Ignore Acknowledgement");
|
|
options[1] = F("Check Acknowledgement");
|
|
addFormSelector(displayName, internalName, 2, options, NULL, NULL, ControllerSettings.MustCheckReply, false);
|
|
break;
|
|
}
|
|
case ControllerSettingsStruct::CONTROLLER_CLIENT_ID:
|
|
addFormTextBox(displayName, internalName, ControllerSettings.ClientID, sizeof(ControllerSettings.ClientID) - 1);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_UNIQUE_CLIENT_ID_RECONNECT:
|
|
addFormCheckBox(displayName, internalName, ControllerSettings.mqtt_uniqueMQTTclientIdReconnect());
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_RETAINFLAG:
|
|
addFormCheckBox(displayName, internalName, ControllerSettings.mqtt_retainFlag());
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_SUBSCRIBE:
|
|
addFormTextBox(displayName, internalName, ControllerSettings.Subscribe, sizeof(ControllerSettings.Subscribe) - 1);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_PUBLISH:
|
|
addFormTextBox(displayName, internalName, ControllerSettings.Publish, sizeof(ControllerSettings.Publish) - 1);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_LWT_TOPIC:
|
|
addFormTextBox(displayName, internalName, ControllerSettings.MQTTLwtTopic, sizeof(ControllerSettings.MQTTLwtTopic) - 1);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_LWT_CONNECT_MESSAGE:
|
|
addFormTextBox(displayName, internalName, ControllerSettings.LWTMessageConnect, sizeof(ControllerSettings.LWTMessageConnect) - 1);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_LWT_DISCONNECT_MESSAGE:
|
|
addFormTextBox(displayName, internalName, ControllerSettings.LWTMessageDisconnect, sizeof(ControllerSettings.LWTMessageDisconnect) - 1);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_SEND_LWT:
|
|
addFormCheckBox(displayName, internalName, ControllerSettings.mqtt_sendLWT());
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_WILL_RETAIN:
|
|
addFormCheckBox(displayName, internalName, ControllerSettings.mqtt_willRetain());
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_CLEAN_SESSION:
|
|
addFormCheckBox(displayName, internalName, ControllerSettings.mqtt_cleanSession());
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_USE_EXTENDED_CREDENTIALS:
|
|
addFormCheckBox(displayName, internalName, ControllerSettings.useExtendedCredentials());
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_TIMEOUT:
|
|
addFormNumericBox(displayName, internalName, ControllerSettings.ClientTimeout, 10, CONTROLLER_CLIENTTIMEOUT_MAX);
|
|
addUnit(F("ms"));
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_SAMPLE_SET_INITIATOR:
|
|
addTaskSelectBox(displayName, internalName, ControllerSettings.SampleSetInitiator);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_ENABLED:
|
|
addFormCheckBox(displayName, internalName, Settings.ControllerEnabled[controllerindex]);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void saveControllerParameterForm(ControllerSettingsStruct& ControllerSettings, controllerIndex_t controllerindex, ControllerSettingsStruct::VarType varType) {
|
|
protocolIndex_t ProtocolIndex = getProtocolIndex_from_ControllerIndex(controllerindex);
|
|
if (!validProtocolIndex(ProtocolIndex)) {
|
|
return;
|
|
}
|
|
String internalName = getControllerParameterInternalName(ProtocolIndex, varType);
|
|
|
|
switch (varType) {
|
|
case ControllerSettingsStruct::CONTROLLER_USE_DNS: ControllerSettings.UseDNS = getFormItemInt(internalName); break;
|
|
case ControllerSettingsStruct::CONTROLLER_HOSTNAME:
|
|
|
|
if (ControllerSettings.UseDNS)
|
|
{
|
|
strncpy_webserver_arg(ControllerSettings.HostName, internalName);
|
|
IPAddress IP;
|
|
resolveHostByName(ControllerSettings.HostName, IP);
|
|
|
|
for (byte x = 0; x < 4; x++) {
|
|
ControllerSettings.IP[x] = IP[x];
|
|
}
|
|
}
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_IP:
|
|
|
|
if (!ControllerSettings.UseDNS)
|
|
{
|
|
String controllerip = web_server.arg(internalName);
|
|
str2ip(controllerip, ControllerSettings.IP);
|
|
}
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_PORT:
|
|
ControllerSettings.Port = getFormItemInt(internalName, ControllerSettings.Port);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_USER:
|
|
setControllerUser(controllerindex, ControllerSettings, web_server.arg(internalName));
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_PASS:
|
|
{
|
|
String password;
|
|
if (getFormPassword(internalName, password)) {
|
|
setControllerPass(controllerindex, ControllerSettings, password);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case ControllerSettingsStruct::CONTROLLER_MIN_SEND_INTERVAL:
|
|
ControllerSettings.MinimalTimeBetweenMessages = getFormItemInt(internalName, ControllerSettings.MinimalTimeBetweenMessages);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_MAX_QUEUE_DEPTH:
|
|
ControllerSettings.MaxQueueDepth = getFormItemInt(internalName, ControllerSettings.MaxQueueDepth);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_MAX_RETRIES:
|
|
ControllerSettings.MaxRetry = getFormItemInt(internalName, ControllerSettings.MaxRetry);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_FULL_QUEUE_ACTION:
|
|
ControllerSettings.DeleteOldest = getFormItemInt(internalName, ControllerSettings.DeleteOldest);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_CHECK_REPLY:
|
|
ControllerSettings.MustCheckReply = getFormItemInt(internalName, ControllerSettings.MustCheckReply);
|
|
break;
|
|
|
|
case ControllerSettingsStruct::CONTROLLER_CLIENT_ID:
|
|
strncpy_webserver_arg(ControllerSettings.ClientID, internalName);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_UNIQUE_CLIENT_ID_RECONNECT:
|
|
ControllerSettings.mqtt_uniqueMQTTclientIdReconnect(isFormItemChecked(internalName));
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_RETAINFLAG:
|
|
ControllerSettings.mqtt_retainFlag(isFormItemChecked(internalName));
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_SUBSCRIBE:
|
|
strncpy_webserver_arg(ControllerSettings.Subscribe, internalName);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_PUBLISH:
|
|
strncpy_webserver_arg(ControllerSettings.Publish, internalName);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_LWT_TOPIC:
|
|
strncpy_webserver_arg(ControllerSettings.MQTTLwtTopic, internalName);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_LWT_CONNECT_MESSAGE:
|
|
strncpy_webserver_arg(ControllerSettings.LWTMessageConnect, internalName);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_LWT_DISCONNECT_MESSAGE:
|
|
strncpy_webserver_arg(ControllerSettings.LWTMessageDisconnect, internalName);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_SEND_LWT:
|
|
ControllerSettings.mqtt_sendLWT(isFormItemChecked(internalName));
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_WILL_RETAIN:
|
|
ControllerSettings.mqtt_willRetain(isFormItemChecked(internalName));
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_CLEAN_SESSION:
|
|
ControllerSettings.mqtt_cleanSession(isFormItemChecked(internalName));
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_USE_EXTENDED_CREDENTIALS:
|
|
ControllerSettings.useExtendedCredentials(isFormItemChecked(internalName));
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_TIMEOUT:
|
|
ControllerSettings.ClientTimeout = getFormItemInt(internalName, ControllerSettings.ClientTimeout);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_SAMPLE_SET_INITIATOR:
|
|
ControllerSettings.SampleSetInitiator = getFormItemInt(internalName, ControllerSettings.SampleSetInitiator);
|
|
break;
|
|
case ControllerSettingsStruct::CONTROLLER_ENABLED:
|
|
Settings.ControllerEnabled[controllerindex] = isFormItemChecked(internalName);
|
|
break;
|
|
}
|
|
}
|