• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Web сервер - ! нужна авторизация

Slacky

Member
@Alex1 в общем так :))

Код:
void handleLedOn() {
   if (если нужна авторизация) {
       if (!webServer.authenticate(ВашЛогин, ВашПароль)) return webServer.requestAuthentication();
   }
  stateLED = LOW;
  digitalWrite(LED_BUILTIN, stateLED);
  response();
}
Вроде не ошибся :))
 

kab

New member
@Slacky
Ну мы наперегонки - я привязался к тексту ТС - там нет отдельных функций
 

Slacky

Member
@kab не хочу выглядеть всезнайкой (в принципе я в этом сам-то не сильно разбираюсь), но при наличие примеров для 8266 мне действительно не понятно, почему топикстартер сам не разобрался. Там же все прозрачно и понятно ...
 
  • Like
Реакции: kab

kab

New member
@Slacky
я тоже не хочу выглядеть крутым гуру, но , всё-таки каждому разные способности даны от бога.(Хотя я атеист). Но, чем больше человеку дано способностей, тем больше он должен помогать другим.(По моему мнению) Назови это кармой, предназначением или др.
 

Alex1

New member
@Slacky и @kab Спасибо это заработало, всё так просто оказалось, без всяких библиотек. Этого Я действительно нигде не нашёл, может плохо искал.
Есть ещё вопрос....
1 Wi Fi индикатор показывает заниженные данные, рядом с роутером например 40 -50% дальше ещё меньше 20 -10
Код:
String w = ("<p style=\"text-align: center; font-family:Courier New; color:#EFB30B ; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#1C5A9F; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n WiFi:  &shy;&shy;  ");
  long rssi = WiFi.RSSI(); // get dBm from the ESP8266
  w += (rssi);
  w += "dB &shy;&shy; ";
  w += (rssi + 100); //~ 100% ??
  w += "%";
  w += "</html>\n";
  htmlRes += (w);
2й Как убрать сотые из показаний температуры, они мне не нужны пробовал через float, но там просто делится например вместо 26,30 переносится запятая
Код:
String w = ("<p style=\"text-align: center; font-family:Courier New; color:#EFB30B ; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#1C5A9F; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n WiFi:  &shy;&shy;  ");
  long rssi = WiFi.RSSI(); // get dBm from the ESP8266
  w += (rssi);
  w += "dB &shy;&shy; ";
  w += (rssi + 120); //~ 100% ??
  w += "%";
  w += "</html>\n";
  htmlRes += (w);
Спасибо
 

kab

New member
@Alex1
1. С особенностями поведения функции WiFi.RSSI() я не разбирался, но могу поделится общими соображениями:
- во-первых, по моему мнению, это лишь приблизительная оценка уровня сигнала, к которой я не относился бы слишком серьезно;
- во-вторых, думаю, что еще надо поразбираться, программа ли занижает уровень сигнала. Или он такой плохой и есть. Например, металлическая коробочка, если в неё поместить ESP, экранирует радиосигнал Wi-Fi. Неудачный монтаж устройства, что антенна ESPоказалась рядом с массивной металлической деталью или массивной шиной заземления на плате. Или какая-то причина посложней...
- в-третьих, в интернете, при желании, можно найти достаточно детальных обсуждений особенностей распространения сигнала Wi-Fi и доступных способов увеличения дальности действия Wi-Fi устройств.
2. Кажется, тут помещен не тот кусок кода. А по сути (сейчас ARDUINO IDE под руками нет, точно посмотреть не могу) посоветовал бы в примерах поискать функцию Round. Думаю, что должно быть что-то типа
Код:
          temper = temper.Round(1);
если до десятых долей, или
Код:
      temper = temper.Round(0);
если до целых
UPDATE. Нет, этот совет не сработает. В общем, надо смотреть исходный код...

И еще совет - полезные для себя сообщения отмечайте кнопочкой "Мне нравится" внизу сообщения
 
Последнее редактирование:

Alex1

New member
@Alex1
1. С особенностями поведения функции WiFi.RSSI() я не разбирался, но могу поделится общими соображениями:
- во-первых, по моему мнению, это лишь приблизительная оценка уровня сигнала, к которой я не относился бы слишком серьезно;
- во-вторых, думаю, что еще надо поразбираться, программа ли занижает уровень сигнала. Или он такой плохой и есть. Например, металлическая коробочка, если в неё поместить ESP, экранирует радиосигнал Wi-Fi. Неудачный монтаж устройства, что антенна ESPоказалась рядом с массивной металлической деталью или массивной шиной заземления на плате. Или какая-то причина посложней...
- в-третьих, в интернете, при желании, можно найти достаточно детальных обсуждений особенностей распространения сигнала Wi-Fi и доступных способов увеличения дальности действия Wi-Fi устройств.
2. Кажется, тут помещен не тот кусок кода. А по сути (сейчас ARDUINO IDE под руками нет, точно посмотреть не могу) посоветовал бы в примерах поискать функцию Round. Думаю, что должно быть что-то типа
Код:
          temper = temper.Round(1);
если до десятых долей, или
Код:
      temper = temper.Round(0);
если до целых
UPDATE. Нет, этот совет не сработает. В общем, надо смотреть исходный код...

И еще совет - полезные для себя сообщения отмечайте кнопочкой "Мне нравится" внизу сообщения
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px; padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;&shy; ");
t += (sensors.getTempCByIndex(0));
t += " C`";
htmlRes += (t);
Здесь эта строка temper = temper.Round(0); пишет ошибку. либо не объявлена, либо не этого класса. Наверное не из этой библиотеки . П вайфаю на роутере показывает уровень от модуля 92% на esp 40% это совсем не приблизительно а просто показывает есть или нет.
 

kab

New member
@Alex1
я в своем сообщении дописал, что
проблемы не решит. Надо по другому. А вот как?
Конечно, можно просто написать поправленный код. Думаю, что Вам полезнее самостоятельно разобраться с этим вопросом. Иначе так и не получите даже простейшие навыки программирования. В данном случае, к области ESP и каких-либо библиотек данная проблема отношения не имеет. Тут вопрос чисто о программировании. Купите и почитайте книги по Си для начинающих. Посмотрите курсы по Си для начинающих по интернету. Надо получить общие понятия об структуре программы, описанию переменных различных типов, о преобразовании типов данных друг в друга. Конкретно, о преобразовании чисел в строку с заданным числом знаков после запятой... Так можно в Яндексе и писать: "Си как преобразовать число в строку".

Если дать Вам готовый кусок программы, то пользы для Вас от этого будет чуть...
 

kab

New member
@Alex1
А что касается уровня сигнала Wi-Fi, судя по приведенному фрагменту кода этот уровень в сервере ESP определяется не в процентах, а в децибелах( db). а в проценты переводится по какой-то странной формуле. Какой и в каких единицах показывается уровень на роутере - не обращал внимание. Наверно, можно почитать в инструкции на роутер.
 
Последнее редактирование:

Alex1

New member
Вот и Я о том же, как преобразовать число в строку 20 страниц в поиске, а как округлить до десятых, не нашёл. Методом копирования и вставки с готовых скетчей может не помочь и их же опять искать и устанавливать надо.
 

Alex1

New member
Можно попробовать так.

Код:
float val = 1.53;

int value = floor(val+0.5);

Разные ошибки получаются строки ставил выше ниже комбинации
Код:
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
t += int value = floor(val+0.5);
t += float val = 1.53;
t += (sensors.getTempCByIndex(0));
t +=  "  C`";  
htmlRes += (t);
 

Slacky

Member
Разные ошибки получаются строки ставил выше ниже комбинации
Код:
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
t += int value = floor(val+0.5);
t += float val = 1.53;
t += (sensors.getTempCByIndex(0));
t +=  "  C`"; 
htmlRes += (t);
Вы реально вот так и пишите свой код?

t += int value = floor(val+0.5);
t += float val = 1.53;

Может хоть немного стоит ознакомиться с Си?

Я не вижу, что делает функция sensors.getTempCByIndex(0), но если это она передает температуру, то должно выглядеть так.

t += floor(sensors.getTempCByIndex(0)+0.5);

Но я не проверял, что будет с отрицательными числами. Я же не программист, это хобби ...
 

kab

New member
Да, действительно, тут не очень очевидно. :(
Похоже тут надо использовать типа
Код:
sprintf(str, "%.1f",sensors.getTempCByIndex(0)+0.5 )
То есть в результате должно получится что-то типа:

Код:
Char str[6];     //added by  kab
sprintf(str, "%5.1f",sensors.getTempCByIndex(0));    //added by  kab
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
//t += (sensors.getTempCByIndex(0));    //comment by kab
t += (str);     //added by kab
t +=  "  C`";
htmlRes += (t);
Повторяю - проверить сейчас не могу
 
Последнее редактирование:

Alex1

New member
@Slacky Я в ардуино только месяц, мигать светодиодом стало не интересно, вот и полез наверно туда куда рано )))) Показывает с сотыми, только открываю ваши строки, сразу ошибки писать начинает, вариации ниже или выше по списку не помогают
Код:
 String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
//t += float val = 1.53;
//t += int value = floor(val+0.5);
t += floor(sensors.getTempCByIndex(0)+0.5);
t +=  "  C`";  
htmlRes += (t);
 
  • Like
Реакции: kab

Alex1

New member
@kab при каком виде показывает Temp: %.1f C`
Код:
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
char str[6];     //added by  kab
sprintf(str, "%5.1f",sensors.getTempCByIndex(0));    //added by  kab
//t += (sensors.getTempCByIndex(0));    //comment by kab
t += (str);     //added by kab
t +=  "  C`";
htmlRes += (t);
 

Slacky

Member
@Slacky Я в ардуино только месяц
Просто Вы пытаетесь менять код "методом тыка", а это не будет работать в большинстве случаях. Нужно хоть небольшое понимание, что именно Вы делаете ...

Кстати, про Ардуино я до весны этого года даже не слышал :)))
 

kab

New member
@Slacky Я в ардуино только месяц, мигать светодиодом стало не интересно, вот и полез наверно туда куда рано )))) Показывает с сотыми, только открываю ваши строки, сразу ошибки писать начинает, вариации ниже или выше по списку не помогают
Код:
 String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
//t += float val = 1.53;
//t += int value = floor(val+0.5);
t += floor(sensors.getTempCByIndex(0)+0.5);
t +=  "  C`"; 
htmlRes += (t);
Да ладно, так даже интереснее ...
Посмотрите мой пост выше
 

kab

New member
@kab при каком виде показывает Temp: %.1f C`
Код:
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
char str[6];     //added by  kab
sprintf(str, "%5.1f",sensors.getTempCByIndex(0));    //added by  kab
//t += (sensors.getTempCByIndex(0));    //comment by kab
t += (str);     //added by kab
t +=  "  C`";
htmlRes += (t);
вместо char str[6];

попробуйте варианты
Char str[6];
или
String str;
 

kab

New member
@Alex1
поищите в примерах ARDUINO использование sprinf() и посмотрите , как там используется часть с "%"
 
Сверху Снизу