This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Subscribe a group address for the Mesh Message

Currently, I am working with the Nordic SimpleOnOff Model of the Light switch in the Bluetooth Mesh.

I am good that the light in the mesh can be set on/off after Provisioned.

Now, i would like to divide the Board into 2 Groups, let's said Group A and Group B.

But i am not very sure how to work with that?

How can i drive a specify device to bind to a specific Group Address? I believe that i should subscribe to some service, but any sample code or pointer that can show how can I subscribe the service for that "group"?

After that, how should i send the message to "This Group" of light for On/Off.

I tried to study the code of access_model_publish, from the Mesh SDK, but seems it did not have a way to specify the Group address for boardcast.

And how about the Receiver? Should i define another set of OpCode, like SIMPLE_ON_OFF_OPCODE_GROUP_SET to do the operation there?

Parents
  • I wouldn't suggest to use 2 clients to talk to 2 groups. You can simply change public address of one client using access_model_publish_address_set().

    So if you have 2 group addresses you want to send to and want to switch between them you do this:

    ERROR_CHECK(dsm_address_publish_add(group_address1, &m_group_address_handle1));
    ERROR_CHECK(dsm_address_publish_add(group_address2, &m_group_address_handle2));
    

    You call above codes only once. The purpose is to add the 2 group address into DSM database.

    Now if you want the client publication address to group address 1 , you call this:

    access_model_publish_address_set(yourgroupclient.model_handle, m_group_address_handle1));
    

    If you want the client to send to group address 2 you call this:

    access_model_publish_address_set(yourgroupclient.model_handle, m_group_address_handle2));
    

    You can switch between them, call above function every time you switch.

    The way we use the last client as group client, is just the way we chose to do that. You can use any client to send to group address, just apply the code above.

  • Hi Hung,

    I'm trying to implement your solution in Mesh 1.0.1, but it is crashing at:

    ERROR_CHECK(dsm_address_publish_add(GROUP_ADDRESS_CUSTOM, &m_group_handle2));

    With error code 4 ("No Memory for operation"?).

    What could it be?

    My experiment is to have 2 groups, one for 2 of the servers and another for all 3 servers.

    So far I modified the do_config_step() in provisioner.c to assign to different groups (as a first step), like:

                if ( m_target_address % 0x02)
                {
                    address.value  = GROUP_ADDRESS_CUSTOM;
                }
                else
                {
                    address.value  = GROUP_ADDRESS;
                }


    This is ok, as I'm able to talk with the nodes that subscribed to GROUP_ADDRESS.

    Now I want one of the clients to speak with the node that was assigned to GROUP_ADDRESS_CUSTOM, but it's failing as described above...

Reply
  • Hi Hung,

    I'm trying to implement your solution in Mesh 1.0.1, but it is crashing at:

    ERROR_CHECK(dsm_address_publish_add(GROUP_ADDRESS_CUSTOM, &m_group_handle2));

    With error code 4 ("No Memory for operation"?).

    What could it be?

    My experiment is to have 2 groups, one for 2 of the servers and another for all 3 servers.

    So far I modified the do_config_step() in provisioner.c to assign to different groups (as a first step), like:

                if ( m_target_address % 0x02)
                {
                    address.value  = GROUP_ADDRESS_CUSTOM;
                }
                else
                {
                    address.value  = GROUP_ADDRESS;
                }


    This is ok, as I'm able to talk with the nodes that subscribed to GROUP_ADDRESS.

    Now I want one of the clients to speak with the node that was assigned to GROUP_ADDRESS_CUSTOM, but it's failing as described above...

Children
No Data
Related