tretyakovsa / Sonoff_WiFi_switch

Прошивка для ESP8266 (Умный дом)-Firmware for ESP8266 (Smart Home)
GNU General Public License v3.0
178 stars 40 forks source link

Отключаете роутер и ESP не коннектится к нему утром при включение? #136

Open renat2985 opened 5 years ago

renat2985 commented 5 years ago

Сегодня еще 1 человек написал о том что на ночь отключает роутер и утром включает. Ну и ESP не подключается к нему сама, т.к. она переходит в Точку доступа.

Появилась интересная мысль. У нас ведь есть GET запрос на рестарт ESP: http://192.168.1.240/restart?device=ok Мы можем сделать таймер. Каждое утро в нужное вам время, после включения роутера ESP делает рестарт. И тем самым снова пытается подключится к роутеру. 2019 01 16-21 58 52

По идеи должно работать. Проверьте пожалуйста у кого есть время. Обязательное условие Ваша ESP должна делать рестарт когда она в режиме Точке доступа. Так же нужно проверить разные ссылки: Такую http://192.168.1.240/restart?device=ok (IP меняем на свой) И такую /restart?device=ok Спасибо.

AndrewMyName commented 5 years ago

Проблема даже не в том человеке. Я сегодня полностью обесточивал дом и после подачи питания маршрутизатор прогрузился позже ЕСП. Естественно, все устройства были недоступны для управления по сети. Вы понимаете, что это провал, если никого дома нет, а при необходимости что-то переключить будет невозможно достучаться до этих sonoff. А такое вполне реально, если моргнет свет. Таймер - совсем не выход. Не знаю, как там будет лучше сделать, Может лучше выдавать его в виде точки доступа при включении с зажатой кнопкой.... П.С. А что это за слово такое TACH? (TACH 8 max (button, movement, gercon, othe)) В английском языке это слово обозначает "тахометр"! (О.О)

Forldol commented 5 years ago

@AndrewMyName, можно настроить через какое время подключаться к роутеру. Если я правильно понял. Если у вас роутер загружается минуту или две, ставьте больше время. default

Forldol commented 5 years ago

@renat2985, по поводу таймера на перезагрузку, сегодня пробовал так сделать но при отключении роутера точка доступа устройства на появляется (ждал минут 30), а при включении роутера устройства в сети не видно, таймер на перезагрузку тоже почему-то не сработал.

Возможно действительно есть смысл сделать что бы режим точки доступа включался при замкнутом какой нибудь gpio. Или еще вариант: если в течении нескольких минут в режиме точки доступа никто не подключился - перезагружать устройство. (насколько я понял он сначала пробует подцепиться к роутеру если не получилось переходит в режим точки доступа)

renat2985 commented 5 years ago

Кнопка обычно вешается на GPIO 0, если зажать ее при старте, ESP войдет в режим программирования. Заводить какой-то другой PIN под кнопку тоже не совсем хороший выход. От кратковременных перебоев вам поможет совет @Forldol. @AndrewMyName можете попробовать нажать Ctrl+M и изменить 240 например на 3600, в таком случае ESP будет пытаться подключится в течение часа. Насколько я помню ранее были с этим какие-то проблемы. Возможно сейчас их нет. В таком случае мы добавить в это выпадающее меню новый пункт, подключатся к роутеру в течение 1 часа или двух. 2019 01 17-16 43 28

TACH -> TOUCH = Кнопка, ошибка уже давно тянется из версии к версии.

@Forldol наверное изменили пароль в ESP на роутер и перезагрузили ESP? В таком случае при загрузке ESP не сможет узнать время и запустится с временем 00:00:00. Нужно именно выключить сам роутер. Подождать когда ESP встанет в точку доступа, и потом снова включить роутер. И ждать...

Forldol commented 5 years ago

@renat2985, Нет, просто выключил роутер, но точка доступа не появлялась. Ждала часа пол. Может дольше ждать надо было? Потом включил роутер но ни точки доступа ни устройства в сети не было. дождался времени когда должен был сработать таймер - ничего не произошло.

renat2985 commented 5 years ago

@Forldol спасибо за эксперимент.

multysea commented 5 years ago

Совершенно очевидно, что не должна настроенная система падать только из-за того, что реле, видите ли, не видя интернета переходит в AP! Лучше пожертвовать одним gpio и сделать загрузку в АР после нажатия кнопки и подачи питания, это делается один раз, а свет может пропадать 10 раз в день.

multysea commented 5 years ago

Уж не говоря о том, что можно использовать для первичного подключения к сети вариант с ESP8266 SnartConfig.

renat2985 commented 5 years ago

@multysea если у вас так часто пропадает свет целесообразно купить UPS. И ESP не нужен Интернет. Ей нужен роутер. Да и вообще тут проблема в другом. Как оказалось если роутер отключить от питания, в то время как ESP продолжает работать. После того как роутер снова включить ESP не подключается к роутеру и не входит в AP. - это баг исправим.

multysea commented 5 years ago

Специально исследовал, на бета версии с моими модулями - после перезагрузки роутера подключается без проблем, на стабильной - нет. И насчёт интернета, мне все это нужно чтобы контролировать объект удаленно, т.е. я захожу в сеть снаружи, и если, после восстановления интернета или света устройства находятся в режиме АР - это исключает возможность взаимодействия с ними. ИБП есть, но изучаю критические варианты развития событий:).

tretyakovsa commented 5 years ago

Здесь нужно в корне переделать алгоритм работы, и скорее всего все поменяю. Станет проще и лучше.

renat2985 commented 5 years ago

@Forldol сделайте пожалуйста еще 1 эксперимент в бета версии, добавьте в таймер такую ссылку: http://192.168.4.1/restart?device=ok IP не меняем.

Egor2101 commented 5 years ago

Попробовал на бета версии - после отключения wi-fi модуль в точку доступа не переходит и после появления wi-fi к роутеру не подключаеться. Запросы http://192.168.4.1/restart?device=ok и http://192.168.0.192/restart?device=ok не срабатывают.

Forldol commented 5 years ago

@renat2985 Сделал, ничего не поменялось. Проблема в том, что после отключения роутера модуль не переходит в режим АР,а после включения роутера его нет в сети.

tulavolond commented 5 years ago

При первом включении проверяет был ли настроен интернет, если да то работает и всё время следит есть связь или нет. если пропал интернет, ждет когда снова появится, подключается, и в точку не переходит, проверено. Всё оч. просто

// void setup(){ //Запускаем WIFI WIFIinit(false); //} Далее правим или перезаписываем функцию

void WIFIinit(bool flag) { // --------------------Получаем ssid со страницы HTTP.on("/ssid", HTTP_GET, []() { jsonWrite(configSetup, "ssid", HTTP.arg("ssid")); jsonWrite(configSetup, "password", HTTP.arg("password")); saveConfig(); // Функция сохранения данных во Flash HTTP.send(200, "text/plain", "OK"); // отправляем ответ о выполнении }); // --------------------Получаем ssidap со страницы HTTP.on("/ssidap", HTTP_GET, []() { jsonWrite(configSetup, "ssidAP", HTTP.arg("ssidAP")); jsonWrite(configSetup, "passwordAP", HTTP.arg("passwordAP")); saveConfig(); // Функция сохранения данных во Flash HTTP.send(200, "text/plain", "OK"); // отправляем ответ о выполнении });

// Попытка подключения к точке доступа WiFi.mode(WIFI_STA); byte tries = 11; String _ssid = jsonRead(configSetup, "ssid"); String _password = jsonRead(configSetup, "password"); if (_ssid == "" && _password == "") { WiFi.begin(); } else { WiFi.begin(_ssid.c_str(), _password.c_str());

} // Делаем проверку подключения до тех пор пока счетчик tries // не станет равен нулю или не получим подключение while (--tries && WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(1000);

} if (WiFi.status() != WL_CONNECTED) { // Если не удалось подключиться запускаем в режиме AP Serial.println(""); Serial.println("WiFi up AP"); if(flag == 0) StartAPMode(); } else { // Иначе удалось подключиться отправляем сообщение // о подключении и выводим адрес IP Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); jsonWrite(configJson, "ip", WiFi.localIP().toString()); } }

Удачи, у меня всё работает, попробуйте :)

multysea commented 5 years ago

tulavolond , вы такой продвинутый, это прекрасно, но для широкой аудитории может быть стоило больше подробностей дать? Куда весь этот ваш код вводить, что и как потом компилировать.. И вообще, почему обычные sonoff реле нормально восстанавливают свое состояние после отключения роутера, после пропадания света, а в этом проекте такие мегатанцы с бубном, которые к тому же не решают вопрос, т.к. надежности и очевидности во всех этих таймерах на перезагрузку и таймаутах нет никакой. Поразительно, такой классный проект и с таким недоразумением. Еще раз повторюсь, не должна система зависеть от того, как долго грузится роутер!

tulavolond commented 5 years ago

Добрый день! никакой я не продвинутый, с удовольствием смотрю Ваши видео! Я всего лишь добавил флаг в функцию. в void setup() { WIFIinit(false); } а в эту функцию условие и всё. void WIFIinit(bool flag) {

if (WiFi.status() != WL_CONNECTED) { if(flag == 0) StartAPMode(); } И конечно же этот флаг желательно записывать во флэш память при подключении к wifi, тогда точно проблем не будет

пока не изменятся настройки в самом роутере.

Если отключат эл- во он не поможет, а поможет если вывалился интернет или повис роутер и.т.д.. То Будет работать и ждать когда появится.

tulavolond commented 5 years ago

На счет остального с Вами полностью согласен 👍

Velozibu commented 5 years ago

После того как роутер снова включить ESP не подключается к роутеру и не входит в AP. - это баг исправим.

Не забудьте, пожалуйста. Я также с этим столкнулся....