Insta/Nexentro Blinds Actuator Mini

aka: Jalousieaktor Mini
partNO: 57008000
hw version: 0
firmware version: 00.48.00
Edit: removed mention of old device Ticket, since this info will superseed. Also changed this from device supprt to ddf library since it works now.

Summary: I beleive the device works out of the box with deconz 2.13.1+ . However people with tilting devices “Lamellenstellung” used to have trouble with older device firmware. Best experience should be, when You update the device firmware via the manufacturer’s bluetooth app before joining the zigbee network.

Hint: If You set tilt time (“Umsteuerzeit Lamellen”) > 0,00s The window-cover-type will change from “rollershade” to “tilt and lift” and then the commands for setting the tilt will not be ignored anymore.

Reopened it :slight_smile:

ddf with added tilt attribute

{
  "schema": "devcap1.schema.json",
  "manufacturername": "Insta",
  "modelid": "Generic UP Device",
  "product": "Generic UP Device",
  "sleeper": false,
  "status": "Bronze",
  "subdevices": [
    {
      "type": "$TYPE_WINDOW_COVERING_DEVICE",
      "restapi": "/lights",
      "uuid": [
        "$address.ext",
        "0x06"
      ],
      "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": "state/bri",
          "description": "The current brightness.",
          "refresh.interval": 5
        },
        {
          "name": "state/lift",
          "description": "The lift state of a roller blind."
        },
        {
          "name": "state/tilt",
            "public": true,
          "read": {
            "at": "0x0009",
            "cl": "0x0102",
            "ep": 6,
            "fn": "zcl"
          },
          "parse": {
            "at": "0x0009",
            "cl": "0x0102",
            "ep": 6,
            "eval": "Item.val = Attr.val",
            "fn": "zcl"
          }
        },
        {
          "name": "state/on",
          "description": "True when device is on; false when off.",
          "refresh.interval": 5
        },
        {
          "name": "state/open",
          "description": "The open/close state."
        },
        {
          "name": "state/reachable"
        }
      ]
    }
  ],
  "bindings": [
    {
      "bind": "groupcast",
      "src.ep": 6,
      "dst.ep": 1,
      "cl": "0x2001"
    },
    {
      "bind": "groupcast",
      "src.ep": 6,
      "dst.ep": 1,
      "cl": "0x2001"
    }
  ]
}
1 Like

To be honest, I’m very surprised that this is working somehow, as this is basically a fully empty DDF with incorrect bindings. It also should not really fire anything via the REST API :thinking:

I updated the autogenerated ddf to reflect the learnings of our last adventure.
ep 6 holds the window-covering-device cluster with all the state and commands to execute.

All works like this and I attribute it to Device Description Files - deCONZ C++ Documentation :

In contrast to other projects most of the implementation details are not exposed.

Note however even in ddf strict mode leaving and joining results in no ddf log lines:

20:25:41:508 ZDP node descriptor verified: 0x5C0272FFFE62AF0E
20:25:41:508 ZDP active endpoints verified: 0x5C0272FFFE62AF0E
20:25:41:508 DEV enter passive state 0x00212EFFFF077634
20:25:41:508 ZDP simple descriptors verified: 0x5C0272FFFE62AF0E
20:25:41:509 DEV modelId: Generic UP Device, 0x5C0272FFFE62AF0E
20:25:41:509 DEV enter passive state 0x5C0272FFFE62AF0E
20:25:41:509 DEV enter passive state 0x5C0272FFFE62AF0E
20:25:42:441 UPNP socket not bound, state: 0
20:27:04:188 unhandled APS-DATA.confirm id: 23 status 0xE1
20:27:43:814 DEV add binding cluster: 0x2000,  0x5C0272FFFE62AF0E
20:35:02:372 unhandled APS-DATA.confirm id: 77 status 0xE1
20:41:56:413 unhandled APS-DATA.confirm id: 172 status 0xE1
20:47:09:317 unhandled APS-DATA.confirm id: 74 status 0xE1
21:08:59:916 5c:02:72:ff:fe:62:af:0e-06/attr/modelid expression: Item.val = Attr.val --> Generic UP Device
21:08:59:918 5c:02:72:ff:fe:62:af:0e/attr/modelid expression: Item.val = Attr.val --> Generic UP Device
21:09:00:458 5c:02:72:ff:fe:62:af:0e-06/attr/swversion expression: Item.val = Attr.val --> 00.48.00

Thanks a lot for sharing the DDF. I was full of hope when reading fkuep’s first post, but the tilt attribute is unfortunately not working for me.

I also noticed that this DDF is basically the same the default DDF that the editor proposed.

The behavior I am observing is the following:

  1. The device does not expose the ‘tilt’ attribute
  2. The device does return a ‘sat’ attribute when querying the status over the ‘lights’ endpoint (which as far as I understand is basically the same as tilt, but with a 0-255 instead of 0-100 range), however it always returns 0 regardless of the actual tilt state.
  3. If I try to post the ‘tilt’ value, an error is returned.
  4. If I try to post the ‘sat’ attribute, it works (the tilt of the blind is changed) and interestingly, the response returns the correct value of the tilt

Here is a screenshot showing points 1) and 3):

My goal is to get the ‘tilt’ attribute to be regularly exposed. What can I try?

Thank you all

I have added the tilt attribute!
Can You try again ?

I could also set tilt:

And with node-red connected to home-assistant (which is connected to deconz) …
I could use the set_cover_tilt_position: funtion on cover :slight_smile:

And all would be reflected in deconz-gui inversely:
(I set 35 and the result would be 65)
… I beleive that is correct since the vendor and the zigbee standard library interpret it inverse.

Yes, now it works, thank you very much! The tilt attribute is exposed as expected over the API and works as expected. Setting both lift and tilt at once doesn’t work, but that seems to be normal as far as I understand. Thanks a lot! :slightly_smiling_face:

I created below DDF since I noticed that there is no one yet included in the current release. It works fine for me and I would create a PR after some review/comments.

{
  "schema": "devcap1.schema.json",
  "manufacturername": "Insta GmbH",
  "modelid": "NEXENTRO Blinds Actuator",
  "vendor": "NEXENTRO",
  "product": "NEXENTRO Blinds Actuator",
  "sleeper": false,
  "status": "Gold",
  "subdevices": [
    {
      "type": "$TYPE_WINDOW_COVERING_DEVICE",
      "restapi": "/lights",
      "uuid": [
        "$address.ext",
        "0x06"
      ],
      "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/mode",
          "parse": {
            "at": "0x0017",
            "cl": "0x0102",
            "ep": 6,
            "eval": "Item.val = Attr.val;",
            "fn": "zcl"
          }
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "config/windowcoveringtype",
          "parse": {
            "at": "0x0000",
            "cl": "0x0102",
            "ep": 6,
            "eval": "Item.val = Attr.val;",
            "fn": "zcl"
          }
        },
        {
          "name": "state/lift",
          "refresh.interval": 300,
          "parse": {
            "at": "0x0008",
            "cl": "0x0102",
            "ep": 6,
            "eval": "Item.val = Attr.val;",
            "fn": "zcl"
          },
          "default": 0
        },
        {
          "name": "state/on",
          "refresh.interval": 60,
          "static": true
        },
        {
          "name": "state/open"
        },
        {
          "name": "state/reachable"
        },
        {
          "name": "state/tilt",
          "refresh.interval": 300,
          "read": {
            "at": "0x0009",
            "cl": "0x0102",
            "ep": 6,
            "fn": "zcl"
          },
          "parse": {
            "at": "0x0009",
            "cl": "0x0102",
            "ep": 6,
            "eval": "Item.val = Attr.val;",
            "fn": "zcl"
          },
          "default": 0
        }
      ]
    }
  ],
  "bindings": [
    {
      "bind": "unicast",
      "src.ep": 6,
      "cl": "0x0102",
      "report": [
        {
          "at": "0x0008",
          "dt": "0x20",
          "min": 1,
          "max": 300,
          "change": "0x00000001"
        },
        {
          "at": "0x0009",
          "dt": "0x20",
          "min": 1,
          "max": 300,
          "change": "0x00000001"
        }
      ]
    }
  ]
}