logo elektroda
logo elektroda
X
logo elektroda

Cloud-Free Control for Niveo Smart Tuya Fan Heater Using OpenBeken and Home Assistant

markusdd 1023 33
Best answers

Can this Tuya-based Niveo wall fan heater be cloud-cut and controlled locally in Home Assistant while keeping its functions like frost protection and timer modes?

Yes—after opening it, the heater was identified as a standard TuyaMCU device with a WBR3 module, so it can be flashed with OpenBeken and controlled locally over MQTT/Home Assistant, but you have to build the device mapping from its Tuya DPIDs yourself [#21853396][#21853518] The recommended path is to dump the firmware, read the Tuya "Query Things Data Model" JSON, and use those dpIDs/value enums to create the OBK autoexec; one early issue was that `#` comments were being parsed as extra parameters, and once that was fixed the power, temperature and mode controls worked [#21853503][#21853603][#21853797][#21853805] MQTT/Home Assistant control also depends on having a non-empty client topic/base topic, and after changing it you must redo HASS discovery [#21857259] Native OBK climate/boiler entities for this TuyaMCU style are not implemented yet, so the practical solution is to compose a Home Assistant MQTT climate entity from the available switches/selects/numbers [#21855865][#21857286]
Generated by the language model.
ADVERTISEMENT
  • Helpful post
    #31 21857259
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14416
    Help: 650
    Rate: 12371
    You can't have empty client topic, how would you be able to tell the difference between two devices if they have the same blank name?

    Futhermore, you can't change client topic after doing HASS Discovery. You must redo discovery after every client topic change.
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #32 21857275
    markusdd
    Level 2  
    Posts: 74
    Rate: 2
    >>21857259

    I guess this is where I am new to OBK, haha. With Tasmota, the devices basically use their short name as the default, so I implicitly assumed the same. I got fooled by the HA discovery lines, where I thought it used the full name (also for the entities).

    I will delete the device in HA and rediscover and report back.
  • ADVERTISEMENT
  • #33 21857279
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14416
    Help: 650
    Rate: 12371
    Well I can add this behaviour for you, if you want.... it's certainly better than getting bugged mqtt topics
    Helpful post? Buy me a coffee.
  • #34 21857286
    markusdd
    Level 2  
    Posts: 74
    Rate: 2
    >>21857279

    I think I do know now haha. It works!!! Thanks so much. I will then try to create a Home Assistant climate entity out of the single ones we have now and share it here as long as we do not have native climate entities in OBK.

    As for MQTT, I think Tasmota did a decent job for sane default settings, maybe this is worth copying? Or just using the short name as default as this is anyway also used for HA auto-discovery, so it is a sensible default IMHO. And maybe just simply adding an error when base topic is empty?
    Tasmota “MQTT parameters” screen showing host, port, client, user, topic, and full topic fields


    We got this now in Home Assistant and the controls work, so it should be easy to construct a climate thermostat from that.
    Home Assistant screenshot showing device NiveoFA73D3 with control elements, sensors, and configuration cards

    Added after 6 [hours] 30 [minutes]:

    Beauty!
    So I tweaked this a little and now we have a wonderful cloud-less thermostat for this heater!
    This can easily be adapted probably also for other Tuya heaters with slight tweaks for the modes and so on.
    I hope this is valuable!

    “Niveo Smart Heater” thermostat screen: heating mode, setpoint 12°C, current temperature 20°C

    Code: YAML
    Log in, to see the code


    niveoFA73D3 obviously has to be replaced with your MQTT base_topic. Be mindful this uses HA's 'MQTT climate' integration. You are basically free to map whatever for preset_modes, but modes have to be a subset of their default values. swing_modes is recommended to be just 'on' and 'off' then you get the nicest UI integration and localization.
    fan_modes is again arbitrary and can be mapped by you.
    I removed some of the preset modes as they do not really make sense when used with home assistant where doing automations is much more powerful than whatever they ship by default. You can of course comment them in if wanted. Just be careful to replicate the enum mapping exactly as in your autoexec.bat on the device otherwise it won't match, hence I have all values in the mapping even if they are not in the choice list.

    Thanks again for everyone who participated here, pretty crackin result for one weekend I dare say.

Topic summary

✨ The discussion addresses the integration of a small wall-mounted fan heater for frost protection and temperature control in a seldom-used bathroom, complementing an existing R290 Midea Xtreme Save Blue inverter heating system. The user seeks a smart, timer-programmable solution with local control, avoiding cloud dependency. Two main options considered are generic Tuya-based devices and Dreo fans, with preference for Dreo 517s hardware but lacking cloud-free control solutions. A cost-effective alternative found is the Niveo Smart Tuya fan heater (~60€), documented in a German manual, suspected to use TuyaMCU firmware. The suggested approach involves hardware inspection and applying a TuyaMCU flashing and integration method as per a referenced guide to enable local control via OpenBeken and Home Assistant, aiming for cloud-free operation.
Generated by the language model.

FAQ

TL;DR: This wall-mounted Niveo Smart heater runs TuyaMCU at 9600 baud on a Tuya WBR3 (RTL8720CF); “115200 is failing but 230400 seems to succeed already.” Flashing OpenBeken and mapping the dpIDs enables full local (cloud-free) control with Home Assistant. [Elektroda, markusdd, post #21853518]

Why it matters: If you want frost protection and 18–20 °C without any cloud, this walkthrough shows a validated, working path using OpenBeken and MQTT discovery.

Quick Facts

What exactly was achieved—does OpenBeken give full local control on this heater?

Yes. After flashing OpenBeken and correctly mapping dpIDs, users controlled power, target temperature, modes, swing, night mode, window detection, countdown, and calibration—all locally; HA entities appeared via MQTT discovery. “As far as I can see, this is working.” [Elektroda, markusdd, post #21853805]

Which Wi‑Fi module and bus does the Niveo Smart heater use?

It uses a Tuya WBR3 (Realtek RTL8720CF) module. The main board talks TuyaMCU over two data lines to the heater’s MCU, indicating a standard Tuya serial bridge design. [Elektroda, markusdd, post #21853396]

What baud rates worked for flashing and for the TuyaMCU link?

A backup succeeded at 230400 baud when 115200 failed, while the device’s TuyaMCU link itself runs at 9600 baud. Quote: “115200 is failing but 230400 seems to succeed already.” [Elektroda, markusdd, post #21853518]

How do I flash OpenBeken on the WBR3 safely (3 steps)?

  1. Enter Realtek bootloader on the unsoldered WBR3 and connect UART properly. 2. Use the revised rtl2 Easy Flasher build and test incremental bauds up to 3,000,000. 3. Perform a full backup before writing. [Elektroda, divadiow, post #21853503]

My freshly flashed module keeps rebooting—what’s the fix?

Provide a stable external supply; a weak USB-UART can brown out when Wi‑Fi starts. A lab PSU fixed a reported boot loop immediately after flash. [Elektroda, markusdd, post #21853619]

Why do OpenBeken commands misbehave in autoexec.bat?

Inline “#” comments are parsed as extra arguments. Remove them, or place notes on separate lines not passed to the CLI. This resolves odd mapping behavior. [Elektroda, p.kaczmarek2, post #21853797]

Which dpIDs map to key heater functions and ranges?

Confirmed mappings include: dp1 power (bool), dp2 temp_set 1–35 °C, dp3 temp_current –20…50 °C, dp4 mode (CF/EC/P1/P2/P3/AF/ST), dp19 countdown_set, dp20 countdown_left 0–1440 min, dp101 fan_mode (H1/H2/H0), dp103 night_mode, dp104 window_check, dp105 window_reminder, dp106 temp_calibration 0–40 °C. [Elektroda, markusdd, post #21853619]

How do I build a working OpenBeken autoexec for TuyaMCU (3 steps)?

  1. Set channel types/labels (e.g., temp_current as temperature; temp_set as dimmer 1–35 °C). 2. Link dpIDs with linkTuyaMCUOutputToChannel (no inline comments). 3. Send tuyaMcu_sendQueryState to sync on boot. [Elektroda, markusdd, post #21853805]

Home Assistant shows entities but no temperature setpoint—how do I fix it?

Map channel 3 as a dimmer with min 1 and max 35, and link dp2 (temp_set) to that channel. Remove “#” comments and correct enum orders, then rediscover via MQTT. [Elektroda, markusdd, post #21853805]

Can this setup deliver frost protection and 18–20 °C targets?

Yes. The device exposes temp_set from 1 to 35 °C and temp_current feedback. With HA scheduling, you can hold frost protection unattended and heat on demand to 18–20 °C. [Elektroda, markusdd, post #21853619]

Is the Dreo 517s compatible with cloudcutter or Tuya profiles?

No. Dreo devices discussed are non‑Tuya, so Tuya cloudcutter does not apply to them for local control. [Elektroda, divadiow, post #21849575]

Can the Dreo 517s run OpenBeken/OpenBK firmware?

Two Dreo dumps showed Belon BL2028N MCUs, which are Beken BK7231N and supported by OpenBK. Firmware is feasible; you still must reverse the device’s UART protocol. [Elektroda, divadiow, post #21849621]

What remains unknown for a Dreo local-control port?

The UART protocol between the Wi‑Fi SoC and the heater’s controller remains the key unknown. Quote: “yes. I’d say this is the unknown.” [Elektroda, divadiow, post #21853895]

Is this Niveo/Argo heater quiet enough for bedrooms?

A user reported it was “much louder than anticipated,” which may matter for night use. Consider placement or speed limits via dp101 (H1/H2/H0). [Elektroda, markusdd, post #21853805]

How do I get countdowns and window detection into HA?

Expose dp19 (countdown_set) as enum, dp20 (countdown_left) as value minutes, dp104 (window_check) as bool, and dp105 (window_reminder) as read‑only bool. Home Assistant will discover them via MQTT. [Elektroda, markusdd, post #21853619]
Generated by the language model.
ADVERTISEMENT