[SYS] Password management improvements (#1787)
* Use one single password for Access point, OTA and WebUI access * Enable to change the password during WM onboarding, with the WebUI, and MQTT command * Remove the default password during the first configuration to connect to the AP * When using the last 8 digits of the MAC as the password, it can now be changed * Remove gateway password sending to client
This commit is contained in:
1 parent
7c48129f37
commit
99de6ef4a6
8 files changed
+129
-41
No files matched your search
@@ -90,7 +90,7 @@ build_flags =
|
|||||||
'-DMQTT_USER="mqttusername"'
|
'-DMQTT_USER="mqttusername"'
|
||||||
'-DMQTT_PASS="mqttpassword"'
|
'-DMQTT_PASS="mqttpassword"'
|
||||||
'-DMQTT_SERVER="mqttserver.local"'
|
'-DMQTT_SERVER="mqttserver.local"'
|
||||||
'-Dota_password="otapassword"'
|
'-Dgw_password="12345678"'
|
||||||
'-DLED_RECEIVE=LED_BUILTIN' ; Comment 1
|
'-DLED_RECEIVE=LED_BUILTIN' ; Comment 1
|
||||||
'-DLED_RECEIVE_ON=LOW' ; Comment 2
|
'-DLED_RECEIVE_ON=LOW' ; Comment 2
|
||||||
'-DRF_RECEIVER_GPIO=13'
|
'-DRF_RECEIVER_GPIO=13'
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Once loaded into your ESP, and if you don't use the manual configuration, you have to set your network parameters with WiFi Manager portal.
|
Once loaded into your ESP, and if you don't use the manual configuration, you have to set your network parameters with WiFi Manager portal.
|
||||||
|
|
||||||
From your smartphone, search for OpenMQTTGateway or OMG_ WiFi network and connect to it with the `WifiManager_password` you have defined (the default password is **"your_password"**), or if you are using a device sold by Theengs or the macro `-DWM_PWD_FROM_MAC=true`, the password will be the last eight digits of the device MAC Address with upper case.
|
From your smartphone, search for OpenMQTTGateway or OMG_ WiFi network and connect to it without password, or if you are using a device sold by Theengs or the macro `-DWM_PWD_FROM_MAC=true`, the password will be the last eight digits of the device MAC Address with upper case.
|
||||||
Example, the password would be `CCDDEEFF` for a MAC Address `AABBCCDDEEFF`.
|
Example, the password would be `CCDDEEFF` for a MAC Address `AABBCCDDEEFF`.
|
||||||
For the Theengs Plug, the MAC Address can be found on the device sticker, and for all the devices, it is printed on the serial monitor logs.
|
For the Theengs Plug, the MAC Address can be found on the device sticker, and for all the devices, it is printed on the serial monitor logs.
|
||||||
|
|
||||||
@@ -35,8 +35,10 @@ If the board is connected by ethernet, the Wifi and password can be empty. If yo
|
|||||||
* Set your MQTT Server password (optional, 64 characters maximum)
|
* Set your MQTT Server password (optional, 64 characters maximum)
|
||||||
* Set your MQTT base topic if you need to change it (you must keep the / at the end) (default: home/, 64 characters maximum)
|
* Set your MQTT base topic if you need to change it (you must keep the / at the end) (default: home/, 64 characters maximum)
|
||||||
* Set your gateway name if you need to change it
|
* Set your gateway name if you need to change it
|
||||||
* Set your Over The Air password `ota_password`, this password is used for local and remote OTA - it is also the password being used for the WebUI login. (default: OTAPASSWORD, 64 characters maximum)
|
* Set your gateway password (default: empty, 8 characters minimum, 64 maximum), this password is used for
|
||||||
|
* Local and remote OTA
|
||||||
|
* WebUI login (login:"admin", password: "")
|
||||||
|
* WiFi Manager Access Point password after initial config
|
||||||
* Click on save
|
* Click on save
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -54,6 +54,12 @@ This command can also be used with other controllers that does not support the i
|
|||||||
If the new connection fails the gateway will fallback to the previous connection.
|
If the new connection fails the gateway will fallback to the previous connection.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
## Change the Gateway password
|
||||||
|
|
||||||
|
The password must be 8 characters minimum.
|
||||||
|
|
||||||
|
`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"gw_pass":"12345678"}'`
|
||||||
|
|
||||||
## Change the MQTT broker credentials
|
## Change the MQTT broker credentials
|
||||||
```
|
```
|
||||||
mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m
|
mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ For ESP32 based environments a WebUI is available to provide basic configuration
|
|||||||
|
|
||||||
# Login Authentication
|
# Login Authentication
|
||||||
|
|
||||||
By default access to the WebUI uses basic authentication to control access to your OpenMQTTGateway Device. The login is `admin` and the password is your ota_password (if unchanged, the default ota_password is `OTAPASSWORD`).
|
By default access to the WebUI uses basic authentication to control access to your OpenMQTTGateway Device. The login is `admin` and the password is your `gateway password` (if unchanged during onboarding there is no password).
|
||||||
|
|
||||||
::: warning
|
::: warning
|
||||||
The communication with the WebUI is not encrypted, which means that your data may be visible on your local network.
|
The communication with the WebUI is not encrypted, which means that your data may be visible on your local network.
|
||||||
|
|||||||
+3
-6
@@ -121,9 +121,6 @@ const byte mac[] = {0xDE, 0xED, 0xBA, 0xFE, 0x54, 0x95}; //W5100 ethernet shield
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define WM_PWD_FROM_MAC true // enable to set the password from the last 8 digits of the ESP MAC address for enhanced security, enabling this option requires to have access to the MAC address, either through a sticker or with serial monitoring
|
//#define WM_PWD_FROM_MAC true // enable to set the password from the last 8 digits of the ESP MAC address for enhanced security, enabling this option requires to have access to the MAC address, either through a sticker or with serial monitoring
|
||||||
#ifndef WifiManager_password
|
|
||||||
# define WifiManager_password "your_password" //this is going to be the WPA2-PSK password for the initial setup access point
|
|
||||||
#endif
|
|
||||||
#ifndef WifiManager_ssid
|
#ifndef WifiManager_ssid
|
||||||
# define WifiManager_ssid Gateway_Name //this is the network name of the initial setup access point
|
# define WifiManager_ssid Gateway_Name //this is the network name of the initial setup access point
|
||||||
#endif
|
#endif
|
||||||
@@ -407,8 +404,8 @@ int lowpowermode = DEFAULT_LOW_POWER_MODE;
|
|||||||
#ifndef ota_hostname
|
#ifndef ota_hostname
|
||||||
# define ota_hostname Gateway_Name
|
# define ota_hostname Gateway_Name
|
||||||
#endif
|
#endif
|
||||||
#ifndef ota_password
|
#ifndef gw_password
|
||||||
# define ota_password "OTAPASSWORD"
|
# define gw_password ""
|
||||||
#endif
|
#endif
|
||||||
#ifndef ota_port
|
#ifndef ota_port
|
||||||
# define ota_port 8266
|
# define ota_port 8266
|
||||||
@@ -733,7 +730,7 @@ char gateway_name[parameters_size + 1] = Gateway_Name;
|
|||||||
|
|
||||||
void connectMQTT();
|
void connectMQTT();
|
||||||
#ifndef ESPWifiManualSetup
|
#ifndef ESPWifiManualSetup
|
||||||
void saveMqttConfig();
|
void saveConfig();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unsigned long uptime();
|
unsigned long uptime();
|
||||||
|
|||||||
+73
-3
@@ -768,18 +768,18 @@ void handleMQ() {
|
|||||||
|
|
||||||
# ifndef ESPWifiManualSetup
|
# ifndef ESPWifiManualSetup
|
||||||
if (update) {
|
if (update) {
|
||||||
Log.warning(F("[WebUI] Save MQTT and Restart" CR));
|
Log.warning(F("[WebUI] Save MQTT and Reconnect" CR));
|
||||||
|
|
||||||
char jsonChar[100];
|
char jsonChar[100];
|
||||||
serializeJson(modules, jsonChar, measureJson(modules) + 1);
|
serializeJson(modules, jsonChar, measureJson(modules) + 1);
|
||||||
char buffer[WEB_TEMPLATE_BUFFER_MAX_SIZE];
|
char buffer[WEB_TEMPLATE_BUFFER_MAX_SIZE];
|
||||||
|
|
||||||
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, header_html, (String(gateway_name) + " - Save MQTT and Restart").c_str());
|
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, header_html, (String(gateway_name) + " - Save MQTT and Reconnect").c_str());
|
||||||
String response = String(buffer);
|
String response = String(buffer);
|
||||||
response += String(restart_script);
|
response += String(restart_script);
|
||||||
response += String(script);
|
response += String(script);
|
||||||
response += String(style);
|
response += String(style);
|
||||||
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, reset_body, jsonChar, gateway_name, "Save MQTT and Restart");
|
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, reset_body, jsonChar, gateway_name, "Save MQTT and Reconnect");
|
||||||
response += String(buffer);
|
response += String(buffer);
|
||||||
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, footer, OMG_VERSION);
|
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, footer, OMG_VERSION);
|
||||||
response += String(buffer);
|
response += String(buffer);
|
||||||
@@ -816,6 +816,75 @@ void handleMQ() {
|
|||||||
server.send(200, "text/html", response);
|
server.send(200, "text/html", response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief /CG - Configure Gateway Page
|
||||||
|
* T: handleCG: uri: /gw, args: 2, method: 1
|
||||||
|
* T: handleCG Arg: 0, gp=1234
|
||||||
|
* T: handleCG Arg: 1, save=
|
||||||
|
*/
|
||||||
|
|
||||||
|
void handleCG() {
|
||||||
|
WEBUI_TRACE_LOG(F("handleCG: uri: %s, args: %d, method: %d" CR), server.uri(), server.args(), server.method());
|
||||||
|
WEBUI_SECURE
|
||||||
|
bool update = false;
|
||||||
|
StaticJsonDocument<JSON_MSG_BUFFER> jsonBuffer;
|
||||||
|
JsonObject WEBtoSYS = jsonBuffer.to<JsonObject>();
|
||||||
|
|
||||||
|
if (server.args()) {
|
||||||
|
for (uint8_t i = 0; i < server.args(); i++) {
|
||||||
|
WEBUI_TRACE_LOG(F("handleCG Arg: %d, %s=%s" CR), i, server.argName(i).c_str(), server.arg(i).c_str());
|
||||||
|
}
|
||||||
|
if (server.hasArg("save") && server.hasArg("gp") && strcmp(ota_pass, server.arg("gp").c_str())) {
|
||||||
|
strncpy(ota_pass, server.arg("gp").c_str(), parameters_size);
|
||||||
|
WEBtoSYS["gw_pass"] = ota_pass;
|
||||||
|
update = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (update) {
|
||||||
|
Log.warning(F("[WebUI] Save Password and Restart" CR));
|
||||||
|
|
||||||
|
char jsonChar[100];
|
||||||
|
serializeJson(modules, jsonChar, measureJson(modules) + 1);
|
||||||
|
char buffer[WEB_TEMPLATE_BUFFER_MAX_SIZE];
|
||||||
|
|
||||||
|
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, header_html, (String(gateway_name) + " - Save Password and Restart").c_str());
|
||||||
|
String response = String(buffer);
|
||||||
|
response += String(restart_script);
|
||||||
|
response += String(script);
|
||||||
|
response += String(style);
|
||||||
|
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, reset_body, jsonChar, gateway_name, "Save Password and Restart");
|
||||||
|
response += String(buffer);
|
||||||
|
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, footer, OMG_VERSION);
|
||||||
|
response += String(buffer);
|
||||||
|
server.send(200, "text/html", response);
|
||||||
|
|
||||||
|
delay(2000); // Wait for web page to be sent before
|
||||||
|
String topic = String(mqtt_topic) + String(gateway_name) + String(subjectMQTTtoSYSset);
|
||||||
|
String output;
|
||||||
|
serializeJson(WEBtoSYS, output);
|
||||||
|
Log.notice(F("[WebUI] MQTTtoSYS %s" CR), output.c_str());
|
||||||
|
MQTTtoSYS((char*)topic.c_str(), WEBtoSYS);
|
||||||
|
} else {
|
||||||
|
Log.warning(F("[WebUI] No changes" CR));
|
||||||
|
}
|
||||||
|
|
||||||
|
char jsonChar[100];
|
||||||
|
serializeJson(modules, jsonChar, measureJson(modules) + 1);
|
||||||
|
|
||||||
|
char buffer[WEB_TEMPLATE_BUFFER_MAX_SIZE];
|
||||||
|
|
||||||
|
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, header_html, (String(gateway_name) + " - Configure Gateway").c_str());
|
||||||
|
String response = String(buffer);
|
||||||
|
response += String(script);
|
||||||
|
response += String(style);
|
||||||
|
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, config_gateway_body, jsonChar, gateway_name, ota_pass);
|
||||||
|
response += String(buffer);
|
||||||
|
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, footer, OMG_VERSION);
|
||||||
|
response += String(buffer);
|
||||||
|
server.send(200, "text/html", response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief /LO - Configure Logging Page
|
* @brief /LO - Configure Logging Page
|
||||||
* T: handleLO: uri: /lo, args: 2, method: 1
|
* T: handleLO: uri: /lo, args: 2, method: 1
|
||||||
@@ -1419,6 +1488,7 @@ void WebUISetup() {
|
|||||||
server.on("/cn", handleCN); // Configuration
|
server.on("/cn", handleCN); // Configuration
|
||||||
server.on("/wi", handleWI); // Configure Wifi
|
server.on("/wi", handleWI); // Configure Wifi
|
||||||
server.on("/mq", handleMQ); // Configure MQTT
|
server.on("/mq", handleMQ); // Configure MQTT
|
||||||
|
server.on("/cg", handleCG); // Configure Gateway"
|
||||||
server.on("/wu", handleWU); // Configure WebUI
|
server.on("/wu", handleWU); // Configure WebUI
|
||||||
# ifdef ZgatewayLORA
|
# ifdef ZgatewayLORA
|
||||||
server.on("/la", handleLA); // Configure LORA
|
server.on("/la", handleLA); // Configure LORA
|
||||||
|
|||||||
@@ -43,11 +43,12 @@
|
|||||||
|
|
||||||
#define configure_1 "<p><form action='wi' method='get'><button>Configure WiFi</button></form></p>"
|
#define configure_1 "<p><form action='wi' method='get'><button>Configure WiFi</button></form></p>"
|
||||||
#define configure_2 "<p><form action='mq' method='get'><button>Configure MQTT</button></form></p>"
|
#define configure_2 "<p><form action='mq' method='get'><button>Configure MQTT</button></form></p>"
|
||||||
#if defined(ZgatewayCloud)
|
/*#if defined(ZgatewayCloud)
|
||||||
# define configure_3 "<p><form action='cl' method='get'><button>Configure Cloud</button></form></p>"
|
# define configure_3 "<p><form action='cl' method='get'><button>Configure Cloud</button></form></p>"
|
||||||
#else
|
#else
|
||||||
# define configure_3
|
# define configure_3
|
||||||
#endif
|
#endif*/
|
||||||
|
#define configure_3 "<p><form action='cg' method='get'><button>Configure Gateway</button></form></p>"
|
||||||
#define configure_4 "<p><form action='wu' method='get'><button>Configure WebUI</button></form></p>"
|
#define configure_4 "<p><form action='wu' method='get'><button>Configure WebUI</button></form></p>"
|
||||||
#define configure_5 "<p><form action='lo' method='get'><button>Configure Logging</button></form></p>"
|
#define configure_5 "<p><form action='lo' method='get'><button>Configure Logging</button></form></p>"
|
||||||
#ifdef ZgatewayLORA
|
#ifdef ZgatewayLORA
|
||||||
@@ -82,7 +83,7 @@ const char config_body[] = body_header "" configure_1 "" configure_2 "" configur
|
|||||||
|
|
||||||
const char reset_body[] = body_header "<div style='text-align:center;'>%s</div><br><div style='text-align:center;'>Device will restart in a few seconds</div><br>" body_footer_main_menu;
|
const char reset_body[] = body_header "<div style='text-align:center;'>%s</div><br><div style='text-align:center;'>Device will restart in a few seconds</div><br>" body_footer_main_menu;
|
||||||
|
|
||||||
const char config_cloud_body[] = body_header "<fieldset class=\"set1\"><legend><span><b> Cloud Configuration </b></span></legend><form method='get' action='cl'><p><label><input id='cl-en' type='checkbox' %s><b>Enable Cloud Connection</b></label></p><br><p><label><input id='cl-lk' type='checkbox' disabled><b>Cloud Account%s Linked</b></label></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset><p><form action='%s' method='get'><input type='hidden' name='macAddress' value='%s'/><input type='hidden' name='redirect_uri' value='%s'/><input type='hidden' name='gateway_name' value='%s'/><input type='hidden' name='uptime' value='%d'/><input type='hidden' name='RT' value='%d'/><button>Link Cloud Account</button></form></p>" body_footer_config_menu;
|
//const char config_cloud_body[] = body_header "<fieldset class=\"set1\"><legend><span><b> Cloud Configuration </b></span></legend><form method='get' action='cl'><p><label><input id='cl-en' type='checkbox' %s><b>Enable Cloud Connection</b></label></p><br><p><label><input id='cl-lk' type='checkbox' disabled><b>Cloud Account%s Linked</b></label></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset><p><form action='%s' method='get'><input type='hidden' name='macAddress' value='%s'/><input type='hidden' name='redirect_uri' value='%s'/><input type='hidden' name='gateway_name' value='%s'/><input type='hidden' name='uptime' value='%d'/><input type='hidden' name='RT' value='%d'/><button>Link Cloud Account</button></form></p>" body_footer_config_menu;
|
||||||
|
|
||||||
const char token_body[] = body_header "<div style='text-align:center;'>Link Cloud Account</div><br><div style='text-align:center;'>Cloud was successfully linked</div><br><div id=but2d style=\"display: block;\"></div><p><form id=but2 style=\"display: block;\" action='cn' method='get'><button>Configuration</button></form></p>";
|
const char token_body[] = body_header "<div style='text-align:center;'>Link Cloud Account</div><br><div style='text-align:center;'>Cloud was successfully linked</div><br><div id=but2d style=\"display: block;\"></div><p><form id=but2 style=\"display: block;\" action='cn' method='get'><button>Configuration</button></form></p>";
|
||||||
|
|
||||||
@@ -98,6 +99,8 @@ const char config_wifi_body[] = body_header "%s<br><div><a href='/wi?scan='><b>S
|
|||||||
|
|
||||||
const char config_mqtt_body[] = body_header "<fieldset class=\"set1\"><legend><span><b>MQTT Parameters</b></span></legend><form method='get' action='mq'><p><b>MQTT Server</b><br><input id='mh' placeholder=" MQTT_SERVER " value='%s'></p><p><b>MQTT Port</b><br><input id='ml' placeholder=" MQTT_PORT " value='%s'></p><p><b>MQTT Username</b><br><input id='mu' placeholder=" MQTT_USER " value='%s'></p><p><label><b>MQTT Password</b><input type='checkbox' onclick='sp(\"mp\")'></label><br><input id='mp' type='password' placeholder=\"Password\" value='%s'></p><p><b>MQTT Secure Connection</b><br><input id='sc' type='checkbox' %s></p><p><b>Gateway Name</b><br><input id='h' placeholder=" Gateway_Name " value=\"%s\"></p><p><b>MQTT Base Topic</b><br><input id='mt' placeholder='' value='%s'></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu;
|
const char config_mqtt_body[] = body_header "<fieldset class=\"set1\"><legend><span><b>MQTT Parameters</b></span></legend><form method='get' action='mq'><p><b>MQTT Server</b><br><input id='mh' placeholder=" MQTT_SERVER " value='%s'></p><p><b>MQTT Port</b><br><input id='ml' placeholder=" MQTT_PORT " value='%s'></p><p><b>MQTT Username</b><br><input id='mu' placeholder=" MQTT_USER " value='%s'></p><p><label><b>MQTT Password</b><input type='checkbox' onclick='sp(\"mp\")'></label><br><input id='mp' type='password' placeholder=\"Password\" value='%s'></p><p><b>MQTT Secure Connection</b><br><input id='sc' type='checkbox' %s></p><p><b>Gateway Name</b><br><input id='h' placeholder=" Gateway_Name " value=\"%s\"></p><p><b>MQTT Base Topic</b><br><input id='mt' placeholder='' value='%s'></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu;
|
||||||
|
|
||||||
|
const char config_gateway_body[] = body_header "<fieldset class=\"set1\"><legend><span><b>Gateway Configuration</b></span></legend><form method='get' action='cg'><p><b>Gateway Password (8 characters min)</b><br><input id='gp' type='password' placeholder=\"********\"></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu;
|
||||||
|
|
||||||
const char config_logging_body[] = body_header "<fieldset class=\"set1\"><legend><span><b>OpenMQTTGateway Logging</b></span></legend><form method='get' action='lo'><p><b>Log Level</b><br><select id='lo'><option %s value='0'>Silent</option><option %s value='1'>Fatal</option><option %s value='2'>Error</option><option %s value='3'>Warning</option><option %s value='4'>Notice</option><option %s value='5'>Trace</option><option %s value='6'>Verbose</option></select></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu;
|
const char config_logging_body[] = body_header "<fieldset class=\"set1\"><legend><span><b>OpenMQTTGateway Logging</b></span></legend><form method='get' action='lo'><p><b>Log Level</b><br><select id='lo'><option %s value='0'>Silent</option><option %s value='1'>Fatal</option><option %s value='2'>Error</option><option %s value='3'>Warning</option><option %s value='4'>Notice</option><option %s value='5'>Trace</option><option %s value='6'>Verbose</option></select></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu;
|
||||||
|
|
||||||
const char config_webui_body[] = body_header "<fieldset class=\"set1\"><legend><span><b>Configure WebUI</b></span></legend><form method='get' action='wu'><p><b>Display Metric</b><br><input id='dm' type='checkbox' %s></p><p><b>Secure WebUI</b><br><input id='sw' type='checkbox' %s></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu;
|
const char config_webui_body[] = body_header "<fieldset class=\"set1\"><legend><span><b>Configure WebUI</b></span></legend><form method='get' action='wu'><p><b>Display Metric</b><br><input id='dm' type='checkbox' %s></p><p><b>Secure WebUI</b><br><input id='sw' type='checkbox' %s></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu;
|
||||||
|
|||||||
+34
-24
@@ -213,7 +213,7 @@ char mqtt_user[parameters_size + 1] = MQTT_USER; // not compulsory only if your
|
|||||||
char mqtt_pass[parameters_size + 1] = MQTT_PASS; // not compulsory only if your broker needs authentication
|
char mqtt_pass[parameters_size + 1] = MQTT_PASS; // not compulsory only if your broker needs authentication
|
||||||
char mqtt_server[parameters_size + 1] = MQTT_SERVER;
|
char mqtt_server[parameters_size + 1] = MQTT_SERVER;
|
||||||
char mqtt_port[6] = MQTT_PORT;
|
char mqtt_port[6] = MQTT_PORT;
|
||||||
char ota_pass[parameters_size + 1] = ota_password;
|
char ota_pass[parameters_size + 1] = gw_password;
|
||||||
#ifdef USE_MAC_AS_GATEWAY_NAME
|
#ifdef USE_MAC_AS_GATEWAY_NAME
|
||||||
# undef WifiManager_ssid
|
# undef WifiManager_ssid
|
||||||
# undef ota_hostname
|
# undef ota_hostname
|
||||||
@@ -221,10 +221,6 @@ char ota_pass[parameters_size + 1] = ota_password;
|
|||||||
char WifiManager_ssid[MAC_NAME_MAX_LEN];
|
char WifiManager_ssid[MAC_NAME_MAX_LEN];
|
||||||
char ota_hostname[MAC_NAME_MAX_LEN];
|
char ota_hostname[MAC_NAME_MAX_LEN];
|
||||||
#endif
|
#endif
|
||||||
#ifdef WM_PWD_FROM_MAC
|
|
||||||
# undef WifiManager_password
|
|
||||||
char WifiManager_password[9];
|
|
||||||
#endif
|
|
||||||
bool connectedOnce = false; //indicate if we have been connected once to MQTT
|
bool connectedOnce = false; //indicate if we have been connected once to MQTT
|
||||||
bool connected = false; //indicate whether we are currently connected. Used to detected re-connection
|
bool connected = false; //indicate whether we are currently connected. Used to detected re-connection
|
||||||
int failure_number_ntwk = 0; // number of failure connecting to network
|
int failure_number_ntwk = 0; // number of failure connecting to network
|
||||||
@@ -1482,7 +1478,7 @@ void checkButton() {
|
|||||||
void checkButton() {}
|
void checkButton() {}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
void saveMqttConfig() {
|
void saveConfig() {
|
||||||
Log.trace(F("saving config" CR));
|
Log.trace(F("saving config" CR));
|
||||||
DynamicJsonDocument json(512 + ota_server_cert.length() + mqtt_cert.length());
|
DynamicJsonDocument json(512 + ota_server_cert.length() + mqtt_cert.length());
|
||||||
json["mqtt_server"] = mqtt_server;
|
json["mqtt_server"] = mqtt_server;
|
||||||
@@ -1561,7 +1557,19 @@ bool loadConfigFromFlash() {
|
|||||||
}
|
}
|
||||||
configFile.close();
|
configFile.close();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Log.notice(F("no config file found defining default values" CR));
|
||||||
|
# ifdef USE_MAC_AS_GATEWAY_NAME
|
||||||
|
String s = WiFi.macAddress();
|
||||||
|
sprintf(gateway_name, "%.2s%.2s%.2s%.2s%.2s%.2s",
|
||||||
|
s.c_str(), s.c_str() + 3, s.c_str() + 6, s.c_str() + 9, s.c_str() + 12, s.c_str() + 15);
|
||||||
|
# endif
|
||||||
|
# ifdef WM_PWD_FROM_MAC // From ESP Mac Address, last 8 digits as the password
|
||||||
|
sprintf(ota_pass, "%.2s%.2s%.2s%.2s",
|
||||||
|
s.c_str() + 6, s.c_str() + 9, s.c_str() + 12, s.c_str() + 15);
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1572,18 +1580,12 @@ void setup_wifimanager(bool reset_settings) {
|
|||||||
if (reset_settings)
|
if (reset_settings)
|
||||||
eraseAndRestart();
|
eraseAndRestart();
|
||||||
|
|
||||||
String s = WiFi.macAddress();
|
|
||||||
# ifdef USE_MAC_AS_GATEWAY_NAME
|
# ifdef USE_MAC_AS_GATEWAY_NAME
|
||||||
sprintf(gateway_name, "%.2s%.2s%.2s%.2s%.2s%.2s",
|
String s = WiFi.macAddress();
|
||||||
s.c_str(), s.c_str() + 3, s.c_str() + 6, s.c_str() + 9, s.c_str() + 12, s.c_str() + 15);
|
|
||||||
snprintf(WifiManager_ssid, MAC_NAME_MAX_LEN, "%s_%.2s%.2s", Gateway_Short_Name, s.c_str(), s.c_str() + 3);
|
snprintf(WifiManager_ssid, MAC_NAME_MAX_LEN, "%s_%.2s%.2s", Gateway_Short_Name, s.c_str(), s.c_str() + 3);
|
||||||
strcpy(ota_hostname, WifiManager_ssid);
|
strcpy(ota_hostname, WifiManager_ssid);
|
||||||
Log.notice(F("OTA Hostname: %s.local" CR), ota_hostname);
|
Log.notice(F("OTA Hostname: %s.local" CR), ota_hostname);
|
||||||
# endif
|
# endif
|
||||||
# ifdef WM_PWD_FROM_MAC // From ESP Mac Address, last 8 digits as the password
|
|
||||||
sprintf(WifiManager_password, "%.2s%.2s%.2s%.2s",
|
|
||||||
s.c_str() + 6, s.c_str() + 9, s.c_str() + 12, s.c_str() + 15);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
wifiManager.setDebugOutput(WM_DEBUG_LEVEL);
|
wifiManager.setDebugOutput(WM_DEBUG_LEVEL);
|
||||||
|
|
||||||
@@ -1599,7 +1601,7 @@ void setup_wifimanager(bool reset_settings) {
|
|||||||
WiFiManagerParameter custom_mqtt_secure("secure", "mqtt secure", "1", 2, mqtt_secure ? "type=\"checkbox\" checked" : "type=\"checkbox\"");
|
WiFiManagerParameter custom_mqtt_secure("secure", "mqtt secure", "1", 2, mqtt_secure ? "type=\"checkbox\" checked" : "type=\"checkbox\"");
|
||||||
WiFiManagerParameter custom_mqtt_cert("cert", "<br/>mqtt broker cert", mqtt_cert.c_str(), 4096);
|
WiFiManagerParameter custom_mqtt_cert("cert", "<br/>mqtt broker cert", mqtt_cert.c_str(), 4096);
|
||||||
WiFiManagerParameter custom_gateway_name("name", "gateway name", gateway_name, parameters_size);
|
WiFiManagerParameter custom_gateway_name("name", "gateway name", gateway_name, parameters_size);
|
||||||
WiFiManagerParameter custom_ota_pass("ota", "ota password", ota_pass, parameters_size);
|
WiFiManagerParameter custom_ota_pass("ota", "gateway password", ota_pass, parameters_size);
|
||||||
# endif
|
# endif
|
||||||
//WiFiManager
|
//WiFiManager
|
||||||
//Local intialization. Once its business is done, there is no need to keep it around
|
//Local intialization. Once its business is done, there is no need to keep it around
|
||||||
@@ -1648,7 +1650,7 @@ void setup_wifimanager(bool reset_settings) {
|
|||||||
{
|
{
|
||||||
# ifdef ESP32
|
# ifdef ESP32
|
||||||
if (lowpowermode < 2) {
|
if (lowpowermode < 2) {
|
||||||
displayPrint("Connect your phone to WIFI AP:", WifiManager_ssid, WifiManager_password);
|
displayPrint("Connect your phone to WIFI AP:", WifiManager_ssid, ota_pass);
|
||||||
} else { // in case of low power mode we put the ESP to sleep again if we didn't get connected (typical in case the wifi is down)
|
} else { // in case of low power mode we put the ESP to sleep again if we didn't get connected (typical in case the wifi is down)
|
||||||
# ifdef ZgatewayBT
|
# ifdef ZgatewayBT
|
||||||
lowPowerESP32();
|
lowPowerESP32();
|
||||||
@@ -1658,12 +1660,12 @@ void setup_wifimanager(bool reset_settings) {
|
|||||||
|
|
||||||
InfoIndicatorON();
|
InfoIndicatorON();
|
||||||
ErrorIndicatorON();
|
ErrorIndicatorON();
|
||||||
Log.notice(F("Connect your phone to WIFI AP: %s with PWD: %s" CR), WifiManager_ssid, WifiManager_password);
|
Log.notice(F("Connect your phone to WIFI AP: %s with PWD: %s" CR), WifiManager_ssid, ota_pass);
|
||||||
|
|
||||||
//fetches ssid and pass and tries to connect
|
//fetches ssid and pass and tries to connect
|
||||||
//if it does not connect it starts an access point with the specified name
|
//if it does not connect it starts an access point with the specified name
|
||||||
//and goes into a blocking loop awaiting configuration
|
//and goes into a blocking loop awaiting configuration
|
||||||
if (!wifiManager.autoConnect(WifiManager_ssid, WifiManager_password)) {
|
if (!wifiManager.autoConnect(WifiManager_ssid, ota_pass)) {
|
||||||
if (!ethConnected) { // If we are using ethernet, we don't want to restart the ESP
|
if (!ethConnected) { // If we are using ethernet, we don't want to restart the ESP
|
||||||
Log.warning(F("failed to connect and hit timeout" CR));
|
Log.warning(F("failed to connect and hit timeout" CR));
|
||||||
delay(3000);
|
delay(3000);
|
||||||
@@ -1723,7 +1725,7 @@ void setup_wifimanager(bool reset_settings) {
|
|||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
//save the custom parameters to FS
|
//save the custom parameters to FS
|
||||||
saveMqttConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# ifdef ESP32_ETHERNET
|
# ifdef ESP32_ETHERNET
|
||||||
@@ -2635,7 +2637,7 @@ void MQTTHttpsFWUpdate(char* topicOri, JsonObject& HttpsFwUpdateData) {
|
|||||||
pub(subjectRLStoMQTT, jsondata);
|
pub(subjectRLStoMQTT, jsondata);
|
||||||
ota_server_cert = ota_cert;
|
ota_server_cert = ota_cert;
|
||||||
# ifndef ESPWifiManualSetup
|
# ifndef ESPWifiManualSetup
|
||||||
saveMqttConfig();
|
saveConfig();
|
||||||
# endif
|
# endif
|
||||||
ESPRestart(6);
|
ESPRestart(6);
|
||||||
break;
|
break;
|
||||||
@@ -2652,6 +2654,7 @@ void MQTTHttpsFWUpdate(char* topicOri, JsonObject& HttpsFwUpdateData) {
|
|||||||
|
|
||||||
void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
||||||
if (cmpToMainTopic(topicOri, subjectMQTTtoSYSset)) {
|
if (cmpToMainTopic(topicOri, subjectMQTTtoSYSset)) {
|
||||||
|
bool restartESP = false;
|
||||||
Log.trace(F("MQTTtoSYS json" CR));
|
Log.trace(F("MQTTtoSYS json" CR));
|
||||||
#if defined(ESP8266) || defined(ESP32)
|
#if defined(ESP8266) || defined(ESP32)
|
||||||
if (SYSdata.containsKey("cmd")) {
|
if (SYSdata.containsKey("cmd")) {
|
||||||
@@ -2698,20 +2701,24 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
|||||||
setESPWifiProtocolTxPower();
|
setESPWifiProtocolTxPower();
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
ESPRestart(7);
|
restartESP = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool disconnectClient = false; // Trigger client.disconnet if a user/password change doesn't
|
bool disconnectClient = false; // Trigger client.disconnet if a user/password change doesn't
|
||||||
|
|
||||||
if (SYSdata.containsKey("mqtt_topic") || SYSdata.containsKey("gateway_name")) {
|
if (SYSdata.containsKey("mqtt_topic") || SYSdata.containsKey("gateway_name") || SYSdata.containsKey("gw_pass")) {
|
||||||
if (SYSdata.containsKey("mqtt_topic")) {
|
if (SYSdata.containsKey("mqtt_topic")) {
|
||||||
strncpy(mqtt_topic, SYSdata["mqtt_topic"], parameters_size);
|
strncpy(mqtt_topic, SYSdata["mqtt_topic"], parameters_size);
|
||||||
}
|
}
|
||||||
if (SYSdata.containsKey("gateway_name")) {
|
if (SYSdata.containsKey("gateway_name")) {
|
||||||
strncpy(gateway_name, SYSdata["gateway_name"], parameters_size);
|
strncpy(gateway_name, SYSdata["gateway_name"], parameters_size);
|
||||||
}
|
}
|
||||||
|
if (SYSdata.containsKey("gw_pass")) {
|
||||||
|
strncpy(ota_pass, SYSdata["gw_pass"], parameters_size);
|
||||||
|
restartESP = true;
|
||||||
|
}
|
||||||
# ifndef ESPWifiManualSetup
|
# ifndef ESPWifiManualSetup
|
||||||
saveMqttConfig();
|
saveConfig();
|
||||||
# endif
|
# endif
|
||||||
disconnectClient = true; // trigger reconnect in loop using the new topic/name
|
disconnectClient = true; // trigger reconnect in loop using the new topic/name
|
||||||
}
|
}
|
||||||
@@ -2788,7 +2795,7 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
# ifndef ESPWifiManualSetup
|
# ifndef ESPWifiManualSetup
|
||||||
saveMqttConfig();
|
saveConfig();
|
||||||
# endif
|
# endif
|
||||||
} else {
|
} else {
|
||||||
if (update_server) {
|
if (update_server) {
|
||||||
@@ -2807,7 +2814,7 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
|||||||
}
|
}
|
||||||
connectMQTT();
|
connectMQTT();
|
||||||
}
|
}
|
||||||
ESPRestart(7);
|
restartESP = true;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@@ -2846,6 +2853,9 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
|||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
if (restartESP) {
|
||||||
|
ESPRestart(7);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user