ATorch GR2PWS ESPHome Integration [CB2S] [Power Meter/Relay/Switch]

Hey folks,

Last night I took apart my ATorch GR2PWS and flashed the chip inside to cut it off from tuya. I went down a long route to do this - taking the chip out at first, then flashing it with Owner avatar OpenBK7231T_App first. Before doing all that, I dumped the whole firmware, and got all the TuyaMCU pins using the tuya cloud integration trick.

Anyway, here is the ESPHome YAML that works for my situation (There are a few things im not sure on, they will be labeled with (Unconfirmed).

EDIT: forgot to say, I got this using the ltchiptool 4.11.1 => UPK2ESPHome => ESPHome YAML, made it suuuuper easy

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  name_add_mac_suffix: true

bk72xx:
  board: generic-bk7231n-qfn32-tuya

# Enable logging
logger:

# Example configuration entry
web_server:
  port: 80

captive_portal:

mdns:
  disabled: false

# Enable Home Assistant API
api:
  encryption:
    key: ${api_encryption}

ota:
  password: ${ota_password}

time:
  - platform: homeassistant
    id: homeassistant_time

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  use_address: ${ip}

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: ${ap_ssid}
    password: ${ap_password}

button:
  - platform: restart
    name: Restart

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
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      
  - platform: tuya
    sensor_datapoint: 103
    name: Add'l Cost
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      
  - platform: tuya
    sensor_datapoint: 122
    name: Electricity leakage
    unit_of_measurement: kw.h
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      
  - platform: tuya
    sensor_datapoint: 123
    name: Total Electricity
    unit_of_measurement: kw.h
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      
  - 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: ""
    
  - platform: tuya
    sensor_datapoint: 140
    name: Balance Energy
    unit_of_measurement: kWh
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

uart:
  rx_pin: RX1
  tx_pin: TX1
  baud_rate: 9600

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

switch:
  - platform: tuya
    switch_datapoint: 1
    name: Switch State
    
  - platform: tuya
    switch_datapoint: 111
    name: Key Beep
    
  - platform: tuya
    switch_datapoint: 113
    name: Data Reset
    
  - platform: tuya
    switch_datapoint: 114
    name: Wifi Reset
    
  - platform: tuya
    switch_datapoint: 115
    name: Factory Reset
    
  - platform: tuya
    switch_datapoint: 116
    name: Screen Rotation
    
  - platform: tuya
    switch_datapoint: 120
    name: Overrun Control
    
  - platform: tuya
    switch_datapoint: 126
    name: Real Time Data Refresh
    
  - platform: tuya
    switch_datapoint: 139
    name: Prepayment Switch
    
  - platform: tuya
    switch_datapoint: 141
    name: Clear Remaining Available Power

number:
  - platform: tuya
    number_datapoint: 9
    name: Countdown
    unit_of_measurement: s
    min_value: 0
    max_value: 360000
    step: 1
    mode: box
    
  - platform: tuya
    number_datapoint: 17
    name: Add Electricity
    unit_of_measurement: kwh
    min_value: 0
    max_value: 5000000
    step: 1
    
  - platform: tuya
    number_datapoint: 101
    name: Price
    min_value: 0
    max_value: 99999
    step: 1
    mode: box
    
  - platform: tuya
    number_datapoint: 104
    name: Over Voltage Protection
    unit_of_measurement: V
    min_value: 1
    max_value: 3200
    step: 1
    mode: box
    
  - platform: tuya
    number_datapoint: 105
    name: Over Current Protection
    unit_of_measurement: A
    min_value: 1
    max_value: 1000
    step: 1
    mode: box
    
  - platform: tuya
    number_datapoint: 106
    name: Over Power Protection
    unit_of_measurement: W
    min_value: 1
    max_value: 32000
    step: 1
    mode: box   
    
  - platform: tuya
    number_datapoint: 108
    name: Display Brightness
    min_value: 1
    max_value: 9
    step: 1
    
  - platform: tuya
    number_datapoint: 109
    name: Standby Brightness
    min_value: 0
    max_value: 9
    step: 1
    
  - platform: tuya
    number_datapoint: 110
    name: Standby Time
    unit_of_measurement: s
    min_value: 3
    max_value: 99
    step: 1
    mode: box
    
  - platform: tuya
    number_datapoint: 119
    name: Low Voltage Protection
    unit_of_measurement: V
    min_value: 1
    max_value: 3200
    step: 1
    mode: box
    
  - platform: tuya
    name: (Unconfirmed) Olcp
    number_datapoint: 121
    unit_of_measurement: A
    min_value: 10
    max_value: 100
    step: 1
    
  - platform: tuya
    number_datapoint: 124
    name: Leakage Current
    unit_of_measurement: A
    min_value: 0
    max_value: 120000
    step: 1
    
  - platform: tuya
    number_datapoint: 125
    name: Reporting Interval
    unit_of_measurement: S
    min_value: 1
    max_value: 90
    step: 1
    mode: box
    
  - platform: tuya
    number_datapoint: 137
    name: (Unconfirmed) Over Time
    unit_of_measurement: min
    min_value: 0
    max_value: 99
    step: 1
    
  - platform: tuya
    number_datapoint: 142
    name: Energy Charge
    unit_of_measurement: kWh
    min_value: 0
    max_value: 500000
    step: 1
    
  - platform: tuya
    number_datapoint: 143
    name: Power electricity not enough alarm
    unit_of_measurement: kWh
    min_value: 10
    max_value: 500
    step: 1

select:
  - platform: tuya
    enum_datapoint: 107
    name: Device Language
    optimistic: true
    options:
      0: Chinese
      1: English
      
  - platform: tuya
    enum_datapoint: 112
    name: Switch Mode
    optimistic: true
    options:
      0: Controlled
      1: Normally_Open
      
  - platform: tuya
    enum_datapoint: 117
    name: Standby Screen
    optimistic: true
    options:
      0: Original
      1: Measurement
      
  - platform: tuya
    enum_datapoint: 118
    name: Device Interface
    optimistic: true
    options:
      0: Front
      1: Back
      2: Display_Off
      
  - platform: tuya
    enum_datapoint: 132
    name: Warning Flag
    optimistic: true
    options:
      0: "Off"
      1: Ovp
      2: Ocp
      3: Opp
      4: Lvp
      5: Le
      6: Olcp
      
  - 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: Device Power-Up Switch Status
    optimistic: true
    options:
      0: Memory

{
  "1": "Switch state",
  "9": "Countdown",
  "17": "Add Electricity",
  "18": "Current",
  "19": "Power",
  "20": "Voltage",
  "101": "Price",
  "102": "Bill",
  "103": "Add Bill",
  "104": "OVP",
  "105": "OCP",
  "106": "OPP",
  "107": "Device Language",
  "108": "Display Brightness",
  "109": "Standby Brightness",
  "110": "Enter standby time",
  "111": "Key Beep",
  "112": "Switch Mode",
  "113": "Data Zero",
  "114": "Wi-Fi Device Reset",
  "115": "System All Default Settings",
  "116": "Screen rontation",
  "117": "Standby Screen",
  "118": "Device Interface",
  "119": "LVP",
  "120": "Overrun Control Enable",
  "121": "Leakage valve value:",
  "122": "Electricity leakage",
  "123": "Total Ele",
  "124": "Leakage Current",
  "125": "Data refresh interval time",
  "126": "Real time data refresh switch",
  "127": "ON",
  "128": "OFF",
  "129": "CDON",
  "130": "CDOFF",
  "131": "Switch",
  "132": "Alarm flag or Warning flag.",
  "133": "Frequency",
  "134": "Factor",
  "135": "CPU Temp",
  "136": "Price Mode:",
  "137": "Volt recover delay time:",
  "138": "Device Power-up switch status:",
  "139": "Prepayment switch",
  "140": "Balance energy",
  "141": "剩余可用电量清零",
  "142": "Energy charge",
  "143": "Power electricity not enough alarm"
}
1 Like

@thegutuproject - hi thanks for this!

I was wondering, could you confirm if this device is a double-pole relay (as in L+N switching)?
Also can you insert 35mm2 wires into these?

Btw, any tips on how to open the device?

Only one side is switched.
Line = Switched
Neutral = Straight through
Opening for wire is 7mm x 7mm
Remove slide clip (press sides in and move toward center of unit)
A screw in under clip
Second screw is under a small sticker label.

Thank you Alex for the information. I have three of these units (need two for project). I am not sure I have the knowledge to understand all this but after disassembly I see how to attach the required wires to reprogram, (I understand how to remove the solder to isolate the wifi board from the unit) using the BL7321 flasher program. I see how to download the original firmware and save it. Does the flasher handle any encryption info needed for the unit to operate? If not, now do I obtain that info?
Thanks

Was able to get encryption keys using ltchiptool-v4.11.2. Looks like the standard keys for this device to date: 510fb093 a3cbeadc 5993a17e c7adeb03
Was also able to read/download Flash, ROM, eFuse info.

Using bk7231flasher_1.3.3 Was able to download the Flash but at the end could not get Template/GPIO info - this error info:
Sorry, no meaningful pins data found. This device may be TuyaMCU or a custom one with no Tuya config data.
Baud keyword found, this device may be TuyaMCU or BL0942. Baud value is 9600
No module information found.
And the Tuya section starts, as usual, at 2023424

Also:
Could not read OBK config info using BK7231 UART Easy Flasher. Got this as results:
Flash def found! For: 1560EB
Flash information: mid: 1560EB, icName: TH25Q_16HB, manufacturer: TH, szMem: 1000000, szSR: 2, cwUnp: 0, cwEnp: 7, cwMsk: 407C, sb: 2, lb: 5, cwdRd: 05-35-FF-FF, cwdWr: 01-FF-FF-FF
Entering SetProtectState(True)…
sr: 0
sr: 0
final sr: 0
msk: 407c
cw: 0, sb: 2, lb: 5
bfd: 0
SetProtectState(True) success!
Going to read encryption key…
Encryption key read done!
Encryption key: 510fb093 a3cbeadc 5993a17e c7adeb03
Going to start reading at offset 0x1D1000…
Reading 0x1D1000… Ok!
Basic read operation finished, but now it’s time to verify…
Starting CRC check for 1 sectors, starting at offset 0x1D1000
CRC matches 0xEAB98F5!
All read!
Loaded total 0x1000 bytes
It’s not an OBK config, header is bad
OBK config load failed.

Wondering if I can flash OpenBK7231N_QIO_1.17.745.bin and use the above YAML (modified a bit) to get this running in Home Assistant. Sure could use some direction. Thanks

A very good thing.
After reflashing on ESPHome, all display functions are preserved?