计算一次充电消耗的能量

Calculating the amount of energy used for a charging session

我每 10 秒将 wallbox 的电流(I in Ampere)和电压(U in Volt)输入到 prometheus 实例中。当插入电动汽车时,墙盒自然会报告较高的电流,而在未插入电动汽车时会报告较低的电流(对于墙盒的连接功能,当然仍然存在一些基线电流)。

现在我对 Prometheus 和 PromQL 还很陌生,想知道我将如何继续并实际从这些单个时间点获取聚合数据,即我想获取瓦时并进一步聚合这些数据。

IIRC 电力工作由 W = U x I x t 计算,所以我的想法是以某种方式将各个值相加,直到一个小时的总值,如下所示:

// somehow get t(0), the first timestamp where values have been reported
// now for each data point we expect that U and I have been constant up until
// this point for simplicity
W(1) = U(1) x I(1) x (t(1) - t(0))
W(2) = U(2) x I(2) x (t(2) - t(1))
W(3) = U(3) x I(3) x (t(3) - t(2))
...
// one hour is comprised of 360 individual values (6 values per minute, 60 minutes per hour)
W(1..360) = W(1) + W(2) + ... W(360)

我想我需要一些积分函数,但我不确定我做的是否正确:

sum_over_time(current[10s]) * sum_over_time(voltage[10s])

这给了我与 current * voltage 基本相同的值,所以是一个单一的电功值,但我不知道如何进一步正确地汇总它。

有什么想法吗?

如果每 10 秒收集 currentvoltage 指标,则以下查询应该 return 上一小时的能源消耗:

sum_over_time(
  (last_over_time(current[20s]) * last_over_time(voltage[20s]))[1h:10s]
) * 10

需要 10 乘数才能计算每 10 秒间隔消耗的能量。

此 promql 查询使用 subquery feature

更新: 查询 return 是 Joules 中的能量,而不是 kWh 中的能量。结果值必须除以 (3600*1000) 才能将消耗的能量转换为 kWh:

sum_over_time(
  (last_over_time(current[20s]) * last_over_time(voltage[20s]))[1h:10s]
) * 10 / (3600*1000)