diff --git a/.gitignore b/.gitignore index 0bd58ed..cbbb60b 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/automations/things/dishwasher_done.yaml b/automations/things/dishwasher_done.yaml index c53f3d2..38bfbb9 100644 --- a/automations/things/dishwasher_done.yaml +++ b/automations/things/dishwasher_done.yaml @@ -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 diff --git a/automations/things/tumble_dryer_done.yaml b/automations/things/tumble_dryer_done.yaml deleted file mode 100644 index cb7315f..0000000 --- a/automations/things/tumble_dryer_done.yaml +++ /dev/null @@ -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 diff --git a/automations/things/washing_machine_done.yaml b/automations/things/washing_machine_done.yaml deleted file mode 100644 index ba85122..0000000 --- a/automations/things/washing_machine_done.yaml +++ /dev/null @@ -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 diff --git a/components/packages/announcements.yaml b/components/packages/announcements.yaml index 02a60e3..8955728 100644 --- a/components/packages/announcements.yaml +++ b/components/packages/announcements.yaml @@ -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 \ No newline at end of file +# announce_goodnight_emmett_bridget_ebin: +# name: Announce Goodnight Emmett Bridget Ebin +# icon: mdi:sleep \ No newline at end of file diff --git a/components/packages/appliances/dishwasher.yaml b/components/packages/appliances/dishwasher.yaml index 3e50ccd..7ca590e 100644 --- a/components/packages/appliances/dishwasher.yaml +++ b/components/packages/appliances/dishwasher.yaml @@ -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 diff --git a/components/packages/appliances/dishwasher_mqtt.yaml b/components/packages/appliances/dishwasher_mqtt.yaml new file mode 100644 index 0000000..fb3c1f5 --- /dev/null +++ b/components/packages/appliances/dishwasher_mqtt.yaml @@ -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 diff --git a/components/packages/google_assistant.yaml b/components/packages/google_assistant.yaml index 714c1d9..9c9a522 100644 --- a/components/packages/google_assistant.yaml +++ b/components/packages/google_assistant.yaml @@ -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 diff --git a/esphome/archive/power-monitor-cs.yaml b/esphome/archive/power-monitor-cs.yaml new file mode 100644 index 0000000..443d169 --- /dev/null +++ b/esphome/archive/power-monitor-cs.yaml @@ -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 \ No newline at end of file diff --git a/esphome/archive/power-monitor.yaml b/esphome/archive/power-monitor.yaml new file mode 100644 index 0000000..556a5d5 --- /dev/null +++ b/esphome/archive/power-monitor.yaml @@ -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} diff --git a/esphome/circuit-setup/6chan_common.yaml b/esphome/circuit-setup/6chan_common.yaml new file mode 100644 index 0000000..0ea80d7 --- /dev/null +++ b/esphome/circuit-setup/6chan_common.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_common_ethernet.yaml b/esphome/circuit-setup/6chan_common_ethernet.yaml new file mode 100644 index 0000000..36c08d7 --- /dev/null +++ b/esphome/circuit-setup/6chan_common_ethernet.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_common_ethernet_ws.yaml b/esphome/circuit-setup/6chan_common_ethernet_ws.yaml new file mode 100644 index 0000000..af7c2e2 --- /dev/null +++ b/esphome/circuit-setup/6chan_common_ethernet_ws.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_1-addon.yaml b/esphome/circuit-setup/6chan_energy_meter_1-addon.yaml new file mode 100644 index 0000000..d977edb --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_1-addon.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_1-addon_ethernet.yaml b/esphome/circuit-setup/6chan_energy_meter_1-addon_ethernet.yaml new file mode 100644 index 0000000..3cabe04 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_1-addon_ethernet.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_2-addons.yaml b/esphome/circuit-setup/6chan_energy_meter_2-addons.yaml new file mode 100644 index 0000000..4b2466d --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_2-addons.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_2-addons_ethernet.yaml b/esphome/circuit-setup/6chan_energy_meter_2-addons_ethernet.yaml new file mode 100644 index 0000000..c417201 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_2-addons_ethernet.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_3-addons.yaml b/esphome/circuit-setup/6chan_energy_meter_3-addons.yaml new file mode 100644 index 0000000..161f559 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_3-addons.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_3-addons_2-voltages.yaml b/esphome/circuit-setup/6chan_energy_meter_3-addons_2-voltages.yaml new file mode 100644 index 0000000..28a2c8f --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_3-addons_2-voltages.yaml @@ -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 \ No newline at end of file diff --git a/esphome/circuit-setup/6chan_energy_meter_3-addons_ethernet.yaml b/esphome/circuit-setup/6chan_energy_meter_3-addons_ethernet.yaml new file mode 100644 index 0000000..bd51f6b --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_3-addons_ethernet.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_4-addons.yaml b/esphome/circuit-setup/6chan_energy_meter_4-addons.yaml new file mode 100644 index 0000000..3b73d97 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_4-addons.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_4-addons_ethernet.yaml b/esphome/circuit-setup/6chan_energy_meter_4-addons_ethernet.yaml new file mode 100644 index 0000000..471e0a8 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_4-addons_ethernet.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_5-addons.yaml b/esphome/circuit-setup/6chan_energy_meter_5-addons.yaml new file mode 100644 index 0000000..8ed2711 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_5-addons.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_5-addons_ethernet.yaml b/esphome/circuit-setup/6chan_energy_meter_5-addons_ethernet.yaml new file mode 100644 index 0000000..472797e --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_5-addons_ethernet.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_6-addons.yaml b/esphome/circuit-setup/6chan_energy_meter_6-addons.yaml new file mode 100644 index 0000000..4806fa1 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_6-addons.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_6-addons_ethernet.yaml b/esphome/circuit-setup/6chan_energy_meter_6-addons_ethernet.yaml new file mode 100644 index 0000000..46b1962 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_6-addons_ethernet.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_main_board.yaml b/esphome/circuit-setup/6chan_energy_meter_main_board.yaml new file mode 100644 index 0000000..57c46c2 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_main_board.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_main_ethernet.yaml b/esphome/circuit-setup/6chan_energy_meter_main_ethernet.yaml new file mode 100644 index 0000000..add1894 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_main_ethernet.yaml @@ -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 diff --git a/esphome/circuit-setup/6chan_energy_meter_main_ethernet_ws.yaml b/esphome/circuit-setup/6chan_energy_meter_main_ethernet_ws.yaml new file mode 100644 index 0000000..cfd25c4 --- /dev/null +++ b/esphome/circuit-setup/6chan_energy_meter_main_ethernet_ws.yaml @@ -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 diff --git a/esphome/circuit-setup/README.md b/esphome/circuit-setup/README.md new file mode 100644 index 0000000..946c2f1 --- /dev/null +++ b/esphome/circuit-setup/README.md @@ -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/) diff --git a/esphome/circuit-setup/calibration/6chan_addon1_calibration.yaml b/esphome/circuit-setup/calibration/6chan_addon1_calibration.yaml new file mode 100644 index 0000000..9b44c70 --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon1_calibration.yaml @@ -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" diff --git a/esphome/circuit-setup/calibration/6chan_addon1_offset_calibrations.yaml b/esphome/circuit-setup/calibration/6chan_addon1_offset_calibrations.yaml new file mode 100644 index 0000000..bd3c32b --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon1_offset_calibrations.yaml @@ -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 diff --git a/esphome/circuit-setup/calibration/6chan_addon2_calibration.yaml b/esphome/circuit-setup/calibration/6chan_addon2_calibration.yaml new file mode 100644 index 0000000..b7af761 --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon2_calibration.yaml @@ -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" diff --git a/esphome/circuit-setup/calibration/6chan_addon2_offset_calibrations.yaml b/esphome/circuit-setup/calibration/6chan_addon2_offset_calibrations.yaml new file mode 100644 index 0000000..98fb553 --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon2_offset_calibrations.yaml @@ -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 diff --git a/esphome/circuit-setup/calibration/6chan_addon3_calibration.yaml b/esphome/circuit-setup/calibration/6chan_addon3_calibration.yaml new file mode 100644 index 0000000..52b297b --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon3_calibration.yaml @@ -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" diff --git a/esphome/circuit-setup/calibration/6chan_addon3_offset_calibrations.yaml b/esphome/circuit-setup/calibration/6chan_addon3_offset_calibrations.yaml new file mode 100644 index 0000000..e337f60 --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon3_offset_calibrations.yaml @@ -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 diff --git a/esphome/circuit-setup/calibration/6chan_addon4_calibration.yaml b/esphome/circuit-setup/calibration/6chan_addon4_calibration.yaml new file mode 100644 index 0000000..1fa6547 --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon4_calibration.yaml @@ -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" diff --git a/esphome/circuit-setup/calibration/6chan_addon4_offset_calibrations.yaml b/esphome/circuit-setup/calibration/6chan_addon4_offset_calibrations.yaml new file mode 100644 index 0000000..e15f7ef --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon4_offset_calibrations.yaml @@ -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 diff --git a/esphome/circuit-setup/calibration/6chan_addon5_calibration.yaml b/esphome/circuit-setup/calibration/6chan_addon5_calibration.yaml new file mode 100644 index 0000000..ae869af --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon5_calibration.yaml @@ -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" diff --git a/esphome/circuit-setup/calibration/6chan_addon5_offset_calibrations.yaml b/esphome/circuit-setup/calibration/6chan_addon5_offset_calibrations.yaml new file mode 100644 index 0000000..b81912d --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon5_offset_calibrations.yaml @@ -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 diff --git a/esphome/circuit-setup/calibration/6chan_addon6_calibration.yaml b/esphome/circuit-setup/calibration/6chan_addon6_calibration.yaml new file mode 100644 index 0000000..5b13fd8 --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon6_calibration.yaml @@ -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" diff --git a/esphome/circuit-setup/calibration/6chan_addon6_offset_calibrations.yaml b/esphome/circuit-setup/calibration/6chan_addon6_offset_calibrations.yaml new file mode 100644 index 0000000..6b9f309 --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_addon6_offset_calibrations.yaml @@ -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 diff --git a/esphome/circuit-setup/calibration/6chan_main_calibration.yaml b/esphome/circuit-setup/calibration/6chan_main_calibration.yaml new file mode 100644 index 0000000..8525f12 --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_main_calibration.yaml @@ -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" diff --git a/esphome/circuit-setup/calibration/6chan_main_offset_calibrations.yaml b/esphome/circuit-setup/calibration/6chan_main_offset_calibrations.yaml new file mode 100644 index 0000000..0c72d2e --- /dev/null +++ b/esphome/circuit-setup/calibration/6chan_main_offset_calibrations.yaml @@ -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 diff --git a/esphome/circuit-setup/examples/6chan_energy_meter_3-phase_ethernet.yaml b/esphome/circuit-setup/examples/6chan_energy_meter_3-phase_ethernet.yaml new file mode 100644 index 0000000..4ed8d70 --- /dev/null +++ b/esphome/circuit-setup/examples/6chan_energy_meter_3-phase_ethernet.yaml @@ -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 diff --git a/esphome/circuit-setup/examples/6chan_energy_meter_6-addons_42-channels.yaml b/esphome/circuit-setup/examples/6chan_energy_meter_6-addons_42-channels.yaml new file mode 100644 index 0000000..0ae13b0 --- /dev/null +++ b/esphome/circuit-setup/examples/6chan_energy_meter_6-addons_42-channels.yaml @@ -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 diff --git a/esphome/circuit-setup/examples/6chan_energy_meter_6-addons_ethernet.yaml b/esphome/circuit-setup/examples/6chan_energy_meter_6-addons_ethernet.yaml new file mode 100644 index 0000000..4eaa32d --- /dev/null +++ b/esphome/circuit-setup/examples/6chan_energy_meter_6-addons_ethernet.yaml @@ -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 diff --git a/esphome/circuit-setup/examples/6chan_energy_meter_house_solar_ha_kwh.yaml b/esphome/circuit-setup/examples/6chan_energy_meter_house_solar_ha_kwh.yaml new file mode 100644 index 0000000..a2578f2 --- /dev/null +++ b/esphome/circuit-setup/examples/6chan_energy_meter_house_solar_ha_kwh.yaml @@ -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 diff --git a/esphome/circuit-setup/examples/6chan_energy_meter_v1.2.yaml b/esphome/circuit-setup/examples/6chan_energy_meter_v1.2.yaml new file mode 100644 index 0000000..0ee83b6 --- /dev/null +++ b/esphome/circuit-setup/examples/6chan_energy_meter_v1.2.yaml @@ -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 diff --git a/esphome/circuit-setup/examples/6chan_main_calibration_beta.yaml b/esphome/circuit-setup/examples/6chan_main_calibration_beta.yaml new file mode 100644 index 0000000..5f239bb --- /dev/null +++ b/esphome/circuit-setup/examples/6chan_main_calibration_beta.yaml @@ -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" diff --git a/esphome/circuit-setup/meter_sensors/6chan_addon1.yaml b/esphome/circuit-setup/meter_sensors/6chan_addon1.yaml new file mode 100644 index 0000000..6523e41 --- /dev/null +++ b/esphome/circuit-setup/meter_sensors/6chan_addon1.yaml @@ -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} diff --git a/esphome/circuit-setup/meter_sensors/6chan_addon2.yaml b/esphome/circuit-setup/meter_sensors/6chan_addon2.yaml new file mode 100644 index 0000000..6c50c4b --- /dev/null +++ b/esphome/circuit-setup/meter_sensors/6chan_addon2.yaml @@ -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} diff --git a/esphome/circuit-setup/meter_sensors/6chan_addon3.yaml b/esphome/circuit-setup/meter_sensors/6chan_addon3.yaml new file mode 100644 index 0000000..f69d18b --- /dev/null +++ b/esphome/circuit-setup/meter_sensors/6chan_addon3.yaml @@ -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} diff --git a/esphome/circuit-setup/meter_sensors/6chan_addon4.yaml b/esphome/circuit-setup/meter_sensors/6chan_addon4.yaml new file mode 100644 index 0000000..a47af86 --- /dev/null +++ b/esphome/circuit-setup/meter_sensors/6chan_addon4.yaml @@ -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} diff --git a/esphome/circuit-setup/meter_sensors/6chan_addon5.yaml b/esphome/circuit-setup/meter_sensors/6chan_addon5.yaml new file mode 100644 index 0000000..2c8502c --- /dev/null +++ b/esphome/circuit-setup/meter_sensors/6chan_addon5.yaml @@ -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} diff --git a/esphome/circuit-setup/meter_sensors/6chan_addon6.yaml b/esphome/circuit-setup/meter_sensors/6chan_addon6.yaml new file mode 100644 index 0000000..7fe0e22 --- /dev/null +++ b/esphome/circuit-setup/meter_sensors/6chan_addon6.yaml @@ -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} diff --git a/esphome/circuit-setup/meter_sensors/6chan_main_sensor.yaml b/esphome/circuit-setup/meter_sensors/6chan_main_sensor.yaml new file mode 100644 index 0000000..258660d --- /dev/null +++ b/esphome/circuit-setup/meter_sensors/6chan_main_sensor.yaml @@ -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} diff --git a/esphome/circuit-setup/power_quality/6chan_addon1_power_quality.yaml b/esphome/circuit-setup/power_quality/6chan_addon1_power_quality.yaml new file mode 100644 index 0000000..d202799 --- /dev/null +++ b/esphome/circuit-setup/power_quality/6chan_addon1_power_quality.yaml @@ -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 diff --git a/esphome/circuit-setup/power_quality/6chan_addon2_power_quality.yaml b/esphome/circuit-setup/power_quality/6chan_addon2_power_quality.yaml new file mode 100644 index 0000000..7e4f9a9 --- /dev/null +++ b/esphome/circuit-setup/power_quality/6chan_addon2_power_quality.yaml @@ -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 diff --git a/esphome/circuit-setup/power_quality/6chan_addon3_power_quality.yaml b/esphome/circuit-setup/power_quality/6chan_addon3_power_quality.yaml new file mode 100644 index 0000000..7046c28 --- /dev/null +++ b/esphome/circuit-setup/power_quality/6chan_addon3_power_quality.yaml @@ -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 diff --git a/esphome/circuit-setup/power_quality/6chan_addon4_power_quality.yaml b/esphome/circuit-setup/power_quality/6chan_addon4_power_quality.yaml new file mode 100644 index 0000000..6ecfc05 --- /dev/null +++ b/esphome/circuit-setup/power_quality/6chan_addon4_power_quality.yaml @@ -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 diff --git a/esphome/circuit-setup/power_quality/6chan_addon5_power_quality.yaml b/esphome/circuit-setup/power_quality/6chan_addon5_power_quality.yaml new file mode 100644 index 0000000..e32cb47 --- /dev/null +++ b/esphome/circuit-setup/power_quality/6chan_addon5_power_quality.yaml @@ -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 diff --git a/esphome/circuit-setup/power_quality/6chan_addon6_power_quality.yaml b/esphome/circuit-setup/power_quality/6chan_addon6_power_quality.yaml new file mode 100644 index 0000000..93cfdba --- /dev/null +++ b/esphome/circuit-setup/power_quality/6chan_addon6_power_quality.yaml @@ -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 diff --git a/esphome/circuit-setup/power_quality/6chan_main_power_quality.yaml b/esphome/circuit-setup/power_quality/6chan_main_power_quality.yaml new file mode 100644 index 0000000..e4a66de --- /dev/null +++ b/esphome/circuit-setup/power_quality/6chan_main_power_quality.yaml @@ -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 diff --git a/esphome/circuit-setup/status_fields/6chan_addon1_status.yaml b/esphome/circuit-setup/status_fields/6chan_addon1_status.yaml new file mode 100644 index 0000000..1217e3a --- /dev/null +++ b/esphome/circuit-setup/status_fields/6chan_addon1_status.yaml @@ -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" diff --git a/esphome/circuit-setup/status_fields/6chan_addon2_status.yaml b/esphome/circuit-setup/status_fields/6chan_addon2_status.yaml new file mode 100644 index 0000000..2d3d3be --- /dev/null +++ b/esphome/circuit-setup/status_fields/6chan_addon2_status.yaml @@ -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" diff --git a/esphome/circuit-setup/status_fields/6chan_addon3_status.yaml b/esphome/circuit-setup/status_fields/6chan_addon3_status.yaml new file mode 100644 index 0000000..525774d --- /dev/null +++ b/esphome/circuit-setup/status_fields/6chan_addon3_status.yaml @@ -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" diff --git a/esphome/circuit-setup/status_fields/6chan_addon4_status.yaml b/esphome/circuit-setup/status_fields/6chan_addon4_status.yaml new file mode 100644 index 0000000..44b07e3 --- /dev/null +++ b/esphome/circuit-setup/status_fields/6chan_addon4_status.yaml @@ -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" diff --git a/esphome/circuit-setup/status_fields/6chan_addon5_status.yaml b/esphome/circuit-setup/status_fields/6chan_addon5_status.yaml new file mode 100644 index 0000000..b8e05f1 --- /dev/null +++ b/esphome/circuit-setup/status_fields/6chan_addon5_status.yaml @@ -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" diff --git a/esphome/circuit-setup/status_fields/6chan_addon6_status.yaml b/esphome/circuit-setup/status_fields/6chan_addon6_status.yaml new file mode 100644 index 0000000..6e92a00 --- /dev/null +++ b/esphome/circuit-setup/status_fields/6chan_addon6_status.yaml @@ -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" diff --git a/esphome/circuit-setup/status_fields/6chan_main_status.yaml b/esphome/circuit-setup/status_fields/6chan_main_status.yaml new file mode 100644 index 0000000..fe23653 --- /dev/null +++ b/esphome/circuit-setup/status_fields/6chan_main_status.yaml @@ -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" diff --git a/esphome/common/media_player.yaml b/esphome/common/media_player.yaml new file mode 100644 index 0000000..c29bebb --- /dev/null +++ b/esphome/common/media_player.yaml @@ -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; \ No newline at end of file diff --git a/esphome/common/mqtt_all.yaml b/esphome/common/mqtt_all.yaml new file mode 100644 index 0000000..0308f24 --- /dev/null +++ b/esphome/common/mqtt_all.yaml @@ -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 diff --git a/esphome/common/mqtt_null.yaml b/esphome/common/mqtt_null.yaml new file mode 100644 index 0000000..62bcd51 --- /dev/null +++ b/esphome/common/mqtt_null.yaml @@ -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 \ No newline at end of file diff --git a/esphome/garage-cleversensor.yaml b/esphome/garage-cleversensor.yaml index 6dcb2f7..8b4ebc4 100644 --- a/esphome/garage-cleversensor.yaml +++ b/esphome/garage-cleversensor.yaml @@ -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" diff --git a/esphome/home-assistant-voice-097b44.yaml b/esphome/home-assistant-voice-097b44.yaml index c983666..6f72272 100644 --- a/esphome/home-assistant-voice-097b44.yaml +++ b/esphome/home-assistant-voice-097b44.yaml @@ -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 \ No newline at end of file + - 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; \ No newline at end of file diff --git a/esphome/power-monitor.yaml b/esphome/power-monitor.yaml index 0775728..e3d8c16 100644 --- a/esphome/power-monitor.yaml +++ b/esphome/power-monitor.yaml @@ -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 diff --git a/lovelace/appliances/dishwasher.yaml b/lovelace/appliances/dishwasher.yaml index f52e321..59ccfbb 100644 --- a/lovelace/appliances/dishwasher.yaml +++ b/lovelace/appliances/dishwasher.yaml @@ -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 \ No newline at end of file + - entity: input_text.dishwasher_runtime + name: Runtime + - entity: counter.dishwasher + name: Cycles \ No newline at end of file diff --git a/lovelace/appliances/keurig.yaml b/lovelace/appliances/keurig.yaml index e79be5f..385f779 100644 --- a/lovelace/appliances/keurig.yaml +++ b/lovelace/appliances/keurig.yaml @@ -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 diff --git a/lovelace/frigate/view-ai-cam03.yaml b/lovelace/frigate/view-ai-cam03.yaml index 88be1c2..462ceb9 100644 --- a/lovelace/frigate/view-ai-cam03.yaml +++ b/lovelace/frigate/view-ai-cam03.yaml @@ -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: diff --git a/lovelace/frigate/view-ai-cam04.yaml b/lovelace/frigate/view-ai-cam04.yaml index f067f9a..47deba2 100644 --- a/lovelace/frigate/view-ai-cam04.yaml +++ b/lovelace/frigate/view-ai-cam04.yaml @@ -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 diff --git a/lovelace/frigate/view-ai-cam06.yaml b/lovelace/frigate/view-ai-cam06.yaml index 8dbfb2a..bf9ce60 100644 --- a/lovelace/frigate/view-ai-cam06.yaml +++ b/lovelace/frigate/view-ai-cam06.yaml @@ -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 diff --git a/lovelace/frigate/view-ai-cam07.yaml b/lovelace/frigate/view-ai-cam07.yaml index 085f4e6..d4a159b 100644 --- a/lovelace/frigate/view-ai-cam07.yaml +++ b/lovelace/frigate/view-ai-cam07.yaml @@ -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 diff --git a/lovelace/frigate/view-ai-cam08.yaml b/lovelace/frigate/view-ai-cam08.yaml index df689fe..46fb68e 100644 --- a/lovelace/frigate/view-ai-cam08.yaml +++ b/lovelace/frigate/view-ai-cam08.yaml @@ -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 diff --git a/lovelace/frigate/view-ai-cam12.yaml b/lovelace/frigate/view-ai-cam12.yaml index 076a2b2..53a44a3 100644 --- a/lovelace/frigate/view-ai-cam12.yaml +++ b/lovelace/frigate/view-ai-cam12.yaml @@ -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 diff --git a/lovelace/frigate/view-ai-cam13.yaml b/lovelace/frigate/view-ai-cam13.yaml deleted file mode 100644 index c18ebb6..0000000 --- a/lovelace/frigate/view-ai-cam13.yaml +++ /dev/null @@ -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 diff --git a/lovelace/frigate/view-ai-cam14.yaml b/lovelace/frigate/view-ai-cam14.yaml deleted file mode 100644 index a01affd..0000000 --- a/lovelace/frigate/view-ai-cam14.yaml +++ /dev/null @@ -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 diff --git a/lovelace/frigate/view-ai-cam18.yaml b/lovelace/frigate/view-ai-cam18.yaml index bca4856..863ef23 100644 --- a/lovelace/frigate/view-ai-cam18.yaml +++ b/lovelace/frigate/view-ai-cam18.yaml @@ -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 diff --git a/lovelace/frigate/view-ai-cam19.yaml b/lovelace/frigate/view-ai-cam19.yaml index ed69791..6bc90bf 100644 --- a/lovelace/frigate/view-ai-cam19.yaml +++ b/lovelace/frigate/view-ai-cam19.yaml @@ -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 diff --git a/lovelace/phone/home.yaml b/lovelace/phone/home.yaml index 1cb14f5..1f752ee 100644 --- a/lovelace/phone/home.yaml +++ b/lovelace/phone/home.yaml @@ -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 diff --git a/lovelace/phone/kitchen.yaml b/lovelace/phone/kitchen.yaml index a766154..be514e9 100644 --- a/lovelace/phone/kitchen.yaml +++ b/lovelace/phone/kitchen.yaml @@ -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 diff --git a/lovelace/resources.yaml b/lovelace/resources.yaml index e1c14fa..921a606 100644 --- a/lovelace/resources.yaml +++ b/lovelace/resources.yaml @@ -1,3 +1,6 @@ +- url: /hacsfiles/mass-player-card/mass-player-card.js + type: module + - url: /webrtc/webrtc-camera.js type: module diff --git a/lovelace/view-ha-floorplan.yaml b/lovelace/view-ha-floorplan.yaml index 1f0818f..fe733e2 100644 --- a/lovelace/view-ha-floorplan.yaml +++ b/lovelace/view-ha-floorplan.yaml @@ -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 diff --git a/lovelace/view-overview.yaml b/lovelace/view-overview.yaml index 23cd2dc..62656b5 100644 --- a/lovelace/view-overview.yaml +++ b/lovelace/view-overview.yaml @@ -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 diff --git a/www/floorplan/floorplan.css b/www/floorplan/floorplan.css index f8a89d4..607f93f 100644 --- a/www/floorplan/floorplan.css +++ b/www/floorplan/floorplan.css @@ -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; */ diff --git a/www/mail_and_packages/6c84a73d-d5a3-4fad-8bc2-3c6d663eff40.gif b/www/mail_and_packages/6c84a73d-d5a3-4fad-8bc2-3c6d663eff40.gif new file mode 100644 index 0000000..94e230c Binary files /dev/null and b/www/mail_and_packages/6c84a73d-d5a3-4fad-8bc2-3c6d663eff40.gif differ diff --git a/www/mail_and_packages/amazon/b7353e92-f701-4f3d-a3d9-0673f7d8d05f.jpg b/www/mail_and_packages/amazon/b7353e92-f701-4f3d-a3d9-0673f7d8d05f.jpg new file mode 100644 index 0000000..a445a39 Binary files /dev/null and b/www/mail_and_packages/amazon/b7353e92-f701-4f3d-a3d9-0673f7d8d05f.jpg differ diff --git a/www/mail_and_packages/overlay.png b/www/mail_and_packages/overlay.png new file mode 100644 index 0000000..6a6c9b1 Binary files /dev/null and b/www/mail_and_packages/overlay.png differ diff --git a/www/mail_and_packages/vignette.png b/www/mail_and_packages/vignette.png new file mode 100644 index 0000000..a5365ce Binary files /dev/null and b/www/mail_and_packages/vignette.png differ diff --git a/www/mail_and_packages/white.png b/www/mail_and_packages/white.png new file mode 100644 index 0000000..a12ccff Binary files /dev/null and b/www/mail_and_packages/white.png differ