GyverPortal

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
296
524
@ASM,
уроки тут не причем)
Как насчёт того что ты глобально создаёшь число, затем локально создаёшь строку с таким же именем переменной, и ждёшь каких то изменений от глобальной переменной? Я поэтому и отправил в уроки. Разобраться наконец с типами переменных, почему они всё таки существуют разные и как они между собой совмещаются. И как работает возврат функции. А также с областью определения - локальная и глобальная, и что происходит если у переменных одинаковые имена.

uint32_t это целые числа, тогда логично использовать copyInt()
Логично, но только вот цвет с браузера идёт в формате web color, это строка вида #RRGGBB. И её нельзя парсить как инт. Поэтому специально был сделан GPcolor, который может отдавать и int 24-бит, и три цвета отдельно, и web color. На все случаи жизни

Надо попробовать записать без первых знаков...
Опять же - изучать базовые уроки. Строка, даже если она содержит число - не является числом. Это всё ещё строка, и передавать её туда, где ожидают численный тип - нельзя. Это база.

формат вывода у него не под FastLED
Может стоит посмотреть документацию на GPcolor?
C++:
// переменные
uint8_t r, g, b;

// методы
uint32_t getHEX();          // получить 24 бит цвет
В FastLED можно передать условно как leds[i] = color.getHEX(). А также использовать CRGB(color.r, color.g, color.b)
 
Изменено:
  • Лойс +1
Реакции: ASM

ASM

★★★✩✩✩✩
26 Окт 2018
930
177
кучу вариантов использовал, но на часах либо розовый, либо зеленый цвет, а не синий)

еще непонятно, почему такой вариант выдает розовый)
C++:
CRGB ledColor = CRGB(0, 255, 255);
п.с. может профили меняются местами, по типу ленты, GRB?)
проверяю...
оказывается вот в чем была проблема, из-за профиля ленты... столько проблем из-за RGB COLOR))

Если запишу так, то все ок)
C++:
GPcolor color(0, 255, 255);
CRGB ledColor = CRGB(color.g, color.r, color.b);
а если так, то цвет розовый))
C++:
GPcolor color(0, 255, 255);
CRGB ledColor = CRGB(color.g, color.r, color.b);
EEManager mem5(ledColor);
 
Изменено:

Samoswall

✩✩✩✩✩✩✩
16 Ноя 2022
6
1
@Samoswall
Отвечу сам на свой вопрос!
Вдруг кому понадобиться обновлять элементы стиля.

void build() {:
  String ss1, ss2;
  ss1 = "<div class='battery' style='--charge: 100;'><span/></div>";
  ss2 = "<label id='myss2' style='display: none;'>100</label>";
  ss2 += "<script>setInterval(function(){";
  ss2 += "var valbatt=document.getElementById('myss2').innerHTML;";   
  ss2 += "document.querySelector('.battery').style.setProperty('--charge',valbatt);";
  ss2 += "},2000);</script>";
  GP.BUILD_BEGIN(600);
  GP.THEME(GP_LIGHT);
  GP.UPDATE("test_label_on_off,test_led,mdate,mtime,myss2");
  GP.SEND(ss2);
  GP.NAV_TABS("Главная,Настройки,Тест");
  GP.NAV_BLOCK_BEGIN();
    GP.BLOCK_BEGIN(GP_TAB,"","Инфо");
      GP.BOX_BEGIN();
        GP.LABEL("00:00:00", "mtime");
        GP.LABEL("00.00.2000", "mdate");
      GP.BOX_END(); 
      GP.HR();
      GP.BOX_BEGIN();
        GP.LABEL("Имя устройства");
        GP.LABEL("Test 1");
      GP.BOX_END();
      GP.HR(); 
      GP.BOX_BEGIN();
        GP.LABEL("Заряд АКБ");
        GP.SEND(ss1);
      GP.BOX_END();
    GP.BLOCK_END();
void action() {:
  if (portal.update()) {
     String valDate=ntp.dateString();
     String valTime=ntp.timeString();
     portal.updateString("mdate", valDate);
     portal.updateString("mtime", valTime);
     sval_batt = String(bat_lvl);
     portal.updateString("myss2", sval_batt);
  }
В 3 строке скрытый label, значение которого обновляем стандартным методом.
В 4-7 скрипт, который читает значение в скрытом label и записывает в элемент стиля --charge:
Получилось то, что хотел:
1668870250462.png
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
296
524
@ASM,
еще непонятно, почему такой вариант выдает розовый)
Потому что неправильно настроен порядок цветов в ленте, см примеры или уроки по fastled
 

ASM

★★★✩✩✩✩
26 Окт 2018
930
177
@AlexGyver, странно это... Проекту уже несколько лет, всё работало... А тут вдруг неправильно стало, не меняя тип ленты.
 

aidar_i

✩✩✩✩✩✩✩
1 Май 2021
50
7
@ASM, библиотеки постоянно обновляют, что то поменяли значит. У вас скорее в инициализации ленты проблема, в строке FastLED.addLeds<WS2811,2,RGB>(leds,NUM_LEDS); поиграйте с параметром RGB (BRG, GRB и тд) пока не будет правильно.
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
296
524
@ASM,
Проекту уже несколько лет, всё работало.
Вот так вот вдруг ни с чего (0, 255, 255) в розовый не превращается. Значит тип ленты изначально стоял неправильный и цвета были искажены
 

ASM

★★★✩✩✩✩
26 Окт 2018
930
177
Вот он многолетний косяк, который прошел многое со времен ардуинки, который только сейчас всплыл))
C++:
#define COLOR_ORDER GRB
FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS);
тип ленты указан верно, но почему-то вместо переменной указано значение.
никто за это время не пожаловался на этот момент, и было бы не заметно, пока я не сменил HEX на RGB...
 

aidar_i

✩✩✩✩✩✩✩
1 Май 2021
50
7
Это Вы невнимательны, я сколько пользовался никогда такого не было, сперва смотрел этот параметр. В примерах может быть ошибки, но библиотека же правильная.
 

novik1

✩✩✩✩✩✩✩
23 Ноя 2022
7
0
контроль соединения как проще реализовать?
как определить на веб странице - есп еще доступна в локалке или уже нет?)
 

ASM

★★★✩✩✩✩
26 Окт 2018
930
177
@novik1, в стандартных примерах, проверка статуса WiFi)
C++:
while (status != WL_CONNECTED) {
Пусть код определяет, и если что переподключается.
 

ASM

★★★✩✩✩✩
26 Окт 2018
930
177
@novik1, так поддерживать соединение, зачем web проверка?)
Или какие-то особенные запросы?)
 

novik1

✩✩✩✩✩✩✩
23 Ноя 2022
7
0
@ASM,
вот я сижу и втыкаю на страничку есп.
Отлучился куда нить.
Возвращаюсь к монитору, а за время пока я шлялся, роутер помер или есп)))
Как мне браузер об этом может сообщить?

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

вот этот нюанс можно как то обработать?
 

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

★★★★★★★
14 Авг 2019
3,713
1,122
Москва
Чисто теоретически можно отправлять раз в цать сек. запрос и уже обрабатывать от него ответ. Не спец в html, а гайверпортале вообще ничего не знаю. Но на html + javascript подобное сделать можно.
 

novik1

✩✩✩✩✩✩✩
23 Ноя 2022
7
0
Чисто теоретически можно отправлять раз в цать сек. запрос и уже обрабатывать от него ответ.
вооо то что надо!
если нет ответа - маякуем на страничке как нибудь!

никто не делал такое?

можно же свой код вставить в портале, ну чтоб в библиотеку не лезть.
Ток не уверен что проканает код с такими тегами: "<script>тутсвойкод</script>"
 

ASM

★★★✩✩✩✩
26 Окт 2018
930
177
@novik1, думаю да, только надо JavaScript проверки сделать. Либо делать проверку значений через update, и если проверка обновлений не прошла, вывести сообщение. Точно не могу сказать, не применял похоже)
 

ASM

★★★✩✩✩✩
26 Окт 2018
930
177
@novik1, можешь свой код, можешь ссылаться на файл в памяти.
C++:
GP.JS_TOP();                        // верхний блок JS скриптов (для кликов, слайдеров и т.д.)
GP.JS_TOP_FILE();                   // файл скриптов скачается из памяти (/gp_data/scripts.js)
GP.JS_BOTTOM();                     // нижний блок JS скриптов (для кликов, слайдеров и т.д.)

GP.SEND(код);                       // добавить свой код на страницу ("строка", F("строка"), String)
GP.SEND_P(pgm код);                 // добавить свой код на страницу (PGM_P, PROGMEM)
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
296
524
@novik1,
как определить на веб странице - есп еще доступна в локалке или уже нет?)
сделал, появится в обновлении v3.4

можно же свой код вставить в портале, ну чтоб в библиотеку не лезть
конечно, отправляешь любой текст через GP.SEND()

код с такими тегами: "<script>тутсвойкод</script>"
именно так это и делается
 
Изменено:

aidar_i

✩✩✩✩✩✩✩
1 Май 2021
50
7
Что то не могу вывести иконку
C++:
#include <WiFi.h>
#include <GyverPortal.h>
GyverPortal portal;
IPAddress local_IP(192,168,1,200);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255, 255, 255, 0);
void action()
{
}
void setup()
{
    WiFi.mode(WIFI_STA);
    WiFi.begin("MTS", "12345678");
    WiFi.config(local_IP, gateway, subnet);
    if(0) portal.enableAuth("login", "password");
    portal.attachBuild(build);
    portal.attach(action);
    portal.start();
}
void build()
{
    GP.BUILD_BEGIN();
    GP.THEME(GP_DARK);
    GP.ICON_SUPPORT();
    GP.ICON("camera");
    BUILD_END();
}
void loop()
{
  portal.tick();
}
 
Изменено:

Barmer

✩✩✩✩✩✩✩
3 Ноя 2022
3
0
float в Ajax графике не поддерживается?
Как выкрутиться можно?
График Ajax:
GP.AJAX_PLOT("plot3", 3, 1200, 3000);

if (portal.update("plot3"))
    {
      float answ[] = {value3, value2, value4};
      portal.answer(answ, 3);    //отсутствуют экземпляры перегруженная функция "GyverPortal::answer", соответствующие списку аргументовC/C++
    }
Делителя в заголовке функции не увидел.
Хотя в wiki написано, что у всех трех типов есть делитель.
 
Изменено: