跳转到内容

ATM90E32 功率传感器

atm90e32 传感器平台允许您在 ESPHome 中使用 ATM90E32 电压/电流和功率传感器 (数据手册)。此传感器常见于 CircuitSetup 2 和 6 通道能量计以及 Gelidus Research 2 通道功率计中。

与设备的通信通过 SPI 总线 完成,因此您需要在配置中包含带有 已设置 mosi_pin 和 miso_pin 的 spi: 条目。

ATM90E32 芯片最多可测量三个交流电压,尽管通常只使用一个 电压测量值用于家庭的 mains 电源相。通过 CT 钳读取三个电流测量值。

CircuitSetup 分相单相能量计 可以读取 2 个电流通道和 1 个(可扩展至 2 个)电压通道。

CircuitSetup 分相单相实时全屋能量计。

CircuitSetup 6 通道能量计 一次可以读取 6 个电流通道和 2 个电压通道,该板上有两个 ATM90E32 芯片,需要在 ESPHome 中配置两个传感器。

CircuitSetup 可扩展 6 通道 ESP32 能量计主板。
  • cs_pin (必选, Pin Schema): CS 连接的引脚。对于 6 通道电表主板,此值始终为 5 和 4。对于附加板,每个 CS 引脚可以选择跳线,但默认为 0 和 16。

  • line_frequency (必选, string): 供电电压的交流电源频率。可选值为 50Hz、60Hz。

  • id (可选, ID): 如果使用多个带有校准按钮、参考电压/电流量和相状态字段的 atm90e32 芯片,则需要此项

  • phase_a (可选): 第 1 相的配置选项。

    • voltage (可选): 使用此相的电压值,单位为伏特(RMS)。 来自 Sensor 的所有选项。

    • current (可选): 使用此相的电流值,单位为安培。来自 Sensor 的所有选项。

    • power (可选): 使用此相的功率值,单位为瓦特。来自 Sensor 的所有选项。

    • reactive_power (可选): 使用此相的无功功率值,单位为 VAR。来自 Sensor 的所有选项。

    • apparent_power (可选): 使用此相的视在功率值,单位为 VA。来自 Sensor 的所有选项。

    • power_factor (可选): 使用此相的功率因数值。来自 Sensor 的所有选项。

    • phase_angle (可选): 使用此相的相角值,单位为度。来自 Sensor 的所有选项。

    • peak_current (可选): 使用此相的峰值电流值,单位为安培。来自 Sensor 的所有选项。

    • harmonic_power (可选): 使用此相的谐波功率值。来自 Sensor 的所有选项。

    • gain_voltage (可选, int): 电压增益值,用于将低压交流变压器放大回家用 mains 电源。 默认为 7305。

    • gain_ct (可选, int): 此相的 CT 钳校准值。 默认为 27961。

    • offset_voltage (可选, int): 在电流和电压为 0 时通过偏移校准功能获得的电压偏移 默认为 0

    • offset_current (可选, int): 在电流和电压为 0 时通过偏移校准功能获得的电流偏移 默认为 0

    • offset_active_power (可选, int): 在电流为 0 且插入并校准了电压变压器时,通过功率偏移校准功能获得的有功功率偏移。 默认为 0

    • offset_reactive_power (可选, int): 在电流为 0 且插入并校准了电压变压器时,通过功率偏移校准功能获得的无功功率偏移。 默认为 0

    • forward_active_energy (可选): 使用此相的正向有功能量值,单位为瓦时。 来自 Sensor 的所有选项。

    • reverse_active_energy (可选): 使用此相的反向有功能量值,单位为瓦时。 来自 Sensor 的所有选项。

  • phase_b (可选): 第 2 相的配置选项。与 phase_a 选项相同。

  • phase_c (可选): 第 3 相的配置选项。与 phase_a 选项相同。

  • frequency (可选): 使用电表计算出的频率值。来自 Sensor 的所有选项。

  • peak_current_signed (可选, boolean): 控制峰值电流输出为有符号或绝对值。默认为 false。

  • chip_temperature (可选): 使用芯片温度值。来自 Sensor 的所有选项。

  • gain_pga (可选, string): 当 CT 钳输出太低且 gain_ct 已满时增加此项。可选值为 1X、 2X、4X。默认为 1X,适合大多数 CT 钳。

  • current_phases (可选): 电表的相数,2 或 3 6 通道可扩展能量计应设置为 3,分相单相电表应设置为 2。默认为 3。

  • update_interval (可选, Time): 检查传感器的时间间隔。默认为 60s。

  • spi_id (可选, ID): 如果您希望 使用多个 SPI 总线,请手动指定 SPI 组件 的 ID。

  • enable_gain_calibration (可选, boolean): 如果为 true,则启用基于相应电压、reference_voltage 和电流、reference_current 参考字段中输入值的电压增益 (gain_voltage) 和电流 (gain_ct) 增益校准。对于多个 ATM90E32 传感器,每个传感器单独启用,并通过 id 值对映射其按钮。例如,当定义了多个时使用 id: chip1。运行后,值存储在芯片内存中,重启和 OTA 软件更新后可用。

  • enable_offset_calibration (可选, boolean): 如果为 true,则启用电压 (offset_voltage) 和电流传感器的精细偏移噪声 0 电平校准 (offset_current),以及有功功率 (offset_active_power) 和无功功率 (offset_reactive_power) 的功率偏移。需要按钮来操作校准功能。对于多个 ATM90E32 传感器,每个传感器单独启用,并通过 id 值对映射其按钮。例如,当定义了多个时使用 id: chip1。运行后,值存储在芯片内存中,重启和 OTA 软件更新后可用。偏移校准只能在所有电压和电流输入为 0 值时执行。建议使用 USB 电源。对于功率偏移校准,应仅连接电压变压器。

text_sensor:
- platform: atm90e32
id: chip1
phase_status:
phase_a:
name: "Phase A Status"
phase_b:
name: "Phase B Status"
phase_c:
name: "Phase C Status"
freq_status:
name: "Frequency Status"

配置变量:

  • id (可选, ID): 上方定义的 atm90e32 传感器的 ID。使用多个传感器时必填。

  • phase_status (可选): 启用每相状态条件:

    • phase_a (可选): 相 A 状态字段。 来自 Text Sensor 的所有选项。

      将报告:

      • 过电流: 电流 ≥ 65.53 A 时检测到。

      • 过压/欠压: 基于配置的 line_frequency。例如:

        • 在 60Hz(预期 120V)下,欠压 = <78%,过压 = >122%。
        • 在 50Hz(预期 220V)下,欠压 = <78%,过压 = >122%。
      • 缺相: 指示该相是否已断开。

        如果没有条件满足,传感器报告 Okay。

    • phase_b (可选): 相 B 状态字段。与相 A 选项相同

    • phase_c (可选): 相 C 状态字段。与相 A 选项相同

  • frequency_status (可选): 基于频率阈值报告状态。

    来自 Text Sensor 的所有选项。

    • 对于 50Hz 系统:

      • 频率 ≤ 47Hz 时为 LOW
      • 频率 ≥ 53Hz 时为 HIGH
    • 对于 60Hz 系统:

      • 频率 ≤ 57Hz 时为 LOW
      • 频率 ≥ 63Hz 时为 HIGH

    如果频率在预期范围内,输出为 Normal。

button:
- platform: atm90e32
id: chip1
run_gain_calibration:
name: "Run Gain Calibration"
clear_gain_calibration:
name: "Clear Gain Calibration"
run_offset_calibration:
name: "Run Offset Calibration"
clear_offset_calibration:
name: "Clear Offset Calibration"
run_power_offset_calibration:
name: "Run Power Offset Calibration"
clear_power_offset_calibration:
name: "Clear Power Offset Calibration"

