Временные метки InfluxDB, похоже, не используют указанную временную метку

#python #timestamp #influxdb #influxdb-python

Вопрос:

Я отправляю данные в базу данных InfluxDB с помощью клиентской библиотеки Python. В приведенном примере используется time метод из Point класса, который, как предполагается, позволяет записывать данные с предоставленной меткой времени, а не время, полученное данными на сервере.

Я использую следующий импорт:

 from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS
from influxdb_client.domain.write_precision import WritePrecision
 

И у меня есть следующие сегменты кода для создания Point и отправки его с помощью write метода:

 def get_shark_intervals(sharks, buffer):
  for shark in sharks:
    demand    = Shark.decode_readings(shark.read([Shark.DEMAND]))
    interval  = Shark.decode_datetime(shark.read([Shark.INTERVAL]))
    if demand is None or interval is None:
      return
    print(interval)
    buffer.append(
      [
        int(datetime(
          2000   interval[0],
          interval[1],
          interval[2],
          interval[3],
          interval[4],
          interval[5]
        ).timestamp()),
        "L1",
        shark.get_equipment(),
        shark.get_description(),
        shark.get_nom_voltage(),
        "DEMAND",
        int(demand[0][1])
      ]
    )
    print(buffer[-1][0])
  return
 
 def flush_buffer(influx, buffer):
  len_buffer = len(buffer)
  points = [0] * len_buffer

  for i in range(0, len_buffer):
    point = Point("consumption")                                  
      .tag("location",        buffer[i][1])                       
      .tag("equipment",       buffer[i][2])                       
      .tag("description",     buffer[i][3])                       
      .tag("nominal_voltage", buffer[i][4])                       
      .tag("type",            buffer[i][5])                       
      .field("W",             buffer[i][6])                       
      .time(buffer[i][0],     write_precision = WritePrecision.S)

    points[i] = point

  influx.write(
    bucket          = BUCKET,
    record          = points,
    write_precision = WritePrecision.S
  )

  buffer = []
  
  return
 

Для двух print операторов в моем коде я получаю этот вывод:

Вывод из инструкций печати с информацией о времени и дате

Список отформатирован как [Год, Месяц, День, Час, Минута, Секунда], и метка времени Unix совпадает с элементами списка при преобразовании; однако, как показано ниже, InfluxDB, похоже, использует полученную сервером метку времени при отображении запроса.:

Пример графика неправильной метки времени

Пример графика неправильной метки времени

Это также видно в необработанных данных, которые _time не соответствуют предоставленным отметкам времени:

Необработанные данные с неправильным столбцом времени

Комментарии:

1. При тестировании дополнительной телеметрии с интервалом выборки в 1 секунду и интервалом загрузки в 10 секунд все метки времени синхронизируются с интервалами в 10 секунд, поэтому создается впечатление, что база данных InfluxDB игнорирует метку времени в отправляемой точке.