HTTP, MQTT and PSRAM fixes

This commit is contained in:
iranl
2024-11-04 21:32:57 +01:00
parent 7ea04e6366
commit 7632a8cbcc
6 changed files with 86 additions and 25 deletions

37
boards/nuki-esp32dev.json Normal file
View File

@@ -0,0 +1,37 @@
{
"build": {
"arduino":{
"ldscript": "esp32_out.ld"
},
"core": "esp32",
"extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue",
"f_cpu": "240000000L",
"f_flash": "40000000L",
"flash_mode": "dio",
"mcu": "esp32",
"variant": "esp32"
},
"connectivity": [
"wifi",
"bluetooth",
"ethernet",
"can"
],
"debug": {
"openocd_board": "esp-wroom-32.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "Espressif ESP32 Dev Module",
"upload": {
"flash_size": "4MB",
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
},
"url": "https://en.wikipedia.org/wiki/ESP32",
"vendor": "AI Thinker"
}

View File

@@ -69,7 +69,7 @@ monitor_filters =
time
[env:esp32]
board = esp32dev
board = nuki-esp32dev
board_build.cmake_extra_args =
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.defaults.esp32"
extra_scripts =

View File

@@ -461,8 +461,13 @@ bool NukiNetwork::update()
if(_lastMaintenanceTs == 0 || (ts - _lastMaintenanceTs) > 30000)
{
publishULong(_maintenancePathPrefix, mqtt_topic_uptime, ts / 1000 / 60, true);
publishString(_maintenancePathPrefix, mqtt_topic_mqtt_connection_state, "online", true);
int64_t curUptime = ts / 1000 / 60;
if(curUptime > _publishedUpTime)
{
publishULong(_maintenancePathPrefix, mqtt_topic_uptime, curUptime, true);
_publishedUpTime = curUptime;
}
//publishString(_maintenancePathPrefix, mqtt_topic_mqtt_connection_state, "online", true);
if(_lastMaintenanceTs == 0)
{

View File

@@ -155,6 +155,7 @@ private:
bool _connectReplyReceived = false;
bool _firstDisconnected = true;
int64_t _publishedUpTime = 0;
int64_t _nextReconnect = 0;
char _mqttBrokerAddr[101] = {0};
char _mqttUser[31] = {0};

View File

@@ -292,14 +292,31 @@ void WebCfgServer::initialize()
{
return request->requestAuthentication(BASIC_AUTH, "Nuki Hub", "You must log in.");
}
if(_allowRestartToPortal)
String value = "";
if(request->hasParam("CONFIRMTOKEN"))
{
const PsychicWebParameter* p = request->getParam("CONFIRMTOKEN");
if(p->value() != "")
{
value = p->value();
}
}
else
{
return buildConfirmHtml(request, "No confirm code set.", 3, true);
}
if(value != _confirmCode)
{
return request->redirect("/");
}
if(!_allowRestartToPortal)
{
return buildConfirmHtml(request, "Can't reset WiFi when network device is Ethernet", 3, true);
}
esp_err_t res = buildConfirmHtml(request, "Restarting. Connect to ESP access point (\"NukiHub\" with password \"NukiHubESP32\") to reconfigure Wi-Fi.", 0);
waitAndProcess(false, 1000);
_network->reconfigureDevice();
return res;
}
return(ESP_OK);
});
#endif
_psychicServer->on("/unpairlock", HTTP_POST, [&](PsychicRequest *request)
@@ -3363,37 +3380,37 @@ esp_err_t WebCfgServer::buildHtml(PsychicRequest *request)
printParameter(&response, "Nuki Opener PIN status", openerState.c_str(), "", "openerPin");
}
}
printParameter(&response, "Firmware", NUKI_HUB_VERSION, "/info", "firmware");
printParameter(&response, "Firmware", NUKI_HUB_VERSION, "/info?", "firmware");
if(_preferences->getBool(preference_check_updates))
{
printParameter(&response, "Latest Firmware", _preferences->getString(preference_latest_version).c_str(), "/ota", "ota");
printParameter(&response, "Latest Firmware", _preferences->getString(preference_latest_version).c_str(), "/ota?", "ota");
}
response.print("</table><br>");
response.print("<ul id=\"tblnav\">");
buildNavigationMenuEntry(&response, "Network Configuration", "/ntwconfig");
buildNavigationMenuEntry(&response, "MQTT Configuration", "/mqttconfig", _brokerConfigured ? "" : "Please configure MQTT broker");
buildNavigationMenuEntry(&response, "Nuki Configuration", "/nukicfg");
buildNavigationMenuEntry(&response, "Access Level Configuration", "/acclvl");
buildNavigationMenuEntry(&response, "Credentials", "/cred", _pinsConfigured ? "" : "Please configure PIN");
buildNavigationMenuEntry(&response, "GPIO Configuration", "/gpiocfg");
buildNavigationMenuEntry(&response, "Firmware update", "/ota");
buildNavigationMenuEntry(&response, "Import/Export Configuration", "/impexpcfg");
buildNavigationMenuEntry(&response, "Network Configuration", "/ntwconfig?");
buildNavigationMenuEntry(&response, "MQTT Configuration", "/mqttconfig?", _brokerConfigured ? "" : "Please configure MQTT broker");
buildNavigationMenuEntry(&response, "Nuki Configuration", "/nukicfg?");
buildNavigationMenuEntry(&response, "Access Level Configuration", "/acclvl?");
buildNavigationMenuEntry(&response, "Credentials", "/cred?", _pinsConfigured ? "" : "Please configure PIN");
buildNavigationMenuEntry(&response, "GPIO Configuration", "/gpiocfg?");
buildNavigationMenuEntry(&response, "Firmware update", "/ota?");
buildNavigationMenuEntry(&response, "Import/Export Configuration", "/impexpcfg?");
if(_preferences->getInt(preference_network_hardware, 0) == 11)
{
buildNavigationMenuEntry(&response, "Custom Ethernet Configuration", "/custntw");
buildNavigationMenuEntry(&response, "Custom Ethernet Configuration", "/custntw?");
}
if (_preferences->getBool(preference_publish_debug_info, false))
{
buildNavigationMenuEntry(&response, "Advanced Configuration", "/advanced");
buildNavigationMenuEntry(&response, "Advanced Configuration", "/advanced?");
}
if(_preferences->getBool(preference_webserial_enabled, false))
{
buildNavigationMenuEntry(&response, "Open Webserial", "/webserial");
buildNavigationMenuEntry(&response, "Open Webserial", "/webserial?");
}
#ifndef CONFIG_IDF_TARGET_ESP32H2
if(_allowRestartToPortal)
{
buildNavigationMenuEntry(&response, "Configure Wi-Fi", "/wifi");
buildNavigationMenuEntry(&response, "Configure Wi-Fi", "/wifi?");
}
#endif
String rebooturl = "/reboot?CONFIRMTOKEN=" + _confirmCode;
@@ -4002,7 +4019,8 @@ esp_err_t WebCfgServer::buildConfigureWifiHtml(PsychicRequest *request)
buildHtmlHeader(&response);
response.print("<h3>Wi-Fi</h3>");
response.print("Click confirm to remove saved WiFi settings and restart ESP into Wi-Fi configuration mode. After restart, connect to ESP access point to reconfigure Wi-Fi.<br><br>");
buildNavigationButton(&response, "Confirm", "/wifimanager");
String wifiMgrUrl = "/wifimanager?CONFIRMTOKEN=" + _confirmCode;
buildNavigationButton(&response, "Confirm", wifiMgrUrl.c_str());
response.print("</body></html>");
return response.endSend();
}

View File

@@ -63,7 +63,7 @@ monitor_filters =
time
[env:updater_esp32]
board = esp32dev
board = nuki-esp32dev
extra_scripts =
pre:pio_package_pre.py
post:pio_package_post.py