Track number of WiFi reconnects #2207

This commit is contained in:
proddy
2024-11-15 16:00:51 +01:00
parent 7a6670db0d
commit c365055825
7 changed files with 30 additions and 14 deletions

View File

@@ -94,6 +94,8 @@ const NetworkStatus = () => {
const networkStatus = ({ status }: NetworkStatusType) => { const networkStatus = ({ status }: NetworkStatusType) => {
switch (status) { switch (status) {
case NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED:
return LL.CONNECTED(0) + ' (Ethernet)';
case NetworkConnectionStatus.WIFI_STATUS_NO_SHIELD: case NetworkConnectionStatus.WIFI_STATUS_NO_SHIELD:
return LL.INACTIVE(1); return LL.INACTIVE(1);
case NetworkConnectionStatus.WIFI_STATUS_IDLE: case NetworkConnectionStatus.WIFI_STATUS_IDLE:
@@ -101,13 +103,11 @@ const NetworkStatus = () => {
case NetworkConnectionStatus.WIFI_STATUS_NO_SSID_AVAIL: case NetworkConnectionStatus.WIFI_STATUS_NO_SSID_AVAIL:
return 'No SSID Available'; return 'No SSID Available';
case NetworkConnectionStatus.WIFI_STATUS_CONNECTED: case NetworkConnectionStatus.WIFI_STATUS_CONNECTED:
return LL.CONNECTED(0) + ' (WiFi)'; return LL.CONNECTED(0) + ' (WiFi) (' + data.connect_count + ')';
case NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED:
return LL.CONNECTED(0) + ' (Ethernet)';
case NetworkConnectionStatus.WIFI_STATUS_CONNECT_FAILED: case NetworkConnectionStatus.WIFI_STATUS_CONNECT_FAILED:
return LL.CONNECTED(1) + ' ' + LL.FAILED(0); return LL.CONNECTED(1) + ' ' + LL.FAILED(0) + ' (' + data.connect_count + ')';
case NetworkConnectionStatus.WIFI_STATUS_CONNECTION_LOST: case NetworkConnectionStatus.WIFI_STATUS_CONNECTION_LOST:
return LL.CONNECTED(1) + ' ' + LL.LOST(); return LL.CONNECTED(1) + ' ' + LL.LOST() + ' (' + data.connect_count + ')';
case NetworkConnectionStatus.WIFI_STATUS_DISCONNECTED: case NetworkConnectionStatus.WIFI_STATUS_DISCONNECTED:
return LL.DISCONNECTED(); return LL.DISCONNECTED();
default: default:

View File

@@ -34,6 +34,7 @@ export interface NetworkStatusType {
dns_ip_1: string; dns_ip_1: string;
dns_ip_2: string; dns_ip_2: string;
hostname: string; hostname: string;
connect_count: number;
} }
export interface NetworkSettingsType { export interface NetworkSettingsType {

View File

@@ -66,6 +66,10 @@ class ESP8266React {
return _apSettingsService.getAPNetworkStatus() == APNetworkStatus::ACTIVE; return _apSettingsService.getAPNetworkStatus() == APNetworkStatus::ACTIVE;
} }
uint16_t getWifiConnects() {
return _networkSettingsService.getWifiConnects();
}
private: private:
SecuritySettingsService _securitySettingsService; SecuritySettingsService _securitySettingsService;
NetworkSettingsService _networkSettingsService; NetworkSettingsService _networkSettingsService;

View File

@@ -304,10 +304,14 @@ void NetworkSettingsService::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info)
break; break;
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED: case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
emsesp::EMSESP::logger().warning("WiFi disconnected. Reason: %s (%d)", connectcount_++; // count the number of reconnects
emsesp::EMSESP::logger().warning("WiFi disconnected (#%d). Reason: %s (%d)",
connectcount_,
disconnectReason(info.wifi_sta_disconnected.reason), disconnectReason(info.wifi_sta_disconnected.reason),
info.wifi_sta_disconnected.reason); // IDF 4.0 info.wifi_sta_disconnected.reason); // IDF 4.0
emsesp::EMSESP::system_.has_ipv6(false); emsesp::EMSESP::system_.has_ipv6(false);
break; break;
case ARDUINO_EVENT_WIFI_STA_GOT_IP: case ARDUINO_EVENT_WIFI_STA_GOT_IP:

View File

@@ -87,7 +87,6 @@ class NetworkSettings {
static StateUpdateResult update(JsonObject root, NetworkSettings & settings); static StateUpdateResult update(JsonObject root, NetworkSettings & settings);
}; };
class NetworkSettingsService : public StatefulService<NetworkSettings> { class NetworkSettingsService : public StatefulService<NetworkSettings> {
public: public:
NetworkSettingsService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager); NetworkSettingsService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager);
@@ -95,6 +94,10 @@ class NetworkSettingsService : public StatefulService<NetworkSettings> {
void begin(); void begin();
void loop(); void loop();
uint16_t getWifiConnects() const {
return connectcount_;
}
private: private:
HttpEndpoint<NetworkSettings> _httpEndpoint; HttpEndpoint<NetworkSettings> _httpEndpoint;
FSPersistence<NetworkSettings> _fsPersistence; FSPersistence<NetworkSettings> _fsPersistence;
@@ -102,6 +105,8 @@ class NetworkSettingsService : public StatefulService<NetworkSettings> {
unsigned long _lastConnectionAttempt; unsigned long _lastConnectionAttempt;
bool _stopping; bool _stopping;
uint16_t connectcount_ = 0; // number of wifi reconnects
void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info); void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info);
void mDNS_start() const; void mDNS_start() const;
const char * disconnectReason(uint8_t code); const char * disconnectReason(uint8_t code);

View File

@@ -60,12 +60,13 @@ void NetworkStatus::networkStatus(AsyncWebServerRequest * request) {
#else #else
root["local_ipv6"] = WiFi.linkLocalIPv6().toString(); root["local_ipv6"] = WiFi.linkLocalIPv6().toString();
#endif #endif
root["mac_address"] = WiFi.macAddress(); root["mac_address"] = WiFi.macAddress();
root["rssi"] = WiFi.RSSI(); root["rssi"] = WiFi.RSSI();
root["ssid"] = WiFi.SSID(); root["ssid"] = WiFi.SSID();
root["bssid"] = WiFi.BSSIDstr(); root["bssid"] = WiFi.BSSIDstr();
root["channel"] = WiFi.channel(); root["channel"] = WiFi.channel();
root["subnet_mask"] = WiFi.subnetMask().toString(); root["connect_count"] = emsesp::EMSESP::esp8266React.getWifiConnects();
root["subnet_mask"] = WiFi.subnetMask().toString();
if (WiFi.gatewayIP() != INADDR_NONE) { if (WiFi.gatewayIP() != INADDR_NONE) {
root["gateway_ip"] = WiFi.gatewayIP().toString(); root["gateway_ip"] = WiFi.gatewayIP().toString();

View File

@@ -368,7 +368,8 @@ const network_status = {
gateway_ip: '10.10.10.1', gateway_ip: '10.10.10.1',
dns_ip_1: '10.10.10.1', dns_ip_1: '10.10.10.1',
dns_ip_2: '0.0.0.0', dns_ip_2: '0.0.0.0',
hostname: 'ems-esp' hostname: 'ems-esp',
connect_count: 1
}; };
const list_networks = { const list_networks = {
networks: [ networks: [