esphome: name: powerboard friendly_name: Powerboard-ID1 includes: - zmpt101b/ZMPT101B.h - zmpt101b/ZMPT101B.cpp - zmpt101b/zmpt101b_custom_sensor.h esp32: board: esp32dev framework: type: arduino # Enable logging logger: # Enable Home Assistant API api: encryption: key: "D69bY/GXlmjYkovak6WIhgmbOH8vwyqvMxIHBriYoaY=" # Example configuration entry ethernet: type: LAN8720 mdc_pin: GPIO23 mdio_pin: GPIO18 clk_mode: GPIO17_OUT phy_addr: 0 i2c: sda: 4 scl: 5 scan: true id: bus_a frequency: 400kHz cd74hc4067: - id: cd74hc4067_1 pin_s0: 32 pin_s1: 33 pin_s2: 13 pin_s3: 16 web_server: version: 3 sorting_groups: - id: sorting_group_voltage name: "Voltages" sorting_weight: 10 - id: sorting_group_current name: "Currents" sorting_weight: 20 - id: sorting_group_aparent_power name: "Power" sorting_weight: 30 port: 80 auth: username: munz password: munz font: - file: "gfonts://Roboto" id: roboto size: 20 display: - platform: ssd1306_i2c model: "SSD1306 128x64" address: 0x3C lambda: |- it.printf(0, 0, id(roboto), "L1:%.1fV", id(voltage_1).state); it.printf(0, 20, id(roboto), "L2:%.1fV", id(voltage_2).state); it.printf(0, 40, id(roboto), "L3:%.1fV", id(voltage_3).state); sensor: - platform: custom lambda: |- auto my_sensor34 = new ZMPT101BSensor(34); auto my_sensor36 = new ZMPT101BSensor(36); auto my_sensor39 = new ZMPT101BSensor(39); App.register_component(my_sensor34); App.register_component(my_sensor36); App.register_component(my_sensor39); return {my_sensor34, my_sensor39, my_sensor36}; sensors: - name: "Voltage L1" id: voltage_1 unit_of_measurement: V accuracy_decimals: 1 state_class: "measurement" web_server: sorting_group_id: sorting_group_voltage sorting_weight: 1 - name: "Voltage L2" id: voltage_2 unit_of_measurement: V accuracy_decimals: 1 state_class: "measurement" web_server: sorting_group_id: sorting_group_voltage sorting_weight: 2 - name: "Voltage L3" id: voltage_3 unit_of_measurement: V accuracy_decimals: 1 state_class: "measurement" web_server: sorting_group_id: sorting_group_voltage sorting_weight: 3 - platform: sht3xd temperature: name: "Board Temperature" id: temperature humidity: name: "Board Humidity" id: humidity address: 0x44 update_interval: 60s - platform: adc pin: 35 id: adc35 update_interval: never attenuation: 12db - platform: cd74hc4067 id: ai1 number: 0 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai2 number: 1 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai3 number: 2 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai4 number: 3 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai5 number: 4 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai6 number: 5 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai7 number: 6 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai8 number: 7 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai9 number: 8 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai10 number: 9 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai11 number: 10 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai12 number: 11 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai13 number: 12 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai14 number: 13 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai15 number: 14 sensor: adc35 update_interval: never - platform: cd74hc4067 id: ai16 number: 15 sensor: adc35 update_interval: never ############## CLAMPS ############## - platform: ct_clamp sensor: ai1 id: Measured_Current_01 name: "Out1_L1_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 1 - platform: ct_clamp sensor: ai2 id: Measured_Current_02 name: "Out1_L2_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 2 - platform: ct_clamp sensor: ai3 id: Measured_Current_03 name: "Out1_L3_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 3 - platform: ct_clamp sensor: ai4 id: Measured_Current_04 name: "Out2_L1_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 4 - platform: ct_clamp sensor: ai5 id: Measured_Current_05 name: "Out2_L2_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 5 - platform: ct_clamp sensor: ai6 id: Measured_Current_06 name: "Out2_L3_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 6 - platform: ct_clamp sensor: ai7 id: Measured_Current_07 name: "Out3_L1_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 7 - platform: ct_clamp sensor: ai8 id: Measured_Current_08 name: "Out3_L2_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 8 - platform: ct_clamp sensor: ai9 id: Measured_Current_09 name: "Out3_L3_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 9 - platform: ct_clamp sensor: ai10 id: Measured_Current_10 name: "Out4_L1_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 10 - platform: ct_clamp sensor: ai11 id: Measured_Current_11 name: "Out4_L2_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 11 - platform: ct_clamp sensor: ai12 id: Measured_Current_12 name: "Out4_L3_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 12 - platform: ct_clamp sensor: ai13 id: Measured_Current_13 name: "Out5_L1_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 13 - platform: ct_clamp sensor: ai14 id: Measured_Current_14 name: "Out5_L2_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 14 - platform: ct_clamp sensor: ai15 id: Measured_Current_15 name: "Out5_L3_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 15 - platform: ct_clamp sensor: ai16 id: Measured_Current_16 name: "Out6_L1_I" sample_duration: 200ms update_interval: never accuracy_decimals: 2 filters: - calibrate_linear: method: exact datapoints: - 0 -> 0 - 0.0038 -> 0 - 0.0043 -> 0.1 - 0.0069 -> 0.2 - 0.0095 -> 0.3 - 0.0158 -> 0.5 - 0.0181 -> 0.6 - 0.633 -> 21 - 0.640 -> 22 - 0.647 -> 23 - 0.650 -> 24 # - clamp: #min_value: 0.0038 web_server: sorting_group_id: sorting_group_current sorting_weight: 16 - platform: template id: power1 name: "Out1_L1_S" lambda: return id(Measured_Current_01).state * id(voltage_1).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 1 - platform: template id: power2 name: "Out1_L2_S" lambda: return id(Measured_Current_02).state * id(voltage_2).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 2 - platform: template id: power3 name: "Out1_L3_S" lambda: return id(Measured_Current_03).state * id(voltage_3).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 3 - platform: template id: power4 name: "Out2_L1_S" lambda: return id(Measured_Current_04).state * id(voltage_1).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 4 - platform: template id: power5 name: "Out2_L2_S" lambda: return id(Measured_Current_05).state * id(voltage_2).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 5 - platform: template id: power6 name: "Out2_L3_S" lambda: return id(Measured_Current_06).state * id(voltage_3).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 6 - platform: template id: power7 name: "Out3_L1_S" lambda: return id(Measured_Current_07).state * id(voltage_1).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 7 - platform: template id: power8 name: "Out3_L2_S" lambda: return id(Measured_Current_08).state * id(voltage_2).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 8 - platform: template id: power9 name: "Out3_L3_S" lambda: return id(Measured_Current_09).state * id(voltage_3).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 9 - platform: template id: power10 name: "Out4_L1_S" lambda: return id(Measured_Current_10).state * id(voltage_1).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 10 - platform: template id: power11 name: "Out4_L2_S" lambda: return id(Measured_Current_11).state * id(voltage_2).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 11 - platform: template id: power12 name: "Out4_L3_S" lambda: return id(Measured_Current_12).state * id(voltage_3).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 12 - platform: template id: power13 name: "Out5_L1_S" lambda: return id(Measured_Current_13).state * id(voltage_1).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 13 - platform: template id: power14 name: "Out5_L2_S" lambda: return id(Measured_Current_14).state * id(voltage_2).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 14 - platform: template id: power15 name: "Out5_L3_S" lambda: return id(Measured_Current_15).state * id(voltage_3).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 15 - platform: template id: power16 name: "Out6_L1_S" lambda: return id(Measured_Current_16).state * id(voltage_1).state / 1000; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 16 - platform: template id: power17 name: "Out1_S" lambda: return id(power1).state + id(power2).state + id(power3).state; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 17 - platform: template id: power18 name: "Out2_S" lambda: return id(power4).state + id(power5).state + id(power6).state; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 18 - platform: template id: power19 name: "Out3_S" lambda: return id(power7).state + id(power8).state + id(power9).state; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 19 - platform: template id: power20 name: "Out4_S" lambda: return id(power10).state + id(power11).state + id(power12).state; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 20 - platform: template id: power21 name: "Out5_S" lambda: return id(power13).state + id(power14).state + id(power15).state; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 21 - platform: template id: power22 name: "Out_sum_S" lambda: return id(power17).state + id(power18).state + id(power19).state + id(power20).state + id(power21).state + id(power16).state; device_class: apparent_power unit_of_measurement: 'kVA' update_interval: never web_server: sorting_group_id: sorting_group_aparent_power sorting_weight: 22 - platform: template id: suml1 name: "Sum_L1_I" lambda: return id(Measured_Current_01).state + id(Measured_Current_04).state + id(Measured_Current_07).state + id(Measured_Current_10).state + id(Measured_Current_13).state + id(Measured_Current_16).state; device_class: Current unit_of_measurement: 'A' update_interval: never web_server: sorting_group_id: sorting_group_current sorting_weight: 17 - platform: template id: suml2 name: "Sum_L2_I" lambda: return id(Measured_Current_02).state + id(Measured_Current_05).state + id(Measured_Current_08).state + id(Measured_Current_11).state + id(Measured_Current_14).state; device_class: Current unit_of_measurement: 'A' update_interval: never web_server: sorting_group_id: sorting_group_current sorting_weight: 18 - platform: template id: suml3 name: "Sum_L3_I" lambda: return id(Measured_Current_03).state + id(Measured_Current_06).state + id(Measured_Current_09).state + id(Measured_Current_12).state + id(Measured_Current_15).state; device_class: Current unit_of_measurement: 'A' update_interval: never web_server: sorting_group_id: sorting_group_current sorting_weight: 19 ######## TEMPLATES ########### interval: - interval: 3400ms then: - lambda: |- id(Measured_Current_01).update(); id(power1).update(); - delay: 200ms - lambda: |- id(Measured_Current_02).update(); id(power2).update(); - delay: 200ms - lambda: |- id(Measured_Current_03).update(); id(power3).update(); - delay: 200ms - lambda: |- id(Measured_Current_04).update(); id(power4).update(); - delay: 200ms - lambda: |- id(Measured_Current_05).update(); id(power5).update(); - delay: 200ms - lambda: |- id(Measured_Current_06).update(); id(power6).update(); - delay: 200ms - lambda: |- id(Measured_Current_07).update(); id(power7).update(); - delay: 200ms - lambda: |- id(Measured_Current_08).update(); id(power8).update(); - delay: 200ms - lambda: |- id(Measured_Current_09).update(); id(power9).update(); - delay: 200ms - lambda: |- id(Measured_Current_10).update(); id(power10).update(); - delay: 200ms - lambda: |- id(Measured_Current_11).update(); id(power11).update(); - delay: 200ms - lambda: |- id(Measured_Current_12).update(); id(power12).update(); - delay: 200ms - lambda: |- id(Measured_Current_13).update(); id(power13).update(); - delay: 200ms - lambda: |- id(Measured_Current_14).update(); id(power14).update(); - delay: 200ms - lambda: |- id(Measured_Current_15).update(); id(power15).update(); - delay: 200ms - lambda: |- id(Measured_Current_16).update(); id(power16).update(); - delay: 200ms - lambda: |- id(power17).update(); id(power18).update(); id(power19).update(); id(power20).update(); id(power21).update(); id(power22).update(); id(suml1).update(); id(suml2).update(); id(suml3).update();