Skip to content

Wildly different current readings from main board vs. add-on boards #217

@vingenuity

Description

@vingenuity

Hello! Thank you for making this awesome open-source tool for tracking power!

I purchased a main + 4 add-on board set, and I've been impressed with it so far. However, I recently added some new CTs that connect to the main board instead of the add-on boards, and I'm noticing that the calibration values I need to reach the same amperage reading on connectors 1-6 are wildly different from both each other and from the add-on boards, which seem to be quite consistent. The screenshot shows the same SCT-006 CTs connected to 7 (add-on) versus 1, 5, and 6. All of them show the same values on the add-on board.

Image

Is this normal, or have I misconfigured something? My configuration is below.

# CircuitSetup 6 Channel Energy Meter Main Board + 4 Add-on Boards config
# See all options at https://esphome.io/components/sensor/atm90e32.html

substitutions:
# Change the disp_name to something you want
  disp_name: circuitsetup-energy-meter
  friendly_name: CircuitSetup Energy Meter 30x
# Interval of how often the power data is updated
  update_time: 10s
# Frequency of your electrical grid - 60Hz in North America, 50Hz otherwise
  electric_freq: "60Hz"

## The below names and IDs can be changed to whatever you want. IDs should not have spaces
## Main board
  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
## Addon1
  addon1_name1: Addon1 7-9
  addon1_name2: Addon1 10-12
  addon1_id1: addon1_1
  addon1_id2: addon1_2
  ct7_name: CT7
  ct8_name: CT8
  ct9_name: CT9
  ct10_name: CT10
  ct11_name: CT11
  ct12_name: CT12
## Addon2
  addon2_name1: Addon2 13-15
  addon2_name2: Addon2 16-18
  addon2_id1: addon2_1
  addon2_id2: addon2_2
  ct13_name: CT13
  ct14_name: CT14
  ct15_name: CT15
  ct16_name: CT16
  ct17_name: CT17
  ct18_name: CT18
## Addon3
  addon3_name1: Addon3 19-21
  addon3_name2: Addon3 22-24
  addon3_id1: addon3_1
  addon3_id2: addon3_2
  ct19_name: CT19
  ct20_name: CT20
  ct21_name: CT21
  ct22_name: CT22
  ct23_name: CT23
  ct24_name: CT24
## Addon4
  addon4_name1: Addon4 25-27
  addon4_name2: Addon4 28-30
  addon4_id1: addon4_1
  addon4_id2: addon4_2
  ct25_name: CT25
  ct26_name: CT26
  ct27_name: CT27
  ct28_name: CT28
  ct29_name: CT29
  ct30_name: CT30

## Semi-Automatic Calibration ##
# See https://esphome.io/components/sensor/atm90e32.html#calibration
# WHEN CALIBRATION IS ENABLED, calculated values for offset and gain stored in memory take priority over config values
# To save calculated calibration values, copy them from the logs to your config
# then use the clear buttons to clear the calibration values from memory
# Values are stored in the variables for gain below and offsets in their corresponding files
# under /calibration/6chan_xxxx_offset_calibrations.yaml
  offset_calibration: "true"
  gain_calibration: "true"

## Gain Calibration Values ##
# Change current_cal_ctX value to the corresponding CT's that you're using
# For more precise calibration, see documentation for Semi-Auto calibration
# Current Transformers:
#  20A/25mA SCT-006: 11143
#  30A/1V SCT-013-030: 8650
#  50A/1V SCT-013-050: 15420
#  50A/16.6mA SCT-010: 41334
#  80A/26.6mA SCT-010: 41660
#  100A/50ma SCT-013-000: 27518
#  120A/40mA: SCT-016: 41787
#  200A/100mA SCT-024: 27518
#  200A/50mA SCT-024: 55036

## Main Board
  current_cal_ct1: '11143'
  current_cal_ct2: '11143'
  current_cal_ct3: '11143'
  current_cal_ct4: '11143'
  current_cal_ct5: '11143'
  current_cal_ct6: '11143'
## Addon1
  current_cal_ct7: '11143'
  current_cal_ct8: '11143'
  current_cal_ct9: '11143'
  current_cal_ct10: '11143'
  current_cal_ct11: '11143'
  current_cal_ct12: '11143'
## Addon2
  current_cal_ct13: '11143'
  current_cal_ct14: '11143'
  current_cal_ct15: '11143'
  current_cal_ct16: '41660'
  current_cal_ct17: '41660'
  current_cal_ct18: '11143'
## Addon3
  current_cal_ct19: '11143'
  current_cal_ct20: '11143'
  current_cal_ct21: '41660'
  current_cal_ct22: '11143'
  current_cal_ct23: '0'
  current_cal_ct24: '0'
## Addon4
  current_cal_ct25: '41660'
  current_cal_ct26: '0'
  current_cal_ct27: '0'
  current_cal_ct28: '0'
  current_cal_ct29: '60036'
  current_cal_ct30: '61036'
# This only needs to be changed if you're using something other than the  
# Jameco 9VAC Transformer: 
  voltage_cal1: '7305'
  voltage_cal2: '7305'

esphome:
  name: ${disp_name}
  friendly_name: "${friendly_name}"
  name_add_mac_suffix: false
  min_version: '2025.7.0'
  project:
    name: circuitsetup.6c-energy-meter-4-addons
    version: "1.7"

packages:
  remote_package:
    url: https://github.com/CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter
    ref: master
    refresh: 1d
    files:
      - Software/ESPHome/6chan_common.yaml
      - Software/ESPHome/meter_sensors/6chan_main_sensor.yaml
      - Software/ESPHome/meter_sensors/6chan_addon1.yaml
      - Software/ESPHome/meter_sensors/6chan_addon2.yaml
      - Software/ESPHome/meter_sensors/6chan_addon3.yaml
      - Software/ESPHome/meter_sensors/6chan_addon4.yaml

      ## Additional power quality sensors per CT/Phase
      ## Uncomment to enable
      ## Details: https://esphome.io/components/sensor/atm90e32.html#configuration-variables
      #- Software/ESPHome/power_quality/6chan_main_power_quality.yaml
      #- Software/ESPHome/power_quality/6chan_addon1_power_quality.yaml
      #- Software/ESPHome/power_quality/6chan_addon2_power_quality.yaml
      #- Software/ESPHome/power_quality/6chan_addon3_power_quality.yaml
      #- Software/ESPHome/power_quality/6chan_addon4_power_quality.yaml
      
      ## Enables text status fields for each CT/Phase
      ## Uncomment to enable
      ## Details: https://esphome.io/components/sensor/atm90e32.html#text-sensor
      - Software/ESPHome/status_fields/6chan_main_status.yaml
      #- Software/ESPHome/status_fields/6chan_addon1_status.yaml
      #- Software/ESPHome/status_fields/6chan_addon2_status.yaml
      #- Software/ESPHome/status_fields/6chan_addon3_status.yaml
      #- Software/ESPHome/status_fields/6chan_addon4_status.yaml
      
      ## Adds semi-automatic calibration buttons and reference fields 
      ## If enabled, make sure offset & gain calibration are set to "true" above
      ## Uncomment to enable
      ## Details: https://esphome.io/components/sensor/atm90e32.html#calibration
      - Software/ESPHome/calibration/6chan_main_calibration.yaml
      #- Software/ESPHome/calibration/6chan_addon1_calibration.yaml
      #- Software/ESPHome/calibration/6chan_addon2_calibration.yaml
      #- Software/ESPHome/calibration/6chan_addon3_calibration.yaml
      #- Software/ESPHome/calibration/6chan_addon4_calibration.yaml
      
      ## Additional offset calibration fields that should be copied per CT/Phase from the ESPHome logs
      ## These do not need to be set unless you are seeing non-zero values when CTs or Voltage 
      ## should not be registering anything.
      #- Software/ESPHome/calibration/6chan_main_offset_calibrations.yaml
      #- Software/ESPHome/calibration/6chan_addon1_offset_calibrations.yaml
      #- Software/ESPHome/calibration/6chan_addon2_offset_calibrations.yaml
      #- Software/ESPHome/calibration/6chan_addon3_offset_calibrations.yaml
      #- Software/ESPHome/calibration/6chan_addon4_offset_calibrations.yaml

dashboard_import:
  package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_4-addons.yaml@master
  import_full_config: true

# Enable Home Assistant API
# An encryption key is recommended and can be generated here:
# https://esphome.io/components/api.html#configuration-variables
api:
  encryption:
    key: "XXXX"

# Enable OTA updating
ota:
  - platform: esphome

# Set up a wifi access point
wifi:
  ssid: XXXX
  password: XXXX

  manual_ip:
    static_ip: XXXX
    gateway: XXXX
    subnet: XXXXX

# In combination with the `ap` this allows 
# provisioning wifi credentials to the device.
#captive_portal:

# Sets up Bluetooth LE to provision wifi credentials 
# to the device.
#esp32_improv:
#  authorizer: none

# Sets up the improv via serial client for wifi provisioning
#improv_serial:

web_server:
  port: 80

sensor:
- id: !extend ${main_meter_id1} # CTs 1-3 
  phase_a: # CT1
    gain_voltage: 7491
    gain_ct: 27518
## The max value for current that the meter can output is 65.535. If you expect to measure current over 65A,
## divide the current_cal_ctx (above) by 2 (120A CT) or 4 (200A CT) and multiply the current and power values 
## by 2 or 4, uncommenting the below and changing the id and phase_x accordingly
#- id: !extend ${main_meter_id1} # CTs 1-3 
#  phase_a: # CT1
#    current:
#      filters:
#        - multiply: 2
#    power:
#      filters:
#        - multiply: 2
#
## uncomment if monitoring 2 voltages
#- id: !extend ${main_meter_id2}
#  phase_a:
#    voltage:
#       name: Voltage 2
#       id: ic2Volts
#       accuracy_decimals: 1
#  frequency:
#    name: Frequency 2

## Comment out to show amps and watts per meter board in Home Assistant
- id: !extend totalAmpsMain
  internal: true
- id: !extend totalWattsMain
  internal: true
- id: !extend totalAmpsAddOn1
  internal: true
- id: !extend totalWattsAddOn1
  internal: true
- id: !extend totalAmpsAddOn2
  internal: true
- id: !extend totalWattsAddOn2
  internal: true
- id: !extend totalAmpsAddOn3
  internal: true
- id: !extend totalWattsAddOn3
  internal: true
- id: !extend totalAmpsAddOn4
  internal: true
- id: !extend totalWattsAddOn4
  internal: true

#Total Amps
###########
- platform: template
  name: ${friendly_name} Total Amps
  id: totalAmps
  lambda: return id(totalAmpsMain).state + id(totalAmpsAddOn1).state + id(totalAmpsAddOn2).state + id(totalAmpsAddOn3).state + id(totalAmpsAddOn4).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(totalWattsMain).state + id(totalWattsAddOn1).state + id(totalWattsAddOn2).state + id(totalWattsAddOn3).state + id(totalWattsAddOn4).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

Thanks again for the help!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions