GyverPortal

novik1

✩✩✩✩✩✩✩
23 Ноя 2022
26
0
ничего лучше не придумал, жду предложений участников. Можно alert вызвать, но окно будет висеть в том числе когда подключение вернётся
да хоть фон страницы менять))
но лучше отдать это на выбор юзеру путем прописывания собственного кода.
 

novik1

✩✩✩✩✩✩✩
23 Ноя 2022
26
0
Однако алёрты не встают в очередь и показывается только один, так что можно так и сделать в новой версии
не не не - только не алерты: при неустойчивом соединении просто невозможно будет управлять со страницы ничем, т.к. сейчас таймаут при xhr запросе в 300мсек просто засыпает алертами, блокируя все на странице)

*можно конечно и тайминги вынести для установки извне, но это наверное неактуальо для большинства

такого статуса в стоке хватило бы многим за глаза (или как вариант выводить это лишь при Отсутствующем соединении красным цветом с текстом юзера):
 

Вложения

Daber

✩✩✩✩✩✩✩
13 Дек 2022
10
0
А можно каким-нибудь образом сделать обновление времени в update?
C++:
GP.TIME("time", portal.getSystemTime());
Нужно обновлять время без обновления страницы
Что-то я зашёл уже в тупик
 

novik1

✩✩✩✩✩✩✩
23 Ноя 2022
26
0
было бы еще совсем идеально передавать .css, .js из esp в браузер в .gz формате.
Таким образом в разы уменьшая размеры передаваемых файлов и соответственно увеличивая скорость загрузки этих самых файлов.
Это позволяет загружать из esp таких монстров как например highstock или highcharts.gauge размером в 400кб буквально за пару секунд (само собой кэшируя эти файлы впоследствии).

Есть куча конвертеров для этого, например такой:


*кстати там есть примеры и для async web server)))
 

novik1

✩✩✩✩✩✩✩
23 Ноя 2022
26
0
а тот же highcharts.gauge позволяет сделать шикарнейшие стрелочные индикаторы с неограниченным уровнем кастомизации)))

 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
573
из esp в браузер в .gz формате.
Для встроенных скриптов и стилей смысла нет, т.к. они кешируются браузером. А свои личные файлы можно передавать как угодно, сервер отправит
 
Изменено:

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
573
@Daber,
Нужно обновлять время без обновления страницы
Всё внимание на пример с update. Нужно подключить обновление и ответить на него текущим временем

C++:
// build
GP.UPDATE("time");
GP.TIME("time", ui.getSystemTime());

// action
if (ui.update("time")) ui.answer(ui.getSystemTime().encode());
 
Изменено:
  • Лойс +1
Реакции: SoftFelix

Daber

✩✩✩✩✩✩✩
13 Дек 2022
10
0
@AlexGyver, я делал все правильно до этого, но теперь я понял, что у меня UPDATE работает с одним аргументом (time или led35) см. скриншот
Проверял во всех браузерах

Прилагаю код
C++:
GP.UPDATE("time, led35", 5000);

GP.DATE("date", portal.getSystemDate());
GP.TIME("time", portal.getSystemTime());

GP.LED_GREEN("led35"); GP.BREAK();

void action() {
  if (portal.update()) {
    if (portal.update("time")) portal.answer(portal.getSystemTime().encode());
    if (portal.update("led35")) portal.answer(1);
  }
}
 

Вложения

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
573
@Daber,у меня этот код работает корректно
 

Daber

✩✩✩✩✩✩✩
13 Дек 2022
10
0
@AlexGyver, я два дня потратил на то, чтобы запустить в своём коде это, так и не вышло, работает, только если в update передать один параметр, любой, даже не знаю что уже делать, хорошо, буду пробовать дальше, думать в чем может быть проблема
 

aidar_i

✩✩✩✩✩✩✩
1 Май 2021
64
8
Как исправить:
WhatsApp Image 2022-12-18 at 21.15.20.jpeg
C++:
#include <GyverPortal.h>

GyverPortal portal;
String val ;
String Text;

void setup()
{
    portal.attachBuild(build);
    portal.attach(action);
    portal.start();
}
void build()
{
    GP.BUILD_BEGIN();
    GP.THEME(GP_DARK);
    GP.BLOCK_BEGIN(" ");
    GP.LABEL("Если написать что то длинное, то сообщение выходит за рамки отрисовки блока... Пробовал на разных отрисовках, тоже самое","val ");
    GP.BREAK();
    GP.LABEL_BLOCK("Если написать что то длинное, то сообщение выходит за рамки отрисовки блока... Пробовал на разных отрисовках, тоже самое", "lb1", "");
    GP.BREAK();
    GP.UPDATE(PSTR("lb"),  1000);
    GP.LABEL(Text, "lb");
    GP.BLOCK_END();
    GP.BUILD_END();
}
void loop()
{
        portal.tick();
}
void action()
{
 
    Text = String("Если написать что то длинное, то сообщение выходит за рамки отрисовки блока... Пробовал на разных отрисовках, тоже самое");
    portal.updateString("lb",Text);

}
 
