• Система автоматизации с открытым исходным кодом на базе 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 и обе включены вместе :) ?
 
Сверху Снизу