logo elektroda
logo elektroda
X
logo elektroda

Unusual Miboxer FUT037W+ LED strip controller with TuyaMCU - communication protocol, OpenBeken

p.kaczmarek2  7 3309 Cool? (+3)
📢 Listen (AI):

TL;DR

  • Teardown of the Miboxer FUT037W+ RGBCW LED strip controller, a TuyaMCU-based unit with WiFi and RF control split across two microcontrollers.
  • Inside are a WB3S BK7231N WiFi module and a Nuvoton MS51FC0AE MCU that drives the MOSFETs and PL1166 A110K48 RF system over UART.
  • TuyaMCUAnalyzer decoded the UART traffic, identifying dpIDs 20, 21, 22, 23, 24, 26, and 28 for power, mode, brightness, temperature, RGB, timer, and RGBCW.
  • OpenBeken flashed successfully, and the controller paired with Home Assistant while LED commands and discovery worked automatically.
  • Programming is awkward because the WiFi module must be removed or desoldered, since TuyaMCU uses the same UART port as flashing.
Generated by the language model.
Illuminated Miboxer FUT037W+ LED strip connected to a controller.
I invite you to analyze the interior, structure and communication protocol (TuyaMCU - UART-based) of the unusual Miboxer FUT037W+ LED strip controller.
The product discussed here is distinguished by the fact that, in addition to WiFi communication, it also supports RF control, which is why the manufacturer decided to build it based on two microcontrollers.
We have a separate CB3S WiFi module (BK7231N) and a separate external MCU to which basically everything is connected. But let`s start from the beginning...

Purchase Miboxer FUT037W+
The product was given to me by a reader to upload OBK in order to pair the equipment with Home Assistant, but as far as I know, it was bought for about PLN 90:
Miboxer FUT037W+ LED RGBW controller.
Let`s see the item description from the seller:
Description and photo of the Miboxer MiLight FUT037W+ controller with packaging.
Yes, you can control it via WiFi or remote controls. Now the specifications:
Technical details and packaging of the Miboxer FUT037W+ controller.
Information about Bluetooth from the description suggests that there will be no ESP8266 inside.
User manual for Miboxer FUT037W+ controller
What do we get in practice?
LED controller Miboxer FUT037W+ packaging Miboxer FUT037W+ LED Controller Packaging Box of Miboxer FUT037W+ LED strip controller on a wooden table. Miboxer FUT037W+ LED controller box on a wooden surface
Set contents:
White casing of the Miboxer FUT037W+ LED controller on a wooden surface, featuring certifications and QR codes. Packaged LED controller Miboxer FUT037W+ on a wooden table Miboxer FUT037W+ LED Controller on a workbench
QR codes:
Close-up of a QR code on the Miboxer FUT037W+ device. Sticker with QR code and markings on LED controller
This controller has a separate DC jack input and a separate input for cables - smart and convenient.
Power and wire inputs on the Miboxer FUT037W+ LED controller.
And here are the outputs for the LED strip:
Close-up of electrical terminal connectors of Miboxer FUT037W+ LED controller


Interior of Miboxer FUT037W+
Just lift the cover, there are no screws:
Interior of the Miboxer FUT037W+ LED strip controller
You can immediately see that the MOSFET transistors are more powerful than usual, but why are they so dusty?
Close-up of a circuit board with MOSFET transistors in the Miboxer FUT037W+ controller
Slightly better:
Close-up of MOSFET transistors on a printed circuit board.
Electronic circuit board of the Miboxer FUT037W+ LED controller
K50N03A, really good parameters:
Diagram showing specifications and pin configuration of a MOSFET transistor.
We can now remove the PCB and look at the rest of the electronics:
Interior of Miboxer FUT037W+ LED controller Interior of Miboxer FUT037W+ LED controller with CB3S WiFi module
The WiFi module is WB3S, but it is on a separate board and connects to the base only with four goldpins. Here we have 3.3V, ground and TX and RX.
This is a typical example of a device based on TuyaMCU. Details in this topic:
class="notranslate"> TuyaMCU protocol - communication between the microcontroller and the WiFi module
Here I see the step down controller, it probably generates 3.3V from 12V from the belt:
CB3S WiFi module on the PCB of Miboxer FUT037W+ LED controller
And here we have the PL1166 A110K48 RF system (the MCU is under the WiFi module):
Close-up of the Miboxer FUT037W+ controller's circuit board with visible electronic components.
Close-up of electronic modules in the Miboxer FUT037W+ LED controller.
I desoldered the board with the WiFi module to see what the MCU is there:
WiFi module CB3S held by pliers WiFi module on a circuit board with a holder.
This is Nuvoton MS51FC0AE:
Close-up of a circuit board with a Nuvoton chip and other electronic components.
Close-up of the Miboxer FUT037W+ circuit board with visible electronic components.
Block diagram of a 24MHz 8051 microcontroller
This MCU supports the RF system and transistors, and communicates with the WiFi module via UART.

Tests with the Tuya application, i.e. we listen to UART communication
The already mentioned TuyaMCU protocol is based on UART and is used to send variable values in both directions, TuyaMCU variables have their own ID, the so-called dpID.
I described it in more detail in this topic: TuyaMCU analyzer - UART packet decoder for Tuya devices - dpID detector
So, the Tuya app recognizes the device from a distance:
App interface for adding a new device.
Despite one failure ("weak signal"), pairing is successful:
App screen showing the addition of a 3 in 1 (WiFi+2.4G) device App screen for adding a device with Miboxer LED controller showing weak signal App screen showing Tuya device being added. App screen showing successful addition of 3 in 1 Controller (WiFi+2.4G) device.
Inside we have a typical RGBCW controller:
Mobile application interface of MiBoxer showing LED control with color wheel and brightness sliders.
Of course, there are options here such as the initial state, calendar, etc., but I have discussed this before, so I will skip it.
Interface of Miboxer FUT037W+ LED controller app
Everything works:
Miboxer FUT037W+ LED controller with connected light strips displaying various colors.
So, according to the linked topic about the TuyaMCU analyzer, I collected data and launched the analyzer:
https://github.com/openshwprojects/TuyaMCUAnalyzer
First without pairing:

55AA00000000FF55AA000100000055AA000200000155AA03000001000355AA0307000816020004000003E81855AA030300000555AA0307000817020004000002124255AA030700101803000C3031363030336538303365380755AA030700201903001C30303030303030303030303030303030303030303030633830303030DC55AA0307000514010001012555AA0307000515040001012955AA030700121E00000E00000001010106000000000014006455AA030700061F00000200003055AA030700062000000200003155AA0307000522010001013355AA030700102100000C000100000000000003E800003255AA03070006D10000020000E255AA03070006D20000020000E355AA0307000568040001017C55AA0307000569040001017D55AA030700106500000C4200000001FA1464000D04C61655AA030000010104

Result:
User interface of TuyaMCU Analyzer showing UART packet data interpretation.
It is worth emphasizing that the TuyaMCU analyzer even decodes colors!
And after pairing, in order, warm white setting:

55 AA 00 06 00 19 1C 03 00 15 31 30 30 30 30 30 30 30 30 30 30 30 30 30 
33 65 38 30 30 30 30 83 55 AA 00 06 00 08 17 02 00 04 00 00 00 00 2A 55 
AA 00 06 00 05 15 04 00 01 00 24     

55 AA	00	06		00 19	1C030015313030303030303030303030303033653830303030	83	
HEADER	VER=00	Unk		LEN	fnId=28 Str V=31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 30 30 30	CHK	

55 AA	00	06		00 08	1702000400000000	2A	
HEADER	VER=00	Unk		LEN	fnId=23 Val V=0	CHK	

55 AA	00	06		00 05	1504000100	24	
HEADER	VER=00	Unk		LEN	fnId=21 Enum V=0	CHK	

Cool white setting:

55 AA 00 06 00 19 1C 03 00 15 31 30 30 30 30 30 30 30 30 30 30 30 30 30 
33 65 38 30 33 65 38 C3 55 AA 00 06 00 08 17 02 00 04 00 00 03 E8 15 55 
AA 00 06 00 05 15 04 00 01 00 24 55 AA 00 00 00 00 FF  

55 AA	00	06		00 19	1C030015313030303030303030303030303033653830336538	C3	
HEADER	VER=00	Unk		LEN	fnId=28 Str V=31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 33 65 38	CHK	

55 AA	00	06		00 08	17020004000003E8	15	
HEADER	VER=00	Unk		LEN	fnId=23 Val V=1000	CHK	

55 AA	00	06		00 05	1504000100	24	
HEADER	VER=00	Unk		LEN	fnId=21 Enum V=0	CHK	

55 AA	00	00		00 00		FF	
HEADER	VER=00	Heartbeat		LEN		CHK	

White temperature setting 50%:

55 AA 00 06 00 19 1C 03 00 15 31 30 30 30 30 30 30 30 30 30 30 30 30 30 
33 65 38 30 31 66 37 C1 55 AA 00 06 00 08 17 02 00 04 00 00 01 F7 22 55 
AA 00 06 00 05 15 04 00 01 00 24    

55 AA	00	06		00 19	1C030015313030303030303030303030303033653830316637	C1	
HEADER	VER=00	Unk		LEN	fnId=28 Str V=31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 31 66 37	CHK	

55 AA	00	06		00 08	17020004000001F7	22	
HEADER	VER=00	Unk		LEN	fnId=23 Val V=503	CHK	

55 AA	00	06		00 05	1504000100	24	
HEADER	VER=00	Unk		LEN	fnId=21 Enum V=0	CHK	

White temperature setting 75% (cooler white):

55 AA 00 00 00 00 FF 55 AA 00 06 00 19 1C 03 00 15 31 30 30 30 30 30 30 
30 30 30 30 30 30 30 33 65 38 30 33 31 37 8E 55 AA 00 06 00 08 17 02 00 
04 00 00 03 17 44 55 AA 00 06 00 05 15 04 00 01 00 24     

55 AA	00	00		00 00		FF	
HEADER	VER=00	Heartbeat		LEN		CHK	

55 AA	00	06		00 19	1C030015313030303030303030303030303033653830333137	8E	
HEADER	VER=00	Unk		LEN	fnId=28 Str V=31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 33 31 37	CHK	

55 AA	00	06		00 08	1702000400000317	44	
HEADER	VER=00	Unk		LEN	fnId=23 Val V=791	CHK	

55 AA	00	06		00 05	1504000100	24	
HEADER	VER=00	Unk		LEN	fnId=21 Enum V=0	CHK	

Green color setting:

55 AA 00 06 00 19 1C 03 00 15 31 30 30 36 66 30 33 65 38 30 33 65 38 30 
30 30 30 30 30 30 30 FF 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 
00 10 18 03 00 0C 30 30 36 62 30 33 65 38 30 33 65 38 34 55 AA 00 00 00 
00 FF  

55 AA	00	06		00 19	1C030015313030366630336538303365383030303030303030	FF	
HEADER	VER=00	Unk		LEN	fnId=28 Str V=31 30 30 36 66 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30	CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	Unk		LEN	fnId=21 Enum V=1	CHK	

55 AA	00	06		00 10	1803000C303036623033653830336538	34	
HEADER	VER=00	Unk		LEN	fnId=24 Str V=30 30 36 62 30 33 65 38 30 33 65 38	CHK	

55 AA	00	00		00 00		FF	
HEADER	VER=00	Heartbeat		LEN		CHK	

Code Red Setting:

55 AA 00 06 00 19 1C 03 00 15 31 30 31 36 31 30 33 65 38 30 33 65 38 30 
30 30 30 30 30 30 30 CB 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 
00 10 18 03 00 0C 30 31 36 31 30 33 65 38 30 33 65 38 04                
            
55 AA	00	06		00 19	1C030015313031363130336538303365383030303030303030	CB	
HEADER	VER=00	Unk		LEN	fnId=28 Str V=31 30 31 36 31 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30	CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	Unk		LEN	fnId=21 Enum V=1	CHK	

55 AA	00	06		00 10	1803000C303136313033653830336538	04	
HEADER	VER=00	Unk		LEN	fnId=24 Str V=30 31 36 31 30 33 65 38 30 33 65 38	CHK	

Blue color setting:

Setting blue:

55 AA 00 06 00 19 1C 03 00 15 31 30 30 65 31 30 33 65 38 30 33 65 38 30 
30 30 30 30 30 30 30 F9 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 
00 10 18 03 00 0C 30 30 65 31 30 33 65 38 30 33 65 38 32 55 AA 00 00 00 
00 FF                                                                   
            
55 AA	00	06		00 19	1C030015313030653130336538303365383030303030303030	F9	
HEADER	VER=00	Unk		LEN	fnId=28 Str V=31 30 30 65 31 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30	CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	Unk		LEN	fnId=21 Enum V=1	CHK	

55 AA	00	06		00 10	1803000C303065313033653830336538	32	
HEADER	VER=00	Unk		LEN	fnId=24 Str V=30 30 65 31 30 33 65 38 30 33 65 38	CHK	

55 AA	00	00		00 00		FF	
HEADER	VER=00	Heartbeat		LEN		CHK	

Disabling toggle:

55 AA 00 06 00 05 14 01 00 01 00 20 55 AA 00 00 00 00 FF  

55 AA	00	06		00 05	1401000100	20	
HEADER	VER=00	SetDP		LEN	dpId=20 Bool V=0		CHK	

55 AA	00	00		00 00		FF	
HEADER	VER=00	Heartbeat		LEN		CHK	

Toggle on:

55 AA	00	06		00 05	1401000101	21	
HEADER	VER=00	SetDP		LEN	dpId=20 Bool V=1		CHK	



Dimmer at 46%:

55 AA 00 06 00 19 1C 03 00 15 31 30 30 65 31 30 33 65 38 30 31 64 30 30 
30 30 30 30 30 30 30 EE 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 
00 10 18 03 00 0C 30 30 65 31 30 33 65 38 30 31 64 30 27                
      
55 AA	00	06		00 19	1C030015313030653130336538303164303030303030303030	EE	
HEADER	VER=00	Unk		LEN	fnId=28 Str V=31 30 30 65 31 30 33 65 38 30 31 64 30 30 30 30 30 30 30 30 30	CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	Unk		LEN	fnId=21 Enum V=1	CHK	

55 AA	00	06		00 10	1803000C303065313033653830316430	27	
HEADER	VER=00	Unk		LEN	fnId=24 Str V=30 30 65 31 30 33 65 38 30 31 64 30	CHK	

Dimmer at 12%:

55 AA 00 06 00 19 1C 03 00 15 31 30 30 65 31 30 33 65 38 30 30 37 39 30 
30 30 30 30 30 30 30 C9 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 
00 10 18 03 00 0C 30 30 65 31 30 33 65 38 30 30 37 39 02 55 AA 00 00 00 
00 FF   

55 AA	00	06		00 19	1C030015313030653130336538303037393030303030303030	C9	
HEADER	VER=00	Unk		LEN	fnId=28 Str V=31 30 30 65 31 30 33 65 38 30 30 37 39 30 30 30 30 30 30 30 30	CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	Unk		LEN	fnId=21 Enum V=1	CHK	

55 AA	00	06		00 10	1803000C303065313033653830303739	02	
HEADER	VER=00	Unk		LEN	fnId=24 Str V=30 30 65 31 30 33 65 38 30 30 37 39	CHK	

55 AA	00	00		00 00		FF	
HEADER	VER=00	Heartbeat		LEN		CHK	

Dimmer at 100%:

55 AA	00	06		00 19	1C030015313030653130336538303365383030303030303030	F9	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=100e103e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303065313033653830336538	32	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=00e103e803e8 Col: ■		CHK	



5 hour timer:

55 AA 00 06 00 08 1A 02 00 04 00 00 46 50 C3     

55 AA	00	06		00 08	1A02000400004650	C3	
HEADER	VER=00	SetDP		LEN	dpId=26 Val V=18000		CHK	


Timer for 1 hour and 16 minutes:

55 AA 00 00 00 00 FF 55 AA 00 06 00 08 1A 02 00 04 00 00 11 D0 0E   

55 AA	00	00		00 00		FF	
HEADER	VER=00	Heartbeat		LEN		CHK	

55 AA	00	06		00 08	1A020004000011D0	0E	
HEADER	VER=00	SetDP		LEN	dpId=26 Val V=4560		CHK	


Power On->Initial mode option:

55 AA 00 06 00 10 21 00 00 0C 00 00 00 00 00 00 00 00 03 E8 00 00 2D 55 

55 AA	00	06		00 10	2100000C000000000000000003E80000	2D	
HEADER	VER=00	SetDP		LEN	dpId=33 Raw V=00 00 00 00 00 00 00 00 03 E8 00 00		CHK	



Power On->Restory Memory option:

55 AA 00 00 00 00 FF 55 AA 00 06 00 10 21 00 00 0C 00 01 00 00 00 00 00 
00 03 E8 00 00 2E 55 AA 00 00 00 00 FF       

55 AA	00	00		00 00		FF	
HEADER	VER=00	Heartbeat		LEN		CHK	

55 AA	00	06		00 10	2100000C000100000000000003E80000	2E	
HEADER	VER=00	SetDP		LEN	dpId=33 Raw V=00 01 00 00 00 00 00 00 03 E8 00 00		CHK	

55 AA	00	00		00 00		FF	
HEADER	VER=00	Heartbeat		LEN		CHK	

Scrolling colors, in order: green, yellow, red, pink, blue:

E0 E0 E0 E0 E0 00 E0 E0 E0 00 00 00 00 E0 55 AA 00 06 00 19 1C 03 00 15 
31 30 30 36 33 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 CC 55 AA 
00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 36 33 
30 33 65 38 30 33 65 38 05 55 AA 00 06 00 19 1C 03 00 15 31 30 30 34 36 
30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 CD 55 AA 00 06 00 05 15 
04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 34 36 30 33 65 38 30 
33 65 38 06 55 AA 00 06 00 19 1C 03 00 15 31 30 30 32 62 30 33 65 38 30 
33 65 38 30 30 30 30 30 30 30 30 F7 55 AA 00 06 00 05 15 04 00 01 01 25 
55 AA 00 06 00 10 18 03 00 0C 30 30 32 62 30 33 65 38 30 33 65 38 30 55 
AA 00 06 00 19 1C 03 00 15 31 30 30 30 62 30 33 65 38 30 33 65 38 30 30 
30 30 30 30 30 30 F5 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 
10 18 03 00 0C 30 30 30 62 30 33 65 38 30 33 65 38 2E 55 AA 00 06 00 19 
1C 03 00 15 31 30 31 35 64 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 
30 FD 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 
30 31 35 64 30 33 65 38 30 33 65 38 36 55 AA 00 06 00 19 1C 03 00 15 31 
30 31 33 37 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 CE 55 AA 00 
06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 31 33 37 30 
33 65 38 30 33 65 38 07 55 AA 00 06 00 19 1C 03 00 15 31 30 31 32 32 30 
33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 C8 55 AA 00 06 00 05 15 04 
00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 31 32 32 30 33 65 38 30 33 
65 38 01 55 AA 00 06 00 19 1C 03 00 15 31 30 31 30 34 30 33 65 38 30 33 
65 38 30 30 30 30 30 30 30 30 C8 55 AA 00 06 00 05 15 04 00 01 01 25 55 
AA 00 06 00 10 18 03 00 0C 30 31 30 34 30 33 65 38 30 33 65 38 01 55 AA 
00 06 00 19 1C 03 00 15 31 30 30 65 62 30 33 65 38 30 33 65 38 30 30 30 
30 30 30 30 30 2A 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 
18 03 00 0C 30 30 65 62 30 33 65 38 30 33 65 38 63 55 AA 00 06 00 19 1C 
03 00 15 31 30 30 64 30 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 
F7 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 
30 64 30 30 33 65 38 30 33 65 38 30 55 AA 00 06 00 19 1C 03 00 15 31 30 
30 62 31 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 F6 55 AA 00 06 
00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 
65 38 30 33 65 38 2F  


55 AA	00	06		00 19	1C030015313030363330336538303365383030303030303030	CC	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=1006303e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303036333033653830336538	05	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=006303e803e8 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030343630336538303365383030303030303030	CD	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=1004603e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303034363033653830336538	06	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=004603e803e8 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030326230336538303365383030303030303030	F7	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=1002b03e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303032623033653830336538	30	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=002b03e803e8 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030306230336538303365383030303030303030	F5	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=1000b03e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303030623033653830336538	2E	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=000b03e803e8 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313031356430336538303365383030303030303030	FD	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=1015d03e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303135643033653830336538	36	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=015d03e803e8 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313031333730336538303365383030303030303030	CE	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=1013703e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303133373033653830336538	07	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=013703e803e8 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313031323230336538303365383030303030303030	C8	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=1012203e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303132323033653830336538	01	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=012203e803e8 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313031303430336538303365383030303030303030	C8	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=1010403e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303130343033653830336538	01	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=010403e803e8 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030656230336538303365383030303030303030	2A	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=100eb03e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303065623033653830336538	63	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=00eb03e803e8 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030643030336538303365383030303030303030	F7	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=100d003e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303064303033653830336538	30	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=00d003e803e8 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030623130336538303365383030303030303030	F6	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=100b103e803e800000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303062313033653830336538	2F	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=00b103e803e8 Col: ■		CHK	



Moving the Dimmer from 100% to 0%:

55 AA 00 06 00 19 1C 03 00 15 31 30 30 62 31 30 33 65 38 30 33 64 31 30 30 30 30 30 30 30 30 EE 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 65 38 30 33 35 31 F8 55 AA 00 06 00 19 1C 03
 00 15 31 30 30 62 31 30 33 65 38 30 33 30 62 30 30 30 30 30 30 30 30 EB 55 AA 00 06 00 05 15 04 00 01 01 25 55 
AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 65 38 30 32 37 61 29 55 AA 00 06 00 19 1C 03 00 15 31 30 30 62 31 30 33 65 38 30 32 34 32 30 30 30 30 30 30 30 30 BE 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00
 0C 30 30 62 31 30 33 65 38 30 31 39 36 FF 55 AA 00 06 00 19 1C 03 00 15 31 30 30 62 31 30 33 65 38 30 31 62 34 
30 30 30 30 30 30 30 30 ED 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 65 38 30 30 66 34 29 55 AA 00 06 00 19 1C 03 00 15 31 30 30 62 31 30 33 65 38 30 30 64 65 30 30 30 30 30 30 30 30
 1F 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 65 38 30 30 33 64 26 55 
AA 00 06 00 19 1C 03 00 15 31 30 30 62 31 30 33 65 38 30 30 33 39 30 30 30 30 30 30 30 30 C2 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 65 38 30 30 30 61 20 55

55 AA	00	06		00 19	1C030015313030623130336538303364313030303030303030	EE	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=100b103e803d100000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303062313033653830333531	F8	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=00b103e80351 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030623130336538303330623030303030303030	EB	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=100b103e8030b00000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303062313033653830323761	29	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=00b103e8027a Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030623130336538303234323030303030303030	BE	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=100b103e8024200000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303062313033653830313936	FF	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=00b103e80196 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030623130336538303162343030303030303030	ED	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=100b103e801b400000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303062313033653830306634	29	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=00b103e800f4 Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030623130336538303064653030303030303030	1F	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=100b103e800de00000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303062313033653830303364	26	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=00b103e8003d Col: ■		CHK	

55 AA	00	06		00 19	1C030015313030623130336538303033393030303030303030	C2	
HEADER	VER=00	SetDP		LEN	dpId=28 Str V=100b103e8003900000000		CHK	

55 AA	00	06		00 05	1504000101	25	
HEADER	VER=00	SetDP		LEN	dpId=21 Enum V=1		CHK	

55 AA	00	06		00 10	1803000C303062313033653830303061	20	
HEADER	VER=00	SetDP		LEN	dpId=24 Str V=00b103e8000a Col: ■		CHK	



Finally, a comparison of packages.
Color, i.e. dpID 24:

    CC CC CC
30 30 36 62 30 33 65 38 30 33 65 38 dpID 24 green
30 31 36 31 30 33 65 38 30 33 65 38 dpID 24 red
30 30 65 31 30 33 65 38 30 33 65 38 dpID 24 blue

Color with temperature, i.e. dpID 28:

      CC CC CC
31 30 31 36 31 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 Setting Red
31 30 30 65 31 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 Setting Blue
31 30 30 36 66 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 Setting Green

31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 33 31 37 Temperature 75% cool
31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 31 66 37 Temperature 50% 
31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 33 65 38 Temperature cold
31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 30 30 30 Temperature Warm


