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
24
4
Подскажите, пожалуйста, начинающему, какой командой Портала правильно вывести на печать значение float-переменной датчика температуры с отображением одного знака после запятой? Т.е. что бы выводилось "22.4", к примеру. GP.LABEL ведь выводит только целые значения?

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

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

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

SoftFelix

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

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

SoftFelix

✩✩✩✩✩✩✩
16 Фев 2020
24
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
42
11
@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
24
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
24
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])? Последнее вызывает ошибку компиляции. :(
 
Изменено: