Change settings without reboot
This commit is contained in:
11
src/Gpio.cpp
11
src/Gpio.cpp
@@ -15,7 +15,6 @@ Gpio::Gpio(Preferences* preferences)
|
||||
: _preferences(preferences)
|
||||
{
|
||||
_inst = this;
|
||||
loadPinConfiguration();
|
||||
_inst->init();
|
||||
}
|
||||
|
||||
@@ -120,6 +119,13 @@ void Gpio::init()
|
||||
_inst->_triggerState.push_back(0);
|
||||
}
|
||||
|
||||
_inst->setPins();
|
||||
}
|
||||
|
||||
void Gpio::setPins()
|
||||
{
|
||||
loadPinConfiguration();
|
||||
|
||||
bool hasInputPin = false;
|
||||
|
||||
if (_inst->_preferences->getBool(preference_cred_bypass_boot_btn_enabled, false))
|
||||
@@ -180,8 +186,9 @@ void Gpio::init()
|
||||
}
|
||||
}
|
||||
|
||||
if(hasInputPin)
|
||||
if(hasInputPin && _first)
|
||||
{
|
||||
_first = false;
|
||||
_inst->timer = timerBegin(1000000);
|
||||
timerAttachInterrupt(_inst->timer, isrOnTimer);
|
||||
timerAlarm(_inst->timer, 100000, true, 0);
|
||||
|
||||
@@ -76,6 +76,7 @@ public:
|
||||
const std::vector<PinRole>& getAllRoles() const;
|
||||
|
||||
void setPinOutput(const uint8_t& pin, const uint8_t& state);
|
||||
void setPins();
|
||||
|
||||
private:
|
||||
void IRAM_ATTR notify(const GpioAction& action, const int& pin);
|
||||
@@ -139,6 +140,8 @@ private:
|
||||
|
||||
std::vector<uint8_t> _triggerState;
|
||||
hw_timer_t* timer = nullptr;
|
||||
|
||||
bool _first = true;
|
||||
|
||||
Preferences* _preferences = nullptr;
|
||||
};
|
||||
|
||||
@@ -11,11 +11,7 @@ HomeAssistantDiscovery::HomeAssistantDiscovery(NetworkDevice* device, Preference
|
||||
_buffer(buffer),
|
||||
_bufferSize(bufferSize)
|
||||
{
|
||||
_discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery, "");
|
||||
_baseTopic = _preferences->getString(preference_mqtt_lock_path);
|
||||
_offEnabled = _preferences->getBool(preference_official_hybrid_enabled, false);
|
||||
_checkUpdates = _preferences->getBool(preference_check_updates, false);
|
||||
_updateFromMQTT = _preferences->getBool(preference_update_from_mqtt, false);
|
||||
_hostname = _preferences->getString(preference_hostname, "");
|
||||
uint64_t savedDevId = _preferences->getULong64(preference_nukihub_id, 0);
|
||||
uint8_t mac[8];
|
||||
@@ -349,7 +345,7 @@ void HomeAssistantDiscovery::publishHASSNukiHubConfig()
|
||||
"",
|
||||
{ { (char*)"en", (char*)"true" }});
|
||||
|
||||
if(_checkUpdates)
|
||||
if(_preferences->getBool(preference_check_updates, false))
|
||||
{
|
||||
// Nuki Hub latest
|
||||
publishHassTopic("sensor",
|
||||
@@ -375,7 +371,7 @@ void HomeAssistantDiscovery::publishHASSNukiHubConfig()
|
||||
_baseTopic.toCharArray(latest_version_topic,_baseTopic.length() + 1);
|
||||
strcat(latest_version_topic, mqtt_topic_info_nuki_hub_latest);
|
||||
|
||||
if(!_updateFromMQTT)
|
||||
if(!_preferences->getBool(preference_update_from_mqtt, false))
|
||||
{
|
||||
publishHassTopic("update",
|
||||
"nuki_hub_update",
|
||||
@@ -667,7 +663,7 @@ void HomeAssistantDiscovery::publishHASSDeviceConfig(char* deviceType, const cha
|
||||
"",
|
||||
{ { (char*)"en", (char*)"true" } });
|
||||
|
||||
if(_offEnabled && strcmp(deviceType, "SmartLock") == 0)
|
||||
if(_preferences->getBool(preference_official_hybrid_enabled, false) && strcmp(deviceType, "SmartLock") == 0)
|
||||
{
|
||||
// Hybrid connected
|
||||
String hybridPath = _baseTopic;
|
||||
@@ -2988,7 +2984,7 @@ void HomeAssistantDiscovery::publishHassTopic(const String& mqttDeviceType,
|
||||
std::vector<std::pair<char*, char*>> additionalEntries
|
||||
)
|
||||
{
|
||||
if (_discoveryTopic != "")
|
||||
if (_preferences->getString(preference_mqtt_hass_discovery, "") != "")
|
||||
{
|
||||
JsonDocument json;
|
||||
json = createHassJson(uidString, uidStringPostfix, displayName, name, baseTopic, stateTopic, deviceType, deviceClass, stateClass, entityCat, commandTopic, additionalEntries);
|
||||
@@ -3000,7 +2996,7 @@ void HomeAssistantDiscovery::publishHassTopic(const String& mqttDeviceType,
|
||||
|
||||
String HomeAssistantDiscovery::createHassTopicPath(const String& mqttDeviceType, const String& mqttDeviceName, const String& uidString)
|
||||
{
|
||||
String path = _discoveryTopic;
|
||||
String path = _preferences->getString(preference_mqtt_hass_discovery, "");
|
||||
path.concat("/");
|
||||
path.concat(mqttDeviceType);
|
||||
path.concat("/");
|
||||
@@ -3014,7 +3010,7 @@ String HomeAssistantDiscovery::createHassTopicPath(const String& mqttDeviceType,
|
||||
|
||||
void HomeAssistantDiscovery::removeHassTopic(const String& mqttDeviceType, const String& mqttDeviceName, const String& uidString)
|
||||
{
|
||||
if (_discoveryTopic != "")
|
||||
if (_preferences->getString(preference_mqtt_hass_discovery, "") != "")
|
||||
{
|
||||
String path = createHassTopicPath(mqttDeviceType, mqttDeviceName, uidString);
|
||||
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, "");
|
||||
|
||||
@@ -59,17 +59,12 @@ private:
|
||||
NetworkDevice* _device = nullptr;
|
||||
Preferences* _preferences = nullptr;
|
||||
|
||||
String _discoveryTopic;
|
||||
String _baseTopic;
|
||||
String _hostname;
|
||||
|
||||
JsonDocument _uidToName;
|
||||
char _nukiHubUidString[20];
|
||||
|
||||
bool _offEnabled = false;
|
||||
bool _checkUpdates = false;
|
||||
bool _updateFromMQTT = false;
|
||||
|
||||
char* _buffer;
|
||||
const size_t _bufferSize;
|
||||
};
|
||||
@@ -41,6 +41,7 @@ void ImportExport::readSettings()
|
||||
_totpEnabled = _totpKey.length() > 0;
|
||||
_bypassKey = _preferences->getString(preference_bypass_secret, "");
|
||||
_bypassEnabled = _bypassKey.length() > 0;
|
||||
_updateTime = _preferences->getBool(preference_update_time, false);
|
||||
}
|
||||
|
||||
bool ImportExport::getDuoEnabled()
|
||||
@@ -117,7 +118,7 @@ void ImportExport::setDuoCheckId(String duoCheckId)
|
||||
|
||||
void ImportExport::saveSessions()
|
||||
{
|
||||
if(_preferences->getBool(preference_update_time, false))
|
||||
if(_updateTime)
|
||||
{
|
||||
if (!SPIFFS.begin(true))
|
||||
{
|
||||
|
||||
@@ -43,6 +43,7 @@ private:
|
||||
bool _duoActiveRequest;
|
||||
bool _duoEnabled = false;
|
||||
bool _bypassGPIO = false;
|
||||
bool _updateTime = false;
|
||||
int _bypassGPIOHigh = -1;
|
||||
int _bypassGPIOLow = -1;
|
||||
int64_t _duoRequestTS = 0;
|
||||
|
||||
@@ -23,7 +23,7 @@ extern const uint8_t x509_crt_imported_bundle_bin_start[] asm("_binary_x509_crt_
|
||||
extern const uint8_t x509_crt_imported_bundle_bin_end[] asm("_binary_x509_crt_bundle_end");
|
||||
|
||||
#ifndef NUKI_HUB_UPDATER
|
||||
NukiNetwork::NukiNetwork(Preferences *preferences, Gpio* gpio, const String& maintenancePathPrefix, char* buffer, size_t bufferSize, ImportExport* importExport)
|
||||
NukiNetwork::NukiNetwork(Preferences *preferences, Gpio* gpio, char* buffer, size_t bufferSize, ImportExport* importExport)
|
||||
: _preferences(preferences),
|
||||
_gpio(gpio),
|
||||
_buffer(buffer),
|
||||
@@ -35,33 +35,6 @@ NukiNetwork::NukiNetwork(Preferences *preferences)
|
||||
#endif
|
||||
{
|
||||
_inst = this;
|
||||
_webEnabled = _preferences->getBool(preference_webserver_enabled, true);
|
||||
|
||||
#ifndef NUKI_HUB_UPDATER
|
||||
memset(_maintenancePathPrefix, 0, sizeof(_maintenancePathPrefix));
|
||||
size_t len = maintenancePathPrefix.length();
|
||||
for(int i=0; i < len; i++)
|
||||
{
|
||||
_maintenancePathPrefix[i] = maintenancePathPrefix.charAt(i);
|
||||
}
|
||||
|
||||
_lockPath = _preferences->getString(preference_mqtt_lock_path);
|
||||
String connectionStateTopic = _lockPath + mqtt_topic_mqtt_connection_state;
|
||||
|
||||
memset(_mqttConnectionStateTopic, 0, sizeof(_mqttConnectionStateTopic));
|
||||
len = connectionStateTopic.length();
|
||||
for(int i=0; i < len; i++)
|
||||
{
|
||||
_mqttConnectionStateTopic[i] = connectionStateTopic.charAt(i);
|
||||
}
|
||||
|
||||
if(_preferences->getString(preference_mqtt_hass_discovery, "") != "" && !_preferences->getBool(preference_mqtt_hass_enabled, false))
|
||||
{
|
||||
_preferences->putBool(preference_mqtt_hass_enabled, true);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
setupDevice();
|
||||
}
|
||||
|
||||
@@ -76,9 +49,9 @@ void NukiNetwork::setupDevice()
|
||||
|
||||
if(hardwareDetect == 0)
|
||||
{
|
||||
#ifndef CONFIG_IDF_TARGET_ESP32H2
|
||||
#ifndef CONFIG_IDF_TARGET_ESP32H2
|
||||
hardwareDetect = 1;
|
||||
#else
|
||||
#else
|
||||
hardwareDetect = 11;
|
||||
_preferences->putInt(preference_network_custom_addr, 1);
|
||||
_preferences->putInt(preference_network_custom_cs, 8);
|
||||
@@ -88,13 +61,13 @@ void NukiNetwork::setupDevice()
|
||||
_preferences->putInt(preference_network_custom_miso, 12);
|
||||
_preferences->putInt(preference_network_custom_mosi, 13);
|
||||
_preferences->putBool(preference_ntw_reconfigure, true);
|
||||
#endif
|
||||
#endif
|
||||
_preferences->putInt(preference_network_hardware, hardwareDetect);
|
||||
}
|
||||
|
||||
if(wifiFallback == true)
|
||||
{
|
||||
#ifndef CONFIG_IDF_TARGET_ESP32H2
|
||||
#ifndef CONFIG_IDF_TARGET_ESP32H2
|
||||
if(!_firstBootAfterDeviceChange)
|
||||
{
|
||||
Log->println("Failed to connect to network. Wi-Fi fallback is disabled, rebooting.");
|
||||
@@ -105,7 +78,7 @@ void NukiNetwork::setupDevice()
|
||||
|
||||
Log->println("Switching to Wi-Fi device as fallback.");
|
||||
_networkDeviceType = NetworkDeviceType::WiFi;
|
||||
#else
|
||||
#else
|
||||
int custEth = _preferences->getInt(preference_network_custom_phy, 0);
|
||||
|
||||
if(custEth<3)
|
||||
@@ -118,7 +91,7 @@ void NukiNetwork::setupDevice()
|
||||
}
|
||||
_preferences->putInt(preference_network_custom_phy, custEth);
|
||||
_preferences->putBool(preference_ntw_reconfigure, true);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -248,6 +221,9 @@ bool NukiNetwork::update()
|
||||
#else
|
||||
void NukiNetwork::initialize()
|
||||
{
|
||||
readSettings();
|
||||
setMQTTConnectionSettings();
|
||||
|
||||
_gpio->addCallback([this](const GpioAction& action, const int& pin)
|
||||
{
|
||||
gpioActionCallback(action, pin);
|
||||
@@ -255,14 +231,6 @@ void NukiNetwork::initialize()
|
||||
|
||||
if(!disableNetwork)
|
||||
{
|
||||
String mqttPath = _preferences->getString(preference_mqtt_lock_path, "");
|
||||
|
||||
size_t len = mqttPath.length();
|
||||
for(int i=0; i < len; i++)
|
||||
{
|
||||
_nukiHubPath[i] = mqttPath.charAt(i);
|
||||
}
|
||||
|
||||
_hostname = _preferences->getString(preference_hostname, "");
|
||||
|
||||
if(_hostname == "")
|
||||
@@ -277,48 +245,12 @@ void NukiNetwork::initialize()
|
||||
_preferences->putString(preference_hostname, _hostname);
|
||||
}
|
||||
|
||||
_mqttPort = _preferences->getInt(preference_mqtt_broker_port, 0);
|
||||
|
||||
if(_mqttPort == 0)
|
||||
{
|
||||
_mqttPort = 1883;
|
||||
_preferences->putInt(preference_mqtt_broker_port, _mqttPort);
|
||||
}
|
||||
|
||||
strcpy(_hostnameArr, _hostname.c_str());
|
||||
_device->initialize();
|
||||
|
||||
Log->print("Host name: ");
|
||||
Log->println(_hostname);
|
||||
|
||||
String brokerAddr = _preferences->getString(preference_mqtt_broker);
|
||||
strcpy(_mqttBrokerAddr, brokerAddr.c_str());
|
||||
|
||||
String mqttUser = _preferences->getString(preference_mqtt_user);
|
||||
if(mqttUser.length() > 0)
|
||||
{
|
||||
size_t len = mqttUser.length();
|
||||
for(int i=0; i < len; i++)
|
||||
{
|
||||
_mqttUser[i] = mqttUser.charAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
String mqttPass = _preferences->getString(preference_mqtt_password);
|
||||
if(mqttPass.length() > 0)
|
||||
{
|
||||
size_t len = mqttPass.length();
|
||||
for(int i=0; i < len; i++)
|
||||
{
|
||||
_mqttPass[i] = mqttPass.charAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
Log->print("MQTT Broker: ");
|
||||
Log->print(_mqttBrokerAddr);
|
||||
Log->print(":");
|
||||
Log->println(_mqttPort);
|
||||
|
||||
_device->mqttSetClientId(_hostnameArr);
|
||||
_device->mqttSetCleanSession(false);
|
||||
_device->mqttSetKeepAlive(60);
|
||||
@@ -359,13 +291,12 @@ void NukiNetwork::initialize()
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
readSettings();
|
||||
}
|
||||
}
|
||||
|
||||
void NukiNetwork::readSettings()
|
||||
{
|
||||
_webEnabled = _preferences->getBool(preference_webserver_enabled, true);
|
||||
_disableNetworkIfNotConnected = _preferences->getBool(preference_disable_network_not_connected, false);
|
||||
_restartOnDisconnect = _preferences->getBool(preference_restart_on_disconnect, false);
|
||||
_checkUpdates = _preferences->getBool(preference_check_updates, false);
|
||||
@@ -388,6 +319,99 @@ void NukiNetwork::readSettings()
|
||||
_publishDebugInfo = _preferences->getBool(preference_publish_debug_info, false);
|
||||
}
|
||||
|
||||
void NukiNetwork::setMQTTConnectionSettings()
|
||||
{
|
||||
String mqttPath = _preferences->getString(preference_mqtt_lock_path, "");
|
||||
memset(_nukiHubPath, 0, sizeof(_nukiHubPath));
|
||||
size_t len = mqttPath.length();
|
||||
for(int i=0; i < len; i++)
|
||||
{
|
||||
_nukiHubPath[i] = mqttPath.charAt(i);
|
||||
}
|
||||
|
||||
String maintenancePathPrefix = _preferences->getString(preference_mqtt_lock_path);
|
||||
memset(_maintenancePathPrefix, 0, sizeof(_maintenancePathPrefix));
|
||||
len = maintenancePathPrefix.length();
|
||||
for(int i=0; i < len; i++)
|
||||
{
|
||||
_maintenancePathPrefix[i] = maintenancePathPrefix.charAt(i);
|
||||
}
|
||||
|
||||
_lockPath = _preferences->getString(preference_mqtt_lock_path);
|
||||
String connectionStateTopic = _lockPath + mqtt_topic_mqtt_connection_state;
|
||||
|
||||
memset(_mqttConnectionStateTopic, 0, sizeof(_mqttConnectionStateTopic));
|
||||
len = connectionStateTopic.length();
|
||||
for(int i=0; i < len; i++)
|
||||
{
|
||||
_mqttConnectionStateTopic[i] = connectionStateTopic.charAt(i);
|
||||
}
|
||||
|
||||
if(_preferences->getString(preference_mqtt_hass_discovery, "") != "" && !_preferences->getBool(preference_mqtt_hass_enabled, false))
|
||||
{
|
||||
_preferences->putBool(preference_mqtt_hass_enabled, true);
|
||||
}
|
||||
|
||||
memset(_mqttBrokerAddr, 0, sizeof(_mqttBrokerAddr));
|
||||
memset(_mqttUser, 0, sizeof(_mqttUser));
|
||||
memset(_mqttPass, 0, sizeof(_mqttPass));
|
||||
|
||||
String brokerAddr = _preferences->getString(preference_mqtt_broker);
|
||||
strcpy(_mqttBrokerAddr, brokerAddr.c_str());
|
||||
|
||||
_mqttPort = _preferences->getInt(preference_mqtt_broker_port, 0);
|
||||
|
||||
if(_mqttPort == 0)
|
||||
{
|
||||
_mqttPort = 1883;
|
||||
_preferences->putInt(preference_mqtt_broker_port, _mqttPort);
|
||||
}
|
||||
|
||||
String mqttUser = _preferences->getString(preference_mqtt_user);
|
||||
if(mqttUser.length() > 0)
|
||||
{
|
||||
len = mqttUser.length();
|
||||
for(int i=0; i < len; i++)
|
||||
{
|
||||
_mqttUser[i] = mqttUser.charAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
String mqttPass = _preferences->getString(preference_mqtt_password);
|
||||
if(mqttPass.length() > 0)
|
||||
{
|
||||
len = mqttPass.length();
|
||||
for(int i=0; i < len; i++)
|
||||
{
|
||||
_mqttPass[i] = mqttPass.charAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
Log->print("MQTT Broker: ");
|
||||
Log->print(_mqttBrokerAddr);
|
||||
Log->print(":");
|
||||
Log->println(_mqttPort);
|
||||
}
|
||||
|
||||
int NukiNetwork::getRestartServices()
|
||||
{
|
||||
int restartServices = _restartServices;
|
||||
_restartServices = 0;
|
||||
return restartServices;
|
||||
}
|
||||
|
||||
void NukiNetwork::setRestartServices(bool reconnect)
|
||||
{
|
||||
if (reconnect)
|
||||
{
|
||||
_restartServices = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
_restartServices = 1;
|
||||
}
|
||||
}
|
||||
|
||||
bool NukiNetwork::update()
|
||||
{
|
||||
wdt_hal_context_t rtc_wdt_ctx = RWDT_HAL_CONTEXT_DEFAULT();
|
||||
@@ -456,7 +480,7 @@ bool NukiNetwork::update()
|
||||
{
|
||||
forceEnableWebServer = false;
|
||||
delay(200);
|
||||
restartEsp(RestartReason::ReconfigureWebServer);
|
||||
setRestartServices(false);
|
||||
}
|
||||
else if(!_webEnabled)
|
||||
{
|
||||
@@ -656,12 +680,20 @@ void NukiNetwork::onMqttDisconnect(const espMqttClientTypes::DisconnectReason &r
|
||||
}
|
||||
}
|
||||
|
||||
bool NukiNetwork::reconnect()
|
||||
bool NukiNetwork::reconnect(bool force)
|
||||
{
|
||||
_mqttConnectionState = 0;
|
||||
|
||||
while (!_device->mqttConnected() && espMillis() > _nextReconnect)
|
||||
while (force || (!_device->mqttConnected() && espMillis() > _nextReconnect))
|
||||
{
|
||||
if (force)
|
||||
{
|
||||
_device->mqttDisconnect(true);
|
||||
setMQTTConnectionSettings();
|
||||
}
|
||||
|
||||
force = false;
|
||||
|
||||
if(strcmp(_mqttBrokerAddr, "") == 0)
|
||||
{
|
||||
Log->println("MQTT Broker not configured, aborting connection attempt.");
|
||||
@@ -1077,7 +1109,7 @@ void NukiNetwork::onMqttDataReceived(const char* topic, byte* payload, const uns
|
||||
{
|
||||
return;
|
||||
}
|
||||
Log->println("Webserver enabled, restarting.");
|
||||
Log->println("Webserver enabled");
|
||||
_preferences->putBool(preference_webserver_enabled, true);
|
||||
}
|
||||
else if (strcmp(data, "0") == 0)
|
||||
@@ -1086,12 +1118,12 @@ void NukiNetwork::onMqttDataReceived(const char* topic, byte* payload, const uns
|
||||
{
|
||||
return;
|
||||
}
|
||||
Log->println("Webserver disabled, restarting.");
|
||||
Log->println("Webserver disabled");
|
||||
_preferences->putBool(preference_webserver_enabled, false);
|
||||
}
|
||||
clearWifiFallback();
|
||||
delay(200);
|
||||
restartEsp(RestartReason::ReconfigureWebServer);
|
||||
setRestartServices(false);
|
||||
}
|
||||
else if(comparePrefixedPath(topic, mqtt_topic_nuki_hub_config_action) && !mqttRecentlyConnected())
|
||||
{
|
||||
@@ -1398,10 +1430,10 @@ void NukiNetwork::removeTopic(const String& mqttPath, const String& mqttTopic)
|
||||
path.concat(mqttTopic);
|
||||
publish(path.c_str(), "", true);
|
||||
|
||||
#ifdef DEBUG_NUKIHUB
|
||||
#ifdef DEBUG_NUKIHUB
|
||||
Log->print("Removing MQTT topic: ");
|
||||
Log->println(path.c_str());
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void NukiNetwork::setupHASS(int type, uint32_t nukiId, char* nukiName, const char* firmwareVersion, const char* hardwareVersion, bool hasDoorSensor, bool hasKeypad)
|
||||
|
||||
@@ -32,6 +32,8 @@ public:
|
||||
bool mqttConnected();
|
||||
bool wifiConnected();
|
||||
void clearWifiFallback();
|
||||
int getRestartServices();
|
||||
void setRestartServices(bool reconnect = false);
|
||||
|
||||
const String networkDeviceName() const;
|
||||
const String networkBSSID() const;
|
||||
@@ -43,13 +45,14 @@ public:
|
||||
#ifdef NUKI_HUB_UPDATER
|
||||
explicit NukiNetwork(Preferences* preferences);
|
||||
#else
|
||||
explicit NukiNetwork(Preferences* preferences, Gpio* gpio, const String& maintenancePathPrefix, char* buffer, size_t bufferSize, ImportExport* importExport);
|
||||
explicit NukiNetwork(Preferences* preferences, Gpio* gpio, char* buffer, size_t bufferSize, ImportExport* importExport);
|
||||
|
||||
void registerMqttReceiver(MqttReceiver* receiver);
|
||||
void disableAutoRestarts(); // disable on OTA start
|
||||
void disableMqtt();
|
||||
String localIP();
|
||||
|
||||
bool reconnect(bool force = false);
|
||||
void subscribe(const char* prefix, const char* path);
|
||||
void initTopic(const char* prefix, const char* path, const char* value);
|
||||
void publishFloat(const char* prefix, const char* topic, const float value, bool retain, const uint8_t precision = 2);
|
||||
@@ -93,8 +96,8 @@ public:
|
||||
#endif
|
||||
private:
|
||||
void setupDevice();
|
||||
bool reconnect();
|
||||
|
||||
void setMQTTConnectionSettings();
|
||||
|
||||
static NukiNetwork* _inst;
|
||||
|
||||
const char* _latestVersion;
|
||||
@@ -132,6 +135,7 @@ private:
|
||||
ImportExport* _importExport;
|
||||
Gpio* _gpio;
|
||||
|
||||
int _restartServices = 0;
|
||||
int _mqttConnectionState = 0;
|
||||
int _mqttConnectCounter = 0;
|
||||
int _mqttPort = 1883;
|
||||
|
||||
@@ -12,23 +12,12 @@
|
||||
#endif
|
||||
|
||||
//CHANGE REQUIRES REBOOT TO TAKE EFFECT
|
||||
//NETWORK RELATED
|
||||
#define preference_ip_dhcp_enabled (char*)"dhcpena"
|
||||
#define preference_ip_address (char*)"ipaddr"
|
||||
#define preference_ip_subnet (char*)"ipsub"
|
||||
#define preference_ip_gateway (char*)"ipgtw"
|
||||
#define preference_ip_dns_server (char*)"dnssrv"
|
||||
#define preference_mqtt_broker (char*)"mqttbroker"
|
||||
#define preference_mqtt_broker_port (char*)"mqttport"
|
||||
#define preference_mqtt_user (char*)"mqttuser"
|
||||
#define preference_mqtt_password (char*)"mqttpass"
|
||||
#define preference_mqtt_log_enabled (char*)"mqttlog"
|
||||
#define preference_webserial_enabled (char*)"weblog"
|
||||
#define preference_lock_enabled (char*)"lockena"
|
||||
#define preference_mqtt_lock_path (char*)"mqttpath"
|
||||
#define preference_opener_enabled (char*)"openerena"
|
||||
#define preference_mqtt_ca (char*)"mqttca"
|
||||
#define preference_mqtt_crt (char*)"mqttcrt"
|
||||
#define preference_mqtt_key (char*)"mqttkey"
|
||||
#define preference_network_hardware (char*)"nwhw"
|
||||
#define preference_hostname (char*)"hostname"
|
||||
#define preference_network_custom_phy (char*)"ntwPHY"
|
||||
@@ -43,61 +32,26 @@
|
||||
#define preference_network_custom_mdio (char*)"ntwMDIO"
|
||||
#define preference_network_custom_mdc (char*)"ntwMDC"
|
||||
#define preference_network_custom_clk (char*)"ntwCLK"
|
||||
#define preference_auth_control_enabled (char*)"authCtrlEna"
|
||||
#define preference_keypad_control_enabled (char*)"kpCntrlEnabled"
|
||||
#define preference_timecontrol_control_enabled (char*)"tcCntrlEnabled"
|
||||
#define preference_ota_main_url (char*)"otaMainUrl"
|
||||
#define preference_ota_updater_url (char*)"otaUpdUrl"
|
||||
#define preference_task_size_network (char*)"tsksznetw"
|
||||
#define preference_task_size_nuki (char*)"tsksznuki"
|
||||
#define preference_buffer_size (char*)"buffsize"
|
||||
#define preference_cred_user (char*)"crdusr"
|
||||
#define preference_cred_password (char*)"crdpass"
|
||||
#define preference_gpio_configuration (char*)"gpiocfg"
|
||||
#define preference_mqtt_hass_enabled (char*)"hassena"
|
||||
#define preference_mqtt_hass_discovery (char*)"hassdiscovery"
|
||||
#define preference_hass_device_discovery (char*)"hassdevdisc"
|
||||
#define preference_webserver_enabled (char*)"websrvena"
|
||||
#define preference_update_from_mqtt (char*)"updMqtt"
|
||||
#define preference_disable_non_json (char*)"disnonjson"
|
||||
#define preference_official_hybrid_enabled (char*)"offHybrid"
|
||||
#define preference_wifi_ssid (char*)"wifiSSID"
|
||||
#define preference_wifi_pass (char*)"wifiPass"
|
||||
#define preference_disable_network_not_connected (char*)"disNtwNoCon"
|
||||
#define preference_debug_connect (char*)"dbgConnect"
|
||||
#define preference_debug_communication (char*)"dbgCommu"
|
||||
#define preference_debug_readable_data (char*)"dbgReadData"
|
||||
#define preference_debug_hex_data (char*)"dbgHexData"
|
||||
#define preference_debug_command (char*)"dbgCommand"
|
||||
#define preference_connect_mode (char*)"nukiConnMode"
|
||||
#define preference_http_auth_type (char*)"httpdAuthType"
|
||||
#define preference_update_time (char*)"updateTime"
|
||||
#define preference_time_server (char*)"timeServer"
|
||||
|
||||
//MQTT RELATED
|
||||
#define preference_mqtt_ssl_enabled (char*)"mqttSSLena"
|
||||
#define preference_lock_gemini_pin (char*)"geminiPin"
|
||||
#define preference_lock_gemini_enabled (char*)"geminiena"
|
||||
#define preference_cred_duo_enabled (char*)"duoena"
|
||||
#define preference_cred_duo_host (char*)"duoHost"
|
||||
#define preference_cred_duo_ikey (char*)"duoIkey"
|
||||
#define preference_cred_duo_skey (char*)"duoSkey"
|
||||
#define preference_cred_duo_user (char*)"duoUser"
|
||||
#define preference_https_fqdn (char*)"httpsFQDN"
|
||||
#define preference_bypass_proxy (char*)"credBypass"
|
||||
#define preference_cred_session_lifetime (char*)"credLf"
|
||||
#define preference_cred_session_lifetime_remember (char*)"credLfRmbr"
|
||||
#define preference_cred_session_lifetime_duo (char*)"credLfDuo"
|
||||
#define preference_cred_session_lifetime_duo_remember (char*)"credLfDuoRmbr"
|
||||
#define preference_cred_session_lifetime_totp (char*)"credLfTotp"
|
||||
#define preference_cred_session_lifetime_totp_remember (char*)"credLfTotpRmbr"
|
||||
#define preference_cred_duo_approval (char*)"duoApprove"
|
||||
#define preference_cred_bypass_boot_btn_enabled (char*)"bypassBtBtn"
|
||||
#define preference_cred_bypass_gpio_high (char*)"bypassHigh"
|
||||
#define preference_cred_bypass_gpio_low (char*)"bypassLow"
|
||||
#define preference_publish_config (char*)"nhPubConfig"
|
||||
#define preference_config_from_mqtt (char*)"nhCntrlEnabled"
|
||||
#define preference_totp_secret (char*)"totpsecret"
|
||||
#define preference_bypass_secret (char*)"bypassecret"
|
||||
#define preference_admin_secret (char*)"adminsecret"
|
||||
#define preference_mqtt_ca (char*)"mqttca"
|
||||
#define preference_mqtt_crt (char*)"mqttcrt"
|
||||
#define preference_mqtt_key (char*)"mqttkey"
|
||||
#define preference_mqtt_log_enabled (char*)"mqttlog"
|
||||
#define preference_gpio_configuration (char*)"gpiocfg"
|
||||
|
||||
//TASKS RELATED
|
||||
#define preference_task_size_network (char*)"tsksznetw"
|
||||
#define preference_task_size_nuki (char*)"tsksznuki"
|
||||
|
||||
//OTHER
|
||||
#define preference_ota_main_url (char*)"otaMainUrl"
|
||||
#define preference_ota_updater_url (char*)"otaUpdUrl"
|
||||
#define preference_buffer_size (char*)"buffsize"
|
||||
|
||||
// CHANGE DOES NOT REQUIRE REBOOT TO TAKE EFFECT
|
||||
#define preference_find_best_rssi (char*)"nwbestrssi"
|
||||
@@ -149,7 +103,65 @@
|
||||
#define preference_lock_force_keypad (char*)"lckForceKp"
|
||||
#define preference_opener_force_id (char*)"opForceId"
|
||||
#define preference_opener_force_keypad (char*)"opForceKp"
|
||||
#define preference_admin_secret (char*)"adminsecret"
|
||||
|
||||
//TO BE EFFECTUATED IN WEBSERVER AND OTHER USES
|
||||
//REQUIRE SERVICES RELOAD
|
||||
#define preference_lock_enabled (char*)"lockena"
|
||||
#define preference_opener_enabled (char*)"openerena"
|
||||
#define preference_debug_connect (char*)"dbgConnect"
|
||||
#define preference_debug_communication (char*)"dbgCommu"
|
||||
#define preference_debug_readable_data (char*)"dbgReadData"
|
||||
#define preference_debug_hex_data (char*)"dbgHexData"
|
||||
#define preference_debug_command (char*)"dbgCommand"
|
||||
#define preference_update_time (char*)"updateTime"
|
||||
#define preference_cred_user (char*)"crdusr"
|
||||
#define preference_cred_password (char*)"crdpass"
|
||||
#define preference_lock_gemini_pin (char*)"geminiPin"
|
||||
#define preference_lock_gemini_enabled (char*)"geminiena"
|
||||
#define preference_connect_mode (char*)"nukiConnMode"
|
||||
#define preference_https_fqdn (char*)"httpsFQDN"
|
||||
#define preference_bypass_proxy (char*)"credBypass"
|
||||
#define preference_http_auth_type (char*)"httpdAuthType"
|
||||
#define preference_cred_duo_enabled (char*)"duoena"
|
||||
#define preference_cred_duo_host (char*)"duoHost"
|
||||
#define preference_cred_duo_ikey (char*)"duoIkey"
|
||||
#define preference_cred_duo_skey (char*)"duoSkey"
|
||||
#define preference_cred_duo_user (char*)"duoUser"
|
||||
#define preference_cred_session_lifetime (char*)"credLf"
|
||||
#define preference_cred_session_lifetime_remember (char*)"credLfRmbr"
|
||||
#define preference_cred_session_lifetime_duo (char*)"credLfDuo"
|
||||
#define preference_cred_session_lifetime_duo_remember (char*)"credLfDuoRmbr"
|
||||
#define preference_cred_session_lifetime_totp (char*)"credLfTotp"
|
||||
#define preference_cred_session_lifetime_totp_remember (char*)"credLfTotpRmbr"
|
||||
#define preference_cred_duo_approval (char*)"duoApprove"
|
||||
#define preference_cred_bypass_boot_btn_enabled (char*)"bypassBtBtn"
|
||||
#define preference_cred_bypass_gpio_high (char*)"bypassHigh"
|
||||
#define preference_cred_bypass_gpio_low (char*)"bypassLow"
|
||||
#define preference_disable_network_not_connected (char*)"disNtwNoCon"
|
||||
#define preference_webserver_enabled (char*)"websrvena"
|
||||
#define preference_hass_device_discovery (char*)"hassdevdisc"
|
||||
#define preference_webserial_enabled (char*)"weblog"
|
||||
#define preference_config_from_mqtt (char*)"nhCntrlEnabled"
|
||||
#define preference_publish_config (char*)"nhPubConfig"
|
||||
#define preference_update_from_mqtt (char*)"updMqtt"
|
||||
#define preference_mqtt_broker (char*)"mqttbroker"
|
||||
#define preference_mqtt_broker_port (char*)"mqttport"
|
||||
#define preference_mqtt_user (char*)"mqttuser"
|
||||
#define preference_mqtt_password (char*)"mqttpass"
|
||||
#define preference_mqtt_lock_path (char*)"mqttpath"
|
||||
#define preference_mqtt_hass_enabled (char*)"hassena"
|
||||
#define preference_mqtt_hass_discovery (char*)"hassdiscovery"
|
||||
#define preference_disable_non_json (char*)"disnonjson"
|
||||
#define preference_official_hybrid_enabled (char*)"offHybrid"
|
||||
#define preference_auth_control_enabled (char*)"authCtrlEna"
|
||||
#define preference_keypad_control_enabled (char*)"kpCntrlEnabled"
|
||||
#define preference_timecontrol_control_enabled (char*)"tcCntrlEnabled"
|
||||
#define preference_hybrid_reboot_on_disconnect (char*)"hybridRbtLck"
|
||||
#define preference_bypass_secret (char*)"bypassecret"
|
||||
#define preference_totp_secret (char*)"totpsecret"
|
||||
|
||||
//END TO BE EFFECTUATED IN WEBSERVER AND OTHER USES
|
||||
|
||||
//NOT USER CHANGABLE
|
||||
#define preference_mfa_reconfigure (char*)"mfaRECONF"
|
||||
|
||||
@@ -669,6 +669,34 @@ void WebCfgServer::initialize()
|
||||
return res;
|
||||
}
|
||||
#ifndef NUKI_HUB_UPDATER
|
||||
else if (value == "restartservices")
|
||||
{
|
||||
String value2 = "";
|
||||
if(request->hasParam("CONFIRMTOKEN"))
|
||||
{
|
||||
const PsychicWebParameter* p = request->getParam("CONFIRMTOKEN");
|
||||
if(p->value() != "")
|
||||
{
|
||||
value2 = p->value();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return buildConfirmHtml(request, resp, "No confirm code set.", 3, true);
|
||||
}
|
||||
|
||||
if(value2 != _confirmCode)
|
||||
{
|
||||
resp->setCode(302);
|
||||
resp->addHeader("Cache-Control", "no-cache");
|
||||
return resp->redirect("/");
|
||||
}
|
||||
esp_err_t res = buildConfirmHtml(request, resp, "Restarting services...", 2, true);
|
||||
_network->setRestartServices(_restartServicesRequired);
|
||||
_restartServicesRequired = 0;
|
||||
waitAndProcess(true, 1000);
|
||||
return res;
|
||||
}
|
||||
else if (value == "info")
|
||||
{
|
||||
return buildInfoHtml(request, resp);
|
||||
@@ -778,7 +806,7 @@ void WebCfgServer::initialize()
|
||||
else if (value == "selfsignhttps")
|
||||
{
|
||||
return buildHttpSSLConfigHtml(request, resp, 3);
|
||||
}
|
||||
}
|
||||
else if (value == "nukicfg")
|
||||
{
|
||||
return buildNukiConfigHtml(request, resp);
|
||||
@@ -2463,6 +2491,8 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
bool networkReconfigure = false;
|
||||
bool clearSession = false;
|
||||
bool newMFA = false;
|
||||
bool restartServicesNoReconnect = false;
|
||||
bool restartServicesReconnect = false;
|
||||
unsigned char currentBleAddress[6];
|
||||
unsigned char authorizationId[4] = {0x00};
|
||||
unsigned char secretKeyK[32] = {0x00};
|
||||
@@ -2506,7 +2536,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_mqtt_broker, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "MQTTPORT")
|
||||
@@ -2516,7 +2546,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_mqtt_broker_port, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "MQTTUSER")
|
||||
@@ -2532,7 +2562,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_mqtt_user, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2545,7 +2575,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_mqtt_password, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2556,7 +2586,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_mqtt_lock_path, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "MQTTCA")
|
||||
@@ -2700,7 +2730,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
}
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2736,7 +2766,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
}
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2745,7 +2775,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
createSSLCertificate();
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
configChanged = true;
|
||||
}
|
||||
#endif
|
||||
else if(key == "UPTIME")
|
||||
@@ -2755,7 +2785,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_update_time, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "TIMESRV")
|
||||
@@ -2925,7 +2955,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_rssi_publish_interval, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "HTTPSFQDN")
|
||||
@@ -2935,7 +2964,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_https_fqdn, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DUOHOST")
|
||||
@@ -2947,7 +2976,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_cred_duo_host, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
newMFA = true;
|
||||
}
|
||||
@@ -2962,7 +2991,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_cred_duo_ikey, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
newMFA = true;
|
||||
}
|
||||
@@ -2977,7 +3006,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_cred_duo_skey, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
newMFA = true;
|
||||
}
|
||||
@@ -2992,7 +3021,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_cred_duo_user, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
newMFA = true;
|
||||
}
|
||||
@@ -3008,7 +3037,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
}
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
newMFA = true;
|
||||
}
|
||||
@@ -3020,7 +3049,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_cred_bypass_boot_btn_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DUOBYPASSHIGH")
|
||||
@@ -3030,7 +3059,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_cred_bypass_gpio_high, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DUOBYPASSLOW")
|
||||
@@ -3040,7 +3069,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_cred_bypass_gpio_low, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DUOAPPROVAL")
|
||||
@@ -3050,7 +3079,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_cred_duo_approval, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "CREDLFTM")
|
||||
@@ -3060,7 +3089,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_cred_session_lifetime, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -3071,7 +3100,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_cred_session_lifetime_remember, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -3082,7 +3111,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_cred_session_lifetime_duo, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -3093,7 +3122,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_cred_session_lifetime_duo_remember, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -3104,7 +3133,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_cred_session_lifetime_totp, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -3115,7 +3144,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_cred_session_lifetime_totp_remember, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -3127,7 +3156,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_hass_device_discovery, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "ENHADISC")
|
||||
@@ -3138,7 +3167,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_mqtt_hass_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "HASSDISCOVERY")
|
||||
@@ -3149,7 +3178,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_mqtt_hass_discovery, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "OPENERCONT")
|
||||
@@ -3159,7 +3188,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_opener_continuous_mode, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "HASSCUURL")
|
||||
@@ -3169,7 +3197,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_mqtt_hass_cu_url, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "HOSTNAME")
|
||||
@@ -3189,7 +3216,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_network_timeout, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "FINDBESTRSSI")
|
||||
@@ -3199,7 +3225,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_find_best_rssi, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "RSTDISC")
|
||||
@@ -3209,7 +3234,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_restart_on_disconnect, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "MQTTLOG")
|
||||
@@ -3239,7 +3263,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_webserial_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "CHECKUPDATE")
|
||||
@@ -3249,7 +3273,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_check_updates, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "UPDATEMQTT")
|
||||
@@ -3259,7 +3283,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_update_from_mqtt, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "OFFHYBRID")
|
||||
@@ -3273,7 +3297,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
}
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "HYBRIDACT")
|
||||
@@ -3287,7 +3311,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
}
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "HYBRIDTIMER")
|
||||
@@ -3297,7 +3320,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_query_interval_hybrid_lockstate, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "HYBRIDRETRY")
|
||||
@@ -3307,7 +3329,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_official_hybrid_retry, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "HYBRIDREBOOT")
|
||||
@@ -3317,7 +3338,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_hybrid_reboot_on_disconnect, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DISNONJSON")
|
||||
@@ -3327,7 +3348,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_disable_non_json, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DHCPENA")
|
||||
@@ -3387,7 +3408,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_query_interval_lockstate, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "CFGINT")
|
||||
@@ -3397,7 +3417,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_query_interval_configuration, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "BATINT")
|
||||
@@ -3407,7 +3426,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_query_interval_battery, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "KPINT")
|
||||
@@ -3417,7 +3435,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_query_interval_keypad, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "NRTRY")
|
||||
@@ -3427,7 +3444,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_command_nr_of_retries, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "TRYDLY")
|
||||
@@ -3437,7 +3453,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_command_retry_delay, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "TXPWR")
|
||||
@@ -3453,7 +3468,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_ble_tx_power, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3464,7 +3478,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_restart_ble_beacon_lost, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "TSKNTWK")
|
||||
@@ -3502,7 +3515,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_authlog_max_entries, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3515,7 +3527,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_keypad_max_entries, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3528,7 +3539,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_timecontrol_max_entries, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3541,7 +3551,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_auth_max_entries, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3565,7 +3574,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_enable_bootloop_reset, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DISNTWNOCON")
|
||||
@@ -3575,7 +3583,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_disable_network_not_connected, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "OTAUPD")
|
||||
@@ -3605,7 +3613,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_show_secrets, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DBGCONN")
|
||||
@@ -3615,7 +3622,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_debug_connect, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DBGCOMMU")
|
||||
@@ -3625,7 +3632,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_debug_communication, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DBGHEAP")
|
||||
@@ -3635,7 +3642,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_publish_debug_info, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DBGREAD")
|
||||
@@ -3645,7 +3652,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_debug_readable_data, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DBGHEX")
|
||||
@@ -3655,7 +3662,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_debug_hex_data, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "DBGCOMM")
|
||||
@@ -3665,7 +3672,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_debug_command, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "LCKFORCEID")
|
||||
@@ -3724,7 +3731,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_conf_info_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "CONFNHPUB")
|
||||
@@ -3738,7 +3744,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_publish_config, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "CONFNHCTRL")
|
||||
@@ -3752,7 +3758,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_config_from_mqtt, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "KPPUB")
|
||||
@@ -3762,7 +3768,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_keypad_info_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "KPCODE")
|
||||
@@ -3772,7 +3777,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_keypad_publish_code, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "KPCHECK")
|
||||
@@ -3782,7 +3786,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_keypad_check_code_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "KPENA")
|
||||
@@ -3792,7 +3795,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_keypad_control_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "TCPUB")
|
||||
@@ -3802,7 +3805,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_timecontrol_info_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "AUTHPUB")
|
||||
@@ -3812,7 +3814,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_auth_info_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "KPPER")
|
||||
@@ -3822,7 +3823,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_keypad_topic_per_entry, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "TCPER")
|
||||
@@ -3832,7 +3832,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_timecontrol_topic_per_entry, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "TCENA")
|
||||
@@ -3842,7 +3841,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_timecontrol_control_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "AUTHPER")
|
||||
@@ -3852,7 +3851,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_auth_topic_per_entry, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "AUTHENA")
|
||||
@@ -3862,7 +3860,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_auth_control_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "PUBAUTH")
|
||||
@@ -3872,7 +3870,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_publish_authdata, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "CREDDIGEST")
|
||||
@@ -3882,7 +3879,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_http_auth_type, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -3895,7 +3892,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_bypass_proxy, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -4279,7 +4276,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_register_as_app, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "REGAPPOPN")
|
||||
@@ -4289,7 +4285,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_register_opener_as_app, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
//configChanged = true;
|
||||
}
|
||||
}
|
||||
else if(key == "LOCKENA")
|
||||
@@ -4299,7 +4294,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_lock_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "GEMINIENA")
|
||||
@@ -4316,7 +4311,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
}
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "OPENA")
|
||||
@@ -4326,7 +4321,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_opener_enabled, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "CONNMODE")
|
||||
@@ -4336,7 +4331,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBool(preference_connect_mode, (value == "1"));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else if(key == "CREDUSER")
|
||||
@@ -4352,7 +4347,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_cred_user, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -4374,7 +4369,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_totp_secret, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
newMFA = true;
|
||||
_importExport->_sessionsOpts[request->client()->localIP().toString() + "totp"] = true;
|
||||
@@ -4390,7 +4385,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_bypass_secret, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4403,7 +4398,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_admin_secret, value);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4424,7 +4418,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
}
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4437,7 +4431,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putInt(preference_lock_gemini_pin, value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -4448,7 +4442,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_nuki->setPin(value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4461,7 +4455,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_nukiOpener->setPin(0xffff);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4471,7 +4465,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_nukiOpener->setPin(value.toInt());
|
||||
Log->print("Setting changed: ");
|
||||
Log->println(key);
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4551,7 +4545,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
nukiBlePref.end();
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("Lock pairing data");
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
|
||||
if(manPairOpn)
|
||||
@@ -4566,7 +4560,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
nukiBlePref.end();
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("Opener pairing data");
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
}
|
||||
|
||||
if(pass1 != "" && pass1 != "*" && pass1 == pass2)
|
||||
@@ -4576,7 +4570,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_cred_password, pass1);
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("CREDPASS");
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -4588,14 +4582,14 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_mqtt_user, "");
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("MQTTUSER");
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
if(_preferences->getString(preference_mqtt_password, "") != "")
|
||||
{
|
||||
_preferences->putString(preference_mqtt_password, "");
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("MQTTPASS");
|
||||
configChanged = true;
|
||||
restartServicesReconnect = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4606,7 +4600,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_cred_user, "");
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("CREDUSER");
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
if(_preferences->getString(preference_cred_password, "") != "")
|
||||
@@ -4614,7 +4608,7 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putString(preference_cred_password, "");
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("CREDPASS");
|
||||
configChanged = true;
|
||||
restartServicesNoReconnect = true;
|
||||
clearSession = true;
|
||||
}
|
||||
}
|
||||
@@ -4639,7 +4633,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBytes(preference_acl, (byte*)(&aclPrefs), sizeof(aclPrefs));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("ACLPREFS");
|
||||
//configChanged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -4650,7 +4643,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBytes(preference_conf_lock_basic_acl, (byte*)(&basicLockConfigAclPrefs), sizeof(basicLockConfigAclPrefs));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("ACLCONFBASICLOCK");
|
||||
//configChanged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -4661,7 +4653,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBytes(preference_conf_lock_advanced_acl, (byte*)(&advancedLockConfigAclPrefs), sizeof(advancedLockConfigAclPrefs));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("ACLCONFADVANCEDLOCK");
|
||||
//configChanged = true;
|
||||
break;
|
||||
|
||||
}
|
||||
@@ -4673,7 +4664,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBytes(preference_conf_opener_basic_acl, (byte*)(&basicOpenerConfigAclPrefs), sizeof(basicOpenerConfigAclPrefs));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("ACLCONFBASICOPENER");
|
||||
//configChanged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -4684,7 +4674,6 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
_preferences->putBytes(preference_conf_opener_advanced_acl, (byte*)(&advancedOpenerConfigAclPrefs), sizeof(advancedOpenerConfigAclPrefs));
|
||||
Log->print("Setting changed: ");
|
||||
Log->println("ACLCONFADVANCEDOPENER");
|
||||
//configChanged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -4694,21 +4683,34 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
||||
{
|
||||
clearSessions();
|
||||
}
|
||||
|
||||
if(newMFA)
|
||||
{
|
||||
_preferences->putBool(preference_mfa_reconfigure, true);
|
||||
_importExport->readSettings();
|
||||
}
|
||||
|
||||
if(configChanged)
|
||||
{
|
||||
message = "Configuration saved, reboot required to apply";
|
||||
message = "Configuration saved, reboot required to apply some settings";
|
||||
_rebootRequired = true;
|
||||
}
|
||||
else if (restartServicesReconnect)
|
||||
{
|
||||
message = "Configuration saved, restart services required to apply some settings";
|
||||
_restartServicesRequired = 2;
|
||||
}
|
||||
else if (restartServicesNoReconnect)
|
||||
{
|
||||
message = "Configuration saved, restart services required to apply some settings";
|
||||
_restartServicesRequired = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
message = "Configuration saved.";
|
||||
}
|
||||
|
||||
_importExport->readSettings();
|
||||
|
||||
_network->readSettings();
|
||||
if(_nuki != nullptr)
|
||||
{
|
||||
@@ -4858,7 +4860,11 @@ esp_err_t WebCfgServer::buildHtml(PsychicRequest *request, PsychicResponse* resp
|
||||
buildHtmlHeader(&response, header);
|
||||
if(_rebootRequired)
|
||||
{
|
||||
response.print("<table><tbody><tr><td colspan=\"2\" style=\"border: 0; color: red; font-size: 32px; font-weight: bold; text-align: center;\">REBOOT REQUIRED TO APPLY SETTINGS</td></tr></tbody></table>");
|
||||
response.print("<table><tbody><tr><td colspan=\"2\" style=\"border: 0; color: red; font-size: 32px; font-weight: bold; text-align: center;\">REBOOT REQUIRED TO APPLY SOME SETTINGS</td></tr></tbody></table>");
|
||||
}
|
||||
if(_restartServicesRequired > 0)
|
||||
{
|
||||
response.print("<table><tbody><tr><td colspan=\"2\" style=\"border: 0; color: red; font-size: 32px; font-weight: bold; text-align: center;\">RESTART SERVICES REQUIRED TO APPLY SOME SETTINGS</td></tr></tbody></table>");
|
||||
}
|
||||
if(_preferences->getBool(preference_webserial_enabled, false))
|
||||
{
|
||||
@@ -4945,8 +4951,10 @@ esp_err_t WebCfgServer::buildHtml(PsychicRequest *request, PsychicResponse* resp
|
||||
}
|
||||
#endif
|
||||
buildNavigationMenuEntry(&response, "Info page", "/get?page=info");
|
||||
String rebooturl = "/get?page=reboot&CONFIRMTOKEN=" + _confirmCode;
|
||||
buildNavigationMenuEntry(&response, "Reboot Nuki Hub", rebooturl.c_str());
|
||||
String rebootUrl = "/get?page=reboot&CONFIRMTOKEN=" + _confirmCode;
|
||||
buildNavigationMenuEntry(&response, "Reboot Nuki Hub", rebootUrl.c_str());
|
||||
String restartServicesUrl = "/get?page=restartservices&CONFIRMTOKEN=" + _confirmCode;
|
||||
buildNavigationMenuEntry(&response, "Restart Services", restartServicesUrl.c_str());
|
||||
if (_preferences->getInt(preference_http_auth_type, 0) == 2)
|
||||
{
|
||||
buildNavigationMenuEntry(&response, "Logout", "/get?page=logout");
|
||||
@@ -6667,7 +6675,7 @@ esp_err_t WebCfgServer::processUnpair(PsychicRequest *request, PsychicResponse*
|
||||
return buildConfirmHtml(request, resp, "Confirm code is invalid.", 3, true);
|
||||
}
|
||||
|
||||
esp_err_t res = buildConfirmHtml(request, resp, opener ? "Unpairing Nuki Opener and restarting." : "Unpairing Nuki Lock and restarting.", 3, true);
|
||||
esp_err_t res = buildConfirmHtml(request, resp, opener ? "Unpairing Nuki Opener." : "Unpairing Nuki Lock.", 3, true);
|
||||
|
||||
if(!opener && _nuki != nullptr)
|
||||
{
|
||||
@@ -6682,7 +6690,7 @@ esp_err_t WebCfgServer::processUnpair(PsychicRequest *request, PsychicResponse*
|
||||
|
||||
_network->disableHASS();
|
||||
waitAndProcess(false, 1000);
|
||||
restartEsp(RestartReason::DeviceUnpaired);
|
||||
_network->setRestartServices(true);
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -7008,7 +7016,7 @@ const std::vector<std::pair<String, String>> WebCfgServer::getNetworkCustomCLKOp
|
||||
{
|
||||
std::vector<std::pair<String, String>> options;
|
||||
options.push_back(std::make_pair("0", "GPIO0 IN"));
|
||||
options.push_back(std::make_pair("1", "GPIO0 OUT"));
|
||||
options.push_back(std::make_pair("1", "GPIO0 OUT"));
|
||||
options.push_back(std::make_pair("2", "GPIO16 OUT"));
|
||||
options.push_back(std::make_pair("3", "GPIO17 OUT"));
|
||||
return options;
|
||||
|
||||
@@ -99,6 +99,7 @@ private:
|
||||
Gpio* _gpio = nullptr;
|
||||
bool _brokerConfigured = false;
|
||||
bool _rebootRequired = false;
|
||||
int _restartServicesRequired = 0;
|
||||
#endif
|
||||
|
||||
std::vector<String> _ssidList;
|
||||
|
||||
334
src/main.cpp
334
src/main.cpp
@@ -105,6 +105,9 @@ bool coredumpPrinted = true;
|
||||
bool timeSynced = false;
|
||||
bool webStarted = false;
|
||||
bool webSSLStarted = false;
|
||||
bool lockStarted = false;
|
||||
bool openerStarted = false;
|
||||
bool bleScannerStarted = false;
|
||||
uint8_t partitionType = -1;
|
||||
|
||||
int lastHTTPeventId = -1;
|
||||
@@ -243,96 +246,6 @@ void cbSyncTime(struct timeval *tv) {
|
||||
timeSynced = true;
|
||||
}
|
||||
|
||||
void networkTask(void *pvParameters)
|
||||
{
|
||||
int64_t networkLoopTs = 0;
|
||||
bool reroute = true;
|
||||
if(preferences->getBool(preference_show_secrets, false))
|
||||
{
|
||||
preferences->putBool(preference_show_secrets, false);
|
||||
}
|
||||
while(true)
|
||||
{
|
||||
int64_t ts = espMillis();
|
||||
if(ts > 120000 && ts < 125000)
|
||||
{
|
||||
if(bootloopCounter > 0)
|
||||
{
|
||||
bootloopCounter = (int8_t)0;
|
||||
Log->println("Bootloop counter reset");
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NUKI_HUB_UPDATER
|
||||
if(serialReader != nullptr)
|
||||
{
|
||||
serialReader->update();
|
||||
}
|
||||
#endif
|
||||
network->update();
|
||||
bool connected = network->isConnected();
|
||||
|
||||
if(connected && reroute)
|
||||
{
|
||||
if(preferences->getBool(preference_update_time, false))
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
#ifndef NUKI_HUB_UPDATER
|
||||
wifiConnected = network->wifiConnected();
|
||||
|
||||
if(connected && lockEnabled)
|
||||
{
|
||||
rebootLock = networkLock->update();
|
||||
}
|
||||
|
||||
if(connected && openerEnabled)
|
||||
{
|
||||
networkOpener->update();
|
||||
}
|
||||
#endif
|
||||
|
||||
if(espMillis() - networkLoopTs > 120000)
|
||||
{
|
||||
Log->println("networkTask is running");
|
||||
networkLoopTs = espMillis();
|
||||
}
|
||||
|
||||
if(espMillis() > restartTs)
|
||||
{
|
||||
partitionType = checkPartition();
|
||||
|
||||
if(partitionType!=1)
|
||||
{
|
||||
esp_ota_set_boot_partition(esp_ota_get_next_update_partition(NULL));
|
||||
}
|
||||
|
||||
restartEsp(RestartReason::RestartTimer);
|
||||
}
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32C5)
|
||||
esp_task_wdt_reset();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NUKI_HUB_UPDATER
|
||||
void startWebServer()
|
||||
{
|
||||
@@ -428,9 +341,46 @@ void startWebServer()
|
||||
#endif
|
||||
}
|
||||
|
||||
void restartBle()
|
||||
void startNuki(bool lock)
|
||||
{
|
||||
if (lock)
|
||||
{
|
||||
nukiOfficial = new NukiOfficial(preferences);
|
||||
networkLock = new NukiNetworkLock(network, nukiOfficial, preferences, CharBuffer::get(), buffer_size);
|
||||
|
||||
if(!disableNetwork)
|
||||
{
|
||||
networkLock->initialize();
|
||||
}
|
||||
|
||||
lockStarted = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
networkOpener = new NukiNetworkOpener(network, preferences, CharBuffer::get(), buffer_size);
|
||||
|
||||
if(!disableNetwork)
|
||||
{
|
||||
networkOpener->initialize();
|
||||
}
|
||||
|
||||
openerStarted = true;
|
||||
}
|
||||
}
|
||||
|
||||
void restartServices(bool reconnect)
|
||||
{
|
||||
bleDone = false;
|
||||
lockEnabled = preferences->getBool(preference_lock_enabled);
|
||||
openerEnabled = preferences->getBool(preference_opener_enabled);
|
||||
importExport->readSettings();
|
||||
network->readSettings();
|
||||
gpio->setPins();
|
||||
|
||||
if (reconnect)
|
||||
{
|
||||
network->reconnect(true);
|
||||
}
|
||||
|
||||
if(webSSLStarted)
|
||||
{
|
||||
@@ -462,27 +412,45 @@ void restartBle()
|
||||
Log->println("Deleting webCfgServer done");
|
||||
}
|
||||
|
||||
if(lockEnabled)
|
||||
if(lockStarted)
|
||||
{
|
||||
Log->println("Deleting nuki");
|
||||
delete nuki;
|
||||
nuki = nullptr;
|
||||
if (reconnect)
|
||||
{
|
||||
lockStarted = false;
|
||||
delete networkLock;
|
||||
networkLock = nullptr;
|
||||
delete nukiOfficial;
|
||||
nukiOfficial = nullptr;
|
||||
}
|
||||
Log->println("Deleting nuki done");
|
||||
}
|
||||
|
||||
if(openerEnabled)
|
||||
if(openerStarted)
|
||||
{
|
||||
Log->println("Deleting nukiOpener");
|
||||
delete nukiOpener;
|
||||
nukiOpener = nullptr;
|
||||
if (reconnect)
|
||||
{
|
||||
openerStarted = false;
|
||||
delete networkOpener;
|
||||
networkOpener = nullptr;
|
||||
}
|
||||
Log->println("Deleting nukiOpener done");
|
||||
}
|
||||
|
||||
Log->println("Destroying scanner from main");
|
||||
delete bleScanner;
|
||||
Log->println("Scanner deleted");
|
||||
bleScanner = nullptr;
|
||||
Log->println("Scanner nulled from main");
|
||||
if (bleScannerStarted)
|
||||
{
|
||||
bleScannerStarted = false;
|
||||
Log->println("Destroying scanner from main");
|
||||
delete bleScanner;
|
||||
Log->println("Scanner deleted");
|
||||
bleScanner = nullptr;
|
||||
Log->println("Scanner nulled from main");
|
||||
}
|
||||
|
||||
if (BLEDevice::isInitialized()) {
|
||||
Log->println("Deinit BLE device");
|
||||
@@ -491,25 +459,44 @@ void restartBle()
|
||||
}
|
||||
|
||||
delay(2000);
|
||||
Log->println("Restarting BLE Scanner");
|
||||
bleScanner = new BleScanner::Scanner();
|
||||
bleScanner->initialize("NukiHub", true, 40, 40);
|
||||
bleScanner->setScanDuration(0);
|
||||
Log->println("Restarting BLE Scanner done");
|
||||
|
||||
if(lockEnabled || openerEnabled)
|
||||
{
|
||||
Log->println("Restarting BLE Scanner");
|
||||
bleScanner = new BleScanner::Scanner();
|
||||
bleScanner->initialize("NukiHub", true, 40, 40);
|
||||
bleScanner->setScanDuration(0);
|
||||
bleScannerStarted = true;
|
||||
Log->println("Restarting BLE Scanner done");
|
||||
}
|
||||
|
||||
if(lockEnabled)
|
||||
{
|
||||
Log->println("Restarting Nuki lock");
|
||||
|
||||
if (reconnect)
|
||||
{
|
||||
startNuki(true);
|
||||
}
|
||||
|
||||
nuki = new NukiWrapper("NukiHub", deviceIdLock, bleScanner, networkLock, nukiOfficial, gpio, preferences, CharBuffer::get(), buffer_size);
|
||||
nuki->initialize();
|
||||
bleScanner->whitelist(nuki->getBleAddress());
|
||||
Log->println("Restarting Nuki lock done");
|
||||
}
|
||||
|
||||
if(openerEnabled)
|
||||
{
|
||||
Log->println("Restarting Nuki opener");
|
||||
|
||||
if (reconnect)
|
||||
{
|
||||
startNuki(false);
|
||||
}
|
||||
|
||||
nukiOpener = new NukiOpenerWrapper("NukiHub", deviceIdOpener, bleScanner, networkOpener, gpio, preferences, CharBuffer::get(), buffer_size);
|
||||
nukiOpener->initialize();
|
||||
bleScanner->whitelist(nukiOpener->getBleAddress());
|
||||
Log->println("Restarting Nuki opener done");
|
||||
}
|
||||
|
||||
@@ -521,8 +508,121 @@ void restartBle()
|
||||
startWebServer();
|
||||
Log->println("Restarting web server done");
|
||||
}
|
||||
else if(!doOta && !disableNetwork && (forceEnableWebServer || preferences->getBool(preference_webserver_enabled, true) || preferences->getBool(preference_webserial_enabled, false)))
|
||||
{
|
||||
if(forceEnableWebServer || preferences->getBool(preference_webserver_enabled, true))
|
||||
{
|
||||
Log->println("Starting web server");
|
||||
startWebServer();
|
||||
Log->println("Starting web server done");
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void networkTask(void *pvParameters)
|
||||
{
|
||||
int64_t networkLoopTs = 0;
|
||||
bool reroute = true;
|
||||
if(preferences->getBool(preference_show_secrets, false))
|
||||
{
|
||||
preferences->putBool(preference_show_secrets, false);
|
||||
}
|
||||
while(true)
|
||||
{
|
||||
int64_t ts = espMillis();
|
||||
if(ts > 120000 && ts < 125000)
|
||||
{
|
||||
if(bootloopCounter > 0)
|
||||
{
|
||||
bootloopCounter = (int8_t)0;
|
||||
Log->println("Bootloop counter reset");
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NUKI_HUB_UPDATER
|
||||
if(serialReader != nullptr)
|
||||
{
|
||||
serialReader->update();
|
||||
}
|
||||
#endif
|
||||
network->update();
|
||||
bool connected = network->isConnected();
|
||||
|
||||
if(connected && reroute)
|
||||
{
|
||||
if(preferences->getBool(preference_update_time, false))
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
#ifndef NUKI_HUB_UPDATER
|
||||
wifiConnected = network->wifiConnected();
|
||||
int restartServ = network->getRestartServices();
|
||||
|
||||
if (restartServ == 1)
|
||||
{
|
||||
restartServices(false);
|
||||
}
|
||||
else if (restartServ == 2)
|
||||
{
|
||||
restartServices(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(connected && lockStarted)
|
||||
{
|
||||
rebootLock = networkLock->update();
|
||||
}
|
||||
|
||||
if(connected && openerStarted)
|
||||
{
|
||||
networkOpener->update();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if(espMillis() - networkLoopTs > 120000)
|
||||
{
|
||||
Log->println("networkTask is running");
|
||||
networkLoopTs = espMillis();
|
||||
}
|
||||
|
||||
if(espMillis() > restartTs)
|
||||
{
|
||||
partitionType = checkPartition();
|
||||
|
||||
if(partitionType!=1)
|
||||
{
|
||||
esp_ota_set_boot_partition(esp_ota_get_next_update_partition(NULL));
|
||||
}
|
||||
|
||||
restartEsp(RestartReason::RestartTimer);
|
||||
}
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32C5)
|
||||
esp_task_wdt_reset();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NUKI_HUB_UPDATER
|
||||
void nukiTask(void *pvParameters)
|
||||
{
|
||||
if (preferences->getBool(preference_mqtt_ssl_enabled, false))
|
||||
@@ -544,10 +644,13 @@ void nukiTask(void *pvParameters)
|
||||
{
|
||||
if((disableNetwork || wifiConnected) && bleDone)
|
||||
{
|
||||
bleScanner->update();
|
||||
delay(20);
|
||||
|
||||
bool needsPairing = (lockEnabled && !nuki->isPaired()) || (openerEnabled && !nukiOpener->isPaired());
|
||||
if(bleScannerStarted)
|
||||
{
|
||||
bleScanner->update();
|
||||
delay(20);
|
||||
}
|
||||
|
||||
bool needsPairing = (lockStarted && !nuki->isPaired()) || (openerStarted && !nukiOpener->isPaired());
|
||||
|
||||
if (needsPairing)
|
||||
{
|
||||
@@ -566,7 +669,7 @@ void nukiTask(void *pvParameters)
|
||||
}
|
||||
}
|
||||
|
||||
if(lockEnabled)
|
||||
if(lockStarted)
|
||||
{
|
||||
if (nuki->restartController() > 0)
|
||||
{
|
||||
@@ -584,7 +687,7 @@ void nukiTask(void *pvParameters)
|
||||
else
|
||||
{
|
||||
lockRestartControllerCount += 1;
|
||||
restartBle();
|
||||
restartServices(false);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -594,12 +697,12 @@ void nukiTask(void *pvParameters)
|
||||
{
|
||||
lockRestartControllerCount = 0;
|
||||
}
|
||||
|
||||
|
||||
nuki->update(rebootLock);
|
||||
rebootLock = false;
|
||||
}
|
||||
}
|
||||
if(openerEnabled)
|
||||
if(openerStarted)
|
||||
{
|
||||
if (nukiOpener->restartController() > 0)
|
||||
{
|
||||
@@ -617,7 +720,7 @@ void nukiTask(void *pvParameters)
|
||||
else
|
||||
{
|
||||
openerRestartControllerCount += 1;
|
||||
restartBle();
|
||||
restartServices(false);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -627,7 +730,7 @@ void nukiTask(void *pvParameters)
|
||||
{
|
||||
openerRestartControllerCount = 0;
|
||||
}
|
||||
|
||||
|
||||
nukiOpener->update();
|
||||
}
|
||||
}
|
||||
@@ -1138,11 +1241,9 @@ void setup()
|
||||
gpio->getConfigurationText(gpioDesc, gpio->pinConfiguration(), "\n\r");
|
||||
Log->print(gpioDesc.c_str());
|
||||
|
||||
const String mqttLockPath = preferences->getString(preference_mqtt_lock_path);
|
||||
|
||||
importExport = new ImportExport(preferences);
|
||||
|
||||
network = new NukiNetwork(preferences, gpio, mqttLockPath, CharBuffer::get(), buffer_size, importExport);
|
||||
network = new NukiNetwork(preferences, gpio, CharBuffer::get(), buffer_size, importExport);
|
||||
network->initialize();
|
||||
|
||||
lockEnabled = preferences->getBool(preference_lock_enabled);
|
||||
@@ -1166,6 +1267,7 @@ void setup()
|
||||
// https://developer.nuki.io/t/bluetooth-specification-questions/1109/27
|
||||
bleScanner->initialize("NukiHub", true, 40, 40);
|
||||
bleScanner->setScanDuration(0);
|
||||
bleScannerStarted = true;
|
||||
}
|
||||
|
||||
Log->println(lockEnabled ? F("Nuki Lock enabled") : F("Nuki Lock disabled"));
|
||||
|
||||
Reference in New Issue
Block a user