GyverPortal

Sergo_ST

★★★★★★✩
15 Мар 2020
1,037
865
@SoftFelix, Я уже точно не помню, проблема со стилями для "input radio"(чем и является на самом деле индикатор).
Без внесения изменений в библиотеку это никак не исправить.
Поэтому или использовать то что я выше выкладывал, или, написать свой кастомный лед.
 
  • Лойс +1
Реакции: SoftFelix

Doctor Death

✩✩✩✩✩✩✩
16 Мар 2025
12
0
Приветствую, подскажите , а то слега запутался
Есть вот такой блок настроек
1742448631267.png
для сохранения изменений использую функцию clik:
C++:
if (portal.click()){
      if (portal.clickInt("dhcp", dhcp_on)) {
    EEPROM.put(1,dhcp_on);  n2=n2+1;   }
  if (portal.clickInt("ap",ap_on))  {
    EEPROM.put(2,ap_on);  n2=n2+1;  }
      if (portal.clickString("hostname2",hostname2))  {
    hostname2.toCharArray(hostname1, 16); EEPROM.put(90,hostname1);  n2=n2+1;  }
  if (portal.clickString("ssid2",ssid2))  {
    ssid2.toCharArray(ssid1, 16); EEPROM.put(150,ssid1); n2=n2+1;  }
  if (portal.clickString("pass2",pass2))  {
    pass2.toCharArray(pass1, 16); EEPROM.put(210,pass1); n2=n2+1;  }
  if (portal.clickString("ip2",ip2))  {
    ip2 = portal.getString("ip2");  IPAddress ip;  ip.fromString(ip2);  for (int i = 0; i < 4; ++i) { EEPROM.put(10+i,ip[i]); }  n2=n2+1;  }
  if (portal.clickString("mask2",mask2))  {
    IPAddress mask; mask.fromString(mask2); for (int i = 0; i < 4; ++i) { EEPROM.put(15+i,mask[i]); } n2=n2+1;  }
  if (portal.clickString("gw2",gw2))  {
    IPAddress gw; gw.fromString(gw2); for (int i = 0; i < 4; ++i) { EEPROM.put(20+i,gw[i]); }  n2=n2+1;    }
  if (portal.clickString("dns2",gw2))  {
    IPAddress dns; dns.fromString(dns2); for (int i = 0; i < 4; ++i) { EEPROM.put(25+i,dns[i]); } n2=n2+1;   }
}
Однако , как оказалось при изменении данных в полях или лоложения переключателей они применяются сразу , а не по нажатию кнопки "save" , как это поправить?
 

RomaT

★✩✩✩✩✩✩
5 Ноя 2019
115
39

@Doctor Death,
Однако...
Что вы попросили, то и происходит. После каждого ввода вы пишите в епром.
Создайте или структуру, или проще кучу временных переменных типа temp_dhcp_on, temp_ap_on,.... А потом по нажатию кнопки сохраняйте их все в епром
.onclick
{EEPROM.put(1,dhcp_on);
EEPROM.put(2,ap_on);
....}
 

Sergo_ST

★★★★★★✩
15 Мар 2020
1,037
865
@Doctor Death, В примерах к библиотеке есть пример работы с формой, GyverPortal - > demos -> actionForm.
После нажатия на кнопку submit будет вызван action form, в нём копируете все данные из полей к себе в переменные и сохраняете в память.
 
  • Лойс +1
Реакции: Doctor Death

Doctor Death

