GyverLibs / GyverPortal

Простой конструктор веб интерфейса для esp8266 и ESP32
MIT License
311 stars 25 forks source link

Идеи/проблемы на обновление v3.7 #73

Open GyverLibs opened 1 year ago

GyverLibs commented 1 year ago

v3.7

ROADMAP

GyverLibs commented 1 year ago

я закомментировал всё чего нет в 2.7.4 и релизнул

Tisero commented 1 year ago

ESP32 SDK v4.4.4 После обновления Portal на 3.6.0 и 3.6.1, при наступлении события click в котором вызываю portal.copyInt, происходит перезагрузка ESP. На 3.5.2 всё работает. Eсть warning при компиляции:

! In file included from lib/GyverPortal/src/GyverPortal.h:57, from lib/GyverPortal/src/GyverPortal.cpp:1: lib/GyverPortal/src/portal.h: In member function 'virtual const String& GyverPortal::arg(const String&)': lib/GyverPortal/src/portal.h:568:28: warning: returning reference to temporary [-Wreturn-local-addr] return server.arg(n); ^ lib/GyverPortal/src/portal.h: In member function 'virtual const String& GyverPortal::arg()': lib/GyverPortal/src/portal.h:571:28: warning: returning reference to temporary [-Wreturn-local-addr] return server.arg(0); ^ lib/GyverPortal/src/portal.h: In member function 'virtual const String& GyverPortal::argName()': lib/GyverPortal/src/portal.h:574:32: warning: returning reference to temporary [-Wreturn-local-addr] return server.argName(0); !

GyverLibs commented 1 year ago

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

GyverLibs commented 1 year ago

Попробуй в файле parsers.h убрать амперсанды image

и в файле portal вот тут image

Tisero commented 1 year ago

Спасибо! теперь всё работает, ошибок нет

GyverLibs commented 1 year ago

плохо) надо разобраться будет

DenysChuhlib commented 1 year ago

Если функция пустая можно её к нулю прировнять, я в кучи библах видел такое и сам делал. Это должно решить проблему void func() = 0;

Tisero commented 1 year ago

Если функция пустая можно её к нулю прировнять, я в кучи библах видел такое и сам делал. Это должно решить проблему `void func() = 0;

virtual const String& arg(const String& n) = 0; virtual const String& arg() = 0; virtual const String& argName() = 0;

Если имелось в виду так, то всё теже проблемы, единственно что пропадает предупреждение <определение функции не найдено>

Снимок экрана 2023-03-14 092733

DenysChuhlib commented 1 year ago

Проблема в том что эти функции используються в класе, а эти функции не реализованы. Вот оно и жалуеться.

GyverLibs commented 1 year ago

@DenysChuhlib эм, нет. Читай про наследование классов

GyverLibs commented 1 year ago

Это должно решить проблему `void func() = 0;

Всё ещё нет. Проблема тут в том, что ядро esp32 снова несовместимо с esp8266 в критическом месте. Индусы не договорились.... image

image

Tisero commented 1 year ago

Обновился на новую, теперь всё хорошо)

Serega88kos commented 1 year ago

@GyverLibs возможно ли на лету менять gmt в GyverNTP? Через форму отправляю значение на запись в EEPROM и после вызываю

ntp.end();
ntp.setGMT(gmt);
ntp.begin();

но реакции нет, время не меняется. если перезагрузить esp, то все меняется.

GyverLibs commented 1 year ago

должен без проблем меняться, gmt участвует только непосредственно в расчётх при опросах времени типа second() minute(), во время опроса времени его нет

Serega88kos commented 1 year ago

в GP.SYSTEM_INFO(); возможно добавить строку для информации о EEPROM?

GyverLibs commented 1 year ago

какой информации?

Serega88kos commented 1 year ago

занято/свободно что-то подобное

GyverLibs commented 1 year ago

эм, у стандартной либы епрома нет такого понятия как занято/свободно... 🤦‍♂️🤦‍♂️

Otto17 commented 1 year ago

Обнаружил баг c функцией системной информации "GP.SYSTEM_INFO()", а точнее в Uptime. Счётчик работает до 23:59:59, а потом обнуляется и по кругу... То есть вначале не добавляется цифра с количеством отработанных дней.

Библиотека GyverPortal версии: 3.6.3 Взят голый пример "systemInfo" + добавил туда простой кастомный Uptime, который выводится в "GP.LABEL()" в самом верху примера.

Работа ESP до наступления суток: до

После суток: после

GyverLibs commented 1 year ago

ну не то чтобы баг, этого просто не написано) сделаю

gorlanovmax commented 1 year ago

Алекс, а вот если бы в портале была бы возможность запуститься в режиме точки доступа и потом выбрать сеть к которой подключиться - это бы была бомба)))

Вот пример https://github.com/Hieromon/AutoConnect

GyverLibs commented 1 year ago

GyverPortal это веб-интерфейс, он никаким образом не должен запускать wifi и какие то манипуляции с ним делать. Сконфигурировать своё устройство в режиме AP - в портале есть пример, как получить и хранить данные

gorlanovmax commented 1 year ago

Да, вэб-интерфейс, но согласись что он заточен под IoT устройства И wi-fi менеджер был бы там очень кстати

GyverLibs commented 1 year ago

Я считаю что достаточно примера как это сделать средствами портала. К тому же логины/пароли нужно где то хранить, делать это за юзера тоже не очень красиво

Otto17 commented 1 year ago

Да, вэб-интерфейс, но согласись что он заточен под IoT устройства И wi-fi менеджер был бы там очень кстати