配置变量:

  • id (可选, ID): 上方定义的 atm90e32 传感器的 ID。使用多个传感器时必填。

  • run_gain_calibration (可选): 运行增益校准的按钮。enable_gain_calibration 必须为 True。这些值可以永久存储在 gain_voltage 和 gain_ct 中。 来自 Button 的所有选项。

  • clear_gain_calibration (可选): 从闪存清除增益校准并使用默认值的按钮,或在 gain_voltage 和 gain_ct 下定义的值。 来自 Button 的所有选项。

  • run_offset_calibration (可选): 运行偏移校准的按钮。enable_offset_calibration 必须为 True。这些值可以永久存储在 offset_voltage 和 offset_current 中。 来自 Button 的所有选项。

  • clear_offset_calibration (可选): 从闪存清除增益校准并使用默认值的按钮,或在 offset_voltage 和 offset_current 下定义的值。 来自 Button 的所有选项。

  • run_power_offset_calibration (可选): 运行功率偏移校准的按钮。enable_offset_calibration 必须为 True。这些值可以永久存储在 offset_active_power 和 offset_reactive_power 中。 来自 Button 的所有选项。

  • clear_power_offset_calibration (可选): 从闪存清除增益校准并使用默认值的按钮,或在 offset_active_power 和 offset_reactive_power 下定义的值。 来自 Button 的所有选项。

可以配置 number 实体以在运行时提供校准电压和电流参考值。

number:
- platform: atm90e32
id: chip1
reference_voltage:
phase_a:
name: "Phase A Ref Voltage"
phase_b:
name: "Phase B Ref Voltage"
phase_c:
name: "Phase C Ref Voltage"
reference_current:
phase_a:
name: "Phase A Ref Current"
phase_b:
name: "Phase B Ref Current"
phase_c:
name: "Phase C Ref Current"

配置变量:

  • id (可选, ID): 上方定义的 atm90e32 传感器的 ID。使用多个传感器时必填。

  • reference_voltage (可选): 电压变压器连接的已知电压的精细增益校准。它用于计算 gain_voltage 的值。需与 run_gain_calibration 按钮配合使用。enable_gain_calibration 必须为 True。以下每个相默认值为 min_value: 100、max_value: 200、mode: box、optimistic: True、step: 0.1。

    • phase_a (可选): 相 A 参考电压字段。来自 Number 的所有选项

    • phase_b (可选): 相 B 参考电压字段。如果未指定,将使用 phase_a 的值(CircuitSetup 的 6 通道电表电压相是连在一起的)。 来自 Number 的所有选项

    • phase_c (可选): 相 C 参考电压字段。如果未指定,将使用 phase_a 的值(CircuitSetup 的 6 通道电表电压相是连在一起的)。 来自 Number 的所有选项

  • reference_current (可选): CT 正在测量的电路已知电流的精细增益校准。它用于计算 gain_ct 的值。需与 run_gain_calibration 按钮配合使用。enable_gain_calibration 必须为 True。以下每个相默认值为 min_value: 1、max_value: 200、mode: box、optimistic: True、step: 0.1。

    • phase_a (可选): 相 A 参考电流字段。来自 Number 的所有选项
    • phase_b (可选): 相 B 参考电流字段。来自 Number 的所有选项
    • phase_c (可选): 相 C 参考电流字段。来自 Number 的所有选项

为了获得准确的电压和电流读数,建议校准您的电压变压器和 CT 钳。 ESPHome 支持 ATM90E32 电表的自动增益和偏移校准。

要使用这些功能,请确保:

  • enable_gain_calibration 和/或 enable_offset_calibration 设置为 true。
  • 已配置相应的校准按钮和参考字段。
  • 您使用可靠的参考设备(Kill-A-Watt、万用表、已知负载)。

默认配置设计用于:

可以使用消耗已知电流的负载进行校准。为了更精确的校准,请使用 Kill-A-Watt 电表或能够测量 mains 电压的万用表。

使用您所在区域的预期 mains 电压,110V/230V,使用可靠的万用表,或插入 Kill-A-Watt 并选择电压 获取真实的参考电压。在 Home Assistant 中电表的设备页面中,将此值输入到参考电压字段中。

点击运行增益校准时,软件执行以下计算:

新 gain_voltage =(您的电压读数 / ESPHome 电压读数)* 现有 gain_voltage 值

新的电压增益值保存到 ESP 闪存并立即应用。您可以在 ESPHome 日志中查看结果。

将值复制到 YAML 配置中的 gain_voltage 以在重新刷写时保留(OTA 更新不会擦除闪存)。

以下是 Split Single Energy Meter 的常见电压校准值: 对于电表 ≤ v1.3:

  • 42080 - 9V AC 变压器 - Jameco 112336

  • 32428 - 12V AC 变压器 - Jameco 167151 对于电表 > v1.4:

  • 37106 - 9V AC 变压器 - Jameco 157041

  • 38302 - 9V AC 变压器 - Jameco 112336

  • 29462 - 12V AC 变压器 - Jameco 167151 对于电表 ≥ v1.4 rev.3:

  • 3920 - 9V AC 变压器 - Jameco 157041

以下是 Expandable 6 Channel Energy Meter 的常见电压校准值: 对于电表 ≤ v1.2:

  • 42080 - 9V AC 变压器 - Jameco 112336

  • 32428 - 12V AC 变压器 - Jameco 167151 对于电表 > v1.3:

  • 7305 - 9V AC 变压器 - Jameco 157041

在已知或已测量负载(如暖风机或吹风机)的带电导线周围连接电流变压器。 在 Home Assistant 中电表的设备页面中,将此值输入到相应的参考电流字段中。 任何留空的参考字段将不会被计算。

点击运行增益校准时,软件执行以下计算:

新 gain_ct =(您的电流读数 / ESPHome 电流读数)* 现有 gain_ct 值

新的电流增益值保存到 ESP 闪存并立即应用。您可以在 ESPHome 日志中查看结果。

将值复制到 YAML 配置中的 gain_ct 以在重新刷写时保留(OTA 更新不会擦除闪存)。

两个相同的 CT 电流传感器可能具有不同的 gain_ct 值,这是由于制造公差造成的,尽管差异很小。电流校准可以 进行一次并用于所有传感器,也可以对每个传感器重复进行。

以下是 Split Single Phase Energy Meter 在 gain_pga 设置为 4X 时的常见电流校准值:

  • 200A/100mA SCT-024: 12597

以下是 Split Single Phase Energy Meter 在 gain_pga 设置为 2X 时的常见电流校准值:

  • 20A/25mA SCT-006: 10170
  • 100A/50mA SCT-013-000: 25498
  • 120A/40mA SCT-016: 39473
  • Magnalab 100A: 46539

以下是 Expandable 6 Channel Energy Meter 在 gain_pga 设置为 1X 时的常见电流校准值:

  • 20A/25mA SCT-006: 11131
  • 30A/1V SCT-013-030: 8650
  • 50A/1V SCT-013-050: 15420
  • 80A/26.6mA SCT-010: 41996(注意这在 2^16/10^3 安培时会饱和)
  • 100A/50mA SCT-013-000: 27961
  • 120A/40mA: SCT-016: 41880
  • 200A/100mA SCT-024: 27518
  • 200A/50mA SCT-024: 55036

ATM90E32 芯片具有高精度的内置能力,可以按相计算消耗的能量。 每相的正向和反向有功能量以瓦时为单位进行计数。 正向有功能量用于计算消耗的能量,而反向有功能量用于计算输出的能量 (例如,在太阳能光伏安装中)。 计数器在每次从 ATM90E32 芯片读取给定的有功能量值时重置。

当前实现面向以固定间隔检索能量值并将它们存储在 时序数据库(如 InfluxDB)中的用户。

示例:

sensor:
#IC1 Main
- platform: atm90e32
cs_pin: GPIOXX
phase_a:
forward_active_energy:
name: ${disp_name} ct1 FAWattHours
id: ct1FAWattHours
state_topic: ${disp_name}/ct1/forward_active_energy
reverse_active_energy:
name: ${disp_name} ct1 RAWattHours
id: ct1RAWattHours
state_topic: ${disp_name}/ct1/reverse_active_energy

