mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
#1614 - WiFi Tx Power
This commit is contained in:
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
## **IMPORTANT! BREAKING CHANGES**
|
## **IMPORTANT! BREAKING CHANGES**
|
||||||
|
|
||||||
|
- The Wifi Tx Power setting in Network Settings will be reset to Auto
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
||||||
- thermostat boost mode and boost time [#1446](https://github.com/emsesp/EMS-ESP32/issues/1446)
|
- thermostat boost mode and boost time [#1446](https://github.com/emsesp/EMS-ESP32/issues/1446)
|
||||||
@@ -28,6 +30,8 @@
|
|||||||
- MQTT autodiscovery in Domoticz not working [#1360](https://github.com/emsesp/EMS-ESP32/issues/1528)
|
- MQTT autodiscovery in Domoticz not working [#1360](https://github.com/emsesp/EMS-ESP32/issues/1528)
|
||||||
- dhw comfort for new ems+, [#1495](https://github.com/emsesp/EMS-ESP32/issues/1495)
|
- dhw comfort for new ems+, [#1495](https://github.com/emsesp/EMS-ESP32/issues/1495)
|
||||||
- added writeable icon to Web's Custom Entity page for each entity shown in the table
|
- added writeable icon to Web's Custom Entity page for each entity shown in the table
|
||||||
|
- Wifi Tx Power not adjusted [#1614](https://github.com/emsesp/EMS-ESP32/issues/1614)
|
||||||
|
- MQTT discovery of custom entity doesn't consider type of data [#1587](https://github.com/emsesp/EMS-ESP32/issues/1587)
|
||||||
|
|
||||||
## Changed
|
## Changed
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import {
|
|||||||
ListItemSecondaryAction,
|
ListItemSecondaryAction,
|
||||||
ListItemText,
|
ListItemText,
|
||||||
Typography,
|
Typography,
|
||||||
InputAdornment,
|
TextField,
|
||||||
TextField
|
MenuItem
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
// eslint-disable-next-line import/named
|
// eslint-disable-next-line import/named
|
||||||
import { updateState, useRequest } from 'alova';
|
import { updateState, useRequest } from 'alova';
|
||||||
@@ -43,7 +43,7 @@ import {
|
|||||||
} from 'components';
|
} from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
|
|
||||||
import { numberValue, updateValueDirty, useRest } from 'utils';
|
import { updateValueDirty, useRest } from 'utils';
|
||||||
|
|
||||||
import { validate } from 'validators';
|
import { validate } from 'validators';
|
||||||
import { createNetworkSettingsValidator } from 'validators/network';
|
import { createNetworkSettingsValidator } from 'validators/network';
|
||||||
@@ -88,7 +88,7 @@ const WiFiSettingsForm: FC = () => {
|
|||||||
static_ip_config: false,
|
static_ip_config: false,
|
||||||
enableIPv6: false,
|
enableIPv6: false,
|
||||||
bandwidth20: false,
|
bandwidth20: false,
|
||||||
tx_power: 20,
|
tx_power: 0,
|
||||||
nosleep: false,
|
nosleep: false,
|
||||||
enableMDNS: true,
|
enableMDNS: true,
|
||||||
enableCORS: false,
|
enableCORS: false,
|
||||||
@@ -196,20 +196,27 @@ const WiFiSettingsForm: FC = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<ValidatedTextField
|
<TextField
|
||||||
fieldErrors={fieldErrors}
|
|
||||||
name="tx_power"
|
name="tx_power"
|
||||||
label={LL.TX_POWER()}
|
label={LL.TX_POWER()}
|
||||||
InputProps={{
|
|
||||||
endAdornment: <InputAdornment position="end">dBm</InputAdornment>
|
|
||||||
}}
|
|
||||||
fullWidth
|
fullWidth
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.tx_power)}
|
value={data.tx_power}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
type="number"
|
|
||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
select
|
||||||
|
>
|
||||||
|
<MenuItem value={0}>Auto</MenuItem>
|
||||||
|
<MenuItem value={78}>19.5 dBm</MenuItem>
|
||||||
|
<MenuItem value={76}>19 dBm</MenuItem>
|
||||||
|
<MenuItem value={74}>18.5 dBm</MenuItem>
|
||||||
|
<MenuItem value={68}>17 dBm</MenuItem>
|
||||||
|
<MenuItem value={60}>15 dBm</MenuItem>
|
||||||
|
<MenuItem value={52}>13 dBm</MenuItem>
|
||||||
|
<MenuItem value={44}>11 dBm</MenuItem>
|
||||||
|
<MenuItem value={34}>8.5 dBm</MenuItem>
|
||||||
|
<MenuItem value={28}>7 dBm</MenuItem>
|
||||||
|
</TextField>
|
||||||
<BlockFormControlLabel
|
<BlockFormControlLabel
|
||||||
control={<Checkbox name="nosleep" checked={data.nosleep} onChange={updateFormValue} />}
|
control={<Checkbox name="nosleep" checked={data.nosleep} onChange={updateFormValue} />}
|
||||||
label={LL.NETWORK_DISABLE_SLEEP()}
|
label={LL.NETWORK_DISABLE_SLEEP()}
|
||||||
|
|||||||
@@ -14,9 +14,5 @@ export const createNetworkSettingsValidator = (networkSettings: NetworkSettings)
|
|||||||
subnet_mask: [{ required: true, message: 'Subnet mask is required' }, IP_ADDRESS_VALIDATOR],
|
subnet_mask: [{ required: true, message: 'Subnet mask is required' }, IP_ADDRESS_VALIDATOR],
|
||||||
dns_ip_1: IP_ADDRESS_VALIDATOR,
|
dns_ip_1: IP_ADDRESS_VALIDATOR,
|
||||||
dns_ip_2: IP_ADDRESS_VALIDATOR
|
dns_ip_2: IP_ADDRESS_VALIDATOR
|
||||||
}),
|
})
|
||||||
tx_power: [
|
|
||||||
{ required: true, message: 'Tx Power is required' },
|
|
||||||
{ type: 'number', min: 0, max: 20, message: 'Tx Power must be between 0 and 20dBm' }
|
|
||||||
]
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
name=ESP Async WebServer
|
|
||||||
version=2.6.1
|
|
||||||
author=Me-No-Dev
|
|
||||||
maintainer=Mathieu Carbou <mathieu.carbou@gmail.com>
|
|
||||||
sentence=Asynchronous HTTP and WebSocket Server Library for ESP32
|
|
||||||
paragraph=Supports: WebSocket, SSE, Authentication, Arduino Json 7, File Upload, Static File serving, URL Rewrite, URL Redirect, etc
|
|
||||||
category=Other
|
|
||||||
url=https://github.com/mathieucarbou/ESPAsyncWebServer
|
|
||||||
architectures=esp32
|
|
||||||
license=LGPL-3.0
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#include <NetworkSettingsService.h>
|
#include <NetworkSettingsService.h>
|
||||||
|
|
||||||
|
#include "../../src/emsesp_stub.hpp"
|
||||||
|
|
||||||
using namespace std::placeholders; // for `_1` etc
|
using namespace std::placeholders; // for `_1` etc
|
||||||
|
|
||||||
NetworkSettingsService::NetworkSettingsService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager)
|
NetworkSettingsService::NetworkSettingsService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager)
|
||||||
@@ -7,7 +9,8 @@ NetworkSettingsService::NetworkSettingsService(AsyncWebServer * server, FS * fs,
|
|||||||
, _fsPersistence(NetworkSettings::read, NetworkSettings::update, this, fs, NETWORK_SETTINGS_FILE)
|
, _fsPersistence(NetworkSettings::read, NetworkSettings::update, this, fs, NETWORK_SETTINGS_FILE)
|
||||||
, _lastConnectionAttempt(0) {
|
, _lastConnectionAttempt(0) {
|
||||||
addUpdateHandler([&](const String & originId) { reconfigureWiFiConnection(); }, false);
|
addUpdateHandler([&](const String & originId) { reconfigureWiFiConnection(); }, false);
|
||||||
WiFi.onEvent(std::bind(&NetworkSettingsService::WiFiEvent, this, _1));
|
// wifi event callbacks
|
||||||
|
WiFi.onEvent(std::bind(&NetworkSettingsService::WiFiEvent, this, _1, _2));
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkSettingsService::begin() {
|
void NetworkSettingsService::begin() {
|
||||||
@@ -83,31 +86,282 @@ void NetworkSettingsService::manageSTA() {
|
|||||||
} else {
|
} else {
|
||||||
WiFi.begin(_state.ssid.c_str(), _state.password.c_str());
|
WiFi.begin(_state.ssid.c_str(), _state.password.c_str());
|
||||||
}
|
}
|
||||||
// set power after wifi is startet, fixed value for C3_V1
|
// Set thw Wifi Tx power
|
||||||
// if (WiFi.isConnected()) {
|
setWiFiPower();
|
||||||
#ifdef BOARD_C3_MINI_V1
|
|
||||||
// v1 needs this value, see https://github.com/emsesp/EMS-ESP32/pull/620#discussion_r993173979
|
|
||||||
WiFi.setTxPower(WIFI_POWER_8_5dBm); // https://www.wemos.cc/en/latest/c3/c3_mini_1_0_0.html#about-wifi
|
|
||||||
#else
|
|
||||||
// esp_wifi_set_max_tx_power(_state.tx_power * 4);
|
|
||||||
// TODO make it dynamic
|
|
||||||
WiFi.setTxPower((wifi_power_t)(_state.tx_power * 4));
|
|
||||||
#endif
|
|
||||||
// }
|
|
||||||
} else { // not connected but STA-mode active => disconnect
|
} else { // not connected but STA-mode active => disconnect
|
||||||
reconfigureWiFiConnection();
|
reconfigureWiFiConnection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handles if wifi stopped
|
// set the Tx WiFi power
|
||||||
void NetworkSettingsService::WiFiEvent(WiFiEvent_t event) {
|
// based of RSSI (signal strength) and copied from Tasmota's WiFiSetTXpowerBasedOnRssi() function with is copied from espEasy
|
||||||
if (event == ARDUINO_EVENT_WIFI_STA_STOP) {
|
void NetworkSettingsService::setWiFiPower() {
|
||||||
|
// hardcode Tx power for Wemos CS Mini v1
|
||||||
|
// v1 needs this value, see https://github.com/emsesp/EMS-ESP32/pull/620#discussion_r993173979
|
||||||
|
// https://www.wemos.cc/en/latest/c3/c3_mini_1_0_0.html#about-wifi
|
||||||
|
#ifdef BOARD_C3_MINI_V1
|
||||||
|
WiFi.setTxPower(WIFI_POWER_8_5dBm);
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
auto set_power = _state.tx_power; // get user settings. 0 means auto
|
||||||
|
|
||||||
|
// If Auto set the TxPower based on the RSSI (signal strength)
|
||||||
|
if (set_power == 0) {
|
||||||
|
// Range ESP32 : 2dBm - 20dBm
|
||||||
|
// 802.11b - wifi1
|
||||||
|
// 802.11a - wifi2
|
||||||
|
// 802.11g - wifi3
|
||||||
|
// 802.11n - wifi4
|
||||||
|
// 802.11ac - wifi5
|
||||||
|
// 802.11ax - wifi6
|
||||||
|
int max_tx_pwr = MAX_TX_PWR_DBM_n; // assume wifi4
|
||||||
|
int threshold = WIFI_SENSITIVITY_n;
|
||||||
|
threshold += 30; // Margin in dBm * 10 on top of threshold
|
||||||
|
|
||||||
|
// Assume AP sends with max set by ETSI standard.
|
||||||
|
// 2.4 GHz: 100 mWatt (20 dBm)
|
||||||
|
// US and some other countries allow 1000 mW (30 dBm)
|
||||||
|
int rssi = WiFi.RSSI() * 10;
|
||||||
|
int newrssi = rssi - 200; // We cannot send with over 20 dBm, thus it makes no sense to force higher TX power all the time.
|
||||||
|
|
||||||
|
int min_tx_pwr = 0;
|
||||||
|
if (newrssi < threshold) {
|
||||||
|
min_tx_pwr = threshold - newrssi;
|
||||||
|
}
|
||||||
|
if (min_tx_pwr > max_tx_pwr) {
|
||||||
|
min_tx_pwr = max_tx_pwr;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_power = min_tx_pwr / 10; // this is the recommended power setting to use
|
||||||
|
}
|
||||||
|
|
||||||
|
// use the user setting, which is a value from WiFIGeneric.h
|
||||||
|
// WIFI_POWER_19_5dBm = 78,// 19.5dBm
|
||||||
|
// WIFI_POWER_19dBm = 76,// 19dBm
|
||||||
|
// WIFI_POWER_18_5dBm = 74,// 18.5dBm
|
||||||
|
// WIFI_POWER_17dBm = 68,// 17dBm
|
||||||
|
// WIFI_POWER_15dBm = 60,// 15dBm
|
||||||
|
// WIFI_POWER_13dBm = 52,// 13dBm
|
||||||
|
// WIFI_POWER_11dBm = 44,// 11dBm
|
||||||
|
// WIFI_POWER_8_5dBm = 34,// 8.5dBm
|
||||||
|
// WIFI_POWER_7dBm = 28,// 7dBm
|
||||||
|
// WIFI_POWER_5dBm = 20,// 5dBm
|
||||||
|
// WIFI_POWER_2dBm = 8,// 2dBm
|
||||||
|
// WIFI_POWER_MINUS_1dBm = -4// -1dBm
|
||||||
|
wifi_power_t p = WIFI_POWER_2dBm;
|
||||||
|
if (set_power > 19)
|
||||||
|
p = WIFI_POWER_19_5dBm;
|
||||||
|
else if (set_power > 18)
|
||||||
|
p = WIFI_POWER_18_5dBm;
|
||||||
|
else if (set_power >= 17)
|
||||||
|
p = WIFI_POWER_17dBm;
|
||||||
|
else if (set_power >= 15)
|
||||||
|
p = WIFI_POWER_15dBm;
|
||||||
|
else if (set_power >= 13)
|
||||||
|
p = WIFI_POWER_13dBm;
|
||||||
|
else if (set_power >= 11)
|
||||||
|
p = WIFI_POWER_11dBm;
|
||||||
|
else if (set_power >= 8)
|
||||||
|
p = WIFI_POWER_8_5dBm;
|
||||||
|
else if (set_power >= 7)
|
||||||
|
p = WIFI_POWER_7dBm;
|
||||||
|
else if (set_power >= 5)
|
||||||
|
p = WIFI_POWER_5dBm;
|
||||||
|
|
||||||
|
WiFi.setTxPower(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
// start the multicast UDP service so EMS-ESP is discoverable via .local
|
||||||
|
void NetworkSettingsService::mDNS_start() const {
|
||||||
|
#ifndef EMSESP_STANDALONE
|
||||||
|
MDNS.end();
|
||||||
|
|
||||||
|
if (_state.enableMDNS) {
|
||||||
|
if (!MDNS.begin(emsesp::EMSESP::system_.hostname().c_str())) {
|
||||||
|
emsesp::EMSESP::logger().warning("Failed to start mDNS responder service");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string address_s = emsesp::EMSESP::system_.hostname() + ".local";
|
||||||
|
|
||||||
|
MDNS.addService("http", "tcp", 80); // add our web server and rest API
|
||||||
|
MDNS.addService("telnet", "tcp", 23); // add our telnet console
|
||||||
|
|
||||||
|
MDNS.addServiceTxt("http", "tcp", "version", EMSESP_APP_VERSION);
|
||||||
|
MDNS.addServiceTxt("http", "tcp", "address", address_s.c_str());
|
||||||
|
|
||||||
|
emsesp::EMSESP::logger().info("mDNS responder service started");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (_state.enableMDNS) {
|
||||||
|
EMSESP::logger().info("mDNS responder service started");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * NetworkSettingsService::disconnectReason(uint8_t code) {
|
||||||
|
#ifndef EMSESP_STANDALONE
|
||||||
|
switch (code) {
|
||||||
|
case WIFI_REASON_UNSPECIFIED: // = 1,
|
||||||
|
return "unspecified";
|
||||||
|
case WIFI_REASON_AUTH_EXPIRE: // = 2,
|
||||||
|
return "auth expire";
|
||||||
|
case WIFI_REASON_AUTH_LEAVE: // = 3,
|
||||||
|
return "auth leave";
|
||||||
|
case WIFI_REASON_ASSOC_EXPIRE: // = 4,
|
||||||
|
return "assoc expired";
|
||||||
|
case WIFI_REASON_ASSOC_TOOMANY: // = 5,
|
||||||
|
return "assoc too many";
|
||||||
|
case WIFI_REASON_NOT_AUTHED: // = 6,
|
||||||
|
return "not authenticated";
|
||||||
|
case WIFI_REASON_NOT_ASSOCED: // = 7,
|
||||||
|
return "not assoc";
|
||||||
|
case WIFI_REASON_ASSOC_LEAVE: // = 8,
|
||||||
|
return "assoc leave";
|
||||||
|
case WIFI_REASON_ASSOC_NOT_AUTHED: // = 9,
|
||||||
|
return "assoc not authed";
|
||||||
|
case WIFI_REASON_DISASSOC_PWRCAP_BAD: // = 10,
|
||||||
|
return "disassoc powerCAP bad";
|
||||||
|
case WIFI_REASON_DISASSOC_SUPCHAN_BAD: // = 11,
|
||||||
|
return "disassoc supchan bad";
|
||||||
|
case WIFI_REASON_IE_INVALID: // = 13,
|
||||||
|
return "IE invalid";
|
||||||
|
case WIFI_REASON_MIC_FAILURE: // = 14,
|
||||||
|
return "MIC failure";
|
||||||
|
case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT: // = 15,
|
||||||
|
return "4way handshake timeout";
|
||||||
|
case WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT: // = 16,
|
||||||
|
return "group key-update timeout";
|
||||||
|
case WIFI_REASON_IE_IN_4WAY_DIFFERS: // = 17,
|
||||||
|
return "IE in 4way differs";
|
||||||
|
case WIFI_REASON_GROUP_CIPHER_INVALID: // = 18,
|
||||||
|
return "group cipher invalid";
|
||||||
|
case WIFI_REASON_PAIRWISE_CIPHER_INVALID: // = 19,
|
||||||
|
return "pairwise cipher invalid";
|
||||||
|
case WIFI_REASON_AKMP_INVALID: // = 20,
|
||||||
|
return "AKMP invalid";
|
||||||
|
case WIFI_REASON_UNSUPP_RSN_IE_VERSION: // = 21,
|
||||||
|
return "unsupported RSN_IE version";
|
||||||
|
case WIFI_REASON_INVALID_RSN_IE_CAP: // = 22,
|
||||||
|
return "invalid RSN_IE_CAP";
|
||||||
|
case WIFI_REASON_802_1X_AUTH_FAILED: // = 23,
|
||||||
|
return "802 X1 auth failed";
|
||||||
|
case WIFI_REASON_CIPHER_SUITE_REJECTED: // = 24,
|
||||||
|
return "cipher suite rejected";
|
||||||
|
case WIFI_REASON_BEACON_TIMEOUT: // = 200,
|
||||||
|
return "beacon timeout";
|
||||||
|
case WIFI_REASON_NO_AP_FOUND: // = 201,
|
||||||
|
return "no AP found";
|
||||||
|
case WIFI_REASON_AUTH_FAIL: // = 202,
|
||||||
|
return "auth fail";
|
||||||
|
case WIFI_REASON_ASSOC_FAIL: // = 203,
|
||||||
|
return "assoc fail";
|
||||||
|
case WIFI_REASON_HANDSHAKE_TIMEOUT: // = 204,
|
||||||
|
return "handshake timeout";
|
||||||
|
case WIFI_REASON_CONNECTION_FAIL: // 205,
|
||||||
|
return "connection fail";
|
||||||
|
case WIFI_REASON_AP_TSF_RESET: // 206,
|
||||||
|
return "AP tsf reset";
|
||||||
|
case WIFI_REASON_ROAMING: // 207,
|
||||||
|
return "roaming";
|
||||||
|
case WIFI_REASON_ASSOC_COMEBACK_TIME_TOO_LONG: // 208,
|
||||||
|
return "assoc comeback time too long";
|
||||||
|
case WIFI_REASON_SA_QUERY_TIMEOUT: // 209,
|
||||||
|
return "sa query timeout";
|
||||||
|
default:
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// handles both WiFI and Ethernet
|
||||||
|
void NetworkSettingsService::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) {
|
||||||
|
#ifndef EMSESP_STANDALONE
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case ARDUINO_EVENT_WIFI_STA_STOP:
|
||||||
if (_stopping) {
|
if (_stopping) {
|
||||||
_lastConnectionAttempt = 0;
|
_lastConnectionAttempt = 0;
|
||||||
_stopping = false;
|
_stopping = false;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
|
||||||
|
emsesp::EMSESP::logger().warning("WiFi disconnected. Reason: %s (%d)",
|
||||||
|
disconnectReason(info.wifi_sta_disconnected.reason),
|
||||||
|
info.wifi_sta_disconnected.reason); // IDF 4.0
|
||||||
|
emsesp::EMSESP::system_.has_ipv6(false);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
|
||||||
|
char result[10];
|
||||||
|
emsesp::EMSESP::logger().info("WiFi connected with IP=%s, hostname=%s, TxPower=%s",
|
||||||
|
WiFi.localIP().toString().c_str(),
|
||||||
|
WiFi.getHostname(),
|
||||||
|
emsesp::Helpers::render_value(result, (double)(WiFi.getTxPower() / 4), 1));
|
||||||
|
|
||||||
|
mDNS_start();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ARDUINO_EVENT_ETH_START:
|
||||||
|
ETH.setHostname(emsesp::EMSESP::system_.hostname().c_str());
|
||||||
|
|
||||||
|
// configure for static IP
|
||||||
|
if (_state.staticIPConfig) {
|
||||||
|
ETH.config(_state.localIP, _state.gatewayIP, _state.subnetMask, _state.dnsIP1, _state.dnsIP2);
|
||||||
}
|
}
|
||||||
// if (!_stopping && (event == ARDUINO_EVENT_WIFI_STA_LOST_IP || event == ARDUINO_EVENT_WIFI_STA_DISCONNECTED)) {
|
break;
|
||||||
// reconfigureWiFiConnection();
|
|
||||||
// }
|
case ARDUINO_EVENT_ETH_GOT_IP:
|
||||||
|
// prevent double calls
|
||||||
|
if (!emsesp::EMSESP::system_.ethernet_connected()) {
|
||||||
|
emsesp::EMSESP::logger().info("Ethernet connected with IP=%s, speed %d Mbps", ETH.localIP().toString().c_str(), ETH.linkSpeed());
|
||||||
|
emsesp::EMSESP::system_.ethernet_connected(true);
|
||||||
|
mDNS_start();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ARDUINO_EVENT_ETH_DISCONNECTED:
|
||||||
|
emsesp::EMSESP::logger().warning("Ethernet disconnected");
|
||||||
|
emsesp::EMSESP::system_.ethernet_connected(false);
|
||||||
|
emsesp::EMSESP::system_.has_ipv6(false);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ARDUINO_EVENT_ETH_STOP:
|
||||||
|
emsesp::EMSESP::logger().info("Ethernet stopped");
|
||||||
|
emsesp::EMSESP::system_.ethernet_connected(false);
|
||||||
|
emsesp::EMSESP::system_.has_ipv6(false);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
|
||||||
|
if (_state.enableIPv6) {
|
||||||
|
WiFi.enableIpV6();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ARDUINO_EVENT_ETH_CONNECTED:
|
||||||
|
if (_state.enableIPv6) {
|
||||||
|
ETH.enableIpV6();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// IPv6 specific
|
||||||
|
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
|
||||||
|
case ARDUINO_EVENT_ETH_GOT_IP6:
|
||||||
|
if (emsesp::EMSESP::system_.ethernet_connected()) {
|
||||||
|
emsesp::EMSESP::logger().info("Ethernet connected with IPv6=%s, speed %d Mbps", ETH.localIPv6().toString().c_str(), ETH.linkSpeed());
|
||||||
|
} else {
|
||||||
|
emsesp::EMSESP::logger().info("WiFi connected with IPv6=%s, hostname=%s", WiFi.localIPv6().toString().c_str(), WiFi.getHostname());
|
||||||
|
}
|
||||||
|
mDNS_start();
|
||||||
|
emsesp::EMSESP::system_.has_ipv6(true);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,8 +9,13 @@
|
|||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
#include <esp_wifi.h>
|
#include <esp_wifi.h>
|
||||||
#include <ETH.h>
|
#include <ETH.h>
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <AsyncTCP.h>
|
||||||
|
#include <ESPmDNS.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <helpers.h>
|
||||||
|
|
||||||
#define NETWORK_SETTINGS_FILE "/config/networkSettings.json"
|
#define NETWORK_SETTINGS_FILE "/config/networkSettings.json"
|
||||||
#define NETWORK_SETTINGS_SERVICE_PATH "/rest/networkSettings"
|
#define NETWORK_SETTINGS_SERVICE_PATH "/rest/networkSettings"
|
||||||
#define WIFI_RECONNECTION_DELAY 1000 * 3
|
#define WIFI_RECONNECTION_DELAY 1000 * 3
|
||||||
@@ -27,6 +32,37 @@
|
|||||||
#define FACTORY_WIFI_HOSTNAME ""
|
#define FACTORY_WIFI_HOSTNAME ""
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_IDF_TARGET_ESP32S2
|
||||||
|
#define MAX_TX_PWR_DBM_11b 195
|
||||||
|
#define MAX_TX_PWR_DBM_54g 150
|
||||||
|
#define MAX_TX_PWR_DBM_n 130
|
||||||
|
#define WIFI_SENSITIVITY_11b -880
|
||||||
|
#define WIFI_SENSITIVITY_54g -750
|
||||||
|
#define WIFI_SENSITIVITY_n -720
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32S3
|
||||||
|
#define MAX_TX_PWR_DBM_11b 210
|
||||||
|
#define MAX_TX_PWR_DBM_54g 190
|
||||||
|
#define MAX_TX_PWR_DBM_n 185
|
||||||
|
#define WIFI_SENSITIVITY_11b -880
|
||||||
|
#define WIFI_SENSITIVITY_54g -760
|
||||||
|
#define WIFI_SENSITIVITY_n -720
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3
|
||||||
|
#define MAX_TX_PWR_DBM_11b 210
|
||||||
|
#define MAX_TX_PWR_DBM_54g 190
|
||||||
|
#define MAX_TX_PWR_DBM_n 185
|
||||||
|
#define WIFI_SENSITIVITY_11b -880
|
||||||
|
#define WIFI_SENSITIVITY_54g -760
|
||||||
|
#define WIFI_SENSITIVITY_n -730
|
||||||
|
#else
|
||||||
|
#define MAX_TX_PWR_DBM_11b 195
|
||||||
|
#define MAX_TX_PWR_DBM_54g 160
|
||||||
|
#define MAX_TX_PWR_DBM_n 140
|
||||||
|
#define WIFI_SENSITIVITY_11b -880
|
||||||
|
#define WIFI_SENSITIVITY_54g -750
|
||||||
|
#define WIFI_SENSITIVITY_n -700
|
||||||
|
#endif
|
||||||
|
|
||||||
class NetworkSettings {
|
class NetworkSettings {
|
||||||
public:
|
public:
|
||||||
// core wifi configuration
|
// core wifi configuration
|
||||||
@@ -84,7 +120,7 @@ class NetworkSettings {
|
|||||||
settings.staticIPConfig = root["static_ip_config"] | false;
|
settings.staticIPConfig = root["static_ip_config"] | false;
|
||||||
settings.enableIPv6 = root["enableIPv6"] | false;
|
settings.enableIPv6 = root["enableIPv6"] | false;
|
||||||
settings.bandwidth20 = root["bandwidth20"] | false;
|
settings.bandwidth20 = root["bandwidth20"] | false;
|
||||||
settings.tx_power = root["tx_power"] | 20;
|
settings.tx_power = root["tx_power"] | 0;
|
||||||
settings.nosleep = root["nosleep"] | false;
|
settings.nosleep = root["nosleep"] | false;
|
||||||
settings.enableMDNS = root["enableMDNS"] | true;
|
settings.enableMDNS = root["enableMDNS"] | true;
|
||||||
settings.enableCORS = root["enableCORS"] | false;
|
settings.enableCORS = root["enableCORS"] | false;
|
||||||
@@ -127,13 +163,16 @@ class NetworkSettingsService : public StatefulService<NetworkSettings> {
|
|||||||
private:
|
private:
|
||||||
HttpEndpoint<NetworkSettings> _httpEndpoint;
|
HttpEndpoint<NetworkSettings> _httpEndpoint;
|
||||||
FSPersistence<NetworkSettings> _fsPersistence;
|
FSPersistence<NetworkSettings> _fsPersistence;
|
||||||
|
|
||||||
unsigned long _lastConnectionAttempt;
|
unsigned long _lastConnectionAttempt;
|
||||||
|
|
||||||
bool _stopping;
|
bool _stopping;
|
||||||
void WiFiEvent(WiFiEvent_t event);
|
|
||||||
|
|
||||||
|
void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info);
|
||||||
|
void mDNS_start() const;
|
||||||
|
const char * disconnectReason(uint8_t code);
|
||||||
void reconfigureWiFiConnection();
|
void reconfigureWiFiConnection();
|
||||||
void manageSTA();
|
void manageSTA();
|
||||||
|
void setWiFiPower();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,15 +1,11 @@
|
|||||||
#ifndef NetworkStatus_h
|
#ifndef NetworkStatus_h
|
||||||
#define NetworkStatus_h
|
#define NetworkStatus_h
|
||||||
|
|
||||||
#include <WiFi.h>
|
|
||||||
#include <AsyncTCP.h>
|
|
||||||
|
|
||||||
#include <ETH.h>
|
|
||||||
|
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
#include <ESPAsyncWebServer.h>
|
#include <ESPAsyncWebServer.h>
|
||||||
#include <IPAddress.h>
|
#include <IPAddress.h>
|
||||||
#include <IPUtils.h>
|
#include <IPUtils.h>
|
||||||
|
|
||||||
#include <SecurityManager.h>
|
#include <SecurityManager.h>
|
||||||
|
|
||||||
#define MAX_NETWORK_STATUS_SIZE 1024
|
#define MAX_NETWORK_STATUS_SIZE 1024
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ class DummySettings {
|
|||||||
bool enableMDNS = true;
|
bool enableMDNS = true;
|
||||||
bool enableCORS = false;
|
bool enableCORS = false;
|
||||||
String CORSOrigin = "*";
|
String CORSOrigin = "*";
|
||||||
|
uint8_t tx_power = 0;
|
||||||
|
|
||||||
static void read(DummySettings & settings, JsonObject root){};
|
static void read(DummySettings & settings, JsonObject root){};
|
||||||
static void read(DummySettings & settings){};
|
static void read(DummySettings & settings){};
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ let network_settings = {
|
|||||||
password: 'myPassword',
|
password: 'myPassword',
|
||||||
hostname: 'ems-esp',
|
hostname: 'ems-esp',
|
||||||
nosleep: true,
|
nosleep: true,
|
||||||
tx_power: 20,
|
tx_power: 0,
|
||||||
bandwidth20: false,
|
bandwidth20: false,
|
||||||
static_ip_config: false,
|
static_ip_config: false,
|
||||||
enableMDNS: true,
|
enableMDNS: true,
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ network_settings = {
|
|||||||
password: 'myPassword',
|
password: 'myPassword',
|
||||||
hostname: 'ems-esp',
|
hostname: 'ems-esp',
|
||||||
nosleep: true,
|
nosleep: true,
|
||||||
tx_power: 20,
|
tx_power: 0,
|
||||||
bandwidth20: false,
|
bandwidth20: false,
|
||||||
static_ip_config: false,
|
static_ip_config: false,
|
||||||
enableMDNS: true,
|
enableMDNS: true,
|
||||||
|
|||||||
@@ -1748,6 +1748,7 @@ void EMSdevice::mqtt_ha_entity_config_create() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO remove CMD - see https://github.com/emsesp/EMS-ESP32/issues/1605
|
||||||
if (!dv.has_state(DeviceValueState::DV_HA_CONFIG_CREATED) && (dv.type != DeviceValueType::CMD) && dv.has_state(DeviceValueState::DV_ACTIVE)
|
if (!dv.has_state(DeviceValueState::DV_HA_CONFIG_CREATED) && (dv.type != DeviceValueType::CMD) && dv.has_state(DeviceValueState::DV_ACTIVE)
|
||||||
&& !dv.has_state(DeviceValueState::DV_API_MQTT_EXCLUDE)) {
|
&& !dv.has_state(DeviceValueState::DV_API_MQTT_EXCLUDE)) {
|
||||||
// create_device_config is only done once for the EMS device. It can added to any entity, so we take the first
|
// create_device_config is only done once for the EMS device. It can added to any entity, so we take the first
|
||||||
|
|||||||
@@ -1131,7 +1131,7 @@ bool System::check_upgrade(bool factory_settings) {
|
|||||||
|
|
||||||
// if we're coming from 3.4.4 or 3.5.0b14 which had no version stored then we need to apply new settings
|
// if we're coming from 3.4.4 or 3.5.0b14 which had no version stored then we need to apply new settings
|
||||||
if (missing_version) {
|
if (missing_version) {
|
||||||
LOG_DEBUG("Setting MQTT Entity ID format to v3.4 format");
|
LOG_INFO("Setting MQTT Entity ID format to v3.4 format");
|
||||||
EMSESP::esp8266React.getMqttSettingsService()->update(
|
EMSESP::esp8266React.getMqttSettingsService()->update(
|
||||||
[&](MqttSettings & mqttSettings) {
|
[&](MqttSettings & mqttSettings) {
|
||||||
mqttSettings.entity_format = 0; // use old Entity ID format from v3.4
|
mqttSettings.entity_format = 0; // use old Entity ID format from v3.4
|
||||||
@@ -1139,6 +1139,19 @@ bool System::check_upgrade(bool factory_settings) {
|
|||||||
},
|
},
|
||||||
"local");
|
"local");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Network Settings Wifi tx_power is now using the value * 4.
|
||||||
|
EMSESP::esp8266React.getNetworkSettingsService()->update(
|
||||||
|
[&](NetworkSettings & networkSettings) {
|
||||||
|
if (networkSettings.tx_power == 20) {
|
||||||
|
networkSettings.tx_power = 0; // use Auto
|
||||||
|
LOG_INFO("Setting WiFi TX Power to Auto");
|
||||||
|
return StateUpdateResult::CHANGED;
|
||||||
|
}
|
||||||
|
return StateUpdateResult::UNCHANGED;
|
||||||
|
},
|
||||||
|
"local");
|
||||||
|
|
||||||
} else if (this_version < settings_version) {
|
} else if (this_version < settings_version) {
|
||||||
// need downgrade
|
// need downgrade
|
||||||
LOG_NOTICE("Downgrading to version %d.%d.%d-%s", this_version.major(), this_version.minor(), this_version.patch(), this_version.prerelease().c_str());
|
LOG_NOTICE("Downgrading to version %d.%d.%d-%s", this_version.major(), this_version.minor(), this_version.patch(), this_version.prerelease().c_str());
|
||||||
|
|||||||
@@ -23,95 +23,9 @@ using namespace std::placeholders; // for `_1` etc
|
|||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
WebStatusService::WebStatusService(AsyncWebServer * server, SecurityManager * securityManager) {
|
WebStatusService::WebStatusService(AsyncWebServer * server, SecurityManager * securityManager) {
|
||||||
// rest endpoint for web page
|
|
||||||
server->on(EMSESP_STATUS_SERVICE_PATH,
|
server->on(EMSESP_STATUS_SERVICE_PATH,
|
||||||
HTTP_GET,
|
HTTP_GET,
|
||||||
securityManager->wrapRequest(std::bind(&WebStatusService::webStatusService, this, _1), AuthenticationPredicates::IS_AUTHENTICATED));
|
securityManager->wrapRequest(std::bind(&WebStatusService::webStatusService, this, _1), AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
WiFi.onEvent(std::bind(&WebStatusService::WiFiEvent, this, _1, _2));
|
|
||||||
}
|
|
||||||
|
|
||||||
// handles both WiFI and Ethernet
|
|
||||||
void WebStatusService::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) {
|
|
||||||
#ifndef EMSESP_STANDALONE
|
|
||||||
|
|
||||||
switch (event) {
|
|
||||||
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
|
|
||||||
EMSESP::logger().warning("WiFi disconnected. Reason: %s (%d)",
|
|
||||||
disconnectReason(info.wifi_sta_disconnected.reason),
|
|
||||||
info.wifi_sta_disconnected.reason); // IDF 4.0
|
|
||||||
EMSESP::system_.has_ipv6(false);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
|
|
||||||
EMSESP::logger().info("WiFi connected with IP=%s, hostname=%s", WiFi.localIP().toString().c_str(), WiFi.getHostname());
|
|
||||||
mDNS_start();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ARDUINO_EVENT_ETH_START:
|
|
||||||
// EMSESP::logger().info("Ethernet initialized");
|
|
||||||
ETH.setHostname(EMSESP::system_.hostname().c_str());
|
|
||||||
|
|
||||||
// configure for static IP
|
|
||||||
EMSESP::esp8266React.getNetworkSettingsService()->read([&](NetworkSettings & networkSettings) {
|
|
||||||
if (networkSettings.staticIPConfig) {
|
|
||||||
ETH.config(networkSettings.localIP, networkSettings.gatewayIP, networkSettings.subnetMask, networkSettings.dnsIP1, networkSettings.dnsIP2);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ARDUINO_EVENT_ETH_GOT_IP:
|
|
||||||
// prevent double calls
|
|
||||||
if (!EMSESP::system_.ethernet_connected()) {
|
|
||||||
EMSESP::logger().info("Ethernet connected with IP=%s, speed %d Mbps", ETH.localIP().toString().c_str(), ETH.linkSpeed());
|
|
||||||
EMSESP::system_.ethernet_connected(true);
|
|
||||||
mDNS_start();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ARDUINO_EVENT_ETH_DISCONNECTED:
|
|
||||||
EMSESP::logger().warning("Ethernet disconnected");
|
|
||||||
EMSESP::system_.ethernet_connected(false);
|
|
||||||
EMSESP::system_.has_ipv6(false);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ARDUINO_EVENT_ETH_STOP:
|
|
||||||
EMSESP::logger().info("Ethernet stopped");
|
|
||||||
EMSESP::system_.ethernet_connected(false);
|
|
||||||
EMSESP::system_.has_ipv6(false);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
|
|
||||||
EMSESP::esp8266React.getNetworkSettingsService()->read([&](NetworkSettings & networkSettings) {
|
|
||||||
if (networkSettings.enableIPv6) {
|
|
||||||
WiFi.enableIpV6();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ARDUINO_EVENT_ETH_CONNECTED:
|
|
||||||
EMSESP::esp8266React.getNetworkSettingsService()->read([&](NetworkSettings & networkSettings) {
|
|
||||||
if (networkSettings.enableIPv6) {
|
|
||||||
ETH.enableIpV6();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
|
|
||||||
case ARDUINO_EVENT_ETH_GOT_IP6:
|
|
||||||
if (EMSESP::system_.ethernet_connected()) {
|
|
||||||
EMSESP::logger().info("Ethernet connected with IPv6=%s, speed %d Mbps", ETH.localIPv6().toString().c_str(), ETH.linkSpeed());
|
|
||||||
} else {
|
|
||||||
EMSESP::logger().info("WiFi connected with IPv6=%s, hostname=%s", WiFi.localIPv6().toString().c_str(), WiFi.getHostname());
|
|
||||||
}
|
|
||||||
mDNS_start();
|
|
||||||
EMSESP::system_.has_ipv6(true);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebStatusService::webStatusService(AsyncWebServerRequest * request) {
|
void WebStatusService::webStatusService(AsyncWebServerRequest * request) {
|
||||||
@@ -193,112 +107,4 @@ void WebStatusService::webStatusService(AsyncWebServerRequest * request) {
|
|||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
// start the multicast UDP service so EMS-ESP is discoverable via .local
|
|
||||||
void WebStatusService::mDNS_start() const {
|
|
||||||
#ifndef EMSESP_STANDALONE
|
|
||||||
MDNS.end();
|
|
||||||
EMSESP::esp8266React.getNetworkSettingsService()->read([&](NetworkSettings & networkSettings) {
|
|
||||||
if (networkSettings.enableMDNS) {
|
|
||||||
if (!MDNS.begin(EMSESP::system_.hostname().c_str())) {
|
|
||||||
EMSESP::logger().warning("Failed to start mDNS responder service");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string address_s = EMSESP::system_.hostname() + ".local";
|
|
||||||
|
|
||||||
MDNS.addService("http", "tcp", 80); // add our web server and rest API
|
|
||||||
MDNS.addService("telnet", "tcp", 23); // add our telnet console
|
|
||||||
|
|
||||||
MDNS.addServiceTxt("http", "tcp", "version", EMSESP_APP_VERSION);
|
|
||||||
MDNS.addServiceTxt("http", "tcp", "address", address_s.c_str());
|
|
||||||
|
|
||||||
EMSESP::logger().info("mDNS responder service started");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
#else
|
|
||||||
EMSESP::esp8266React.getNetworkSettingsService()->read([&](NetworkSettings & networkSettings) {
|
|
||||||
if (networkSettings.enableMDNS) {
|
|
||||||
EMSESP::logger().info("mDNS responder service started");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
const char * WebStatusService::disconnectReason(uint8_t code) {
|
|
||||||
#ifndef EMSESP_STANDALONE
|
|
||||||
switch (code) {
|
|
||||||
case WIFI_REASON_UNSPECIFIED: // = 1,
|
|
||||||
return "unspecified";
|
|
||||||
case WIFI_REASON_AUTH_EXPIRE: // = 2,
|
|
||||||
return "auth expire";
|
|
||||||
case WIFI_REASON_AUTH_LEAVE: // = 3,
|
|
||||||
return "auth leave";
|
|
||||||
case WIFI_REASON_ASSOC_EXPIRE: // = 4,
|
|
||||||
return "assoc expired";
|
|
||||||
case WIFI_REASON_ASSOC_TOOMANY: // = 5,
|
|
||||||
return "assoc too many";
|
|
||||||
case WIFI_REASON_NOT_AUTHED: // = 6,
|
|
||||||
return "not authenticated";
|
|
||||||
case WIFI_REASON_NOT_ASSOCED: // = 7,
|
|
||||||
return "not assoc";
|
|
||||||
case WIFI_REASON_ASSOC_LEAVE: // = 8,
|
|
||||||
return "assoc leave";
|
|
||||||
case WIFI_REASON_ASSOC_NOT_AUTHED: // = 9,
|
|
||||||
return "assoc not authed";
|
|
||||||
case WIFI_REASON_DISASSOC_PWRCAP_BAD: // = 10,
|
|
||||||
return "disassoc powerCAP bad";
|
|
||||||
case WIFI_REASON_DISASSOC_SUPCHAN_BAD: // = 11,
|
|
||||||
return "disassoc supchan bad";
|
|
||||||
case WIFI_REASON_IE_INVALID: // = 13,
|
|
||||||
return "IE invalid";
|
|
||||||
case WIFI_REASON_MIC_FAILURE: // = 14,
|
|
||||||
return "MIC failure";
|
|
||||||
case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT: // = 15,
|
|
||||||
return "4way handshake timeout";
|
|
||||||
case WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT: // = 16,
|
|
||||||
return "group key-update timeout";
|
|
||||||
case WIFI_REASON_IE_IN_4WAY_DIFFERS: // = 17,
|
|
||||||
return "IE in 4way differs";
|
|
||||||
case WIFI_REASON_GROUP_CIPHER_INVALID: // = 18,
|
|
||||||
return "group cipher invalid";
|
|
||||||
case WIFI_REASON_PAIRWISE_CIPHER_INVALID: // = 19,
|
|
||||||
return "pairwise cipher invalid";
|
|
||||||
case WIFI_REASON_AKMP_INVALID: // = 20,
|
|
||||||
return "AKMP invalid";
|
|
||||||
case WIFI_REASON_UNSUPP_RSN_IE_VERSION: // = 21,
|
|
||||||
return "unsupported RSN_IE version";
|
|
||||||
case WIFI_REASON_INVALID_RSN_IE_CAP: // = 22,
|
|
||||||
return "invalid RSN_IE_CAP";
|
|
||||||
case WIFI_REASON_802_1X_AUTH_FAILED: // = 23,
|
|
||||||
return "802 X1 auth failed";
|
|
||||||
case WIFI_REASON_CIPHER_SUITE_REJECTED: // = 24,
|
|
||||||
return "cipher suite rejected";
|
|
||||||
case WIFI_REASON_BEACON_TIMEOUT: // = 200,
|
|
||||||
return "beacon timeout";
|
|
||||||
case WIFI_REASON_NO_AP_FOUND: // = 201,
|
|
||||||
return "no AP found";
|
|
||||||
case WIFI_REASON_AUTH_FAIL: // = 202,
|
|
||||||
return "auth fail";
|
|
||||||
case WIFI_REASON_ASSOC_FAIL: // = 203,
|
|
||||||
return "assoc fail";
|
|
||||||
case WIFI_REASON_HANDSHAKE_TIMEOUT: // = 204,
|
|
||||||
return "handshake timeout";
|
|
||||||
case WIFI_REASON_CONNECTION_FAIL: // 205,
|
|
||||||
return "connection fail";
|
|
||||||
case WIFI_REASON_AP_TSF_RESET: // 206,
|
|
||||||
return "AP tsf reset";
|
|
||||||
case WIFI_REASON_ROAMING: // 207,
|
|
||||||
return "roaming";
|
|
||||||
case WIFI_REASON_ASSOC_COMEBACK_TIME_TOO_LONG: // 208,
|
|
||||||
return "assoc comeback time too long";
|
|
||||||
case WIFI_REASON_SA_QUERY_TIMEOUT: // 209,
|
|
||||||
return "sa query timeout";
|
|
||||||
default:
|
|
||||||
return "unknown";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace emsesp
|
} // namespace emsesp
|
||||||
@@ -19,8 +19,6 @@
|
|||||||
#ifndef WebStatusService_h
|
#ifndef WebStatusService_h
|
||||||
#define WebStatusService_h
|
#define WebStatusService_h
|
||||||
|
|
||||||
#include <ESPmDNS.h>
|
|
||||||
|
|
||||||
#define EMSESP_STATUS_SERVICE_PATH "/rest/status"
|
#define EMSESP_STATUS_SERVICE_PATH "/rest/status"
|
||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
@@ -31,9 +29,6 @@ class WebStatusService {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void webStatusService(AsyncWebServerRequest * request);
|
void webStatusService(AsyncWebServerRequest * request);
|
||||||
void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info);
|
|
||||||
void mDNS_start() const;
|
|
||||||
const char * disconnectReason(uint8_t code);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace emsesp
|
} // namespace emsesp
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"static_ip_config": false,
|
"static_ip_config": false,
|
||||||
"enableIPv6": false,
|
"enableIPv6": false,
|
||||||
"bandwidth20": false,
|
"bandwidth20": false,
|
||||||
"tx_power": 20,
|
"tx_power": 0,
|
||||||
"nosleep": false,
|
"nosleep": false,
|
||||||
"enableMDNS": true,
|
"enableMDNS": true,
|
||||||
"enableCORS": false,
|
"enableCORS": false,
|
||||||
|
|||||||
Reference in New Issue
Block a user