• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос получение системного времени в веб-интерфейсе

FoxJone

New member
Добрый день.

Изготовил я тут устройство на Wemos D1 mini pro. Все работает, все отлично, но требуется его иногда настраивать. Для чего запланировал вебинтерфейс, и в общем то с горем пополам основные функции уже прикинул как будут работать, но есть один пункт: помимо всех прочих настроек, нужно на ESPшку устанавливать текущие дату и время (иначе работать будет совсем не правильно).

Идеальным вариантом вижу кнопку "синхронизировать время", при нажатии которой браузер получает текущее системное время и дату (ББ под виндой или смарт под андроидом) и отсылает его на ESPшку.
Но вообще не представляю как это сделать. Весь день курю интернет и данный форум в частности - пока идей не возникло.
Может кто то меня пнуть в нужном направлении?

Вариант с ручным набором текущего времени и даты не впечатляет, хочу именно системное одной кнопкой. По факту, мне проще написать приложения под винду и андроид, которые это будут делать, но хочется именно вебинтерфейс, что бы с любого устройства без установки ПО.

PS. HTML никогда не изучал и не планировал. Но, чувствую, придется. До сих пор баловался с ардуинками и обходился без вебинтерфейсов - там обычно на такие навороты памяти уже не хватает. Теперь перешел на ESP, а тут и памяти море и вайфай встроенный - сам бог велел управлять с любого смарта без всякого ПО.
Так что если кто то кинет ссылку на различные примеры вебморд - буду бесконечно благодарен.
 

Alegz

New member
Может кто то меня пнуть в нужном направлении?
NTP - не вариант? На ESP еще не пробовал, но на Ардуинке тоже была критичная задача по времени. Ардуина на сервер точного времени стучалась аж бегом и часы корректировала, если нужно. Библиотеку не помню, но по поиску вываливается много чего в этом направлении.
 

FoxJone

New member
ESP не будет подключаться к интернету и поблизости его нет.
Я сделал ESP точкой доступа и для его настройки подключаюсь напрямую к ней по WiFi с ноута или смарта.
 

FoxJone

New member
Броузер выполнять будет скрипт, который ему отгрузит есп, в скрипте получит время и пОстом на есп отправит, если конечно вы его попросите :)
Ок, спасибо, пошел курить, как его нужно просить...
А еще момент:
var now = new Date();
Создает объект с текущей датой/временем
Браузер же этот объект создает в момент создания страницы? Если так, то время будет не точное (с момента создания страницы до момента нажатия кнопки "синхронизировать" может пройти несколько минут).
Или есть способ создать по нажатию кнопки и тут же отправить пост?
 

Алексей.

Active member
Браузер же этот объект создает в момент создания страницы? Если так, то время будет не точное (с момента создания страницы до момента нажатия кнопки "синхронизировать" может пройти несколько минут).
В onload добавите скрипт, в котором попросите броузер получить текущее время и тут же скриптом выполните post запрос, ничего нажимать не нужно совсем.
 

FoxJone

New member
В onload добавите скрипт, в котором попросите броузер получить текущее время и тут же скриптом выполните post запрос, ничего нажимать не нужно совсем.
Не пойдет. Не требуется устанавливать время/дату произвольно, при каждой загрузке вебморды. Нужно устанавливать именно по желанию, то есть при нажатии пользователем кнопки.
Хотя как костыль... Можно по кнопке создавать страницу, отправлять пост и убивать страницу... Костыли такие костыли...
Есть другие варианты?
 

Юрий Ботов

Moderator
Команда форума
Браузер же этот объект создает в момент создания страницы?
Браузер создает этот объект в момент выполнения скрипта. Если скрипт вызывается из обработчика кнопки - то все как вы хотите.

HTML никогда не изучал и не планировал. Но, чувствую, придется.
Конечно придется. И javascript тоже. Иначе о вэб-интерфейсах можно забыть.
 

Алексей.

Active member
Не пойдет. Не требуется устанавливать время/дату произвольно, при каждой загрузке вебморды.
Вы загружаете конкретную страницу для выполнения настроек, не произвольную, а именно ту, где настраиваете свой модуль. Почему же не стоит настраивать время когда решили настроить остальное?
 

FoxJone

New member
Вы загружаете конкретную страницу для выполнения настроек, не произвольную, а именно ту, где настраиваете свой модуль. Почему же не стоит настраивать время когда решили настроить остальное?
Я предпочитаю настраивать каждое значение именно тогда, когда я это решу, а не гаджет решит за меня.
Например, у меня на ноуте практически всегда стоит московское время (которое отличается от моего на 4 часа, но с этого ноута я удаленно настраиваю устройства, которые привязаны именно к московским серверам). И перед каждым заходом на вебморду я буду должен менять время, хотя мне всего то нужно включить отдельно взятый пин. Оно мне надо?
 

Алексей.

Active member
ESP не будет подключаться к интернету и поблизости его нет.
Например, у меня на ноуте практически всегда стоит московское время (которое отличается от моего на 4 часа, но с этого ноута я удаленно настраиваю устройства, которые привязаны именно к московским серверам).
Вот оно как...
А как вы это делаете обычно? ЕСП без интернета а вы удаленно его настраиваете, поделитесь секретом как?
хотя мне всего то нужно включить отдельно взятый пин
Когда нужно менять состояние пин-а загрузка страницы с настройкой времени наверно не требуется, и менять время не придется, более того, вы на стороне броузера можете получать таймзону
Код:
var offset = new Date().getTimezoneOffset();
и выполнять сдвиг времени для вашего устройства.
 

FoxJone

New member
Вот оно как...
А как вы это делаете обычно? ЕСП без интернета а вы удаленно его настраиваете, поделитесь секретом как?
В стартпосте я указал, что это первая моя ESP. Устройства, которые обычно конфигурю удаленно, сделаны на индустриальных компьютерах (есть и АРМы, есть и х86 - разные проекты, разное железо) и к данной теме не относятся.

Когда нужно менять состояние пин-а загрузка страницы с настройкой времени наверно не требуется, и менять время не придется.
Не цепляйтесь к словам. "состояние пина" - это условно. Имелось ввиду, что для смены одного параметра не обязательно менять какие то еще.
 

Алексей.

Active member
Например, у меня на ноуте практически всегда стоит московское время (которое отличается от моего на 4 часа, но с этого ноута я удаленно настраиваю устройства, которые привязаны именно к московским серверам).
Афигеть, та временная зона, что на вашем ноуте или на каких либо ещё устройствах, не имеют отношения к той дате которую добывает компьютер, смартфон, броузер и т.д. Время добывается обычно в UTC (всемирное координационное время), а временная зона влияет на отображение/обработку этого времени. Можете самостоятельно проверить.
HTML:
<!doctype html><body onload="alert('unix timestamp: ' + Math.floor(new Date().getTime()/1000) + ', local timezone offset in minutes: ' + new Date().getTimezoneOffset())"></body>
Сейчас получилось
unix timestamp: 1554883435, local timezone offset in minutes: -180
 

pvvx

Активный участник сообщества
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 STRICT//EN" "DTD/xhtml1-strict.dtd">

<html>
<input type="button" id="butSetTime" value="SetTime">
<script type="text/javascript">
document.getElementById("butSetTime").onclick = function() {   
var xh = new XMLHttpRequest();
xh.onreadystatechange = function() {
  if (xh.readyState == 4 && xh.status == 200) alert("Send TimeData - Ok")};
xh.open("GET", "/espscript?dt='"+(new Date).toLocaleString()+"'", true);
xh.send()};
</script>
</html>
upload_2019-4-12_18-21-56.png
 

pvvx

Активный участник сообщества
В стартпосте я указал, что это первая моя ESP. Устройства, которые обычно конфигурю удаленно, сделаны на индустриальных компьютерах (есть и АРМы, есть и х86 - разные проекты, разное железо) и к данной теме не относятся.
Если смотреть в таком ключе (удаленная настройка устройств скопом), то кроме простого приема GET/POST на устройствах желательно иметь поддержку CORS. Пока не видел этого в ESP...
 

FoxJone

New member
Вот именно это я и просил!
Спасибо тебе, добрый человек, да не оскудеет молоко в твоих верблюдицах и финики в твоих садах!

Если смотреть в таком ключе (удаленная настройка устройств скопом), то кроме простого приема GET/POST на устройствах желательно иметь поддержку CORS. Пока не видел этого в ESP...
Именно это устройство не массовое, а единичное. Прямое подключение к нему по WiFi и настройка. Притом достаточно редко. В сеть оно не выходит никаким образом.
А массовая удаленная настройка на мой взгляд достаточно легко решается даже на ESP через общий сервер или web-страницу, на которую вносятся изменения. Устройства по расписанию (даже раз в минуту будет им не напряжно, хотя в большинстве случаев достаточно раз в сутки) обращаются ну нужный адрес и считывают настройки.[/html][/QUOTE]
 

pvvx

Активный участник сообщества
А массовая удаленная настройка на мой взгляд достаточно легко решается даже на ESP через общий сервер или web-страницу, на которую вносятся изменения. Устройства по расписанию (даже раз в минуту будет им не напряжно, хотя в большинстве случаев достаточно раз в сутки) обращаются ну нужный адрес и считывают настройки.
CORS - это другой случай. Чаше всего используется для отладки. К примеру пишу HTML страницу на компе. Тыркаю её эксплорером и страница обращается к удаленному устройству за данными, обновляя их на странице:
upload_2019-4-15_9-1-2.png
И другие применения - включение запросов на общей странице к внешним от неё устройствам... Но для этого web-сервер на удаленном устройстве должен принимать кроме GET/POST запросы OPTION и давать разрешения на свои запрашиваемые ресурсы. Иначе эксплорер блокирует кросс-запросы - политика безопасности...
 

FoxJone

New member
CORS - это другой случай. Чаше всего используется для отладки. К примеру пишу HTML страницу на компе. Тыркаю её эксплорером и страница обращается к удаленному устройству за данными, обновляя их на странице.
Выглядит симпатично, но, по вашем же словам, для ESP не пойдет.
Но забью себе зарубку в память.

Оффтоп: есть 2 ESP, на которых тестирую вот этот вот web-сервер (вебморду).
На одной страничка прямо летает (тестирую со смарта), на другой идет очень туго, часто даже показывает 404 и приходится обновлять. ESP лежат в полуметре от смарта, на обоих WiFi показывает полную антенну.
Почему такое может быть?

ESP одинаковые, так парой и пришли от одного продавца...
 

pvvx

Активный участник сообщества
Почему такое может быть?
ESP одинаковые, так парой и пришли от одного продавца...
Слишком мало инфы. Для гадания сотни вариантов.. Конфигурация WiFi у них полностью одинакова до имени AP и обе включены вместе :) ?
 
Сверху Снизу