Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
GyverLibs opened this issue Dec 14, 2022 · 173 comments
Closed

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

GyverLibs opened this issue Dec 14, 2022 · 173 comments

Comments

@GyverLibs
Copy link
Owner

GyverLibs commented Dec 14, 2022

v3.5

  • Добавлено
    • Отображение границ таблицы TABLE_BORDER()
    • Опасные copy- и click-парсеры (для опроса в условии)
    • Ширина для AREA
    • Всплывающее окно с ошибкой, если "клик" не дошёл до сервера
    • Можно получить логин и пароль, которые вводятся при авторизации, login() и pass()
    • Настройка размера/толщины текста и переноса для текстовых подписей TITLE, LABEL, LABEL_BLOCK. Подписи SPAN/BOLD/PLAIN больше не нужны
    • encodeDMY для GPdate (день.месяц.год)
    • Цвет GP_YELLOW_B
    • Настройка цвета для LED
    • RELOAD_CLICK работает с popup (ALERT, PROMPT, CONFIRM)
    • Проверка подключен ли клиент, функции online() и onlineTimeout()
    • У веб-лога добавлены кнопки для очистки и остановки прокрутки
    • Компонент RADIO для списков выбора
  • Пофикшено
    • Глаз в PASSWORD() поставлен на место
    • Баг с макросом M_TR10
    • SPINNER() повинуется выравниванию
    • Таблица SYSTEM_INFO вернулась в компактный вид
    • HINT (сломался в v3.4)
    • Невероятный баг с вечной загрузкой CHECK() и проблемой с опросом его значения с формы
  • Улучшено
    • Оптимизированы скрипты
    • Автоматическое удаление пробелов в списке UPDATE()
    • Ширину окна CAM_STREAM() и cam_stream_window можно задать стрингой
    • В ONLINE_CHECK() добавлена возможность отправлять свой js код при пропадании связи с платой
    • Дизайн таблички FILE_MANAGER + добавлена ширина вторым аргументом
    • Переделан механизм перезагрузки страницы, теперь работает гораздо быстрее и стабильнее
    • UPDATE запрашивает обновления только когда окно браузера активно
    • UPDATE при пропадании связи сигнализирует всплывающим баннером
    • Скрыты пустые ячейки у таблицы с заданными ширинами
  • Изменено
    • В SPINNER() вернулась ширина предпоследним аргументом, её установка отключает автоширину
    • ONLINE_CHECK() теперь выдаёт всплывающий баннер вместо иконки в названии страницы
    • Убран setReloadTimeout(), механизм улучшен, задаётся общий таймаут в setTimeout()
    • Дизайн LABEL_BLOCK, чтобы отличался от кнопок
    • Поле пароля с "глазом" теперь вызывается компонентом PASS_EYE

TODO v3.5

  • ОТА через cmd/shell curl -vF firmware=@firmware.bin http://x.x.x.х/GP_OTAupload

ROADMAP

@DenysChuhlib
Copy link

Вы забыли релиз 3.4 сделать)

@DenysChuhlib
Copy link

Или это специально?

@GyverLibs
Copy link
Owner Author

я спать ушёл да

@Tisero
Copy link

Tisero commented Dec 15, 2022

GP.UPDATE("lbl1, lbl2, lbl3, lbl4");

GP.LABEL("NAN", "lbl1");
GP.LABEL("NAN", "lbl2");
GP.LABEL("NAN", "lbl3");
GP.LABEL("NAN", "lbl4");

void action() {
if (portal.update()) {
String i = "Kek";
portal.updateString("lbl1", i); // Обновляется
portal.updateString("lbl2", i); // обновляется
portal.updateString("lbl3", i); // Нет обновления
portal.updateString("lbl4", i); // Нет обновления итд.
}
}

Обновляются значения только у первых двух компонентов, дальше обновления не происходят. На v3.3 и 3,4 проверял.

@GyverLibs
Copy link
Owner Author

GyverLibs commented Dec 15, 2022

список id должен быть без пробелов. Но это действительно баг, т.к. у меня сделано удаление пробелов через js, но оно удаляет только один)) спасибо за репорт

@Allexnero
Copy link

В примерах из раздела projects стоит BUILD_BEGIN(); а с 3,4 он перестал компилироваться, надо заменить на GP.BUILD_BEGIN(); и GP.BUILD_END(); соответственно.

@GyverLibs
Copy link
Owner Author

всё таки пропустил)

@Serega88kos
Copy link

в wiki не прописаны

// подключить функцию которая вызывается при ошибке
    void attachError(void (*handler)(const String& UpdateError)) {
        _OTAerror = *handler;
    }
    
    // отключить функцию которая вызывается при ошибке
    void detachError() {
        _OTAerror = nullptr;
    }

нужно ли их вызывать, перед?
String error(); // вывести описание ошибки (например в label)

@GyverLibs
Copy link
Owner Author

@DenysChuhlib поясни

@Serega88kos
Copy link

Serega88kos commented Dec 15, 2022

@GyverLibs в новой версии этот код что-то не работает)

    GP.FILE_MANAGER(&LittleFS);  // передать ссылку на свою ф. систему (&LittleFS, &SPIFFS..) выводит список файлов из Flash памяти с кнопками для удаления (нужно настроить delete)
    GP.SYSTEM_INFO();            // выводит таблицу системной информации
    GP_VERSION;

на дисплее пусто

p.s. убрал GP.NAV_TABS_LINKS и все прогрузилось)

и как я вижу, для UI дизайн надо переделывать, иначе все разъезжается в ПК версии)
в мобильной все ок

@GyverLibs
Copy link
Owner Author

GyverLibs commented Dec 15, 2022

@Serega88kos
GP_VERSION; это строка char*, см. документацию. Её нужно куда-то вывести чтобы увидеть

для UI дизайн надо переделывать

Да вроде не надо, там такая же центральная колонка. Я тестировал на своих скетчах, сразу выглядело норм

@DenysChuhlib
Copy link

в wiki не прописаны

// подключить функцию которая вызывается при ошибке
    void attachError(void (*handler)(const String& UpdateError)) {
        _OTAerror = *handler;
    }
    
    // отключить функцию которая вызывается при ошибке
    void detachError() {
        _OTAerror = nullptr;
    }

нужно ли их вызывать, перед?
String error(); // вывести описание ошибки (например в label)

Можно когда угодно

@Serega88kos
Copy link

@GyverLibs поправил предыдущее сообщение, не знаю, прочитал ли исправление...
В UI в ПК получается у меня так, надпись слева, поле ввода справа, между ними огромное пустое пространство)

M_BLOCK(GP_THIN, "",
            "Настройки WIFI",
            M_BOX(GP.LABEL("SSID"); GP.TEXT("ssid", "", w.ssid, "200px"); );
            M_BOX(GP.LABEL("PASS"); GP.PASS("pass", "", w.pass, "200px"); ););

переходить на таблицы?)

Можно когда угодно

как его вызывать тогда? что-то у меня не получилось...

@GyverLibs
Copy link
Owner Author

надпись слева, поле ввода справа, между ними огромное пустое пространство

всё верно. У UI по умолчанию ширина 1000 пикс, у BOX ширина 100% и выравнивание по краям. Либо уменьшать ширину UI, либо уменьшать ширину BOX, либо сложить всё в таблицу и задать ширину её или UI

@DenysChuhlib
Copy link

Можно когда угодно

как его вызывать тогда? что-то у меня не получилось...

Придумай, там просто подключил функцию, и через сериал выводишь, например

@GyverLibs
Copy link
Owner Author

по задумке error можно вывести в LABEL прямо под кнопкой OTA обновления. Если будет ошибка - он появится. Если плата перезагрузится - и лейбл чист - ошибки нет

@Serega88kos
Copy link

@GyverLibs файл темы с глазом смотрю подправил, но у меня что-то не вернулся на нужное место...

GP.BUILD_BEGIN(GP_LIGHT);
GP.UI_BEGIN("Меню", "", "");

заголовок меню в мобильной версии на черном фоне, так и задумано?

@GyverLibs
Copy link
Owner Author

у меня что-то не вернулся на нужное место...

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

заголовок меню в мобильной версии на черном фоне

в мобильной светлой теме верхний бар чёрный

@Serega88kos
Copy link

Скачал новый, Brave, глаз за пределами.
g34

@GyverLibs
Copy link
Owner Author

ну тут мои полномочия всё)

@Serega88kos
Copy link

по задумке error можно вывести в LABEL прямо под кнопкой OTA обновления.

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

@Serega88kos
Copy link

ну тут мои полномочия всё)

margin-left:260px;margin-top:-5px;
мой старый вариант
g341
тут глаз плавает, в зависимости от ширины)

@DenysChuhlib
Copy link

по задумке error можно вывести в LABEL прямо под кнопкой OTA обновления.

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

Что не принимает? Покажи тогда

@GyverLibs
Copy link
Owner Author

тут глаз плавает, в зависимости от ширины

что это за браузер?

@Serega88kos
Copy link

тут глаз плавает, в зависимости от ширины

что это за браузер?

brave.com
да и в любом другом...

SPINNER(): УБРАНА ШИРИНА, сделана автоширина, значение по центру

как теперь обходить этот момент. если спиннеров несколько и все разные значения, то уже не выходят все под одну ширину)

@Serega88kos
Copy link

@MalfurionST у тебя тоже глазик барахлил, как сейчас дела?)

@GyverLibs
Copy link
Owner Author

проблема явно где то у тебя. Вот хром/яндекс/brave/edge
image

@GyverLibs
Copy link
Owner Author

GyverLibs commented Dec 15, 2022

не выходят все под одну ширину)

что нибудь придумаю
upd. Сделал

@Serega88kos
Copy link

Serega88kos commented Dec 15, 2022

сделал проще макрос и решил с таблицей)

    M_TABLE(
            M_TR(
              GP.LABEL("SSID");
              GP.TEXT("ssid", "", w.ssid););
            M_TR(
              GP.LABEL("PASS");
              GP.PASS("pass", "", w.pass);););

вот в таком виде глаз идеально встает)
а было так

M_BLOCK(GP_THIN, "", "Настройки WIFI",
            M_BOX(GP.LABEL("SSID"); GP.TEXT("ssid", "", w.ssid, "150px"););
            M_BOX(GP.LABEL("PASS"); GP.PASS("pass", "", w.pass, "150px");););

g342

@GyverLibs
Copy link
Owner Author

было также просто по схеме и реализации как здесь

Но зачем? Уже есть ведь такой проект и видео про него, зачем плодить одинаковый контент?

@DenysChuhlib
Copy link

Здраствуйте, у меня есть важное предложение. Можете сделать сделать и остальные скрипты (особенно графики) в формате PROGMEM? Просто все скрипты разом занимают 800кб а если использовать их через FS остается свободная память, которую под скетчи не деть(. А я умудрился так, что мне нужно 2 мб для скетча но и нужно чтобы графики были доступны без интернета.
Спасибо за внимание)

@DenysChuhlib
Copy link

я про esp32

А я умудрился так, что мне нужно 2 мб для скетча но и нужно чтобы графики были доступны без интернета.

@GyverLibs
Copy link
Owner Author

Скопируй себе в скетч через прогмем и отправь через send

@DenysChuhlib
Copy link

Я так думал... , ладно попробую

@DenysChuhlib
Copy link

не получилось( ну ладно

@DenysChuhlib
Copy link

еще й видимо файловую систему в новом ядре esp32 поломали( у меня не работает литлфс

@GyverLibs
Copy link
Owner Author

Как я уже устал от этого китайского софта)

@DenysChuhlib
Copy link

espressif/arduino-esp32#7634

еще й видимо файловую систему в новом ядре esp32 поломали( у меня не работает литлфс

@DenysChuhlib
Copy link

мдаа... ладно старую версию никто не отменял

@DenysChuhlib
Copy link

Как я уже устал от этого китайского софта)

Это хорошо что оно обновляется и баги исправляются, просто некому чательно проверять такой объём обновлений.

@Serega88kos
Copy link

ESP32-S2 попробуй для компиляции)

@gorlanovmax
Copy link

При попытке указания задержки обновления страницы
GP.setReloadTimeout(5000);
Получаем ошибку, что класс не указан в библиотеке
'struct Builder' has no member named 'setReloadTimeout'

@GyverLibs
Copy link
Owner Author

в рабочей версии setReloadTimeout убран, он больше не нужен

@gorlanovmax
Copy link

Пытаюсь реализовать следующий механизм:
На странице есть кнопка. У нее в настройках перезагрузка страницы по нажатию отключена.
По action click выполняется проверка, в случае, если флаги установлены, идет некое вычисление, alert и потом перезагрузка страницы.
Реализовано так:

build()
  GP.ALERT("alt");
  GP.RELOAD("reload");
  GP.UPDATE("current_adc36,reload,alt", 250); 
 ....
  GP.BUTTON_MINI("cal_stop", "Сохранить данные калибровки","","","",0,0);
action()
    if (portal.click("cal_stop")) { //остановка калибровки
      if (check_point()) {
        save_calibrate(0);
        cal_start = false;
        cal_ok = 1;
        alertCal = 1; // флаг вывода popup
      }
    }

    if (alertCal && portal.update("alt")) { //вывод popup
      alertCal = 0;
      portal.answer(String("Калибровка выполнена!"));
    }

    if (portal.update("reload")) {
      portal.answer(cal_ok);
      cal_ok = 0;
    }

Но при указанном коде, popup не появляется, сразу идет перезагрузка страницы

@GyverLibs
Copy link
Owner Author

Все верно, так оно и будет работать. Можно попробовать в списке update передать алерт ДО релоада. Также могу попробовать добавить попапам возможность перезагрузки страницы, это будет полезно

@gorlanovmax
Copy link

Также могу попробовать добавить попапам возможность перезагрузки страницы, это будет полезно

Вот это наверное будет идеально

@GyverLibs
Copy link
Owner Author

Да, без проблем вообще добавляется, через пару часов буду у пк сделаю

@GyverLibs
Copy link
Owner Author

закинул

@gorlanovmax
Copy link

огромное спасибо, каков синтаксис?

@GyverLibs
Copy link
Owner Author

ну RELOAD_CLICK передать имя алёрта

@gorlanovmax
Copy link

Чего-то поломалось))))
Не компилируется
In file included from C:\Arduino\libraries\GyverPortal-main\src/GyverPortal.h:57,
from D:\Google диск\NMEA\Разработка\Устройства\Digital Boats\Датчик уровня 1 канал\Level\Level.ino:23:
C:\Arduino\libraries\GyverPortal-main\src/portal.h: In member function 'void GyverPortal::sendFile(fs::File)':
C:\Arduino\libraries\GyverPortal-main\src/portal.h:1189:33: error: 'mime' has not been declared
server.streamFile(file, mime::getContentType(file.name()));

@GyverLibs
Copy link
Owner Author

А, ну это есп32 гавной пахнет

@gorlanovmax
Copy link

Ну до замены файлов на обновленные все компилировалось)

@gorlanovmax
Copy link

А как теперь правильно подключать файловую систему? В описании не обновлено.
У меня по старинке

#include <LittleFS.h> // подключить библиотеку файловой системы (до #include GyverPortal)
#include <GyverPortal.h> // подключаем библиотеку вэб-интерфейса 
GyverPortal portal(&LittleFS);  // передать ссылку на fs (SPIFFS/LittleFS)

@GyverLibs
Copy link
Owner Author

до замены файлов на обновленные все компилировалось)

Да я вижу, вернул обратно

как теперь правильно подключать файловую систему

Так же как раньше, ничего не менялось

@gorlanovmax
Copy link

Так же как раньше, ничего не менялось

В описании появилась функция
void setFS(fs::FS *useFS); // подключить файловую систему (&LittleFS, &SPIFFS, &SD...)

@GyverLibs
Copy link
Owner Author

Ну и хорошо, значит файловую систему можно менять на лету

@GyverLibs
Copy link
Owner Author

Пока хватит, релизаю

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants