NCS Mesh: Transferring Composition Data fails

We have relatively big model composition, and reading it via nRF Mesh app fails if it exceeds 21 segment message.

However the limit I assume should be at 32 segments and is set by CONFIG_BT_MESH_TX_SEG_MAX. Also I set CONFIG_BT_MESH_ADV_BUF_COUNT to be larger than TX_SEG_MAX by 3 as specified in its description.

Is there any other limitations for composition size?

I am using nRF Connect SDK v1.7.

Parents
  • Hi,

    Currently only one composition data page is described in the mesh specification, and so if you put too much on the device then you will exceed the available space for composition data. The spec mentions more composition pages, but unfortunately they are only reserved for future use

    Mesh Profile Specification v1.0.1 section 4.2.1 Composition Data. The size of the composition data pages are restricted to the maximum useful access payload size of 376 octets, and composition data page 0 should contain, among other things, element descriptions.

  • Hi,

    Are you receiving any error code on the nRF side?

  • Hi, is there any update regarding this issue?

  • Hi,

    I have been sick the past week and out of office so there haven't been any progress on this issue yet. Did you try increasing CONFIG_BT_MESH_TX_SEG_MSG_COUNT more than 3? Do you get the same error?

  • Hi, I tried to set it to 5 and 15. However still unable to read Device Composition. Below snippet of the error.

    So error slightly changed, if I do not set this config then I have previously posted error.

  • Hi,

    We have tried to reproduce the issue on our side but didn't succeed. What example are you testing with and have you made any other modifications? 

    Can you give me a step-by-step procedure on how to reproduce this? 

  • Hi, thanks for reply.

    I reproduced the issue with samples/bluetooth/mesh/light project. However I do not always get error from the device, most of the time composition reading fails without anything printed out via RTT.

    I used nrf52840dk board. And made following modifications. In prj.conf added:

    CONFIG_BT_MESH_DK_PROV_OOB_BLINK=n
    CONFIG_BT_MESH_DK_PROV_OOB_BUTTON=n
    
    CONFIG_BT_MESH_LIGHT_CTL_SRV=y
    CONFIG_BT_MESH_LIGHTNESS_SRV=y
    CONFIG_BT_MESH_LIGHT_TEMP_SRV=y
    
    CONFIG_BT_MESH_DTT_SRV=y
    CONFIG_BT_MESH_DTT_SRV_PERSISTENT=y
    CONFIG_BT_MESH_PONOFF_SRV=y
    CONFIG_BT_MESH_SCENE_SRV=y
    CONFIG_BT_MESH_LVL_SRV=y
    CONFIG_BT_MESH_TIME_SRV=y
    CONFIG_BT_MESH_SCHEDULER_SRV=y
    CONFIG_BT_MESH_SENSOR_SRV=y
    CONFIG_BT_MESH_SENSOR_SRV_SENSORS_MAX=6
    CONFIG_BT_MESH_SENSOR_SRV_SETTINGS_MAX=12
    CONFIG_BT_MESH_PROP_SRV=y
    CONFIG_BT_MESH_LIGHT_CTRL_SRV=y
    CONFIG_BT_MESH_LIGHT_HSL_SRV=y
    
    # Set RTT console
    CONFIG_USE_SEGGER_RTT=y
    CONFIG_CONSOLE=y
    CONFIG_RTT_CONSOLE=y
    CONFIG_UART_CONSOLE=n
    
    # Set logging
    CONFIG_LOG=y
    CONFIG_LOG_DEFAULT_LEVEL=4
    
    # Set Mesh Buffer Size
    CONFIG_BT_MESH_ADV_BUF_COUNT=35
    CONFIG_BT_MESH_TX_SEG_MAX=32
    
    # Set Zephyr BT Controller
    CONFIG_BT_LL_SOFTDEVICE=n
    CONFIG_BT_LL_SW_SPLIT=y
    
    # Error Tracing
    CONFIG_RESET_ON_FATAL_ERROR=n
    CONFIG_DEBUG=y
    CONFIG_DEBUG_INFO=y
    CONFIG_DEBUG_OPTIMIZATIONS=n
    CONFIG_ASSERT_NO_MSG_INFO=n
    CONFIG_THREAD_ANALYZER=y
    CONFIG_THREAD_NAME=y

    In model_handler.c added:

    /* Light Lightness Server */
    static void light_set(struct bt_mesh_lightness_srv *srv,
    		      struct bt_mesh_msg_ctx *ctx,
    		      const struct bt_mesh_lightness_set *set,
    		      struct bt_mesh_lightness_status *rsp)
    {
    }
    
    static void light_get(struct bt_mesh_lightness_srv *srv,
    		      struct bt_mesh_msg_ctx *ctx,
    		      struct bt_mesh_lightness_status *rsp)
    {
    }
    
    
    /* Light CTL */
    static void light_ctl_temp_set(struct bt_mesh_light_temp_srv *srv,
    			struct bt_mesh_msg_ctx *ctx,
    			const struct bt_mesh_light_temp_set *set,
    			struct bt_mesh_light_temp_status *rsp)
    {
    }
    
    static void light_ctl_temp_get(struct bt_mesh_light_temp_srv *srv,
    			struct bt_mesh_msg_ctx *ctx,
    			struct bt_mesh_light_temp_status *rsp)
    {	
    }
    
    static void light_ctl_range_update(struct bt_mesh_light_temp_srv *srv,
    			struct bt_mesh_msg_ctx *ctx,
    			const struct bt_mesh_light_temp_range *old_range,
    			const struct bt_mesh_light_temp_range *new_range)
    {	
    }
    static const struct bt_mesh_lightness_srv_handlers ctl_lightness_srv_handlers = {
    	.light_set = light_set,
    	.light_get = light_get,
    };
    
    static const struct bt_mesh_light_temp_srv_handlers ctl_light_temp_handlers = {
    	.set = light_ctl_temp_set,
    	.get = light_ctl_temp_get,
    	.range_update = light_ctl_range_update,
    };
    
    static struct bt_mesh_light_ctl_srv light_ctl_srv = 
    	BT_MESH_LIGHT_CTL_SRV_INIT(&ctl_lightness_srv_handlers, &ctl_light_temp_handlers);
    
    static struct bt_mesh_lightness_srv lightness_srv =
    	BT_MESH_LIGHTNESS_SRV_INIT(&ctl_lightness_srv_handlers);
    
    /* Light LC Server */
    static struct bt_mesh_light_ctrl_srv light_ctrl_srv =
    	BT_MESH_LIGHT_CTRL_SRV_INIT(&light_ctl_srv.lightness_srv);
    
    /* Scene Server */
    static struct bt_mesh_scene_srv scene_srv[7];
    
    /* Generic Property Server */
    static struct bt_mesh_prop prop[2] = {0};
    static struct bt_mesh_prop_srv prop_srv = BT_MESH_PROP_SRV_INIT((struct bt_mesh_prop *const)&prop, 2, NULL, NULL);
    static struct bt_mesh_prop_srv prop_srv1 = BT_MESH_PROP_SRV_INIT((struct bt_mesh_prop *const)&prop, 2, NULL, NULL);
    static struct bt_mesh_prop_srv prop_srv2 = BT_MESH_PROP_SRV_INIT((struct bt_mesh_prop *const)&prop, 2, NULL, NULL);
    static struct bt_mesh_prop_srv prop_srv3 = BT_MESH_PROP_SRV_INIT((struct bt_mesh_prop *const)&prop, 2, NULL, NULL);
    static struct bt_mesh_prop_srv prop_srv4 = BT_MESH_PROP_SRV_INIT((struct bt_mesh_prop *const)&prop, 2, NULL, NULL);
    
    
    
    static struct bt_mesh_elem elements[] = {
    	BT_MESH_ELEM(
    		1, BT_MESH_MODEL_LIST(
    			BT_MESH_MODEL_CFG_SRV,
    			BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    			BT_MESH_MODEL_ONOFF_SRV(&led_ctx[0].srv),
    			BT_MESH_MODEL_LIGHT_CTL_SRV(&light_ctl_srv),
    			BT_MESH_MODEL_SCENE_SRV(&scene_srv[0]),
    			BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    			BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    			BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    			),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		2, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[1].srv),
    		BT_MESH_MODEL_LIGHT_TEMP_SRV(&light_ctl_srv.temp_srv),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv1),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv1),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv1)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		3, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[2].srv),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv2),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv2),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv2)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		4, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv3),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv3),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv3)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		5, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_LIGHT_CTRL_SRV(&light_ctrl_srv),
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[1])
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		6, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv4),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv4),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv4)
    		),
    		BT_MESH_MODEL_NONE),
    
    
    
    	BT_MESH_ELEM(
    		7, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    		BT_MESH_MODEL_LIGHTNESS_SRV(&lightness_srv), 
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[2]),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		8, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    		BT_MESH_MODEL_LIGHTNESS_SRV(&lightness_srv), 
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[3]),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		9, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    		BT_MESH_MODEL_LIGHTNESS_SRV(&lightness_srv), 
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[4]),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		10, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    		BT_MESH_MODEL_LIGHTNESS_SRV(&lightness_srv), 
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[5]),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		11, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    		BT_MESH_MODEL_LIGHTNESS_SRV(&lightness_srv), 
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[6]),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    		),
    		BT_MESH_MODEL_NONE),
    };

    For reading composition I used nRF Mesh app.

Reply
  • Hi, thanks for reply.

    I reproduced the issue with samples/bluetooth/mesh/light project. However I do not always get error from the device, most of the time composition reading fails without anything printed out via RTT.

    I used nrf52840dk board. And made following modifications. In prj.conf added:

    CONFIG_BT_MESH_DK_PROV_OOB_BLINK=n
    CONFIG_BT_MESH_DK_PROV_OOB_BUTTON=n
    
    CONFIG_BT_MESH_LIGHT_CTL_SRV=y
    CONFIG_BT_MESH_LIGHTNESS_SRV=y
    CONFIG_BT_MESH_LIGHT_TEMP_SRV=y
    
    CONFIG_BT_MESH_DTT_SRV=y
    CONFIG_BT_MESH_DTT_SRV_PERSISTENT=y
    CONFIG_BT_MESH_PONOFF_SRV=y
    CONFIG_BT_MESH_SCENE_SRV=y
    CONFIG_BT_MESH_LVL_SRV=y
    CONFIG_BT_MESH_TIME_SRV=y
    CONFIG_BT_MESH_SCHEDULER_SRV=y
    CONFIG_BT_MESH_SENSOR_SRV=y
    CONFIG_BT_MESH_SENSOR_SRV_SENSORS_MAX=6
    CONFIG_BT_MESH_SENSOR_SRV_SETTINGS_MAX=12
    CONFIG_BT_MESH_PROP_SRV=y
    CONFIG_BT_MESH_LIGHT_CTRL_SRV=y
    CONFIG_BT_MESH_LIGHT_HSL_SRV=y
    
    # Set RTT console
    CONFIG_USE_SEGGER_RTT=y
    CONFIG_CONSOLE=y
    CONFIG_RTT_CONSOLE=y
    CONFIG_UART_CONSOLE=n
    
    # Set logging
    CONFIG_LOG=y
    CONFIG_LOG_DEFAULT_LEVEL=4
    
    # Set Mesh Buffer Size
    CONFIG_BT_MESH_ADV_BUF_COUNT=35
    CONFIG_BT_MESH_TX_SEG_MAX=32
    
    # Set Zephyr BT Controller
    CONFIG_BT_LL_SOFTDEVICE=n
    CONFIG_BT_LL_SW_SPLIT=y
    
    # Error Tracing
    CONFIG_RESET_ON_FATAL_ERROR=n
    CONFIG_DEBUG=y
    CONFIG_DEBUG_INFO=y
    CONFIG_DEBUG_OPTIMIZATIONS=n
    CONFIG_ASSERT_NO_MSG_INFO=n
    CONFIG_THREAD_ANALYZER=y
    CONFIG_THREAD_NAME=y

    In model_handler.c added:

    /* Light Lightness Server */
    static void light_set(struct bt_mesh_lightness_srv *srv,
    		      struct bt_mesh_msg_ctx *ctx,
    		      const struct bt_mesh_lightness_set *set,
    		      struct bt_mesh_lightness_status *rsp)
    {
    }
    
    static void light_get(struct bt_mesh_lightness_srv *srv,
    		      struct bt_mesh_msg_ctx *ctx,
    		      struct bt_mesh_lightness_status *rsp)
    {
    }
    
    
    /* Light CTL */
    static void light_ctl_temp_set(struct bt_mesh_light_temp_srv *srv,
    			struct bt_mesh_msg_ctx *ctx,
    			const struct bt_mesh_light_temp_set *set,
    			struct bt_mesh_light_temp_status *rsp)
    {
    }
    
    static void light_ctl_temp_get(struct bt_mesh_light_temp_srv *srv,
    			struct bt_mesh_msg_ctx *ctx,
    			struct bt_mesh_light_temp_status *rsp)
    {	
    }
    
    static void light_ctl_range_update(struct bt_mesh_light_temp_srv *srv,
    			struct bt_mesh_msg_ctx *ctx,
    			const struct bt_mesh_light_temp_range *old_range,
    			const struct bt_mesh_light_temp_range *new_range)
    {	
    }
    static const struct bt_mesh_lightness_srv_handlers ctl_lightness_srv_handlers = {
    	.light_set = light_set,
    	.light_get = light_get,
    };
    
    static const struct bt_mesh_light_temp_srv_handlers ctl_light_temp_handlers = {
    	.set = light_ctl_temp_set,
    	.get = light_ctl_temp_get,
    	.range_update = light_ctl_range_update,
    };
    
    static struct bt_mesh_light_ctl_srv light_ctl_srv = 
    	BT_MESH_LIGHT_CTL_SRV_INIT(&ctl_lightness_srv_handlers, &ctl_light_temp_handlers);
    
    static struct bt_mesh_lightness_srv lightness_srv =
    	BT_MESH_LIGHTNESS_SRV_INIT(&ctl_lightness_srv_handlers);
    
    /* Light LC Server */
    static struct bt_mesh_light_ctrl_srv light_ctrl_srv =
    	BT_MESH_LIGHT_CTRL_SRV_INIT(&light_ctl_srv.lightness_srv);
    
    /* Scene Server */
    static struct bt_mesh_scene_srv scene_srv[7];
    
    /* Generic Property Server */
    static struct bt_mesh_prop prop[2] = {0};
    static struct bt_mesh_prop_srv prop_srv = BT_MESH_PROP_SRV_INIT((struct bt_mesh_prop *const)&prop, 2, NULL, NULL);
    static struct bt_mesh_prop_srv prop_srv1 = BT_MESH_PROP_SRV_INIT((struct bt_mesh_prop *const)&prop, 2, NULL, NULL);
    static struct bt_mesh_prop_srv prop_srv2 = BT_MESH_PROP_SRV_INIT((struct bt_mesh_prop *const)&prop, 2, NULL, NULL);
    static struct bt_mesh_prop_srv prop_srv3 = BT_MESH_PROP_SRV_INIT((struct bt_mesh_prop *const)&prop, 2, NULL, NULL);
    static struct bt_mesh_prop_srv prop_srv4 = BT_MESH_PROP_SRV_INIT((struct bt_mesh_prop *const)&prop, 2, NULL, NULL);
    
    
    
    static struct bt_mesh_elem elements[] = {
    	BT_MESH_ELEM(
    		1, BT_MESH_MODEL_LIST(
    			BT_MESH_MODEL_CFG_SRV,
    			BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    			BT_MESH_MODEL_ONOFF_SRV(&led_ctx[0].srv),
    			BT_MESH_MODEL_LIGHT_CTL_SRV(&light_ctl_srv),
    			BT_MESH_MODEL_SCENE_SRV(&scene_srv[0]),
    			BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    			BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    			BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    			),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		2, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[1].srv),
    		BT_MESH_MODEL_LIGHT_TEMP_SRV(&light_ctl_srv.temp_srv),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv1),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv1),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv1)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		3, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[2].srv),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv2),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv2),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv2)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		4, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv3),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv3),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv3)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		5, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_LIGHT_CTRL_SRV(&light_ctrl_srv),
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[1])
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		6, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv4),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv4),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv4)
    		),
    		BT_MESH_MODEL_NONE),
    
    
    
    	BT_MESH_ELEM(
    		7, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    		BT_MESH_MODEL_LIGHTNESS_SRV(&lightness_srv), 
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[2]),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		8, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    		BT_MESH_MODEL_LIGHTNESS_SRV(&lightness_srv), 
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[3]),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		9, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    		BT_MESH_MODEL_LIGHTNESS_SRV(&lightness_srv), 
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[4]),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		10, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    		BT_MESH_MODEL_LIGHTNESS_SRV(&lightness_srv), 
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[5]),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    		),
    		BT_MESH_MODEL_NONE),
    
    	BT_MESH_ELEM(
    		11, BT_MESH_MODEL_LIST(
    		BT_MESH_MODEL_ONOFF_SRV(&led_ctx[3].srv),
    		BT_MESH_MODEL_HEALTH_SRV(&health_srv, &health_pub),
    		BT_MESH_MODEL_LIGHTNESS_SRV(&lightness_srv), 
    		BT_MESH_MODEL_SCENE_SRV(&scene_srv[6]),
    		BT_MESH_MODEL_PROP_SRV_USER(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_MFR(&prop_srv),
    		BT_MESH_MODEL_PROP_SRV_ADMIN(&prop_srv)
    		),
    		BT_MESH_MODEL_NONE),
    };

    For reading composition I used nRF Mesh app.

Children
Related