Изменено:

allexnero2

✩✩✩✩✩✩✩
18 Дек 2022
3
1
Подскажите GPtime можно разложить по часам, минутам и секундам? Не могу понять как это сделать. Или преобразовывать GPtime в стринг и из стринга уже вытаскивать нужные параметры.
 

CCat

✩✩✩✩✩✩✩
18 Дек 2022
4
0
Хочу сделать, чтобы портал (вместе с возможностью OTA) работал только первые 10 минут при включении.
Wi-Fi в дальнейшем вообще не нужен в текущей железяке.

Достаточно по истечении 10 минут выполнить
C++:
WiFi.mode(WIFI_OFF);
portal.stop();
или нужно как-то правильнее?
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
573
@Daber, библиотека актуальной версии? Попробовать браузер Chrome. Обновить страницу через Ctrl+F5, это очистит кэш
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
573
@aidar_i, LABEL это текст подписи, не имеет переноса. Для вывода просто текста можно использовать SPAN или PLAIN
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
573
@allexnero2, GPtime это структура, как и GPdate и GPcolor, у них внутри есть переменные. Например у GPtime это
uint8_t hour, minute, second, см документацию. То есть можно вот так
C++:
GPtime time;
time.hour = 10;
my_func(time.second);
// и так далее
Если GPtime прилетает с браузера - его можно разбирать на часы/минуты/секунды таким образом, в этих переменных и хранится время GPtime
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,253
1,297
Москва
@CCat,
Да, так работать будет. Но вообще , если следовать логике. Сначала запускается WiFi, потом начинает работать портал, то и выключал бы я в обратном порядке: сначала остановил портал, потом WiFi. В данном случае это не принципиально, но логически выглядит правильнее: вы ведь сначала открываете дверь в дом, потом в доме зажигаете свет, а когда уходите делает в обратом же порядке.
 
  • Лойс +1
Реакции: CCat

allexnero2

✩✩✩✩✩✩✩
18 Дек 2022
3
1
@AlexGyver,Спосибо большое с GPtime разобрался. Но возник следующий вопрос getSystemTime() разве не имеет формат GPtime? Просто в чем дело, мне нужно устанавливать время на DS3231 через браузер. С помощью GPtime я понимаю как это сделать, а есть такая возможность чтобы устанавливать время с SystemTime()? Вытащить отдельные элементы из систем тайм.
 

SCHMaster

✩✩✩✩✩✩✩
20 Дек 2022
14
2
В первую очередь - огромное спасибо автору AlexGyver за его время на развитие библиотеки. Очень выручила в связи с необходимостью отказаться от Blynk. Какое-то время уже использую GyverPortal - переделываю вэб-морды своих железок. И если с Ардуинкой я более-менее дружу (вроде), то все, что касается вэб-программирования - "кто- там? я сам открою...".
В связи с этим вопрос...Подскажите, плз, каким образом изменить заголовок страницы на свой...
Пока нашел только вариант с правками в scripts.h... Но, подозреваю, это не совсем правильный метод.
Заранее благодарен.
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@SCHMaster, не совсем понятно, о чём вопрос. В документации описано. GP.TITLE заголовки, если об этом. Также можно менять название вкладки.
 
  • Лойс +1
Реакции: SCHMaster

SCHMaster

✩✩✩✩✩✩✩
20 Дек 2022
14
2
@ASM,
А слона то я и не заметил. GP.PAGE_TITLE - если точнее.
Спасибо, что ткнули носом в очевидное!

Тогда еще один вопрос...
Есть необходимость периодически проверять - подключен клиент или нет...
Делаю это таким образом

C++:
void CheckClientConnect()
{
  bool IP_SET = portal.clientIP().isSet();
// APP_CONNECTED - глобальная переменная.
 if (IP_SET != APP_CONNECTED)
  {
    TX_Data.TX_Mode = RX_MOD_APP_EVENT;
    if (IP_SET)
    {
     TX_Data.TX_CommandID = RX_CMD_APP_CONNECT;
//     Serial.println("RX_CMD_APP_CONNECT " + portal.clientIP().toString());
    }
     else
    {
     TX_Data.TX_CommandID = RX_CMD_APP_DISCONNECT;
 //    Serial.println("RX_CMD_APP_DISCONNECT " + portal.clientIP().toString());
    }
    ET.sendData();   
    APP_CONNECTED = IP_SET;
  }
}
Не уверен, что метод верный, т.к. довольно часто, не смотря на то, что страница открыта в браузере выдает, что IP клиента отсутствует.
Со всеми вытекающими.
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@SCHMaster,
C++:
GP.ONLINE_CHECK();                  // невидимый компонент. Проверка связи с esp, в случае отсутствия связи в названии вкладки появится символ 🚫
GP.ONLINE_CHECK(период);            // + период проверки в мс [int] (умолч. 5000)
В следующем обновлении:
ONLINE_CHECK() теперь выдаёт всплывающее окно с ошибкой вместо иконки в названии страницы