# https://github.com/FlorianSoler/OpenBeken-Action-lsc-smartplug-with-monitoring-guide/tree/main?tab=readme-ov-file substitutions: devicename: lscp03 low_devicename: lscp03 friendly_devicename: LSC Plug 03 update_interval_seconds: "15s" esphome: name: $devicename friendly_name: $friendly_devicename platformio_options: lib_ignore: - RPAsyncTCP bk72xx: board: generic-bk7231t-qfn32-tuya packages: # Enable Home Assistant API esphome: !include common/keys.yaml diag: !include common/diag.yaml logger: web_server: port: 80 wifi: ssid: !secret iot_ssid password: !secret iot_password domain: .int.mmax.cloud sensor: # # power monitoring # # PC191HA includes a BL0937 chip for measuring power consumption # and BL0937 is a variation of hlw8012, but using inverted SEL pin functionality - platform: hlw8012 model: BL0937 # note that the model must be specified to use special calculation parameters sel_pin: # I believe that cf_pin reports either Voltage or Current depending on this select pin inverted: true # determine whether true reports Voltage number: P11 cf1_pin: inverted: true number: P24 cf_pin: inverted: true number: P26 update_interval: 5s change_mode_every: 4 # update_interval: 5s # initial_mode: "VOLTAGE" # change_mode_every: 4294967295 # Adjust according to the actual resistor values on board to calibrate the specific unit # voltage_divider: "895" # LOWER VALUE GIVES LOWER VOLTAE # current_resistor: "0.0006" # HIGHER VALUE GIVES LOWER WATTAGE voltage_divider: "814" current_resistor: "0.001" # how the power monitoring values are returned to ESPHome voltage: name: $friendly_devicename Voltage id: ${low_devicename}_voltage unit_of_measurement: V accuracy_decimals: 1 filters: - skip_initial: 2 - sliding_window_moving_average: window_size: 4 send_every: 2 on_value: component.update: ${low_devicename}_apparent_power power: name: $friendly_devicename Power id: ${low_devicename}_power unit_of_measurement: W accuracy_decimals: 0 on_value: component.update: ${low_devicename}_power_factor filters: # - skip_initial: 15 - skip_initial: 2 - sliding_window_moving_average: window_size: 4 send_every: 2 current: name: $friendly_devicename Current id: ${low_devicename}_current unit_of_measurement: A accuracy_decimals: 3 filters: # - multiply: 1 - multiply: 0.450 - skip_initial: 2 - sliding_window_moving_average: window_size: 4 send_every: 2 # power is simply current x voltage -- except that the pc191ha doesn't follow that formula. # Setting current_resistor to give an accurate Amperage does NOT also give the correct Wattage # my work-around is to calculate current from power / voltage # - platform: template # name: $friendly_devicename Current # id: ${low_devicename}_current # unit_of_measurement: A # accuracy_decimals: 2 # update_interval: $update_interval_seconds # lambda: |- # return (id(${low_devicename}_power).state / id(${low_devicename}_voltage).state); # filters: # - skip_initial: 5 # give time for data to settle to avoid NaN - platform: total_daily_energy name: $friendly_devicename daily consumption id: ${low_devicename}_total_daily_energy power_id: ${low_devicename}_apparent_power filters: - multiply: 0.001 # to kWh unit_of_measurement: kWh - platform: template name: "Apparent power" id: ${low_devicename}_apparent_power unit_of_measurement: VA device_class: apparent_power lambda: |- return id(${low_devicename}_voltage).state * id(${low_devicename}_current).state; update_interval: never on_value: component.update: ${low_devicename}_power_factor - platform: template name: "Power factor" id: ${low_devicename}_power_factor unit_of_measurement: '' device_class: power_factor lambda: |- return id(${low_devicename}_power).state / id(${low_devicename}_apparent_power).state; filters: - clamp: min_value: 0 max_value: 1 update_interval: never light: - platform: binary name: "led" internal: true id: led output: red_led output: - platform: gpio id: red_led pin: number: P8 # inverted: true status_led: pin: number: P10 # inverted: true binary_sensor: - platform: gpio pin: number: P7 mode: input: true pullup: true inverted: true id: button1 filters: - delayed_on: 50ms - delayed_off: 50ms on_click: - switch.toggle: outlet switch: - platform: gpio name: ${friendly_devicename} Outlet id: outlet pin: P6 icon: mdi:power-socket-eu on_turn_on: - light.turn_on: led on_turn_off: - light.turn_off: led restore_mode: RESTORE_DEFAULT_OFF # Switch to restart the plug - platform: restart name: ${friendly_devicename} Restart Switch # Enable time component to reset energy at midnight time: - platform: homeassistant id: homeassistant_time