如果使用了 power、power_factor、reactive_power、forward_active_energy 或 reverse_active_energy 配置变量, 必须确保 ATM90E32 的电压来自与电流变压器安装的相同的相。这在分相或多相安装中很重要。在 240 分相布线的房屋中(在美国很常见),一个简单的测试方法是反转一条线上电流变压器的方向。如果功率因数 不改变符号,很可能提供给 ATM90E32 的电压来自另一相。

CircuitSetup 可扩展 6 通道板可以通过切断跳线 JP12/13 轻松处理这种情况, 以允许在 J3 焊盘上输入单独的 VA2。确保连接到 CT 1-3 的电流采样点与 VA 供电的相相同(圆孔插孔),连接到 CT3-6 的采样点与 VA2 供电的相相同。请参阅 CicuitSetup 仓库以获取更多详细信息。

如果使用多板堆叠,请记住切断所有板上的 JP12/13,并将 VA2 馈送到每个板。VA 通过 堆叠头馈送到所有板。另一个细节是每个电压变压器需要具有 相同的极性;接反就相当于接错了相。

请注意,电流测量值是 RMS 值,因此始终为正。确定方向的唯一方法是 查看功率因数。如果只有大量的电阻性负载且没有电源(PF 接近 1),最简单 的方法是创建一个模板传感器,从 Irms*Vrms 计算功率并忽略所有这些细节。另一方面, 您可能会对某些负载的无功程度感到惊讶,而 CirciuitSetup 设计能够很好地 处理这些情况。

交流系统中的谐波功率是指偏离理想正弦波形的偏差,由基本频率的倍数 引起。它由非线性负载导致,并可能导致电压失真、设备 过热和保护装置误操作等问题。ATM90E32 可以输出高级谐波功率测量 为总线上功率异常的监控提供重要的分析数据。

谐波功率示例:

sensor:
- platform: atm90e32
phase_a:
harmonic_power:
name: ${disp_name} CT1 Harmonic Power

交流系统中的相角表示正弦波形相对于参考点的角位移。 它是电压和电流之间时间差的度量。相角对于功率因数评估 和高效功率传输至关重要。此高级测量功能在 ATM90E32 上可用。

相角示例:

sensor:
- platform: atm90e32
phase_a:
phase_angle:
name: ${disp_name} L1 Phase Angle

交流系统中的峰值电流是指交流波形的最大值。它表示每个正弦波形周期中 达到的最高幅度。峰值电流对于组件尺寸选择和评估系统中电气设备 的容量很重要。此高级测量在 ATM90E32 上可用。 峰值电流可以使用布尔参数以有符号或无符号格式显示,涵盖所有相。 默认值为 false,即无符号。

峰值电流示例:

sensor:
- platform: atm90e32
phase_a:
peak_current:
name: ${disp_name} CT1 Peak Current
peak_current_signed: True
# Example configuration entry for split single phase meter
spi:
clk_pin: GPIOXX
miso_pin: GPIOXX
mosi_pin: GPIOXX
sensor:
- platform: atm90e32
cs_pin: GPIOXX
phase_a:
voltage:
name: "EMON Line Voltage A"
current:
name: "EMON CT1 Current"
power:
name: "EMON Active Power CT1"
reactive_power:
name: "EMON Reactive Power CT1"
power_factor:
name: "EMON Power Factor CT1"
gain_voltage: 3920
gain_ct: 39473
phase_c:
current:
name: "EMON CT2 Current"
power:
name: "EMON Active Power CT2"
reactive_power:
name: "EMON Reactive Power CT2"
power_factor:
name: "EMON Power Factor CT2"
gain_voltage: 3920
gain_ct: 39473
frequency:
name: "EMON Line Frequency"
chip_temperature:
name: "EMON Chip Temperature"
line_frequency: 50Hz
current_phases: 2
gain_pga: 2X
update_interval: 60s
# Example configuration CircuitSetup 6 Channel Energy Meter Main Board with power quality parameters
substitutions:
disp_name: energy-meter
friendly_name: "CircuitSetup Energy Meter"
update_time: 60s
current_cal_ct1: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
voltage_cal1: '7305'
voltage_cal2: '7305'
main_meter_name1: Meter 1-3
main_meter_name2: Meter 4-6
main_meter_id1: meter_main1
main_meter_id2: meter_main2
ct1_name: CT1
ct2_name: CT2
ct3_name: CT3
ct4_name: CT4
ct5_name: CT5
ct6_name: CT6
spi:
clk_pin: 18
miso_pin: 19
mosi_pin: 23
sensor:
#IC1
- platform: atm90e32
cs_pin: 5
id: ${main_meter_id1}
phase_a:
voltage:
name: Voltage 1
id: ic1Volts
accuracy_decimals: 1
current:
name: ${ct1_name} Amps
id: ct1Amps
# The max value for current that the meter can output is 65.535. If you expect to measure current over 65A,
# divide the gain_ct by 2 (120A CT) or 4 (200A CT) and multiply the current and power values by 2 or 4 by uncommenting the filter below
# filters:
# - multiply: 2
power:
name: ${ct1_name} Watts
id: ct1Watts
# filters:
# - multiply: 2
reactive_power:
name: ${ct1_name} VAR
apparent_power:
name: ${ct1_name} VA
harmonic_power:
name: ${ct1_name} Harmonic Power
power_factor:
name: ${ct1_name} PF
phase_angle:
name: ${ct1_name} Phase Angle
peak_current:
name: ${ct1_name} Peak Current
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct1}
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
current:
name: ${ct2_name} Amps
id: ct2Amps
power:
name: ${ct2_name} Watts
id: ct2Watts
reactive_power:
name: ${ct2_name} VAR
apparent_power:
name: ${ct2_name} VA
harmonic_power:
name: ${ct2_name} Harmonic Power
power_factor:
name: ${ct2_name} PF
phase_angle:
name: ${ct2_name} Phase Angle
peak_current:
name: ${ct2_name} Peak Current
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct2}
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
current:
name: ${ct3_name} Amps
id: ct3Amps
power:
name: ${ct3_name} Watts
id: ct3Watts
reactive_power:
name: ${ct3_name} VAR
apparent_power:
name: ${ct3_name} VA
harmonic_power:
name: ${ct3_name} Harmonic Power
power_factor:
name: ${ct3_name} PF
phase_angle:
name: ${ct3_name} Phase Angle
peak_current:
name: ${ct3_name} Peak Current
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct3}
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
frequency:
name: Frequency 1
chip_temperature:
name: ${main_meter_name1} Chip Temp
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: true
enable_gain_calibration: true
#IC2
- platform: atm90e32
cs_pin: 4
id: ${main_meter_id2}
phase_a:
#this voltage is only needed if monitoring 2 voltages
# voltage:
# name: Voltage 2
# id: ic2Volts
# accuracy_decimals: 1
current:
name: ${ct4_name} Amps
id: ct4Amps
power:
name: ${ct4_name} Watts
id: ct4Watts
reactive_power:
name: ${ct4_name} VAR
apparent_power:
name: ${ct4_name} VA
harmonic_power:
name: ${ct4_name} Harmonic Power
power_factor:
name: ${ct4_name} PF
phase_angle:
name: ${ct4_name} Phase Angle
peak_current:
name: ${ct4_name} Peak Current
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct4}
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
current:
name: ${ct5_name} Amps
id: ct5Amps
power:
name: ${ct5_name} Watts
id: ct5Watts
reactive_power:
name: ${ct5_name} VAR
apparent_power:
name: ${ct5_name} VA
harmonic_power:
name: ${ct5_name} Harmonic Power
power_factor:
name: ${ct5_name} PF
phase_angle:
name: ${ct5_name} Phase Angle
peak_current:
name: ${ct5_name} Peak Current
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct5}
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
current:
name: ${ct6_name} Amps
id: ct6Amps
power:
name: ${ct6_name} Watts
id: ct6Watts
reactive_power:
name: ${ct6_name} VAR
apparent_power:
name: ${ct6_name} VA
harmonic_power:
name: ${ct6_name} Harmonic Power
power_factor:
name: ${ct6_name} PF
phase_angle:
name: ${ct6_name} Phase Angle
peak_current:
name: ${ct6_name} Peak Current
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct6}
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
#this is only needed if monitoring 2 voltages
# frequency:
# name: Frequency 2
chip_temperature:
name: ${main_meter_name2} Chip Temp
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: true
enable_gain_calibration: true
#Total Amps
- platform: template
name: ${friendly_name} Total Amps
id: totalAmps
lambda: return id(ct1Amps).get_state() + id(ct2Amps).get_state() + id(ct3Amps).get_state() + id(ct4Amps).get_state() + id(ct5Amps).get_state() + id(ct6Amps).get_state() ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts
- platform: template
name: ${friendly_name} Total Watts
id: totalWatts
lambda: return id(ct1Watts).get_state() + id(ct2Watts).get_state() + id(ct3Watts).get_state() + id(ct4Watts).get_state() + id(ct5Watts).get_state() + id(ct6Watts).get_state() ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#kWh
- platform: total_daily_energy
name: ${friendly_name} Total kWh
power_id: totalWatts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
text_sensor:
- platform: atm90e32
id: ${main_meter_id1}
phase_status:
phase_a:
name: "${ct1_name} Status"
phase_b:
name: "${ct2_name} Status"
phase_c:
name: "${ct3_name} Status"
frequency_status:
name: "Frequency Status 1"
- platform: atm90e32
id: ${main_meter_id2}
phase_status:
phase_a:
name: "${ct4_name} Status"
phase_b:
name: "${ct5_name} Status"
phase_c:
name: "${ct6_name} Status"
#this is only needed if monitoring 2 voltages
# frequency_status:
# name: "Frequency Status 2"
button:
- platform: atm90e32
id: ${main_meter_id1}
run_gain_calibration:
name: "Run ${main_meter_name1} Gain Calibration"
clear_gain_calibration:
name: "Clear ${main_meter_name1} Gain Calibration"
run_offset_calibration:
name: "Run ${main_meter_name1} Offset Calibration"
clear_offset_calibration:
name: "Clear ${main_meter_name1} Offset Calibration"
run_power_offset_calibration:
name: "Run ${main_meter_name1} Power Offset Calibration"
clear_power_offset_calibration:
name: "Clear ${main_meter_name1} Power Offset Calibration"
- platform: atm90e32
id: ${main_meter_id2}
run_gain_calibration:
name: "Run ${main_meter_name2} Gain Calibration"
clear_gain_calibration:
name: "Clear ${main_meter_name2} Gain Calibration"
run_offset_calibration:
name: "Run ${main_meter_name2} Offset Calibration"
clear_offset_calibration:
name: "Clear ${main_meter_name2} Offset Calibration"
run_power_offset_calibration:
name: "Run ${main_meter_name2} Power Offset Calibration"
clear_power_offset_calibration:
name: "Clear ${main_meter_name2} Power Offset Calibration"
number:
- platform: atm90e32
id: ${main_meter_id1}
reference_voltage:
phase_a:
name: "Ref Voltage 1"
reference_current:
phase_a:
name: "${ct1_name} Ref Current"
phase_b:
name: "${ct2_name} Ref Current"
phase_c:
name: "${ct3_name} Ref Current"
- platform: atm90e32
id: ${main_meter_id2}
reference_voltage:
phase_a:
name: "Ref Voltage 2" #needed to calibrate voltage registers even if not output
reference_current:
phase_a:
name: "${ct4_name} Ref Current"
phase_b:
name: "${ct5_name} Ref Current"
phase_c:
name: "${ct6_name} Ref Current"
# Example configuration CircuitSetup 6 Channel Energy Meter Main Board + 1 add-on board
substitutions:
disp_name: energy-meter
friendly_name: CircuitSetup Energy Meter 12x
update_time: 10s
current_cal: '27518'
voltage_cal: '7305'
sensor:
#IC1 Main
- platform: atm90e32
cs_pin: 5
phase_a:
voltage:
name: ${disp_name} Volts A
id: ic1Volts
accuracy_decimals: 1
current:
name: ${disp_name} CT1 Amps
id: ct1Amps
power:
name: ${disp_name} CT1 Watts
id: ct1Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
current:
name: ${disp_name} CT2 Amps
id: ct2Amps
power:
name: ${disp_name} CT2 Watts
id: ct2Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
current:
name: ${disp_name} CT3 Amps
id: ct3Amps
power:
name: ${disp_name} CT3 Watts
id: ct3Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
frequency:
name: ${disp_name} Frequency
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 Main
- platform: atm90e32
cs_pin: 4
phase_a:
current:
name: ${disp_name} CT4 Amps
id: ct4Amps
power:
name: ${disp_name} CT4 Watts
id: ct4Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
current:
name: ${disp_name} CT5 Amps
id: ct5Amps
power:
name: ${disp_name} CT5 Watts
id: ct5Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
current:
name: ${disp_name} CT6 Amps
id: ct6Amps
power:
name: ${disp_name} CT6 Watts
id: ct6Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn
- platform: atm90e32
cs_pin: 0
phase_a:
current:
name: ${disp_name} CT7 Amps
id: ct7Amps
power:
name: ${disp_name} CT7 Watts
id: ct7Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
current:
name: ${disp_name} CT8 Amps
id: ct8Amps
power:
name: ${disp_name} CT8 Watts
id: ct8Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
current:
name: ${disp_name} CT9 Amps
id: ct9Amps
power:
name: ${disp_name} CT9 Watts
id: ct9Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn
- platform: atm90e32
cs_pin: 16
phase_a:
current:
name: ${disp_name} CT10 Amps
id: ct10Amps
power:
name: ${disp_name} CT10 Watts
id: ct10Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
current:
name: ${disp_name} CT11 Amps
id: ct11Amps
power:
name: ${disp_name} CT11 Watts
id: ct11Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
current:
name: ${disp_name} CT12 Amps
id: ct12Amps
power:
name: ${disp_name} CT12 Watts
id: ct12Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#Total Amps Main
- platform: template
name: ${disp_name} Total Amps Main
id: totalAmpsMain
lambda: return id(ct1Amps).get_state() + id(ct2Amps).get_state() + id(ct3Amps).get_state() + id(ct4Amps).get_state() + id(ct5Amps).get_state() + id(ct6Amps).get_state() ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Amps AddOn
- platform: template
name: ${disp_name} Total Amps Add-on
id: totalAmpsAddOn
lambda: return id(ct7Amps).get_state() + id(ct8Amps).get_state() + id(ct9Amps).get_state() + id(ct10Amps).get_state() + id(ct11Amps).get_state() + id(ct12Amps).get_state() ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Amps
- platform: template
name: ${disp_name} Total Amps
id: totalAmps
lambda: return id(totalAmpsMain).get_state() + id(totalAmpsAddOn).get_state() ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts Main
- platform: template
name: ${disp_name} Total Watts Main
id: totalWattsMain
lambda: return id(ct1Watts).get_state() + id(ct2Watts).get_state() + id(ct3Watts).get_state() + id(ct4Watts).get_state() + id(ct5Watts).get_state() + id(ct6Watts).get_state() ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn
- platform: template
name: ${disp_name} Total Watts Add-on
id: totalWattsAddOn
lambda: return id(ct7Watts).get_state() + id(ct8Watts).get_state() + id(ct9Watts).get_state() + id(ct10Watts).get_state() + id(ct11Watts).get_state() + id(ct12Watts).get_state() ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts
- platform: template
name: ${disp_name} Total Watts
id: totalWatts
lambda: return id(totalWattsMain).get_state() + id(totalWattsAddOn).get_state() ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#kWh
- platform: total_daily_energy
name: ${disp_name} Total kWh
power_id: totalWatts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing