Как отвязаться от wifi?

Тема в разделе "ESP8266, ESP32", создана пользователем Drunkbarbarian, 5 сен 2020.

  1. b707

    b707 Гуру

    это даже близко не то, что вам нужно сделать
    Вообще, на мой взгляд. парой строчек тут проблему не решить, необходимо чуть менее чем полностью менять логику работы.
    Сейчас, судя по всему, ваш обогреватель на каждый чих получает отдельную команду через интернет - включить.нагрев, выключить. Это категорически не правильно.
    Нужно сделать систему чуть более умной. Вместо команды "Включить нагрев" задавайте нагревателю желаемую температуру - дальше пусть он включается и выключается сам. Заодно предусмотрите защиту от перегрева и таймаут слишком долгой работы.
    Например вы задали. температуру +22 в комнате. Если там холоднее - обогрев включится сам. Когда нагреет комнату - сам выключится. Теперь, если с системой почему-то прервется связь или вообще сдохнет инет - все будет продолжать работать четко и безопасно по последним настройкам. Единственная проблема, что у вас может возникнуть при пропадении коннекта - пропадет возможность менять температуру.
     
    Последнее редактирование: 7 сен 2020
  2. Drunkbarbarian

    Drunkbarbarian Нерд

    Мне нужно, чтоб была периодичность поиска wifi при его отсутствии. И я пока гадаю как его организовать. Если б знал, вопросов бы не задавал.
     
  3. b707

    b707 Гуру

    Не нужно.
    вам уже несколько человек пытаются сказать, что "периодичность поиска" - не решает вашу задачу
     
    Drunkbarbarian нравится это.
  4. Drunkbarbarian

    Drunkbarbarian Нерд

    Три чиха всего-то. Включил, настроил температуру включения и температуру выключения, вырубил при необходимости. Чтоб слишком часто не включался есть интервал. Да вроде нормально все.
     
  5. b707

    b707 Гуру

    ОК, продолжаем :)
    а переменная interval_time где запоминается?
     
  6. Drunkbarbarian

    Drunkbarbarian Нерд

    А я вот не пойму логики этих людей. Восстановить удаленное управление устройством разве не важно?
    Плюшки ESP должны использоваться.
    Суть не в названии устройства "ОБОГРЕВАТЕЛЬ" , вдруг мне захочется слегка переписать скетч и назвать его "NASOS DLYA POLIVA TEPLITSY" )))))
    Прописать переменную таймер. И иметь возможность преждевременного отключения данной железки. Тут, думаю, спорить смысла нет о необходимости дистанционного управления устройством.
    Я понимаю суть слов, и что мне пытаются сказать уже несколько человек. Прошу отнестись без обид.
    Я с вопросом пришел, может его просто не совсем правильно поняли.
    Мне нужно, чтоб код не зацикливался при выполнении reconnect() в отсутствии wifi, и чтоб при появлении wifi возвращалось управление с телефона. И пока усё!
     
    Последнее редактирование: 7 сен 2020
  7. Drunkbarbarian

    Drunkbarbarian Нерд

    Код (C++):
     if (!client.connected())
    {
    if (millis() - interval_time > 30000)
    {
    interval_time = millis();
    reconnect() ;
    }
    }
    Я в millis() пока еще не совсем въехал. Так то она = 0.
     
    Последнее редактирование: 7 сен 2020
  8. b707

    b707 Гуру

    Если Ваш вопрос только в том, чтобы запускать reconnect() периодически - то приведенный код решает эту задачу.
    Но мне кажется, что еще важно, что будет делать ваше устройство в паузах между реконнектами
     
  9. SergeiL

    SergeiL Оракул Модератор

    Переподключаться при потри связи нужно обязательно! Но переподключаться правильно.
    С измененным reconnect() уже будет работать, еще можно от string отказаться, они там не нужны.

    Но имейте в виду, что функция client.connect при отсутствии подключения к интернет подвисает на секунды.
    В эти секунды Ваш код обрабатываться не будет.
    Для нагревателя это не принципиально, но если есть кнопки, датчики, и т.п. то все события от них в момент вызова client.connect будут потеряны.
    Но это уже другая история, столкнетесь - спросите.
     
  10. ИгорьК

    ИгорьК Гуру

    Во, как интересно писать на Си, оказывается. Я совсем начинающий, просьба из второго сорта не изымать и в газовую камеру временно не направлять:

    Код (C++):
    // Там в глобальных определениях...
    uint32_t timeWhenLostBroker = 0;

    // Если нет брокера
    if (!client.connected()) {
        // Ноль в числовых переменных при проверке на истинность есть false
        // а мы переменной присвоили раньше 0
        if (!timeWhenLostBroker) {
            // Запоминаем время лузера
            timeWhenLostBroker = millis();
        }
        // На следующем лупе только проверяем интервал
        if (millis() - timeWhenLostBroker > 30000) {
            // Время прошло - обязательно обнулить переменную!
            timeWhenLostBroker = 0;
            // Вызов необходимого действия:
            reconnect() ;
        }
    }
     
    Последнее редактирование: 7 сен 2020
    Drunkbarbarian нравится это.
  11. ИгорьК

    ИгорьК Гуру

    Да, слона я не приметил. Мой совет без изменения reconnect - верный способ спалить дачу :)
     
    SergeiL, Igor68 и Andrey12 нравится это.
  12. Igor68

    Igor68 Гуру

    А сделать систему самостоятельной при потере связи не судьба?
     
  13. ИгорьК

    ИгорьК Гуру

    За ТС?
     
  14. Igor68

    Igor68 Гуру

    Про него и разговор.
     
  15. b707

    b707 Гуру

    так по словам ТС все уже и так автономно работает - почитайте сообщение #12. У него там вполне годная задумка - уставка температуры. гистерезис.... Все. что он хочет - чтоб оно не висло при потере связи.
    Впрочем. что делать. если у него в коде не все гладко - ему тоже уже обьяснили...

    "Остается хорошо петь..." как говаривал Шаляпин
     
  16. Igor68

    Igor68 Гуру

    Вот и подумал, что устройство должно быть автономно... полностью. А по связи надо принимать только параметры... при этом проверять достоверность данных на соответствие. Я то каким-то образом сделал систему охлаждения... правда у меня нормальный линукс и кроме системы управления ещё несколько процессов(сервер связи, система сбора данных и управления охлаждением, система сбора данных установки - клиент OPC UA, контроль состояния и контроль питания). Понимаю, то тут не Linux... и с кодом надо что-то делать. Но смысл сервера связи не так уж и плохая, а клиент подключившись с этому серверу должен ещё и из вне принимать данные и отдавать этому серверу. Все остальные должны брать их из этого сервера. При этом выход из строя этого клиента никак не повлияет на работу остальных. Жаль что тут не Linux, а просто устройство с прошивкой. Наверное будет сложнее, но думаю возможно. Похоже тут без прерываний с переключением контекста никак. Что-то подобное RTOS... хоть какая-то альтернатива. Главное что бы потоки не могли влиять на работоспособность друг друга (хоть мне и более по душе не потоки, а процессы).
    И простите за флуд.
     
    Drunkbarbarian и ИгорьК нравится это.
  17. SergeiL

    SergeiL Оракул Модератор

    Отсутствие клиента позволяет легко решить проблему его зависания. :)
    На ESP все прекрасно можно сделать.
    Выключатели света на ESP в квартире работают как обычные выключатели, не знаешь - не отличишь.
    Есть Wi-Fi нет Wi-Fi, есть доступ к mqtt серверу или нет, щелкнул - свет мгновенно включился.
    Есть же таймер - туда все критичное к времени.
    А все вспомогательное, не критичное к времени - в loop()
     
    ИгорьК нравится это.
  18. Drunkbarbarian

    Drunkbarbarian Нерд

    Что за люди, им вопрос насущный,а они тебя ТСом каким-то и Шаляпиным называют...
     
  19. Drunkbarbarian

    Drunkbarbarian Нерд

    вот это уже интересно. Я не программист, так ... втыкаю с осторожностью. Код попробую как время будет. Спасибо!
     
  20. Drunkbarbarian

    Drunkbarbarian Нерд

    Ну, что сказать. Тут смысл следующий! Сделать около 10 абсолютно одинаковых устройств (тройку уже сделал!) простецких до безобразия. ESP8266, реле (в том числе и для управления контактором), датчик температуры, питание 220 -> 5В, контактор ABB под более мощные железки. И по необходимости ставить в места, где нужно что-то включить или выключить. Чтоб была возможность перепролить по воздуху - немаловажно! Пара устройств в запасе под выход из строя. Установка планируется на даче в первую очередь в теплице. Мне нужен насос с таймером для полива (код надо допилить), обогреватель с установкой гистерезисов (допил кода), свет по реальному времени (еще на прикасался к написаниям, некогда), открытие/закрытие форточек по гистерезисам(почти обогреватель). Дом потом будет автоматизироваться и поджигаться! Когда все будет испытано.

    Делается это все для близкого родственника, который работает на сложном производстве 2/2 и не может ежедневно посещать дачу, а также отапливать теплицу, открывать форточки, включать свет в ней, поливать и много чего еще. WIFI на весь участок сделан (радиус больше 100м на keenetic giga ii !) - лето в дожди и грозы все отработало пока отлично! Жду зиму! Буду посмотреть, как в холод себя покажет. Хотя должно все быть хорошо. Плата от кинетика, плата мобильного роутера находятся в едином корпусе с хардом, будет греть! Есть мысль поставить на кинетик москито (или на малинку PI) - даст возможность управлять локально без участия мобильного оператора. Но, сохранить удаленное управление вне локации один хрен надо!
    Пока стоят три устройства. Одно в помещении чисто для параметрии. Два других на улице включают прожектора при необходимости..
    Автономность должна быть! Для обогревателя достаточно сохраненных в памяти гистерезисов.

    Буду вникать, ничего не остается делать))))))
    За правильные советы премного благодарен. И я не ТС! Не надо меня поганой аббревиатурой называть!