非侵入式电表

所以,使家庭智能化的一个重要部分是了解家庭一天中使用的电量。跟踪这一点可能很困难,通常需要安装一个全新的电表,这通常需要花费一大笔钱。然而,许多电表都有一个红色LED灯,每次使用1瓦时就会闪烁。

因此,一个简单的想法是:我们为什么不利用这个功能来使电表变成物联网设备呢?我们只需要在上述LED灯前连接一个简单的光敏电阻,并跟踪我们接收到的脉冲数量。然后,使用ESPHome,我们就可以立即在Home Assistant中看到电表 🎉

连接所有东西非常简单:只需购买一个合适的光敏电阻(确保波长与您的电表大致匹配)。然后使用一个简单的可变电阻分压器连接它(参考 这篇文章)。然后…那就已经完成了 :)

Image

ℹ️ Note

一些能源计量器有一个暴露的 S0端口(本质上只是一个闭合的开关),如果是这种情况,光电二极管可以用以下连接替换。

S0 ------------ VCC
S0 --+-- 10k -- GND
.    |
.    +--------- GPIO12

对于ESPHome,您可以使用 脉冲计量传感器 使用以下配置:

sensor:
  - platform: pulse_meter
    name: 'Power'
    id: sensor_pulse_meter # 可选ID,如果您想计算每日总能量,则需要
    unit_of_measurement: 'W'
    device_class: power
    state_class: measurement
    accuracy_decimals: 0
    pin: GPIO12
    filters:
      - multiply: 6 # (60s / 脉冲常数) * (1000W / 1kW)

当然,请调整 GPIO12 以匹配您的设置。脉冲计数传感器的输出是每分钟脉冲数,我们还知道LED的10000个脉冲应该等于1kWh的电力使用量。因此,重新排列表达式得出从脉冲/分钟到 W 的比例因子为6。

ℹ️ Note

pulse_meter 传感器在检测到脉冲时发送更新。这可能会导致亚秒级的更新,这对于Home Assistant来说可能有点太多。为了避免这种情况,您可以使用 throttle_average 过滤器,仅以所需间隔发送更新:

sensor:
  - platform: pulse_meter
    # ...
    filters:
      - throttle_average: 10s
      - filter_out: NaN

ℹ️ Note

pulse_meter 传感器有一个内部滤波器,用于去抖输入信号。此滤波器默认设置为 13us。为了增加安全裕度,您可以增加此值。为此,您需要知道您的电表在预期负载范围内可能看到的 最小脉冲宽度

最小脉冲宽度阈值是由考虑电表设计以处理的 负载 的上限以及电表的 脉冲常数(x脉冲/kWh)确定的。以下是涉及的计算:

  • 功率限制(瓦特):确定电表设计以测量的 上限负载。例如,如果

  • 限制是16 kW(16,000瓦特),这将成为一个参考点。

  • 脉冲率计算:确定与此负载限制对应的脉冲率。为此,我们需要知道

  • 脉冲常数。在我们的示例中,电表的脉冲常数为10000脉冲/kWh,在最大16 kW负载下产生

  • 每小时160000脉冲,即每秒44.4脉冲。

  • 最小脉冲宽度计算:使用脉冲率计算最小脉冲宽度阈值。在我们的

  • 示例中,最大脉冲率为44.4/sec,我们预期的最小脉冲宽度约为22.5

  • 毫秒。选择一个略小于此值的值,以避免错过脉冲。

sensor:
  - platform: pulse_meter
    # ...
    internal_filter: 20ms
如果一位技术人员出现并他对您对电表做了什么感到困惑,告诉他们关于ESPHome 😉

计算总生成能量

当配置了总传感器时,pulse_meter 还报告测量的总脉冲数。在电表上使用时,这可以用来测量总传输能量(kWh)。

# 示例配置条目
sensor:
  - platform: pulse_meter
  # ...
    total:
      name: "总电量"
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      accuracy_decimals: 3
      filters:
        - multiply: 0.0001  # (1/10000脉冲/kWh)
        # - throttle_average: 10s
        # - filter_out: NaN

(重)设置总能量值

使用此操作,您可以重置/设置总脉冲计数。如果希望 total 传感器与您试图匹配的表上的值相匹配,这会很有用。

api:
  actions:
    - action: set_total
      variables:
        new_total: int
      then:
        - pulse_counter.set_total_pulses:
            id: sensor_pulse_meter
            value: !lambda 'return new_total * 1000;'

跟踪每日总能量

此外,您还可以计算每日总生成能量,为此您可以使用 每日总能量 使用以下配置:

sensor:
 #(...)
  - platform: total_daily_energy
    name: '每日总能量'
    id: sensor_total_daily_energy
    power_id: sensor_energy_pulse_meter
    unit_of_measurement: 'kWh'
    state_class: total_increasing
    device_class: energy
    accuracy_decimals: 3
    filters:
      # 从W到kW的乘法因子是0.001
      - multiply: 0.001

time:
  - platform: homeassistant
    id: homeassistant_time

虽然理论上您也可以使用Home Assistant 集成 集成来完成此操作,但此方法的好处是它可以在Home Assistant无法处理值的时间继续集成电力,即在进行更新、重启等操作时。

参考文档