✩✩✩✩✩✩✩
16 Мар 2025
12
0
Подскажите, никак не пойму в чем проблема с функцией log.
в примере возврат данных в функцию ui.log.println(random(100)); выполняется в loop, мне надо выполнять возврат по клику в action , но возврата не происходит.
C++:
GP.NAV_BLOCK_BEGIN();
GP_MAKE_BLOCK_TAB("Ping", GP.LABEL("");
GP_MAKE_BOX( GP.TEXT("ping", "Destination IP", lpip););
GP.AREA_LOG(7);     );
GP.NAV_BLOCK_END();
void action() {
if (portal.click()){
if (portal.click("ping"))  {
    HL(portal.getString("ping"));
    portal.log.print("Ping: "); portal.log.println(portal.getString("ping"));
    portal.log.println(portal.getString("ping_ret")); 
    Serial.print("Ping: ");  Serial.println(portal.getString("ping"));    Serial.println(ping_ret);
}
 
Изменено:

Doctor Death

✩✩✩✩✩✩✩
16 Мар 2025
12
0

@Doctor Death,
По всей видимости имелось ввиду .getString(ping)?
нет ,в функции HL(portal.getString("ping")); все в норме, после нее возвращается ping_ret и в Serial.print все выводиться как надо
тут даже не печатает банальное portal.log.print("Ping: ");
 

RomaT

★✩✩✩✩✩✩
5 Ноя 2019
115
39
А что за функция такая HL?
А вы страницу обновляете после записи в log?
 
Изменено:

Doctor Death

✩✩✩✩✩✩✩
16 Мар 2025
12
0
C++:
String HL(String lpip) {
ping_ret = "";
IPAddress ping_ip;
ping_ip.fromString(lpip);
bool ret = Ping.ping(ping_ip);
for (int i = 0; i < 3; ++i) {
if(ret == 1){
     float avg_time_ms = Ping.averageTime();
     ping_ret  = ping_ret + lpip + " " + avg_time_ms + " mS";
     } else {
     ping_ret = ping_ret + "Request timed out.";
}
ping_ret = ping_ret + " /n";
}
return ping_ret;                   
    }
нет не обновляю, но эт ои ненужно, насколько я понимаю , именно этим лог и отличается
 

RomaT

★✩✩✩✩✩✩
5 Ноя 2019
115
39
именно этим лог и отличается
вообще не факт
подключитесь буком к плате, откройте хром со страницей и F12, на вкладке Network посмотрите идут ли запросы от бука к плате типа
/GP_update?GP_log, на что плата должна отвечать 1.
Если нет, то попробуйте вставить
C++:
      if (portal.update("GP_log")) {
        portal.answer(1);
      }
тут не понятно
C++:
HL(portal.getString("ping"));
C++:
String HL(String lpip) {
return ping_ret;                  
    }
ping_ret кто получает?
 
Изменено:

Doctor Death

✩✩✩✩✩✩✩
16 Мар 2025
12
0
log.print его получает , и setial да , в serial все отдается нормально, в log.print нет
сейчас на это даже обращать внимание не стоит, так как не печатается даже portal.log.print("Ping: "); простейшей
1742725963519.png
1742726006575.png
а вот если portal.log.print("Ping: "); вставить в блок loop()
то он начинает печатать , в бесконечном цикле конечно , но в такомраскладе печатает, а из action() нет

1742726180899.png
 

RomaT

★✩✩✩✩✩✩
5 Ноя 2019
115
39
Почему на последнем скрине только Ping: ? Одна строчка была только в loop?
C++:
portal.log.println(portal.getString("ping_ret"));
мне так кажется, что должно быть всё таки
C++:
portal.log.println(ping_ret);
и очень для меня странный кодинг вызова String с возвратом в глобальную переменную. Тут или вы гуру со своими тараканами, или идёте не потому пути.
 

Doctor Death

✩✩✩✩✩✩✩
16 Мар 2025
12
0
почему на последнем скрине только Ping: ? Одна строчка была только в loop?
[да именно так я добавил для теста только вывод непосредственно текста
C++:
void loop(){
    snmp.loop();
    portal.tick();
    portal.log.print("Ping: ");
  }
и очень для меня странный кодинг вызова String с возвратом в глобальную переменную. Тут или вы гуру со своими тараканами, или идёте не потому пути.
вовсе не гуру

Давайте сейчас остановимся ! Вы привязались к вызову функции HL и ее выводе. Давайте ребутнемся :) чтобы не путаться - нет этой функции и нет переменной , проблема более глобальная !
Вот это, тупо не работает:

C++:
GP.NAV_BLOCK_BEGIN();
GP_MAKE_BLOCK_TAB("Ping", GP.LABEL("");
GP_MAKE_BOX( GP.TEXT("ping", "Destination IP", lpip););
GP.AREA_LOG(7);     );
GP.NAV_BLOCK_END();

void action() {
  if (portal.update()) {
if (portal.click("ping"))  {
       portal.log.print("Ping: "); portal.log.println(portal.getString("ping"));
    Serial.print("Ping: ");  Serial.println(portal.getString("ping")); 
  }
  }}
не выводи абсолютно ничего в log ,при вводе в форму, при этом в serial все выводится
 

RomaT

★✩✩✩✩✩✩
5 Ноя 2019
115
39
@Doctor Death,
А если вывести?

C++:
void loop(){

    snmp.loop();

    portal.tick();

    HL(portal.getString("ping"));

    portal.log.print("Ping: "); portal.log.println(portal.getString("ping"));

    portal.log.println(portal.getString("ping_ret"));

}
и еще интересно
Serial.println(portal.log.length());

ЗЫ
И кстати, обратите внимание на ваш лог в консоли
_handleRequest(): request handler not found
что говорит о том, что вы не обрабатываете запрос к серверу
 
Изменено: