Ningbo Fuda 5250B Dehumidifier

esp8266 global Comes with ESPHome misc
Ningbo Fuda 5250B Dehumidifier - 5250B.webp

Overview

Ningbo Fuda Intelligent Technology is a company manufacturing a number of devices such as dehumidifiers and air conditioning units. These are typically white-labeled, and come under a number of brand names such as Rohnson, Nedis, Kayami, Cling etc. Some of these dehumidifiers are WiFi-enabled, by employing a Tuya module, allowing them to be fully controlled over WiFi, typically using the vendor’s smartphone app, or the Tuya Smart/Smart Life applications. Unfortunately, as of October 2023, ESPHome does not include a Humidifier/Hygrostat component to map to Home Assistant’s Humidifier integration (see esphome/feature-requests#1859). Until such support is added, the dehumidifier can be exposed as a series of switches, sensors and selects, for each of the functions of the device’s control panel.

Flashing

Over-the-air

It is often possible to use tuya-convert to flash the module over-the-air. Note that this applies to ESP8266-based modules; if your model shipped with a BK72xx-based module, other methods such as tuya-cloudcutter can be used. Both of these tools rely on exploiting vulnerabilities in the stock Tuya firmware, which may be patched in newer versions, so this may or may not work with your device. It is generally advisable to not install firmware updates through the vendor’s smartphone application as this may patch any vulnerabilities that exist in the shipped software.

Over serial

If OTA fails, it is possible to flash the module through the serial port pins, using esptool, or, in case your model shipped with a BK72xx, using ltchiptool. The dehumidifier can be easily disassembled using a Philips screwdriver. The Tuya module can be found on a separate daughterboard, connected using a JST connector to the mainboard, which provides the board with +5V, GND, as well as RX/TX pins for the UART connecting to the main MCU. The daughterboard includes a voltage regulator and level shifters to convert between +5V and +3.3V, that the Tuya module expects. Unfortunately, this is a different UART than the one required for flashing the firmware. However, the daughterboard helpfully contains debug pins next to the module:

PinConnect to
UART 0 RXSerial adapter TXD
IO1Serial adapter RXD
IO0Short to GND for flashing
GNDSerial adapter/Vcc GND
Vcc needs to be provided separately, either +5V through the connector, or
+3.3V directly to the ESP8266.

Board Configuration

The configuration below is for a Rohnson R-9820, model name FDD20-5250BWR5:

esp8266:
  board: esp_wroom_02
uart:
  rx_pin: GPIO13 # U1RX
  tx_pin: GPIO15 # U1TX
  baud_rate: 9600
tuya:
  on_datapoint_update:
    - sensor_datapoint: 11
      datapoint_type: bitmask
      then:
        - lambda: |-
            ESP_LOGD("main", "on_datapoint_update %s", format_hex_pretty(x).c_str());
            // only seen in the wild is decimal value 8, for Water Tank Full
            id(water_tank_full).publish_state((x >> 3) & 1);
binary_sensor:
  - platform: template
    id: water_tank_full
    name: "Water tank"
    device_class: problem
    icon: "mdi:water-alert"
  - platform: tuya
    name: "Unknown 101"
    sensor_datapoint: 101
    internal: true
  - platform: tuya
    name: "Unknown 105"
    sensor_datapoint: 105
    internal: true
switch:
  - platform: tuya
    name: "Power"
    switch_datapoint: 1
  - platform: tuya
    name: "Air clean"
    icon: "mdi:leaf"
    switch_datapoint: 5
  - platform: tuya
    name: "Child lock"
    icon: "mdi:lock"
    switch_datapoint: 7
  - platform: tuya
    name: "Sleep"
    icon: "mdi:sleep"
    switch_datapoint: 102
number:
  - platform: tuya
    name: "Target humidity"
    number_datapoint: 4
    unit_of_measurement: "%"
    device_class: "humidity"
    min_value: 30
    max_value: 80
    step: 5
sensor:
  - platform: tuya
    name: "Temperature"
    sensor_datapoint: 103
    unit_of_measurement: "°C"
    device_class: "temperature"
    accuracy_decimals: 0
  - platform: tuya
    name: "Humidity"
    sensor_datapoint: 104
    unit_of_measurement: "%"
    device_class: "humidity"
    accuracy_decimals: 0
select:
  - platform: tuya
    name: "Mode"
    icon: "mdi:cog"
    enum_datapoint: 2
    options:
      0: Regular
      1: Automatic
      2: Strong
      3: Clothes drying
  - platform: tuya
    name: "Fan speed"
    icon: "mdi:fan"
    enum_datapoint: 6
    options:
      0: Low
      1: High
#  - platform: tuya
#    name: "Unknown"
#    enum_datapoint: 12