WiFi portal

This commit is contained in:
iranl
2024-10-09 21:33:18 +02:00
parent 220ea7a96d
commit 06e96b5ea7
18 changed files with 999 additions and 497 deletions

View File

@@ -69,7 +69,7 @@ void NukiNetwork::setupDevice()
{
_ipConfiguration = new IPConfiguration(_preferences);
int hardwareDetect = _preferences->getInt(preference_network_hardware, 0);
Log->print(F("Hardware detect : "));
Log->print(F("Hardware detect: "));
Log->println(hardwareDetect);
_firstBootAfterDeviceChange = _preferences->getBool(preference_ntw_reconfigure, false);
@@ -95,7 +95,7 @@ void NukiNetwork::setupDevice()
if(strcmp(WiFi_fallbackDetect, "wifi_fallback") == 0)
{
#ifndef CONFIG_IDF_TARGET_ESP32H2
if(_preferences->getBool(preference_network_wifi_fallback_disabled) && !_firstBootAfterDeviceChange)
if(!_firstBootAfterDeviceChange)
{
Log->println(F("Failed to connect to network. Wi-Fi fallback is disabled, rebooting."));
memset(WiFi_fallbackDetect, 0, sizeof(WiFi_fallbackDetect));
@@ -122,7 +122,7 @@ void NukiNetwork::setupDevice()
_device = NetworkDeviceInstantiator::Create(_networkDeviceType, _hostname, _preferences, _ipConfiguration);
Log->print(F("Network device: "));
Log->print(_device->deviceName());
Log->println(_device->deviceName());
}
void NukiNetwork::reconfigureDevice()
@@ -130,6 +130,16 @@ void NukiNetwork::reconfigureDevice()
_device->reconfigure();
}
void NukiNetwork::scan(bool passive, bool async)
{
_device->scan(passive, async);
}
bool NukiNetwork::isApOpen()
{
return _device->isApOpen();
}
const String NukiNetwork::networkDeviceName() const
{
return _device->deviceName();
@@ -317,7 +327,6 @@ void NukiNetwork::readSettings()
{
_restartOnDisconnect = _preferences->getBool(preference_restart_on_disconnect, false);
_checkUpdates = _preferences->getBool(preference_check_updates, false);
_reconnectNetworkOnMqttDisconnect = _preferences->getBool(preference_recon_netw_on_mqtt_discon, false);
_rssiPublishInterval = _preferences->getInt(preference_rssi_publish_interval, 0) * 1000;
if(_rssiPublishInterval == 0)
@@ -341,38 +350,17 @@ bool NukiNetwork::update()
int64_t ts = (esp_timer_get_time() / 1000);
_device->update();
if(!_mqttEnabled)
if(!_mqttEnabled || _device->isApOpen())
{
return true;
}
if(!_device->isConnected() || (_mqttConnectCounter > 15 && _reconnectNetworkOnMqttDisconnect && !_firstConnect))
if(!_device->isConnected() || (_mqttConnectCounter > 15 && !_firstConnect))
{
_mqttConnectCounter = 0;
if(!_webEnabled) forceEnableWebServer = true;
if(_restartOnDisconnect && (esp_timer_get_time() / 1000) > 60000) restartEsp(RestartReason::RestartOnDisconnectWatchdog);
Log->println(F("Network not connected. Trying reconnect."));
ReconnectStatus reconnectStatus = _device->reconnect(true);
switch(reconnectStatus)
{
case ReconnectStatus::CriticalFailure:
strcpy(WiFi_fallbackDetect, "wifi_fallback");
Log->println("Network device has a critical failure, enable fallback to Wi-Fi and reboot.");
delay(200);
restartEsp(RestartReason::NetworkDeviceCriticalFailure);
break;
case ReconnectStatus::Success:
memset(WiFi_fallbackDetect, 0, sizeof(WiFi_fallbackDetect));
Log->print(F("Reconnect successful: IP: "));
Log->println(_device->localIP());
break;
case ReconnectStatus::Failure:
Log->println(F("Reconnect failed"));
break;
}
}
if(_device->isConnected() && !_mqttClientInitiated && strcmp(_mqttBrokerAddr, "") != 0)