DDF for Neo Temperature, Humidity and Illumination Sensor

Hi everypody,

some weeks ago I brougt a Neo temperature, humidity and illumination sensor (manufacture name: _TZ3000_qaaysllp https://zigbee.blakadder.com/Neo_NAS-TH02B.html).
For this sensor I tried to create a DDF, but to be honest with no success. I can see the current values for temperature (ep 02, cl 0x0402 at 0x000), humidity (ep 02, cl 0x0405, at ox0000) and lux (ep 01, cl 0x0400, at 0x0000) by reading the clusters in deconz, but the api shows always “null” for temperature and humidity (illumitation works fine).
Can you please give me a hint, what is wrong with this DDF? Thanks in advance.

{
  "schema": "devcap1.schema.json",
  "manufacturername": "_TZ3000_qaaysllp",
  "modelid": "TS0201",
  "vendor": "neo",
  "product": "TS0201",
  "sleeper": true,
  "status": "Silver",
  "path": "/devices/ts0201_lum.json",
  "subdevices": [
    {
      "type": "$TYPE_LIGHT_LEVEL_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x01",
        "0x0400"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0106",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x0400"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/battery",
          "description": "The current device battery level in 0–100 %.",
          "parse": {
            "at": "0x0021",
            "cl": "0x0001",
            "cppsrc": "power_configuration.cpp:199",
            "ep": 1,
            "eval": "Item.val = Attr.val / 2"
          }
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "config/tholddark",
          "description": "Specifies at which <code class=\"api-attribute\">lightlevel</code> the <code class=\"api-attribute\">dark</code> attribute turns false.",
          "default": 12000
        },
        {
          "name": "config/tholdoffset",
          "description": "Relative offset to <code class=\"api-attribute\">tholddark</code>. Sets <code class=\"api-attribute\">daylight</code> attribute to true when when lightlevel is at or above (tholddark + tholdoffset).",
          "default": 7000
        },
        {
          "name": "state/dark",
          "description": "True when <code class=\"api-attribute\">lightlevel</code> is lower than <code class=\"api-attribute\">tholddark</code>."
        },
        {
          "name": "state/daylight",
          "description": "True when <code class=\"api-attribute\">lightlevel</code> suits daylight according <code class=\"api-attribute\">tholddark</code> and <code class=\"api-attribute\">tholdoffset</code> configuration."
        },
        {
          "name": "state/lastupdated"
        },
        {
          "name": "state/lightlevel",
          "description": "The current Light level in 10000 log10 (lux) + 1."
        },
        {
          "name": "state/lux",
          "description": "The current Light level in lux.",
          "parse": {
            "at": "0x0021",
            "cl": "0x0001",
            "cppsrc": "power_configuration.cpp:199",
            "ep": 1,
            "eval": "Item.val = Attr.val / 2"
          }
        }
      ]
    },
    {
      "type": "$TYPE_TEMPERATURE_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x02",
        "0x0402"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0302",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x0402"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/battery",
          "description": "The current device battery level in 0&ndash;100&thinsp;%.",
          "parse": {
            "at": "0x0021",
            "cl": "0x0001",
            "cppsrc": "power_configuration.cpp:199",
            "ep": 1,
            "eval": "Item.val = Attr.val / 2"
          }
        },
        {
          "name": "config/offset",
          "description": "Relative offset to the main measured value.",
          "default": 0
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "state/lastupdated"
        },
        {
          "name": "state/temperature",
          "description": "The current temperature in °C &times; 100.",
          "default": 0
        }
      ]
    },
    {
      "type": "$TYPE_HUMIDITY_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x02",
        "0x0405"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0302",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x0405"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/battery",
          "description": "The current device battery level in 0&ndash;100&thinsp;%.",
          "parse": {
            "at": "0x0021",
            "cl": "0x0001",
            "cppsrc": "power_configuration.cpp:199",
            "ep": 1,
            "eval": "Item.val = Attr.val / 2"
          }
        },
        {
          "name": "config/offset",
          "description": "Relative offset to the main measured value.",
          "default": 0
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "state/humidity",
          "description": "The current relative humidity in percent.",
          "default": 0
        },
        {
          "name": "state/lastupdated"
        }
      ]
    }
  ],
  "bindings": [
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x0400",
      "report": [
        {
          "at": "0x0000",
          "dt": "0x21",
          "min": 1,
          "max": 300,
          "change": "0x00000001"
        }
      ]
    },
    {
      "bind": "unicast",
      "src.ep": 2,
      "cl": "0x0402",
      "report": [
        {
          "at": "0x0000",
          "dt": "0x29",
          "min": 1,
          "max": 300,
          "change": "0x00000001"
        }
      ]
    },
    {
      "bind": "unicast",
      "src.ep": 2,
      "cl": "0x0405",
      "report": [
        {
          "at": "0x0000",
          "dt": "0x21",
          "min": 1,
          "max": 300,
          "change": "0x00000001"
        }
      ]
    }
  ]
}

So bad luck for you, your DDF is probably good but this is a Tuya locked device.
Need to make a requests combinaison to unlock it during pairing LCZ030 output of both temperature & humidity is null · Issue #9054 · Koenkk/zigbee2mqtt · GitHub

You need to read (and probably in the good order) on the basic cluster

            0x0004, // Manufacturer Name
            0x0000,  // ZCL Version
            0x0001, // Application Version
            0x0005, // Model Identifier
            0x0007, // Power Source
            0xfffe  // Unknown

And for me this part is easier to do editing c++ code.

Thank you for the quick response.
In the meantime I tried different versions of the DDF and now it’s working. Here is the result.

{
  "schema": "devcap1.schema.json",
  "manufacturername": "_TZ3000_qaaysllp",
  "modelid": "TS0201",
  "vendor": "neo",
  "product": "TS0201",
  "sleeper": false,
  "status": "Silver",
  "path": "/devices/ts0201_lum.json",
  "subdevices": [
    {
      "type": "$TYPE_LIGHT_LEVEL_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x01",
        "0x0400"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0106",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x0400"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/battery",
          "refresh.interval": 300,
          "read": {
            "at": "0x0021",
            "cl": "0x0001",
            "ep": 1,
            "fn": "zcl"
          },
          "parse": {
            "at": "0x0021",
            "cl": "0x0001",
            "cppsrc": "power_configuration.cpp:199",
            "ep": 1,
            "eval": "Item.val = Attr.val"
          }
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "config/tholddark",
          "default": 12000
        },
        {
          "name": "config/tholdoffset",
          "default": 7000
        },
        {
          "name": "state/dark"
        },
        {
          "name": "state/daylight"
        },
        {
          "name": "state/lastupdated"
        },
        {
          "name": "state/lightlevel",
          "refresh.interval": 10,
          "read": {
            "at": "0x0000",
            "cl": "0x0400",
            "ep": 1,
            "fn": "zcl"
          },
          "parse": {
            "at": "0x0000",
            "cl": "0x0400",
            "ep": 1,
            "eval": "Item.val = Attr.val",
            "fn": "zcl"
          }
        },
        {
          "name": "state/lux",
          "refresh.interval": 10,
          "read": {
            "at": "0x0000",
            "cl": "0x0400",
            "ep": 1,
            "fn": "zcl"
          },
          "parse": {
            "at": "0x0000",
            "cl": "0x0400",
            "ep": 1,
            "eval": "Item.val = 10 ** ((Attr.val - 1) / 10000)",
            "fn": "zcl"
          }
        },
        {
          "name": "state/voltage",
          "description": "Battery (V)",
          "refresh.interval": 300,
          "read": {
            "at": "0x0020",
            "cl": "0x0001",
            "ep": 1,
            "fn": "zcl"
          },
          "parse": {
            "at": "0x0020",
            "cl": "0x0001",
            "ep": 1,
            "eval": "Attr.val = Item.val"
          }
        }
      ]
    },
    {
      "type": "$TYPE_TEMPERATURE_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x02",
        "0x0402"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0302",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x0402"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "state/lastupdated"
        },
        {
          "name": "state/temperature",
          "refresh.interval": 120,
          "read": {
            "at": "0x0000",
            "cl": "0x0402",
            "ep": 2,
            "fn": "zcl"
          },
          "parse": {
            "at": "0x0000",
            "cl": "0x0402",
            "ep": 2,
            "eval": "Item.val = Attr.val",
            "fn": "zcl"
          },
          "default": 0
        }
      ]
    },
    {
      "type": "$TYPE_HUMIDITY_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x02",
        "0x0405"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0302",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x0405"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "state/humidity",
          "refresh.interval": 120,
          "read": {
            "at": "0x0000",
            "cl": "0x0405",
            "ep": 2,
            "fn": "zcl"
          },
          "parse": {
            "at": "0x0000",
            "cl": "0x0405",
            "ep": 2,
            "eval": "Item.val = Attr.val",
            "fn": "zcl"
          },
          "default": 0
        },
        {
          "name": "state/lastupdated"
        }
      ]
    }
  ],
  "bindings": [
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x0400",
      "report": [
        {
          "at": "0x0000",
          "dt": "0x21",
          "min": 10,
          "max": 300,
          "change": "0x00000001"
        }
      ]
    },
    {
      "bind": "unicast",
      "src.ep": 2,
      "cl": "0x0402",
      "report": [
        {
          "at": "0x0000",
          "dt": "0x29",
          "min": 10,
          "max": 300,
          "change": "0x00000001"
        }
      ]
    },
    {
      "bind": "unicast",
      "src.ep": 2,
      "cl": "0x0405",
      "report": [
        {
          "at": "0x0000",
          "dt": "0x21",
          "min": 10,
          "max": 300,
          "change": "0x00000001"
        }
      ]
    },
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x0001",
      "report": [
        {
          "at": "0x0020",
          "dt": "0x20",
          "min": 300,
          "max": 3000,
          "change": "0x00000001"
        },
        {
          "at": "0x0021",
          "dt": "0x20",
          "min": 300,
          "max": 3000,
          "change": "0x00000001"
        }
      ]
    }
  ]
}

Thx ^^

Perhaps reading the basics attributes in deconz can unlock the device, even the attribute 0xfffe is read during the procedure.