Local Tuya Novostella Flood - No dp_id from API explorer

Trying to add Novostella flood lights to local Tuya. I need to manually add dps, but the api explorer does not post dp_id for attributes. Anyone find a way to figure something like this out?

{
  "result": {
    "category": "dj",
    "functions": [
      {
        "code": "switch_led",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "work_mode",
        "type": "Enum",
        "values": "{\"range\":[\"white\",\"colour\",\"scene\",\"music\"]}"
      },
      {
        "code": "bright_value_v2",
        "type": "Integer",
        "values": "{\"min\":10,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}"
      },
      {
        "code": "temp_value_v2",
        "type": "Integer",
        "values": "{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}"
      },
      {
        "code": "colour_data_v2",
        "type": "Json",
        "values": "{\"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}}"
      },
      {
        "code": "scene_data_v2",
        "type": "Json",
        "values": "{\"scene_num\":{\"min\":1,\"scale\":0,\"max\":8,\"step\":1},\"scene_units\": {\"unit_change_mode\":{\"range\":[\"static\",\"jump\",\"gradient\"]},\"unit_switch_duration\":{\"min\":0,\"scale\":0,\"max\":100,\"step\":1},\"unit_gradient_duration\":{\"min\":0,\"scale\":0,\"max\":100,\"step\":1},\"bright\":{\"min\":0,\"scale\":0,\"max\":1000,\"step\":1},\"temperature\":{\"min\":0,\"scale\":0,\"max\":1000,\"step\":1},\"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}}}"
      },
      {
        "code": "countdown_1",
        "type": "Integer",
        "values": "{\"unit\":\"\",\"min\":0,\"max\":86400,\"scale\":0,\"step\":1}"
      },
      {
        "code": "control_data",
        "type": "Json",
        "values": "{\"change_mode\":{\"range\":[\"direct\",\"gradient\"]}, \"bright\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"temperature\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1}}"
      }
    ],
    "status": [
      {
        "code": "switch_led",
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "work_mode",
        "type": "Enum",
        "values": "{\"range\":[\"white\",\"colour\",\"scene\",\"music\"]}"
      },
      {
        "code": "bright_value_v2",
        "type": "Integer",
        "values": "{\"min\":10,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}"
      },
      {
        "code": "temp_value_v2",
        "type": "Integer",
        "values": "{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}"
      },
      {
        "code": "colour_data_v2",
        "type": "Json",
        "values": "{\"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}}"
      },
      {
        "code": "scene_data_v2",
        "type": "Json",
        "values": "{\"scene_num\":{\"min\":1,\"scale\":0,\"max\":8,\"step\":1},\"scene_units\": {\"unit_change_mode\":{\"range\":[\"static\",\"jump\",\"gradient\"]},\"unit_switch_duration\":{\"min\":0,\"scale\":0,\"max\":100,\"step\":1},\"unit_gradient_duration\":{\"min\":0,\"scale\":0,\"max\":100,\"step\":1},\"bright\":{\"min\":0,\"scale\":0,\"max\":1000,\"step\":1},\"temperature\":{\"min\":0,\"scale\":0,\"max\":1000,\"step\":1},\"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}}}"
      },
      {
        "code": "countdown_1",
        "type": "Integer",
        "values": "{\"unit\":\"\",\"min\":0,\"max\":86400,\"scale\":0,\"step\":1}"
      },
      {
        "code": "control_data",
        "type": "Json",
        "values": "{\"change_mode\":{\"range\":[\"direct\",\"gradient\"]}, \"bright\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"temperature\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1}}"
      }
    ]
  },
  "success": true,
  "t": 1665238485404,
  "tid": "8f5e2a3c471311ed820d56272be83099"
}

Get Device Specification Attribute shows the dp_ids where other categories don’t.
Otherwise you just have to guess by comparing values like back in the early days.

Capture

Thanks - that is where that data is from… so I’ll continue guessing.

From smarthome section?

This might help lights are usually pretty similar but this is from an arlec flood light

