stop hating myself

This commit is contained in:
CeeWeasel
2025-12-09 16:59:38 -05:00
parent a49d981ad4
commit 578edbc7dc
100 changed files with 11098 additions and 966 deletions
+3
View File
@@ -21,6 +21,8 @@ backup_config.yaml
glances/
.tts.token*
*.tts.token
.secrets/
secrets/
customize.yaml
image/
open-zwave/
@@ -63,6 +65,7 @@ rtl_433.conf
*.conf.template*
go2rtc-1.0.0
go2rtc.yaml
mqtt_dump.txt
nest.conf
harmony_harmony_hub.conf
+88 -88
View File
@@ -1,102 +1,102 @@
alias: Dishwasher Done
id: dishwashwer_done
description: "Dishwasher just finished"
trigger:
- platform: state
entity_id: input_boolean.empty_dishwasher
from: "off"
to: "on"
# alias: Dishwasher Done
# id: dishwashwer_done
# description: "Dishwasher just finished"
# trigger:
# - platform: state
# entity_id: input_boolean.empty_dishwasher
# from: "off"
# to: "on"
- platform: homeassistant
event: start
# - platform: homeassistant
# event: start
condition:
- alias: "The home is occupied"
condition: state
entity_id: input_boolean.home_occupied
state: "on"
# condition:
# - alias: "The home is occupied"
# condition: state
# entity_id: input_boolean.home_occupied
# state: "on"
- alias: "Its not bedtime"
condition: state
entity_id: input_boolean.bedtime
state: "off"
# - alias: "Its not bedtime"
# condition: state
# entity_id: input_boolean.bedtime
# state: "off"
action:
- repeat:
while: "{{ is_state('input_boolean.empty_dishwasher','on') }}"
sequence:
- choose:
- conditions:
- condition: state
entity_id: input_boolean.allow_announcements
state: "on"
# action:
# - repeat:
# while: "{{ is_state('input_boolean.empty_dishwasher','on') }}"
# sequence:
# - choose:
# - conditions:
# - condition: state
# entity_id: input_boolean.allow_announcements
# state: "on"
- condition: not
conditions:
- condition: state
entity_id: sensor.pixel_7_audio_mode
state: in_communication
- condition: state
entity_id: sensor.pixel_7_audio_mode
state: in_call
- condition: state
entity_id: input_boolean.kids_bedtime
state: "on"
# - condition: state
# entity_id: input_boolean.announcement_pending
# state: 'on'
# - condition: not
# conditions:
# - condition: state
# entity_id: sensor.pixel_7_audio_mode
# state: in_communication
# - condition: state
# entity_id: sensor.pixel_7_audio_mode
# state: in_call
# - condition: state
# entity_id: input_boolean.kids_bedtime
# state: "on"
# # - condition: state
# # entity_id: input_boolean.announcement_pending
# # state: 'on'
sequence:
- action: input_boolean.turn_off
data: {}
target:
entity_id:
- input_boolean.announce_dishwasher_done
- action: input_boolean.turn_on
data: {}
target:
entity_id:
- input_boolean.announce_dishwasher_done
# - input_boolean.announcement_pending
# sequence:
# - action: input_boolean.turn_off
# data: {}
# target:
# entity_id:
# - input_boolean.announce_dishwasher_done
# - action: input_boolean.turn_on
# data: {}
# target:
# entity_id:
# - input_boolean.announce_dishwasher_done
# # - input_boolean.announcement_pending
- choose:
- conditions:
- "{{is_state('binary_sensor.dreambox_recently_active','on') }}"
# - choose:
# - conditions:
# - "{{is_state('binary_sensor.dreambox_recently_active','on') }}"
sequence:
- action: notify.dreambox
data:
message: The dishwasher is done
# sequence:
# - action: notify.dreambox
# data:
# message: The dishwasher is done
- choose:
- conditions:
- "{{is_state('binary_sensor.dreamsurface_recently_active','on') }}"
# - choose:
# - conditions:
# - "{{is_state('binary_sensor.dreamsurface_recently_active','on') }}"
sequence:
- action: notify.dreamsurface
data:
message: The dishwasher is done
# sequence:
# - action: notify.dreamsurface
# data:
# message: The dishwasher is done
- choose:
- conditions:
- condition: state
entity_id: input_boolean.clint_home
state: "off"
# - choose:
# - conditions:
# - condition: state
# entity_id: input_boolean.clint_home
# state: "off"
sequence:
- action: notify.mobile_app_pixel_7
data:
message: The dishwasher is done
data:
tag: "dishwasher-complete"
notification_icon: mdi:dishwasher-alert
channel: Appliance
# sequence:
# - action: notify.mobile_app_pixel_7
# data:
# message: The dishwasher is done
# data:
# tag: "dishwasher-complete"
# notification_icon: mdi:dishwasher-alert
# channel: Appliance
- delay:
minutes: 30
# - delay:
# minutes: 30
- action: input_boolean.turn_off
data: {}
target:
entity_id:
- input_boolean.announce_dishwasher_done
# - action: input_boolean.turn_off
# data: {}
# target:
# entity_id:
# - input_boolean.announce_dishwasher_done
-111
View File
@@ -1,111 +0,0 @@
alias: Tumble Dryer Done
id: tumble_dryer_done
description: "Dryer just finished"
trigger:
- platform: state
entity_id: input_boolean.fold_clothes
from: "off"
to: "on"
- platform: homeassistant
event: start
condition:
- alias: "The home is occupied"
condition: state
entity_id: input_boolean.home_occupied
state: "on"
- alias: "Its not bedtime"
condition: state
entity_id: input_boolean.bedtime
state: "off"
- condition: state
entity_id: input_boolean.allow_announcements
state: "on"
action:
- repeat:
while: "{{ is_state('input_boolean.fold_clothes','on') }}"
sequence:
- choose:
- conditions:
- condition: state
entity_id: input_boolean.clint_home
state: "on"
- condition: state
entity_id: binary_sensor.utility_room_occupied
state: "off"
- condition: not
conditions:
- condition: state
entity_id: sensor.pixel_7_audio_mode
state: in_communication
- condition: state
entity_id: sensor.pixel_7_audio_mode
state: in_call
- condition: state
entity_id: input_boolean.kids_bedtime
state: "on"
- condition: state
entity_id: input_boolean.bedtime
state: "on"
# - condition: state
# entity_id: input_boolean.announcement_pending
# state: 'on'
sequence:
- action: input_boolean.turn_off
data: {}
target:
entity_id:
- input_boolean.announce_dryer_done
- action: input_boolean.turn_on
data: {}
target:
entity_id:
- input_boolean.announce_dryer_done
# - input_boolean.announcement_pending
- choose:
- conditions:
- "{{ is_state('binary_sensor.dreambox_recently_active','on') }}"
sequence:
- action: notify.dreambox
data:
message: The dryer is done
- choose:
- conditions:
- "{{ is_state('binary_sensor.dreamsurface_recently_active','on') }}"
sequence:
- action: notify.dreamsurface
data:
message: The dryer is done
- choose:
- conditions:
- condition: state
entity_id: input_boolean.clint_home
state: "off"
sequence:
- action: notify.mobile_app_pixel_7
data:
message: The dryer is done
data:
tag: "dryer-complete"
notification_icon: mdi:tumble-dryer-alert
channel: Appliance
- delay:
minutes: 15
- action: input_boolean.turn_off
data: {}
target:
entity_id:
- input_boolean.announce_dryer_done
@@ -1,111 +0,0 @@
alias: Washing Machine Done
id: washing_machine_done
description: "Washing machine just finished"
trigger:
- platform: state
entity_id: input_boolean.swap_laundry
from: "off"
to: "on"
- platform: homeassistant
event: start
condition:
- alias: "The home is occupied"
condition: state
entity_id: input_boolean.home_occupied
state: "on"
- alias: "Its not bedtime"
condition: state
entity_id: input_boolean.bedtime
state: "off"
- condition: state
entity_id: input_boolean.allow_announcements
state: "on"
action:
- repeat:
while: "{{ is_state('input_boolean.swap_laundry','on') }}"
sequence:
- choose:
- conditions:
- condition: state
entity_id: input_boolean.clint_home
state: "on"
- condition: state
entity_id: binary_sensor.utility_room_occupied
state: "off"
- condition: not
conditions:
- condition: state
entity_id: sensor.pixel_7_audio_mode
state: in_communication
- condition: state
entity_id: sensor.pixel_7_audio_mode
state: in_call
- condition: state
entity_id: input_boolean.kids_bedtime
state: "on"
- condition: state
entity_id: input_boolean.bedtime
state: "on"
# - condition: state
# entity_id: input_boolean.announcement_pending
# state: 'on'
sequence:
- action: input_boolean.turn_off
data: {}
target:
entity_id:
- input_boolean.announce_washing_machine_done
- action: input_boolean.turn_on
data: {}
target:
entity_id:
- input_boolean.announce_washing_machine_done
# - input_boolean.announcement_pending
- choose:
- conditions:
- "{{is_state('binary_sensor.dreambox_recently_active','on') }}"
sequence:
- action: notify.dreambox
data:
message: The washing machine is done
- choose:
- conditions:
- "{{is_state('binary_sensor.dreamsurface_recently_active','on') }}"
sequence:
- action: notify.dreamsurface
data:
message: The washing machine is done
- choose:
- conditions:
- condition: state
entity_id: input_boolean.clint_home
state: "off"
sequence:
- action: notify.mobile_app_pixel_7
data:
message: The washing machine is done
data:
tag: "washing-machine-complete"
notification_icon: mdi:washing-machine-alert
channel: Appliance
- delay:
minutes: 15
- action: input_boolean.turn_off
data: {}
target:
entity_id:
- input_boolean.announce_washing_machine_done
+37 -37
View File
@@ -1,48 +1,48 @@
input_boolean:
announcement_pending:
name: Announcement Pending
icon: mdi:bullhorn
# input_boolean:
# announcement_pending:
# name: Announcement Pending
# icon: mdi:bullhorn
announce_washing_machine_done:
name: Announce Washing Machine Done
icon: mdi:washing-machine
# announce_washing_machine_done:
# name: Announce Washing Machine Done
# icon: mdi:washing-machine
announce_dryer_done:
name: Announce Dryer Done
icon: mdi:tumble-dryer
# announce_dryer_done:
# name: Announce Dryer Done
# icon: mdi:tumble-dryer
announce_dishwasher_done:
name: Announce Dishwasher Done
icon: mdi:dishwasher
# announce_dishwasher_done:
# name: Announce Dishwasher Done
# icon: mdi:dishwasher
announce_almost_bedtime:
name: Announce Almost Bedtime
icon: mdi:sleep
# announce_almost_bedtime:
# name: Announce Almost Bedtime
# icon: mdi:sleep
announce_goodnight_emmett:
name: Announce Goodnight Emmett
icon: mdi:sleep
# announce_goodnight_emmett:
# name: Announce Goodnight Emmett
# icon: mdi:sleep
announce_goodnight_bridget:
name: Announce Goodnight Bridget
icon: mdi:sleep
# announce_goodnight_bridget:
# name: Announce Goodnight Bridget
# icon: mdi:sleep
announce_goodnight_ebin:
name: Announce Goodnight Ebin
icon: mdi:sleep
# announce_goodnight_ebin:
# name: Announce Goodnight Ebin
# icon: mdi:sleep
announce_goodnight_emmett_bridget:
name: Announce Goodnight Emmett Bridget
icon: mdi:sleep
# announce_goodnight_emmett_bridget:
# name: Announce Goodnight Emmett Bridget
# icon: mdi:sleep
announce_goodnight_emmett_ebin:
name: Announce Goodnight Emmett Ebin
icon: mdi:sleep
# announce_goodnight_emmett_ebin:
# name: Announce Goodnight Emmett Ebin
# icon: mdi:sleep
announce_goodnight_bridget_ebin:
name: Announce Goodnight Bridget Ebin
icon: mdi:sleep
# announce_goodnight_bridget_ebin:
# name: Announce Goodnight Bridget Ebin
# icon: mdi:sleep
announce_goodnight_emmett_bridget_ebin:
name: Announce Goodnight Emmett Bridget Ebin
icon: mdi:sleep
# announce_goodnight_emmett_bridget_ebin:
# name: Announce Goodnight Emmett Bridget Ebin
# icon: mdi:sleep
+148 -148
View File
@@ -1,170 +1,170 @@
template:
- binary_sensor:
- name: Dishwasher
unique_id: templatebinarysensor.dishwasher
icon: mdi:dishwasher
delay_on: "{{states('input_number.dishwasher_delay_on') | float(default=0) }}"
delay_off: "{{states('input_number.dishwasher_delay_off') | float(default=0) }}"
availability: "{{ states('sensor.pm_dishwasher_w') not in ['unknown', 'unavailable'] }}"
attributes:
model_number: "MDB6769PAS1"
serial_number: "F24407234"
power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}"
target: "{{ states('input_number.dishwasher_on') | float(default=0)}}"
state: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}"
# template:
# - binary_sensor:
# - name: Dishwasher
# unique_id: templatebinarysensor.dishwasher
# icon: mdi:dishwasher
# delay_on: "{{states('input_number.dishwasher_delay_on') | float(default=0) }}"
# delay_off: "{{states('input_number.dishwasher_delay_off') | float(default=0) }}"
# availability: "{{ states('sensor.pm_dishwasher_w') not in ['unknown', 'unavailable'] }}"
# attributes:
# model_number: "MDB6769PAS1"
# serial_number: "F24407234"
# power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}"
# target: "{{ states('input_number.dishwasher_on') | float(default=0)}}"
# state: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}"
- sensor:
- name: Dishwasher
unique_id: templatesensor_dishwasher
state: >
{% if is_state('binary_sensor.dishwasher','on')%}
running
{% elif is_state('binary_sensor.dishwasher','off') and is_state('input_boolean.empty_dishwasher','on') %}
pending
{% else %}
idle
{% endif %}
icon: >
{% if is_state('sensor.dishwasher','idle') %}
mdi:dishwasher-off
{% elif is_state('sensor.dishwasher','pending') %}
mdi:dishwasher-alert
{% else %}
mdi:dishwasher
{% endif %}
attributes:
model_number: "MDB6769PAS1"
serial_number: "F24407234"
power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}"
target: "{{ states('input_number.dishwasher_on') | float(default=0)}}"
# - sensor:
# - name: Dishwasher
# unique_id: templatesensor_dishwasher
# state: >
# {% if is_state('binary_sensor.dishwasher','on')%}
# running
# {% elif is_state('binary_sensor.dishwasher','off') and is_state('input_boolean.empty_dishwasher','on') %}
# pending
# {% else %}
# idle
# {% endif %}
# icon: >
# {% if is_state('sensor.dishwasher','idle') %}
# mdi:dishwasher-off
# {% elif is_state('sensor.dishwasher','pending') %}
# mdi:dishwasher-alert
# {% else %}
# mdi:dishwasher
# {% endif %}
# attributes:
# model_number: "MDB6769PAS1"
# serial_number: "F24407234"
# power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}"
# target: "{{ states('input_number.dishwasher_on') | float(default=0)}}"
input_boolean:
empty_dishwasher:
name: Empty Dishwasher
icon: mdi:cupboard
# input_boolean:
# empty_dishwasher:
# name: Empty Dishwasher
# icon: mdi:cupboard
input_number:
dishwasher_on:
# was 4
name: "Dishwasher On"
icon: mdi:dishwasher
min: 0
max: 1000
step: 0.1
mode: box
unit_of_measurement: W
# input_number:
# dishwasher_on:
# # was 4
# name: "Dishwasher On"
# icon: mdi:dishwasher
# min: 0
# max: 1000
# step: 0.1
# mode: box
# unit_of_measurement: W
dishwasher_off:
name: "Dishwasher Off"
icon: mdi:dishwasher-off
min: 0
max: 1000
step: 0.1
mode: box
unit_of_measurement: W
# dishwasher_off:
# name: "Dishwasher Off"
# icon: mdi:dishwasher-off
# min: 0
# max: 1000
# step: 0.1
# mode: box
# unit_of_measurement: W
dishwasher_delay_on:
name: "Dishwasher Delay On"
icon: mdi:clock
min: 0
max: 900
step: 10
mode: box
# dishwasher_delay_on:
# name: "Dishwasher Delay On"
# icon: mdi:clock
# min: 0
# max: 900
# step: 10
# mode: box
dishwasher_delay_off:
# was 600
name: "Dishwasher Delay Off"
icon: mdi:clock-alert
min: 0
max: 900
step: 10
mode: box
# dishwasher_delay_off:
# # was 600
# name: "Dishwasher Delay Off"
# icon: mdi:clock-alert
# min: 0
# max: 900
# step: 10
# mode: box
automation:
- id: automation_empty_dishwasher_state
alias: Empty Dishwasher
trigger:
- id: dishwasher_off
platform: state
entity_id: binary_sensor.dishwasher
from: "on"
to: "off"
# automation:
# - id: automation_empty_dishwasher_state
# alias: Empty Dishwasher
# trigger:
# - id: dishwasher_off
# platform: state
# entity_id: binary_sensor.dishwasher
# from: "on"
# to: "off"
- id: dishwasher_on
platform: state
entity_id: binary_sensor.dishwasher
from: "off"
to: "on"
# - id: dishwasher_on
# platform: state
# entity_id: binary_sensor.dishwasher
# from: "off"
# to: "on"
- id: door_open
platform: state
entity_id: binary_sensor.dishwasher_door_contact
from: "off"
to: "on"
for:
seconds: 5
# - id: door_open
# platform: state
# entity_id: binary_sensor.dishwasher_door_contact
# from: "off"
# to: "on"
# for:
# seconds: 5
condition: []
action:
- choose:
- alias: "Dishwasher is running. No need to empty it yet"
conditions:
- condition: trigger
id: dishwasher_on
# condition: []
# action:
# - choose:
# - alias: "Dishwasher is running. No need to empty it yet"
# conditions:
# - condition: trigger
# id: dishwasher_on
- condition: state
entity_id: input_boolean.empty_dishwasher
state: "on"
# - condition: state
# entity_id: input_boolean.empty_dishwasher
# state: "on"
sequence:
- action: logbook.log
data_template:
name: Empty Dishwasher - Load Started
entity_id: automation.empty_dishwasher
message: Dishwasher just turned on. Turning off input_boolean in case it got left on
# sequence:
# - action: logbook.log
# data_template:
# name: Empty Dishwasher - Load Started
# entity_id: automation.empty_dishwasher
# message: Dishwasher just turned on. Turning off input_boolean in case it got left on
- action: homeassistant.turn_off
target:
entity_id: input_boolean.empty_dishwasher
# - action: homeassistant.turn_off
# target:
# entity_id: input_boolean.empty_dishwasher
- alias: "Dishwasher finished while door was shut"
conditions:
- condition: trigger
id: dishwasher_off
# - alias: "Dishwasher finished while door was shut"
# conditions:
# - condition: trigger
# id: dishwasher_off
- condition: state
entity_id: binary_sensor.dishwasher_door_contact
state: "off"
# - condition: state
# entity_id: binary_sensor.dishwasher_door_contact
# state: "off"
sequence:
- action: logbook.log
data_template:
name: Empty Dishwasher - Load finished
entity_id: automation.empty_dishwasher
message: Dishwasher just turned off while the door was shut. Assuming dishes need to be put away
# sequence:
# - action: logbook.log
# data_template:
# name: Empty Dishwasher - Load finished
# entity_id: automation.empty_dishwasher
# message: Dishwasher just turned off while the door was shut. Assuming dishes need to be put away
- action: homeassistant.turn_on
target:
entity_id: input_boolean.empty_dishwasher
# - action: homeassistant.turn_on
# target:
# entity_id: input_boolean.empty_dishwasher
- alias: "Door was opened for 30 seconds while dishwasher was off"
conditions:
- condition: trigger
id: door_open
# - alias: "Door was opened for 30 seconds while dishwasher was off"
# conditions:
# - condition: trigger
# id: door_open
- condition: state
entity_id: binary_sensor.dishwasher
state: "off"
# - condition: state
# entity_id: binary_sensor.dishwasher
# state: "off"
sequence:
- action: logbook.log
data_template:
name: Empty Dishwasher - Dishes put away
entity_id: automation.empty_dishwasher
message: Dishwasher door was opened while the dishwasher was off. Assuming dishes don't need to be put away.
# sequence:
# - action: logbook.log
# data_template:
# name: Empty Dishwasher - Dishes put away
# entity_id: automation.empty_dishwasher
# message: Dishwasher door was opened while the dishwasher was off. Assuming dishes don't need to be put away.
- action: homeassistant.turn_off
target:
entity_id: input_boolean.empty_dishwasher
# - action: homeassistant.turn_off
# target:
# entity_id: input_boolean.empty_dishwasher
mode: single
# mode: single
@@ -0,0 +1,259 @@
# mqtt:
# - sensor:
# # This is the root sensor that tracks the state of the dishwasher
# - unique_id: mqtt_dishwasher_status # supposedly has to be set to associate with device
# default_entity_id: status # IDK if this will work with unique_id set but we need unique_id set to associate with a device
# # # This sensor will always be available, since is it just a combination of other sensors
# # availability:
# # topic: "cleverdevices/dishwasher"
# device:
# name: "Dishwasher"
# model: "MDB6769PAS1"
# serial_number: "F24407234"
# suggested_area: "Kitchen"
# identifiers:
# - "MDB6769PAS1 - F24407234"
# device_class: enum
# entity_category: diagnostic
# icon: >
# {% if is_state('sensor.dishwasher','idle') %}
# mdi:dishwasher-off
# {% elif is_state('sensor.dishwasher','pending') %}
# mdi:dishwasher-alert
# {% else %}
# mdi:dishwasher
# {% endif %}
# options:
# - "Idle" # Dishwasher is not doing anything
# - "Running" # Dishwasher is running
# - "Pending" # Dishwasher ran, stopped running, and the door hasn't been opened. Basically, the dishes need to be unloaded
# - "Problem" # The dishwasher has been running for too long, indicating a possible issue
# availability_topic: "cleverdevices/dishwasher/availability"
# payload_available: online
# payload_not_available: offline
# state_topic: "cleverdevices/dishwasher"
# state: >-
# {% set mapper = {
# 'idle': 'Idle',
# 'running': 'Running',
# 'Pending': 'Pending',
# 'Problem': 'Problem',
# } %}
# {% set state = states('binary_sensor.work_day') %}
# {{ mapper[state] if state in mapper else 'Unknown' }}
# # attributes:
# # model_number: "MDB6769PAS1"
# # serial_number: "F24407234"
# # power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}"
# # target: "{{ states('input_number.dishwasher_on') | float(default=0)}}"
# - binary_sensor:
# - unique_id: mqtt_dishwasher
# default_entity_id: dishwasher
# name: Dishwasher
# device_class: running
# - unique_id: mqtt_dishwasher_door
# default_entity_id: door
# name: Door
# device_class: opening
# - number:
# - unique_id: mqtt_dishwasher_running_watts
# name: "Dishwasher On"
# device:
# name: "Dishwasher"
# model: "MDB6769PAS1"
# serial_number: "F24407234"
# suggested_area: "Kitchen"
# identifiers:
# - "MDB6769PAS1 - F24407234"
# icon: mdi:dishwasher
# min: 0
# max: 1000
# step: 0.1
# mode: box
# unit_of_measurement: W
# - unique_id: mqtt_dishwasher_idle_watts
# name: "Dishwasher Off"
# icon: mdi:dishwasher-off
# min: 0
# max: 1000
# step: 0.1
# mode: box
# unit_of_measurement: W
# - unique_id: mqtt_dishwasher_delay_on
# name: "Dishwasher Delay On"
# icon: mdi:clock-start
# min: 0
# max: 900
# step: 10
# mode: box
# - unique_id: mqtt_dishwasher_delay_off
# # was 600
# name: "Dishwasher Delay Off"
# icon: mdi:clock-end
# min: 0
# max: 900
# step: 10
# mode: box
# - unique_id: mqtt_dishwasher_delay_problem
# # was 600
# name: "Dishwasher Delay Off"
# icon: mdi:clock-alert
# min: 0
# max: 900
# step: 10
# mode: box
# template:
# - binary_sensor:
# - name: Dishwasher
# unique_id: templatebinarysensor.dishwasher
# icon: mdi:dishwasher
# delay_on: "{{states('input_number.dishwasher_delay_on') | float(default=0) }}"
# delay_off: "{{states('input_number.dishwasher_delay_off') | float(default=0) }}"
# availability: "{{ states('sensor.pm_dishwasher_w') not in ['unknown', 'unavailable'] }}"
# attributes:
# model_number: "MDB6769PAS1"
# serial_number: "F24407234"
# power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}"
# target: "{{ states('input_number.dishwasher_on') | float(default=0)}}"
# state: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}"
# input_boolean:
# empty_dishwasher:
# name: Empty Dishwasher
# icon: mdi:cupboard
# input_number:
# dishwasher_on:
# # was 4
# name: "Dishwasher On"
# icon: mdi:dishwasher
# min: 0
# max: 1000
# step: 0.1
# mode: box
# unit_of_measurement: W
# dishwasher_off:
# name: "Dishwasher Off"
# icon: mdi:dishwasher-off
# min: 0
# max: 1000
# step: 0.1
# mode: box
# unit_of_measurement: W
# dishwasher_delay_on:
# name: "Dishwasher Delay On"
# icon: mdi:clock
# min: 0
# max: 900
# step: 10
# mode: box
# dishwasher_delay_off:
# # was 600
# name: "Dishwasher Delay Off"
# icon: mdi:clock-alert
# min: 0
# max: 900
# step: 10
# mode: box
# # automation:
# # - id: automation_empty_dishwasher_state
# # alias: Empty Dishwasher
# # trigger:
# # - id: dishwasher_off
# # platform: state
# # entity_id: binary_sensor.dishwasher
# # from: "on"
# # to: "off"
# # - id: dishwasher_on
# # platform: state
# # entity_id: binary_sensor.dishwasher
# # from: "off"
# # to: "on"
# # - id: door_open
# # platform: state
# # entity_id: binary_sensor.dishwasher_door_contact
# # from: "off"
# # to: "on"
# # for:
# # seconds: 5
# # condition: []
# # action:
# # - choose:
# # - alias: "Dishwasher is running. No need to empty it yet"
# # conditions:
# # - condition: trigger
# # id: dishwasher_on
# # - condition: state
# # entity_id: input_boolean.empty_dishwasher
# # state: "on"
# # sequence:
# # - action: logbook.log
# # data_template:
# # name: Empty Dishwasher - Load Started
# # entity_id: automation.empty_dishwasher
# # message: Dishwasher just turned on. Turning off input_boolean in case it got left on
# # - action: homeassistant.turn_off
# # target:
# # entity_id: input_boolean.empty_dishwasher
# # - alias: "Dishwasher finished while door was shut"
# # conditions:
# # - condition: trigger
# # id: dishwasher_off
# # - condition: state
# # entity_id: binary_sensor.dishwasher_door_contact
# # state: "off"
# # sequence:
# # - action: logbook.log
# # data_template:
# # name: Empty Dishwasher - Load finished
# # entity_id: automation.empty_dishwasher
# # message: Dishwasher just turned off while the door was shut. Assuming dishes need to be put away
# # - action: homeassistant.turn_on
# # target:
# # entity_id: input_boolean.empty_dishwasher
# # - alias: "Door was opened for 30 seconds while dishwasher was off"
# # conditions:
# # - condition: trigger
# # id: door_open
# # - condition: state
# # entity_id: binary_sensor.dishwasher
# # state: "off"
# # sequence:
# # - action: logbook.log
# # data_template:
# # name: Empty Dishwasher - Dishes put away
# # entity_id: automation.empty_dishwasher
# # message: Dishwasher door was opened while the dishwasher was off. Assuming dishes don't need to be put away.
# # - action: homeassistant.turn_off
# # target:
# # entity_id: input_boolean.empty_dishwasher
# # mode: single
-60
View File
@@ -84,66 +84,6 @@ google_assistant:
- Out Front Cam
room: Front Yard
input_boolean.announcement_pending:
name: Announcement Pending
expose: true
room: Furnace Room
input_boolean.announce_washing_machine_done:
name: Announce Washing Machine Done
expose: true
room: Utility Room
input_boolean.announce_dryer_done:
name: Announce Dryer Done
expose: true
room: Utility Room
input_boolean.announce_dishwasher_done:
name: Announce Dishwasher Done
expose: true
room: Kitchen
input_boolean.announce_almost_bedtime:
name: Announce Almost Bedtime
expose: true
room: Girls Room
input_boolean.announce_goodnight_emmett:
name: Announce Goodnight Emmett
expose: true
room: Boys Room
input_boolean.announce_goodnight_bridget:
name: Announce Goodnight Bridget
expose: true
room: Girls Room
input_boolean.announce_goodnight_ebin:
name: Announce Goodnight Ebin
expose: true
room: Girls Room
input_boolean.announce_goodnight_emmett_bridget:
name: Announce Goodnight Emmett Bridget
expose: true
room: Girls Room
input_boolean.announce_goodnight_emmett_ebin:
name: Announce Goodnight Emmett Ebin
expose: true
room: Boys Room
input_boolean.announce_goodnight_bridget_ebin:
name: Announce Goodnight Bridget Ebin
expose: true
room: Girls Room
input_boolean.announce_goodnight_emmett_bridget_ebin:
name: Announce Goodnight Emmett Bridget Ebin
expose: true
room: Girls Room
input_boolean.kids_bedtime:
name: Kids Bedtime
expose: true
+282
View File
@@ -0,0 +1,282 @@
# CT01 - A - Grid Phase A
# CT02 - G - Dryer
# CT03 - D - Furnace
# CT04 - B - Grid Phase B
# CT05 - E - Basement Plugs (Computer is on this circuit)
# CT06 - F - Nursery, Kitchen, and Dining Room Lights
# CT07 - C - Sump Pump Plug
# CT08 - H - Microwave Plug
# CT09 - I - Stove/Oven
# CT10 - J - Front Room Plugs
# CT11 - M - Heat Pump
# CT12 - L - Kitchen Circuit 1 (Fridge is on this circuit)
substitutions:
devicename: power-monitor
disp_name: power-monitor
friendly_name: 'PM:'
entity_name: power_monitor
comment: Clever Power Monitor
static_ip: !secret power-monitor-ip
platform: ESP32
board: nodemcu-32s
update_time: 500ms
kwh_report_interval: 60s
watt_heartbeat: 60s
throttle_time: 60s
watt_delta: "50.0"
#watt_delta: "5.0"
#grid_watt_delta: "10.0"
grid_watt_delta: "200.0"
#fast_update_time: 10s
#medium_update_time: 30s
#slow_update_time: 60s
main_meter_name1: Meter 1-3
main_meter_name2: Meter 4-6
main_meter_id1: meter_main1
main_meter_id2: meter_main2
## Addon1
addon1_name1: Addon1 7-9
addon1_name2: Addon1 10-12
addon1_id1: addon1_1
addon1_id2: addon1_2
## Addon2
addon2_name1: Addon2 13-15
addon2_name2: Addon2 16-18
addon2_id1: addon2_1
addon2_id2: addon2_2
## Addon3
addon3_name1: Addon3 19-21
addon3_name2: Addon3 22-24
addon3_id1: addon3_1
addon3_id2: addon3_2
ct1_name: 'Grid Phase A'
ct4_name: 'Grid Phase B'
ct22_name: 'Well' # 1, 3 # sct010 - O
ct12_name: 'Kitchen 1' # 5 # sct006 - L
ct16_name: 'Kitchen 2' # 7 # sct006 - S
ct18_name: 'Laundry Plug' # 9 # sct006 - N
ct8_name: 'Microwave Plug' # 11 # sct006 - H
ct17_name: 'Bathroom Plug' # 13 # sct006 - R
ct11_name: 'Heat Pump' # 15, 17 - M
ct24_name: 'Basement Bedroom and Furnace Room Lights' # 19 # sct006 - K
ct5_name: 'Basement Plugs' # 21a # sct006 - E
ct23_name: 'Basement and Laundry Lights and Plugs' # 21b # sct006 - W
ct7_name: 'Sump Pump Plug' # 23 # sct006 - C
ct6_name: 'Nursery, Dining, Kitchen Lights' # 2 # sct006 - F
ct20_name: 'Master Suite' # 4 # sct006 - T
ct3_name: 'Furnace' # 6 # sct006 - D
ct15_name: 'Basement Stairs and Lights' # 8 # sct006 - P
ct21_name: 'Dishwasher' # 10 # sct006 - V
ct13_name: 'Garage Outside and Front Garage Lights' # 12 # sct006 - U
ct10_name: 'Front Room Plugs' # 14 # sct006 - J
ct14_name: 'Garage and Outside Plugs' # 16 # sct006 - Q
ct9_name: 'Stove' # 18, 20 # sct016 - I
ct2_name: 'Dryer' # 22, 24 # sct010 - G
ct19_name: 'Unused'
# Current Transformers:
# 20A/25mA SCT-006: 11143
sct006: '11143'
# 30A/1V SCT-013-030: 8650
# 50A/1V SCT-013-050: 15420
# 80A/26.6mA SCT-010: 41660
sct010: '41660'
# 100A/50ma SCT-013-000: 27518
sct013: '27518'
# 120A/40mA: SCT-016: 41787
sct016: '41787'
# 200A/100mA SCT-024: 27518
#current_cal: '27518'
# Jameco 9VAC Transformer:
# For meter versions:
# >= v1.3: 7305
#voltage_cal: '7305'
## Main Board
current_cal_ct1: '41787'
current_cal_ct2: '41660'
current_cal_ct3: '11143'
current_cal_ct4: '41787'
current_cal_ct5: '11143'
current_cal_ct6: '11143'
## Addon1
current_cal_ct7: '11143'
current_cal_ct8: '11143'
current_cal_ct9: '27518'
current_cal_ct10: '11143'
current_cal_ct11: '41660'
current_cal_ct12: '11143'
## Addon2
current_cal_ct13: '11143'
current_cal_ct14: '11143'
current_cal_ct15: '11143'
current_cal_ct16: '11143'
current_cal_ct17: '11143'
current_cal_ct18: '11143'
## Addon3
current_cal_ct19: '11143'
current_cal_ct20: '11143'
current_cal_ct21: '11143'
current_cal_ct22: '41660'
current_cal_ct23: '11143'
current_cal_ct24: '11143'
# This only needs to be changed if you're using something other than the
# Jameco 9VAC Transformer:
voltage_cal1: '7305'
voltage_cal2: '7305'
electric_freq: "60Hz"
offset_calibration: "true"
gain_calibration: "true"
# spi_clk: 18
# spi_miso: 19
# spi_mosi: 23
# ic1_main: 5
# ic1_addon1: 0
# ic1_addon2: 27
# ic1_addon3: 2
# ic2_main: 4
# ic2_addon1: 16
# ic2_addon2: 17
# ic2_addon3: 21
# ethernet:
# id: eth
# type: W5500
# clk_pin: GPIO13
# mosi_pin: GPIO11
# miso_pin: GPIO12
# cs_pin: GPIO14
# interrupt_pin: GPIO10
# reset_pin: GPIO9
esphome:
name: ${disp_name}
friendly_name: "${friendly_name}"
name_add_mac_suffix: true
min_version: '2025.7.0'
project:
name: circuitsetup.6c-energy-meter-3-addons
version: "1.7"
packages:
wifi: !include common/wifi.yaml
# device_base: !include common/complex_esp32_base.yaml
common: !include circuit-setup/6chan_common.yaml
main: !include circuit-setup/meter_sensors/6chan_main_sensor.yaml
main_status: !include circuit-setup/status_fields/6chan_main_status.yaml
main_cal: !include circuit-setup/calibration/6chan_main_calibration.yaml
addon_1: !include circuit-setup/meter_sensors/6chan_addon1.yaml
addon_2: !include circuit-setup/meter_sensors/6chan_addon2.yaml
addon_3: !include circuit-setup/meter_sensors/6chan_addon3.yaml
# 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
# 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
## 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
#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 ;
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 ;
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
+847
View File
@@ -0,0 +1,847 @@
# CT01 - A - Grid Phase A
# CT02 - G - Dryer
# CT03 - D - Furnace
# CT04 - B - Grid Phase B
# CT05 - E - Basement Plugs (Computer is on this circuit)
# CT06 - F - Nursery, Kitchen, and Dining Room Lights
# CT07 - C - Sump Pump Plug
# CT08 - H - Microwave Plug
# CT09 - I - Stove/Oven
# CT10 - J - Front Room Plugs
# CT11 - M - Heat Pump
# CT12 - L - Kitchen Circuit 1 (Fridge is on this circuit)
substitutions:
devicename: power-monitor
friendly_name: 'PM:'
entity_name: power_monitor
comment: Clever Power Monitor
static_ip: !secret power-monitor-ip
platform: ESP32
board: nodemcu-32s
update_time: 500ms
kwh_report_interval: 60s
watt_heartbeat: 60s
throttle_time: 60s
watt_delta: "50.0"
#watt_delta: "5.0"
#grid_watt_delta: "10.0"
grid_watt_delta: "200.0"
#fast_update_time: 10s
#medium_update_time: 30s
#slow_update_time: 60s
ct01Name: 'Grid Phase A'
ct04Name: 'Grid Phase B'
ct22Name: 'Well' # 1, 3 # sct010 - O
ct12Name: 'Kitchen 1' # 5 # sct006 - L
ct16Name: 'Kitchen 2' # 7 # sct006 - S
ct18Name: 'Laundry Plug' # 9 # sct006 - N
ct08Name: 'Microwave Plug' # 11 # sct006 - H
ct17Name: 'Bathroom Plug' # 13 # sct006 - R
ct11Name: 'Heat Pump' # 15, 17 - M
ct24Name: 'Basement Bedroom and Furnace Room Lights' # 19 # sct006 - K
ct05Name: 'Basement Plugs' # 21a # sct006 - E
ct23Name: 'Basement and Laundry Lights and Plugs' # 21b # sct006 - W
ct07Name: 'Sump Pump Plug' # 23 # sct006 - C
ct06Name: 'Nursery, Dining, Kitchen Lights' # 2 # sct006 - F
ct20Name: 'Master Suite' # 4 # sct006 - T
ct03Name: 'Furnace' # 6 # sct006 - D
ct15Name: 'Basement Stairs and Lights' # 8 # sct006 - P
ct21Name: 'Dishwasher' # 10 # sct006 - V
ct13Name: 'Garage Outside and Front Garage Lights' # 12 # sct006 - U
ct10Name: 'Front Room Plugs' # 14 # sct006 - J
ct14Name: 'Garage and Outside Plugs' # 16 # sct006 - Q
ct09Name: 'Stove' # 18, 20 # sct016 - I
ct02Name: 'Dryer' # 22, 24 # sct010 - G
ct19Name: 'Unused'
# Current Transformers:
# 20A/25mA SCT-006: 11143
sct006: '11143'
# 30A/1V SCT-013-030: 8650
# 50A/1V SCT-013-050: 15420
# 80A/26.6mA SCT-010: 41660
sct010: '41660'
# 100A/50ma SCT-013-000: 27518
sct013: '27518'
# 120A/40mA: SCT-016: 41787
sct016: '41787'
# 200A/100mA SCT-024: 27518
#current_cal: '27518'
# Jameco 9VAC Transformer:
# For meter versions:
# >= v1.3: 7305
voltage_cal: '7305'
spi_clk: 18
spi_miso: 19
spi_mosi: 23
ic1_main: 5
ic1_addon1: 0
ic1_addon2: 27
ic1_addon3: 2
ic2_main: 4
ic2_addon1: 16
ic2_addon2: 17
ic2_addon3: 21
# ethernet:
# id: eth
# type: W5500
# clk_pin: GPIO13
# mosi_pin: GPIO11
# miso_pin: GPIO12
# cs_pin: GPIO14
# interrupt_pin: GPIO10
# reset_pin: GPIO9
packages:
wifi: !include common/wifi.yaml
# device_base: !include common/complex_esp32_base.yaml
device_base: !include common/device_base.yaml
mqtt: !include common/mqtt_null.yaml
esp32:
board: nodemcu-32s
# web_server:
# port: 80
time:
- platform: sntp
id: sntp_time
timezone: America/Detroit
logger:
# level: DEBUG
# logs:
# sensor: DEBUG
spi:
clk_pin: ${spi_clk}
miso_pin: ${spi_miso}
mosi_pin: ${spi_mosi}
sensor:
#IC1 Main
- platform: atm90e32
cs_pin: ${ic1_main}
phase_a:
voltage:
name: ${friendly_name} [V]
id: ic1Volts
filters:
- throttle_average: 60s
accuracy_decimals: 1
current:
name: ${friendly_name} ${ct01Name} [A]
id: ct1Amps
filters:
- or:
- delta: 2
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
power:
name: ${friendly_name} ${ct01Name} [W]
id: ct1Watts
filters:
- or:
- delta: ${grid_watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct016}
phase_b:
power:
name: ${friendly_name} ${ct02Name} [W]
id: ct2Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct010}
phase_c:
power:
name: ${friendly_name} ${ct03Name} [W]
id: ct3Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
frequency:
name: ${friendly_name} Freq A
filters:
- or:
- delta: 0.05
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 Main
- platform: atm90e32
cs_pin: ${ic2_main}
phase_a:
current:
name: ${friendly_name} ${ct04Name} [A]
id: ct4Amps
filters:
- or:
- delta: ${grid_watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
power:
name: ${friendly_name} ${ct04Name} [W]
id: ct4Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
gain_voltage: ${voltage_cal}
gain_ct: ${sct016}
phase_b:
power:
name: ${friendly_name} ${ct05Name} [W]
id: ct5Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${friendly_name} ${ct06Name} [W]
id: ct6Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
frequency:
name: ${friendly_name} Freq B
filters:
- or:
- delta: 0.05
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 1
- platform: atm90e32
cs_pin: ${ic1_addon1}
phase_a:
power:
name: ${friendly_name} ${ct07Name} [W]
id: ct7Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_b:
power:
name: ${friendly_name} ${ct08Name} [W]
id: ct8Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${friendly_name} ${ct09Name} [W]
id: ct9Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct013}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 1
- platform: atm90e32
cs_pin: ${ic2_addon1}
phase_a:
power:
name: ${friendly_name} ${ct10Name} [W]
id: ct10Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_b:
power:
name: ${friendly_name} ${ct11Name} [W]
id: ct11Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct010}
phase_c:
power:
name: ${friendly_name} ${ct12Name} [W]
id: ct12Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 2
- platform: atm90e32
cs_pin: ${ic1_addon2}
phase_a:
power:
name: ${friendly_name} ${ct13Name} [W]
id: ct13Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_b:
power:
name: ${friendly_name} ${ct14Name} [W]
id: ct14Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${friendly_name} ${ct15Name} [W]
id: ct15Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 2
- platform: atm90e32
cs_pin: ${ic2_addon2}
phase_a:
power:
name: ${friendly_name} ${ct16Name} [W]
id: ct16Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_b:
power:
name: ${friendly_name} ${ct17Name} [W]
id: ct17Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${friendly_name} ${ct18Name} [W]
id: ct18Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 3
- platform: atm90e32
#do not use GPIO2 if ESP32 has an on-board LED assigned to it
cs_pin: ${ic1_addon3}
phase_a:
power:
name: ${friendly_name} ${ct19Name} [W]
id: ct19Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_b:
power:
name: ${friendly_name} ${ct20Name} [W]
id: ct20Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${friendly_name} ${ct21Name} [W]
id: ct21Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
qos: 1
retain: true
availability:
topic: ${mqtt_root_topic}/${devicename}/${ct21Name}_w/status
payload_available: online
payload_not_available: offline
state_topic: ${mqtt_root_topic}/${devicename}/${ct21Name}_w
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 3
- platform: atm90e32
cs_pin: ${ic2_addon3}
phase_a:
power:
#name: ${friendly_name} ${ct22Name} [W]
internal: true
id: ct22Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct010}
phase_b:
power:
name: ${friendly_name} ${ct23Name} [W]
id: ct23Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${friendly_name} ${ct24Name} [W]
id: ct24Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#Total Amps From Grid
- platform: template
name: ${friendly_name} Grid Total [A]
id: totalAmpsFromGrid
lambda: return id(ct1Amps).state + id(ct4Amps).state ;
accuracy_decimals: 1
unit_of_measurement: A
device_class: current
state_class: measurement
update_interval: ${update_time}
filters:
- or:
- delta: 2.0
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
#Total Watts From Grid
- platform: template
name: ${friendly_name} Grid Total [W]
id: totalWattsFromGrid
lambda: return id(ct1Watts).state + id(ct4Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
state_class: measurement
update_interval: ${update_time}
filters:
- or:
- delta: 5.0
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
#kWh From Grid
- platform: total_daily_energy
name: ${friendly_name} Grid [kWh]
power_id: totalWattsFromGrid
filters:
- multiply: 0.001
# - heartbeat: ${kwh_report_interval}
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
# The CT for the Well needs to be calibrated.
# In the interim, I'm using this lambda
- platform: template
name: ${friendly_name} ${ct22Name} [W]
id: ct22WattsPositive
state_class: measurement
lambda: |-
if (id(ct22Watts).state < 0){
return 0;
} else {
return id(ct22Watts).state ;
}
accuracy_decimals: 1
unit_of_measurement: W
icon: mdi:lightning-bolt-circle
update_interval: ${update_time}
filters:
- delta: 5.0
# - heartbeat: ${watt_heartbeat}
# kWh from CT1
# This is included in the grid calculation
# kWh from CT2 (the dryer)
- platform: total_daily_energy
name: ${friendly_name} ${ct02Name} [kWh]
power_id: ct2Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 3
- platform: total_daily_energy
name: ${friendly_name} ${ct03Name} [kWh]
power_id: ct3Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
# kWh From CT 4
# This is included in the Grid calculation area
#kWh From CT 5
- platform: total_daily_energy
name: ${friendly_name} ${ct05Name} [kWh]
power_id: ct5Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 6
- platform: total_daily_energy
name: ${friendly_name} ${ct06Name} [kWh]
power_id: ct6Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 7
- platform: total_daily_energy
name: ${friendly_name} ${ct07Name} [kWh]
power_id: ct7Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 8
- platform: total_daily_energy
name: ${friendly_name} ${ct08Name} [kWh]
power_id: ct8Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 9
- platform: total_daily_energy
name: ${friendly_name} ${ct09Name} [kWh]
power_id: ct9Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 10
- platform: total_daily_energy
name: ${friendly_name} ${ct10Name} [kWh]
power_id: ct10Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 11 (Heat Pump)
- platform: total_daily_energy
name: ${friendly_name} ${ct11Name} [kWh]
power_id: ct11Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 12
- platform: total_daily_energy
name: ${friendly_name} ${ct12Name} [kWh]
power_id: ct12Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 13
- platform: total_daily_energy
name: ${friendly_name} ${ct13Name} [kWh]
power_id: ct13Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 14
- platform: total_daily_energy
name: ${friendly_name} ${ct14Name} [kWh]
power_id: ct14Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 15
- platform: total_daily_energy
name: ${friendly_name} ${ct15Name} [kWh]
power_id: ct15Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 16
- platform: total_daily_energy
name: ${friendly_name} ${ct16Name} [kWh]
power_id: ct16Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 17
- platform: total_daily_energy
name: ${friendly_name} ${ct17Name} [kWh]
power_id: ct17Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 18
- platform: total_daily_energy
name: ${friendly_name} ${ct18Name} [kWh]
power_id: ct18Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 19
# this is not used
# - platform: total_daily_energy
# name: ${friendly_name} ${ct19Name} [kWh]
# power_id: ct19Watts
# filters:
# - multiply: 0.001
# - throttle_average: ${kwh_report_interval}
# unit_of_measurement: kWh
# device_class: energy
# state_class: total_increasing
# # min_save_interval: ${update_time}
#kWh From CT 20
- platform: total_daily_energy
name: ${friendly_name} ${ct20Name} [kWh]
power_id: ct20Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 21
- platform: total_daily_energy
name: ${friendly_name} ${ct21Name} [kWh]
power_id: ct21Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
qos: 1
retain: true
availability:
topic: ${mqtt_root_topic}/${devicename}/${ct21Name}_kwh/status
payload_available: online
payload_not_available: offline
state_topic: ${mqtt_root_topic}/${devicename}/${ct21Name}_kwh
# min_save_interval: ${update_time}
#kWh From CT 22
- platform: total_daily_energy
name: ${friendly_name} ${ct22Name} [kWh]
power_id: ct22WattsPositive
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 23
- platform: total_daily_energy
name: ${friendly_name} ${ct23Name} [kWh]
power_id: ct23Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 24
- platform: total_daily_energy
name: ${friendly_name} ${ct24Name} [kWh]
power_id: ct24Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
+68
View File
@@ -0,0 +1,68 @@
# CircuitSetup 6 Channel Energy Meter ESPHome common variables
esp32:
board: nodemcu-32s
cpu_frequency: 240MHz
framework:
# ESPHome v2025.7.0 update to allow more than 6 SPI hardware devices on ESP-IDF
type: esp-idf
# Enable logging
logger:
debug:
update_interval: 10s
spi:
clk_pin: 18
miso_pin: 19
mosi_pin: 23
#Wifi signal
sensor:
- platform: wifi_signal
name: ${disp_name} WiFi
id: wifi_signal_db
entity_category: diagnostic
update_interval: 60s
- platform: copy
source_id: wifi_signal_db
id: wifi_signal_pct
name: ${friendly_name} WiFi %
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "%"
entity_category: diagnostic
- platform: debug
free:
name: "Heap Free"
id: heap_free_sensor
entity_category: diagnostic
loop_time:
name: "Loop Time"
id: loop_time_sensor
entity_category: diagnostic
- platform: uptime
name: Uptime
id: uptime_sensor
entity_category: diagnostic
text_sensor:
- platform: debug
reset_reason:
name: "Reset Reason"
id: reset_reason_sensor
entity_category: diagnostic
button:
- platform: restart
name: Restart
id: restart_button
entity_category: config
time:
- platform: homeassistant
id: homeassistant_time
@@ -0,0 +1,65 @@
# CircuitSetup 6 Channel Energy Meter ESPHome common variables
# using the Lilygo T-ETH-Lite ESP32S3 and the CircuitSetup 6 Channel Energy Meter Ethernet Adapter
esp32:
board: esp32-s3-devkitc-1
cpu_frequency: 240MHz
framework:
type: esp-idf
# Enable logging
logger:
hardware_uart: UART0
level: DEBUG
debug:
update_interval: 5s
ethernet:
type: W5500
clk_pin: 10
mosi_pin: 12
miso_pin: 11
cs_pin: 9
interrupt_pin: 13
reset_pin: 14
clock_speed: 30Mhz
spi:
interface: software
clk_pin: 7
miso_pin: 5
mosi_pin: 6
sensor:
- platform: debug
free:
name: "Heap Free"
id: heap_free_sensor
entity_category: diagnostic
loop_time:
name: "Loop Time"
id: loop_time_sensor
entity_category: diagnostic
- platform: uptime
name: Uptime
id: uptime_sensor
entity_category: diagnostic
text_sensor:
- platform: debug
reset_reason:
name: "Reset Reason"
id: reset_reason_sensor
entity_category: diagnostic
button:
- platform: restart
name: Restart
id: restart_button
entity_category: config
time:
- platform: homeassistant
id: homeassistant_time
@@ -0,0 +1,67 @@
# CircuitSetup 6 Channel Energy Meter ESPHome common variables
# using the Waveshare ESP32-S3-ETH and the CircuitSetup 6 Channel Energy Meter Ethernet WS Adapter
esp32:
board: esp32-s3-devkitc-1
variant: esp32s3
flash_size: 16MB
cpu_frequency: 240MHz
framework:
type: esp-idf
# Enable logging
logger:
hardware_uart: UART0
level: DEBUG
debug:
update_interval: 5s
ethernet:
type: W5500
clk_pin: 13
mosi_pin: 11
miso_pin: 12
cs_pin: 14
interrupt_pin: 10
reset_pin: 9
clock_speed: 30Mhz
spi:
interface: software
clk_pin: 44
miso_pin: 45
mosi_pin: 43
sensor:
- platform: debug
free:
name: "Heap Free"
id: heap_free_sensor
entity_category: diagnostic
loop_time:
name: "Loop Time"
id: loop_time_sensor
entity_category: diagnostic
- platform: uptime
name: Uptime
id: uptime_sensor
entity_category: diagnostic
text_sensor:
- platform: debug
reset_reason:
name: "Reset Reason"
id: reset_reason_sensor
entity_category: diagnostic
button:
- platform: restart
name: Restart
id: restart_button
entity_category: config
time:
- platform: homeassistant
id: homeassistant_time
@@ -0,0 +1,220 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 1 Add-on Board config
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: energy-meter
friendly_name: "CircuitSetup Energy Meter 12x"
# 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
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
# 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.7.0'
project:
name: circuitsetup.6c-energy-meter-1-addon
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
## 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
## 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
#- Software/ESPHome/status_fields/6chan_addon1_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
#- Software/ESPHome/calibration/6chan_addon1_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
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_1-addon.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:
ap:
# 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
## 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
#Total Amps
###########
- platform: template
name: ${friendly_name} Total Amps
id: totalAmps
lambda: return id(totalAmpsMain).state + id(totalAmpsAddOn1).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 ;
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
@@ -0,0 +1,217 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 1 Add-on Board config
# Uses the Lilygo T-ETH-Lite ESP32S3 and the CircuitSetup 6 Channel Energy Meter Ethernet Adapter
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: energy-meter
friendly_name: "CircuitSetup Energy Meter 12x"
# 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
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
# 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'
platformio_options:
board_build.flash_mode: dio
project:
name: circuitsetup.6c-energy-meter-1-addon-ethernet
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_ethernet.yaml
- Software/ESPHome/meter_sensors/6chan_main_sensor.yaml
- Software/ESPHome/meter_sensors/6chan_addon1.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
## 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
#- Software/ESPHome/status_fields/6chan_addon1_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
#- Software/ESPHome/calibration/6chan_addon1_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
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_1-addon_ethernet.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
web_server:
port: 80
sensor:
# CS Pin mappings for Lilygo T-ETH-Lite ESP32S3
- id: !extend ${main_meter_id1}
cs_pin: 8
#- id: !extend ${main_meter_id2}
# cs_pin: 4
#- id: !extend ${addon1_id1}
# cs_pin: 0
#- id: !extend ${addon1_id2}
# cs_pin: 16
## 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
#Total Amps
###########
- platform: template
name: ${friendly_name} Total Amps
id: totalAmps
lambda: return id(totalAmpsMain).state + id(totalAmpsAddOn1).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 ;
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
@@ -0,0 +1,250 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 2 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: energy-meter
friendly_name: "CircuitSetup Energy Meter 18x"
# 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
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
# 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.7.0'
project:
name: circuitsetup.6c-energy-meter-2-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
## 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
## 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
## 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
## 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
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_2-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: "YOUR_ENCRYPTION_KEY_HERE"
# Enable OTA updating
ota:
- platform: esphome
# Set up a wifi access point
wifi:
ap:
# 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
## 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
#Total Amps
###########
- platform: template
name: ${friendly_name} Total Amps
id: totalAmps
lambda: return id(totalAmpsMain).state + id(totalAmpsAddOn1).state + id(totalAmpsAddOn2).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 ;
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
@@ -0,0 +1,250 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 2 Add-on Boards config
# Uses the Lilygo T-ETH-Lite ESP32S3 and the CircuitSetup 6 Channel Energy Meter Ethernet Adapter
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: energy-meter
friendly_name: "CircuitSetup Energy Meter 18x"
# 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
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
# 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'
platformio_options:
board_build.flash_mode: dio
project:
name: circuitsetup.6c-energy-meter-2-addons-ethernet
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_ethernet.yaml
- Software/ESPHome/meter_sensors/6chan_main_sensor.yaml
- Software/ESPHome/meter_sensors/6chan_addon1.yaml
- Software/ESPHome/meter_sensors/6chan_addon2.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
## 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
## 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
## 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
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_2-addons_ethernet.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
web_server:
port: 80
sensor:
# CS Pin mappings for Lilygo T-ETH-Lite ESP32S3
- id: !extend ${main_meter_id1}
cs_pin: 8
#- id: !extend ${main_meter_id2}
# cs_pin: 4
#- id: !extend ${addon1_id1}
# cs_pin: 0
#- id: !extend ${addon1_id2}
# cs_pin: 16
- id: !extend ${addon2_id1}
cs_pin: 18
#- id: !extend ${addon2_id2}
# cs_pin: 17
## 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
#Total Amps
###########
- platform: template
name: ${friendly_name} Total Amps
id: totalAmps
lambda: return id(totalAmpsMain).state + id(totalAmpsAddOn1).state + id(totalAmpsAddOn2).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 ;
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
@@ -0,0 +1,276 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 3 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: energy-meter
friendly_name: CircuitSetup Energy Meter 24x
# 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
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
## Addon3
current_cal_ct19: '27518'
current_cal_ct20: '27518'
current_cal_ct21: '27518'
current_cal_ct22: '27518'
current_cal_ct23: '27518'
current_cal_ct24: '27518'
# 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.7.0'
project:
name: circuitsetup.6c-energy-meter-3-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
## 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
## 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
## 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
## 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
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_3-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: "YOUR_ENCRYPTION_KEY_HERE"
# Enable OTA updating
ota:
- platform: esphome
# Set up a wifi access point
wifi:
ap:
# 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
## 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
#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 ;
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 ;
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
@@ -0,0 +1,320 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 3 Add-on Boards config
# See all options at https://esphome.io/components/sensor/atm90e32.html
#
# Assumes 1st voltage is on main & add-on 1, 2nd voltage is on add-on 2 & 3
# This is done by cutting the 2 bottom most pins, and attaching a 2nd
# voltage transformer to add-on 2 VA2
substitutions:
# Change the disp_name to something you want
disp_name: energy-meter
friendly_name: CircuitSetup Energy Meter 24x
# 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
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
## Addon3
current_cal_ct19: '27518'
current_cal_ct20: '27518'
current_cal_ct21: '27518'
current_cal_ct22: '27518'
current_cal_ct23: '27518'
current_cal_ct24: '27518'
# 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.7.0'
project:
name: circuitsetup.6c-energy-meter-3-addons-2-voltages
version: "1.7"
packages:
remote_package:
url: https://github.com/CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter
ref: master
refresh: 1min
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
## 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
## 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
## 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
## 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
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_3-addons_2-voltages.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:
ap:
# 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
## Status field for 2nd voltage
text_sensor:
- platform: atm90e32
id: ${addon2_id1}
frequency_status:
name: "Frequency Status 2"
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
#
## assigns voltage_cal according to how hardware is set up to accept 2 voltage transformers
# gain_voltage can be set independently if needed
- id: !extend ${main_meter_id2}
phase_a:
gain_voltage: ${voltage_cal1}
phase_b:
gain_voltage: ${voltage_cal1}
phase_c:
gain_voltage: ${voltage_cal1}
- id: !extend ${addon1_id2}
phase_a:
gain_voltage: ${voltage_cal1}
phase_b:
gain_voltage: ${voltage_cal1}
phase_c:
gain_voltage: ${voltage_cal1}
## adds Voltage 2 to addon 2
- id: !extend ${addon2_id1}
phase_a:
voltage:
name: Voltage 2
id: ic2Volts
accuracy_decimals: 1
gain_voltage: ${voltage_cal2}
phase_b:
gain_voltage: ${voltage_cal2}
phase_c:
gain_voltage: ${voltage_cal2}
frequency:
name: Frequency 2
- id: !extend ${addon3_id1}
phase_a:
gain_voltage: ${voltage_cal2}
phase_b:
gain_voltage: ${voltage_cal2}
phase_c:
gain_voltage: ${voltage_cal2}
## 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
#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 ;
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 ;
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
@@ -0,0 +1,279 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 3 Add-on Boards config
# Uses the Lilygo T-ETH-Lite ESP32S3 and the CircuitSetup 6 Channel Energy Meter Ethernet Adapter
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: energy-meter
friendly_name: "CircuitSetup Energy Meter 24x"
# 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
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
## Addon3
current_cal_ct19: '27518'
current_cal_ct20: '27518'
current_cal_ct21: '27518'
current_cal_ct22: '27518'
current_cal_ct23: '27518'
current_cal_ct24: '27518'
# 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-3-addons-ethernet
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_ethernet.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
## 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
## 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
## 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
## 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
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_3-addons_ethernet.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
web_server:
port: 80
sensor:
# CS Pin mappings for Lilygo T-ETH-Lite ESP32S3
- id: !extend ${main_meter_id1}
cs_pin: 8
#- id: !extend ${main_meter_id2}
# cs_pin: 4
#- id: !extend ${addon1_id1}
# cs_pin: 0
#- id: !extend ${addon1_id2}
# cs_pin: 16
- id: !extend ${addon2_id1}
cs_pin: 18
#- id: !extend ${addon2_id2}
# cs_pin: 17
#- id: !extend ${addon3_id1}
# cs_pin: 2
#- id: !extend ${addon3_id2}
# cs_pin: 21
## 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
#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 ;
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 ;
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
@@ -0,0 +1,303 @@
# 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: 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
## Addon3
current_cal_ct19: '27518'
current_cal_ct20: '27518'
current_cal_ct21: '27518'
current_cal_ct22: '27518'
current_cal_ct23: '27518'
current_cal_ct24: '27518'
## Addon4
current_cal_ct25: '27518'
current_cal_ct26: '27518'
current_cal_ct27: '27518'
current_cal_ct28: '27518'
current_cal_ct29: '27518'
current_cal_ct30: '27518'
# 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.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: "YOUR_ENCRYPTION_KEY_HERE"
# Enable OTA updating
ota:
- platform: esphome
# Set up a wifi access point
wifi:
ap:
# 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
## 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
@@ -0,0 +1,310 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 4 Add-on Boards config
# Uses the Lilygo T-ETH-Lite ESP32S3 and the CircuitSetup 6 Channel Energy Meter Ethernet Adapter
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
## Addon3
current_cal_ct19: '27518'
current_cal_ct20: '27518'
current_cal_ct21: '27518'
current_cal_ct22: '27518'
current_cal_ct23: '27518'
current_cal_ct24: '27518'
## Addon4
current_cal_ct25: '27518'
current_cal_ct26: '27518'
current_cal_ct27: '27518'
current_cal_ct28: '27518'
current_cal_ct29: '27518'
current_cal_ct30: '27518'
# 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-4-addons-ethernet
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_ethernet.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_ethernet.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
web_server:
port: 80
sensor:
# CS Pin mappings for Lilygo T-ETH-Lite ESP32S3
- id: !extend ${main_meter_id1}
cs_pin: 8
#- id: !extend ${main_meter_id2}
# cs_pin: 4
#- id: !extend ${addon1_id1}
# cs_pin: 0
#- id: !extend ${addon1_id2}
# cs_pin: 16
- id: !extend ${addon2_id1}
cs_pin: 18
#- id: !extend ${addon2_id2}
# cs_pin: 17
#- id: !extend ${addon3_id1}
# cs_pin: 2
#- id: !extend ${addon3_id2}
# cs_pin: 21
- id: !extend ${addon4_id1}
cs_pin: 3
- id: !extend ${addon4_id2}
cs_pin: 20
## 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
@@ -0,0 +1,330 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 5 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: energy-meter
friendly_name: CircuitSetup Energy Meter 36x
# 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
## Addon5
addon5_name1: Addon5 31-33
addon5_name2: Addon5 34-36
addon5_id1: addon5_1
addon5_id2: addon5_2
ct31_name: CT31
ct32_name: CT32
ct33_name: CT33
ct34_name: CT34
ct35_name: CT35
ct36_name: CT36
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
## Addon3
current_cal_ct19: '27518'
current_cal_ct20: '27518'
current_cal_ct21: '27518'
current_cal_ct22: '27518'
current_cal_ct23: '27518'
current_cal_ct24: '27518'
## Addon4
current_cal_ct25: '27518'
current_cal_ct26: '27518'
current_cal_ct27: '27518'
current_cal_ct28: '27518'
current_cal_ct29: '27518'
current_cal_ct30: '27518'
## Addon4
current_cal_ct31: '27518'
current_cal_ct32: '27518'
current_cal_ct33: '27518'
current_cal_ct34: '27518'
current_cal_ct35: '27518'
current_cal_ct36: '27518'
# 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.7.0'
project:
name: circuitsetup.6c-energy-meter-5-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
- Software/ESPHome/meter_sensors/6chan_addon5.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
#- Software/ESPHome/power_quality/6chan_addon5_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
#- Software/ESPHome/status_fields/6chan_addon5_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
#- Software/ESPHome/calibration/6chan_addon5_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
#- Software/ESPHome/calibration/6chan_addon5_offset_calibrations.yaml
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_5-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: "YOUR_ENCRYPTION_KEY_HERE"
# Enable OTA updating
ota:
- platform: esphome
# Set up a wifi access point
wifi:
ap:
# 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
## 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
- id: !extend totalAmpsAddOn5
internal: true
- id: !extend totalWattsAddOn5
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 + id(totalAmpsAddOn5).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 + id(totalWattsAddOn5).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
@@ -0,0 +1,341 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 5 Add-on Boards config
# Uses the Lilygo T-ETH-Lite ESP32S3 and the CircuitSetup 6 Channel Energy Meter Ethernet Adapter
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: energy-meter
friendly_name: CircuitSetup Energy Meter 36x
# 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
## Addon5
addon5_name1: Addon5 31-33
addon5_name2: Addon5 34-36
addon5_id1: addon5_1
addon5_id2: addon5_2
ct31_name: CT31
ct32_name: CT32
ct33_name: CT33
ct34_name: CT34
ct35_name: CT35
ct36_name: CT36
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
## Addon3
current_cal_ct19: '27518'
current_cal_ct20: '27518'
current_cal_ct21: '27518'
current_cal_ct22: '27518'
current_cal_ct23: '27518'
current_cal_ct24: '27518'
## Addon4
current_cal_ct25: '27518'
current_cal_ct26: '27518'
current_cal_ct27: '27518'
current_cal_ct28: '27518'
current_cal_ct29: '27518'
current_cal_ct30: '27518'
## Addon4
current_cal_ct31: '27518'
current_cal_ct32: '27518'
current_cal_ct33: '27518'
current_cal_ct34: '27518'
current_cal_ct35: '27518'
current_cal_ct36: '27518'
# 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-5-addons-ethernet
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_ethernet.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
- Software/ESPHome/meter_sensors/6chan_addon5.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
#- Software/ESPHome/power_quality/6chan_addon5_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
#- Software/ESPHome/status_fields/6chan_addon5_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
#- Software/ESPHome/calibration/6chan_addon5_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
#- Software/ESPHome/calibration/6chan_addon5_offset_calibrations.yaml
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_5-addons_ethernet.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
web_server:
port: 80
sensor:
# CS Pin mappings for Lilygo T-ETH-Lite ESP32S3
- id: !extend ${main_meter_id1}
cs_pin: 8
#- id: !extend ${main_meter_id2}
# cs_pin: 4
#- id: !extend ${addon1_id1}
# cs_pin: 0
#- id: !extend ${addon1_id2}
# cs_pin: 16
- id: !extend ${addon2_id1}
cs_pin: 18
#- id: !extend ${addon2_id2}
# cs_pin: 17
#- id: !extend ${addon3_id1}
# cs_pin: 2
#- id: !extend ${addon3_id2}
# cs_pin: 21
- id: !extend ${addon4_id1}
cs_pin: 3
- id: !extend ${addon4_id2}
cs_pin: 20
- id: !extend ${addon5_id1}
cs_pin: 41
- id: !extend ${addon5_id2}
cs_pin: 39
## 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
- id: !extend totalAmpsAddOn5
internal: true
- id: !extend totalWattsAddOn5
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 + id(totalAmpsAddOn5).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 + id(totalWattsAddOn5).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
@@ -0,0 +1,357 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 6 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: energy-meter
friendly_name: CircuitSetup Energy Meter 42x
# 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
## Addon5
addon5_name1: Addon5 31-33
addon5_name2: Addon5 34-36
addon5_id1: addon5_1
addon5_id2: addon5_2
ct31_name: CT31
ct32_name: CT32
ct33_name: CT33
ct34_name: CT34
ct35_name: CT35
ct36_name: CT36
## Addon6
addon6_name1: Addon6 37-39
addon6_name2: Addon6 40-42
addon6_id1: addon6_1
addon6_id2: addon6_2
ct37_name: CT37
ct38_name: CT38
ct39_name: CT39
ct40_name: CT40
ct41_name: CT41
ct42_name: CT42
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
## Addon3
current_cal_ct19: '27518'
current_cal_ct20: '27518'
current_cal_ct21: '27518'
current_cal_ct22: '27518'
current_cal_ct23: '27518'
current_cal_ct24: '27518'
## Addon4
current_cal_ct25: '27518'
current_cal_ct26: '27518'
current_cal_ct27: '27518'
current_cal_ct28: '27518'
current_cal_ct29: '27518'
current_cal_ct30: '27518'
## Addon5
current_cal_ct31: '27518'
current_cal_ct32: '27518'
current_cal_ct33: '27518'
current_cal_ct34: '27518'
current_cal_ct35: '27518'
current_cal_ct36: '27518'
## Addon6
current_cal_ct37: '27518'
current_cal_ct38: '27518'
current_cal_ct39: '27518'
current_cal_ct40: '27518'
current_cal_ct41: '27518'
current_cal_ct42: '27518'
# 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.7.0'
project:
name: circuitsetup.6c-energy-meter-6-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
- Software/ESPHome/meter_sensors/6chan_addon5.yaml
- Software/ESPHome/meter_sensors/6chan_addon6.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
#- Software/ESPHome/power_quality/6chan_addon5_power_quality.yaml
#- Software/ESPHome/power_quality/6chan_addon6_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
#- Software/ESPHome/status_fields/6chan_addon5_status.yaml
#- Software/ESPHome/status_fields/6chan_addon6_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
#- Software/ESPHome/calibration/6chan_addon5_calibration.yaml
#- Software/ESPHome/calibration/6chan_addon6_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
#- Software/ESPHome/calibration/6chan_addon5_offset_calibrations.yaml
#- Software/ESPHome/calibration/6chan_addon6_offset_calibrations.yaml
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_6-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: "YOUR_ENCRYPTION_KEY_HERE"
# Enable OTA updating
ota:
- platform: esphome
# Set up a wifi access point
wifi:
ap:
# 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
## 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
- id: !extend totalAmpsAddOn5
internal: true
- id: !extend totalWattsAddOn5
internal: true
- id: !extend totalAmpsAddOn6
internal: true
- id: !extend totalWattsAddOn6
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 + id(totalAmpsAddOn5).state + id(totalAmpsAddOn6).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 + id(totalWattsAddOn5).state + id(totalWattsAddOn6).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
@@ -0,0 +1,372 @@
# CircuitSetup 6 Channel Energy Meter Main Board + 6 Add-on Boards config
# Uses the Lilygo T-ETH-Lite ESP32S3 and the CircuitSetup 6 Channel Energy Meter Ethernet Adapter
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: energy-meter
friendly_name: CircuitSetup Energy Meter 42x
# 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
## Addon5
addon5_name1: Addon5 31-33
addon5_name2: Addon5 34-36
addon5_id1: addon5_1
addon5_id2: addon5_2
ct31_name: CT31
ct32_name: CT32
ct33_name: CT33
ct34_name: CT34
ct35_name: CT35
ct36_name: CT36
## Addon6
addon6_name1: Addon6 37-39
addon6_name2: Addon6 40-42
addon6_id1: addon6_1
addon6_id2: addon6_2
ct37_name: CT37
ct38_name: CT38
ct39_name: CT39
ct40_name: CT40
ct41_name: CT41
ct42_name: CT42
## 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: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
## Addon1
current_cal_ct7: '27518'
current_cal_ct8: '27518'
current_cal_ct9: '27518'
current_cal_ct10: '27518'
current_cal_ct11: '27518'
current_cal_ct12: '27518'
## Addon2
current_cal_ct13: '27518'
current_cal_ct14: '27518'
current_cal_ct15: '27518'
current_cal_ct16: '27518'
current_cal_ct17: '27518'
current_cal_ct18: '27518'
## Addon3
current_cal_ct19: '27518'
current_cal_ct20: '27518'
current_cal_ct21: '27518'
current_cal_ct22: '27518'
current_cal_ct23: '27518'
current_cal_ct24: '27518'
## Addon4
current_cal_ct25: '27518'
current_cal_ct26: '27518'
current_cal_ct27: '27518'
current_cal_ct28: '27518'
current_cal_ct29: '27518'
current_cal_ct30: '27518'
## Addon5
current_cal_ct31: '27518'
current_cal_ct32: '27518'
current_cal_ct33: '27518'
current_cal_ct34: '27518'
current_cal_ct35: '27518'
current_cal_ct36: '27518'
## Addon6
current_cal_ct37: '27518'
current_cal_ct38: '27518'
current_cal_ct39: '27518'
current_cal_ct40: '27518'
current_cal_ct41: '27518'
current_cal_ct42: '27518'
# 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-6-addons-ethernet
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_ethernet.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
- Software/ESPHome/meter_sensors/6chan_addon5.yaml
- Software/ESPHome/meter_sensors/6chan_addon6.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
#- Software/ESPHome/power_quality/6chan_addon5_power_quality.yaml
#- Software/ESPHome/power_quality/6chan_addon6_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
#- Software/ESPHome/status_fields/6chan_addon5_status.yaml
#- Software/ESPHome/status_fields/6chan_addon6_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
#- Software/ESPHome/calibration/6chan_addon5_calibration.yaml
#- Software/ESPHome/calibration/6chan_addon6_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
#- Software/ESPHome/calibration/6chan_addon5_offset_calibrations.yaml
#- Software/ESPHome/calibration/6chan_addon6_offset_calibrations.yaml
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_6-addons_ethernet.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
web_server:
port: 80
sensor:
# CS Pin mappings for Lilygo T-ETH-Lite ESP32S3
- id: !extend ${main_meter_id1}
cs_pin: 8
#- id: !extend ${main_meter_id2}
# cs_pin: 4
#- id: !extend ${addon1_id1}
# cs_pin: 0
#- id: !extend ${addon1_id2}
# cs_pin: 16
- id: !extend ${addon2_id1}
cs_pin: 18
#- id: !extend ${addon2_id2}
# cs_pin: 17
#- id: !extend ${addon3_id1}
# cs_pin: 2
#- id: !extend ${addon3_id2}
# cs_pin: 21
- id: !extend ${addon4_id1}
cs_pin: 3
- id: !extend ${addon4_id2}
cs_pin: 20
- id: !extend ${addon5_id1}
cs_pin: 41
- id: !extend ${addon5_id2}
cs_pin: 39
#- id: !extend ${addon6_id1}
# cs_pin: 15
- id: !extend ${addon6_id2}
cs_pin: 38
## 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
- id: !extend totalAmpsAddOn5
internal: true
- id: !extend totalWattsAddOn5
internal: true
- id: !extend totalAmpsAddOn6
internal: true
- id: !extend totalWattsAddOn6
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 + id(totalAmpsAddOn5).state + id(totalAmpsAddOn6).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 + id(totalWattsAddOn5).state + id(totalWattsAddOn6).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
@@ -0,0 +1,162 @@
# 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: energy-meter
friendly_name: "CircuitSetup Energy Meter"
# 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_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
# 200A/100mA SCT-024: 27518
# 200A/50mA SCT-024: 55036
current_cal_ct1: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
# 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.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
## 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
## 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
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:
ap:
# 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
@@ -0,0 +1,155 @@
# CircuitSetup 6 Channel Energy Meter Main Board config
# Uses the Lilygo T-ETH-Lite ESP32S3 and the CircuitSetup 6 Channel Energy Meter Ethernet Adapter
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: energy-meter
friendly_name: "CircuitSetup Energy Meter"
# 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_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
# 200A/100mA SCT-024: 27518
# 200A/50mA SCT-024: 55036
current_cal_ct1: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
# 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'
platformio_options:
board_build.flash_mode: dio
project:
name: circuitsetup.6c-energy-meter-ethernet
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_ethernet.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
## 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
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_main_ethernet.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
web_server:
port: 80
sensor:
# CS Pin mappings for Lilygo T-ETH-Lite ESP32S3
- id: !extend ${main_meter_id1}
cs_pin: 8
#- id: !extend ${main_meter_id2}
# cs_pin: 4
## 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
@@ -0,0 +1,155 @@
# CircuitSetup 6 Channel Energy Meter Main Board config
# Uses the Waveshare ESP32-S3-ETH and the CircuitSetup 6 Channel Energy Meter Ethernet WS Adapter
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: energy-meter-eth-ws
friendly_name: "CircuitSetup Energy Meter"
# 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_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
# 200A/100mA SCT-024: 27518
# 200A/50mA SCT-024: 55036
current_cal_ct1: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
# 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'
platformio_options:
board_build.flash_mode: dio
project:
name: circuitsetup.6c-energy-meter-ethernet-ws
version: "1.7"
packages:
remote_package:
url: https://github.com/CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter
ref: master
refresh: 1min
files:
- Software/ESPHome/6chan_common_ethernet_ws.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
## 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
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_energy_meter_main_ethernet_ws.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
web_server:
port: 80
sensor:
# CS Pin mappings for Waveshare ESP32-S3-ETH
- id: !extend ${main_meter_id1}
cs_pin: 34
- id: !extend ${main_meter_id2}
cs_pin: 40
## 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
+153
View File
@@ -0,0 +1,153 @@
# ESPHome Configuration for Expandable 6-Channel ESP32 Energy Meter
This folder contains [ESPHome](https://esphome.io) configuration files used to monitor power and energy via the CircuitSetup Expandable 6-Channel Energy Meter. These configurations support flexible deployments - with or without add-on boards - as well as Wi-Fi or Ethernet connections. Many files use `!include` statements to modularize calibration, sensor definitions, power quality metrics, and device status.
---
## 📁 Base Config Files
| File | Description |
|------|-------------|
| `6chan_common.yaml` | Base shared configuration: sets platform (`esp32`), SPI, includes time and API components. Meant to be included in Wi-Fi-based setups. |
| `6chan_common_ethernet.yaml` | Same as `6chan_common.yaml`, but for the [Lilygo T-ETH-Lite ESP32S3](https://lilygo.cc/products/t-eth-lite) and the [CircuitSetup 6 Channel Energy Meter Ethernet Adapter](https://circuitsetup.us/product/6-channel-energy-meter-to-lilygo-t-eth-lite-esp32s3-ethernet-adapter/) . |
| `6chan_energy_meter_main_board.yaml` | Full configuration for monitoring only the main board's 6 channels via Wi-Fi. |
| `6chan_energy_meter_main_ethernet.yaml` | Ethernet-based variant of `6chan_energy_meter_main_board.yaml`. |
| `6chan_energy_meter_1-addon.yaml` | Main board + 1 add-on board (12 channels). |
| `6chan_energy_meter_2-addons.yaml` | Main board + 2 add-ons (18 channels). |
| `6chan_energy_meter_3-addons.yaml` | Main board + 3 add-ons (24 channels). |
---
## 📂 calibration/
When these files are included, and calibration is enabled, semi-automatic calibration can be done for each current and voltage channel by providing a current and voltage reference. Calculated values for offset and gain stored in memory take priority over config values.
To save calculated calibration values, copy them from the ESPHome logs to your config then use the clear buttons to clear the calibration values from memory
[See details on semi-automatic calibrations here](https://esphome.io/components/sensor/atm90e32.html#calibration)
| File | Description |
|------|-------------|
| `6chan_xxxx_calibration.yaml` | Enables calibration buttons for gain, power offset, current/voltage offset, and clear buttons for each |
| `6chan_xxxx_offset_calibrations.yaml` | Offset calibration values fine tuned via the output of the semi-automatic calibrations. Values should be copied in from the meter's ESPHome log |
---
## 📂 meter_sensors/
Default current, power (watts), and voltage sensor entities per meter board
[More details on each sensor here](https://esphome.io/components/sensor/atm90e32.html#configuration-variables)
---
## 📂 status_fields/
These fields display the status of each CT, or phase, with a short text description. [See more details here](https://esphome.io/components/sensor/atm90e32.html#text-sensor)
---
## 📂 power_quality/
Contains power quality values that are available for each phase, and can be enabled per meter board. Enabling these on every current channel is possible, but will produce a lot of data and sensors that are likely not needed. They include reactive_power, apparent_power, harmonic_power, power_factor, phase_angle, peak_current
[More details on each sensor here](https://esphome.io/components/sensor/atm90e32.html#configuration-variables)
---
## 📂 examples/
Pre-configured use cases to jumpstart your setup.
| File | Description |
|------|-------------|
| `6chan_energy_meter_3-phase_ethernet.yaml` | Configuration for 3-phase measurement with Ethernet. Uses main board + 1 add-on. |
| `6chan_energy_meter_6-addons_ethernet.yaml` | Max configuration: main board + 6 add-ons over Ethernet (42 channels). |
| `6chan_energy_meter_house_solar_ha_kwh.yaml` | Real-world example measuring house + solar circuits. |
| `6chan_main_calibration_beta.yaml` | Beta calibration test — for experimentation only, not recommended for production. |
---
## Measuring More Than 65A on a Current Channel
The max value for current that the meter can output is 65.535. If you expect to measure current over 65A, divide `current_cal_ctx` 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.
Under `sensor:` add:
```
- id: !extend ${main_meter_id1} # CTs 1-3
phase_a: # CT1
current:
filters:
- multiply: 2
power:
filters:
- multiply: 2
```
---
## Monitoring More Than 1 Voltage
By default, all voltage channels are connected, and set up to monitor a single phase. [See here on what needs to be done with hardware if monitoring more than 1 voltage.](https://github.com/CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/tree/master?tab=readme-ov-file#measuring-a-second-voltage)
In the config, under `sensor:` add:
```
- id: !extend ${main_meter_id2}
phase_a:
voltage:
name: Voltage 2
id: ic2Volts
accuracy_decimals: 1
frequency:
name: Frequency 2
```
---
## Excluding/Removing Sensors
If you, for example, want to see power quality sensors on only 2 out of the 4 CT channels of the main board, you could add something like this in your base config file. This is assuming you are including `Software/ESPHome/power_quality/6chan_main_power_quality.yaml` and you want to exclude power quality sensors for the last 4 CTs:
Under `sensor:` add:
```
- id: !extend ${main_meter_id1}
phase_c: # CT3
reactive_power: !remove
apparent_power: !remove
harmonic_power: !remove
power_factor: !remove
phase_angle: !remove
peak_current: !remove
- id: !extend ${main_meter_id2}
phase_a: # CT4
reactive_power: !remove
apparent_power: !remove
harmonic_power: !remove
power_factor: !remove
phase_angle: !remove
peak_current: !remove
phase_b: #CT5
reactive_power: !remove
apparent_power: !remove
harmonic_power: !remove
power_factor: !remove
phase_angle: !remove
peak_current: !remove
phase_c: #CT6
reactive_power: !remove
apparent_power: !remove
harmonic_power: !remove
power_factor: !remove
phase_angle: !remove
peak_current: !remove
```
---
## Including Files Locally
You can copy config files to your local directories and change the `packages:` part of your config to something like this:
```
packages:
common: !include Software/ESPHome/6chan_common.yaml
main: !include Software/ESPHome/meter_sensors/6chan_main_sensor.yaml
main_status: !include Software/ESPHome/status_fields/6chan_main_status.yaml
main_cal: !include Software/ESPHome/calibration/6chan_main_calibration.yaml
```
---
## Compiled Firmware
[See here to flash your ESP32](https://circuitsetup.github.io/ESPWebInstaller/)
@@ -0,0 +1,65 @@
# Details: https://esphome.io/components/sensor/atm90e32.html#calibration
# Semi-automatic Calibration Buttons
####################################
button:
- platform: atm90e32
id: ${addon1_id1}
run_offset_calibration:
name: "1. Run ${addon1_name1} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon1_name1} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon1_name1} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon1_name1} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon1_name1} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon1_name1} Gain Cal"
- platform: atm90e32
id: ${addon1_id2}
run_offset_calibration:
name: "1. Run ${addon1_name2} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon1_name2} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon1_name2} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon1_name2} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon1_name2} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon1_name2} Gain Cal"
# V & I Calibration Reference Fields
####################################
# Use these to input a known value being measured by a CT or voltage transformer
number:
- platform: atm90e32
id: ${addon1_id1}
reference_voltage:
# will copy to phase_b/c for calibration reference
phase_a:
name: "${addon1_name1} Ref V 1"
reference_current:
phase_a:
name: "${ct7_name} Ref Current"
phase_b:
name: "${ct8_name} Ref Current"
phase_c:
name: "${ct9_name} Ref Current"
- platform: atm90e32
id: ${addon1_id2}
reference_voltage:
# needed to calibrate voltage registers even if not output
phase_a:
name: "${addon1_name2} Ref V 2"
reference_current:
phase_a:
name: "${ct10_name} Ref Current"
phase_b:
name: "${ct11_name} Ref Current"
phase_c:
name: "${ct12_name} Ref Current"
@@ -0,0 +1,39 @@
# Offset calibration values fine tuned via the output of the semi-automatic calibrations
# Values should be copied in from the meter's ESPHome log
# See details on semi-automatic calibrations here:
# https://esphome.io/components/sensor/atm90e32.html#calibration
sensor:
- id: !extend ${addon1_id1}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
- id: !extend ${addon1_id2}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
@@ -0,0 +1,65 @@
# Details: https://esphome.io/components/sensor/atm90e32.html#calibration
# Semi-automatic Calibration Buttons
####################################
button:
- platform: atm90e32
id: ${addon2_id1}
run_offset_calibration:
name: "1. Run ${addon2_name1} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon2_name1} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon2_name1} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon2_name1} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon2_name1} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon2_name1} Gain Cal"
- platform: atm90e32
id: ${addon2_id2}
run_offset_calibration:
name: "1. Run ${addon2_name2} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon2_name2} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon2_name2} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon2_name2} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon2_name2} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon2_name2} Gain Cal"
# V & I Calibration Reference Fields
####################################
# Use these to input a known value being measured by a CT or voltage transformer
number:
- platform: atm90e32
id: ${addon2_id1}
reference_voltage:
# will copy to phase_b/c for calibration reference
phase_a:
name: "${addon2_name1} Ref V 1"
reference_current:
phase_a:
name: "${ct13_name} Ref Current"
phase_b:
name: "${ct14_name} Ref Current"
phase_c:
name: "${ct15_name} Ref Current"
- platform: atm90e32
id: ${addon2_id2}
reference_voltage:
# needed to calibrate voltage registers even if not output
phase_a:
name: "${addon2_name2} Ref V 2"
reference_current:
phase_a:
name: "${ct16_name} Ref Current"
phase_b:
name: "${ct17_name} Ref Current"
phase_c:
name: "${ct18_name} Ref Current"
@@ -0,0 +1,39 @@
# Offset calibration values fine tuned via the output of the semi-automatic calibrations
# Values should be copied in from the meter's ESPHome log
# See details on semi-automatic calibrations here:
# https://esphome.io/components/sensor/atm90e32.html#calibration
sensor:
- id: !extend ${addon2_id1}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
- id: !extend ${addon2_id2}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
@@ -0,0 +1,65 @@
# Details: https://esphome.io/components/sensor/atm90e32.html#calibration
# Semi-automatic Calibration Buttons
####################################
button:
- platform: atm90e32
id: ${addon3_id1}
run_offset_calibration:
name: "1. Run ${addon3_name1} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon3_name1} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon3_name1} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon3_name1} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon3_name1} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon3_name1} Gain Cal"
- platform: atm90e32
id: ${addon3_id2}
run_offset_calibration:
name: "1. Run ${addon3_name2} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon3_name2} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon3_name2} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon3_name2} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon3_name2} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon3_name2} Gain Cal"
# V & I Calibration Reference Fields
####################################
# Use these to input a known value being measured by a CT or voltage transformer
number:
- platform: atm90e32
id: ${addon3_id1}
reference_voltage:
# will copy to phase_b/c for calibration reference
phase_a:
name: "${addon3_name1} Ref V 1"
reference_current:
phase_a:
name: "${ct19_name} Ref Current"
phase_b:
name: "${ct20_name} Ref Current"
phase_c:
name: "${ct21_name} Ref Current"
- platform: atm90e32
id: ${addon3_id2}
reference_voltage:
# needed to calibrate voltage registers even if not output
phase_a:
name: "${addon3_name2} Ref V 2"
reference_current:
phase_a:
name: "${ct22_name} Ref Current"
phase_b:
name: "${ct23_name} Ref Current"
phase_c:
name: "${ct24_name} Ref Current"
@@ -0,0 +1,39 @@
# Offset calibration values fine tuned via the output of the semi-automatic calibrations
# Values should be copied in from the meter's ESPHome log
# See details on semi-automatic calibrations here:
# https://esphome.io/components/sensor/atm90e32.html#calibration
sensor:
- id: !extend ${addon3_id1}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
- id: !extend ${addon3_id2}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
@@ -0,0 +1,65 @@
# Details: https://esphome.io/components/sensor/atm90e32.html#calibration
# Semi-automatic Calibration Buttons
####################################
button:
- platform: atm90e32
id: ${addon4_id1}
run_offset_calibration:
name: "1. Run ${addon4_name1} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon4_name1} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon4_name1} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon4_name1} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon4_name1} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon4_name1} Gain Cal"
- platform: atm90e32
id: ${addon4_id2}
run_offset_calibration:
name: "1. Run ${addon4_name2} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon4_name2} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon4_name2} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon4_name2} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon4_name2} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon4_name2} Gain Cal"
# V & I Calibration Reference Fields
####################################
# Use these to input a known value being measured by a CT or voltage transformer
number:
- platform: atm90e32
id: ${addon4_id1}
reference_voltage:
# will copy to phase_b/c for calibration reference
phase_a:
name: "${addon4_name1} Ref V 1"
reference_current:
phase_a:
name: "${ct25_name} Ref Current"
phase_b:
name: "${ct26_name} Ref Current"
phase_c:
name: "${ct27_name} Ref Current"
- platform: atm90e32
id: ${addon4_id2}
reference_voltage:
# needed to calibrate voltage registers even if not output
phase_a:
name: "${addon4_name2} Ref V 2"
reference_current:
phase_a:
name: "${ct28_name} Ref Current"
phase_b:
name: "${ct29_name} Ref Current"
phase_c:
name: "${ct30_name} Ref Current"
@@ -0,0 +1,39 @@
# Offset calibration values fine tuned via the output of the semi-automatic calibrations
# Values should be copied in from the meter's ESPHome log
# See details on semi-automatic calibrations here:
# https://esphome.io/components/sensor/atm90e32.html#calibration
sensor:
- id: !extend ${addon4_id1}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
- id: !extend ${addon4_id2}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
@@ -0,0 +1,65 @@
# Details: https://esphome.io/components/sensor/atm90e32.html#calibration
# Semi-automatic Calibration Buttons
####################################
button:
- platform: atm90e32
id: ${addon5_id1}
run_offset_calibration:
name: "1. Run ${addon5_name1} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon5_name1} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon5_name1} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon5_name1} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon5_name1} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon5_name1} Gain Cal"
- platform: atm90e32
id: ${addon5_id2}
run_offset_calibration:
name: "1. Run ${addon5_name2} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon5_name2} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon5_name2} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon5_name2} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon5_name2} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon5_name2} Gain Cal"
# V & I Calibration Reference Fields
####################################
# Use these to input a known value being measured by a CT or voltage transformer
number:
- platform: atm90e32
id: ${addon5_id1}
reference_voltage:
# will copy to phase_b/c for calibration reference
phase_a:
name: "${addon5_name1} Ref V 1"
reference_current:
phase_a:
name: "${ct31_name} Ref Current"
phase_b:
name: "${ct32_name} Ref Current"
phase_c:
name: "${ct33_name} Ref Current"
- platform: atm90e32
id: ${addon5_id2}
reference_voltage:
# needed to calibrate voltage registers even if not output
phase_a:
name: "${addon5_name2} Ref V 2"
reference_current:
phase_a:
name: "${ct34_name} Ref Current"
phase_b:
name: "${ct35_name} Ref Current"
phase_c:
name: "${ct36_name} Ref Current"
@@ -0,0 +1,39 @@
# Offset calibration values fine tuned via the output of the semi-automatic calibrations
# Values should be copied in from the meter's ESPHome log
# See details on semi-automatic calibrations here:
# https://esphome.io/components/sensor/atm90e32.html#calibration
sensor:
- id: !extend ${addon5_id1}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
- id: !extend ${addon5_id2}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
@@ -0,0 +1,65 @@
# Details: https://esphome.io/components/sensor/atm90e32.html#calibration
# Semi-automatic Calibration Buttons
####################################
button:
- platform: atm90e32
id: ${addon6_id1}
run_offset_calibration:
name: "1. Run ${addon6_name1} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon6_name1} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon6_name1} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon6_name1} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon6_name1} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon6_name1} Gain Cal"
- platform: atm90e32
id: ${addon6_id2}
run_offset_calibration:
name: "1. Run ${addon6_name2} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${addon6_name2} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${addon6_name2} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${addon6_name2} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${addon6_name2} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${addon6_name2} Gain Cal"
# V & I Calibration Reference Fields
####################################
# Use these to input a known value being measured by a CT or voltage transformer
number:
- platform: atm90e32
id: ${addon6_id1}
reference_voltage:
# will copy to phase_b/c for calibration reference
phase_a:
name: "${addon6_name1} Ref V 1"
reference_current:
phase_a:
name: "${ct37_name} Ref Current"
phase_b:
name: "${ct38_name} Ref Current"
phase_c:
name: "${ct39_name} Ref Current"
- platform: atm90e32
id: ${addon6_id2}
reference_voltage:
# needed to calibrate voltage registers even if not output
phase_a:
name: "${addon6_name2} Ref V 2"
reference_current:
phase_a:
name: "${ct40_name} Ref Current"
phase_b:
name: "${ct41_name} Ref Current"
phase_c:
name: "${ct42_name} Ref Current"
@@ -0,0 +1,39 @@
# Offset calibration values fine tuned via the output of the semi-automatic calibrations
# Values should be copied in from the meter's ESPHome log
# See details on semi-automatic calibrations here:
# https://esphome.io/components/sensor/atm90e32.html#calibration
sensor:
- id: !extend ${addon6_id1}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
- id: !extend ${addon6_id2}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
@@ -0,0 +1,65 @@
# Details: https://esphome.io/components/sensor/atm90e32.html#calibration
# Main Board Semi-automatic Calibration Buttons
###############################################
button:
- platform: atm90e32
id: ${main_meter_id1}
run_offset_calibration:
name: "1. Run ${main_meter_name1} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${main_meter_name1} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${main_meter_name1} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${main_meter_name1} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${main_meter_name1} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${main_meter_name1} Gain Cal"
- platform: atm90e32
id: ${main_meter_id2}
run_offset_calibration:
name: "1. Run ${main_meter_name2} Offset Cal"
clear_offset_calibration:
name: "z1. Clear ${main_meter_name2} Offset Cal"
run_power_offset_calibration:
name: "2. Run ${main_meter_name2} Power Offset Cal"
clear_power_offset_calibration:
name: "z2. Clear ${main_meter_name2} Power Offset Cal"
run_gain_calibration:
name: "3. Run ${main_meter_name2} Gain Cal"
clear_gain_calibration:
name: "z3. Clear ${main_meter_name2} Gain Cal"
# Main Board V & I Calibration Reference Fields
###############################################
# Use these to input a known value being measured by a CT or voltage transformer
number:
- platform: atm90e32
id: ${main_meter_id1}
reference_voltage:
# will copy to phase_b/c for calibration reference
phase_a:
name: "${main_meter_name1} Ref V 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:
# needed to calibrate voltage registers even if not output
phase_a:
name: "${main_meter_name2} Ref V 2"
reference_current:
phase_a:
name: "${ct4_name} Ref Current"
phase_b:
name: "${ct5_name} Ref Current"
phase_c:
name: "${ct6_name} Ref Current"
@@ -0,0 +1,39 @@
# Offset calibration values fine tuned via the output of the semi-automatic calibrations
# Values should be copied in from the meter's ESPHome log
# See details on semi-automatic calibrations here:
# https://esphome.io/components/sensor/atm90e32.html#calibration
sensor:
- id: !extend ${main_meter_id1}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
- id: !extend ${main_meter_id2}
phase_a:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_b:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
phase_c:
offset_voltage: 0
offset_current: 0
offset_active_power: 0
offset_reactive_power: 0
@@ -0,0 +1,223 @@
# CircuitSetup 6 Channel Energy Meter Main Board with 1 add-on board, 3-Phase over ethernet - 12 current channels
#
# Uses the Lilygo T-ETH-Lite ESP32S3 and the CircuitSetup 6 Channel Energy Meter Ethernet Adapter.
# Setup asumes JP12 and JP13 have been severed on the main and add-on board, and each phase has its
# own voltage transformer hooked up to the main board jack, and VA2 on each meter.
#
# Current Trasnformers must be in phase with their respective voltage:
# Phase 1: CT1-CT6 (main board, add-on board left side)
# Phase 2: CT7-CT9 (main board right)
# Phase 3: CT10-CT12 (add-on board right)
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: Energy Meter
friendly_name: CircuitSetup Energy Meter
# Interval of how often the power data is updated
update_time: 10s
# Change current_cal to the corresponding CT's that you're using
# If different CTs per current channel, remove or change "${current_cal}" from
# "gain_ct" below and replace with the CT calibration number respectively
# 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
current_cal: '27518'
# This only needs to be changed if you're using something other than the
# Jameco 9VAC Transformer:
voltage_cal: '7305'
esphome:
name: "${disp_name}"
friendly_name: "${friendly_name}"
name_add_mac_suffix: true
platformio_options:
board_build.flash_mode: dio
project:
name: circuitsetup.6c-energy-meter-ethernet
version: "1.6"
packages:
common: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_common_ethernet.yaml
# 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
web_server:
port: 80
sensor:
#IC1 Main
- platform: atm90e32
cs_pin: 8
phase_a:
voltage:
name: ${disp_name} Volts Phase 1
id: voltsPhase1
accuracy_decimals: 1
power:
name: ${disp_name} CT1 Watts
id: ct1Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT2 Watts
id: ct2Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT3 Watts
id: ct3Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
frequency:
name: ${disp_name} Freq Phase 1
line_frequency: 50Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 Main
- platform: atm90e32
cs_pin: 4
phase_a:
voltage:
name: ${disp_name} Volts Phase 2
id: voltsPhase2
accuracy_decimals: 1
power:
name: ${disp_name} CT7 Watts
id: ct7Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT8 Watts
id: ct8Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT9 Watts
id: ct9Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 50Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 1
- platform: atm90e32
cs_pin: 0
phase_a:
power:
name: ${disp_name} CT4 Watts
id: ct4Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT5 Watts
id: ct5Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT6 Watts
id: ct6Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 50Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 1
- platform: atm90e32
cs_pin: 16
phase_a:
voltage:
name: ${disp_name} Volts Phase 3
id: voltsPhase3
accuracy_decimals: 1
power:
name: ${disp_name} CT10 Watts
id: ct10Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT11 Watts
id: ct11Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT12 Watts
id: ct12Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 50Hz
gain_pga: 1X
update_interval: ${update_time}
#Total Watts Phase 1
- platform: template
name: ${disp_name} Total Watts Phase 1
id: totalWattsPhase1
lambda: return id(ct1Watts).state + id(ct2Watts).state + id(ct3Watts).state + id(ct4Watts).state + id(ct5Watts).state + id(ct6Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts Phase 2
- platform: template
name: ${disp_name} Total Watts Phase 2
id: totalWattsPhase2
lambda: return id(ct7Watts).state + id(ct8Watts).state + id(ct9Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts Phase 3
- platform: template
name: ${disp_name} Total Watts Phase 3
id: totalWattsPhase3
lambda: return id(ct10Watts).state + id(ct11Watts).state + id(ct12Watts).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(totalWattsPhase1).state + id(totalWattsPhase2).state + id(totalWattsPhase3).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
@@ -0,0 +1,459 @@
# CircuitSetup 6 Channel Energy Meter Main Board with 6 add-on boards - 42 current channels
# To reduce the number of sensors, only the power sensor for each current channel is output.
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: Energy Meter
friendly_name: CircuitSetup Energy Meter
# Interval of how often the power data is updated
update_time: 10s
# Change current_cal to the corresponding CT's that you're using
# If different CTs per current channel, remove or change "${current_cal}" from
# "gain_ct" below and replace with the CT calibration number respectively
# 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
current_cal: '11143' # 20A/25mA
# This only needs to be changed if you're using something other than the
# Jameco 9VAC Transformer:
voltage_cal: '7305'
packages:
common: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_common.yaml
sensor:
#IC1 Main
- platform: atm90e32
cs_pin: 5
phase_a:
voltage:
name: ${disp_name} Volts A Main
id: ic1Volts
accuracy_decimals: 1
power:
name: ${disp_name} CT1 Watts
id: ct1Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT2 Watts
id: ct2Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT3 Watts
id: ct3Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
frequency:
name: ${disp_name} Freq A Main
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 Main
- platform: atm90e32
cs_pin: 4
phase_a:
power:
name: ${disp_name} CT4 Watts
id: ct4Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT5 Watts
id: ct5Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
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 1
- platform: atm90e32
cs_pin: 0
phase_a:
power:
name: ${disp_name} CT7 Watts
id: ct7Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT8 Watts
id: ct8Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
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 1
- platform: atm90e32
cs_pin: 16
phase_a:
power:
name: ${disp_name} CT10 Watts
id: ct10Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT11 Watts
id: ct11Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
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}
#IC1 AddOn 2
- platform: atm90e32
cs_pin: 27
phase_a:
power:
name: ${disp_name} CT13 Watts
id: ct13Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT14 Watts
id: ct14Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT15 Watts
id: ct15Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 2
- platform: atm90e32
cs_pin: 17
phase_a:
power:
name: ${disp_name} CT16 Watts
id: ct16Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT17 Watts
id: ct17Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT18 Watts
id: ct18Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 3
- platform: atm90e32
#do not use GPIO2 if ESP32 has an on-board LED assigned to it
cs_pin: 2
phase_a:
power:
name: ${disp_name} CT19 Watts
id: ct19Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT20 Watts
id: ct20Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT21 Watts
id: ct21Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 3
- platform: atm90e32
cs_pin: 21
phase_a:
power:
name: ${disp_name} CT22 Watts
id: ct22Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT23 Watts
id: ct23Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT24 Watts
id: ct24Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 4
- platform: atm90e32
cs_pin: 13
phase_a:
power:
name: ${disp_name} CT25 Watts
id: ct25Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT26 Watts
id: ct26Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT27 Watts
id: ct27Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 4
- platform: atm90e32
cs_pin: 22
phase_a:
power:
name: ${disp_name} CT28 Watts
id: ct28Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT29 Watts
id: ct29Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT30 Watts
id: ct30Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 5
- platform: atm90e32
cs_pin: 14
phase_a:
power:
name: ${disp_name} CT31 Watts
id: ct31Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT32 Watts
id: ct32Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT33 Watts
id: ct33Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 5
- platform: atm90e32
cs_pin: 25
phase_a:
power:
name: ${disp_name} CT34 Watts
id: ct34Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT35 Watts
id: ct35Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT36 Watts
id: ct36Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 6
- platform: atm90e32
cs_pin: 15
phase_a:
power:
name: ${disp_name} CT37 Watts
id: ct37Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT38 Watts
id: ct38Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT39 Watts
id: ct39Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 6
- platform: atm90e32
cs_pin: 26
phase_a:
power:
name: ${disp_name} CT40 Watts
id: ct40Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT41 Watts
id: ct41Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT42 Watts
id: ct42Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#Total Watts Main
- platform: template
name: ${disp_name} Total Watts Main
id: totalWattsMain
lambda: return id(ct1Watts).state + id(ct2Watts).state + id(ct3Watts).state + id(ct4Watts).state + id(ct5Watts).state + id(ct6Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn1
- platform: template
name: ${disp_name} Total Watts Add-on1
id: totalWattsAddOn1
lambda: return id(ct7Watts).state + id(ct8Watts).state + id(ct9Watts).state + id(ct10Watts).state + id(ct11Watts).state + id(ct12Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn2
- platform: template
name: ${disp_name} Total Watts Add-on2
id: totalWattsAddOn2
lambda: return id(ct13Watts).state + id(ct14Watts).state + id(ct15Watts).state + id(ct16Watts).state + id(ct17Watts).state + id(ct18Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn3
- platform: template
name: ${disp_name} Total Watts Add-on3
id: totalWattsAddOn3
lambda: return id(ct19Watts).state + id(ct20Watts).state + id(ct21Watts).state + id(ct22Watts).state + id(ct23Watts).state + id(ct24Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn4
- platform: template
name: ${disp_name} Total Watts Add-on4
id: totalWattsAddOn4
lambda: return id(ct25Watts).state + id(ct26Watts).state + id(ct27Watts).state + id(ct28Watts).state + id(ct29Watts).state + id(ct30Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn5
- platform: template
name: ${disp_name} Total Watts Add-on5
id: totalWattsAddOn5
lambda: return id(ct31Watts).state + id(ct32Watts).state + id(ct33Watts).state + id(ct34Watts).state + id(ct35Watts).state + id(ct36Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn6
- platform: template
name: ${disp_name} Total Watts Add-on6
id: totalWattsAddOn6
lambda: return id(ct37Watts).state + id(ct38Watts).state + id(ct39Watts).state + id(ct40Watts).state + id(ct41Watts).state + id(ct42Watts).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).state + id(totalWattsAddOn1).state + id(totalWattsAddOn2).state + id(totalWattsAddOn3).state + id(totalWattsAddOn4).state + id(totalWattsAddOn5).state + id(totalWattsAddOn6).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
@@ -0,0 +1,481 @@
# CircuitSetup 6 Channel Energy Meter Main Board with 6 add-on boards over ethernet - 42 current channels
#
# To reduce the number of sensors, only the power sensor for each current channel is output.
#
# Uses the Lilygo T-ETH-Lite ESP32S3 and the CircuitSetup 6 Channel Energy Meter Ethernet Adapter
# See all options at https://esphome.io/components/sensor/atm90e32.html
#
# CS pins for the ESP32-S3 are different, and must be changed if previously using a WiFi ESP32:
#Main board:
# 5 -> 8
# 4 -> 4 (stays the same)
#Add-on boards:
#CS (CT1-3):
# 0 -> 0
# 27 -> 18
# 2 -> 2
# 13 -> 3
# 14 -> 41
# 15 -> 15
#CS2 (CT3-6):
# 16 -> 16
# 17 -> 17
# 21 -> 21
# 22 -> 20
# 25 -> 39
# 26 -> 38
substitutions:
# Change the disp_name to something you want
disp_name: Energy Meter
friendly_name: CircuitSetup Energy Meter
# Interval of how often the power data is updated
update_time: 10s
# Change current_cal to the corresponding CT's that you're using
# If different CTs per current channel, remove or change "${current_cal}" from
# "gain_ct" below and replace with the CT calibration number respectively
# 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
current_cal: '11143' # 20A/25mA
# This only needs to be changed if you're using something other than the
# Jameco 9VAC Transformer:
voltage_cal: '7305'
packages:
common: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_common_ethernet.yaml
sensor:
#IC1 Main
- platform: atm90e32
cs_pin: 8
phase_a:
voltage:
name: ${disp_name} Volts A Main
id: ic1Volts
accuracy_decimals: 1
power:
name: ${disp_name} CT1 Watts
id: ct1Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT2 Watts
id: ct2Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT3 Watts
id: ct3Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
frequency:
name: ${disp_name} Freq A Main
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 Main
- platform: atm90e32
cs_pin: 4
phase_a:
power:
name: ${disp_name} CT4 Watts
id: ct4Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT5 Watts
id: ct5Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
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 1
- platform: atm90e32
cs_pin: 0
phase_a:
power:
name: ${disp_name} CT7 Watts
id: ct7Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT8 Watts
id: ct8Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
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 1
- platform: atm90e32
cs_pin: 16
phase_a:
power:
name: ${disp_name} CT10 Watts
id: ct10Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT11 Watts
id: ct11Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
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}
#IC1 AddOn 2
- platform: atm90e32
cs_pin: 18
phase_a:
power:
name: ${disp_name} CT13 Watts
id: ct13Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT14 Watts
id: ct14Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT15 Watts
id: ct15Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 2
- platform: atm90e32
cs_pin: 17
phase_a:
power:
name: ${disp_name} CT16 Watts
id: ct16Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT17 Watts
id: ct17Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT18 Watts
id: ct18Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 3
- platform: atm90e32
cs_pin: 2
phase_a:
power:
name: ${disp_name} CT19 Watts
id: ct19Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT20 Watts
id: ct20Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT21 Watts
id: ct21Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 3
- platform: atm90e32
cs_pin: 21
phase_a:
power:
name: ${disp_name} CT22 Watts
id: ct22Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT23 Watts
id: ct23Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT24 Watts
id: ct24Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 4
- platform: atm90e32
cs_pin: 3
phase_a:
power:
name: ${disp_name} CT25 Watts
id: ct25Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT26 Watts
id: ct26Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT27 Watts
id: ct27Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 4
- platform: atm90e32
cs_pin: 20
phase_a:
power:
name: ${disp_name} CT28 Watts
id: ct28Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT29 Watts
id: ct29Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT30 Watts
id: ct30Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 5
- platform: atm90e32
cs_pin: 41
phase_a:
power:
name: ${disp_name} CT31 Watts
id: ct31Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT32 Watts
id: ct32Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT33 Watts
id: ct33Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 5
- platform: atm90e32
cs_pin: 39
phase_a:
power:
name: ${disp_name} CT34 Watts
id: ct34Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT35 Watts
id: ct35Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT36 Watts
id: ct36Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 6
- platform: atm90e32
cs_pin: 15
phase_a:
power:
name: ${disp_name} CT37 Watts
id: ct37Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT38 Watts
id: ct38Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT39 Watts
id: ct39Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 6
- platform: atm90e32
cs_pin: 38
phase_a:
power:
name: ${disp_name} CT40 Watts
id: ct40Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
power:
name: ${disp_name} CT41 Watts
id: ct41Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_c:
power:
name: ${disp_name} CT42 Watts
id: ct42Watts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#Total Watts Main
- platform: template
name: ${disp_name} Total Watts Main
id: totalWattsMain
lambda: return id(ct1Watts).state + id(ct2Watts).state + id(ct3Watts).state + id(ct4Watts).state + id(ct5Watts).state + id(ct6Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn1
- platform: template
name: ${disp_name} Total Watts Add-on1
id: totalWattsAddOn1
lambda: return id(ct7Watts).state + id(ct8Watts).state + id(ct9Watts).state + id(ct10Watts).state + id(ct11Watts).state + id(ct12Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn2
- platform: template
name: ${disp_name} Total Watts Add-on2
id: totalWattsAddOn2
lambda: return id(ct13Watts).state + id(ct14Watts).state + id(ct15Watts).state + id(ct16Watts).state + id(ct17Watts).state + id(ct18Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn3
- platform: template
name: ${disp_name} Total Watts Add-on3
id: totalWattsAddOn3
lambda: return id(ct19Watts).state + id(ct20Watts).state + id(ct21Watts).state + id(ct22Watts).state + id(ct23Watts).state + id(ct24Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn4
- platform: template
name: ${disp_name} Total Watts Add-on4
id: totalWattsAddOn4
lambda: return id(ct25Watts).state + id(ct26Watts).state + id(ct27Watts).state + id(ct28Watts).state + id(ct29Watts).state + id(ct30Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn5
- platform: template
name: ${disp_name} Total Watts Add-on5
id: totalWattsAddOn5
lambda: return id(ct31Watts).state + id(ct32Watts).state + id(ct33Watts).state + id(ct34Watts).state + id(ct35Watts).state + id(ct36Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Watts AddOn6
- platform: template
name: ${disp_name} Total Watts Add-on6
id: totalWattsAddOn6
lambda: return id(ct37Watts).state + id(ct38Watts).state + id(ct39Watts).state + id(ct40Watts).state + id(ct41Watts).state + id(ct42Watts).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).state + id(totalWattsAddOn1).state + id(totalWattsAddOn2).state + id(totalWattsAddOn3).state + id(totalWattsAddOn4).state + id(totalWattsAddOn5).state + id(totalWattsAddOn6).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
@@ -0,0 +1,272 @@
# 6 Channel Example Config for Split Single Phase whole house, solar, and 2 other circuits
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: Energy Meter
friendly_name: CircuitSetup Energy Meter
# Interval of how often the power data is updated
update_time: 10s
# Change current_cal to the corresponding CT's that you're using
# If different CTs per current channel, remove or change "${current_cal}" from
# "gain_ct" below and replace with the CT calibration number respectively
# 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
house_current_cal: '27518'
solar_current_cal: '27518'
current_cal: '27518'
# This only needs to be changed if you're using something other than the
# Jameco 9VAC Transformer:
voltage_cal: '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:
common: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_common.yaml
# 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:
ap:
# 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:
#IC1
- platform: atm90e32
cs_pin: 5
#CT1
phase_a:
voltage:
name: ${disp_name} Volts
id: HouseL1Volts
accuracy_decimals: 1
current:
name: ${disp_name} House L1 Amps
id: HouseL1Amps
power:
name: ${disp_name} House L1 Watts
id: HouseL1Watts
gain_voltage: ${voltage_cal}
gain_ct: ${house_current_cal}
#CT2
phase_b:
current:
name: ${disp_name} Solar L1 Amps
id: SolarL1Amps
power:
name: ${disp_name} Solar L1 Watts
id: SolarL1Watts
gain_voltage: ${voltage_cal}
gain_ct: ${solar_current_cal}
#CT3
phase_c:
current:
name: ${disp_name} Hot Water Amps
id: HotWaterAmps
power:
name: ${disp_name} Hot Water Watts
id: HotWaterWatts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
frequency:
name: ${disp_name} Freq
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2
- platform: atm90e32
cs_pin: 4
#CT4
phase_a:
current:
name: ${disp_name} Dryer Amps
id: DryerAmps
power:
name: ${disp_name} Dryer Watts
id: DryerWatts
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
#CT5
phase_b:
current:
name: ${disp_name} Solar L2 Amps
id: SolarL2Amps
power:
name: ${disp_name} CT5 Watts
id: SolarL2Watts
gain_voltage: ${voltage_cal}
gain_ct: ${solar_current_cal}
#CT6
phase_c:
current:
name: ${disp_name} House L2 Amps
id: HouseL2Amps
power:
name: ${disp_name} House L2 Watts
id: HouseL2Watts
gain_voltage: ${voltage_cal}
gain_ct: ${house_current_cal}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#Total House Amps
- platform: template
name: ${disp_name} Total House Amps
id: totalHouseAmps
lambda: return id(HouseL1Amps).state + id(HouseL2Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total House Watts
- platform: template
name: ${disp_name} Total House Watts
id: totalHouseWatts
lambda: return id(HouseL1Watts).state + id(HouseL2Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total House Watts Negative
- platform: template
name: ${disp_name} Total House Return To Grid Watts
id: returnToGridWatts
lambda: |-
if (id(totalHouseWatts).state > 0) {
return 0;
} else {
return abs(id(totalHouseWatts).state) ;
}
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#House Negative kWh (HA Return to Grid)
- platform: total_daily_energy
name: ${disp_name} House Return To Grid kWh
power_id: returnToGridWatts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
#Total House Watts Positive
- platform: template
name: ${disp_name} Total House Positive Watts
id: totalHousePositiveWatts
lambda: |-
if (id(totalHouseWatts).state < 0) {
return 0;
} else {
return id(totalHouseWatts).state ;
}
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#House positive kWh
- platform: total_daily_energy
name: ${disp_name} House kWh
power_id: totalHousePositiveWatts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
#Total Solar Amps
- platform: template
name: ${disp_name} Total Solar Amps
id: totalSolarAmps
lambda: return id(SolarL1Amps).state + id(SolarL2Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Solar Watts
- platform: template
name: ${disp_name} Total Solar Watts
id: totalSolarWatts
lambda: return id(SolarL1Watts).state + id(SolarL2Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Solar kWh
- platform: total_daily_energy
name: ${disp_name} Solar kWh
power_id: totalSolarWatts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
#Individual Hot Water kWh
- platform: total_daily_energy
name: ${disp_name} Hot Water kWh
power_id: HotWaterWatts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
#Individual Dryer kWh
- platform: total_daily_energy
name: ${disp_name} Dryer kWh
power_id: DryerWatts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
@@ -0,0 +1,205 @@
substitutions:
# Change the disp_name to something you want
disp_name: 6C
# Interval of how often the power is updated
update_time: 10s
# 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
current_cal: '27518'
# Jameco 9VAC Transformer: 42620
voltage_cal: '42620'
esphome:
name: 6chan_energy_meter
platform: ESP32
board: nodemcu-32s
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_pass
manual_ip:
static_ip: !secret ip_eh_nrgnode
gateway: !secret ip_gateway
subnet: !secret ip_subnet
dns1: !secret ip_dns1
# 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
update_interval: 60s
#IC1
- platform: atm90e32
cs_pin: 5
phase_a:
voltage:
name: ${disp_name} Volts A
id: ic1Volts
accuracy_decimals: 1
# filters:
# - multiply: 2.0
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 value by 2 or 4 by uncommenting the filter below
# filters:
# - multiply: 2.0
gain_voltage: ${voltage_cal}
# Voltage using a 9VAC power transformer
# Note: If you can not get the voltage correct with the highest gain of 65535, uncomment the 2.0 multiply filter above and lower the gain as needed
gain_ct: ${current_cal}
phase_b:
current:
name: ${disp_name} CT2 Amps
id: ct2Amps
gain_ct: ${current_cal}
phase_c:
current:
name: ${disp_name} CT3 Amps
id: ct3Amps
gain_ct: ${current_cal}
frequency:
name: ${disp_name} Freq A
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2
- platform: atm90e32
cs_pin: 4
phase_a:
voltage:
name: ${disp_name} Volts B
id: ic2Volts
accuracy_decimals: 1
current:
name: ${disp_name} CT4 Amps
id: ct4Amps
gain_voltage: ${voltage_cal}
gain_ct: ${current_cal}
phase_b:
current:
name: ${disp_name} CT5 Amps
id: ct5Amps
gain_ct: ${current_cal}
phase_c:
current:
name: ${disp_name} CT6 Amps
id: ct6Amps
gain_ct: ${current_cal}
frequency:
name: ${disp_name} Freq B
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#Watts per channel
- platform: template
name: ${disp_name} CT1 Watts
id: ct1Watts
lambda: return id(ct1Amps).state * id(ic1Volts).state;
accuracy_decimals: 0
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
- platform: template
name: ${disp_name} CT2 Watts
id: ct2Watts
lambda: return id(ct2Amps).state * id(ic1Volts).state;
accuracy_decimals: 0
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
- platform: template
name: ${disp_name} CT3 Watts
id: ct3Watts
lambda: return id(ct3Amps).state * id(ic1Volts).state;
accuracy_decimals: 0
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
- platform: template
name: ${disp_name} CT4 Watts
id: ct4Watts
lambda: return id(ct4Amps).state * id(ic2Volts).state;
accuracy_decimals: 0
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
- platform: template
name: ${disp_name} CT5 Watts
id: ct5Watts
lambda: return id(ct5Amps).state * id(ic2Volts).state;
accuracy_decimals: 0
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
- platform: template
name: ${disp_name} CT6 Watts
id: ct6Watts
lambda: return id(ct6Amps).state * id(ic2Volts).state;
accuracy_decimals: 0
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
#Total Amps
- platform: template
name: ${disp_name} Total Amps
id: totalAmps
lambda: return id(ct1Amps).state + id(ct2Amps).state + id(ct3Amps).state + id(ct4Amps).state + id(ct5Amps).state + id(ct6Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts
- platform: template
name: ${disp_name} Total Watts
id: totalWatts
lambda: return id(totalAmps).state * id(ic1Volts).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
switch:
- platform: restart
name: ${disp_name} Restart
time:
- platform: sntp
id: sntp_time
@@ -0,0 +1,420 @@
# CircuitSetup 6 Channel Energy Meter Main Board example config
# See all options at https://esphome.io/components/sensor/atm90e32.html
substitutions:
# Change the disp_name to something you want
disp_name: Energy-Meter
friendly_name: CircuitSetup Energy Meter Wifi
# Interval of how often the power data is updated
update_time: 60s
# Change current_cal to the corresponding CT's that you're using
# If different CTs per current channel, remove or change "${current_cal}" from
# "gain_ct" below and replace with the CT calibration number respectively
# 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
current_cal_ct1: '27518'
current_cal_ct2: '27518'
current_cal_ct3: '27518'
current_cal_ct4: '27518'
current_cal_ct5: '27518'
current_cal_ct6: '27518'
# This only needs to be changed if you're using something other than the
# Jameco 9VAC Transformer:
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
#packages:
# common: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_common.yaml
esphome:
name: energy-meter
friendly_name: "${friendly_name}"
name_add_mac_suffix: true
min_version: '2025.5.0'
project:
name: circuitsetup.6c-energy-meter
version: "1.5"
esp32:
board: nodemcu-32s
captive_portal:
improv_serial:
logger:
level: DEBUG
# Enable OTA updating
ota:
- platform: esphome
web_server:
port: 80
spi:
interface: software
clk_pin: 18
miso_pin: 19
mosi_pin: 23
time:
- platform: homeassistant
id: homeassistant_time
dashboard_import:
package_import_url: github://CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/Software/ESPHome/6chan_main_calibration_beta.yaml
import_full_config: false
api:
wifi:
# Set up a wifi access point
ap:
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: ${disp_name} Total Amps
id: totalAmps
lambda: return id(ct1Amps).state + id(ct2Amps).state + id(ct3Amps).state + id(ct4Amps).state + id(ct5Amps).state + id(ct6Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts
- platform: template
name: ${disp_name} Total Watts
id: totalWatts
lambda: return id(ct1Watts).state + id(ct2Watts).state + id(ct3Watts).state + id(ct4Watts).state + id(ct5Watts).state + id(ct6Watts).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
#wifi diagnostic
- platform: wifi_signal
name: ${disp_name} WiFi
id: wifi_signal_db
entity_category: diagnostic
- platform: copy
source_id: wifi_signal_db
id: wifi_signal_pct
name: ${disp_name} WiFi %
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "%"
entity_category: diagnostic
switch:
- platform: restart
name: ${disp_name} Restart
entity_category: diagnostic
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
# freq_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:
# will copy to phase_b/c for calibration reference
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:
# needed to calibrate voltage registers even if not output
phase_a:
name: "Ref Voltage 2"
reference_current:
phase_a:
name: "${ct4_name} Ref Current"
phase_b:
name: "${ct5_name} Ref Current"
phase_c:
name: "${ct6_name} Ref Current"
@@ -0,0 +1,100 @@
# CircuitSetup 6 Channel Energy Meter 1st Add-on board config
# Assumes jumpers are both in the 1st position
sensor:
#IC1 AddOn 1
############
- platform: atm90e32
release_device: true
cs_pin: 0
id: ${addon1_id1}
phase_a:
current:
name: ${ct7_name} Amps
id: ct7Amps
power:
name: ${ct7_name} Watts
id: ct7Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct7}
phase_b:
current:
name: ${ct8_name} Amps
id: ct8Amps
power:
name: ${ct8_name} Watts
id: ct8Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct8}
phase_c:
current:
name: ${ct9_name} Amps
id: ct9Amps
power:
name: ${ct9_name} Watts
id: ct9Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct9}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#IC2 AddOn 1
############
- platform: atm90e32
release_device: true
cs_pin: 16
id: ${addon1_id2}
phase_a:
current:
name: ${ct10_name} Amps
id: ct10Amps
power:
name: ${ct10_name} Watts
id: ct10Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct10}
phase_b:
current:
name: ${ct11_name} Amps
id: ct11Amps
power:
name: ${ct11_name} Watts
id: ct11Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct11}
phase_c:
current:
name: ${ct12_name} Amps
id: ct12Amps
power:
name: ${ct12_name} Watts
id: ct12Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct12}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#Total Amps AddOn1
- platform: template
name: ${friendly_name} Total Amps Add-on1
id: totalAmpsAddOn1
lambda: return id(ct7Amps).state + id(ct8Amps).state + id(ct9Amps).state + id(ct10Amps).state + id(ct11Amps).state + id(ct12Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts AddOn1
- platform: template
name: ${friendly_name} Total Watts Add-on1
id: totalWattsAddOn1
lambda: return id(ct7Watts).state + id(ct8Watts).state + id(ct9Watts).state + id(ct10Watts).state + id(ct11Watts).state + id(ct12Watts).state ;
accuracy_decimals: 2
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
@@ -0,0 +1,100 @@
# CircuitSetup 6 Channel Energy Meter 2nd Add-on board config
# Assumes jumpers are both in the 2nd position
sensor:
#IC1 AddOn 2
############
- platform: atm90e32
cs_pin: 27
release_device: true
id: ${addon2_id1}
phase_a:
current:
name: ${ct13_name} Amps
id: ct13Amps
power:
name: ${ct13_name} Watts
id: ct13Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct13}
phase_b:
current:
name: ${ct14_name} Amps
id: ct14Amps
power:
name: ${ct14_name} Watts
id: ct14Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct14}
phase_c:
current:
name: ${ct15_name} Amps
id: ct15Amps
power:
name: ${ct15_name} Watts
id: ct15Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct15}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#IC2 AddOn 2
############
- platform: atm90e32
release_device: true
cs_pin: 17
id: ${addon2_id2}
phase_a:
current:
name: ${ct16_name} Amps
id: ct16Amps
power:
name: ${ct16_name} Watts
id: ct16Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct16}
phase_b:
current:
name: ${ct17_name} Amps
id: ct17Amps
power:
name: ${ct17_name} Watts
id: ct17Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct17}
phase_c:
current:
name: ${ct18_name} Amps
id: ct18Amps
power:
name: ${ct18_name} Watts
id: ct18Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct18}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#Total Amps AddOn2
- platform: template
name: ${friendly_name} Total Amps Add-on2
id: totalAmpsAddOn2
lambda: return id(ct13Amps).state + id(ct14Amps).state + id(ct15Amps).state + id(ct16Amps).state + id(ct17Amps).state + id(ct18Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts AddOn2
- platform: template
name: ${friendly_name} Total Watts Add-on2
id: totalWattsAddOn2
lambda: return id(ct13Watts).state + id(ct14Watts).state + id(ct15Watts).state + id(ct16Watts).state + id(ct17Watts).state + id(ct18Watts).state ;
accuracy_decimals: 2
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
@@ -0,0 +1,101 @@
# CircuitSetup 6 Channel Energy Meter 3rd Add-on board config
# Assumes jumpers are both in the 3rd position
sensor:
#IC1 AddOn 3
############
- platform: atm90e32
release_device: true
#if ESP32 has an LED for GPIO2, remove jumper or ESP32 from meter stack before programming via serial
cs_pin: 2
id: ${addon3_id1}
phase_a:
current:
name: ${ct19_name} Amps
id: ct19Amps
power:
name: ${ct19_name} Watts
id: ct19Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct19}
phase_b:
current:
name: ${ct20_name} Amps
id: ct20Amps
power:
name: ${ct20_name} Watts
id: ct20Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct20}
phase_c:
current:
name: ${ct21_name} Amps
id: ct21Amps
power:
name: ${ct21_name} Watts
id: ct21Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct21}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#IC2 AddOn 3
############
- platform: atm90e32
release_device: true
cs_pin: 21
id: ${addon3_id2}
phase_a:
current:
name: ${ct22_name} Amps
id: ct22Amps
power:
name: ${ct22_name} Watts
id: ct22Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct22}
phase_b:
current:
name: ${ct23_name} Amps
id: ct23Amps
power:
name: ${ct23_name} Watts
id: ct23Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct23}
phase_c:
current:
name: ${ct24_name} Amps
id: ct24Amps
power:
name: ${ct24_name} Watts
id: ct24Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct24}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#Total Amps AddOn3
- platform: template
name: ${friendly_name} Total Amps Add-on3
id: totalAmpsAddOn3
lambda: return id(ct19Amps).state + id(ct20Amps).state + id(ct21Amps).state + id(ct22Amps).state + id(ct23Amps).state + id(ct24Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts AddOn3
- platform: template
name: ${friendly_name} Total Watts Add-on3
id: totalWattsAddOn3
lambda: return id(ct19Watts).state + id(ct20Watts).state + id(ct21Watts).state + id(ct22Watts).state + id(ct23Watts).state + id(ct24Watts).state ;
accuracy_decimals: 2
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
@@ -0,0 +1,100 @@
# CircuitSetup 6 Channel Energy Meter 4th Add-on board config
# Assumes jumpers are both in the 4th position
sensor:
#IC1 AddOn 4
############
- platform: atm90e32
release_device: true
cs_pin: 13
id: ${addon4_id1}
phase_a:
current:
name: ${ct25_name} Amps
id: ct25Amps
power:
name: ${ct25_name} Watts
id: ct25Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct25}
phase_b:
current:
name: ${ct26_name} Amps
id: ct26Amps
power:
name: ${ct26_name} Watts
id: ct26Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct26}
phase_c:
current:
name: ${ct27_name} Amps
id: ct27Amps
power:
name: ${ct27_name} Watts
id: ct27Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct27}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#IC2 AddOn 4
############
- platform: atm90e32
release_device: true
cs_pin: 22
id: ${addon4_id2}
phase_a:
current:
name: ${ct28_name} Amps
id: ct28Amps
power:
name: ${ct28_name} Watts
id: ct28Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct28}
phase_b:
current:
name: ${ct29_name} Amps
id: ct29Amps
power:
name: ${ct29_name} Watts
id: ct29Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct29}
phase_c:
current:
name: ${ct30_name} Amps
id: ct30Amps
power:
name: ${ct30_name} Watts
id: ct30Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct30}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#Total Amps AddOn4
- platform: template
name: ${friendly_name} Total Amps Add-on4
id: totalAmpsAddOn4
lambda: return id(ct25Amps).state + id(ct26Amps).state + id(ct27Amps).state + id(ct28Amps).state + id(ct29Amps).state + id(ct30Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts AddOn4
- platform: template
name: ${friendly_name} Total Watts Add-on4
id: totalWattsAddOn4
lambda: return id(ct25Watts).state + id(ct26Watts).state + id(ct27Watts).state + id(ct28Watts).state + id(ct29Watts).state + id(ct30Watts).state ;
accuracy_decimals: 2
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
@@ -0,0 +1,100 @@
# CircuitSetup 6 Channel Energy Meter 5th Add-on board config
# Assumes jumpers are both in the 5th position
sensor:
#IC1 AddOn 5
############
- platform: atm90e32
release_device: true
cs_pin: 14
id: ${addon5_id1}
phase_a:
current:
name: ${ct31_name} Amps
id: ct31Amps
power:
name: ${ct31_name} Watts
id: ct31Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct31}
phase_b:
current:
name: ${ct32_name} Amps
id: ct32Amps
power:
name: ${ct32_name} Watts
id: ct32Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct32}
phase_c:
current:
name: ${ct33_name} Amps
id: ct33Amps
power:
name: ${ct33_name} Watts
id: ct33Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct33}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#IC2 AddOn 5
############
- platform: atm90e32
release_device: true
cs_pin: 25
id: ${addon5_id2}
phase_a:
current:
name: ${ct34_name} Amps
id: ct34Amps
power:
name: ${ct34_name} Watts
id: ct34Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct34}
phase_b:
current:
name: ${ct35_name} Amps
id: ct35Amps
power:
name: ${ct35_name} Watts
id: ct35Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct35}
phase_c:
current:
name: ${ct36_name} Amps
id: ct36Amps
power:
name: ${ct36_name} Watts
id: ct36Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct36}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#Total Amps AddOn5
- platform: template
name: ${friendly_name} Total Amps Add-on5
id: totalAmpsAddOn5
lambda: return id(ct31Amps).state + id(ct32Amps).state + id(ct33Amps).state + id(ct34Amps).state + id(ct35Amps).state + id(ct36Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts AddOn5
- platform: template
name: ${friendly_name} Total Watts Add-on5
id: totalWattsAddOn5
lambda: return id(ct31Watts).state + id(ct32Watts).state + id(ct33Watts).state + id(ct34Watts).state + id(ct35Watts).state + id(ct36Watts).state ;
accuracy_decimals: 2
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
@@ -0,0 +1,100 @@
# CircuitSetup 6 Channel Energy Meter 6th Add-on board config
# Assumes jumpers are both in the 6th position
sensor:
#IC1 AddOn 6
############
- platform: atm90e32
release_device: true
cs_pin: 15
id: ${addon6_id1}
phase_a:
current:
name: ${ct37_name} Amps
id: ct37Amps
power:
name: ${ct37_name} Watts
id: ct37Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct37}
phase_b:
current:
name: ${ct38_name} Amps
id: ct38Amps
power:
name: ${ct38_name} Watts
id: ct38Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct38}
phase_c:
current:
name: ${ct39_name} Amps
id: ct39Amps
power:
name: ${ct39_name} Watts
id: ct39Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct39}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#IC2 AddOn 6
############
- platform: atm90e32
release_device: true
cs_pin: 26
id: ${addon6_id2}
phase_a:
current:
name: ${ct40_name} Amps
id: ct40Amps
power:
name: ${ct40_name} Watts
id: ct40Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct40}
phase_b:
current:
name: ${ct41_name} Amps
id: ct41Amps
power:
name: ${ct41_name} Watts
id: ct41Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct41}
phase_c:
current:
name: ${ct42_name} Amps
id: ct42Amps
power:
name: ${ct42_name} Watts
id: ct42Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct42}
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#Total Amps AddOn6
- platform: template
name: ${friendly_name} Total Amps Add-on6
id: totalAmpsAddOn6
lambda: return id(ct37Amps).state + id(ct38Amps).state + id(ct39Amps).state + id(ct40Amps).state + id(ct41Amps).state + id(ct42Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts AddOn6
- platform: template
name: ${friendly_name} Total Watts Add-on6
id: totalWattsAddOn6
lambda: return id(ct37Watts).state + id(ct38Watts).state + id(ct39Watts).state + id(ct40Watts).state + id(ct41Watts).state + id(ct42Watts).state ;
accuracy_decimals: 2
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
@@ -0,0 +1,123 @@
sensor:
# Main IC1
#########
- platform: atm90e32
release_device: true
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
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct1}
phase_b:
current:
name: ${ct2_name} Amps
id: ct2Amps
power:
name: ${ct2_name} Watts
id: ct2Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct2}
phase_c:
current:
name: ${ct3_name} Amps
id: ct3Amps
power:
name: ${ct3_name} Watts
id: ct3Watts
gain_voltage: ${voltage_cal1}
gain_ct: ${current_cal_ct3}
frequency:
name: Frequency 1
chip_temperature:
name: ${main_meter_name1} Chip Temp
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
# Main IC2
##########
- platform: atm90e32
release_device: true
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
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct4}
phase_b:
current:
name: ${ct5_name} Amps
id: ct5Amps
power:
name: ${ct5_name} Watts
id: ct5Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct5}
phase_c:
current:
name: ${ct6_name} Amps
id: ct6Amps
power:
name: ${ct6_name} Watts
id: ct6Watts
gain_voltage: ${voltage_cal2}
gain_ct: ${current_cal_ct6}
#this is only needed if monitoring 2 voltages
# frequency:
# name: Frequency 2
chip_temperature:
name: ${main_meter_name2} Chip Temp
line_frequency: ${electric_freq}
gain_pga: 1X
update_interval: ${update_time}
enable_offset_calibration: ${offset_calibration}
enable_gain_calibration: ${gain_calibration}
#Total Amps Main
################
- platform: template
name: ${friendly_name} Total Amps Main
id: totalAmpsMain
lambda: return id(ct1Amps).state + id(ct2Amps).state + id(ct3Amps).state + id(ct4Amps).state + id(ct5Amps).state + id(ct6Amps).state ;
accuracy_decimals: 2
unit_of_measurement: A
device_class: current
update_interval: ${update_time}
#Total Watts Main
#################
- platform: template
name: ${friendly_name} Total Watts Main
id: totalWattsMain
lambda: return id(ct1Watts).state + id(ct2Watts).state + id(ct3Watts).state + id(ct4Watts).state + id(ct5Watts).state + id(ct6Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
update_interval: ${update_time}
@@ -0,0 +1,123 @@
# This file contains power quality values that are available for each phase
# Enabling these on every current channel is possible, but will produce a lot of data
# and sensors that are likely not needed.
# More details on each sensor here: https://esphome.io/components/sensor/atm90e32.html#configuration-variables
sensor:
- id: !extend ${addon1_id1}
phase_a:
reactive_power:
name: ${ct7_name} VAR
id: ct7VAR
apparent_power:
name: ${ct7_name} VA
id: ct7VA
harmonic_power:
name: ${ct7_name} Harmonic
id: ct7Har
power_factor:
name: ${ct7_name} Power Factor
id: ct7PF
phase_angle:
name: ${ct7_name} Phase Angle
id: ct7Angle
peak_current:
name: ${ct7_name} Peak A
id: ct7Peak
phase_b:
reactive_power:
name: ${ct8_name} VAR
id: ct8VAR
apparent_power:
name: ${ct8_name} VA
id: ct8VA
harmonic_power:
name: ${ct8_name} Harmonic
id: ct8Har
power_factor:
name: ${ct8_name} Power Factor
id: ct8PF
phase_angle:
name: ${ct8_name} Phase Angle
id: ct8Angle
peak_current:
name: ${ct8_name} Peak A
id: ct8Peak
phase_c:
reactive_power:
name: ${ct9_name} VAR
id: ct9VAR
apparent_power:
name: ${ct9_name} VA
id: ct9VA
harmonic_power:
name: ${ct9_name} Harmonic
id: ct9Har
power_factor:
name: ${ct9_name} Power Factor
id: ct9PF
phase_angle:
name: ${ct9_name} Phase Angle
id: ct9Angle
peak_current:
name: ${ct9_name} Peak A
id: ct9Peak
- id: !extend ${addon1_id2}
phase_a:
reactive_power:
name: ${ct10_name} VAR
id: ct10VAR
apparent_power:
name: ${ct10_name} VA
id: ct10VA
harmonic_power:
name: ${ct10_name} Harmonic
id: ct10Har
power_factor:
name: ${ct10_name} Power Factor
id: ct10PF
phase_angle:
name: ${ct10_name} Phase Angle
id: ct10Angle
peak_current:
name: ${ct10_name} Peak A
id: ct10Peak
phase_b:
reactive_power:
name: ${ct11_name} VAR
id: ct11VAR
apparent_power:
name: ${ct11_name} VA
id: ct11VA
harmonic_power:
name: ${ct11_name} Harmonic
id: ct11Har
power_factor:
name: ${ct11_name} Power Factor
id: ct11PF
phase_angle:
name: ${ct11_name} Phase Angle
id: ct11Angle
peak_current:
name: ${ct11_name} Peak A
id: ct11Peak
phase_c:
reactive_power:
name: ${ct12_name} VAR
id: ct12VAR
apparent_power:
name: ${ct12_name} VA
id: ct12VA
harmonic_power:
name: ${ct12_name} Harmonic
id: ct12Har
power_factor:
name: ${ct12_name} Power Factor
id: ct12PF
phase_angle:
name: ${ct12_name} Phase Angle
id: ct12Angle
peak_current:
name: ${ct12_name} Peak A
id: ct12Peak
@@ -0,0 +1,123 @@
# This file contains power quality values that are available for each phase
# Enabling these on every current channel is possible, but will produce a lot of data
# and sensors that are likely not needed.
# More details on each sensor here: https://esphome.io/components/sensor/atm90e32.html#configuration-variables
sensor:
- id: !extend ${addon2_id1}
phase_a:
reactive_power:
name: ${ct13_name} VAR
id: ct13VAR
apparent_power:
name: ${ct13_name} VA
id: ct13VA
harmonic_power:
name: ${ct13_name} Harmonic
id: ct13Har
power_factor:
name: ${ct13_name} Power Factor
id: ct13PF
phase_angle:
name: ${ct13_name} Phase Angle
id: ct13Angle
peak_current:
name: ${ct13_name} Peak A
id: ct13Peak
phase_b:
reactive_power:
name: ${ct14_name} VAR
id: ct14VAR
apparent_power:
name: ${ct14_name} VA
id: ct14VA
harmonic_power:
name: ${ct14_name} Harmonic
id: ct14Har
power_factor:
name: ${ct14_name} Power Factor
id: ct14PF
phase_angle:
name: ${ct14_name} Phase Angle
id: ct14Angle
peak_current:
name: ${ct14_name} Peak A
id: ct14Peak
phase_c:
reactive_power:
name: ${ct15_name} VAR
id: ct15VAR
apparent_power:
name: ${ct15_name} VA
id: ct15VA
harmonic_power:
name: ${ct15_name} Harmonic
id: ct15Har
power_factor:
name: ${ct15_name} Power Factor
id: ct15PF
phase_angle:
name: ${ct15_name} Phase Angle
id: ct15Angle
peak_current:
name: ${ct15_name} Peak A
id: ct15Peak
- id: !extend ${addon2_id2}
phase_a:
reactive_power:
name: ${ct16_name} VAR
id: ct16VAR
apparent_power:
name: ${ct16_name} VA
id: ct16VA
harmonic_power:
name: ${ct16_name} Harmonic
id: ct16Har
power_factor:
name: ${ct16_name} Power Factor
id: ct16PF
phase_angle:
name: ${ct16_name} Phase Angle
id: ct16Angle
peak_current:
name: ${ct16_name} Peak A
id: ct16Peak
phase_b:
reactive_power:
name: ${ct17_name} VAR
id: ct17VAR
apparent_power:
name: ${ct17_name} VA
id: ct17VA
harmonic_power:
name: ${ct17_name} Harmonic
id: ct17Har
power_factor:
name: ${ct17_name} Power Factor
id: ct17PF
phase_angle:
name: ${ct17_name} Phase Angle
id: ct17Angle
peak_current:
name: ${ct17_name} Peak A
id: ct17Peak
phase_c:
reactive_power:
name: ${ct18_name} VAR
id: ct18VAR
apparent_power:
name: ${ct18_name} VA
id: ct18VA
harmonic_power:
name: ${ct18_name} Harmonic
id: ct18Har
power_factor:
name: ${ct18_name} Power Factor
id: ct18PF
phase_angle:
name: ${ct18_name} Phase Angle
id: ct18Angle
peak_current:
name: ${ct18_name} Peak A
id: ct18Peak
@@ -0,0 +1,123 @@
# This file contains power quality values that are available for each phase
# Enabling these on every current channel is possible, but will produce a lot of data
# and sensors that are likely not needed.
# More details on each sensor here: https://esphome.io/components/sensor/atm90e32.html#configuration-variables
sensor:
- id: !extend ${addon3_id1}
phase_a:
reactive_power:
name: ${ct19_name} VAR
id: ct19VAR
apparent_power:
name: ${ct19_name} VA
id: ct19VA
harmonic_power:
name: ${ct19_name} Harmonic
id: ct19Har
power_factor:
name: ${ct19_name} Power Factor
id: ct19PF
phase_angle:
name: ${ct19_name} Phase Angle
id: ct19Angle
peak_current:
name: ${ct19_name} Peak A
id: ct19Peak
phase_b:
reactive_power:
name: ${ct20_name} VAR
id: ct20VAR
apparent_power:
name: ${ct20_name} VA
id: ct20VA
harmonic_power:
name: ${ct20_name} Harmonic
id: ct20Har
power_factor:
name: ${ct20_name} Power Factor
id: ct20PF
phase_angle:
name: ${ct20_name} Phase Angle
id: ct20Angle
peak_current:
name: ${ct20_name} Peak A
id: ct20Peak
phase_c:
reactive_power:
name: ${ct21_name} VAR
id: ct21VAR
apparent_power:
name: ${ct21_name} VA
id: ct21VA
harmonic_power:
name: ${ct21_name} Harmonic
id: ct21Har
power_factor:
name: ${ct21_name} Power Factor
id: ct21PF
phase_angle:
name: ${ct21_name} Phase Angle
id: ct21Angle
peak_current:
name: ${ct21_name} Peak A
id: ct21Peak
- id: !extend ${addon3_id2}
phase_a:
reactive_power:
name: ${ct22_name} VAR
id: ct22VAR
apparent_power:
name: ${ct22_name} VA
id: ct22VA
harmonic_power:
name: ${ct22_name} Harmonic
id: ct22Har
power_factor:
name: ${ct22_name} Power Factor
id: ct22PF
phase_angle:
name: ${ct22_name} Phase Angle
id: ct22Angle
peak_current:
name: ${ct22_name} Peak A
id: ct22Peak
phase_b:
reactive_power:
name: ${ct23_name} VAR
id: ct23VAR
apparent_power:
name: ${ct23_name} VA
id: ct23VA
harmonic_power:
name: ${ct23_name} Harmonic
id: ct23Har
power_factor:
name: ${ct23_name} Power Factor
id: ct23PF
phase_angle:
name: ${ct23_name} Phase Angle
id: ct23Angle
peak_current:
name: ${ct23_name} Peak A
id: ct23Peak
phase_c:
reactive_power:
name: ${ct24_name} VAR
id: ct24VAR
apparent_power:
name: ${ct24_name} VA
id: ct24VA
harmonic_power:
name: ${ct24_name} Harmonic
id: ct24Har
power_factor:
name: ${ct24_name} Power Factor
id: ct24PF
phase_angle:
name: ${ct24_name} Phase Angle
id: ct24Angle
peak_current:
name: ${ct24_name} Peak A
id: ct24Peak
@@ -0,0 +1,123 @@
# This file contains power quality values that are available for each phase
# Enabling these on every current channel is possible, but will produce a lot of data
# and sensors that are likely not needed.
# More details on each sensor here: https://esphome.io/components/sensor/atm90e32.html#configuration-variables
sensor:
- id: !extend ${addon4_id1}
phase_a:
reactive_power:
name: ${ct25_name} VAR
id: ct25VAR
apparent_power:
name: ${ct25_name} VA
id: ct25VA
harmonic_power:
name: ${ct25_name} Harmonic
id: ct25Har
power_factor:
name: ${ct25_name} Power Factor
id: ct25PF
phase_angle:
name: ${ct25_name} Phase Angle
id: ct25Angle
peak_current:
name: ${ct25_name} Peak A
id: ct25Peak
phase_b:
reactive_power:
name: ${ct26_name} VAR
id: ct26VAR
apparent_power:
name: ${ct26_name} VA
id: ct26VA
harmonic_power:
name: ${ct26_name} Harmonic
id: ct26Har
power_factor:
name: ${ct26_name} Power Factor
id: ct26PF
phase_angle:
name: ${ct26_name} Phase Angle
id: ct26Angle
peak_current:
name: ${ct26_name} Peak A
id: ct26Peak
phase_c:
reactive_power:
name: ${ct27_name} VAR
id: ct27VAR
apparent_power:
name: ${ct27_name} VA
id: ct27VA
harmonic_power:
name: ${ct27_name} Harmonic
id: ct27Har
power_factor:
name: ${ct27_name} Power Factor
id: ct27PF
phase_angle:
name: ${ct27_name} Phase Angle
id: ct27Angle
peak_current:
name: ${ct27_name} Peak A
id: ct27Peak
- id: !extend ${addon4_id2}
phase_a:
reactive_power:
name: ${ct28_name} VAR
id: ct28VAR
apparent_power:
name: ${ct28_name} VA
id: ct28VA
harmonic_power:
name: ${ct28_name} Harmonic
id: ct28Har
power_factor:
name: ${ct28_name} Power Factor
id: ct28PF
phase_angle:
name: ${ct28_name} Phase Angle
id: ct28Angle
peak_current:
name: ${ct28_name} Peak A
id: ct28Peak
phase_b:
reactive_power:
name: ${ct29_name} VAR
id: ct29VAR
apparent_power:
name: ${ct29_name} VA
id: ct29VA
harmonic_power:
name: ${ct29_name} Harmonic
id: ct29Har
power_factor:
name: ${ct29_name} Power Factor
id: ct29PF
phase_angle:
name: ${ct29_name} Phase Angle
id: ct29Angle
peak_current:
name: ${ct29_name} Peak A
id: ct29Peak
phase_c:
reactive_power:
name: ${ct30_name} VAR
id: ct30VAR
apparent_power:
name: ${ct30_name} VA
id: ct30VA
harmonic_power:
name: ${ct30_name} Harmonic
id: ct30Har
power_factor:
name: ${ct30_name} Power Factor
id: ct30PF
phase_angle:
name: ${ct30_name} Phase Angle
id: ct30Angle
peak_current:
name: ${ct30_name} Peak A
id: ct30Peak
@@ -0,0 +1,123 @@
# This file contains power quality values that are available for each phase
# Enabling these on every current channel is possible, but will produce a lot of data
# and sensors that are likely not needed.
# More details on each sensor here: https://esphome.io/components/sensor/atm90e32.html#configuration-variables
sensor:
- id: !extend ${addon5_id1}
phase_a:
reactive_power:
name: ${ct31_name} VAR
id: ct31VAR
apparent_power:
name: ${ct31_name} VA
id: ct31VA
harmonic_power:
name: ${ct31_name} Harmonic
id: ct31Har
power_factor:
name: ${ct31_name} Power Factor
id: ct31PF
phase_angle:
name: ${ct31_name} Phase Angle
id: ct31Angle
peak_current:
name: ${ct31_name} Peak A
id: ct31Peak
phase_b:
reactive_power:
name: ${ct32_name} VAR
id: ct32VAR
apparent_power:
name: ${ct32_name} VA
id: ct32VA
harmonic_power:
name: ${ct32_name} Harmonic
id: ct32Har
power_factor:
name: ${ct32_name} Power Factor
id: ct32PF
phase_angle:
name: ${ct32_name} Phase Angle
id: ct32Angle
peak_current:
name: ${ct32_name} Peak A
id: ct32Peak
phase_c:
reactive_power:
name: ${ct33_name} VAR
id: ct33VAR
apparent_power:
name: ${ct33_name} VA
id: ct33VA
harmonic_power:
name: ${ct33_name} Harmonic
id: ct33Har
power_factor:
name: ${ct33_name} Power Factor
id: ct33PF
phase_angle:
name: ${ct33_name} Phase Angle
id: ct33Angle
peak_current:
name: ${ct33_name} Peak A
id: ct33Peak
- id: !extend ${addon5_id2}
phase_a:
reactive_power:
name: ${ct34_name} VAR
id: ct34VAR
apparent_power:
name: ${ct34_name} VA
id: ct34VA
harmonic_power:
name: ${ct34_name} Harmonic
id: ct34Har
power_factor:
name: ${ct34_name} Power Factor
id: ct34PF
phase_angle:
name: ${ct34_name} Phase Angle
id: ct34Angle
peak_current:
name: ${ct34_name} Peak A
id: ct34Peak
phase_b:
reactive_power:
name: ${ct35_name} VAR
id: ct35VAR
apparent_power:
name: ${ct35_name} VA
id: ct35VA
harmonic_power:
name: ${ct35_name} Harmonic
id: ct35Har
power_factor:
name: ${ct35_name} Power Factor
id: ct35PF
phase_angle:
name: ${ct35_name} Phase Angle
id: ct35Angle
peak_current:
name: ${ct35_name} Peak A
id: ct35Peak
phase_c:
reactive_power:
name: ${ct36_name} VAR
id: ct36VAR
apparent_power:
name: ${ct36_name} VA
id: ct36VA
harmonic_power:
name: ${ct36_name} Harmonic
id: ct36Har
power_factor:
name: ${ct36_name} Power Factor
id: ct36PF
phase_angle:
name: ${ct36_name} Phase Angle
id: ct36Angle
peak_current:
name: ${ct36_name} Peak A
id: ct36Peak
@@ -0,0 +1,123 @@
# This file contains power quality values that are available for each phase
# Enabling these on every current channel is possible, but will produce a lot of data
# and sensors that are likely not needed.
# More details on each sensor here: https://esphome.io/components/sensor/atm90e32.html#configuration-variables
sensor:
- id: !extend ${addon6_id1}
phase_a:
reactive_power:
name: ${ct37_name} VAR
id: ct37VAR
apparent_power:
name: ${ct37_name} VA
id: ct37VA
harmonic_power:
name: ${ct37_name} Harmonic
id: ct37Har
power_factor:
name: ${ct37_name} Power Factor
id: ct37PF
phase_angle:
name: ${ct37_name} Phase Angle
id: ct37Angle
peak_current:
name: ${ct37_name} Peak A
id: ct37Peak
phase_b:
reactive_power:
name: ${ct38_name} VAR
id: ct38VAR
apparent_power:
name: ${ct38_name} VA
id: ct38VA
harmonic_power:
name: ${ct38_name} Harmonic
id: ct38Har
power_factor:
name: ${ct38_name} Power Factor
id: ct38PF
phase_angle:
name: ${ct38_name} Phase Angle
id: ct38Angle
peak_current:
name: ${ct38_name} Peak A
id: ct38Peak
phase_c:
reactive_power:
name: ${ct39_name} VAR
id: ct39VAR
apparent_power:
name: ${ct39_name} VA
id: ct39VA
harmonic_power:
name: ${ct39_name} Harmonic
id: ct39Har
power_factor:
name: ${ct39_name} Power Factor
id: ct39PF
phase_angle:
name: ${ct39_name} Phase Angle
id: ct39Angle
peak_current:
name: ${ct39_name} Peak A
id: ct39Peak
- id: !extend ${addon6_id2}
phase_a:
reactive_power:
name: ${ct40_name} VAR
id: ct40VAR
apparent_power:
name: ${ct40_name} VA
id: ct40VA
harmonic_power:
name: ${ct40_name} Harmonic
id: ct40Har
power_factor:
name: ${ct40_name} Power Factor
id: ct40PF
phase_angle:
name: ${ct40_name} Phase Angle
id: ct40Angle
peak_current:
name: ${ct40_name} Peak A
id: ct40Peak
phase_b:
reactive_power:
name: ${ct41_name} VAR
id: ct41VAR
apparent_power:
name: ${ct41_name} VA
id: ct41VA
harmonic_power:
name: ${ct41_name} Harmonic
id: ct41Har
power_factor:
name: ${ct41_name} Power Factor
id: ct41PF
phase_angle:
name: ${ct41_name} Phase Angle
id: ct41Angle
peak_current:
name: ${ct41_name} Peak A
id: ct41Peak
phase_c:
reactive_power:
name: ${ct42_name} VAR
id: ct42VAR
apparent_power:
name: ${ct42_name} VA
id: ct42VA
harmonic_power:
name: ${ct42_name} Harmonic
id: ct42Har
power_factor:
name: ${ct42_name} Power Factor
id: ct42PF
phase_angle:
name: ${ct42_name} Phase Angle
id: ct42Angle
peak_current:
name: ${ct42_name} Peak A
id: ct42Peak
@@ -0,0 +1,123 @@
# This file contains power quality values that are available for each phase
# Enabling these on every current channel is possible, but will produce a lot of data
# and sensors that are likely not needed.
# More details on each sensor here: https://esphome.io/components/sensor/atm90e32.html#configuration-variables
sensor:
- id: !extend ${main_meter_id1}
phase_a:
reactive_power:
name: ${ct1_name} VAR
id: ct1VAR
apparent_power:
name: ${ct1_name} VA
id: ct1VA
harmonic_power:
name: ${ct1_name} Harmonic
id: ct1Har
power_factor:
name: ${ct1_name} Power Factor
id: ct1PF
phase_angle:
name: ${ct1_name} Phase Angle
id: ct1Angle
peak_current:
name: ${ct1_name} Peak A
id: ct1Peak
phase_b:
reactive_power:
name: ${ct2_name} VAR
id: ct2VAR
apparent_power:
name: ${ct2_name} VA
id: ct2VA
harmonic_power:
name: ${ct2_name} Harmonic
id: ct2Har
power_factor:
name: ${ct2_name} Power Factor
id: ct2PF
phase_angle:
name: ${ct2_name} Phase Angle
id: ct2Angle
peak_current:
name: ${ct2_name} Peak A
id: ct2Peak
phase_c:
reactive_power:
name: ${ct3_name} VAR
id: ct3VAR
apparent_power:
name: ${ct3_name} VA
id: ct3VA
harmonic_power:
name: ${ct3_name} Harmonic
id: ct3Har
power_factor:
name: ${ct3_name} Power Factor
id: ct3PF
phase_angle:
name: ${ct3_name} Phase Angle
id: ct3Angle
peak_current:
name: ${ct3_name} Peak A
id: ct3Peak
- id: !extend ${main_meter_id2}
phase_a:
reactive_power:
name: ${ct4_name} VAR
id: ct4VAR
apparent_power:
name: ${ct4_name} VA
id: ct4VA
harmonic_power:
name: ${ct4_name} Harmonic
id: ct4Har
power_factor:
name: ${ct4_name} Power Factor
id: ct4PF
phase_angle:
name: ${ct4_name} Phase Angle
id: ct4Angle
peak_current:
name: ${ct4_name} Peak A
id: ct4Peak
phase_b:
reactive_power:
name: ${ct5_name} VAR
id: ct5VAR
apparent_power:
name: ${ct5_name} VA
id: ct5VA
harmonic_power:
name: ${ct5_name} Harmonic
id: ct5Har
power_factor:
name: ${ct5_name} Power Factor
id: ct5PF
phase_angle:
name: ${ct5_name} Phase Angle
id: ct5Angle
peak_current:
name: ${ct5_name} Peak A
id: ct5Peak
phase_c:
reactive_power:
name: ${ct6_name} VAR
id: ct6VAR
apparent_power:
name: ${ct6_name} VA
id: ct6VA
harmonic_power:
name: ${ct6_name} Harmonic
id: ct6Har
power_factor:
name: ${ct6_name} Power Factor
id: ct6PF
phase_angle:
name: ${ct6_name} Phase Angle
id: ct6Angle
peak_current:
name: ${ct6_name} Peak A
id: ct6Peak
@@ -0,0 +1,25 @@
# These fields display the status of each CT, or phase, with a short text description
# See more details here: https://esphome.io/components/sensor/atm90e32.html#text-sensor
# Status Fields
###############
text_sensor:
- platform: atm90e32
id: ${addon1_id1}
phase_status:
phase_a:
name: "${ct7_name} Status"
phase_b:
name: "${ct8_name} Status"
phase_c:
name: "${ct9_name} Status"
- platform: atm90e32
id: ${addon1_id2}
phase_status:
phase_a:
name: "${ct10_name} Status"
phase_b:
name: "${ct11_name} Status"
phase_c:
name: "${ct12_name} Status"
@@ -0,0 +1,25 @@
# These fields display the status of each CT, or phase, with a short text description
# See more details here: https://esphome.io/components/sensor/atm90e32.html#text-sensor
# Status Fields
###############
text_sensor:
- platform: atm90e32
id: ${addon2_id1}
phase_status:
phase_a:
name: "${ct13_name} Status"
phase_b:
name: "${ct14_name} Status"
phase_c:
name: "${ct15_name} Status"
- platform: atm90e32
id: ${addon2_id2}
phase_status:
phase_a:
name: "${ct16_name} Status"
phase_b:
name: "${ct17_name} Status"
phase_c:
name: "${ct18_name} Status"
@@ -0,0 +1,25 @@
# These fields display the status of each CT, or phase, with a short text description
# See more details here: https://esphome.io/components/sensor/atm90e32.html#text-sensor
# Status Fields
###############
text_sensor:
- platform: atm90e32
id: ${addon3_id1}
phase_status:
phase_a:
name: "${ct19_name} Status"
phase_b:
name: "${ct20_name} Status"
phase_c:
name: "${ct21_name} Status"
- platform: atm90e32
id: ${addon3_id2}
phase_status:
phase_a:
name: "${ct22_name} Status"
phase_b:
name: "${ct23_name} Status"
phase_c:
name: "${ct24_name} Status"
@@ -0,0 +1,25 @@
# These fields display the status of each CT, or phase, with a short text description
# See more details here: https://esphome.io/components/sensor/atm90e32.html#text-sensor
# Status Fields
###############
text_sensor:
- platform: atm90e32
id: ${addon4_id1}
phase_status:
phase_a:
name: "${ct25_name} Status"
phase_b:
name: "${ct26_name} Status"
phase_c:
name: "${ct27_name} Status"
- platform: atm90e32
id: ${addon4_id2}
phase_status:
phase_a:
name: "${ct28_name} Status"
phase_b:
name: "${ct29_name} Status"
phase_c:
name: "${ct30_name} Status"
@@ -0,0 +1,25 @@
# These fields display the status of each CT, or phase, with a short text description
# See more details here: https://esphome.io/components/sensor/atm90e32.html#text-sensor
# Status Fields
###############
text_sensor:
- platform: atm90e32
id: ${addon5_id1}
phase_status:
phase_a:
name: "${ct31_name} Status"
phase_b:
name: "${ct32_name} Status"
phase_c:
name: "${ct33_name} Status"
- platform: atm90e32
id: ${addon5_id2}
phase_status:
phase_a:
name: "${ct34_name} Status"
phase_b:
name: "${ct35_name} Status"
phase_c:
name: "${ct36_name} Status"
@@ -0,0 +1,25 @@
# These fields display the status of each CT, or phase, with a short text description
# See more details here: https://esphome.io/components/sensor/atm90e32.html#text-sensor
# Status Fields
###############
text_sensor:
- platform: atm90e32
id: ${addon6_id1}
phase_status:
phase_a:
name: "${ct37_name} Status"
phase_b:
name: "${ct38_name} Status"
phase_c:
name: "${ct39_name} Status"
- platform: atm90e32
id: ${addon6_id2}
phase_status:
phase_a:
name: "${ct40_name} Status"
phase_b:
name: "${ct41_name} Status"
phase_c:
name: "${ct42_name} Status"
@@ -0,0 +1,30 @@
# These fields display the status of each CT, or phase, with a short text description
# See more details here: https://esphome.io/components/sensor/atm90e32.html#text-sensor
# Main Board Status Fields
##########################
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
# freq_status:
# name: "Frequency Status 2"
+14
View File
@@ -0,0 +1,14 @@
media_player:
- id: external_media_player
platform: speaker
# Define the actions Home Assistant will call
on_turn_on:
- lambda: |-
// No action needed, Home Assistant can call this service
return;
on_turn_off:
- lambda: |-
// No action needed, Home Assistant can call this service
return;
+30
View File
@@ -0,0 +1,30 @@
esphome:
api:
reboot_timeout: 0s
substitutions:
mqtt_root_topic: !secret mqtt_root_topic
mqtt:
broker: !secret mqtt_broker
port: !secret mqtt_port
username: !secret mqtt_username
password: !secret mqtt_password
discover_ip: False
discovery: false
discovery_retain: false
log_topic: null
topic_prefix: ${mqtt_root_topic}/${devicename}
# birth_message:
# topic: ${mqtt_root_topic}/${devicename}/availability
# payload: online
# will_message:
# topic: ${mqtt_root_topic}/${devicename}/availability
# payload: offline
# shutdown_message:
# topic: ${mqtt_root_topic}/${devicename}/availability
# payload: shutdown
+26
View File
@@ -0,0 +1,26 @@
esphome:
api:
reboot_timeout: 0s
substitutions:
mqtt_root_topic: !secret mqtt_root_topic
mqtt:
broker: !secret mqtt_broker
port: !secret mqtt_port
username: !secret mqtt_username
password: !secret mqtt_password
discover_ip: False
discovery: false
discovery_retain: false
topic_prefix: null
birth_message:
topic: ${mqtt_root_topic}/${devicename}/availability
payload: online
will_message:
topic: ${mqtt_root_topic}/${devicename}/availability
payload: offline
shutdown_message:
topic: ${mqtt_root_topic}/${devicename}/availability
payload: offline
+6
View File
@@ -9,6 +9,7 @@ substitutions:
network: wifi
static_ip: !secret garage-cleversensor-ip
i2c_id: bus_a
mqtt_root_topic: !secret mqtt_root_topic
# For the ultrasonic sensors
trigger1: 16
@@ -54,6 +55,7 @@ packages:
device_base: !include common/device_base.yaml
web_server: !include common/web_server.yaml
bme680: !include common/bme68x_bsec2_i2c.yaml
mqtt: !include common/mqtt_all.yaml
# remote_receiver:
# pin: ${ir_rx}
@@ -115,6 +117,10 @@ binary_sensor:
- platform: gpio
name: "ESP32-EVB button"
pin: ${button1}
# on_press:
# - mqtt.publish:
# topic: "${mqtt_root_topic}/${devicename}/button"
# payload: "pressed"
- platform: gpio
name: "Garage Door"
+39 -1
View File
@@ -4,14 +4,52 @@ substitutions:
friendly_name: Home Assistant Voice 097b44
comment: Clever Voice
static_ip: !secret clints-home-assistant-voice
power_switch_pin: GPIO3
packages:
base: !include common/device_base.yaml
network: !include common/wifi.yaml
Nabu Casa.Home Assistant Voice PE: github://esphome/home-assistant-voice-pe/home-assistant-voice.yaml
#power_buttons: !include common/media_player.yaml
esphome:
name: ${name}
name_add_mac_suffix: false
friendly_name: ${friendly_name}
button:
- id: !remove local_restart_button
- id: !remove local_restart_button
# forget all of this extending bullshit and implement this:
# https://www.home-assistant.io/integrations/universal/
switch:
- platform: template
name: "External Power Switch"
id: external_power_switch
turn_on_action:
- logger.log: "External Power Switch turned on"
- media_player.turn_on:
id: external_media_player
# - lambda: return;
turn_off_action:
- logger.log: "External Power Switch turned off"
- media_player.turn_off:
id: external_media_player
# - lambda: return;
media_player:
- id: !extend external_media_player
# Define the actions Home Assistant will call
on_turn_on:
- logger.log: "Media Player Turned On via on_turn_on action"
# - lambda: |-
# // No action needed, Home Assistant can call this service
# return;
on_turn_off:
- logger.log: "Media Player Turned Off via on_turn_off action"
# - lambda: |-
# // No action needed, Home Assistant can call this service
# return;
+15
View File
@@ -106,6 +106,7 @@ packages:
wifi: !include common/wifi.yaml
# device_base: !include common/complex_esp32_base.yaml
device_base: !include common/device_base.yaml
mqtt: !include common/mqtt_null.yaml
esp32:
board: nodemcu-32s
@@ -466,6 +467,13 @@ sensor:
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
qos: 1
retain: true
availability:
topic: ${mqtt_root_topic}/${devicename}/${ct21Name}_w/status
payload_available: online
payload_not_available: offline
state_topic: ${mqtt_root_topic}/${devicename}/${ct21Name}_w
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
@@ -796,6 +804,13 @@ sensor:
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
qos: 1
retain: true
availability:
topic: ${mqtt_root_topic}/${devicename}/${ct21Name}_kwh/status
payload_available: online
payload_not_available: offline
state_topic: ${mqtt_root_topic}/${devicename}/${ct21Name}_kwh
# min_save_interval: ${update_time}
#kWh From CT 22
+25 -39
View File
@@ -20,36 +20,6 @@ cards:
cards:
- type: tile
entity: sensor.dishwasher
icon_tap_action:
action: navigate
navigation_path: /phone-yaml/dishwasher
tap_action:
action: navigate
navigation_path: /phone-yaml/dishwasher
show_entity_picture: true
vertical: true
- type: tile
entity: binary_sensor.keurig
icon_tap_action:
action: navigate
navigation_path: /phone-yaml/keurig
tap_action:
action: navigate
navigation_path: /phone-yaml/keurig
show_entity_picture: true
vertical: true
- type: tile
entity: binary_sensor.stove
icon_tap_action:
action: navigate
navigation_path: /phone-yaml/stove
tap_action:
action: navigate
navigation_path: /phone-yaml/stove
show_entity_picture: true
vertical: true
- type: tile
entity: input_select.dishwasher_fun_status
name: Dishwasher
icon_tap_action:
action: navigate
@@ -81,16 +51,32 @@ cards:
navigation_path: /phone-yaml/tumble-dryer
show_entity_picture: true
vertical: true
- type: tile
entity: binary_sensor.keurig
icon_tap_action:
action: navigate
navigation_path: /phone-yaml/keurig
tap_action:
action: navigate
navigation_path: /phone-yaml/keurig
show_entity_picture: true
vertical: true
- type: tile
entity: binary_sensor.stove
icon_tap_action:
action: navigate
navigation_path: /phone-yaml/stove
tap_action:
action: navigate
navigation_path: /phone-yaml/stove
show_entity_picture: true
vertical: true
- type: glance
entities:
- entity: input_boolean.empty_dishwasher
tap_action:
action: toggle
- entity: sensor.pm_dishwasher_w
- entity: input_number.dishwasher_delay_on
- entity: input_number.dishwasher_on
- entity: input_number.dishwasher_delay_off
- entity: sensor.dishwasher
- entity: binary_sensor.dishwasher
name: Watts
- entity: binary_sensor.dishwasher_door_contact
- entity: sensor.dishwasher_door_device_temperature
- entity: input_text.dishwasher_runtime
name: Runtime
- entity: counter.dishwasher
name: Cycles
-17
View File
@@ -18,16 +18,6 @@ cards:
cards:
- type: grid
cards:
- type: tile
entity: sensor.dishwasher
icon_tap_action:
action: navigate
navigation_path: /phone-yaml/dishwasher
tap_action:
action: navigate
navigation_path: /phone-yaml/dishwasher
show_entity_picture: true
vertical: true
- type: tile
entity: binary_sensor.keurig
icon_tap_action:
@@ -70,14 +60,7 @@ cards:
vertical: true
- type: glance
entities:
- entity: input_boolean.empty_dishwasher
tap_action:
action: toggle
- entity: sensor.pm_dishwasher_w
- entity: input_number.dishwasher_delay_on
- entity: input_number.dishwasher_on
- entity: input_number.dishwasher_delay_off
- entity: sensor.dishwasher
- entity: binary_sensor.dishwasher
- entity: binary_sensor.dishwasher_door_contact
- entity: sensor.dishwasher_door_device_temperature
-4
View File
@@ -7,10 +7,6 @@ visible:
- user: cad46dedf86f454ebbd7f697a58730f2
cards:
- !include /config/lovelace/cameras/view-camera-03.yaml
# - type: horizontal-stack
# cards:
#- !include /config/lovelace/cameras/view-camera-03.yaml
#- !include /config/lovelace/raw-cameras/computer-area-card.yaml
- type: vertical-stack
view_layout:
+2 -3
View File
@@ -6,9 +6,8 @@ visible:
- user: 24a4bd075e7f41a497dd0390a1dd4a9f
- user: cad46dedf86f454ebbd7f697a58730f2
cards:
- type: horizontal-stack
cards:
- !include /config/lovelace/cameras/view-camera-04.yaml
- !include /config/lovelace/cameras/view-camera-04.yaml
- type: vertical-stack
view_layout:
position: sidebar
+2 -3
View File
@@ -6,9 +6,8 @@ visible:
- user: 24a4bd075e7f41a497dd0390a1dd4a9f
- user: cad46dedf86f454ebbd7f697a58730f2
cards:
- type: horizontal-stack
cards:
- !include /config/lovelace/cameras/view-camera-06.yaml
- !include /config/lovelace/cameras/view-camera-06.yaml
- type: vertical-stack
view_layout:
position: sidebar
+2 -3
View File
@@ -6,9 +6,8 @@ visible:
- user: 24a4bd075e7f41a497dd0390a1dd4a9f
- user: cad46dedf86f454ebbd7f697a58730f2
cards:
- type: horizontal-stack
cards:
- !include /config/lovelace/cameras/view-camera-07.yaml
- !include /config/lovelace/cameras/view-camera-07.yaml
- type: vertical-stack
view_layout:
position: sidebar
+2 -3
View File
@@ -6,9 +6,8 @@ visible:
- user: 24a4bd075e7f41a497dd0390a1dd4a9f
- user: cad46dedf86f454ebbd7f697a58730f2
cards:
- type: horizontal-stack
cards:
- !include /config/lovelace/cameras/view-camera-08.yaml
- !include /config/lovelace/cameras/view-camera-08.yaml
- type: vertical-stack
view_layout:
position: sidebar
+2 -3
View File
@@ -6,9 +6,8 @@ visible:
- user: 24a4bd075e7f41a497dd0390a1dd4a9f
- user: cad46dedf86f454ebbd7f697a58730f2
cards:
- type: horizontal-stack
cards:
- !include /config/lovelace/cameras/view-camera-12.yaml
- !include /config/lovelace/cameras/view-camera-12.yaml
- type: vertical-stack
view_layout:
position: sidebar
-165
View File
@@ -1,165 +0,0 @@
title: AI Cam13
path: ai-cam13
icon: mdi:television
type: sidebar
visible:
- user: 24a4bd075e7f41a497dd0390a1dd4a9f
- user: cad46dedf86f454ebbd7f697a58730f2
cards:
- type: horizontal-stack
cards:
- !include /config/lovelace/cameras/view-camera-13.yaml
- type: vertical-stack
view_layout:
position: sidebar
cards:
- type: glance
title: Front Room
entities: []
# - type: glance
# show_state: false
# columns: 4
# entities:
# - name: Contrast
# entity: switch.frigate_cam13_improve_contrast
# tap_action:
# action: toggle
# - name: Snapshots
# entity: switch.frigate_cam13_snapshots
# tap_action:
# action: toggle
# - name: Detect
# entity: switch.frigate_cam13_detect
# tap_action:
# action: toggle
# - name: Occupancy
# entity: binary_sensor.frigate_cam13_all_occupancy
- type: entities
title: Kitchen
show_header_toggle: false
entities:
- name: Kitchen
entity: sensor.kitchen_person_count
- name: Kitchen
entity: binary_sensor.kitchen_person_occupancy
- type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam12
title: Kitchen
icon: mdi:fridge
live_provider: ha
frigate:
camera_name: frigate_cam12
zone: kitchen
label: person
url: http://192.168.1.7:5000
view:
default: snapshots
event_gallery:
controls:
thumbnails:
size: 75
menu:
style: overlay
position: top
buttons:
clips:
enabled: false
download:
enabled: false
frigate_ui:
enabled: false
frigate:
enabled: false
live:
enabled: false
media_viewer:
controls:
next_previous:
style: chevrons
- type: entities
title: Dining Room
show_header_toggle: false
entities:
- name: Dining Room
entity: sensor.dining_room_person_count
- name: Dining Room
entity: binary_sensor.dining_room_person_occupancy
- type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam12
title: Dining Room
icon: mdi:table-chair
live_provider: ha
frigate:
camera_name: frigate_cam12
zone: dining_room
label: person
url: http://192.168.1.7:5000
view:
default: snapshots
event_gallery:
controls:
thumbnails:
size: 75
menu:
style: overlay
position: top
buttons:
clips:
enabled: false
download:
enabled: false
frigate_ui:
enabled: false
frigate:
enabled: false
live:
enabled: false
media_viewer:
controls:
next_previous:
style: chevrons
- type: entities
title: Front Room
show_header_toggle: false
entities:
- name: Front Room
entity: sensor.front_room_person_count
- name: Front Room
entity: binary_sensor.front_room_person_occupancy
- type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam12
title: Front Room
icon: mdi:television
live_provider: ha
frigate:
camera_name: frigate_cam13
zone: front_room
label: person
url: http://192.168.1.7:5000
view:
default: snapshots
event_gallery:
controls:
thumbnails:
size: 75
menu:
style: overlay
position: top
buttons:
clips:
enabled: false
download:
enabled: false
frigate_ui:
enabled: false
frigate:
enabled: false
live:
enabled: false
media_viewer:
controls:
next_previous:
style: chevrons
-127
View File
@@ -1,127 +0,0 @@
title: AI Cam14
path: ai-cam14
icon: mdi:slide
type: sidebar
visible:
- user: 24a4bd075e7f41a497dd0390a1dd4a9f
- user: cad46dedf86f454ebbd7f697a58730f2
cards:
- type: horizontal-stack
cards:
- !include /config/lovelace/cameras/view-camera-14.yaml
- type: vertical-stack
view_layout:
position: sidebar
cards:
- type: glance
title: Back Yard
entities: []
- type: glance
show_state: true
columns: 5
entities:
# - name: Contrast
# entity: switch.frigate_cam14_improve_contrast
# tap_action:
# action: toggle
# - name: Snapshots
# entity: switch.frigate_cam14_snapshots
# tap_action:
# action: toggle
# - name: Detect
# entity: switch.frigate_cam14_detect
# tap_action:
# action: toggle
# - name: Occupancy
# entity: binary_sensor.frigate_cam14_all_occupancy
- type: horizontal-stack
cards:
# - type: glance
# title: People
# show_icon: false
# columns: 1
# entities:
# - name: Count
# entity: sensor.frigate_cam14_person_count
# - name: Occupancy
# entity: binary_sensor.frigate_cam14_person_occupancy
- type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam12
# - camera_entity: camera.frigate_cam14
title: Person
icon: mdi:slide
live_provider: ha
frigate:
camera_name: frigate_cam14
label: person
url: http://192.168.1.7:5000
view:
default: snapshots
event_gallery:
controls:
thumbnails:
size: 100
menu:
style: overlay
position: top
buttons:
clips:
enabled: false
download:
enabled: false
frigate_ui:
enabled: false
frigate:
enabled: false
live:
enabled: false
media_viewer:
controls:
next_previous:
style: chevrons
# - type: horizontal-stack
# cards:
# - type: glance
# title: Animals
# show_icon: false
# columns: 1
# entities:
# - name: Count
# entity: sensor.frigate_cam14_animal_count
# - name: Occupancy
# entity: binary_sensor.frigate_cam14_animal_occupancy
# - type: custom:advanced-camera-card
# cameras:
# - camera_entity: camera.frigate_cam14
# title: Back Yard
# icon: mdi:bird
# live_provider: ha
# frigate:
# camera_name: frigate_cam14
# label: animal
# url: http://192.168.1.7:5000
# view:
# default: snapshots
# event_gallery:
# controls:
# thumbnails:
# size: 100
# menu:
# style: overlay
# position: top
# buttons:
# clips:
# enabled: false
# download:
# enabled: false
# frigate_ui:
# enabled: false
# frigate:
# enabled: false
# live:
# enabled: false
# media_viewer:
# controls:
# next_previous:
# style: chevrons
+2 -5
View File
@@ -6,11 +6,8 @@ visible:
- user: 24a4bd075e7f41a497dd0390a1dd4a9f
- user: cad46dedf86f454ebbd7f697a58730f2
cards:
- type: horizontal-stack
cards:
- type: vertical-stack
cards:
- !include /config/lovelace/cameras/view-camera-18.yaml
- !include /config/lovelace/cameras/view-camera-18.yaml
- type: vertical-stack
view_layout:
position: sidebar
+2 -5
View File
@@ -6,11 +6,8 @@ visible:
- user: 24a4bd075e7f41a497dd0390a1dd4a9f
- user: cad46dedf86f454ebbd7f697a58730f2
cards:
- type: horizontal-stack
cards:
- type: vertical-stack
cards:
- !include /config/lovelace/cameras/view-camera-19.yaml
- !include /config/lovelace/cameras/view-camera-19.yaml
- type: vertical-stack
view_layout:
position: sidebar
+18 -18
View File
@@ -98,7 +98,7 @@ cards:
state_not: "idle"
chip:
type: template
entity: input_boolean.empty_dishwasher
entity: sensor.dishwasher
icon: >
{% if is_state('sensor.dishwasher','running')-%}
mdi:dishwasher
@@ -181,25 +181,25 @@ cards:
alignment: center
- type: markdown
content: >
{% set time = now().hour -%}
{% if (time >= 18) -%}
Good evening, {{user}}!
{% elif (time >=12) -%}
Good afternoon, {{user}}!
{% else -%}
Good morning, {{user}}!
{%endif-%}
Today should be {{states('sensor.home_weather_condition')}}, with a high of
{{states('sensor.temphigh_today')|float(0)|round(0)}} and a low of
{{states('sensor.templow_today')|float(0)|round(0)}}.
tap_action:
action: navigate
navigation_path: /details-yml/weather
- type: vertical-stack
cards:
- type: markdown
content: >
{% set time = now().hour -%}
{% if (time >= 18) -%}
Good evening, {{user}}!
{% elif (time >=12) -%}
Good afternoon, {{user}}!
{% else -%}
Good morning, {{user}}!
{% endif %}
{% if states('sensor.home_weather_condition') not in ['unknown', 'unavailable'] -%}
Today should be {{states('sensor.home_weather_condition') | lower}}, with a high of {{states('sensor.temphigh_today')|float(0)|round(0)}} and a low of {{states('sensor.templow_today')|float(0)|round(0)}}.
{% endif %}
tap_action:
action: navigate
navigation_path: /details-yml/weather
- type: horizontal-stack
cards:
- type: custom:mushroom-template-card
+1 -1
View File
@@ -85,7 +85,7 @@ cards:
action: navigate
navigation_path: /phone-yaml/stove
- type: custom:mushroom-entity-card
entity: binary_sensor.dishwasher
entity: input_select.dishwasher_fun_status
layout: vertical
primary_info: none
secondary_info: none
+3
View File
@@ -1,3 +1,6 @@
- url: /hacsfiles/mass-player-card/mass-player-card.js
type: module
- url: /webrtc/webrtc-camera.js
type: module
+13 -1
View File
@@ -758,10 +758,22 @@ cards:
- state: "on"
class: "door-open"
- entities:
- sensor.dishwasher
states:
- state: "Idle"
class: "appliance-off"
- state: "Problem"
class: "appliance-problem"
- state: "Running"
class: "appliance-on"
- state: "Pending"
class: "appliance-pending"
- entities:
- sensor.washing_machine
- sensor.tumble_dryer
- sensor.dishwasher
- binary_sensor.keurig
- binary_sensor.microwave
- binary_sensor.stove
+16 -10
View File
@@ -565,24 +565,30 @@ badges:
- type: conditional
conditions:
- entity: sensor.dishwasher
state_not: "idle"
- entity: input_select.dishwasher_fun_status
state_not: "Hungry for more"
chip:
type: template
entity: input_boolean.empty_dishwasher
entity: input_select.dishwasher_fun_status
icon: >
{% if is_state('sensor.dishwasher','running')-%}
{% if is_state('input_select.dishwasher_fun_status','Scrubbing')-%}
mdi:dishwasher
{% elif is_state('sensor.dishwasher','pending')-%}
{% elif is_state('input_select.dishwasher_fun_status','Water spots and mildew!')-%}
mdi:dishwasher-alert
{% elif is_state('input_select.dishwasher_fun_status','Trouble')-%}
mdi:alert
{% elif is_state('input_select.dishwasher_fun_status','Hungry for more')-%}
mdi:dishwasher-off
{%- endif %}
icon_color: >
{% if is_state('sensor.dishwasher','running')-%}
amber
{% elif is_state('sensor.dishwasher','pending')-%}
blue
{% else -%}
{% if is_state('input_select.dishwasher_fun_status','Scrubbing')-%}
green
{% elif is_state('input_select.dishwasher_fun_status','Water spots and mildew!')-%}
orange
{% elif is_state('input_select.dishwasher_fun_status','Trouble')-%}
red
{% elif is_state('input_select.dishwasher_fun_status','Hungry for more')-%}
disabled
{%- endif %}
tap_action:
action: navigate
+11 -3
View File
@@ -136,7 +136,7 @@ g.svg-long-click> :not(text):hover,
.appliance-off {
/* fill: var(--green-color) !important; */
/* fill: #81c9a7 !important; */
fill: #81D9a7 !important;
fill: var(--disabled-color) !important;
fill-opacity: 1 !important;
/* stroke: #82caa8 !important;
stroke-width: 1px !important;
@@ -145,14 +145,14 @@ g.svg-long-click> :not(text):hover,
}
.appliance-on {
fill: #ff8800 !important;
fill: var(--primary-color) !important;
fill-opacity: 1 !important;
/* animation-duration: 4s;
animation-name: rotate90;
animation-fill-mode: forwards; */
}
.appliance-pending {
.appliance-problem {
fill: var(--error-color) !important;
fill-opacity: 1 !important;
/* animation-duration: 4s;
@@ -160,6 +160,14 @@ g.svg-long-click> :not(text):hover,
animation-fill-mode: forwards; */
}
.appliance-pending {
fill: var(--warning-color) !important;
fill-opacity: 1 !important;
/* animation-duration: 4s;
animation-name: rotate90;
animation-fill-mode: forwards; */
}
.window-closed {
/* fill: var(--green-color) !important; */
/* fill: #81c9a7 !important; */
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 B