Link

CircuitSetup Split Single Phase Energy Meter (ATM90E32) with ESP32

  1. GPIO Pinout
  2. Detailed Power Configuration

GPIO Pinout

Pin Function
GPIO5 Chip Select
GPIO18 CLK Pin
GPIO19 MISO Pin
GPIO23 MOSI Pin

Detailed Power Configuration

substitutions:
# Change the disp_name to something you want  
  disp_name: House
# Interval of how often the power is updated
  update_time: 10s
# Current transformer calibrations:
# 80A/26.6mA SCT-010: 39571
# 100A/50mA SCT-013: 26315
# 120A/40ma SCT-016: 39473 - default kit CT
# 200A/100mA SCT-024: 26315
  current_cal: '39473'
# AC Transformer voltage calibration 9VAC Jameco 157041: 37106
# For Meters >= v1.4 rev3: 3920
  voltage_cal: '3920'

esphome:
  name: energy_meter
  platform: ESP32
  board: nodemcu-32s

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_pass
  manual_ip:
    static_ip: !secret ip_eh_nrgnode_2chan32
    gateway: !secret ip_gateway
    subnet: !secret ip_subnet
    dns1: !secret ip_dns1

# Enable if you want to send this data to an MQTT broker
# mqtt:
#  broker: !secret mqtt_broker
#  username: !secret mqtt_user
#  password: !secret mqtt_pass

# Enable logging
logger:

# Enable Home Assistant API
api:
  
ota:

web_server:
  port: 80

spi:
  clk_pin: 18
  miso_pin: 19
  mosi_pin: 23

sensor:
  - platform: wifi_signal
    name: ${disp_name} WiFi Signal
    update_interval: 60s
  - platform: atm90e32
    cs_pin: 5
    phase_a:
      voltage:
        name: ${disp_name} Volts
        accuracy_decimals: 1
      current:
        name: ${disp_name} CT1 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: ${disp_name} CT1 Watts
        accuracy_decimals: 1
        id: "ct1Watts"
#        filters:
#          - multiply: 2
      reactive_power:
        name: ${disp_name} CT1 Reactive Power
        accuracy_decimals: 1
        id: "ct1Reactive"
#        filters:
#          - multiply: 2
      gain_voltage: ${voltage_cal}
      gain_ct: ${current_cal}
    phase_c:
      current:
        name: ${disp_name} CT2 Amps
        id: "ct2Amps"
# 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: ${disp_name} CT2 Watts
        accuracy_decimals: 1
        id: "ct2Watts"
#        filters:
#          - multiply: 2
      reactive_power:
        name: ${disp_name} CT2 Reactive Power
        accuracy_decimals: 1
        id: "ct2Reactive"
#        filters:
#          - multiply: 2
      gain_voltage: ${voltage_cal}
      gain_ct: ${current_cal}
    frequency:
      name: ${disp_name} Freq
    chip_temperature:
      name: ${disp_name} Chip Temp
    line_frequency: 60Hz
    gain_pga: 2X
    update_interval: ${update_time}
  - platform: template
    name: ${disp_name} Total Amps
    id: "totalAmps"
    lambda: return id(ct1Amps).state + id(ct2Amps).state;
    accuracy_decimals: 2
    unit_of_measurement: A
    update_interval: ${update_time}  
    icon: "mdi:current-ac"
  - platform: template
    name: ${disp_name} Total Watts
    id: "totalWatts"
    lambda: return id(ct1Watts).state + id(ct2Watts).state;
    accuracy_decimals: 0
    unit_of_measurement: W
    icon: "mdi:power"
    update_interval: ${update_time}
  - platform: template
    name: ${disp_name} Total Reactive Power
    id: "totalReactivePower"
    lambda: return id(ct1Reactive).state + id(ct2Reactive).state;
    accuracy_decimals: 0
    unit_of_measurement: VAR
    icon: "mdi:flash-circle"
    update_interval: ${update_time}

  - platform: total_daily_energy
    name: ${disp_name} Total kWh
    power_id: totalWatts
    filters:
      - multiply: 0.001
    unit_of_measurement: kWh

time:
  - platform: sntp
    id: sntp_time

switch:
  - platform: restart
    name: ${disp_name} Restart