ATorch S1B - ESPHome YAML

Having liberated my ATorch S1B powerplug/monitor from Tuya using Cloud Cutter and installing ESPHome on it I’ve created a basic YAML config for it.

It’s still a little raw but is a good start for the device.

esphome:
  name: atorch-smart-switch
  friendly_name: Atorch S1B/W/T/H Smart Switch
  comment: Tuya bk7231n MCU
bk72xx:
  board: generic-bk7231n-qfn32-tuya

logger:

web_server:

captive_portal:

mdns:
api:
ota:
  - platform: esphome

time:
  - platform: homeassistant
    id: homeassistant_time


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:


button:
  - platform: restart
    name: Restart
  - platform: template
    name: "Cycle Run Mode"
    icon: "mdi:restart"
    on_press:
      - script.execute: cycle_run_mode
  - platform: template
    name: "Set Mode On"
    icon: "mdi:power"
    on_press:
      - script.execute: set_mode_on
  - platform: template
    name: "Set Mode Off"
    icon: "mdi:power-off"
    on_press:
      - script.execute: set_mode_off
  - platform: template
    name: "Set Mode Auto"
    icon: "mdi:auto-fix"
    on_press:
      - script.execute: set_mode_auto




debug:
  update_interval: 30s

text_sensor:
  - platform: debug
    reset_reason:
      name: Reset Reason
  - platform: libretiny
    version:
      name: LibreTiny Version

sensor:
  - platform: uptime
    name: Uptime
  - platform: tuya
    sensor_datapoint: 18
    name: "Current"
    unit_of_measurement: A
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
  - platform: tuya
    sensor_datapoint: 19
    name: "Power"
    unit_of_measurement: W
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
  - platform: tuya
    sensor_datapoint: 20
    name: "Voltage"
    unit_of_measurement: V
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
  - platform: tuya
    sensor_datapoint: 102
    name: "Cost"
    unit_of_measurement: ""
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
  - platform: tuya
    sensor_datapoint: 103
    name: "(Unconfirmed) Add Cost"
    unit_of_measurement: "£"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
  - platform: tuya
    sensor_datapoint: 123
    name: "(Unconfirmed) Ele"
    unit_of_measurement: kwh
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
  - platform: tuya
    sensor_datapoint: 124
    name: "Countdown Timer"
    unit_of_measurement: s
  - platform: tuya
    sensor_datapoint: 133
    name: "Frequency"
    unit_of_measurement: Hz
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
  - platform: tuya
    sensor_datapoint: 134
    name: "Power Factor"
    unit_of_measurement: PF
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
  - platform: tuya
    sensor_datapoint: 135
    name: "CPU Temp"
    unit_of_measurement: C


uart:
  rx_pin: RX1
  tx_pin: TX1
  baud_rate: 115200

tuya:
  time_id: homeassistant_time
  # DPIDs processed from schema model: exvou0

switch:
  #Switch One not Used
  #- platform: tuya
    #switch_datapoint: 1
    #name: "Switch 1"
  - platform: tuya
    switch_datapoint: 111
    name: "Beep"
  - platform: tuya
    switch_datapoint: 113
    name: "(Unconfirmed) Data Reset"
  - platform: tuya
    switch_datapoint: 114
    name: "(Unconfirmed) Wifi Reset"
  - platform: tuya
    switch_datapoint: 115
    name: "(Unconfirmed) Factor Reset"
  - platform: tuya
    switch_datapoint: 116
    name: "(Unconfirmed) Screen Rotation"

