CircuitSetup Energy Meter de5b30 Watt measurement incorrect

Hello,
I’m hoping someone has some insight on this item, I’ve been working over the last couple weeks (in my downtime) to calibrate and integrate the CircuitSetup Energy Meter de5b30 into my energy monitoring, but have been running into consistent issues where the watts stat is significantly lower than my Solar system and utility report for me.

Before running to my utility screaming they’re overcharging me i figured i would do some basic arithmetic and found that the watt statistic doesn’t align.

Just plugging my amp measurement into an online calculator (i don’t trust myself with basic multiplication) shows I’m measuring almost ~230w low on each clamp. This difference in reporting aligns with what my solar system reports which is about ~500w more than what the CTs report.

Any guidance or assistance is greatly appreciated.



.yaml config for reference.

# CircuitSetup 6 Channel Energy Meter Main Board config
# See all options at https://esphome.io/components/sensor/atm90e32.html

substitutions:
# Change the disp_name to something you want
  disp_name: esphome-web-de5b30
  friendly_name: "CircuitSetup Energy Meter"
# Interval of how often the power data is updated
  update_time: 1s
# 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_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

## 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 -- default for clamp 1-2
#  200A/100mA SCT-024: 27518
#  200A/50mA SCT-024: 55036
#  current_cal_ct1: '41787' #default
#  current_cal_ct2: '41787' #default
  current_cal_ct1: '45000' #calculated
  current_cal_ct2: '49965' #calculated
  current_cal_ct3: '41787'
  current_cal_ct4: '41787'
  current_cal_ct5: '41787'
  current_cal_ct6: '41787'
# 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: true
  min_version: '2025.5.0'
  project:
    name: circuitsetup.6c-energy-meter
    version: "1.6"

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

      ## 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
      
      ## Enables text status fields for each CT/Phase
      ## details: https://esphome.io/components/sensor/atm90e32.html#text-sensor
      - Software/ESPHome/status_fields/6chan_main_status.yaml
      
      ## Adds semi-automatic calibration buttons and reference fields 
      ## If enabled, make sure offset & gain calibration are set to "true" above
      ## details: https://esphome.io/components/sensor/atm90e32.html#calibration
      - Software/ESPHome/calibration/6chan_main_calibration.yaml
      
      ## Additional offset calibration fields that should be copied per CT/Phase from the ESPHome logs
      #- Software/ESPHome/calibration/6chan_main_offset_calibrations.yaml

dashboard_import:
  package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_main_board.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: "YOUR_ENCRYPTION_KEY_HERE"

# Enable OTA updating
ota:
  - platform: esphome

# Set up a wifi access point
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: !secret ip_eh_nrgnode
    gateway: 192.168.88.1
    subnet: 255.255.255.0
#    dns1: !secret ip_dns1

# 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:
## 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

#kWh
####
- platform: total_daily_energy
  name: ${friendly_name} Total kWh
  power_id: totalWattsMain
  filters:
    - multiply: 0.001
  unit_of_measurement: kWh
  device_class: energy
  state_class: total_increasing

Active VS reactive/apparent power/energy? :zap:

First try to find out why the solaredge graph is different from your “instant total” one. Maybe solaredge uses heavy filtering, straight line looks little bit unrealistic.
Also, calculating power with nominal voltage is very approximate, the real voltage on 120 system could be anywhere between 110 and 130V if the wiring is long or not properly done. And if the power factor is not 1.00, the error can be huge.

Some testing with single resistive load could help to find out what’s going on.

Solar-edge integration only reports every 15 minutes, i have the meter set to every second while troubleshooting (will probably cut that back once i have the kinks ironed out).

I think i found the issue, i had kept adjusting the current gain using the calibration instructions and formula below.

New gain_ct = (your current reading / ESPHome current reading) * existing gain_ct value

What i actually needed was a voltage calibration which I only realized (after attaching a multi-meter to the circuit) that the CTs were reporting 113 volts when the actual voltage was hovering between 120-121.

Once i completed that procedure i was getting much more accurate power readings within about 25 watts which makes the reporting and Automations id like to run a lot more reliable.