GyverPortal

Владлэн

✩✩✩✩✩✩✩
28 Авг 2023
20
4
@gidiara666,
У меня часы с RTC работают так, что время в RTC я могу записать из браузера или из интернета по нажатию кнопок. Код такой:
C++:
    //кнопка записи времени браузера в RTC
    if (ui.clickSub("btn/datetimebr")) {
        rtc.adjust(DateTime(ui.getUnix()+ui.getGMT()*60));
        }

    //кнопка записи времени NTP в RTC
    if (ui.clickSub("btn/datetimentp")) {
        if(timeClient.isTimeSet())
            {
            rtc.adjust(DateTime(timeClient.getEpochTime()));
            }
        else
            {
            timeClient.forceUpdate();   
            if(timeClient.isTimeSet())
                {
                rtc.adjust(DateTime(timeClient.getEpochTime()));
                }
            }
        }

Или другой вариант, автоматический. RTC в устройстве нету, так что время берётся при запуске из интернета, если не удалось, то при посещении странички устройства оно берёт время из браузера.

C++:
bool _timeMode = 0; //откуда брать время (0 - NTP, 1 - браузер)
uint16_t _getNTPtimeInterval = 60*60; //интервал обновления времени из интернета, раз в час
uint8_t _myTimerIDgetNTPtime;//id таймера, который вызывает getNTPtime(){timeClient.forceUpdate();}
_myTimerIDgetNTPtime = myTimer.setInterval((60*60*1000), getNTPtime);    //раз в час обновлять время

uint8_t hour,minute=0;


    if(ui.getUnix()>1695124052)//время в GP правильное
        {
        if(_timeMode==1)//брать время из GP, которое берётся из компьютера при посещении страницы устройства
            {
            hour = ui.getSystemTime().getHours();
            minute = ui.getSystemTime().getMinutes();               
            }
        }
    else
        {//время в GP неправильное
        _timeMode=0;//переключить режим на получение времени из интернета, так как из браузера не получали
        }
        
    if(timeClient.isTimeSet())//время из интернета актуально
        {   
        if(_timeMode==0)//выбран режим отображения времени интернета
            {
            hour = timeClient.getHours();
            minute = timeClient.getMinutes();               
            }
            
        if(_getNTPtimeInterval==60)//время обновляется раз в минуту
            {
            //перенастроить таймер на обновление раз в час
            _getNTPtimeInterval=60*60;
            myTimer.deleteTimer(_myTimerIDgetNTPtime);
            _myTimerIDgetNTPtime = myTimer.setInterval((_getNTPtimeInterval*1000), getNTPtime);    //раз в минуту обновлять время           
            }
        }
    else
        {//время из интернета не взято
        if(_timeMode==0)//но оно нужно
            {
            if(_getNTPtimeInterval!=60)//таймер обновляется раз в час
                {
                //перенастроить таймер на обновление раз в минуту
                _getNTPtimeInterval=60;
                myTimer.deleteTimer(_myTimerIDgetNTPtime);
                _myTimerIDgetNTPtime = myTimer.setInterval((_getNTPtimeInterval*1000), getNTPtime);    //раз в минуту обновлять время               
                }
            //следующий заход попробовать взять время из браузера
            _timeMode=1;
            }
        }
*****************
Справку для юзера можно поместить в блок GP.SPAN(текст); или GP.PLAIN(текст);
 
  • Лойс +1
Реакции: gidiara666

nicelight

✩✩✩✩✩✩✩
28 Ноя 2020
16
5
Друзья, нужно чтобы по нажатию на кнопку в веб интерфейсе, в браузере воспроизводился определенный звук. Реально ли это реализовать технически. файл звуковой мог бы располагаться на компьютере, если браузер так умеет.
Нужно добавить к проекту игровой комнаты озвучку нажатия кнопок
 
Изменено:

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

★★★★★★★
14 Авг 2019
4,253
1,297
Москва
Вот функция на JS, которая запустит воспроизведения звука из файла alert.mp3, путь пробуйте сами, у меня звук был на сервере, но вроде и с локалки можно.
C++:
function playSound() {var audio = new Audio();audio.src = '/alert.mp3';audio.play();}
 
  • Красота! +2
Реакции: nicelight

nicelight

✩✩✩✩✩✩✩
28 Ноя 2020
16
5
Спасибо большое, Старик. Но в том то и вопрос, что путь до музыки берется относительно файла веб странички. то есть это путь к памяти в esp32. туда же совать звук не хотелось бы. Он не поместится. Надо чтобы звук вопроизводился с файловой системы компьютера а не еспшки.
Вот поэтому и спрашиваю, как в браузерах работать с файловой системой клиента, а не сервера
 

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

★★★★★★★
14 Авг 2019
4,253
1,297
Москва
@nicelight, тут проблема даже не в том, что политикой безопасности браузера может быть запрет на доступ к локальным файлам на ПК клиента - это уязвимость. Так что как вариант могу предложить подключить какой либо мп3 плеер и уже воспроизводить звуки от туда.
 

