mirror of
https://github.com/arendst/Tasmota.git
synced 2025-04-24 23:07:17 +00:00
Merge branch 'development' into pre-release
This commit is contained in:
commit
c7aeadcd6b
@ -64,7 +64,9 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
|
||||
- Add Zigbee command ``ZbUnbind``
|
||||
- Add Zigbee command ``ZbBindState`` and ``manuf``attribute
|
||||
- Add commands ``CounterDebounceLow`` and ``CounterDebounceHigh`` to control debouncing (#8021)
|
||||
- Add command ``SetOption41 <x>`` to force sending gratuitous ARP every <x> seconds
|
||||
- Add command ``SetOption90 1`` to disable non-json MQTT messages (#8044)
|
||||
- Add command ``SetOption91 1`` to enable fading at startup / power on
|
||||
- Add command ``Sensor10 0/1/2`` to control BH1750 resolution - 0 = High (default), 1 = High2, 2 = Low (#8016)
|
||||
- Add command ``Sensor10 31..254`` to control BH1750 measurement time which defaults to 69 (#8016)
|
||||
- Add support for unreachable (unplugged) Zigbee devices in Philips Hue emulation and Alexa
|
||||
@ -72,3 +74,4 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
|
||||
- Add support for up to four MQTT GroupTopics using the same optional Device Group names (#8014)
|
||||
- Add console command history (#7483, #8015)
|
||||
- Add support for longer template names
|
||||
- Add quick wifi reconnect using saved AP parameters when ``SetOption56 0`` (#3189)
|
||||
|
@ -18,6 +18,8 @@
|
||||
- Add command ``Sensor10 0/1/2`` to control BH1750 resolution - 0 = High (default), 1 = High2, 2 = Low (#8016)
|
||||
- Add command ``Sensor10 31..254`` to control BH1750 measurement time which defaults to 69 (#8016)
|
||||
- Add command ``SetOption91 1`` to enable fading at startup / power on
|
||||
- Add command ``SetOption41 <x>`` to force sending gratuitous ARP every <x> seconds
|
||||
- Add quick wifi reconnect using saved AP parameters when ``SetOption56 0`` (#3189)
|
||||
|
||||
### 8.2.0.2 20200328
|
||||
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "в режим"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Грешка при свързването, не е получен IP адрес"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Грешка при свързването, точката за достъп е недостижима"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Грешка при свързването, грешна парола към точката за достъп"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Грешка при свързването"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Грешка при свързването, превишено време за изчакване"
|
||||
#define D_ATTEMPTING_CONNECTION "Опитва свързване..."
|
||||
#define D_CHECKING_CONNECTION "Проверка на свързването..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "v módu"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba připojení, nebyla obdržena IP adresa"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba připojení, nedostupný AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba připojení, nesprávné heslo pro AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba připojení"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba připojení, uplynul AP timeout"
|
||||
#define D_ATTEMPTING_CONNECTION "Připojování..."
|
||||
#define D_CHECKING_CONNECTION "Zkouška spojení..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "in Modus"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Verbindung fehlgeschlagen, da keine IP-Adresse zugeteilt wurde"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Verbindung fehlgeschlagen, da AP nicht erreicht werden konnte"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbindung fehlgeschlagen, da das Passwort falsch ist"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbindung fehlgeschlagen"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Verbindung fehlgeschlagen, da der AP nicht antwortet (timeout)"
|
||||
#define D_ATTEMPTING_CONNECTION "Verbindungsversuch..."
|
||||
#define D_CHECKING_CONNECTION "Prüfe Verbindung..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "σε mode"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Αποτυχία σύνδεσης, δεν απονεμήθηκε διεύθυνση IP"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Αποτυχία σύνδεσης, δεν ανταποκρίνεται το AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Αποτυχία σύνδεσης, λάθος κωδικός για το AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Αποτυχία σύνδεσης"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Αποτυχία σύνδεσης, λήξη ορίου απόκρισης από το AP"
|
||||
#define D_ATTEMPTING_CONNECTION "Προσπάθεια για σύνδεση..."
|
||||
#define D_CHECKING_CONNECTION "Έλεγχος σύνδεσης..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "in mode"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connect failed as no IP address received"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Connect failed as AP cannot be reached"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Connect failed with AP incorrect password"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Connect failed"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Connect failed with AP timeout"
|
||||
#define D_ATTEMPTING_CONNECTION "Attempting connection..."
|
||||
#define D_CHECKING_CONNECTION "Checking connection..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "en modo"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Falló Conexión, Dirección IP no recibida"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Falló Conexión, AP no pudo ser contactado"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Falló Conexión, clave de AP incorrecta"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Falló Conexión"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Falló Conexión, timeout de AP"
|
||||
#define D_ATTEMPTING_CONNECTION "Intentando conectar..."
|
||||
#define D_CHECKING_CONNECTION "Probando conexión..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "en mode"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Échec de connexion car aucune adresse IP n'a été reçue"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Échec de connexion car l'AP ne peut-être contacté"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Échec de connexion car le mot de passe de l'AP est incorrect"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Échec de connexion"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Échec de connexion avec l'AP, expiré"
|
||||
#define D_ATTEMPTING_CONNECTION "Tentative de connexion..."
|
||||
#define D_CHECKING_CONNECTION "Vérification connexion..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "במצב"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP החיבור נכשל מכיוון שלא התקבלה כתובת"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "זמין AP החיבור נכשל כיוון שאין"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "סיסמא שגויה , AP חיבור נכשל ל"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "AP חיבור נכשל ל"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "פג זמן המתנה , AP חיבור נכשל ל"
|
||||
#define D_ATTEMPTING_CONNECTION "...מנסה להתחבר"
|
||||
#define D_CHECKING_CONNECTION "...בודק חיבור"
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "mód:"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Sikertelen csatlakozás, nincs kiosztott IP cím"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Sikertelen csatlakozás, AP nem elérhető"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Sikertelen csatlakozás, hibás AP jelszó"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Sikertelen csatlakozás"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Sikertelen csatlakozás AP időtúllépés miatt"
|
||||
#define D_ATTEMPTING_CONNECTION "Csatlakozás..."
|
||||
#define D_CHECKING_CONNECTION "Kapcsolat ellenőrzése..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "In modalità"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Connessione fallita - indirizzo IP non ricevuto"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Connessione fallita - AP non raggiungibile"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Connessione fallita - password AP non corretta"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Connessione fallita"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Connessione fallita - timeout AP"
|
||||
#define D_ATTEMPTING_CONNECTION "Tentativo di connessione..."
|
||||
#define D_CHECKING_CONNECTION "Controllo connessione..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "in mode"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP 주소가 수신되지 않아 연결이 실패했습니다"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "연결이 닿지 않아 AP에 연결할 수 없습니다"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "비밀번호가 틀려 AP에 연결할 수 없습니다"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "연결할 수 없습니다"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "시간초과로 AP에 연결할 수 없습니다"
|
||||
#define D_ATTEMPTING_CONNECTION "연결 시도 중..."
|
||||
#define D_CHECKING_CONNECTION "연결 체크 중..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "in stand"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Verbinding mislukt omdat geen IP adres werd ontvangen"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Verbinding mislukt omdat AP onbereikbaar is"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbinding mislukt door fout wachtwoord"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Verbinding mislukt"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Verbinding mislukt door AP time-out"
|
||||
#define D_ATTEMPTING_CONNECTION "Verbinden..."
|
||||
#define D_CHECKING_CONNECTION "Controleer verbinding..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "w trybie"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Połączenie nie powiodło się, ponieważ nie otrzymano adresu IP"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Połączenie nie powiodło się, AP nie osiągalny"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Połączenie nie powiodło się, nieprawidlowe hasło"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Połączenie nie powiodło się"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Nie udało się nawiązac połączenia, limit czasu przekroczony"
|
||||
#define D_ATTEMPTING_CONNECTION "Próba połączenia..."
|
||||
#define D_CHECKING_CONNECTION "Sprawdzanie połączenia..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "em modo"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "A ligação falhou porque nenhum endereço IP foi recebido"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "A ligação falhou porque o PA não pôde ser alcançado"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou porque a senha está incorreta"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "A ligação falhou porque o tempo foi excedido"
|
||||
#define D_ATTEMPTING_CONNECTION "Ligando..."
|
||||
#define D_CHECKING_CONNECTION "Verificando ligação..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "em modo"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "A ligação falhou porque nenhum endereço IP foi recebido"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "A ligação falhou porque o AP não pode ser alcançado"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou porque a palavra chave está incorreta"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "A ligação falhou"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "A ligação falhou porque o tempo excedeu"
|
||||
#define D_ATTEMPTING_CONNECTION "A ligar..."
|
||||
#define D_CHECKING_CONNECTION "A verificar ligação..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "in mode"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Conexiune eșuată, lipsă primire adresă IP"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Conexiune eșuată, nu s-a găsit AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Conexiune eșuată, parolă greșită AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Conexiune eșuată"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Conexiune eșuată, expirare timp AP"
|
||||
#define D_ATTEMPTING_CONNECTION "Conectare in curs ..."
|
||||
#define D_CHECKING_CONNECTION "Verificare conexiune..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "в режиме"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Ошибка подключения, IP-адрес не получен"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Ошибка соединения, AP не может быть достигнута"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Ошибка соединения, неверный пароль к AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Ошибка соединения"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Ошибка соединения с AP по тайм-ауту"
|
||||
#define D_ATTEMPTING_CONNECTION "Попытка подключения..."
|
||||
#define D_CHECKING_CONNECTION "Проверка соединения..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "v režime"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Chyba pripojenia, nebola obdržaná IP adresa"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Chyba pripojenia, nedostupný AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba pripojenia, nesprávne heslo pre AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Chyba pripojenia"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Chyba pripojenia, uplynul AP timeout"
|
||||
#define D_ATTEMPTING_CONNECTION "Pripájanie..."
|
||||
#define D_CHECKING_CONNECTION "Skúška spojenia..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "i läge"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Anslutning misslyckades mottog ingen IP-adress"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Anslutning misslyckades, kunde inte nå AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Anslutning misslyckades, fel lösenord för AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Anslutning misslyckades"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Anslutning misslyckadess med AP, timeout"
|
||||
#define D_ATTEMPTING_CONNECTION "Försöker ansluta..."
|
||||
#define D_CHECKING_CONNECTION "Kontrollerar anslutning..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "modunda"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "IP adresi alınamadığı için bağlantı kurulamadı"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Ap'ye ulaşılamadı"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Girilen parolayı AP kabul etmedi"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Bağlantı sağlanamadı"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "AP'ye bağlanılırken süre aşımı oluştu"
|
||||
#define D_ATTEMPTING_CONNECTION "Yeniden bağlanılıyor..."
|
||||
#define D_CHECKING_CONNECTION "Bağlantı kontrol ediliyor..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "в режимі"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "Помилка підключення, IP-адреса не отримана"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "Помилка з'єднання, AP не знайдено"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Помилка з'єднання, невірне гасло до AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "Помилка з'єднання"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "Помилка з'єднання з AP по тайм-ауту"
|
||||
#define D_ATTEMPTING_CONNECTION "Спроба підключення..."
|
||||
#define D_CHECKING_CONNECTION "Перевірка з'єднання..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "模式:"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "连接失败,因为没有获取到 IP 地址"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "连接失败,无法连接 AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "连接失败,AP 密码不正确"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "连接失败"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "连接失败,AP 超时"
|
||||
#define D_ATTEMPTING_CONNECTION "尝试连接..."
|
||||
#define D_CHECKING_CONNECTION "检查连接..."
|
||||
|
@ -210,7 +210,7 @@
|
||||
#define D_IN_MODE "模式:"
|
||||
#define D_CONNECT_FAILED_NO_IP_ADDRESS "連接失敗,因為沒有獲取到IP地址"
|
||||
#define D_CONNECT_FAILED_AP_NOT_REACHED "連接失敗,無法連接AP"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "連接失敗,AP密碼不正確"
|
||||
#define D_CONNECT_FAILED_WRONG_PASSWORD "連接失敗"
|
||||
#define D_CONNECT_FAILED_AP_TIMEOUT "連接失敗,AP超時"
|
||||
#define D_ATTEMPTING_CONNECTION "嘗試連接..."
|
||||
#define D_CHECKING_CONNECTION "檢查連接..."
|
||||
|
@ -470,8 +470,10 @@ struct SYSCFG {
|
||||
uint8_t bri_preset_low; // F06
|
||||
uint8_t bri_preset_high; // F07
|
||||
int8_t hum_comp; // F08
|
||||
uint8_t channel; // F09
|
||||
uint8_t bssid[6]; // F0A
|
||||
|
||||
uint8_t free_f09[175]; // F09
|
||||
uint8_t free_f10[168]; // F10
|
||||
|
||||
uint16_t pulse_counter_debounce_low; // FB8
|
||||
uint16_t pulse_counter_debounce_high; // FBA
|
||||
|
@ -1298,8 +1298,8 @@ void SettingsDelta(void)
|
||||
Settings.tuya_fnid_map[tuyaindex].dpid = 1;
|
||||
tuyaindex++;
|
||||
}
|
||||
if (Settings.param[P_ex_TUYA_RELAYS] > 0) {
|
||||
for (uint8_t i = 0 ; i < Settings.param[P_ex_TUYA_RELAYS]; i++) { // ex SetOption41
|
||||
if (Settings.param[P_ARP_GRATUITOUS] > 0) { // Was P_ex_TUYA_RELAYS
|
||||
for (uint8_t i = 0 ; i < Settings.param[P_ARP_GRATUITOUS]; i++) { // ex SetOption41
|
||||
Settings.tuya_fnid_map[tuyaindex].fnid = 12 + i; // TUYA_MCU_FUNC_REL2 - Create FnID for Switches
|
||||
Settings.tuya_fnid_map[tuyaindex].dpid = i + 2;
|
||||
tuyaindex++;
|
||||
|
@ -814,6 +814,9 @@ void PerformEverySecond(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Wifi keep alive to send Gratuitous ARP
|
||||
wifiKeepAlive();
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------*\
|
||||
|
@ -401,6 +401,11 @@ void WifiCheckIp(void)
|
||||
Settings.ip_address[1] = (uint32_t)WiFi.gatewayIP();
|
||||
Settings.ip_address[2] = (uint32_t)WiFi.subnetMask();
|
||||
Settings.ip_address[3] = (uint32_t)WiFi.dnsIP();
|
||||
|
||||
// Save current AP parameters for quick reconnect
|
||||
Settings.channel = WiFi.channel();
|
||||
uint8_t *bssid = WiFi.BSSID();
|
||||
memcpy((void*) &Settings.bssid, (void*) bssid, sizeof(Settings.bssid));
|
||||
}
|
||||
Wifi.status = WL_CONNECTED;
|
||||
#ifdef USE_DISCOVERY
|
||||
@ -423,6 +428,7 @@ void WifiCheckIp(void)
|
||||
break;
|
||||
case WL_NO_SSID_AVAIL:
|
||||
AddLog_P(LOG_LEVEL_INFO, S_LOG_WIFI, PSTR(D_CONNECT_FAILED_AP_NOT_REACHED));
|
||||
Settings.channel = 0; // Disable stored AP
|
||||
if (WIFI_WAIT == Settings.sta_config) {
|
||||
Wifi.retry = Wifi.retry_init;
|
||||
} else {
|
||||
@ -436,6 +442,7 @@ void WifiCheckIp(void)
|
||||
break;
|
||||
case WL_CONNECT_FAILED:
|
||||
AddLog_P(LOG_LEVEL_INFO, S_LOG_WIFI, PSTR(D_CONNECT_FAILED_WRONG_PASSWORD));
|
||||
Settings.channel = 0; // Disable stored AP
|
||||
if (Wifi.retry > (Wifi.retry_init / 2)) {
|
||||
Wifi.retry = Wifi.retry_init / 2;
|
||||
}
|
||||
@ -446,8 +453,10 @@ void WifiCheckIp(void)
|
||||
default: // WL_IDLE_STATUS and WL_DISCONNECTED
|
||||
if (!Wifi.retry || ((Wifi.retry_init / 2) == Wifi.retry)) {
|
||||
AddLog_P(LOG_LEVEL_INFO, S_LOG_WIFI, PSTR(D_CONNECT_FAILED_AP_TIMEOUT));
|
||||
Settings.channel = 0; // Disable stored AP
|
||||
} else {
|
||||
if (!strlen(SettingsText(SET_STASSID1)) && !strlen(SettingsText(SET_STASSID2))) {
|
||||
Settings.channel = 0; // Disable stored AP
|
||||
wifi_config_tool = WIFI_MANAGER; // Skip empty SSIDs and start Wifi config tool
|
||||
Wifi.retry = 0;
|
||||
} else {
|
||||
@ -462,7 +471,7 @@ void WifiCheckIp(void)
|
||||
}
|
||||
} else {
|
||||
if (Wifi.retry_init == Wifi.retry) {
|
||||
WifiBegin(3, 0); // Select default SSID
|
||||
WifiBegin(3, Settings.channel); // Select default SSID
|
||||
}
|
||||
if ((Settings.sta_config != WIFI_WAIT) && ((Wifi.retry_init / 2) == Wifi.retry)) {
|
||||
WifiBegin(2, 0); // Select alternate SSID
|
||||
@ -650,6 +659,8 @@ void WifiConnect(void)
|
||||
Wifi.retry = Wifi.retry_init;
|
||||
Wifi.counter = 1;
|
||||
|
||||
memcpy((void*) &Wifi.bssid, (void*) Settings.bssid, sizeof(Wifi.bssid));
|
||||
|
||||
#ifdef WIFI_RF_PRE_INIT
|
||||
if (rf_pre_init_flag) {
|
||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_WIFI "Pre-init done"));
|
||||
@ -700,3 +711,51 @@ void EspRestart(void)
|
||||
// ESP.restart(); // This results in exception 3 on restarts on core 2.3.0
|
||||
ESP.reset();
|
||||
}
|
||||
|
||||
//
|
||||
// Gratuitous ARP, backported from https://github.com/esp8266/Arduino/pull/6889
|
||||
//
|
||||
extern "C" {
|
||||
#if LWIP_VERSION_MAJOR == 1
|
||||
#include "netif/wlan_lwip_if.h" // eagle_lwip_getif()
|
||||
#include "netif/etharp.h" // gratuitous arp
|
||||
#else
|
||||
#include "lwip/etharp.h" // gratuitous arp
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned long wifiTimer = 0;
|
||||
|
||||
void stationKeepAliveNow(void) {
|
||||
AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR(D_LOG_WIFI "Sending Gratuitous ARP"));
|
||||
for (netif* interface = netif_list; interface != nullptr; interface = interface->next)
|
||||
if (
|
||||
(interface->flags & NETIF_FLAG_LINK_UP)
|
||||
&& (interface->flags & NETIF_FLAG_UP)
|
||||
#if LWIP_VERSION_MAJOR == 1
|
||||
&& interface == eagle_lwip_getif(STATION_IF) /* lwip1 does not set if->num properly */
|
||||
&& (!ip_addr_isany(&interface->ip_addr))
|
||||
#else
|
||||
&& interface->num == STATION_IF
|
||||
&& (!ip4_addr_isany_val(*netif_ip4_addr(interface)))
|
||||
#endif
|
||||
)
|
||||
{
|
||||
etharp_gratuitous(interface);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void wifiKeepAlive(void) {
|
||||
uint32_t wifiTimerSec = Settings.param[P_ARP_GRATUITOUS]; // 8-bits number of seconds, or minutes if > 100
|
||||
|
||||
if ((WL_CONNECTED != Wifi.status) || (0 == wifiTimerSec)) { return; } // quick exit if wifi not connected or feature disabled
|
||||
|
||||
if (TimeReached(wifiTimer)) {
|
||||
stationKeepAliveNow();
|
||||
if (wifiTimerSec > 100) {
|
||||
wifiTimerSec = (wifiTimerSec - 100) * 60; // convert >100 as minutes, ex: 105 = 5 minutes, 110 = 10 minutes
|
||||
}
|
||||
SetNextTimeInterval(wifiTimer, wifiTimerSec * 1000);
|
||||
}
|
||||
}
|
||||
|
@ -256,7 +256,7 @@ enum ButtonStates { PRESSED, NOT_PRESSED };
|
||||
enum Shortcuts { SC_CLEAR, SC_DEFAULT, SC_USER };
|
||||
|
||||
enum SettingsParamIndex { P_HOLD_TIME, P_MAX_POWER_RETRY, P_BACKLOG_DELAY, P_MDNS_DELAYED_START, P_BOOT_LOOP_OFFSET, P_RGB_REMAP, P_IR_UNKNOW_THRESHOLD, // SetOption32 .. SetOption38
|
||||
P_CSE7766_INVALID_POWER, P_HOLD_IGNORE, P_ex_TUYA_RELAYS, P_OVER_TEMP, // SetOption39 .. SetOption42
|
||||
P_CSE7766_INVALID_POWER, P_HOLD_IGNORE, P_ARP_GRATUITOUS, P_OVER_TEMP, // SetOption39 .. SetOption42
|
||||
P_ex_DIMMER_MAX, P_ex_TUYA_VOLTAGE_ID, P_ex_TUYA_CURRENT_ID, P_ex_TUYA_POWER_ID, // SetOption43 .. SetOption46
|
||||
P_ex_ENERGY_TARIFF1, P_ex_ENERGY_TARIFF2, // SetOption47 .. SetOption48
|
||||
P_MAX_PARAM8 }; // Max is PARAM8_SIZE (18) - SetOption32 until SetOption49
|
||||
|
Loading…
x
Reference in New Issue
Block a user