在Chronograf InfluxDB中无法看到带有正确时间戳记的数据

时间:2018-09-20 16:37:02

标签: arduino influxdb epoch chronograf

我有一块嵌入式板,可从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查询

Chronograf Query

奇怪的是,表格始终显示时间戳记指向1970年时代。

Table shows wrong timestamps

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

Query is correct but no result

研究

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

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

案例

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

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

1 个答案:

答案 0 :(得分:0)

硬件

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

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

  

除非另有说明,否则所有时间戳均假定为Unix纳秒。

由于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