logo elektroda
logo elektroda
X
logo elektroda

[BK7231N/CBU] Flashing ESPHome on EPT Tech TLC2206/TLC2326

john34 6321 20
Best answers

How can I flash ESPHome or another local firmware onto an EPT Tech TLC2206 tank level sensor with a BK7231N/CBU board when flashing tools do not recognize it?

The device is most likely a TuyaMCU-based sensor, so it needs more than just replacing the BK7231N firmware; once flashed, it also needs the Tuya datapoints configured in ESPHome or a custom component [#21083504][#21139441] The TLC2206 variant was flashed successfully with cloudcutter, and ESPHome then worked, although setting the height and alarm levels was still blocked by an ESPHome bug until PR #7024 is merged, so a custom external component was used as a workaround [#21139441] For the TLC2326, cloudcutter was not usable because the firmware was patched (2.1.17), and the working method was to use hot air to remove the IBU, flash it with ltchiptool, then solder it back [#21206092] The rework also helped remove the potting epoxy, and the same ESPHome YAML used for the TLC2206 worked on the TLC2326 afterward [#21206092] Another user confirmed the device can be flashed in place on the board, but if the TuyaMCU side does not answer in logs, the UART/connection to the main board needs to be restored correctly [#21762814][#21762753]
Generated by the language model.
ADVERTISEMENT
  • #1 21083458
    john34
    Level 3  
    Posts: 5
    Hello!

    I recently purchased a tank level sensor (EPT Tech TLC2206) that has a Tuya CBU-IPEX board with a BK7231N SoC. I was hoping to flash ESPHome (or something local, other than Tuya) on it, but I'm struggling to get it recognized by any of the flashing tools. The whole board is covered in epoxy, which doesn't make things any easier.

    EPT Tech liquid level sensor set with smartphone app.
    https://www.aliexpress.com/item/1005005940048434.html

    Any help would be appreciated!

    Circuit board of the EPT Tech TLC2206 tank level sensor.



    Edit: Final update, including a TLC2236 flash: https://www.elektroda.com/rtvforum/topic4054399.html#21206092
  • ADVERTISEMENT
  • #2 21083504
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14406
    Help: 650
    Rate: 12340
    This is most likely a TuyaMCU device. It wont work if you just flash a new firmware. It requires futher configuration.

    I don't know how to do it in ESPhome and if it's supported or not, but here is my detailed TuyaMCU guide for OBK:
    TuyaMCU flashing, setup and configuration guide - configure dpIDs for Home Assistant
    I can help you with the setup step by step if you decide to take the approach I suggested.
    Helpful post? Buy me a coffee.
  • #3 21085969
    divadiow
    Level 38  
    Posts: 4847
    Help: 421
    Rate: 854
    Keep us posted! This one looks interesting
  • #4 21086033
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14406
    Help: 650
    Rate: 12340
    I can see the extra coating on the board. It's used to secure the PCB against the moisture.
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #5 21109622
    divadiow
    Level 38  
    Posts: 4847
    Help: 421
    Rate: 854
    did you get anywhere?
  • #6 21109627
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14406
    Help: 650
    Rate: 12340
    We don't have that kind of device on forum often.
    Helpful post? Buy me a coffee.
  • #7 21135841
    divadiow
    Level 38  
    Posts: 4847
    Help: 421
    Rate: 854
    Code: Text
    Log in, to see the code


    Code: JSON
    Log in, to see the code
    Attachments:
    • dump_2024-06-25_21-34-39_lightleak.bin (2 MB) You must be logged in to download this attachment.
  • ADVERTISEMENT
  • Helpful post
    #8 21139441
    piotrszulc1
    Level 10  
    Posts: 37
    Help: 3
    Rate: 8
    I've got this device and I was able to flash it using cloudcutter.
    It is indeed a tuyamcu device. You can use it in esphome, but currently it is not possible to set the height or alarm levels due to a bug in esphome (until this gets merged: https://github.com/esphome/esphome/pull/7024). I was able to make it work with my custom external component.
    Works nicely so far.
  • #9 21191143
    john34
    Level 3  
    Posts: 5
    >>21139441

    Do you recall the steps needed to flash it with ESPhome via CloudCutter? If I recall from when I tried originally, it said the device was not exploitable.
  • #10 21191155
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14406
    Help: 650
    Rate: 12340
    Many devices are patched now. Here is a list of tutorials showing how to flash Tuya devices:
    https://www.youtube.com/playlist?list=PLzbXEc2ebpH0CZDbczAXT94BuSGrd_GoM
    Look for BK7231 tutorials.
    Helpful post? Buy me a coffee.
  • #11 21191171
    john34
    Level 3  
    Posts: 5
    p.kaczmarek2 wrote:
    Many devices are patched now. Here is a list of tutorials showing how to flash Tuya devices:
    https://www.youtube.com/playlist?list=PLzbXEc2ebpH0CZDbczAXT94BuSGrd_GoM
    Look for BK7231 tutorials.


    Thanks; I should have clarified. I'm not sure which profile to use with cloudcutter as one doesn't seem to exist for this unit specifically.

    Edit: Looks like it now exists. Yay! Will give that a shot and update.

    Added after 1 [hours] 19 [minutes]:

    piotrszulc1 wrote:
    I've got this device and I was able to flash it using cloudcutter.
    It is indeed a tuyamcu device. You can use it in esphome, but currently it is not possible to set the height or alarm levels due to a bug in esphome (until this gets merged: https://github.com/esphome/esphome/pull/7024). I was able to make it work with my custom external component.
    Works nicely so far.


    I was able to get this going as well. Looks like someone added the profile/model information to cloudcutter recently, and it worked.

    Would you mind sharing your YAML for Esphome? I'm not sure I'm interpreting the datapoints correctly, or if there's just an inherent inaccuracy in the reporting (as long as it's consistent is all that matters). Looks like distance is reported in centimetres from datapoint 22 - but I get different results with liquid vs solid.
  • #12 21192328
    piotrszulc1
    Level 10  
    Posts: 37
    Help: 3
    Rate: 8
    @john34
    My whole yaml consists of many packages, so pasting here only the relevant part.
    Also note that I'm using my external component (uyat) to workaround the missing features in esphome.


    
    
    bk72xx:
      board: cbu
      framework:
        version: 0.0.0
        source: "/libretiny"
    
    logger:
    
    text_sensor:
      - platform: libretiny
        version:
          name: LibreTiny Version
      - platform: template
        id: liquid_state_text
        name: "Liquid state"
    
    uart:
      - id: uyat_uart
        rx_pin: RX1
        tx_pin: TX1
        baud_rate: 9600
    
    uyat:
       time_id: homeassistant_time
       on_datapoint_update:
          - sensor_datapoint: 1
            datapoint_type: enum
            then:
              - lambda: |-
                  if (x == 0) id(liquid_state_text).publish_state("normal");
                  if (x == 1) id(liquid_state_text).publish_state("low");
                  if (x == 2) id(liquid_state_text).publish_state("high");
    
    sensor:
      - platform: "uyat"
        id: liquid_level_number
        name: "Liquid Level"
        unit_of_measurement: "%"
        sensor_datapoint: 22
        filters:
          - throttle_average: 10s
    
      - platform: "uyat"
        id: liquid_depth_number
        name: "Liquid Depth"
        unit_of_measurement: "m"
        accuracy_decimals: 2
        sensor_datapoint: 2
        filters:
          - multiply: 0.01
    
    number:
      - platform: "uyat"
        id: max_set_number
        name: "Alarm at maximum"
        unit_of_measurement: "%"
        min_value: 0
        max_value: 100
        step: 1
        number_datapoint: 7
        datapoint_hidden:
          datapoint_type: int
          init:
            value: 85
    
      - platform: "uyat"
        id: min_set_number
        name: "Alarm at minimum"
        unit_of_measurement: "%"
        min_value: 0
        max_value: 100
        step: 1
        number_datapoint: 8
        datapoint_hidden:
          datapoint_type: int
          init:
            value: 40
    
      - platform: "uyat"
        id: installation_height_number
        name: "Installation Height"
        unit_of_measurement: "m"
        min_value: 0.200
        max_value: 2.500
        step: 0.001
        multiply: 1000
        number_datapoint: 19
        datapoint_hidden:
          datapoint_type: int
          init:
            value: 1.000
    
      - platform: "uyat"
        id: liquid_depth_max_number
        name: "Distance to Max"
        unit_of_measurement: "m"
        min_value: 0.100
        max_value: 2.400
        step: 0.001
        multiply: 1000
        number_datapoint: 21
        datapoint_hidden:
          datapoint_type: int
          init:
            value: 0.100
    
    


    I haven't done many tests and I only use it for a water barell (1m height). So far I've noticed that it shows somewhat valid level until ~50%, then it rarely goes any lower, even though the actual level gets lower. So there definitely is a problem with settings... Will try to fiddle around with these settings some day.
  • ADVERTISEMENT
  • #13 21193336
    john34
    Level 3  
    Posts: 5
    piotrszulc1 wrote:
    @john34
    My whole yaml consists of many packages, so pasting here only the relevant part.
    Also note that I'm using my external component (uyat) to workaround the missing features in esphome.


    
    
    bk72xx:
      board: cbu
      framework:
        version: 0.0.0
        source: "/libretiny"
    
    logger:
    
    text_sensor:
      - platform: libretiny
        version:
          name: LibreTiny Version
      - platform: template
        id: liquid_state_text
        name: "Liquid state"
    
    uart:
      - id: uyat_uart
        rx_pin: RX1
        tx_pin: TX1
        baud_rate: 9600
    
    uyat:
       time_id: homeassistant_time
       on_datapoint_update:
          - sensor_datapoint: 1
            datapoint_type: enum
            then:
              - lambda: |-
                  if (x == 0) id(liquid_state_text).publish_state("normal");
                  if (x == 1) id(liquid_state_text).publish_state("low");
                  if (x == 2) id(liquid_state_text).publish_state("high");
    
    sensor:
      - platform: "uyat"
        id: liquid_level_number
        name: "Liquid Level"
        unit_of_measurement: "%"
        sensor_datapoint: 22
        filters:
          - throttle_average: 10s
    
      - platform: "uyat"
        id: liquid_depth_number
        name: "Liquid Depth"
        unit_of_measurement: "m"
        accuracy_decimals: 2
        sensor_datapoint: 2
        filters:
          - multiply: 0.01
    
    number:
      - platform: "uyat"
        id: max_set_number
        name: "Alarm at maximum"
        unit_of_measurement: "%"
        min_value: 0
        max_value: 100
        step: 1
        number_datapoint: 7
        datapoint_hidden:
          datapoint_type: int
          init:
            value: 85
    
      - platform: "uyat"
        id: min_set_number
        name: "Alarm at minimum"
        unit_of_measurement: "%"
        min_value: 0
        max_value: 100
        step: 1
        number_datapoint: 8
        datapoint_hidden:
          datapoint_type: int
          init:
            value: 40
    
      - platform: "uyat"
        id: installation_height_number
        name: "Installation Height"
        unit_of_measurement: "m"
        min_value: 0.200
        max_value: 2.500
        step: 0.001
        multiply: 1000
        number_datapoint: 19
        datapoint_hidden:
          datapoint_type: int
          init:
            value: 1.000
    
      - platform: "uyat"
        id: liquid_depth_max_number
        name: "Distance to Max"
        unit_of_measurement: "m"
        min_value: 0.100
        max_value: 2.400
        step: 0.001
        multiply: 1000
        number_datapoint: 21
        datapoint_hidden:
          datapoint_type: int
          init:
            value: 0.100
    
    


    I haven't done many tests and I only use it for a water barell (1m height). So far I've noticed that it shows somewhat valid level until ~50%, then it rarely goes any lower, even though the actual level gets lower. So there definitely is a problem with settings... Will try to fiddle around with these settings some day.


    Thanks! Have you noticed any issues with datapoint 22 not updating/being registered after some time? A few times now, after working normally for several hours datapoint 22 stops updating and only 1 and 2 update.

    This is what I'm using now; I'll look into trying uyat.

    
      - platform: "tuya"
        name: "Sump Water Level (Raw)"
        sensor_datapoint: 22
        id: raw_water_level
    
      - platform: template
        name: "Water Level"
        id: water_level
        unit_of_measurement: "%"
        lambda: |-
          int raw_value = id(raw_water_level).state;
          // Convert the raw value to a percentage, where 100 is full and 87 is empty
          return (raw_value - 87) * 100 / 13;
        update_interval: 30s
    
    uart:
      rx_pin: RX1
      tx_pin: TX1
      baud_rate: 9600
    
    tuya:
  • #14 21206092
    john34
    Level 3  
    Posts: 5
    Everything's been working well with the first unit, so I opted to order a 2nd one as well. Unfortunately, the seller on AliExpress swapped the listings around and I didn't catch it (used the Buy it again option, but the item had been changed at the same link) and they shipped a TLC2326. The TLC2326 has a slightly different (better, IMO) form factor, and more importantly has a patched firmware (2.1.17) and can't be exploited with tuya-cloudcutter.

    After bashing my head against a while trying to extract the firmware and re-flash with ltchiptool, I found a post saying they couldn't re-flash while the Tuya MCU was still connected. Indeed, that was my issue as well.

    For anyone finding this by Google, trying to load ESPHome onto a TLC2326, best I can tell you'll need to use a hot air rework and remove the IBU entirely, flash with ltchiptool, and then resolder to the PCB. The rework was great at removing the potting. Heat it up, pierce with tweezers and it'll pull off the board cleanly in chunks.

    This was a bit fiddly, but it did work and everything is working as expected using the same ESPHome YAML config as the TLC2206. Logs show an error on boot on the Tuya component (Initialization failed at init_state), but the data is being reported properly so not sure what that's about.
  • #15 21762274
    lamero345
    Level 2  
    Posts: 33
    Help: 1
    Rate: 3
    Hi. Flashed succesfully but I have uart errors.

    With uyat
    [uyat:580]: Initialization failed at init_state 0


    With tuya
    [tuya:489]: Initialization failed at init_state 0


    My yaml
    
    substitutions:
      name: esp-water
      friendly_name: esp-water
    
    esphome:
      name: ${name}
      friendly_name: ${friendly_name}
    
    bk72xx:
      board: cbu
    
    logger:
      baud_rate: 0
    
    api:
    
    ota:
      - platform: esphome
    
    wifi:
      ssid: !secret wifi_ssid
      password: !secret wifi_password
    
    uart:
      - id: tuya_uart
        rx_pin: RX1
        tx_pin: TX1
        baud_rate: 9600
    
    tuya:
      uart_id: tuya_uart
      on_datapoint_update:
          - sensor_datapoint: 1
            datapoint_type: enum
            then:
              - lambda: |-
                  if (x == 0) id(liquid_state_text).publish_state("normal");
                  if (x == 1) id(liquid_state_text).publish_state("low");
                  if (x == 2) id(liquid_state_text).publish_state("high");
    
    text_sensor:
      - platform: template
        id: liquid_state_text
        name: "Liquid state"
    
    sensor:
      - platform: tuya
        id: liquid_level_number
        name: "Liquid level ratio"
        unit_of_measurement: "%"
        sensor_datapoint: 22
        filters:
          - throttle_average: 10s
    
      - platform: tuya
        id: liquid_depth_number
        name: "Liquid Level Depth"
        unit_of_measurement: "m"
        accuracy_decimals: 2
        sensor_datapoint: 2
        filters:
          - multiply: 0.01
    
    number:
      - platform: tuya
        id: max_set_number
        name: "Set max"
        unit_of_measurement: "%"
        min_value: 0
        max_value: 100
        step: 1
        number_datapoint: 7
        datapoint_hidden:
          datapoint_type: int
          initial_value: 85
          restore_value: yes
    
      - platform: tuya
        id: min_set_number
        name: "Set min"
        unit_of_measurement: "%"
        min_value: 0
        max_value: 100
        step: 1
        number_datapoint: 8
        datapoint_hidden:
          datapoint_type: int
          initial_value: 40
          restore_value: yes
    
      - platform: tuya
        id: installation_height_number
        name: "Installation Height"
        unit_of_measurement: "m"
        min_value: 0.200
        max_value: 2.500
        step: 0.001
        multiply: 1000
        number_datapoint: 19
        datapoint_hidden:
          datapoint_type: int
          initial_value: 1.000
          restore_value: yes
    
      - platform: tuya
        id: liquid_depth_max_number
        name: "Sensor to Full line"
        unit_of_measurement: "m"
        min_value: 0.100
        max_value: 2.400
        step: 0.001
        multiply: 1000
        number_datapoint: 21
        datapoint_hidden:
          datapoint_type: int
          initial_value:  0.100
          restore_value: yes
    


    What to check?
  • #16 21762717
    piotrszulc1
    Level 10  
    Posts: 37
    Help: 3
    Rate: 8
    >>21762274
    Either the baud rate is incorrect, or the UART lines are damaged. Did you solder anything to get it flashed? If so, check if everything is soldered back how it was.
    You can also add this under your "UART:"
    
        debug:
          direction: BOTH
          sequence:
            - lambda: UARTDebug::log_hex(direction, bytes, ' ');
    


    And post the log. We'll then see what exactly is sent and received.
  • #17 21762741
    lamero345
    Level 2  
    Posts: 33
    Help: 1
    Rate: 3
    No solder. Only heat hair to remove the IBU.

    
    [07:53:13.084][C][tuya:041]: Tuya:
    [07:53:13.087][C][tuya:044]:   Initialization failed. Current init_state: 0
    [07:53:13.087][C][tuya:049]:   If no further output is received, confirm that this is a supported Tuya device.
    [07:53:13.313][D][uart_debug:114]: >>> 55:AA:00:00:00:00:FF
    [07:53:13.445][E][tuya:489]: Initialization failed at init_state 0
    [07:53:27.023][D][uart_debug:114]: >>> 55:AA:00:00:00:00:FF
    [07:53:27.347][D][uart_debug:114]: >>> 55:AA:00:00:00:00:FF
    [07:53:27.630][D][uart_debug:114]: >>> 55:AA:00:00:00:00:FF
    [07:53:27.929][D][uart_debug:114]: >>> 55:AA:00:00:00:00:FF
    [07:53:28.269][D][uart_debug:114]: >>> 55:AA:00:00:00:00:FF
    [07:53:28.457][E][tuya:489]: Initialization failed at init_state 0
    
  • #18 21762753
    piotrszulc1
    Level 10  
    Posts: 37
    Help: 3
    Rate: 8
    From the log it looks like the TuyaMCU chip does not answer at all.
    Did you actually solder it back on? The TuyaMCU chip is on the mainboard, not on the CBU.
  • #19 21762756
    lamero345
    Level 2  
    Posts: 33
    Help: 1
    Rate: 3
    No solder was made
  • #20 21762759
    piotrszulc1
    Level 10  
    Posts: 37
    Help: 3
    Rate: 8
    Then solder the CBU back to the main board, and then it should work.
  • #21 21762814
    lamero345
    Level 2  
    Posts: 33
    Help: 1
    Rate: 3
    CBU was never desoldered from main board. I flashed it on board.
    Model on Aliexpress
    Now It works. Final configuration:

    
    substitutions:
      name: water
      friendly_name: water
    
    esphome:
      name: ${name}
      friendly_name: ${friendly_name}
    
    bk72xx:
      board: cbu
    
    wifi:
      ssid: !secret wifi_ssid
      password: !secret wifi_password
    
    api:
    
    ota:
      - platform: esphome
    
    logger:
      baud_rate: 0
    
    uart:
      id: tuya_uart
      rx_pin: RX1
      tx_pin: TX1
      baud_rate: 115200
    
    time:
      - platform: homeassistant
        id: homeassistant_time
    
    tuya:
      uart_id: tuya_uart
      time_id: homeassistant_time
      on_datapoint_update:
          - sensor_datapoint: 1
            datapoint_type: enum
            then:
              - lambda: |-
                  if (x == 0) id(liquid_state_text).publish_state("normal");
                  if (x == 1) id(liquid_state_text).publish_state("low");
                  if (x == 2) id(liquid_state_text).publish_state("high");
    
    text_sensor:
      - platform: template
        id: liquid_state_text
        name: "Liquid state"
    
    sensor:
      - platform: tuya
        id: liquid_level_number
        name: "Liquid level ratio"
        unit_of_measurement: "%"
        sensor_datapoint: 22
        filters:
          - throttle_average: 10s
    
      - platform: tuya
        id: liquid_depth_number
        name: "Liquid Level Depth"
        unit_of_measurement: "m"
        accuracy_decimals: 2
        sensor_datapoint: 2
        filters:
          - multiply: 0.01
    
    number:
      - platform: tuya
        id: max_set_number
        name: "Set max"
        unit_of_measurement: "%"
        min_value: 0
        max_value: 100
        step: 1
        number_datapoint: 7
        datapoint_hidden:
          datapoint_type: int
          initial_value: 85
          restore_value: yes
    
      - platform: tuya
        id: min_set_number
        name: "Set min"
        unit_of_measurement: "%"
        min_value: 0
        max_value: 100
        step: 1
        number_datapoint: 8
        datapoint_hidden:
          datapoint_type: int
          initial_value: 40
          restore_value: yes
    
      - platform: tuya
        id: installation_height_number
        name: "Installation Height"
        unit_of_measurement: "m"
        min_value: 0.200
        max_value: 3.000
        step: 0.001
        multiply: 1000
        number_datapoint: 19
        datapoint_hidden:
          datapoint_type: int
          initial_value: 1.000
          restore_value: yes
    
      - platform: tuya
        id: liquid_depth_max_number
        name: "Sensor to Full line"
        unit_of_measurement: "m"
        min_value: 0.100
        max_value: 2.900
        step: 0.001
        multiply: 1000
        number_datapoint: 21
        datapoint_hidden:
          datapoint_type: int
          initial_value:  0.100
          restore_value: yes
    


    And yes, I have an error on boot on the Tuya component

    Quote:
    Logs show an error on boot on the Tuya component (Initialization failed at init_state), but the data is being reported properly so not sure what that's about.


    
    [09:46:35.077][C][tuya:041]: Tuya:
    [09:46:35.079][C][tuya:044]:   Initialization failed. Current init_state: 4
    [09:46:35.081][C][tuya:049]:   If no further output is received, confirm that this is a supported Tuya device.
    


    After few seconds it works

Topic summary

✨ The discussion revolves around flashing ESPHome on the EPT Tech TLC2206 and TLC2326 tank level sensors, which utilize a Tuya CBU-IPEX board with a BK7231N SoC. Users face challenges due to the epoxy coating on the boards and the devices being classified as TuyaMCU, requiring specific configurations for successful flashing. One user successfully flashed their device using CloudCutter, although they noted limitations in setting height and alarm levels due to a bug in ESPHome. Another user encountered difficulties with the TLC2326 model, which has a patched firmware that prevents exploitation with CloudCutter, suggesting the need for physical modifications to the board for flashing. Various YAML configurations for ESPHome were shared, highlighting the use of external components to work around missing features.
Generated by the language model.

FAQ

TL;DR: TLC2326 firmware 2.1.17 is patched; "can't be exploited with tuya-cloudcutter." Use ESPHome via UART or desolder-flash. For BK7231N/Tuya CBU owners of EPT Tech TLC2206/TLC2326 who want local control without Tuya cloud. [Elektroda, john34, post #21206092]

Quick Facts

Which SoC and module are inside the EPT Tech TLC2206/TLC2326?

They use a Tuya CBU-IPEX module with a BK7231N SoC. The main board is covered in epoxy potting. The original poster confirmed the module and shared photos of the potted board and antenna layout. This hardware choice enables Wi‑Fi and BLE and connects to a secondary MCU over UART. [Elektroda, john34, post #21083458]

Is it a TuyaMCU device, and why won’t a simple flash work?

Yes. A TuyaMCU device pairs a Wi‑Fi module with a separate MCU over UART, so firmware alone is not enough. You must configure datapoint IDs and behavior after flashing for the device to function. "It wont work if you just flash a new firmware." [Elektroda, p.kaczmarek2, post #21083504]

How do I flash the TLC2206 using tuya-cloudcutter?

  1. Update Cloudcutter and select the TLC2206 profile.
  2. Put the device in pairing mode and run the exploit.
  3. Flash your LibreTiny/ESPHome image and reboot. A user confirmed success and noted, "Works nicely so far." Use ESPHome afterward to map the Tuya datapoints. [Elektroda, piotrszulc1, post #21139441]

Cloudcutter says not exploitable — what about the TLC2326?

TLC2326 units with firmware 2.1.17 are patched and cannot be exploited. The working path was to hot‑air remove the Tuya module, flash with ltchiptool, then resolder. The user reported it "can't be exploited with tuya-cloudcutter." Plan on careful rework and verification afterward. [Elektroda, john34, post #21206092]

How do I safely remove potting and the Tuya module to flash?

  1. Use hot air to soften the potting.
  2. Pierce with tweezers and lift off potting in chunks.
  3. Desolder the Tuya module, flash via ltchiptool, then resolder it to the PCB. This approach resolved flashing interference from the attached MCU and restored full function after reassembly. [Elektroda, john34, post #21206092]

What UART settings and pins should I use with ESPHome on BK7231N/CBU?

Use bk72xx: board cbu with LibreTiny. Configure UART on RX1/TX1 at 9600 baud. This matched the working configuration for TLC2206, enabling stable TuyaMCU communication. You can also expose text and number entities tied to datapoints for status and calibration. [Elektroda, piotrszulc1, post #21192328]

Which Tuya datapoints map to level, depth, and alarms?

DP1: state enum (normal/lower_alarm/upper_alarm). DP2: depth value with scale 0.01 m. DP7 and DP8: alarm thresholds in percent. DP19: installation height 0.200–2.500 m (scale 0.001). DP21: distance to max 0.100–2.400 m (scale 0.001). DP22: level 0–100% read‑only. [Elektroda, divadiow, post #21135841]

Why can’t I set installation height or alarm thresholds in ESPHome?

There’s a known ESPHome issue blocking those setters on this device. A user succeeded by using an external component that handles the required datapoints. "You can use it in esphome, but currently it is not possible to set the height or alarm levels." [Elektroda, piotrszulc1, post #21139441]

DP22 stopped updating after hours — how do I fix it?

One report saw DP22 freeze while DP1 and DP2 continued updating. Switch to an external TuyaMCU component, or derive level from DP2 until stable. If using the native Tuya component, try shorter update intervals or a watchdog restart. Validate serial timings and wiring. [Elektroda, john34, post #21193336]

My level reading stalls around 50%. How can I improve accuracy?

Recheck installation height (DP19) and distance-to-max (DP21), then recalibrate. Smooth readings by averaging, and confirm sensor alignment. A user noted readings "rarely" dropped below 50% and added, "So there definitely is a problem with settings..." Re‑tuning those numbers typically restores expected behavior. [Elektroda, piotrszulc1, post #21192328]

Why is the PCB potted/coated and how should I approach it?

The coating protects the PCB from moisture. If you must access pads or remove parts, warm the potting and lift gently to avoid damage. "It’s used to secure the PCB against the moisture." Work slowly to prevent pad lifting during rework. [Elektroda, p.kaczmarek2, post #21086033]

Can I use OpenBK (OBK) instead of ESPHome to handle TuyaMCU?

Yes. OBK supports TuyaMCU with configurable datapoints and has a detailed setup guide. After flashing, map dpIDs to Home Assistant entities to restore full functionality. The author offered step‑by‑step help to set it up correctly. [Elektroda, p.kaczmarek2, post #21083504]

What entities make sense to expose in Home Assistant?

Expose Liquid Level (%) from DP22 and Liquid Depth (m) from DP2. Add a text sensor for Liquid state (DP1). Create number entities for min/max alarms (DP7/DP8), installation height (DP19), and distance to max (DP21). This mirrors a proven working config. [Elektroda, piotrszulc1, post #21192328]

I see "Initialization failed at init_state" on boot. Is that fatal?

A TLC2326 user reported the Tuya component shows that error at boot, yet data still flows correctly. Treat it as a benign startup quirk if measurements look correct. Monitor logs and only intervene if datapoints stop updating or controls fail. [Elektroda, john34, post #21206092]
Generated by the language model.
ADVERTISEMENT