我正在跟踪能源使用情况,其中包括一个热量表,用于测量焦耳的使用情况。我想计算加热功率(以瓦特为单位),该功率与DERIVATIVE()
函数配合得很好。
问题在于,导数是在描述数据的两个时间戳中的后一个返回的,当与Grafana的阶梯图结合使用时,将显示下一个时间增量的导数而不是当前时间。
我如何:
图形示例
文字示例
以下influxdb中的热量表读数
08:00, 0 Joule
09:00, 3600 Joule
19:00, 7200 Joule
会给予
09:00, 1.0 Watt (which refers to 08:00-09:00)
18:00, 0.1 Watt (which refers to 09:00-18:00)
哪个Grafana(作为楼梯)将绘制为
08:00-09:00, Null (should be 1.0)
09:00-18:00, 1.0 (should be 0.1)
18:00-, 0.1 (should be Null)
答案 0 :(得分:0)
我通过在计算导数之前使用GROUP BY()
和fill(linear)
对数据进行插值来解决自己的问题。
创建样本数据
insert testenergy val=0 1565503200
insert testenergy val=3600 1565506800
insert testenergy val=7200 1565510400
insert testenergy val=10800 1565514000
insert testenergy val=14400 1565550000
insert testenergy val=18000 1565557200
收益
SELECT last("val") as energy FROM "testenergy" WHERE $timeFilter GROUP BY time($__interval) fill(null)
time energy
---- ------
2019-08-11T06:00:00Z 0
2019-08-11T07:00:00Z 3600
2019-08-11T08:00:00Z 7200
2019-08-11T09:00:00Z 10800
2019-08-11T19:00:00Z 14400
2019-08-11T21:00:00Z 18000
DERIVATIVE()
查询不起作用:
SELECT derivative(last("val"), 1s) as power_wrong FROM "testenergy" WHERE $timeFilter GROUP BY time($__interval) fill(null)
问题在于InfluxDB在时间t n + 1 上计算(t n ,t n + 1 )的导数,然后使用楼梯图显示Grafana(t n + 1 ,t n + 2 ):
time power_wrong
---- -----------
2019-08-11T07:00:00Z 1
2019-08-11T08:00:00Z 1
2019-08-11T09:00:00Z 1
2019-08-11T19:00:00Z 0.1
2019-08-11T21:00:00Z 0.5
一种解决方案是在计算导数之前对InfluxDB中的数据进行插值:
SELECT derivative(mean("val"), 1s) as power_fix FROM "testenergy" WHERE $timeFilter GROUP BY time($__interval) fill(linear)
收益
time power_fix
---- ---------
2019-08-11T07:00:00Z 1
2019-08-11T08:00:00Z 1
2019-08-11T09:00:00Z 1
2019-08-11T10:00:00Z 0.1
2019-08-11T11:00:00Z 0.1
2019-08-11T12:00:00Z 0.1
2019-08-11T13:00:00Z 0.1
2019-08-11T14:00:00Z 0.1
2019-08-11T15:00:00Z 0.1
2019-08-11T16:00:00Z 0.1
2019-08-11T17:00:00Z 0.1
2019-08-11T18:00:00Z 0.1
2019-08-11T19:00:00Z 0.1
2019-08-11T20:00:00Z 0.5
2019-08-11T21:00:00Z 0.5