You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Prometheus电表读数计算分时电费

基于Prometheus实现分时电费计算方案

要解决这个问题,核心是通过Prometheus记录规则,结合时间函数拆分不同时段的用电量增量,再乘以对应电价后累加得到累计电费指标。以下是具体实现步骤:

1. 核心思路

利用Prometheus的increase()函数获取电表计数器的周期增量,通过hour()和minute()函数判断当前时段,拆分低价/高价时段的用电量,分别乘以对应电价后累加,最终生成累计电费指标。

2. 记录规则配置

创建Prometheus记录规则文件(比如electricity_cost_rules.yaml),添加以下规则组(按分钟执行,适配电表采集频率):

groups:
- name: electricity_cost_calculation
  interval: 1m  # 与电表数据采集频率匹配
  rules:
    # 步骤1:计算当前1分钟内的用电量增量(自动处理计数器重置)
    - record: electricity:usage:increment:1m
      expr: increase(electricity_meter_total[1m])
    
    # 步骤2:标记当前是否处于低价时段(00:30-04:30),返回1(是)或0(否)
    - record: electricity:tariff:is_low
      expr: |
        (hour() == 0 and minute() >= 30) 
        or (hour() >= 1 and hour() <= 3) 
        or (hour() == 4 and minute() < 30)
    
    # 步骤3:计算当前1分钟的低价电费增量(替换0.3为实际低价电价)
    - record: electricity:cost:low:increment
      expr: electricity:usage:increment:1m * electricity:tariff:is_low * 0.3
    
    # 步骤4:计算当前1分钟的高价电费增量(替换0.6为实际高价电价)
    - record: electricity:cost:high:increment
      expr: electricity:usage:increment:1m * (1 - electricity:tariff:is_low) * 0.6
    
    # 步骤5:生成累计总电费指标(统计所有历史周期的电费增量之和)
    - record: electricity:cost:total
      expr: sum_over_time(electricity:cost:low:increment[1y]) + sum_over_time(electricity:cost:high:increment[1y])

3. 关键细节说明

  • 时段判断逻辑:覆盖00:30-01:00、01:00-04:00、04:00-04:30三个区间,确保低价时段无遗漏;
  • 计数器重置处理:increase()函数会自动识别电表计数器的重置(比如电表清零),无需额外处理;
  • 精度控制:上述规则按分钟级划分时段,如果需要更精确的跨分钟时段计算(比如00:29-00:30这类跨时段的分钟),可以通过计算时段占比调整,示例如下:
    - record: electricity:tariff:low_ratio
      expr: |
        # 处理00:29-00:30分钟,低价时段占1/60
        (hour() == 0 and minute() == 29) * (60 - minute())/60
        +
        # 处理00:30-03:59分钟,全时段为低价
        ((hour() == 0 and minute() >=30) or (hour() >=1 and hour() <=3)) * 1
        +
        # 处理04:00-04:29分钟,全时段为低价
        (hour() ==4 and minute() <30) * 1
    
    之后将电费增量计算中的electricity:tariff:is_low替换为electricity:tariff:low_ratio即可。

4. 验证指标

配置完成后,重启Prometheus或加载规则,即可通过PromQL查询electricity:cost:total获取累计电费,也可查询electricity:cost:low:increment/electricity:cost:high:increment查看单周期的电费增量。

内容的提问来源于stack exchange,提问作者Andrew Wilkinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:20:30