Tuya Ceiling light configuration

Wanted to add this here in case someone is struggling with configuring a similar device for Tuya Local.


I got the device from Amazon and it actually has two LED sources:

  • Main: white temperature/brightness
  • Outside: color/brightness

Installation is really easy and, as usual, it works directly with Tuya app (beside Smart Life). Once configured you can go to your Local Tuya integration and configure it as below:

It doesn’t seem to allow setting both sources on at the same time, but when color is white you can set the light Temperature and the main source will turn on. For other color the main turns off and outside Led ring will light up.

2 Likes

So I have similar Tuya ceiling lights and cannot get home assistant to turn the color on. I tried customizing the light entity but can’t seem to get it to turn the RGB LEDs on through home assistant. The tuya app works as you described, bright white leds or the rgb led ring. I’m using the Tuya cloud integration, not the local one. Would I have more available features using the Local Tuya integration in HACS?

Hey @mattheuw1, I have to say that I went straight for the local integration as I had already other devices configured like that. I would have expected the standard one to expose similar functionality, but this ceiling is a bit special - outside Tuya app you can’t turn both lights on :confused:
If it’s not complicated to switch to local Tuya you can then try it with the config above.

Maybe someone can help me out? I am new at homeassiistant and startet few days ago with everything.

I read so much pages but i dont get my tuya celliing light working with all features on homeassistant.
Just on and off…The strangest thing i dont understand, why i just have the ID number 1 to 10 not like every guide tells 22, 23 and so on?

i use a “SHILOOK tuya IR tuya” in my bathroom, at the tuya developerpage its called. Product Name
SHILOOK tuya IR+CCT+RGB ceiling light

Here is a screenshot, which number i need to enter where to have all features like brightness, color and so on?

Looks to be different values than the one I had. Do you have access to Tuya API tools? You can get the definitions easier from there.

Yeah, but can you explain to me where to find this in Tuya API Tools?
I dont find there any ids or something of the values like 5(value: 0104020086c404)

Hi Stefan,
This API call - Query Properties will give a JSON format of all the options, you can than use the dp_id to map it in Local tuya (values would also match to confirm the setting).

1 Like

Hey, i have similar light - BlitzWill® BW-CLT2

Main: white temperature/brightness - WORKING Great,

Outside: color/brightness but can´t change any colour or brightness.

On homeassistant entity only show thisimage

On Tuya Query Properties showing more data:

Can please help set this light?
Thanks!

This mi giving error, if trying change colour/brig.

Try setting ID 24 for Color (under Color mode) - I see that there’s nothing configured in your screenshot for it.


Not clicked this photo, still not works correctly

Sometimes it is possible to change the color rgb once, but it does not work on the second attempt and can´t change brightnes rgb…

On app Smart Life rgb and brightnes work perfectly.

Sorry, I missed that was external image.
Looks like the properties are slightly different - but the main one I had selected on mine are there.

Not sure if protocol would be an issue, I’m using 3.3 btw. Otherwise I’m not sure :thinking:

Hi, I have the same Blitzwolf/Blitzwill BW-CLT2 ceiling lights.
I use the following configuration:

And I get this:

i thought i got it, but i dont…

i take the ids as @IceCondor told form TuyaIOT, but the birghtnes don´t work or the rgb and i dont get why…

i got this code:

{
  "result": {
    "properties": [
      {
        "code": "led_switch",
        "custom_name": "",
        "dp_id": 1,
        "time": 1698039133884,
        "value": false
      },
      {
        "code": "work_mode",
        "custom_name": "",
        "dp_id": 2,
        "time": 1698036739239,
        "value": "white"
      },
      {
        "code": "bright_value",
        "custom_name": "",
        "dp_id": 3,
        "time": 1698004693970,
        "value": 255
      },
      {
        "code": "temp_value",
        "custom_name": "",
        "dp_id": 4,
        "time": 1698004693970,
        "value": 170
      },
      {
        "code": "colour_data",
        "custom_name": "",
        "dp_id": 5,
        "time": 1698015151050,
        "value": "002d000078ff2d"
      },
      {
        "code": "scene_data",
        "custom_name": "",
        "dp_id": 6,
        "time": 1693768453735,
        "value": "bd78000026ffbd"
      },
      {
        "code": "flash_scene_1",
        "custom_name": "",
        "dp_id": 7,
        "time": 1693768453735,
        "value": "ffff500100ff00"
      },
      {
        "code": "flash_scene_2",
        "custom_name": "",
        "dp_id": 8,
        "time": 1693768453735,
        "value": "ffff8006ff000000ff000000ff000000000000000000"
      },
      {
        "code": "flash_scene_3",
        "custom_name": "",
        "dp_id": 9,
        "time": 1693768453735,
        "value": "ffff5001ff0000"
      },
      {
        "code": "flash_scene_4",
        "custom_name": "",
        "dp_id": 10,
        "time": 1693768453735,
        "value": "ffff0506ff000000ff00ffff00ff00ff0000ff000000"
      }
    ]
  },
  "success": true,
  "t": 1698075326845,
  "tid": "ca0c650471b911eeab9046acc027565a"
}

and fill it in like this:

i also have installed normal tuya support, with this the lamp works flawless but i also want it to use it w/o their cloud. I get these device info, but i wont help me out:

{
  "home_assistant": {
    "installation_type": "Home Assistant Container",
    "version": "2023.10.3",
    "dev": false,
    "hassio": false,
    "virtualenv": false,
    "python_version": "3.11.5",
    "docker": true,
    "arch": "x86_64",
    "timezone": "Europe/Berlin",
    "os_name": "Linux",
    "os_version": "5.15.0-87-generic",
    "run_as_root": true
  },
  "custom_components": {
    "hacs": {
      "version": "1.33.0",
      "requirements": [
        "aiogithubapi>=22.10.1"
      ]
    },
    "localtuya": {
      "version": "5.2.1",
      "requirements": []
    }
  },
  "integration_manifest": {
    "domain": "tuya",
    "name": "Tuya",
    "codeowners": [
      "@Tuya",
      "@zlinoliver",
      "@frenck"
    ],
    "config_flow": true,
    "dependencies": [
      "ffmpeg"
    ],
    "dhcp": [
      {
        "macaddress": "105A17*"
      },
      {
        "macaddress": "10D561*"
      },
      {
        "macaddress": "1869D8*"
      },
      {
        "macaddress": "381F8D*"
      },
      {
        "macaddress": "508A06*"
      },
      {
        "macaddress": "68572D*"
      },
      {
        "macaddress": "708976*"
      },
      {
        "macaddress": "7CF666*"
      },
      {
        "macaddress": "84E342*"
      },
      {
        "macaddress": "D4A651*"
      },
      {
        "macaddress": "D81F12*"
      }
    ],
    "documentation": "https://www.home-assistant.io/integrations/tuya",
    "integration_type": "hub",
    "iot_class": "cloud_push",
    "loggers": [
      "tuya_iot"
    ],
    "requirements": [
      "tuya-iot-py-sdk==0.6.6"
    ],
    "is_built_in": true
  },
  "data": {
    "endpoint": "https://openapi.tuyaeu.com",
    "auth_type": 0,
    "country_code": "49",
    "app_type": "smartlife",
    "mqtt_connected": true,
    "disabled_by": null,
    "disabled_polling": false,
    "name": "Badezimmer Decke",
    "model": "SLK103RS",
    "category": "dj",
    "product_id": "ajn**********",
    "product_name": "RGB+CCT Smart Light",
    "online": true,
    "sub": false,
    "time_zone": "+01:00",
    "active_time": "2023-03-17T20:06:05+00:00",
    "create_time": "2023-01-21T17:06:22+00:00",
    "update_time": "2023-10-22T15:52:07+00:00",
    "function": {
      "switch_led": {
        "type": "Boolean",
        "value": {}
      },
      "bright_value": {
        "type": "Integer",
        "value": {
          "min": 25,
          "scale": 0,
          "unit": "",
          "max": 255,
          "step": 1
        }
      },
      "work_mode": {
        "type": "Enum",
        "value": {
          "range": [
            "white",
            "colour"
          ]
        }
      },
      "temp_value": {
        "type": "Integer",
        "value": {
          "min": 0,
          "scale": 0,
          "unit": "",
          "max": 255,
          "step": 1
        }
      },
      "colour_data": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "scene_data": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "flash_scene_1": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "flash_scene_2": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "flash_scene_3": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "flash_scene_4": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      }
    },
    "status_range": {
      "switch_led": {
        "type": "Boolean",
        "value": {}
      },
      "work_mode": {
        "type": "Enum",
        "value": {
          "range": [
            "white",
            "colour"
          ]
        }
      },
      "bright_value": {
        "type": "Integer",
        "value": {
          "min": 25,
          "scale": 0,
          "unit": "",
          "max": 255,
          "step": 1
        }
      },
      "colour_data": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "scene_data": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "flash_scene_1": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "flash_scene_2": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "flash_scene_3": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "flash_scene_4": {
        "type": "Json",
        "value": {
          "h": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 360,
            "step": 1
          },
          "s": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          },
          "v": {
            "min": 1,
            "scale": 0,
            "unit": "",
            "max": 255,
            "step": 1
          }
        }
      },
      "temp_value": {
        "type": "Integer",
        "value": {
          "min": 0,
          "scale": 0,
          "unit": "",
          "max": 255,
          "step": 1
        }
      }
    },
    "status": {
      "switch_led": true,
      "work_mode": "white",
      "bright_value": 40,
      "temp_value": 0,
      "colour_data": {
        "h": 117.0,
        "s": 64.0,
        "v": 1.0
      },
      "scene_data": {
        "h": 38.0,
        "s": 255.0,
        "v": 189.0
      },
      "flash_scene_1": {
        "bright": 255,
        "frequency": 80,
        "hsv": [
          {
            "h": 120.0,
            "s": 255.0,
            "v": 255.0
          }
        ],
        "temperature": 255
      },
      "flash_scene_2": {
        "bright": 255,
        "frequency": 128,
        "hsv": [
          {
            "h": 0.0,
            "s": 255.0,
            "v": 255.0
          },
          {
            "h": 120.0,
            "s": 255.0,
            "v": 255.0
          },
          {
            "h": 240.0,
            "s": 255.0,
            "v": 255.0
          },
          {
            "h": 0.0,
            "s": 0.0,
            "v": 0.0
          },
          {
            "h": 0.0,
            "s": 0.0,
            "v": 0.0
          },
          {
            "h": 0.0,
            "s": 0.0,
            "v": 0.0
          }
        ],
        "temperature": 255
      },
      "flash_scene_3": {
        "bright": 255,
        "frequency": 80,
        "hsv": [
          {
            "h": 0.0,
            "s": 255.0,
            "v": 255.0
          }
        ],
        "temperature": 255
      },
      "flash_scene_4": {
        "bright": 255,
        "frequency": 5,
        "hsv": [
          {
            "h": 0.0,
            "s": 255.0,
            "v": 255.0
          },
          {
            "h": 120.0,
            "s": 255.0,
            "v": 255.0
          },
          {
            "h": 60.0,
            "s": 255.0,
            "v": 255.0
          },
          {
            "h": 300.0,
            "s": 255.0,
            "v": 255.0
          },
          {
            "h": 240.0,
            "s": 255.0,
            "v": 255.0
          },
          {
            "h": 0.0,
            "s": 0.0,
            "v": 0.0
          }
        ],
        "temperature": 255
      }
    },
    "home_assistant": {
      "name": "Badezimmer Decke",
      "name_by_user": null,
      "disabled": false,
      "disabled_by": null,
      "entities": [
        {
          "disabled": false,
          "disabled_by": null,
          "entity_category": null,
          "device_class": null,
          "original_device_class": null,
          "icon": null,
          "original_icon": null,
          "unit_of_measurement": null,
          "state": {
            "entity_id": "light.badezimmer_decke",
            "state": "on",
            "attributes": {
              "min_color_temp_kelvin": 2000,
              "max_color_temp_kelvin": 6535,
              "min_mireds": 153,
              "max_mireds": 500,
              "supported_color_modes": [
                "brightness",
                "color_temp",
                "hs"
              ],
              "color_mode": "color_temp",
              "brightness": 17,
              "color_temp_kelvin": 2000,
              "color_temp": 500,
              "hs_color": [
                30.601,
                94.547
              ],
              "rgb_color": [
                255,
                136,
                13
              ],
              "xy_color": [
                0.599,
                0.382
              ],
              "friendly_name": "Badezimmer Decke",
              "supported_features": 0
            },
            "last_changed": "2023-10-22T18:40:15.120056+00:00",
            "last_updated": "2023-10-22T18:40:15.120056+00:00"
          }
        }
      ]
    }
  }
}

Any other ideas to try out? it felt i have tested more than 9028374 combinations… but not the right one…

That’s a lot of combinations, you should be a ‘safe cracker’ :wink: . A bit further ‘out there’ from your work to make this device totally local, however I has converted several Tuya based ceiling lights to 100% local by replacing the firmware in the lights. Not all lights can be converted, but a pretty good number can be. There are two ‘levels’ of this conversion process for lights that can be successfully converted. Links below. The first is the easiest, using the Tuya Cloud Cutter software you can replace the firmware on the device ‘over the air’ link to github below. There are number of videos on YouTube on how to set this up and do this process. 2nd path is for lights that are ‘convertible’ but not via the ‘over the air’ method, this requires opening the light fixture and temporarily soldering a couple of wire to the micro controller and flashing the firmware using a USB converter dongle, a bit more work but not to bad if you are okay with soldering.

I have a number of the Tuya devices completely converted to 100% local control and they have been solid and nonstop operation for over a year.

Good hunting!

1 Like

Maybe it will be my new job, safe cracker incommin :wink:
My conflict for now, at this point we do many things via voice control of alexa, and i’m not so deep inside of HA to replace everything with custom configuration. When we find a voice control for HA ( i have enough time for try’n’error :stuck_out_tongue: ) i maybe can implement it. You also have some good tips for this?

But first i want this fu… light will work with HA and i am really annoyed :stuck_out_tongue:

If I understand your question correctly.

Another interesting feature of the OpenBeken firmware that I cited is that it does a very good job of emulating the Tasmota API. In recent releases of the true Tasmota firmware for ESP32 devices, you can create a wifi Tasmota device that emulates a Matter device on wifi. What makes this interesting, is this true ESP32 Tasmota devices can connect to multiple other Tasmota devices and make them appear as Matter devices.

So I have been able to convert the two types of Tuya ceiling lights linked below with the OpenBeken firmware, connect them to a ESP32 Tasmota device configured as with this Matter bridge function enabled.

Then I was able to expose these formerly Tuya cloud controlled ceiling lights, now 100% locally controlled, to Apple HomeKit, Google Home and Home Assistant.

Now these lights are directly controlled by HomeKit (siri) and Google Home voice, as well as Home Assistant.

Yes, you can create the same type of connection from these lights via Home Assistant and it’s bridges to HomeKit and Google Home, and use Apple and Google voice to control the lights this way. However, this new way via Matter gives you another route to use Apple, Google and Amazon (I have not tried Amazon Alexa) voice to directly (at least kind of directly via a bridging ESP32 Tasmota device). Link below to Tasmota Matter documentation, give it a read, some very interesting possibilities using this Tasmota/Matter bridge ability.

A couple notes on the ceiling lights I reference below. Be careful when shopping at Amazon, as physical product (and firmware) can change since I ordered these lights. And 2nd, the cited lights are USA 120 volt, not sure your location, but make sure to get correct voltage.

Good hunting!

https://tasmota.github.io/docs/Matter/

https://www.amazon.com/gp/product/B09W5RW5R4

https://www.amazon.com/dp/B081QGS8CK

1 Like