非侵入式电表
所以,使家庭智能化的一个重要部分是了解家庭一天中使用的电量。跟踪这一点可能很困难,通常需要安装一个全新的电表,这通常需要花费一大笔钱。然而,许多电表都有一个红色LED灯,每次使用1瓦时就会闪烁。
因此,一个简单的想法是:我们为什么不利用这个功能来使电表变成物联网设备呢?我们只需要在上述LED灯前连接一个简单的光敏电阻,并跟踪我们接收到的脉冲数量。然后,使用ESPHome,我们就可以立即在Home Assistant中看到电表 🎉
连接所有东西非常简单:只需购买一个合适的光敏电阻(确保波长与您的电表大致匹配)。然后使用一个简单的可变电阻分压器连接它(参考 这篇文章)。然后…那就已经完成了 :)

ℹ️ 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
如果一位技术人员出现并他对您对电表做了什么感到困惑,告诉他们关于ESPHome 😉ℹ️ 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
计算总生成能量
当配置了总传感器时,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无法处理值的时间继续集成电力,即在进行更新、重启等操作时。