У Алекса Гайвера есть вполне удобная и лёгкая библиотека WiFi менеджера "SimplePortal", воспользуйся ей. Единственно, что в той библиотеке не хватает, это автоматического поиска сетей и подстановку их в поле ввода SSID.

Oleg-Perevyshin commented 1 year ago

Очень хотелось бы видеть асинхронный web сервер и web сокеты для обмена данными между браузером и ESP32. По реализации неплохой пример есть здесь https://randomnerdtutorials.com/esp32-websocket-server-arduino/

GyverLibs commented 1 year ago

@Oleg-Perevyshin думаю этого не будет, т.к. async либ нет в менеджере библиотек, а GP рассчитан на новичков

Oleg-Perevyshin commented 1 year ago

Ну хотя бы web сокет поднять, гораздо удобнее данные гонять туда-сюда, чем постоянно через запросы или обновление страницы.

GyverLibs commented 1 year ago

сокет планируется, но даже примерно неизвестно когда, может не в этом году

Serega88kos commented 1 year ago

@GyverLibs есть возможность в M_BOX задавать свой class? Нужен для работы скрипта, в данный момент блок нужный inliner Обращаюсь к нему так $('.inliner:last') находит верно, но далее работа с ним некорректная) Писал своим кодом через GP.SEND(html) все работает как надо)

GyverLibs commented 1 year ago

Есть возможность делать только то, что указано в документации. Все остальное - через кастом компоненты

Serega88kos commented 1 year ago

и в добавок, как парсить такой ответ?) select: 0 number: 2 select: 1 number: 2 и т.д.

Serega88kos commented 1 year ago

Есть возможность делать только то, что указано в документации.

это то понятно, добавить в реализацию движка?

GyverLibs commented 1 year ago

как парсить такой ответ

Ну как придумал протокол, так и парсить. Если не парсится - придумай другой

добавить в реализацию движка?

Ничего не понимаю

Serega88kos commented 1 year ago

Ничего не понимаю

ROADMAP

Ну как придумал протокол, так и парсить. Если не парсится - придумай другой

это я переделал прошлый вариант, со стрингами

Таааак, здравствуйте молодые люди. И тут эта дичь со списками байтов в стрингах?!?

Зачем городить СТРОКОВЫЙ конфиг при наличии веб интерфейса с кучей возможностей для настройки и выбора?

https://playcode.io/1320297 через кастом работает, а если собрать компонентами движка и вложить в box, то клонирование то работает, а вот управление только родительским боксом, меняя спиннер в других боксах, изменения затрагивают первый) удалить можно только один раз и после добавления и удаления не работают.

AlexGyver commented 1 year ago

ROADMAP

что ROADMAP?....

и удаления не работают

все нестандартные задачи решаются кастомным html+js. Непонятные никому ненужные конструкции в библиотеку добавляться не будут

Serega88kos commented 1 year ago

что ROADMAP?....

самое первое сообщение этой темы, план на будущее. будет добавлена возможность добавления свои классы в боксы?

Непонятные никому ненужные конструкции в библиотеку добавляться не будут

этого не просил, просто вопрос был по замене класса, и всего то

AlexGyver commented 1 year ago

добавления свои классы в боксы?

категорически не понимаю нежелания сделать свой кастомный компонент

Serega88kos commented 1 year ago

категорически не понимаю нежелания сделать свой кастомный компонент

над этим я уже думал... просто много вопросов возникло по сопутствующим вещям... ладно, подумаем позже... благодарю)

AlexGyver commented 1 year ago

а что думать, просто взять реализацию из builder.h, обозвать MY_BOX т добавить в него что угодно дополнительно

Serega88kos commented 1 year ago

Да, я помню как это делается, делал для первых версий движка новые фишки... Непонимание было где хранить, сейчас сообразил, прямо в прошивке. Блин, как же время улетает быстро, пора отдыхать, засиделся... На следующей неделе посоображаю, будет много времени)

UPD: Доделал, что хотел) но все равно пришел, с формой и байтами в стрингах)

AlexGyver commented 1 year ago

просто как в примере customcomponents, положить файлик рядом со своим скетчем

GyverLibs commented 1 year ago

Сделал чёт такое) image

Serega88kos commented 1 year ago

в wiki объекты надо поправить, например в number не принимает уже мин и макс

GyverLibs commented 1 year ago

в вики тоже не принимает image

Serega88kos commented 1 year ago

@GyverLibs Как правильно написать такой код чтобы работал? Скрипт написан на JQuery. Алерты использую для отладки...

    if (ui.click("status")) {
      if (ui.getBool("status")) {
        GP.SEND("<script>alert('Включено');</script>");
      } else {
        GP.SEND("<script>alert('Выключено');</script>");
      }
    }

если делать кастомный код, то он не работает, т.к. уже висит onClick от портала. а вот как правильно использовать возможности портала, что-то не сообразить)

GyverLibs commented 1 year ago

Никак

Serega88kos commented 1 year ago

т.е. кастомные скрипты не реализовать по клику? хотел сделать по выключенному чекбоксу скрытие ненужных блоков, вот пример https://playcode.io/1369159

GyverLibs commented 1 year ago

Реализуй что угодно, но без SEND. SEND работает ТОЛЬКО внутри функции билдера, когда страница ЗАГРУЖАЕТСЯ или когда со страницы запрошен RELOAD

Serega88kos commented 1 year ago

про SEND то понятно, мне непонятно как реализовать? в примере используется обработчик от JQuery, в портале в коде есть <input type='checkbox' name='status' id='status' checked onclick='GP_click(this)'> вот они и конфликтуют походу