bt_mesh_model_send relayable?

Hello, 

I am looking into relay nodes and my nodes do not seem to relay,

All nodes are provisioned with the same provisioner and have the same keys 

The following configs are enabled - 

CONFIG_BT_MESH_RELAY=y
CONFIG_BT_MESH_RELAY_ENABLED=y
CONFIG_BT_MESH_RELAY_RETRANSMIT_COUNT=5


The messages that are sent are vendor model messages using:
bt_mesh_model_send sent to BT_MESH_ADDR_ALL_NODES. 

bt_mesh_model_send does not have any acknowledgement, am I correct in saying bt_mesh_model_send cannot be relayed? and if not any pointers what to look for in this issue
Parents
  • Hi,

    I've picked up your case and will be looking into this early next week. In the meanwhile, do you got access to the Mesh specification? And which version of NCS are you using (it is relevant w.r.t what version of the Mesh spec you're using)?

    Kind regards,
    Andreas

  • Here is my test process that may aid in finding the issue:

    1 - Flash Unit A & B with the same project

    2 - Bind Keys to both A&B for VND models

    3 - A sends a message X address, B should relay

    Code to send Vendor message: 

    Node: the code below works, no issues with BT_MESH_ADDR_ALL_NODES, however no relays

    struct bt_mesh_model *mod = vnd_mod_pub_ctx.mod;
    
        struct bt_mesh_msg_ctx ctx = {
                .addr = sendAddr,
                .app_idx = mod->keys[0],
                .send_ttl = BT_MESH_TTL_DEFAULT,
        };
    
        BT_MESH_MODEL_BUF_DEFINE(buf, opcode, len);
        bt_mesh_model_msg_init(&buf, opcode);
    
        net_buf_simple_add_mem(&buf, bufferIn, len);
        net_buf_simple_add(&buf, '\0');
    
        return bt_mesh_model_send(mod, &ctx, &buf, &bmns_vnd_model_cb, NULL);

    struct bt_mesh_model_pub vnd_mod_pub_ctx;
    
    static struct bt_mesh_model bmns_vendor_models[] = {
            BT_MESH_MODEL_VND_CB(CONFIG_BMNS_COMPANY_ID,
                                 BMNS_VND_MODEL_SRV_OPCODE,
                                 opcode_list,
                                 &vnd_mod_pub_ctx,
                                 NULL,
                                 NULL)
    };

    build output configs (set in prj.conf, this snippet is to show they are actually set)

    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_BT_MESH_RELAY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_BT_MESH_RELAY_ENABLED, 1);

    from the nRF mesh app, relay is enabled, retransmission count is
    "5 retransmits and total transmissions: 6"

    retransmission interval 20ms

    Note: 

    Sending it to All Nodes, All relays, or to node B, is received by node B, and not relayed on.
    Sending it to a different address, is not received by node B

  • Apologies for the delay, I am working on another project, I will look at this next week.

  • No worries, take the time you require and feel free to ping me again when you're ready

    Kind regards,
    Andreas

  • I will be on the nodes back on tomorrow. 

    I have a question that may give me a head start on them tomorrow. Would I be able to view the config on the node, I.e. the config server data such as Relay enabled?, Group Addresses etc. 

  • Update command found for relay:

    bt_mesh_relay_get
  •  

    1 - Acknowledged.

    2 - BT_MESH_ADDR_ALL_NODES is not required, This has only been done to see if the message is relayed to all. For the application, there is only one master and several nodes. This will be changed to the node address. 

    3 - TTL is definitely higher than 1. 


    Could you elaborate some more regarding how you are able to observe if a message has been relayed or not?

    The setup was, on/off example, tested until the on/off stopped working with distance. Then moved back within range and another node was added and moved the same distance from the first node. This means the second node not reach the provisioner on its own.

    These distance points become the benchmark for my project. 

    Where you able to confirm if I can set any logs for relays?

Reply
  •  

    1 - Acknowledged.

    2 - BT_MESH_ADDR_ALL_NODES is not required, This has only been done to see if the message is relayed to all. For the application, there is only one master and several nodes. This will be changed to the node address. 

    3 - TTL is definitely higher than 1. 


    Could you elaborate some more regarding how you are able to observe if a message has been relayed or not?

    The setup was, on/off example, tested until the on/off stopped working with distance. Then moved back within range and another node was added and moved the same distance from the first node. This means the second node not reach the provisioner on its own.

    These distance points become the benchmark for my project. 

    Where you able to confirm if I can set any logs for relays?

Children
No Data
Related