使用正确时间戳写入的数据不会在 Chronograf InfluxDB 中可视化

Data written with correct timestamp does not get visualized in Chronograf InfluxDB

我有一个嵌入式板,它发送来自 IMU 传感器的信息以及从 RTC 模块接收到的时间戳。

时间戳来自Adafruit's RTClib

该代码有一个名为 unixtime() 的函数,它为我提供如下时间戳:

1537466106 
1537466107
1537466109

如果我在 Online Epoch Converter 中输入上述时间戳,它会为我提供截至今天的正确时间。

我通过 HTTP 发送此信息,信息在 imu 测量下存储在 InfluxDB 中,如下所示:

查询: SELECT * FROM imu LIMIT 100

time       eul_x  eul_y  eul_z  liac_x liac_y liac_z location nodeid status
----       -----  -----  -----  ------ ------ ------ -------- ------ ------
1537466106 273.25 -0.88  4.06   -0.06  -0.74  9.81   front    node1  0
1537466107 273.25 -0.88  4.12   -0.09  -0.87  9.72   front    node1  0
1537466109 273.25 -0.88  4.12   -0.09  -0.86  9.62   front    node1  0
1537466110 273.25 -0.88  4.12   -0.07  -0.84  9.67   front    node1  0
1537466111 273.25 -0.88  4.12   -0.1   -0.85  9.71   front    node1  0
1537466112 273.25 -0.88  4.12   -0.08  -0.86  9.74   front    node1  0
1537466113 273.25 -0.88  4.12   -0.04  -0.83  9.7    front    node1  0
1537466114 273.25 -0.88  4.12   -0.07  -0.84  9.7    front    node1  0
1537466115 273.25 -0.88  4.12   -0.07  -0.85  9.67   front    node1  0
1537466116 273.25 -0.88  4.12   -0.06  -0.85  9.67   front    node1  0
1537466117 273.25 -0.88  4.12   -0.06  -0.84  9.66   front    node1  0
1537466118 273.25 -0.88  4.12   -0.07  -0.83  9.66   front    node1  0
1537466119 273.25 -0.88  4.12   -0.09  -0.83  9.68   front    node1  0
1537466120 273.25 -0.88  4.12   -0.08  -0.84  9.7    front    node1  0
1537466121 273.25 -0.81  4.12   -0.08  -0.87  9.52   front    node1  0
1537466123 272.12 -0.81  -3.06  -0.15  0.54   9.74   front    node1  0

现在我 运行 机器上的 Chronograf 实例将上述测量中获得的数据可视化

Chronograf 查询

奇怪的是 table 总是显示时间戳指向 1970 年的纪元

查询数据库中的单个字段提供以下输出:

研究

我阅读了 InfluxDB 的文档,它们具有 nanoseconds 精度的时间戳。

相反,我上面提到的时间戳实际上是正确的,但为什么 Chronograf/InfluxDB 不能正确把握它?

案例

我从 RTClib 中获得了 uint32_t 的时间戳,但我不确定如何将其转换为纳秒精度。

我将时间戳信息作为字符串发送,将零连接到字符串是否明智?如果是,可能需要多少个零?

硬件

我正在使用 DS3231 RTC 模块,它提供 精度 [1].

根据 InfluxDB 的 HTTP 写语法文档[2]:

All timestamps are assumed to be Unix nanoseconds unless otherwise specified

由于 RTC 提供的信息是特定于硬件的,我假设精度无法更改。 (存疑)

解决方案

我在我的 Arduino Sketch 中使用了 HTTP 写入语法中的 precision 参数如下:

HTTPClient http;
       
       http.begin("http://" + _host + ":" + _port + "/write?db=" + _db + "&precision=s");
       http.addHeader("Content-Type", "text/plain");

       int httpResponseCode = http.POST(mes_dat);

precision 值为 s(以秒为单位)。这将以正确的方式将信息保存在 InfluxDB 中,即

name: imu
time                eul_x  eul_y eul_z liac_x liac_y liac_z location nodeid status
----                -----  ----- ----- ------ ------ ------ -------- ------ ------
1537470381000000000 359.31 0     9.81  -0.05  -1.47  9.82   front    node1  0
1537470382000000000 359.37 0     10.81 -0.05  -1.72  9.75   front    node1  0
1537470383000000000 359.37 -0.06 10.81 -0.06  -1.75  9.71   front    node1  0
1537470384000000000 359.37 -0.06 10.81 -0.03  -1.75  9.67   front    node1  0
1537470385000000000 359.37 -0.06 10.81 -0.05  -1.76  9.73   front    node1  0
1537470386000000000 359.37 -0.06 10.75 -0.05  -1.76  9.72   front    node1  0
1537470387000000000 359.37 -0.06 10.75 -0.06  -1.77  9.64   front    node1  0
1537470388000000000 359.37 -0.06 10.75 -0.02  -1.76  9.61   front    node1  0
1537470389000000000 359.37 -0.06 10.75 -0.04  -1.76  9.61   front    node1  0
1537470390000000000 359.37 -0.06 10.75 -0.03  -1.82  9.61   front    node1  0
1537470391000000000 359.37 -0.06 10.63 -0.03  -1.78  9.72   front    node1  0
1537470393000000000 359.37 -0.06 10.63 -0.05  -1.78  9.63   front    node1  0
1537470394000000000 359.37 -0.06 10.63 -0.05  -1.76  9.76   front    node1  0

Chronograf 中的可视化非常完美,问题中包含上述所有查询。

[1] Adafruit's DS3231

[2] InfluxDB HTTP Write Documentation