number:
  - platform: tuya
    number_datapoint: 9
    name: "(Unconfirmed) Countdown 1"
    unit_of_measurement: s
    min_value: 0
    max_value: 360000
    step: 1
  - platform: tuya
    number_datapoint: 17
    name: "(Unconfirmed) Add Ele"
    unit_of_measurement: kwh
    min_value: 0
    max_value: 5000000
    step: 1
  - platform: tuya
    number_datapoint: 101
    name: "(Unconfirmed) Price"
    min_value: 0
    max_value: 99999
    step: 1
  - platform: tuya
    number_datapoint: 104
    name: "(RAW) OVP"
    unit_of_measurement: V
    min_value: 1
    max_value: 2750
    step: 11


  - platform: tuya
    number_datapoint: 105
    name: "(Unconfirmed) Ocp"
    unit_of_measurement: A
    min_value: 1
    max_value: 2000
    step: 1
  - platform: tuya
    number_datapoint: 106
    name: "(Unconfirmed) Opp"
    unit_of_measurement: W
    min_value: 1
    max_value: 4500
    step: 1
  - platform: tuya
    number_datapoint: 108
    name: "Display Brightness"
    min_value: 1
    max_value: 9
    step: 1
  - platform: tuya
    number_datapoint: 109
    name: "Display Brightness (Standby)"
    min_value: 0
    max_value: 9
    step: 1
  - platform: tuya
    number_datapoint: 110
    name: "Display Standby Time"
    unit_of_measurement: s
    min_value: 3
    max_value: 99
    step: 1
  - platform: tuya
    number_datapoint: 119
    name: "(Unconfirmed) Plow"
    unit_of_measurement: W
    min_value: 1
    max_value: 999
    step: 1
  - platform: tuya
    number_datapoint: 120
    name: "(Unconfirmed) Time A"
    unit_of_measurement: min
    min_value: 1
    max_value: 99
    step: 1
  - platform: tuya
    number_datapoint: 121
    name: "(Unconfirmed) Phigh"
    unit_of_measurement: W
    min_value: 1
    max_value: 9999
    step: 1
  - platform: tuya
    number_datapoint: 122
    name: "(Unconfirmed) Time B"
    unit_of_measurement: hor
    min_value: 1
    max_value: 99
    step: 1
  - platform: tuya
    number_datapoint: 125
    name: "(Unconfirmed) Timing Close"
    unit_of_measurement: s
    min_value: 60
    max_value: 359940
    step: 1
  - platform: tuya
    number_datapoint: 126
    name: "(Unconfirmed) Timing Open"
    unit_of_measurement: s
    min_value: 60
    max_value: 359940
    step: 1
  - platform: tuya
    number_datapoint: 127
    name: "(Unconfirmed) Loop Open"
    unit_of_measurement: s
    min_value: 60
    max_value: 359940
    step: 1
  - platform: tuya
    number_datapoint: 128
    name: "(Unconfirmed) Loop Close"
    unit_of_measurement: s
    min_value: 60
    max_value: 359940
    step: 1
  - platform: tuya
    number_datapoint: 129
    name: "(Unconfirmed) Countdown Open"
    unit_of_measurement: s
    min_value: 60
    max_value: 359940
    step: 1
  - platform: tuya
    number_datapoint: 130
    name: "(Unconfirmed) Countdown Close"
    unit_of_measurement: s
    min_value: 60
    max_value: 359940
    step: 1
  - platform: tuya
    number_datapoint: 137
    name: "(Over Voltage Revovery Time"
    unit_of_measurement: min
    min_value: 0
    max_value: 99
    step: 1
  - platform: tuya
    number_datapoint: 139
    name: "Reporting Interval"
    unit_of_measurement: S
    min_value: 1
    max_value: 90
    step: 1

select:
  - platform: tuya
    enum_datapoint: 107
    name: "Language"
    optimistic: true
    options:
      0: Chinese
      1: English
  - platform: tuya
    enum_datapoint: 112
    name: "Switched Mode"
    optimistic: true
    options:
      0: Controlled
      1: Normally_Open
  - platform: tuya
    enum_datapoint: 117
    name: "(Unconfirmed) Standby Screen"
    optimistic: true
    options:
      0: Original
      1: Measurement
  - platform: tuya
    enum_datapoint: 118
    name: "Menu"
    optimistic: true
    options:
      0: Wifi1
      1: Safety_Protection
      2: Outage_A
      3: Outage_B
      4: Timing_Close
      5: Timing_Open
      6: Loop_Timing
      7: Countdown
  - platform: tuya
    enum_datapoint: 131
    name: "Run Mode"
    id: run_mode_select
    optimistic: true
    options:
      0: Open
      1: Close
      2: Auto
  - platform: tuya
    enum_datapoint: 132
    name: "(Unconfirmed) Warning"
    optimistic: true
    options:
      0: "Off"
      1: Ovp
      2: Ocp
      3: Opp
      4: Outage_A
      5: Outage_B
      6: Timing_Open
      7: Timing_Close
      8: Loop_Timing
      9: Countdown
  - platform: tuya
    enum_datapoint: 136
    name: "Price Mode"
    optimistic: true
    options:
      0: Single_Rate
      1: Stair
      2: Peak_Valley_Stair
  - platform: tuya
    enum_datapoint: 138
    name: "Power-up State"
    optimistic: true
    options:
      0: "ON"       #Open
      1: "OFF"      #Close
      2: "Previous" #Memory


script:
  - id: cycle_run_mode
    mode: single
    then:
      - lambda: |-
          auto current_state = id(run_mode_select).state;
          std::string next_state = "Open";  // Default to "Open"
          if (current_state == "Open") {
            next_state = "Close";  // Go to "Close"
          } else if (current_state == "Close") {
            next_state = "Auto";  // Go to "Auto"
          }
          id(run_mode_select).make_call().set_option(next_state).perform();

  - id: set_mode_on
    mode: single
    then:
      - lambda: |-
          id(run_mode_select).make_call().set_option("Open").perform();

  - id: set_mode_off
    mode: single
    then:
      - lambda: |-
          id(run_mode_select).make_call().set_option("Close").perform();

  - id: set_mode_auto
    mode: single
    then:
      - lambda: |-
          id(run_mode_select).make_call().set_option("Auto").perform();
2 Likes