A Color Item can receive commands the same as a Dimmer or a Switch. Sending an ON/OFF command will turn the light on or off. Sending a PercentType (integer between 0 and 100) will set the brightness.
If you are using a sitemap, put the Color Item on the sitemap using a Switch or Setpoint element.
If you are using MainUI, there are several color light widgets on the marketplace that includes all these functions in one widget. Or you can link the color Channel to a Switch and Dimmer Item separately and use those. Or put the one Color Item on a page using three different widgets.
It’s always worked this way. If you look at the code, you’ll see that a ColorItem inherits from DimmerItem which means in all ways it will behave as a Dimmer. In turn, DimmerItem inherits from SwitchItem which means in all ways a Dimmer will behave as a Switch also.
More details in the docs here and here. Notice the commands color accept are listed as
OnOff, IncreaseDecrease, Percent, HSB, Refresh
A few bindings will split the three out into separate Channels, but it’s not required because Color can receive all three.
I can’t say much about that. It’s the binding that actually interprets the commands and sends them out to the device. 202 means the request was received and accepted but not processed yet. I’m not sure under what circumstances that happens. Maybe it’s not even getting to the binding.
Should be “120.0, 90, 0”. The saturation and brightness fields must be PercentTypes (i.e. integers between 0 and 100). I don’t think that’s the cause of the 202 though.
Just one more note, how ON/OFF is handled is managed by the binding. Most of the time it will just set the brightness to 0 and leave the color and saturation alone. But other bindings may do something different. I don’t know how Tuya does it. You’ll have to experiment.
There is a separate REST API endpioint for updates and commands. Are you using the PUT or the POST endpoint? A PUT to /items/{item name}/state updates the Item. A POST to /items/{item name}/ sends a command.