I also have a schema and dpIDs here, but taken from Tuya servers:
Code: JSON
Log in, to see the code

To summarize, we have the variables here:
- dpID 20 - boolean, on/off state
- dpID 21 - enum, operating mode, in order: white colors, color, animation, music
- dpID 22 - value, from 1 to 1000, probably the brightness level, but it only appears in white mode, not RGB
- dpID 23 - value, from 0 to 1000, white temperature
- dpID 24 - RGB color as ASCII string
- dpID 26 - value, timer in seconds
- dpID 28 - RGBCW color as ASCII string



Uploading OBK
We upload with my flasher:
https://github.com/openshwprojects/BK7231GUIFlashTool
Unfortunately, you have to remove (or desolder - depending on the PCB version) the WiFi module outside the system, because TuyaMCU uses the same UART port as programming.
Wireless module Miboxer FUT037W+ connected to a breadboard
later we need to create autoexec.bat : :

// start driver
startDriver TuyaMCU
// always send wifi state 0x04 to MCU - paired and connected to cloud
tuyaMcu_defWiFiState 4
// set baud rate (if your device is using 9600, remove this line)
tuyaMcu_setBaudRate 115200
// setup Tuya LED color dpID 24 and Color format 1
// (the other dpIDs are taken from default settings)
tuyaMCU_setupLED 24 1

The code is really very short, but the remaining dpIDs are set to default values. OBK does not send dpID 28 at the moment, but tests have shown that sending dpID 22 is sufficient.
The above code will connect the LED controller with OBK to the MCU from this device, so all LED commands as well as Home Assistant Discovery will work automatically.

