GyverPortal

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
Нашёл очень обескураживающий баг:
Gyver Portal не совместим с Fast Bot. Проходит компиляцию, ошибок нет. Но при внесении даже минимального кода с присутствием Fast Bot- зависает ESP. У меня вариант с работающей на ESP ТД и одновременно можно подключиться к любой сети wifi. Просто добавляю авторизацию Fast Bot в две строки, запуск в loop bot.tick() - всё, приехали... В консоли рапортует: точка доступа включена, но ни подключения к Telegram, ни точки доступа на ESP нет.
 

Nikantovik

✩✩✩✩✩✩✩
15 Май 2023
5
1
Добрый день!
Подскажите плиз, как можно из портала в какую либо программу получать данные. Не строя интерфейс.
Идея такая. WEB морда у ESP32 есть, но помимо ESP32 должен отправлять некие данные в программу которая собирает данные с датчиков.
Как это можно реализовать? Т.е. просто каким методом нужно воспользоваться чтоб отправить данные?
 

Nikantovik

✩✩✩✩✩✩✩
15 Май 2023
5
1
Спасибо за ответ, но программу я планирую написать в Lazarus. Мне просто интересно, есть ли некий метод в GyverPortal позволяющий отправлять к примеру просто текстовую строку, чтоб я мог ее принять и обработать в своей программе.
 

Maxx1200

★✩✩✩✩✩✩
11 Фев 2022
94
18
@Nikantovik, как вариант это
Библиотека ESP8266HTTPClient предназначена для работы с HTTP-запросами на микроконтроллерах ESP8266 и ESP32. Она позволяет выполнять GET, POST, PUT, DELETE запросы к веб-серверам и получать ответы от них.

С помощью этой библиотеки можно легко отправлять запросы на удаленный сервер и получать данные в формате JSON, HTML, XML и других. Также возможна работа с HTTPS-запросами, что обеспечивает большую безопасность при обмене данными.

Библиотека ESP8266HTTPClient очень удобна и проста в использовании, что позволяет быстро создавать приложения для мониторинга и управления устройствами через Интернет. Она является важной частью разработки IoT-проектов на базе ESP8266 и ESP32.
 

Maxx1200

★✩✩✩✩✩✩
11 Фев 2022
94
18
@Nikantovik,
Да, Вы можете использовать библиотеку Gyverportal и библиотеку ESP8266HTTPClient совместно для работы через Wi-Fi на платформе ESP8266. Библиотека GyverPortal позволяет создавать веб-интерфейсы для взаимодействия с платой, а библиотека ESP8266HTTPClient предоставляет функционал для отправки HTTP-запросов и получения ответов от удаленного сервера. Обе библиотеки можно использовать одновременно для создания приложений, использующих интернет-связь на платформе ESP8266.
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
Извиняюсь, заработал Telegram! Если будете брать BotID из Портала, после введения его в нужное окно и сохранения в памяти ESP, то надо Telegram ID и бота прописывать по другому, уже в setup. В примере Memory.TelegramBOTID и Memory.TelegramID1 берутся из долговременной памяти ESP, где они возникают после соответствующих заклинаний и приготовлений. Общий вид таков:
#include <FastBot.h>
FastBot bot;

void setup() {
Serial.begin(115200);
EEPROM.begin(2000);
Memory.begin(0, 'a');

bot.setToken (Memory.TelegramBOTID);
#define CHAT_ID Memory.TelegramID1
/// всякие остальные сетапные заклинания тут
void loop() {
bot.tick(); // тикаем в луп ботом Telegram, шоб он был нам бодрым
///всякие остальные лупные заклинания тут

Попытаюсь повторить просьбу о помощи: как сделать пароль на отдельный пункт меню, не на весь графический портал?
2. У кого есть рецепт надёжного mini DNS вервера, который бы работал как нормальный captive portal и надёжно и непременно перебрасывал бы автоматически на портал при наборе нужных буковок? У меня #include <DNSServer.h> работает прекрасно, если сеть раздаёт ESP, но стоит только ему подключиться к роутеру - всё, облом, возможно подключение только по адресу, который надо смотреть в консоли... Сам портал с его потрясающими наворотами при этом идёт лесом, раз адрес к нему без консоли недоступен. Всякие "прописывания MAC в роутере" - не предлагать.
 
Изменено:

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
А вот что бы я сделал в первую очередь перед тем как создавать портал (если б умел, конечно :)?
Разумеется, попытался бы преодолеть первую и основную проблему: как имея прошитую ESP с порталом к ней "железно" подключаться. Мутить экран только ради одного раза посмотреть IP? Бред. Одноразовых экранов нам не надо.
Сторонняя программа? Тоже не то, её минимум под 4 системы писать надо, не все Windows юзают, костыль ещё тот- надо иметь комп под рукой.
В роутер MAC ESP "прописывать"? Так ежели роутер не твой и пароль не знаешь, то и... Да и хотелось бы поуниверсальнее решения, чтоб вот прям на любом мобильном создал ТД- и сразу подконнектился к ESP с порталом.
Итого, вроде есть универсальное решение с Captive Portal - кто б не приконнектился- перебрасывает в веб морду Портала.
Как я пытался решить эту проблему:
удалось создать при помощи DNSServer и ТД в ESP, и чтоб она потом коннектилась к указанной ТД роутера. Вроде всё успешно. Всегда можно соединиться с ТД от ESP и там посмотреть адрес, имя и пароль другой сети. Пока не присоединил Telegram и прочий Blynk. Однако тогда начала пропадать точка доступа на ESP. В принципе, с интерактивным Telegram и графическим Blynk портал и не нужен, он для резерва задумывался, ежели "усё вдруг пропадёт". Но вот ежели пропадает wifi, то хренушки ESP точку доступа после этого поднимает... И оказывается портал совсем бесполезным...
Надо в комплект к порталу:
1. чтоб всегда и везде можно было попасть в него по персональному имени. (лично у меня с .local не работает вообще, никакой bonjour и avahi, что только не делал... По имени заходит только в случае прямого подключения к ESP).
2. Чтоб работало одновременно и ТД на ESP и подключалось к роутеру. Тогда можно зайти и посмотреть адрес прямо с ESP. В любой момент.
Как же ж сделать-то?
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
Может, кому понадобится:
Костыль для выяснения IP адреса GP из telegram бота, при условии нахождения в одной совместной с ESP локальной сети, либо вошли в локальную сеть с ESP по VPN удалённо:
1. подключаем бота, делаем меню и одну из кнопок обзываем Portal. Заклинание простое, выводит IP соединения и IP
soft AP, в зависимости от состояния подключения. Юзать оба: soft AP и обычное подключение - не рекомендую, при обращении к soft AP та находится в полукоматозном состоянии и почти не реагирует на команды, контроллер "не тянет" два wifi соединения одновременно. А так- всего два клика и мы - в портале.

if (msg.text == "Portal" || msg.text == "/Portal" || msg.text == "portal")
{
String ip1 = "Portal IP: " + WiFi.localIP().toString();
String ip2 = "ESP wifi IP: " + WiFi.softAPIP().toString();
bot.sendMessage(ip1 + " " + ip2, msg.chatID);
}
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
GP.LED в firefox выводится не читаемым чётко по цвету, размер очень мал, выглядит иначе, чем в остальных браузерах. В Opera цвета у LED - очень блеклые, но различимы.
Остальные браузеры- отлично. GP.LED_B не помогло. Проверял на 6 браузерах.
 

t_sa

✩✩✩✩✩✩✩
12 Мар 2021
7
1
Привет всем. Нужно в зависимости от значения переменной выводить разные изображения. Кто как реализовывал это? Поделитесь.
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
Изображения чего??? Если диода красного либо зеленого- это одно, а если картинки с девушками- то совсем другое. Я лично отказался от LED из-за того, что они в разных браузерах по разному выглядят, использую color. В примерах все есть.
 

t_sa

✩✩✩✩✩✩✩
12 Мар 2021
7
1
Любое изображение (.png, .jpg и т.п.) Это может быть серия изображений какого-либо устройства с множеством состояний, а не только вкл./выкл.
Если переменная принимает значение 1 - выводится, например, IMG1.png, 2 - IMG2.png и т.д.
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
Так делайте ссылку на изображение. В чем проблема? Грузить кучу фоток в 2Мб памяти- сами понимаете, не лучшая идея...
GP.UI_LINK(ссылка, имя);
напрямую из памяти:
GP.IMAGE(ссылка на файл памяти);
GP.ViDEO(ссылка):
GP.CAM_STREAM(размер, порт)
 

t_sa

✩✩✩✩✩✩✩
12 Мар 2021
7
1
@gidiara666,
Во-первых, GP.IMAGE не катит, т.к. этот компонет не обновляется, только через перезагрузку страницы. Меня как раз интересует как реализовать ДИНАМИЧЕСКОЕ обновление компонента по принципу
void build() {
GP.UPDATE("led", 2000);
GP.LED_GREEN(led);
}
void action() {
if (ui.update("led")) { }
}

Во-вторых, изображения - это не фотографии FullHD, а небольшие изображения типа иконок размером с десяток кб.
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
А Вы хотя бы теоретически поясните, как себе это представляете... Как показать новую картинку на экране, не обновляя экран? Для этого надо иметь хотя бы буфер приличного размера. А в ESP он какой, глядели? Это на форум православных надо с такими вопросами, раздел: "обсуждение чудес".
 
Изменено:

c470ip

✩✩✩✩✩✩✩
9 Янв 2020
9
4
Друзья, а можно нубский вопросик? Вот сделал я себе тестовый веб-интерфейсик на GP, нажимаю кнопочку в интерфейсе, диодик на плате зажигается или гаснет. Аллилуйя! Ну и прочие контролы попробовал, не без того. Всё работает прекрасно, за что Алексу большое спасибо.

А есть ли возможность управлять устройством через GP удалённо, не имитируя нажатия кнопок? Т.е. с прямой передачей параметров через скрипт, URL или как-то ещё. Скажем, если я захочу несколько кнопочек, управляющих разными устройствами, собрать на одну веб-страничку. Или например отправлять какие-то команды автоматически по cron с NAS-сервера.
 
  • Лойс +1
Реакции: gidiara666

robonext

✩✩✩✩✩✩✩
21 Янв 2022
1
0
Всем привет, пытаюсь сделать таймер обратного отсчета на страничке. Сейчас сделал так: на есп32 передаем время и каждую секунду есп вычитает 1 и через GP.UPDATE(s, 1000); обновляются данные, но такой вариант работает не очень хорошо, периодически всплывает надпись device offline. Ну и получается, что если сигнал wifi слабый, то счетчик на страничке останавливается. Подскажите пожалуйста как сделать оптимальней, наверняка же можно отправить на страничку стартовое время, а вычитать уже будет сам браузер (скриптом может каким-то).
 

t_sa

✩✩✩✩✩✩✩
12 Мар 2021
7
1
Оформи код соответствующим тэгом
@gidiara666,
РЕШЕНО.
Во flash память ESP помещаются файлы изображений объекта. Имена файлов должны иметь вид <префикс>N<постфикс>.
В моем случае резервуар, в котором имеется 4 датчика уровня. Соответственно должно быть 5 файлов /img/tank_0.png, /img/tank_1.png, /img/tank_2.png, /img/tank_3.png и /img/tank_4.png, отображающих состояния: 0%, 25%, 50%, 75% и 100%. Префикс - это "/img/tank_", а постфикс - ".png". Номер изображения задается компонентом NUMBER, принимающим значение, соответствующее текущему состоянию от 0 до 5. Компонент GP_CH_IMG создает 2 объекта: собственно IMAGE("tank") и не видимый NUMBER("level"). С периодичностью, указанной в GP.UPDATE("level", 2000); происходит обновление level. Период обновления "картинки" можно задать в строке s += "setInterval(function(){ OnChangeLevel()}, 2000);\n";.
Кому понадобится - пользуйтесь!

GP_NUMBER level("level");
...

#include <custom.h>
void build()
{ ...

GP.UPDATE("level", 2000);
GP_CH_IMG("tank", "/img/tank_", ".png", "level");
...
}

void action()
{ ...
if (ui.update("level"))
{ level.value = TankLevel; // Текущее состояние
ui.update(level);
}
...
}

custom.h
---------------

#pragma once
#include "GyverPortal.h"
void GP_CH_IMG(const String& name, const String& prefix, const String& postfix, const String& sub)
{ String s;
s = "<script>\n";
s += "setInterval(function(){ OnChange()}, 2000);\n"; // Интервал обновления изображения
s += "function OnChange()\n";
s += "{ " + name + ".src='" + prefix + "' + " + sub + ".value + '" + postfix + "';\n";
s += "}\n";
s += "</script>\n";
s += "<input type='number' name='" + sub + "' id='" + sub + "' value='0' onchange='OnChange()' style='display:none'>\n";
s += "<img id=" + name + " src='/img/tank_0.png'>\n";
GP.SEND(s); // отправь через GP.SEND
}

@gidiara666! Вам рекомендую зайти на форум православных в раздел "экзорцизм".
 
  • Лойс +1
Реакции: gidiara666

t_sa

✩✩✩✩✩✩✩
12 Мар 2021
7
1
@robonext,
Таймер лучше реализовать в самом ESP, а на странице отображать оставшееся время. Даже если связь на какое-то время оборвется таймер продолжит отсчет. После восстановления связи отобразится реально оставшееся время.