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

Get serial type command response over mesh

Hi!

1. We are using 1 Client over Serial and 30+ Server nodes over mesh network

When you want to know FW info regarding Client, you can call serial command like Opcode: 0x0a, which returns Firmware ID Data for the Client node.

Can you somehow run this commands over mesh, or how can I get Mesh node Firmware ID on request, or maybe TX Power Get?

2. Is there any Mesh packet documentation available on nordic site, other than just basic  Mesh packet (0xab) and then Data as payload, which encapsulates another packet with different Opcodes for Mesh which I can only see in class ConfigurationClient(Model) in Python interactive_pyaci script?

3. How much data is too much for mesh?
In our system I want to know as soon as possible if some node gets disconnected for monitoring status of the whole system.

For this, we currently have Server node Health ping set on 30 seconds.
We also have other devices which are not in mesh network but their PING is send over mesh to Client with their current RSS of Server nodes for location purposes. This is done each 10 seconds for each device.

Now in this case, if you have many devices pinging all the time your SERIAL port can be spamming all the time with different data about system status.

The problem happens when you try to run DFU over mesh, because our system has RS485 connection for Serial and we don't have Flow control and this devices are spamming all the time with data and DFU fails.
We changed Serial protocol to include HEADER/FOOTER of the packet, so we can remove corrupted messages and resend them but still not luck.

What is too much data for DFU to still work normally? Should DFU work anyway and we have problem elsewhere or was this tested only on your Development boards which have Flow control and this maybe cannot work properly?

Thank you for your response!

  • Hi Tomi, 

    1. You can use the composition data to get the firmware ID ( CID, PID and VID). This requires you to have a configuration client to read the composition data. Another option is to to use the Generic Property States model ( 3.1.8.1 in Mesh Model spec) where you can define the Generic Manufacturer Property for your firmware ID. 

    2. I assume you want to know the documentation for mesh data packet. For that you would need to look into mesh spec: https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=457092

    3. I'm not sure how you can combine DFU and PyACI together. As far as I know we don't have the firmware support on the serial interface to receive DFU image. 

    This is not what we have tested so I dont have a number. But can you pause the report of ping message to PC when you do DFU update ? 

    I'm not sure using Health message as  a PING message is a good idea, it better to use Heartbeat message. 

  • Thank you for 1 and 2 answer!

    Regarding 3.

    I am not combining PyACI and DFU together. I just meant looking at PyACI for mesh packet documentation.
    We have DFU on Android side sending via Serial RS-485 (translated).

    For PING we just set HEALTH model on SERVER to unicast address of Client on 10 seconds, so that we get Node(0xXXX) Alive messages.

    Would it be better to not set Health model and use Heatbeat?

  • Yes, I would suggest to use Heartbeat instead of health. Here is the definition of the use of heartbeat : 

    In order to determine if a node is still present and active within a mesh network, it is necessary to receive a message from this node. Sending a message to each and every node in the mesh network to elicit a response would be very wasteful of energy, and therefore each node can be configured to send a single message periodically. This message is called the Heartbeat message.
    The Heartbeat message can be used for two main functions. The first function is the determination that a node is still active within a mesh network. The second function is the determination of how far a node is away.

    Health is more about reporting error. 

    I still don't really understand regarding how you do DFU ? via Serial or via BLE or via BLE Mesh ? Which DFU you are talking about ? Mesh DFU or our normal Secure DFU ? 

  • Ok, we will try with Heartbeat mesages! So basically health should be set up so that it only reports errors then?

    Regarding DFU:
    We run DFU on Android tablet with DFU script translated from python to Java. Here we have connected Client/Provisioner via RS-485 to this tablet. We are doing Mesh DFU, so that we generate DFU packets in Java and send them vial serial to Client each 300-500ms, but (currently) meanwhile we get everything else on serial port like alive messages or any PING statuses we have, while running DFU, so then you can have serial port sending something each 50ms or less

  • Ok so you are doing Mesh DFU via UART (RS485) to a node and at the same time receiving some data from the node. And at the same time you also have serial library enabled. I don't think we have tested it. I would suggest to have a switch to turn off the serial library when you are doing DFU. Or you would need to think of having two dongle one for DFU and one for serial interface. 

Related