Summary
I have already tested several Miboxer products (also relays) and it seems that they all have a similar structure. There is always TuyaMCU and a separate WiFi module. There is also an option to connect RF, but I haven`t tested it this time.
This device is a bit more complex than typical LED strip controllers, but we managed to free it from the cloud. Our TuyaMCU LED controller in OBK is quite new, so if you have any questions or problems, please feel free to write, we will try to help.
As for the construction itself - the transistors inside are certainly better than in the controller that I tested (and repaired) some time ago in the topic WiFi SmartLife single-color LED strip dimmer - test, interior, diagram , so basically I think we can recommend this product for slightly larger installations.
PS: Related forum topics:
- Miboxer FUT036w and CB3s Issues: Flashing Firmware, WiFi Connectivity, and Button Control
- Does MiBoxer FUT035W+ has Beken chipset and is it supported with OpenBeken?
PS2: If we don`t like the use of TuyaMCU in this product and we don`t need RF, we can always desolder the MCU and make jumpers to the PWM pins of the module itself with BK, but in this PCB version it would be quite problematic

About Author
p.kaczmarek2
p.kaczmarek2 wrote 14549 posts with rating 12553 , helped 654 times. Been with us since 2014 year.

Comments

p.kaczmarek2 04 Mar 2024 19:33

I flashed this bar again. This time for someone else. Packaging and product: https://obrazki.elektroda.pl/6787749600_1709577063_thumb.jpg https://obrazki.elektroda.pl/7863337400_1709577035_thumb.jpg... [Read more]

priva7eer 24 Dec 2024 00:53

I converted the FUT037W+ today according to these instructions. Specifically, I soldered the module board - that is, those 4 pins, without surface soldering or hot air, and used those pins for programming.... [Read more]

p.kaczmarek2 24 Dec 2024 05:47

So in your copy the baud was the default 9600 and not 115200? It's interesting and strange that different copies of the same product (different versions?) use different baud. It's good to know that this... [Read more]

divadiow 28 Dec 2024 17:58

assuming this is the backup from this device: https://github.com/openshwprojects/FlashDumps/blob/e559bb3a377b5866ff4758540840d11fb67ed4ed/IoT/BK7231N/BK7231N_QIO_FUT037W_2024-05-1-20-15-07.bin it equates... [Read more]

trynio132 21 Mar 2025 00:25

Hi, I have uploaded the Tasmot software to myself on the ESP-12S board. (Interestingly on the ESP-12F boards after soldering it doesn't work because I have some weird voltage on the GPIO0 pin) I soldered... [Read more]

p.kaczmarek2 22 Mar 2025 09:38

What is the current configuration of the Tasmota that you used? [Read more]

trynio132 23 Mar 2025 14:42

After uploading the tasmota, I used a template like this { "NAME": "name", "GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0,0,0], "FLAG":0, "BASE":54, "CMND": "DimmerRange 0,1000 | TuyaMCU 21,23 | | TuyaMCU... [Read more]

FAQ

TL;DR: For Home Assistant and OpenBeken users, the Miboxer FUT037W+ uses 2 microcontrollers, and “the baud problem is easy to detect” in logs. Flash the CB3S/WB3S separately, then set TuyaMCU correctly; most units worked at 115200 baud, but at least one confirmed unit needed 9600 instead. [#21360774]

Why it matters: This FAQ gives you the shortest reliable path to make a FUT037W+ work with OpenBeken, Tasmota, Home Assistant, and TuyaMCU-based RGB+CCT control.

Option Hardware change Main advantage Main limitation
OpenBeken + original TuyaMCU Flash CB3S/WB3S only Fast setup, auto LED handling, Home Assistant discovery Must match the correct UART baud
ESP-12S + Tasmota Replace CB3S with ESP board Works with RF remote and custom TuyaMCU mapping RGB+CCT behavior can be inconsistent in UI/HA
FUT037Z+ Zigbee variant No WiFi mod path discussed Zigbee ecosystem Thread reports no simultaneous RGB + white/CCT

Key insight: The controller itself is not a simple Wi‑Fi PWM board. The Wi‑Fi module is only a UART front end; the external MCU handles LEDs and RF, so firmware success depends more on TuyaMCU mapping and baud rate than on flashing alone.

Quick Facts

  • The unit discussed cost about PLN 90 and exposes separate DC jack input and wire input, which the author called a convenient layout for LED-strip installs. [#20926307]
  • Internally, the Wi‑Fi module gets 3.3 V, while the board appears to derive that from the strip’s 12 V supply through a step-down stage. [#20926307]
  • The decoded Tuya schema shows key ranges: dpID 22 brightness = 10–1000, dpID 23 white temperature = 0–1000, and dpID 26 timer = 0–86400 s. [#20926307]
  • One confirmed OpenBeken setup needed tuyaMcu_setBaudRate 115200, but another confirmed FUT037W+ copy only worked after removing that line because its TuyaMCU ran at 9600 baud. [#21360725]
  • The board uses stronger-than-usual MOSFETs marked K50N03A, which is why the author recommended it for somewhat larger LED installations. [#20926307]

What is TuyaMCU, and how does it communicate with the WiFi module inside the Miboxer FUT037W+ LED strip controller?

TuyaMCU is the controller architecture used here, and it communicates with the Wi‑Fi module over UART. "TuyaMCU" is a device architecture that separates the network module from the main control MCU, with the Wi‑Fi board sending datapoints over serial instead of driving LEDs directly. In the FUT037W+, the CB3S/WB3S module connects through four pins: 3.3 V, GND, TX, and RX. The external MCU handles the LEDs and RF, while the Wi‑Fi module only bridges app commands to UART. [#20926307]

What is a dpID in the TuyaMCU protocol, and which dpIDs are used by the Miboxer FUT037W+ for power, mode, color, white temperature, timer, and RGBCW control?

A dpID is the numeric identifier for one TuyaMCU variable. On the FUT037W+, the thread maps dpID 20 to power on/off, 21 to mode, 23 to white temperature, 24 to RGB color string, 26 to timer in seconds, and 28 to combined RGBCW string. The author also notes dpID 22 as brightness, mainly used in white mode. The schema range confirms 23 uses 0–1000 and 26 uses 0–86400 seconds. [#20926307]

How do I flash OpenBeken onto a Miboxer FUT037W+ with a CB3S/WB3S BK7231N module and TuyaMCU architecture?

Flash the Wi‑Fi module separately, then restore TuyaMCU settings in OpenBeken. 1. Remove or desolder the CB3S/WB3S module and flash it with BK7231GUIFlashTool. 2. Reinstall the module and create autoexec.bat with startDriver TuyaMCU, tuyaMcu_defWiFiState 4, the correct baud, and tuyaMCU_setupLED 24 1. 3. Reboot and verify that sliders, heartbeats, and LED control work. The author states this setup also enables automatic Home Assistant Discovery. [#20926307]

Why do I need to remove or desolder the CB3S/WB3S module before flashing the FUT037W+ with BK7231GUIFlashTool?

You need to remove it because TuyaMCU shares the same UART used for programming. The thread states that the module must be removed or desoldered, depending on PCB version, since the external MCU is still connected to TX/RX during flashing. One later report confirms successful work by soldering only the 4-pin module board and programming through those pins, without full hot-air removal of the whole carrier. [#21360725]

What should I put in autoexec.bat to make OpenBeken control the Miboxer FUT037W+ correctly?

Use a short TuyaMCU startup script. The posted working example is: startDriver TuyaMCU, tuyaMcu_defWiFiState 4, tuyaMcu_setBaudRate 115200, and tuyaMCU_setupLED 24 1. That tells OpenBeken to start the TuyaMCU driver, report Wi‑Fi state 0x04, use 115200 baud, and bind LED color control to dpID 24 in color format 1. The author adds that OpenBeken uses default values for the remaining datapoints. [#20926307]

Why do the sliders and buttons appear in OpenBeken but the LEDs stay white and do not react on a FUT037W+?

That usually means OpenBeken created the UI, but TuyaMCU communication is not actually working. One confirmed FUT037W+ booted, lit the LEDs white, and showed sliders only after autoexec.bat was added, yet nothing reacted until the baud line was corrected. In that case, removing tuyaMcu_setBaudRate 115200 fixed the device because that unit used 9600 baud instead. White light with a dead UI is the key failure symptom. [#21360725]

How can I tell from OpenBeken logs that the TuyaMCU baud rate is wrong on a Miboxer FUT037W+?

The logs will show no real serial communication at all. The thread says a wrong baud means no TuyaMCU heartbeats arrive, and the command tuyaMcu_sendQueryState does not work. The author explicitly says, “the baud problem is easy to detect by looking at the logs,” because a healthy FUT037W+ should exchange regular heartbeat packets over UART. If the log stays silent after boot, test the other baud. [#21360774]

Why do some Miboxer FUT037W+ units seem to use 115200 baud while others use 9600 for TuyaMCU communication?

Different hardware revisions or production variants appear to use different UART settings. The original guide used 115200 baud, but a later user reported a confirmed FUT037W+ that only worked after removing that line, because the flasher output hinted at 9600 and the device responded only then. The author called this “interesting and strange,” and suggested that different copies of the same product may use different versions internally. [#21360774]

How do I decode the UART traffic from a Miboxer FUT037W+ with TuyaMCU Analyzer to identify color, brightness, and temperature packets?

Capture UART packets, feed them to TuyaMCU Analyzer, and compare dpIDs against actions in the app. The author paired the strip in the Tuya app, logged raw 55 AA frames, and then decoded them with TuyaMCU Analyzer. That revealed dpID 23 for white temperature, dpID 24 for RGB color strings, dpID 28 for combined RGBCW strings, and dpID 20 for on/off. The analyzer even decoded colors visually, which made green, red, and blue changes easy to verify. [#20926307]

How is the RGB color encoded in dpID 24, and how is the combined RGBCW value encoded in dpID 28 on the FUT037W+?

dpID 24 stores RGB as an ASCII hex string, while dpID 28 stores a longer ASCII string that combines color and white-channel values. For example, the thread shows green in dpID 24 as 006b03e803e8, red as 016103e803e8, and blue as 00e103e803e8. dpID 28 extends that format, so white-temperature examples include values like ...03e80000 for warm and ...03e803e8 for cold white. This is why dpID 28 is the full RGBCW adjust field. [#20926307]

Which MCU and RF chips are inside the Miboxer FUT037W+, and what roles do the Nuvoton MS51FC0AE, PL1166, and CB3S/WB3S modules play?

The FUT037W+ contains a Nuvoton MS51FC0AE MCU, a PL1166 A110K48 RF system, and a CB3S/WB3S BK7231N Wi‑Fi module. The Nuvoton MCU drives the transistors and handles the TuyaMCU side. The PL1166 covers RF remote-control functions. The CB3S/WB3S board provides Wi‑Fi connectivity and talks to the main MCU through UART over four pins. This two-MCU layout is the reason the device supports both Wi‑Fi and RF control. [#20926307]

What are the correct Tasmota TuyaMCU settings for a Miboxer FUT037W+ after replacing the CB3S with an ESP-12S board?

One confirmed Tasmota setup for an ESP-12S replacement was: Backlog DimmerRange 0,1000; TuyaMCU 11,20; TuyaMCU 26,21; TuyaMCU 21,21; TuyaMCU 24,24; TuyaMCU 81,26; TuyaMCU 98,101;. The user reports that this configuration worked correctly for an RGB + W strip, including colors, white on/off, and dimming. They also noted that ESP-12S worked, while ESP-12F boards gave a strange voltage issue on GPIO0 after soldering. [#21491749]

Why does the Miboxer FUT037W+ work from the RF remote in Tasmota, but RGBCT control from the web UI or Home Assistant behaves incorrectly?

It happens because the RF remote talks to the original controller logic, while Tasmota still needs exact TuyaMCU mapping for UI and Home Assistant states. One user reported that remote control worked, but RGBCT mode from the web UI was wrong, and another template caused the LEDs to change again one second later as if the previous color returned. After remapping, RGB + W worked better, but white-only control in Home Assistant still remained imperfect. [#21488606]

Miboxer FUT037W+ WiFi mod with ESP/Tasmota vs keeping TuyaMCU with OpenBeken — which approach works better for Home Assistant and RGBW/CCT control?

Keeping the original TuyaMCU and using OpenBeken is the cleaner path for this model. The author’s OpenBeken method uses only a short autoexec.bat, supports automatic Home Assistant Discovery, and keeps the original RF-capable control architecture intact. The ESP/Tasmota route can work, but the thread reports extra template tuning and lingering UI issues, especially around white-only or RGB+CCT behavior. For quickest stable integration, OpenBeken on the original BK7231N board is the safer choice. [#20926307]

How does the WiFi Miboxer FUT037W+ compare with the Zigbee FUT037Z+ when you want simultaneous RGB and white/CCT output?

The Wi‑Fi FUT037W+ is reported to handle simultaneous RGB and white better than the Zigbee FUT037Z+. A user who owned both said the FUT037Z+ has no practical way to switch RGB and white/CCT on together, and they found GitHub discussions confirming that behavior. In contrast, they recommended buying the Wi‑Fi model and replacing the chip with ESP if needed, because the Wi‑Fi version behaved better for mixed-output smart-home use. [#21491749]
Generated by the language model.
%}