nicelight

✩✩✩✩✩✩✩
28 Ноя 2020
16
5
@Старик Похабыч,
где то на хабре читал что вроде как уже дают возможность работать с файлами. К примеру сейчас есть возможность обращение к комп порту, многие проекты сейчас можно залить прошивку из браузера в есп , просто подключив ее по юсб
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
Включение по таймеру с запоминанием уставок времени и выбранных настроек.
Исправлены ошибки, добавлена инструкция, в коде появилась возможность изменить тип реле High/Low.
Время берётся из инета с ежесуточным обновлением, либо из браузера, с возможностью изменить часовой пояс.
Добавлена возможность: "включать сразу после рестарта".
Использованы цветые индикаторы вместо светодиодов, функция GPcolor вынесена за портал, поэтому при изменении автоматически обновляется индикация на всех экранах в доме, без необходимости перезагрузки страницы.
Пароль на Портал: smarthome, на вход: admin/admin, на админские настройки: administrator/administrator
Приветствуется помощь для функции входа в админку. Если правильный пароль не введён - всё, надо перезагружать, ибо он уже измен на админский, после перезагрузки- снова ок. По логике, юзверь знает пароль и после ввода настроек - submit и перезагрузка. Но ежели не знает пароля админки- всё, надо принудительно перезагружать... Флага я у Гайвера в коде не нашёл, недоработочка... :).
Не работает: запись файлов на предварительно правльно подготовленную память... Почему- не понимаю. ESP32, 8266 - проверял обе.
Присоединяюсь к вопросу о воспроизвелении звуковых файлов из памяти контроллера. В новых ESP32 той памяти- 16мб, в 8 выделенных под файлы влезет Богемская Рапсодия. Пока я даже не могу закинуть файл в память, но думаю, поможете...
Господа, смелее выкладывайте свои наработки, вам дали замечательный бесплатный инструмент, а вы жлобитесь...
 

Вложения

Изменено:

nicelight

✩✩✩✩✩✩✩
28 Ноя 2020
16
5
@gidiara666, Привет. Вобщем, я вышел из положения использованием VLC плеера. У него есть веб интерфейс со своим API. просто отправляю ему GET
и отигрывает песня из плейлиста.
отправь такой запрос из браузера и интуитивно поймешь как там нумерация песен идет
как настроить vlc у меня в ридми в конце проекта написано
 
  • Лойс +1
Реакции: gidiara666

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
Нет, vlc вообще не вариант. У меня открывается домофон сам по вызову, если выбрать опцию "режим курьера". Люди пугаются и пытаются что-то сказать в микрофон, полагая что я вот прям от дверей не отхожу и руку на трубке держу. Просто надо воспроизводить звуковой файл из памяти. Даже когда меня нет дома, я могу открыть домофон, телеграм работает как звонок вызова, когда сыпятся сообщения "звонят в домофон". Теща обиделась: со двора дверь сразу открыл, а входную, сколько ни звонила- не захотел. :). Нельзя людей так напрягать, нас итак русские убить постоянно норовят бомбами.
 

radionik

✩✩✩✩✩✩✩
19 Янв 2024
10
0
Hola me amigos! Честно искал по форуму и даже через гугель. Вот компонент PLOT_STOCK, который тащит скрипты с сайта хайчартс - я правильно понимаю, что все на свой страх, риск и совесть? Я бегло зашел, глянул на сайт, там только попробовать можно for free...
 

aidar_i

✩✩✩✩✩✩✩
1 Май 2021
64
8
Почему кнопки не располагаются в одной строке?
C++:
 #include <GyverPortal.h>
GyverPortal ui;

// конструктор страницы
void build() {
  GP.BUILD_BEGIN(GP_DARK, 700);
  GP.TITLE("Title", "t1");
  GP.HR();
  GP.BUTTON("btn", "But",  "", GP_GREEN, "100px");
  GP.BUTTON("btn1", "But1",  "", GP_GREEN, "100px");
  GP.BUTTON("btn2", "But2",  "", GP_GREEN, "100px");
  GP.BUILD_END();
}

void setup() {

  WiFi.mode(WIFI_STA);
  WiFi.begin("******", "*******");
 // подключаем конструктор и запускаем
  ui.attachBuild(build);
  ui.attach(action);
  ui.start();
}

void action() {
 
}

void loop() {
  ui.tick();
}
Безымянный.png
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
@aidar_i,
Потому, что Вы ленитесь прочесть документацию, очевидно. Вы же не объединили их в один блок. С чего бы им тогда в ряд выстраиваться??
 
  • Лойс +1
Реакции: aidar_i

aidar_i

✩✩✩✩✩✩✩
1 Май 2021
64
8
@gidiara666, большое спасибо за ответ, давно не работал с порталом, раньше они сами выстраивались, если не ставили перенос строки. :))))
Тогда ещё один вопрос на засыпку:
Удерживаю кнопку, чтобы на выходе мотор крутился, пока держу, но в определенный момент срабатывает выделение текста кнопки и кнопка "залипает", как посоветуете выкрутиться?
Это на смартфоне.
 
Изменено:

aidar_i

✩✩✩✩✩✩✩
1 Май 2021
64
8
Поставил иконки стрелки вместо текста, они не выделяются , работают нормально.
 
  • Лойс +1
Реакции: gidiara666

Владлэн

✩✩✩✩✩✩✩
28 Авг 2023
20
4
Требуется для работы html страничек с яваскриптом формировать некий json по адресу /data, без гайверпортала всё работает.
Есть такой код
server.on(F("/data"), data);
Ну и хэндлер
void data() {server.send(200, "text/javascript; charset=utf-8", "какие-то данные");}

Как подобное сделать в гайверпортале?
-------------------------
Вроде нашёл сам. С первого взгляда работает.
После блока где ui.start() и прочее добавил
ui.server.on(F("/dataweb"), dataWeb);
Ну и обработчик
void dataWeb() {ui.server.send(200, "text/javascript; charset=utf-8", "какие-то данные");}
--------------
Всё работает, по адресу /dataweb чистый текст.
 
Изменено:

dxf

✩✩✩✩✩✩✩
17 Апр 2020
47
2
Подскажите как обновить отображение переключателя GP.SWITCH при нажатии на кнопку, кроме как обновления страницы? А то разные варианты пробовал, но понять не могу пока.

C++:
void action() {
  // был клик по компоненту
  if (ui.click()) {
    // проверяем компоненты и обновляем переменные
        // 2. автоматическое обновление переменной
    if (ui.clickBool("sw", valSwitch)) {
      Serial.print("Switch: ");
      Serial.println(valSwitch);
      if (valSwitch) digitalWrite(2, 0);
      if (!valSwitch) digitalWrite(2, 1);
    }

    if (ui.click("btn")) {
      Serial.println("Всё отключено");
      digitalWrite(2, 1);
      valSwitch = false;

      }
          if (ui.click("btn2")) {
      Serial.println("Всё включено");
      digitalWrite(2, 0);
      valSwitch = true;

       }
  }
 

dxf

✩✩✩✩✩✩✩
17 Апр 2020
47
2
@Владлэн, спасибо. Отлично работает. Никак не могу только найти в документации GP.UPDATE().
 

Владлэн

✩✩✩✩✩✩✩
28 Авг 2023
20
4
Оно в разделе парсинг
C++:
// автоматическое обновление. Отправит значение из указанной переменной
// Вернёт true в момент обновления
bool updateString(имя, String& f);
bool updateInt(имя, int f);
bool updateFloat(имя, float f, int dec = 2);
bool updateBool(имя, bool f);
bool updateDate(имя, GPdate f);
bool updateTime(имя, GPtime f);
bool updateColor(имя, GPcolor f);
************
А, не то отвечаю. Я с примеров брал инфу. И по аналогии применил к свичу.
 

dxf

✩✩✩✩✩✩✩
17 Апр 2020
47
2
Пытаюсь установить GyverHUB, но возникли проблемы. Никак не хочет компилироваться, ругается:
C++:
lib/GyverHub-old/src/utils/misc.h:12:10: fatal error: LittleFS.h: No such file or directory
Хотя указанная библиотека установлена, папка её есть в lib. Плата NodeMCU Lolin V3, содержание ini файла проекта:
C++:
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
monitor_speed = 9600
Работаю в VSCODE 1.85.1
ОС: Linux x64 6.7.2-arch1-1

С gyverPortal проблем нет, все скетчи работают.
 

Владлэн

✩✩✩✩✩✩✩
28 Авг 2023
20
4
Сколько раз было желание перейти на хаб (проще, легче, удобнее говорили они), но нихрена я там не понимаю... Да и нафиг не надо, портала вполне хватает.
 

nicelight

✩✩✩✩✩✩✩
28 Ноя 2020
16
5
@Владлэн, я разбираюсь уже дней десять, вникаю в хаб, сразу второй версии, она сильно отличается от первой. Порог входа имхо высокий, но как въедешь, то не сложнее портала. Скоро запишу подробное видео по хабу на ютубе ( по порталу уже записал подобное на один час, найдете Портал от А до Я)
 

nicelight

✩✩✩✩✩✩✩
28 Ноя 2020
16
5
@dxf, там же по мимо этой библиотеки есть и другие от которых она зависит. По крайней мере по второй версии хаба минимум три зависимости. В Вики хаба указано как запускать его из под Platformio
Рекомендую и Вам не мучиться со старой более не поддерживаемой версией хаба а щупать уже новую, она хоть и не имеет свежей Вики, но уже работает стабильно и их примера basic можно все найти. Если хотите скину ссылку ini файл для GyverHub 2
 

dxf

✩✩✩✩✩✩✩
17 Апр 2020
47
2
@nicelight, если не сложно подскажите как настроить platformio для установки gyverhub.