GyverLibs/GyverPortal

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

GyverLibs opened this issue · 122 comments

v3.7

  • Добавлено
    • system info в графе uptime выводит также дни
    • GPlog настройка autoClear(bool), умолч. включена, можно выключить чтобы лог сохранялся
    • Тип и парсеры GPweek
    • Тип и парсеры GPflags
  • Пофикшено
    • Автоматическое открытие портала при подключении к ESP в режиме AP не работало на некоторых устройствах
  • Улучшено
    • Все copyStr() - если указана длина, теперь строка записывается, даже если входящая строка длиннее
    • GPlog снова работает как кольцевой буфер
  • Изменено
    • ...

ROADMAP

  • Не задаётся размер мини кнопок
  • Вернуть FIFO в LOG
  • Привязать стили к классам
  • драг н дроп файлы и ота
  • Возможно убрать online check
  • ОТА через cmd/shell curl -vF firmware=@firmware.bin http://x.x.x.х/GP_OTAupload
  • двойной слайдер https://w3collective.com/double-range-slider-html-css-js/
  • джойстик (папка на раб столе)
  • графики https://github.com/leeoniya/uPlot
  • таймлайн как разновидность графика
  • вебсокет
  • аналог grid ui
  • асинхронный сервер

много кода) спрячь под спойлер плз

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

Здраствуйте, а почему вы CustomOTA не обновили на новый? Я скидывал в прошлом issue.
Могу еще раз скинуть...

кидай, я всё пропустил видимо

Ось тоже самое, но я добавил важные коментарии для любителей.
CustomOTA.zip

не компилит твоя ота, сейчас люди обновятся и п*дец
class UpdaterClass' has no member named 'getErrorString

А поддержка WebSockets - это уже интересно....

Приветствую. Предлагаю добавить таймлайн как разновидность графика. На подобии как в Home Assistant
image

UpdaterClass

Я и на esp8266 и esp32 использую. У меня все ок...
В каком рядке ошибка?

Какая версия ядра у тебя?

esp32 или esp8266 ?

Ладно проверю снова на новых версиях...

У меня 2.7.4 и 3.0.2 на 32

Так погоди! getErrorString это я добавлял в ота. Возможно ты не ту реализацию исправлял, вот мы и не совпали

Работает?

Я для версии 3.5 делал.

Нет, у меня куча ошибок вылетает

Киньте ошибки

А на 8266 есть ошибки, сейчас исправлю

А не это ошибки в Gyver Portal, в СustomOTA не вижу

In file included from c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/portal.h:22,
from c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/GyverPortal.h:57,
from C:\Users\chyhl\OneDrive\Документи\Arduino\ESP8266\Watch\Watch.ino:9:
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h: In member function 'virtual int ArgParser::args()':
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h:11:25: error: no return statement in function returning non-void [-Werror=return-type]
11 | virtual int args() {} // amount
| ^
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h: In member function 'virtual const String& ArgParser::arg(const String&)':
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h:12:49: error: no return statement in function returning non-void [-Werror=return-type]
12 | virtual const String& arg(const String& n) {} // value from name
| ^
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h: In member function 'virtual const String& ArgParser::arg()':
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h:13:34: error: no return statement in function returning non-void [-Werror=return-type]
13 | virtual const String& arg() {} // value from 0
| ^
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h: In member function 'virtual const String& ArgParser::argName()':
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h:14:38: error: no return statement in function returning non-void [-Werror=return-type]
14 | virtual const String& argName() {} // name from 0
| ^
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h: In member function 'virtual bool ArgParser::hasArg(const String&)':
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h:15:43: error: no return statement in function returning non-void [-Werror=return-type]
15 | virtual bool hasArg(const String& n) {} // check
| ^
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h: In member function 'virtual bool ArgParser::clickF()':
c:\Users\chyhl\OneDrive\���������\Arduino\libraries\GyverPortal\src/parsers.h:16:28: error: no return statement in function returning non-void [-Werror=return-type]
16 | virtual bool clickF() {}
| ^
cc1plus.exe: some warnings being treated as errors

это я уже поправил

А в каком редакторе вы делаете библиотеки?, я в Notepad++ и вижу в нем проблемы с табуляцией(

нет никаких проблем с табуляцией

Тогда я ей не правильно пользуюсь(

ошибка error: 'class UpdaterClass' has no member named 'getErrorString' out = Update.getErrorString();

В Notepad++ выглятит всьо хорошо а в гитхабе все сьезжает непонятно.

ошибка error: 'class UpdaterClass' has no member named 'getErrorString' out = Update.getErrorString();

на esp8266?

ага

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

ошибка error: 'class UpdaterClass' has no member named 'getErrorString' out = Update.getErrorString();

А если закоментировать рядок работает?

getErrorString видимо появилась буквально недавно, надо её убирать из кода

константы типа UPDATE_ERROR_OOM туда же, даже на версии 3 их нету

У меня esp8266 версии 3.1.1 от файлы окрыл все есть

новейшая версия

поздравляю, но я про версию 3.0 условно

вы на 3.0 ориентируетесь?

вот на это тоже ругается
out += F("real: ") + String(ESP.getFlashChipRealSize(), 10);
лучше эту бяку вообще убрать и сделать
out += F("real: ")
out += ESP.getFlashChipRealSize();

я ориентируюсь на 2.7.4. Третью версию в гробу видал

А есть константа для проверки версии?

да, вот так задана
#define GP_VERSION "3.6.1"

я ориентируюсь на 2.7.4. Третью версию в гробу видал

А что там такого в 3 версии?

А есть константа для проверки версии?

Я про версию esp8266

очень много чего поломано пишут, я пока не планирую переходить. Банально адресные ленты лагают даже

Про ленты знаю и на esp32 тоже мигания очень заметны

что именно не рабоатет? я придумал как это оключить и если нужно включить

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

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);
!

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

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

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

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

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

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

Если функция пустая можно её к нулю прировнять, я в кучи библах видел такое и сам делал. Это должно решить проблему `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 эм, нет. Читай про наследование классов

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

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

image

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

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

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

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

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

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

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

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

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

Otto17 commented

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

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

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

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

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

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

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

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

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

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

Otto17 commented

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ROADMAP

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

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

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

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

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

ROADMAP

что ROADMAP?....

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

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

что ROADMAP?....

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Никак

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

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

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