Unique hostname and disable MDNS

This commit is contained in:
iranl
2025-03-31 20:12:47 +02:00
parent 45211ea352
commit 0592c277ea
6 changed files with 47 additions and 29 deletions

View File

@@ -220,7 +220,7 @@ In a browser navigate to the IP address assigned to the ESP32.
#### Network Configuration
- Host name: Set the hostname for the Nuki Hub ESP
- Hostname (needs to be unique, "nukihub" is not allowed): Set the hostname for the Nuki Hub ESP, will also be used as the MQTT client ID. Needs to be unique.
- Network hardware: "Wi-Fi only" by default, set to one of the specified ethernet modules if available, see the "Supported Ethernet devices" and "[Connecting via Ethernet](#connecting-via-ethernet-optional)" section of this README.
- Home Assistant device configuration URL: When using Home Assistant discovery the link to the Nuki Hub Web Configuration will be published to Home Assistant. By default when this setting is left empty this will link to the current IP of the Nuki Hub. When using a reverse proxy to access the Web Configuration you can set a custom URL here.
- RSSI Publish interval: Set to a positive integer to set the amount of seconds between updates to the maintenance/wifiRssi MQTT topic with the current Wi-Fi RSSI, set to -1 to disable, default 60.

View File

@@ -5,7 +5,7 @@
#define NUKI_HUB_VERSION "9.10"
#define NUKI_HUB_VERSION_INT (uint32_t)910
#define NUKI_HUB_BUILD "unknownbuildnr"
#define NUKI_HUB_DATE "2025-03-21"
#define NUKI_HUB_DATE "2025-04-01"
#define GITHUB_LATEST_RELEASE_URL (char*)"https://github.com/technyon/nuki_hub/releases/latest"
#define GITHUB_OTA_MANIFEST_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/manifest.json"

View File

@@ -11,6 +11,7 @@
#endif
#include "networkDevices/EthernetDevice.h"
#include "hal/wdt_hal.h"
#include "esp_mac.h"
NukiNetwork* NukiNetwork::_inst = nullptr;
@@ -216,9 +217,15 @@ void NukiNetwork::initialize()
{
_hostname = _preferences->getString(preference_hostname, "");
if(_hostname == "")
if(_hostname == "" || _hostname == "nukihub")
{
_hostname = "nukihub";
char _nukiHubUidString[20];
uint8_t mac[8];
esp_efuse_mac_get_default(mac);
uint64_t curDevId;
memcpy(&curDevId, &mac, 8);
sprintf(_nukiHubUidString, "%" PRIu64, curDevId);
_hostname = (String)"NH" + _nukiHubUidString;
_preferences->putString(preference_hostname, _hostname);
}
@@ -258,9 +265,15 @@ void NukiNetwork::initialize()
_hostname = _preferences->getString(preference_hostname, "");
if(_hostname == "")
if(_hostname == "" || _hostname == "nukihub")
{
_hostname = "nukihub";
char _nukiHubUidString[20];
uint8_t mac[8];
esp_efuse_mac_get_default(mac);
uint64_t curDevId;
memcpy(&curDevId, &mac, 8);
sprintf(_nukiHubUidString, "%" PRIu64, curDevId);
_hostname = (String)"NH" + _nukiHubUidString;
_preferences->putString(preference_hostname, _hostname);
}
@@ -429,7 +442,7 @@ bool NukiNetwork::update()
_firstDisconnected = true;
}
if(!_device->mqttConnected() && _device->isConnected())
if(!_logIp && _device->isConnected() && !_device->mqttConnected() )
{
bool success = reconnect();
if(!success)
@@ -453,7 +466,7 @@ bool NukiNetwork::update()
delay(2000);
}
if(!_device->mqttConnected() || !_device->isConnected())
if(!_device->isConnected() || !_device->mqttConnected() )
{
if(_networkTimeout > 0 && (ts - _lastConnectedTs > _networkTimeout * 1000) && ts > 60000)
{

View File

@@ -3174,7 +3174,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
}
else if(key == "HOSTNAME")
{
if(_preferences->getString(preference_hostname, "") != value)
if(_preferences->getString(preference_hostname, "") != value && value != "nukihub")
{
_preferences->putString(preference_hostname, value);
Log->print("Setting changed: ");
@@ -5104,7 +5104,7 @@ esp_err_t WebCfgServer::buildNetworkConfigHtml(PsychicRequest *request, PsychicR
response.print("<input type=\"hidden\" name=\"page\" value=\"savecfg\">");
response.print("<h3>Network Configuration</h3>");
response.print("<table>");
printInputField(&response, "HOSTNAME", "Host name", _preferences->getString(preference_hostname).c_str(), 100, "");
printInputField(&response, "HOSTNAME", "Hostname (needs to be unique, \"nukihub\" is not allowed)", _preferences->getString(preference_hostname).c_str(), 100, "");
printDropDown(&response, "NWHW", "Network hardware", String(_preferences->getInt(preference_network_hardware)), getNetworkDetectionOptions(), "");
printInputField(&response, "HASSCUURL", "Home Assistant device configuration URL (empty to use http://LOCALIP; fill when using a reverse proxy for example)", _preferences->getString(preference_mqtt_hass_cu_url).c_str(), 261, "");
#ifndef CONFIG_IDF_TARGET_ESP32H2

View File

@@ -95,6 +95,8 @@ RTC_NOINIT_ATTR bool wifiFallback;
RTC_NOINIT_ATTR bool ethCriticalFailure;
bool coredumpPrinted = true;
bool timeSynced = false;
bool webStarted = false;
bool webSSLStarted = false;
int lastHTTPeventId = -1;
bool doOta = false;
@@ -218,7 +220,7 @@ void listDir(fs::FS &fs, const char *dirname, uint8_t levels) {
{
SPIFFS.remove((String)"/" + file.name());
}
file = root.openNextFile();
}
}
@@ -257,6 +259,20 @@ void networkTask(void *pvParameters)
{
esp_netif_sntp_start();
}
/* MDNS currently disabled for causing issues (9.10 / 2025-04-01)
if(webSSLStarted) {
if (MDNS.begin(preferences->getString(preference_hostname, "nukihub").c_str())) {
MDNS.addService("http", "tcp", 443);
}
}
else if(webStarted) {
if (MDNS.begin(preferences->getString(preference_hostname, "nukihub").c_str())) {
MDNS.addService("http", "tcp", 80);
}
}
*/
reroute = false;
setReroute();
}
@@ -529,6 +545,8 @@ void setupTasks(bool ota)
esp_chip_info_t info;
esp_chip_info(&info);
uint8_t espCores = info.cores;
Log->print("Cores: ");
Log->println(espCores);
if(ota)
{
@@ -673,7 +691,7 @@ void setup()
{
logCoreDump();
}
if (SPIFFS.begin(true))
{
listDir(SPIFFS, "/", 1);
@@ -792,10 +810,7 @@ void setup()
return response->redirect("/");
});
psychicSSLServer->begin();
if (MDNS.begin(preferences->getString(preference_hostname, "nukihub").c_str())) {
MDNS.addService("http", "tcp", 443);
}
webSSLStarted = true;
}
}
}
@@ -812,9 +827,7 @@ void setup()
return response->redirect("/");
});
psychicServer->begin();
if (MDNS.begin(preferences->getString(preference_hostname, "nukihub").c_str())) {
MDNS.addService("http", "tcp", 80);
}
webStarted = true;
#ifdef CONFIG_SOC_SPIRAM_SUPPORTED
}
#endif
@@ -977,9 +990,7 @@ void setup()
return response->redirect("/");
});
psychicSSLServer->begin();
if (MDNS.begin(preferences->getString(preference_hostname, "nukihub").c_str())) {
MDNS.addService("http", "tcp", 443);
}
webSSLStarted = true;
}
}
}
@@ -996,9 +1007,7 @@ void setup()
return response->redirect("/");
});
psychicServer->begin();
if (MDNS.begin(preferences->getString(preference_hostname, "nukihub").c_str())) {
MDNS.addService("http", "tcp", 80);
}
webStarted = true;
#ifdef CONFIG_SOC_SPIRAM_SUPPORTED
}
#endif

View File

@@ -286,10 +286,6 @@ void WifiDevice::onWifiEvent(const WiFiEvent_t &event, const WiFiEventInfo_t &in
break;
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
Log->println("Connected to access point");
if(!_openAP)
{
onConnected();
}
break;
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Log->println("Disconnected from WiFi access point");