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

Автоматическая настройка системных часов esp

pvvx

Активный участник сообщества
Он неправильно определил локацию по IP выданному в сети от Megafon.
Могу попробовать составить для вас карту, какие локации будут выданы этим сервисом.
Они периодически меняются. Это видно по постоянным ныне запросам маркет-плейсов о местоположении и при открытии карт яндекс и т.д.
На смарте этого не происходит, а винде у меня отключены сервисы локации...
 

pvvx

Активный участник сообщества
При этом все, смарт и роутер сообщают номера сот и не только текущей, но и окружающих.
 

pvvx

Активный участник сообщества
И в эксплорере:
1766580010932.png
При этом WAN IP не совпадает с IP показанным на https://ip-api.com/
Никаких VPN или модификаций ПО не используется.
 

pvvx

Активный участник сообщества
Могу только предположить, что это такая защита от “скачащих”…

Кроме неудобства при открытии карт для указания места доставки и прочего это не ничем не мешает.
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
И в эксплорере:

При этом WAN IP не совпадает с IP показанным на https://ip-api.com/
Никаких VPN или модификаций ПО не используется.
Вы заголовок темы прочтите ещё раз, пожалуйста. Никто точной геопозиции не обещал. Часовой пояс определяется верно. Библиотека не требует никакого дополнительного "железа" и работает. Сравнивать её с GPS или GSM некорректно. Если в проекте есть такие модули, то она не нужна, естественно. А если их нет, то пригодится, имхо.
 

pvvx

Активный участник сообщества
Вы заголовок темы прочтите ещё раз, пожалуйста. Никто точной геопозиции не обещал. Часовой пояс определяется верно. Библиотека не требует никакого дополнительного "железа" и работает. Сравнивать её с GPS или GSM некорректно. Если в проекте есть такие модули, то она не нужна, естественно. А если их нет, то пригодится, имхо.
Именно, что часовой пояс определяется не верно.
Наверно программа только для москвичей.
 

Сергей_Ф

Moderator
Команда форума
Именно, что часовой пояс определяется не верно.
Наверно программа только для москвичей.
И какое смещение и часовой пояс она выдала? Неужели не 10800 и не Russia/Moscow? Или в Смоленски пояс отличается от лен.области или от Москвы?
 

pvvx

Активный участник сообщества

nikolz

Well-known member
Ещё раз спрошу. Если вы знаете как от роутера или от сети GPS получить локальный часовой пояс (смещение) в точке приема, то поделитесь знанием.
DeepSeek:
Привет, как от роутера или от сети GPS получить локальный часовой пояс (смещение) в точке приема?
--------------------------------------
Отличный вопрос! Получение локального часового пояса (смещения от UTC) — задача, которая решается по-разному для роутера (IP-геолокация) и для GPS. Вот подробное объяснение для обоих случаев.
1. Получение часового пояса от роутера (через IP-сеть)
Роутер сам по себе не знает свой часовой пояс. Он получает эту информацию извне, и ваше устройство может получить её двумя основными путями:
А) Через протокол DHCP (самый правильный и распространенный способ)
Когда устройство (компьютер, телефон, IoT-гаджет) подключается к сети, роутер по протоколу DHCP выдаёт ему не только IP-адрес, но и дополнительные параметры. Среди них может быть:
  • Параметр 2 (Time Offset): Прямое указание смещения от UTC в секундах. Важно: На практике этот параметр используется редко, так как он указывает смещение, а не правила перехода на летнее время.
  • Параметр 100 (Time Zone - TZ): Строка, описывающая часовой пояс в формате POSIX (например, EST5EDT,M3.2.0/2,M11.1.0/2). Это более точный способ, так как включает правила DST.
  • Параметр 101 (Time Zone Database - tzdata): Строка с названием зоны из базы данных IANA (например, America/New_York). Это самый современный и предпочтительный вариант.
Как это работает на практике:
  1. Ваше устройство отправляет широковещательный запрос DHCP Discover.
  2. Роутер (или DHCP-сервер) в ответе DHCP Offer или DHCP Ack передаёт опции, включая 100 или 101.
  3. Операционная система устройства (Windows, Linux, Android, iOS) использует эту строку для настройки системного времени.
Как получить эту информацию программно?
  • На Linux: можно использовать dhclient или напрямую парсить вывод timedatectl show (который может показывать источник времени).
  • На Windows: через PowerShell или API (Get-NetIPConfiguration не покажет это напрямую, нужно копать в настройках времени).
  • На микроконтроллерах (Arduino, ESP32): использовать библиотеки для DHCP-клиента и парсить опции ответа.
Б) Через геолокацию по публичному IP-адресу (резервный способ)
Если DHCP не предоставляет информацию о часовом поясе, можно определить его по публичному IP-адресу вашей сети.
  1. Устройство делает HTTP-запрос к внешнему сервису геолокации.
  2. Сервис возвращает JSON с данными, включая смещение от UTC или название часового пояса.
Примеры бесплатных сервисов (лимитированных):
Пример кода на Python (для этого способа):
python
import requests
try:
data = requests.get('http://worldtimeapi.org/api/ip').json()
timezone = data['timezone']
utc_offset = data['utc_offset'] # Например, "+03:00"
print(f"Часовой пояс: {timezone}, Смещение: {utc_offset}")
except:
print("Не удалось определить часовой пояс по IP")
2. Получение часового пояса от GPS-приёмника
GPS-чип не передаёт часовой пояс напрямую. Он передаёт:
  1. Всемирное координированное время (UTC) с очень высокой точностью (из сигналов спутников).
  2. Географические координаты (широту и долготу).
Алгоритм получения часового пояса:
  1. Получить координаты от GPS-приёмника (NMEA-строки $GPRMC или $GPGGA).
  2. Использовать базу данных часовых поясов (обычно в формате IANA Region/City, например, America/Los_Angeles), чтобы по координатам (широта/долгота) найти соответствующую зону.
  3. Определить смещение для этой зоны с учётом даты и правил перехода на летнее время (DST).
Как это реализовать:
  • На смартфоне (Android/iOS): Используйте высокоуровневые API. Например, в Android FusedLocationProviderClient может возвращать Location, который, вместе с API java.time или сторонними библиотеками (например, ThreeTenABP), позволяет легко получить смещение для текущих координат.
  • На микроконтроллере (Arduino, ESP32):
    1. Парсите NMEA с GPS-модуля.
    2. Используйте компактную базу данных часовых поясов (например, библиотеку TinyGPS++ (только время UTC) или MicroTZ).
    3. Или делайте запрос к онлайн-API (если есть интернет-соединение), передавая координаты: http://worldtimeapi.org/api/timezone/etc/UTC или с использованием Google Maps Time Zone API (требует ключа).
Примерная логика на псевдокоде:
text
gps_data = get_gps_data() // Читаем NMEA
lat = gps_data.latitude
lon = gpu_data.longitude
utc_time = gps_data.utc_time

timezone_id = find_timezone_in_database(lat, lon) // e.g., "Europe/Berlin"
offset_seconds = get_utc_offset_for_zone(timezone_id, utc_time) // e.g., +7200 для CEST
local_time = utc_time + offset_seconds
Сводная таблица


ИсточникЧто предоставляетКак получить часовой поясТочность и надёжность
Роутер (DHCP)Опция timezone (строка IANA или POSIX)Читать опции DHCP-ответа.Высокая для настройки системы. Зависит от провайдера.
Публичный IPСтрана, регион, смещениеЗапрос к геолокационному API.Средняя/низкая. Может быть неточным для больших стран или VPN.
GPS-приёмникКоординаты (широта/долгота) и точное UTC.Использовать координаты для поиска в локальной БД или онлайн-API.Очень высокая. Проблемы могут быть только на границах часовых поясов.
Рекомендации
  1. Для устройств в локальной сети (IoT): Пытайтесь получить зону через DHCP (опция 101). Если не вышло — делайте резервный запрос по IP-геолокации.
  2. Для портативных/уличных GPS-устройств: Используйте локальную базу часовых поясов (например, MicroTZ для ESP32) для автономной работы. При наличии интернета можно использовать онлайн-API для 100% точности.
  3. Для веб-приложений: Используйте JavaScript: Intl.DateTimeFormat().resolvedOptions().timeZone получит зону, установленную в ОС пользователя (которая уже получена одним из вышеуказанных способов).
Выбор метода зависит от вашего устройства, наличия интернета и требований к автономности.
This response is AI-generated, for reference only.
 

pvvx

Активный участник сообщества
И какое смещение и часовой пояс она выдала? Неужели не 10800 и не Russia/Moscow? Или в Смоленски пояс отличается от лен.области или от Москвы?
Что тут непонятного? Постоянно меняют роуминг в сети и на выходе может быть любой IP по всея России.
Когда покрутите карту на уменьшение масштаба, чтобы перейти на свой город, тогда и поймете.
 

pvvx

Активный участник сообщества
https://2ip.ru/ определяет почти правильно:
1766587049652.png
Но провайдер Yota, вместо MegaFon
И так у всех всё разное и меняется.
Причину спрашивайте у РКН и других организаций..
 

pvvx

Активный участник сообщества
В BLE и Zigbee есть специальные сервисы для синхронизации времени на устройстве со всеми поправками на пояса.

В текущем интернет их нет или они нестабильны, особенно по IP.
 

pvvx

Активный участник сообщества
Вам ещё не объяснили, что интернет в России разломан и продолжают ломать?

Типа создают национальный интернет, а регистрироваться в нем никто не хочет.
По этому принудительно рубят весь мобильный с доступом только к макс и рутюбе, к примеру на полторы суток в Питере 11-го и каждую ночь в начале этого месяца в Лен.области.
Банки и прочие при этом недоступны. Все несут убытки, но не прутся в “белый спиcок”…

Работает ли ваш сервис во время включения "белого списка"?
 

pvvx

Активный участник сообщества
За кабельный инет уже тоже взялись. Отрапортовали, что нашли 420 километров незарегистрированного оптоволокна в лен. области… :)
 
Сверху Снизу