{
  "result": {
    "category": "dj",
    "functions": [
      {
        "code": "switch_led",
        "dp_id": 20,
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "work_mode",
        "dp_id": 21,
        "type": "Enum",
        "values": "{\"range\":[\"white\",\"colour\",\"scene\",\"music\"]}"
      },
      {
        "code": "bright_value_v2",
        "dp_id": 22,
        "type": "Integer",
        "values": "{\"min\":10,\"max\":1000,\"scale\":0,\"step\":1}"
      },
      {
        "code": "temp_value_v2",
        "dp_id": 23,
        "type": "Integer",
        "values": "{\"min\":0,\"max\":1000,\"scale\":0,\"step\":1}"
      },
      {
        "code": "colour_data_v2",
        "dp_id": 24,
        "type": "Json",
        "values": "{\"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}}"
      },
      {
        "code": "scene_data_v2",
        "dp_id": 25,
        "type": "Json",
        "values": "{\"scene_num\":{\"min\":1,\"scale\":0,\"max\":8,\"step\":1},\"scene_units\": {\"unit_change_mode\":{\"range\":[\"static\",\"jump\",\"gradient\"]},\"unit_switch_duration\":{\"min\":0,\"scale\":0,\"max\":100,\"step\":1},\"unit_gradient_duration\":{\"min\":0,\"scale\":0,\"max\":100,\"step\":1},\"bright\":{\"min\":0,\"scale\":0,\"max\":1000,\"step\":1},\"temperature\":{\"min\":0,\"scale\":0,\"max\":1000,\"step\":1},\"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}}}"
      },
      {
        "code": "countdown_1",
        "dp_id": 26,
        "type": "Integer",
        "values": "{\"unit\":\"s\",\"min\":0,\"max\":86400,\"scale\":0,\"step\":1}"
      },
      {
        "code": "music_data",
        "dp_id": 27,
        "type": "Json",
        "values": "{\"change_mode\":{\"range\":[\"direct\",\"gradient\"]}, \"bright\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"temperature\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1}}"
      },
      {
        "code": "control_data",
        "dp_id": 28,
        "type": "Json",
        "values": "{\"change_mode\":{\"range\":[\"direct\",\"gradient\"]}, \"bright\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"temperature\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1}}"
      },
      {
        "code": "rhythm_mode",
        "dp_id": 30,
        "type": "Raw",
        "values": "{\"maxlen\":255}"
      },
      {
        "code": "sleep_mode",
        "dp_id": 31,
        "type": "Raw",
        "values": "{\"maxlen\":255}"
      },
      {
        "code": "wakeup_mode",
        "dp_id": 32,
        "type": "Raw",
        "values": "{\"maxlen\":255}"
      },
      {
        "code": "power_memory",
        "dp_id": 33,
        "type": "Raw",
        "values": "{}"
      },
      {
        "code": "cycle_timing",
        "dp_id": 209,
        "type": "Raw",
        "values": "{}"
      },
      {
        "code": "random_timing",
        "dp_id": 210,
        "type": "Raw",
        "values": "{}"
      }
    ],
    "status": [
      {
        "code": "switch_led",
        "dp_id": 20,
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "work_mode",
        "dp_id": 21,
        "type": "Enum",
        "values": "{\"range\":[\"white\",\"colour\",\"scene\",\"music\"]}"
      },
      {
        "code": "bright_value_v2",
        "dp_id": 22,
        "type": "Integer",
        "values": "{\"min\":10,\"max\":1000,\"scale\":0,\"step\":1}"
      },
      {
        "code": "temp_value_v2",
        "dp_id": 23,
        "type": "Integer",
        "values": "{\"min\":0,\"max\":1000,\"scale\":0,\"step\":1}"
      },
      {
        "code": "colour_data_v2",
        "dp_id": 24,
        "type": "Json",
        "values": "{\"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}}"
      },
      {
        "code": "scene_data_v2",
        "dp_id": 25,
        "type": "Json",
        "values": "{\"scene_num\":{\"min\":1,\"scale\":0,\"max\":8,\"step\":1},\"scene_units\": {\"unit_change_mode\":{\"range\":[\"static\",\"jump\",\"gradient\"]},\"unit_switch_duration\":{\"min\":0,\"scale\":0,\"max\":100,\"step\":1},\"unit_gradient_duration\":{\"min\":0,\"scale\":0,\"max\":100,\"step\":1},\"bright\":{\"min\":0,\"scale\":0,\"max\":1000,\"step\":1},\"temperature\":{\"min\":0,\"scale\":0,\"max\":1000,\"step\":1},\"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}}}"
      },
      {
        "code": "countdown_1",
        "dp_id": 26,
        "type": "Integer",
        "values": "{\"unit\":\"s\",\"min\":0,\"max\":86400,\"scale\":0,\"step\":1}"
      },
      {
        "code": "music_data",
        "dp_id": 27,
        "type": "Json",
        "values": "{\"change_mode\":{\"range\":[\"direct\",\"gradient\"]}, \"bright\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"temperature\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1}}"
      },
      {
        "code": "control_data",
        "dp_id": 28,
        "type": "Json",
        "values": "{\"change_mode\":{\"range\":[\"direct\",\"gradient\"]}, \"bright\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"temperature\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":1000,\"step\":1}, \"h\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":360,\"step\":1},\"s\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1},\"v\":{\"min\":0,\"scale\":0,\"unit\":\"\",\"max\":255,\"step\":1}}"
      },
      {
        "code": "rhythm_mode",
        "dp_id": 30,
        "type": "Raw",
        "values": "{\"maxlen\":\"255\"}"
      },
      {
        "code": "sleep_mode",
        "dp_id": 31,
        "type": "Raw",
        "values": "{\"maxlen\":\"255\"}"
      },
      {
        "code": "wakeup_mode",
        "dp_id": 32,
        "type": "Raw",
        "values": "{\"maxlen\":\"255\"}"
      },
      {
        "code": "power_memory",
        "dp_id": 33,
        "type": "Raw",
        "values": "{}"
      },
      {
        "code": "cycle_timing",
        "dp_id": 209,
        "type": "Raw",
        "values": "{}"
      },
      {
        "code": "random_timing",
        "dp_id": 210,
        "type": "Raw",
        "values": "{}"
      }
    ]
 

Thanks - Yes from smarthome - general device returns ‘not authorized’

I’ll try these ones and report back. Going to do a hard reset to start fresh.

Not getting it to work… but now through debug can see DP ID is plan text… What can I make of that?

Partial Sucess:

  "data": {
    "device_config": {
      "friendly_name": "Flood1",
      "local_key": "b56a3c3f3277f495",
      "host": "192.168.3.175",
      "device_id": "8051602410521cf5b902",
      "protocol_version": "3.3",
      "manual_dps_strings": "20,21,22,23,24,25,26",
      "dps_strings": [
        "20 (value: False)",
        "21 (value: scene)",
        "22 (value: 783)",
        "23 (value: 1000)",
        "24 (value: 001c03e803e8)",
        "25 (value: 000e0d00002e03e802cc00000000)",
        "26 (value: 0)"
      ],
      "entities": [
        {
          "id": 20,
          "friendly_name": "Flood1 Power",
          "brightness_lower": 10,
          "brightness_upper": 1000,
          "color_temp_min_kelvin": 2700,
          "color_temp_max_kelvin": 6500,
          "color_temp_reverse": false,
          "music_mode": false,
          "brightness": 22,
          "color_temp": 23,
          "color_mode": 21,
          "color": 24,
          "scene": 25,
          "platform": "light"
        },
        {
          "id": 21,
          "friendly_name": "Mode",
          "select_options": "White;Colour;Scene;Music",
          "restore_on_reconnect": false,
          "dps_default_value": "Colour",
          "platform": "select"
        },
        {
          "id": 22,
          "friendly_name": "Brightness",
          "min_value": 0.0,
          "max_value": 100000.0,
          "step_size": 1.0,
          "restore_on_reconnect": false,
          "platform": "number"
        },
        {
          "id": 23,
          "friendly_name": "Temp",
          "min_value": 0.0,
          "max_value": 100000.0,
          "step_size": 1.0,
          "restore_on_reconnect": false,
          "platform": "number"
        },
        {
          "id": 24,
          "friendly_name": "Colour",
          "state_on": "True",
          "state_off": "False",
          "platform": "binary_sensor"
        },
        {
          "id": 25,
          "friendly_name": "Scene",
          "select_options": "text",
          "restore_on_reconnect": false,
          "platform": "select"
        },
        {
          "id": 26,
          "friendly_name": "Timer",
          "min_value": 0.0,
          "max_value": 100000.0,
          "step_size": 1.0,
          "restore_on_reconnect": false,
          "platform": "number"
        }
1 Like

@paulcusick3 Did you get this working?
Which product is this?
I see for generation 2 in order to get tunable white they have a unit that has bluetooth only and requires a bridge for cloud connection (yet another hub, I can’t…)
They have a a unit that has wifi built into each unit, but it’s RGB only.
Shame they did this to their product line.

I just added Novostella floods (wifi version, 25W Blaze model) to localTuya today. I didn’t have to do anything to crazy, manually added them as lights.

Are they RGB only or RGB + tunable white?

RGB Only.

I am using GitHub - rospogrigio/localtuya: local handling for Tuya devices

I am NOT using: GitHub - make-all/tuya-local: Local support for Tuya devices in Home Assistant – Which does not support color lights.

Just wanted to clarify on what I am using. I don’t think any of the Local Tuya solutions support Bluetooth.

Yeah that’s what I was afraid of. I don’t get why they made that device design choice.

It is working fine. Mine are RBGW, wifi only, no bluetooth. Will have to look at them to see if i see model number. They are about 2 years old though.

edit - from order receipt - part number NTF36-RGBCW-US-2
‎Dimmable 2700K-6500K Tunable White
Rgbcw (Rgb+warm White+ Daylight White)

Ah this looks like the generation 1.
I guess you can still buy them which is nice.
I guess eventually they’ll run out of stock and gen 2’s options look not as nice.

Followup.

After a few days I ditched localTuya. If you totally block the devices from the internet they work fine, for a bit. I ran into a few issues moving the floodlights around (power cycling) and sometimes they would not rejoin.

Went back to the official Tuya integration, been working well for over a year. I may try to flash them with WLED, it is a process and you need to break the glass.

Tuya integration work wifi access with local i cant add suggestion ?

i have this error :slight_smile:

image

dot found DP :slight_smile:
Connected to the device was successful but no datapoints were found, please try again. Create a new Issue and include debug logs if the problem persists

image

I got my Novostella Blaze 25w RGB off of Tuya with full local control and DDP. All done with OTA flashing.

Full write up: Novostella Blaze 25W RGB Flood Lights Local Control w/DDP