From d0fbaefd770647a5bb61f3ab54caf4fb1119eed6 Mon Sep 17 00:00:00 2001 From: technyon Date: Sat, 18 Feb 2023 19:14:38 +0100 Subject: [PATCH] minor refactoring of network code --- Network.cpp | 8 +++++++- Network.h | 1 + NetworkLock.cpp | 8 +++----- NetworkOpener.cpp | 6 ++---- WebCfgServer.cpp | 2 +- main.cpp | 2 ++ networkDevices/W5500Device.cpp | 4 ++-- 7 files changed, 18 insertions(+), 13 deletions(-) diff --git a/Network.cpp b/Network.cpp index 5b28a33..046d4c4 100644 --- a/Network.cpp +++ b/Network.cpp @@ -9,6 +9,7 @@ Network* Network::_inst = nullptr; +unsigned long Network::_ignoreSubscriptionsTs = 0; RTC_NOINIT_ATTR char WiFi_fallbackDetect[14]; @@ -359,6 +360,7 @@ bool Network::reconnect() _mqttConnectionState = 1; delay(100); + _ignoreSubscriptionsTs = millis() + 2000; _device->mqttOnMessage(Network::onMqttDataReceivedCallback); for(const String& topic : _subscribedTopics) { @@ -372,7 +374,6 @@ bool Network::reconnect() _device->mqttPublish(it.first.c_str(), MQTT_QOS_LEVEL, true, it.second.c_str()); } } - delay(1000); _mqttConnectionState = 2; for(const auto& callback : _reconnectedCallbacks) { @@ -436,6 +437,11 @@ void Network::registerMqttReceiver(MqttReceiver* receiver) void Network::onMqttDataReceivedCallback(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t len, size_t index, size_t total) { + if(millis() < _ignoreSubscriptionsTs) + { + return; + } + uint8_t value[50] = {0}; size_t l = min(len, sizeof(value)-1); diff --git a/Network.h b/Network.h index 7907727..f560527 100644 --- a/Network.h +++ b/Network.h @@ -91,6 +91,7 @@ private: unsigned long _lastConnectedTs = 0; unsigned long _lastMaintenanceTs = 0; unsigned long _lastRssiTs = 0; + static unsigned long _ignoreSubscriptionsTs; long _rssiPublishInterval = 0; std::function _keepAliveCallback = nullptr; std::vector> _reconnectedCallbacks; diff --git a/NetworkLock.cpp b/NetworkLock.cpp index 324fc22..d54e565 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -90,16 +90,14 @@ void NetworkLock::onMqttDataReceived(const char* topic, byte* payload, const uns { char* value = (char*)payload; - bool processActions = _network->mqttConnectionState() >= 2; - - if(processActions && comparePrefixedPath(topic, mqtt_topic_reset) && strcmp(value, "1") == 0) + if(comparePrefixedPath(topic, mqtt_topic_reset) && strcmp(value, "1") == 0) { Log->println(F("Restart requested via MQTT.")); delay(200); restartEsp(RestartReason::RequestedViaMqtt); } - if(processActions && comparePrefixedPath(topic, mqtt_topic_lock_action)) + if(comparePrefixedPath(topic, mqtt_topic_lock_action)) { if(strcmp(value, "") == 0 || strcmp(value, "--") == 0 || strcmp(value, "ack") == 0 || strcmp(value, "unknown_action") == 0) return; @@ -113,7 +111,7 @@ void NetworkLock::onMqttDataReceived(const char* topic, byte* payload, const uns publishString(mqtt_topic_lock_action, success ? "ack" : "unknown_action"); } - if(processActions && comparePrefixedPath(topic, mqtt_topic_keypad_command_action)) + if(comparePrefixedPath(topic, mqtt_topic_keypad_command_action)) { if(_keypadCommandReceivedReceivedCallback != nullptr) { diff --git a/NetworkOpener.cpp b/NetworkOpener.cpp index d3272d8..c607fc7 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -88,9 +88,7 @@ void NetworkOpener::onMqttDataReceived(const char* topic, byte* payload, const u { char* value = (char*)payload; - bool processActions = _network->mqttConnectionState() >= 2; - - if(processActions && comparePrefixedPath(topic, mqtt_topic_lock_action)) + if(comparePrefixedPath(topic, mqtt_topic_lock_action)) { if(strcmp((char*)payload, "") == 0 || strcmp(value, "--") == 0 || strcmp(value, "ack") == 0 || strcmp(value, "unknown_action") == 0) return; @@ -104,7 +102,7 @@ void NetworkOpener::onMqttDataReceived(const char* topic, byte* payload, const u publishString(mqtt_topic_lock_action, success ? "ack" : "unknown_action"); } - if(processActions && comparePrefixedPath(topic, mqtt_topic_keypad_command_action)) + if(comparePrefixedPath(topic, mqtt_topic_keypad_command_action)) { if(_keypadCommandReceivedReceivedCallback != nullptr) { diff --git a/WebCfgServer.cpp b/WebCfgServer.cpp index e79a46b..62a84fa 100644 --- a/WebCfgServer.cpp +++ b/WebCfgServer.cpp @@ -780,7 +780,7 @@ void WebCfgServer::buildInfoHtml(String &response) response.concat("Restart reason FW: "); response.concat(getRestartReason()); - response.concat("\n"); + response.concat( "\n"); response.concat("Restart reason ESP: "); response.concat(getEspRestartReason()); diff --git a/main.cpp b/main.cpp index 53c151e..5bf1f4a 100644 --- a/main.cpp +++ b/main.cpp @@ -154,6 +154,7 @@ void setup() { Serial.begin(115200); Log = &Serial; + initializeRestartReason(); Log->print(F("NUKI Hub version ")); Log->println(NUKI_HUB_VERSION); @@ -170,6 +171,7 @@ void setup() const String mqttLockPath = preferences->getString(preference_mqtt_lock_path); network = new Network(preferences, mqttLockPath); network->initialize(); + networkLock = new NetworkLock(network, preferences); networkLock->initialize(); diff --git a/networkDevices/W5500Device.cpp b/networkDevices/W5500Device.cpp index 0e0d8de..c8fb38b 100644 --- a/networkDevices/W5500Device.cpp +++ b/networkDevices/W5500Device.cpp @@ -143,11 +143,11 @@ void W5500Device::resetDevice() Log->println(F("Resetting network hardware.")); pinMode(_resetPin, OUTPUT); digitalWrite(_resetPin, HIGH); - delay(250); + delay(50); digitalWrite(_resetPin, LOW); delay(50); digitalWrite(_resetPin, HIGH); - delay(1500); + delay(50); }