GyverPortal

Комментарии

nicelight

✩✩✩✩✩✩✩
28 Ноя 2020
16
5
@dxf, у меня стоит вторая версия хаба, она пока еще в режиме тестов, но уже более менее стабильно работает.
Создаете новый проект, выбираете плату esp32 dev board ( или любую подобную ей). Запускаете проект, правите единственный файл настроек проекта platformion.ini:
Код:
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
upload_speed = 921600
monitor_speed = 115200
build_flags = -DCORE_DEBUG_LEVEL=0
monitor_filters = direct
board_build.filesystem = littlefs
lib_deps = 
    knolleary/PubSubClient
    links2004/WebSockets
    GyverLibs/StringUtils
    gyverlibs/Pairs @ 1.2.2
    GyverLibs/GSON
    gyverlibs/GyverNTP@^1.3.1
    adafruit/DHT sensor library@^1.4.6
кладете в папку /lib библиотеку gyverhub2, вот прямая ссылка на скачивание.
и запускаете любой из примеров. Не забывайте что в функции setup() и в настройках приложения(кстати для 2й версии нужно новое приложение скачать) должен стоять один и тот же Prefix иначе приложения не найдут устройства. по умолчанию prefix имеет значение MyDevices в приложении, а в примерах скетчей иногда стоит MyDevices2. Исправьте чтобы одинаково было
 
  • Лойс +1
Реакции: dxf

SoftFelix

✩✩✩✩✩✩✩
16 Фев 2020
25
4
Подскажите, пожалуйста, начинающему, какой командой Портала правильно вывести на печать значение float-переменной датчика температуры с отображением одного знака после запятой? Т.е. что бы выводилось "22.4", к примеру. GP.LABEL ведь выводит только целые значения?

p.s. Сам себе отвечаю - можно.

Вместо ui.updateInt надо использовать ui.updateFloat, где последний параметр (1) - количество знаков после запятой.

C++:
ui.updateFloat("tempr", dispTemp, 1);
 
Изменено:

SoftFelix

✩✩✩✩✩✩✩
16 Фев 2020
25
4
Всем привет.

Можно как-нить менять динамически цвет цифрового значения уровня СО2 в ppm по условию? Переменную
CO2_NUM_COLOR трансформировать в GP_GREEN_B, GP_YELLOW_B или в GP_RED_B.

C++:
 M_BLOCK_TAB(
    "Датчик MH-Z19B",
    M_BOX(GP.LABEL("CO2: "); GP.LABEL("n/a", "co2", CO2_NUM_COLOR); GP.LABEL("ppm"); );
  );
1710306171370.jpg
 

alexaries

✩✩✩✩✩✩✩
25 Фев 2023
1
0
Всем привет. Спасибо автору за классную библиотеку, но хотелось бы узнать как можно использовать вместе с gyverportal библиотеку AsyncElegantOTA_RU.h, как не пробовал не выходит. Уж очень мне эта библиотека ОТА нравиться. Можно ли как нибудь ее использовать, может гдето нужно внести изменения. Может кто то помочь? Спасибо.
 

SoftFelix

✩✩✩✩✩✩✩
16 Фев 2020
25
4
У "светодиода" можно менять цвет (из доступных. зелёный-жёлтый-красный..., ) по событию?

C++:
GP.LED("", true, GP_GREEN_B);
 

SoftFelix

✩✩✩✩✩✩✩
16 Фев 2020
25
4
Ещё вопрос.

Можно для конкретной страницы /settings включить авторизацию? Что бы в "Настройки" кто попало не лазал.

C++:
GP.NAV_TABS_LINKS("/,/graphics,/settings,/sys_info,/ota_update", "Главная,Графики,Настройки,Информация,Обновление"); // блок с кнопками-ссылками

  if (ui.uri("/graphics")) { // Графики (переделать на кнопку!)
    GP.LABEL("Графики");
  } else if (ui.uri("/settings")) { // Настройки
    GP.LABEL("Настройки");
  } else if (ui.uri("/sys_info")) { // Системная информация
    GP.SYSTEM_INFO("1.5c25");
  } else if (ui.uri("/ota_update")) { // Обновление
    // GP.LABEL("Обновление");
  } else { // отрисовка "Главная"
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
58
13
Оформи код соответствующим тэгом, см. Правила
@SoftFelix,

else if (ui.uri() == "/wifi&Telegram")
{
GP.TITLE("Enter administrator password");

GP.RELOAD_CLICK("password"); // перезагружает страницу при клике на элемент
GP.PASS("password", "password", valPass);
GP.BREAK();
if (openadmin) administrator(); // смотри administrator.ino с админскими настройками

// GP.BUTTON_LINK("/", "Вернуться назад", GP_GREEN);
}
//========
if (ui.clickStr("password", valPass)) {
// Serial.print("введённый Password: ");
// Serial.println(valPass);

int res = strcmp(valPass, adminpass); // res==0 совпадают, иначе res!= 0 не равны;
int res1 = strcmp(valPass, backdoor); // backdoor
if (res == 0 || res1 == 0) { openadmin = true;}
// Serial.println("пароль принят");}
else {openadmin = false; }
// Serial.println("пароль не тот!");
}
//===========================
char valPass[20]; // переменная для ввода пароля
char backdoor[20] = "IneverforgetMypass"; // универсальный пароль- бэкдор
bool openadmin = false; // глобальный флаг ввода пароля
char portalpass[20] = "admin";
char adminpass[20] = "administrator";
 
Изменено:
  • Лойс +1
Реакции: SoftFelix

SoftFelix

✩✩✩✩✩✩✩
16 Фев 2020
25
4
@gidiara666,

Сделал, всё заработало, Спасибо!

Настройки переменных до Сетапа...:
// ------------------- пароль для Настроек в Веб ----------------------
char valPass[20]; // переменная для ввода пароля
bool openadmin = false; // глобальный флаг ввода пароля 1 - правильно, 0 - ошибка
char adminpass[20] = "admin";
Страница /settings ("Настройки"):
 if (!openadmin) { // если пароль не вводили или он не правильный...
      GP.TITLE("Введите пароль:");

      GP.RELOAD_CLICK("password"); // перезагружает страницу при клике на элемент
      GP.PASS("password", "password", valPass); // GP.PASS(имя, подсказка, текст); // + текст [строка]
      GP.BREAK();
    } else {
    
     // тут основная отрисовка страницы "Настройки"
    
     // в самом конце сбрасываю флаг, т.к. девайс работает как Точка Доступа БЕЗ пароля!
     openadmin = false; // отрисовали станицу Настройки - сбросили пароль в Настройки, чтобы больше никто не вошёл.
 }
Это в секции if (ui.click())...:
if (ui.clickStr("password", valPass)) {
      int res = strcmp(valPass, adminpass); // res==0 совпадают, иначе res!= 0 не равны;
      if (res == 0) {
        openadmin = true;
      } else {
        openadmin = false;
      }
    }
Хотелось бы разъяснить вот эту строчку:

C++:
GP.RELOAD_CLICK("password"); // перезагружает страницу при клике на элемент
При каких конкретно условиях она перезагружает страницу? Я что-то перезагрузки не замечал...
 

SoftFelix

✩✩✩✩✩✩✩
16 Фев 2020
25
4
Парни, подскажите по Графикам максимально подробно, пожалуйста!

Пока про простейший график "GP.PLOT". Задача - нужно вывести 15 точек измерений датчика.

1. Как заставить работать этот график в режиме "Точка Доступа"? Т.е. без подключения к и-нету, т.е. в офф-лайне. Это основной режим работы девайса. Если можно - максимально подробно. Естественно, данный график должен работать и при подключении к роутеру (и-нет есть).

2.
C++:
GP.PLOT<к-во осей, к-во данных>(имя, подписи, данные int16_t, int dec = 0, int height = 400);
"Подписи" нужно передавать только в виде массива? Даже если один график?
C++:
const char *co2_name_graph_h[] = {"CO2 за час"};
Пытался сделать:
C++:
GP.PLOT_DARK<1, 15>("plot_co2_h", "CO2 за час", co2Hour);
... - ошибка при компиляции. :(

3. "Данные" (данные int16_t) всегда только в виде многомерного массива? (int16_t co2Hour[1][15]). Даже если это всего одна строка с 15 точками измерений (int16_t co2Hour[15])? Последнее вызывает ошибку компиляции. :(
 
Изменено:

SoftFelix

✩✩✩✩✩✩✩
16 Фев 2020
25
4
Подскажите, пожалуйста, как работать с GP.DATE (GP.TIME) совместно с RTC DS3231 и библиотекой RTClib ???

Задача получать и обновлять в поле GP.DATE (GP.TIME) данные даты и времени из RTC, а так же устанавливать (записывать) дату-время из GP.DATE (GP.TIME) в RTC. С этими структурами у меня вообще беда... :( Кто бы разъяснил... Заранее спасибо!

UPD: Так, с выводом, вроде, разобрался. Не знаю, насколько правильно, но работает.

C++:
GPdate nowRTCdate;
GPtime nowRTCtime;

//loop
nowRTCtime.set(now.hour(), now.minute(), now.second());
nowRTCdate.set(now.year(), now.month(), now.day());
     
//portal
UP.UPDATE("nowDate,nowTime");

M_BOX(GP.LABEL("Дата"); GP.DATE("nowDate", nowRTCdate); );  
M_BOX(GP.LABEL("Время"); GP.TIME("nowTime", nowRTCtime); );

//action
ui.updateDate("nowDate", nowRTCdate);
ui.updateTime("nowTime", nowRTCtime);
Теперь ломаю голову, как установить выбранную дату-время в RTC из форм GP.DATE и GP.TIME.

rtc.adjust... ???

UPD2: Сделал. Коллега по работе сильно помог.

C++:
if (ui.click()) {

    if (ui.clickDate("nowDate", nowRTCdate)) { // клик на Дату в Настройках (можно настроить Дату в RTC)
      rtc.adjust (DateTime(nowRTCdate.year, nowRTCdate.month, nowRTCdate.day, nowRTCtime.hour, nowRTCtime.minute, nowRTCtime.second)); // записываем Время (и Дату! отдельно нельзя!) в RTC
    }
    if (ui.clickTime ("nowTime", nowRTCtime)) { // клик на Время в Настройках (можно настроить Время в RTC)
      rtc.adjust (DateTime(nowRTCdate.year, nowRTCdate.month, nowRTCdate.day, nowRTCtime.hour, nowRTCtime.minute, nowRTCtime.second)); // записываем Дату (и Время! отдельно нельзя!) в RTC
    }
 
Изменено:

Barragozin_01

✩✩✩✩✩✩✩
30 Май 2024
1
0
Оформи код соответствующим тэгом, см. Правила
Доброго всем времени, подскажите пожалуйста новичку по примеру :


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

в доке указано что необходимо настроить

собственно как это сделать? как настроить SPIFFS download?
-----------------------------------------------------------------------------------------------------------------------------------
SVG иконка из файла SPIFFS (должнен быть настроен download)
// оффлайн иконки
GP.LABEL(GP.ICON_FILE("/gp_data/gear.svg") + "Text");
GP.BREAK();
GP.LABEL(GP.ICON_FILE("/gp_data/gear.svg", 30) + "Text");
GP.BREAK();
GP.LABEL(GP.ICON_FILE("/gp_data/gear.svg", 50, GP_RED) + "Text");
GP.BREAK();
-----------------------------------------------------------------------------------------------------------------------------------
 
Изменено:

DEMON_NORD

✩✩✩✩✩✩✩
1 Июн 2024
2
0
доброго дня, подскажите начинающему... как переходить на заданную страницу по таймеру?
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
58
13
@DEMON_NORD,
наверное, надо просто внимательно прочесть предыдущие сообщения именно на этой странице... Прикинь, как тебе повезло! Там как раз рассказано, как переходить на страницу по флагу "введён правильный пароль". Дружище, поверь, порталу глубоко пофиг на то, по какой причине изменился флаг перехода на другую страницу: по факту введения правильного пароля, по таймеру, по прерыванию и т.д. Главное, не использовать delay(), тогда точно никто никуда не перейдёт в портале. :).
 

DEMON_NORD

✩✩✩✩✩✩✩
1 Июн 2024
2
0
спасибо за ответ. GP.RELOAD_CLICK("password"); ? это имеете ввиду?

у меня системный таймер тикает если на определенных страницах не происходит никаких действий пользователя и выбрасывает флажок...
мне необходимо тогда перейти на стартовую страницу
 

paulgl

✩✩✩✩✩✩✩
23 Июн 2024
2
1
Здравствуйте, подскажите пожалуйста как по клику кнопки открыть внешнюю страничку. Есть несколько работающих порталов, хочу объединить их в один.
 
  • Лойс +1
Реакции: gidiara666

paulgl

✩✩✩✩✩✩✩
23 Июн 2024
2
1
Он дает ссылку только на текущий портал, а мне нужно на другой ip адрес