Микропитоны и ЭПОХА

Я хочу отправить данные в базу данных Graphite с помощью Esp32, и для этого мне нужна метка времени, которая должна быть в формате Epoch.

Уже 2 часа ищу в интернете и ничего не могу найти.

Пробовал machine.rtc, utime, time...

Если у вас есть пример, я беру.

Спасибо

ntptime.settime()

rtc = machine.RTC()

print("Time:%s" %str(rtc.datetime()))

Извините за беспокойство, но я начинаю под MicroPython


person Alexis81    schedule 22.07.2019    source источник


Ответы (2)


Многие встроенные порты, включая MicroPython, используют время эпохи 1 января 2000 года. Это на 946 684 800 секунд позже, чем время эпохи UNIX 1 января 1970 года. Если вы сначала установите свой RTC с помощью NTP, вы сможете прочитать эпоху MicroPython за секунды. . Похоже, вы находитесь в сети, поэтому это должно быть легко сделать. Предполагая, что вы уже подключены к WiFi, вот как установить время RTC:

import ntptime

# General call to set RTC shown
# Note that when setting datetime, Weekday is ignored. MicroPython uses its internal calendar.
# machine.RTC().datetime((yyyy, mm, dd, Weekday, hh, mm, ss, us))

# RTC code follows.
ntptime.settime()         # This library call sets RTC to ntp time.

machine.RTC().datetime()  # Read the hardware RTC in datetime format.

После того, как вы указали время ESP32 GMT NTP, вы можете прочитать количество секунд из MycroPython Epoch с помощью:

import utime

utime.time()

Мой результат был этим числом, 634791870. Это целое число секунд. С MicroPython точность этого вызова не превышает нескольких секунд. (Вы можете получить микросекунды, используя datetime(), но это в формате даты и времени, а не метки времени.)

Далее вам нужно сделать небольшую арифметику:

timestamp = 946684800 + utime.time()

Это дает вам отметку времени UTC из эпохи Unix в целых секундах. (MicroPython игнорирует часовой пояс.) Чтобы настроить местное время, вам нужно добавить 3600 для каждого часа, идущего на восток от 0 градусов долготы, и вычесть это на запад.

Если вашему приложению нужен формат с плавающей запятой, вы можете просто добавить 0.0.0.0.

person stanely    schedule 12.02.2020

Я ничего не знал о Graphite до сих пор, но быстрый поиск в Интернете нашел мне Документация по графиту:

timestamp — это количество секунд, прошедших со времени эпохи unix. Carbon-cache будет использовать время прибытия, если timestamp установлено на -1.

Поиск в Интернете по запросу unix epoch time быстро привел меня к странице Википедии, на которой написано:

Время Unix (также известное как время POSIX или время эпохи UNIX) — это... количество секунд, прошедших с 00:00:00 четверга, 1 января 1970 года, по всемирному координированному времени (UTC), минус дополнительные секунды.

Используя это знание, вы можете вычислить нужную временную метку из значения, полученного от RTC.now(), или вы можете просто использовать значение -1 для временной отметки данных со временем их поступления на сервер.

В этой ветке форума MicroPython есть несколько примеров работы с ntptime ( который идентичен в ESP32 для < href="https://github.com/micropython/micropython/blob/master/ports/esp8266/modules/ntptime.py" rel="nofollow noreferrer">версия ESP8266)

person nekomatic    schedule 25.07.2019